@laceio/sdk 0.1.1 → 0.1.2-canary.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 (388) hide show
  1. package/dist/{TransactionBuilder-DrB3NVTi.cjs → TransactionBuilder-X1H9Gze6.cjs} +64 -14
  2. package/dist/{TransactionBuilder-V6aLx4SV.js → TransactionBuilder-bp2aMDhg.js} +23 -15
  3. package/dist/{_polyfill-buffer-patch-BnPVerlG.cjs → _polyfill-buffer-patch-CM8X7JiY.cjs} +21 -2
  4. package/dist/_polyfill-buffer-patch-yNxN4d5E.js +1467 -0
  5. package/dist/_web-crypto-random-bytes-Bo-GTcRS.js +197 -0
  6. package/dist/acc-module-4iIUv6My.cjs +27654 -0
  7. package/dist/acc-module-Cmj8EsIb.js +27624 -0
  8. package/dist/account-BOQruszJ.js +6 -0
  9. package/dist/account-BUOj4pYJ.cjs +11 -0
  10. package/dist/account-call-7wnopBq0.cjs +5 -0
  11. package/dist/account-call-B9d_2Xwi.js +4 -0
  12. package/dist/account-call-Bd4Rpbvt.cjs +323 -0
  13. package/dist/account-call-C3CkDqEC.js +276 -0
  14. package/dist/account-guards-BtjTGxDZ.cjs +42 -0
  15. package/dist/account-guards-D9Lu5T3W.js +36 -0
  16. package/dist/account-tokens-DvkOFVON.js +16 -0
  17. package/dist/account-tokens-nwcvwLu4.cjs +21 -0
  18. package/dist/{activity-type.stable-BJEfeLxL.cjs → activity-type-Ch6ljxBy.cjs} +2 -1
  19. package/dist/{activity-type.stable-C76_hWd7.js → activity-type-GsJGWs-3.js} +2 -1
  20. package/dist/address-B9ntKL8K.js +13761 -0
  21. package/dist/address-BXp-mY8H.cjs +11270 -0
  22. package/dist/{address-book-address-validator-DIUolI-s.js → address-book-address-validator-0J9XAADH.js} +2 -2
  23. package/dist/address-book-address-validator-DK0dnsRS.cjs +41 -0
  24. package/dist/address-book-address-validator-Di_ywo8M.js +39 -0
  25. package/dist/{address-book-address-validator-DNwQGlOB.cjs → address-book-address-validator-Dte_YQ2L.cjs} +2 -2
  26. package/dist/artefact-loader-BWWYAD7E.cjs +183 -0
  27. package/dist/artefact-loader-Dik4HIfv.js +160 -0
  28. package/dist/auto-dismiss-failure-on-success-C-qoJuid.cjs +37 -0
  29. package/dist/auto-dismiss-failure-on-success-s8MGDEIu.js +31 -0
  30. package/dist/bip32-D6wd_QMn.cjs +3851 -0
  31. package/dist/bitcoin-data-provider-BYPSmuZS.js +21 -0
  32. package/dist/bitcoin-data-provider-w1oEDSU3.cjs +26 -0
  33. package/dist/bitcoin.cjs +45 -0
  34. package/dist/bitcoin.d.ts +29906 -1
  35. package/dist/bitcoin.js +20 -0
  36. package/dist/{blockfrost-tx-submit-provider-DPTrapz-.js → blockfrost-tx-submit-provider-CBWQ0wK9.js} +5 -157
  37. package/dist/{blockfrost-tx-submit-provider-BAIzV5o3.cjs → blockfrost-tx-submit-provider-CLNQ5ycR.cjs} +3 -167
  38. package/dist/bn-d3nSOIf7.cjs +2553 -0
  39. package/dist/browser-B1eMbDwh.js +7468 -0
  40. package/dist/bytes.vo-BB7_4JK6.js +23 -0
  41. package/dist/bytes.vo-BNRquqaO.cjs +34 -0
  42. package/dist/cardano-DfPwhwm-.js +3 -0
  43. package/dist/{cardano-network-id.vo-DSxrFk9S.cjs → cardano-network-id.vo-BEDPn6Li.cjs} +1 -1
  44. package/dist/{cardano-network-id.vo-CK1tNQDg.js → cardano-network-id.vo-Cfpvbod9.js} +1 -1
  45. package/dist/cardano.cjs +22 -18
  46. package/dist/cardano.d.ts +16962 -1716
  47. package/dist/cardano.js +16 -11
  48. package/dist/client-DXBLHk7K.cjs +808 -0
  49. package/dist/codecs-Cswkg7Tm.cjs +4051 -0
  50. package/dist/codecs-Dc1Krpbt.js +3903 -0
  51. package/dist/{const-C84qHkjp.js → const-BJfIK_G-.js} +4 -4
  52. package/dist/const-BhYOdznB.cjs +42 -0
  53. package/dist/const-BsnjG2_Q.cjs +32071 -0
  54. package/dist/const-CUnCl5U0.js +13 -0
  55. package/dist/{const-DXk2tFyv.js → const-CjmfjBP3.js} +1 -1
  56. package/dist/{const-BDEg2Trq.cjs → const-D-eZIS4n.cjs} +4 -4
  57. package/dist/const-D0CbQlo4.js +154 -0
  58. package/dist/{const-BY8B3_0_.cjs → const-iwzZEE_w.cjs} +1 -1
  59. package/dist/contract-1R86jhSw.js +171 -0
  60. package/dist/contract-MKLzYVkW.cjs +189 -0
  61. package/dist/create-add-accounts-Brqk84vF.js +102 -0
  62. package/dist/create-add-accounts-DzXIh7Ot.cjs +114 -0
  63. package/dist/{delegation-tx-builder-CRpLP6jH.cjs → delegation-tx-builder-Dof_0N_d.cjs} +6 -6
  64. package/dist/{delegation-tx-builder-CGVqlaFE.js → delegation-tx-builder-Dy3-2Auz.js} +5 -5
  65. package/dist/{deregistration-tx-builder-DZGwB4cz.cjs → deregistration-tx-builder-CcLwyFpj.cjs} +6 -6
  66. package/dist/{deregistration-tx-builder-B-CrUyX6.js → deregistration-tx-builder-QkWW_gWl.js} +5 -5
  67. package/dist/device-commitment-hex.vo-5wFtQvDS.js +26 -0
  68. package/dist/device-commitment-hex.vo-CT3RmAug.cjs +31 -0
  69. package/dist/device-readers-CUHYoYOH.js +145 -0
  70. package/dist/device-readers-CdxS2btd.cjs +168 -0
  71. package/dist/device-readers-D_JZeNL2.cjs +8 -0
  72. package/dist/device-readers-DwSNCGPP.js +4 -0
  73. package/dist/dist-BMi5ZjEq.cjs +43175 -0
  74. package/dist/dist-BtIq4XFn.cjs +535 -0
  75. package/dist/dist-C3SHC_Ho.cjs +1394 -0
  76. package/dist/dist-CykEjYEX.cjs +3814 -0
  77. package/dist/dist-Dcsxh3be.cjs +3452 -0
  78. package/dist/dist-DqJfSlTd.cjs +4413 -0
  79. package/dist/dist-nTZ70qj7.cjs +1306 -0
  80. package/dist/{earn-rewards-tx-builder-D5sUT5v8.cjs → earn-rewards-tx-builder-BP5JMIKS.cjs} +6 -6
  81. package/dist/{earn-rewards-tx-builder-BDbTDZmD.js → earn-rewards-tx-builder-Cku4BmNU.js} +5 -5
  82. package/dist/enc-key-circuits-B7BjgUL9.js +13 -0
  83. package/dist/enc-key-circuits-BLrZrBVI.cjs +24 -0
  84. package/dist/english-Byb9M0E_.cjs +2057 -0
  85. package/dist/envelopes-BGoO_v8m.js +1621 -0
  86. package/dist/envelopes-CH25R-DN.cjs +1722 -0
  87. package/dist/errors-BIftM8ZN.cjs +688 -0
  88. package/dist/errors-DSq5wUwt.js +466 -0
  89. package/dist/esm-HBSUQw3w.js +384 -0
  90. package/dist/esm-LZuaZjMf.cjs +389 -0
  91. package/dist/experimental.cjs +7349 -0
  92. package/dist/experimental.d.ts +86279 -0
  93. package/dist/experimental.js +7184 -0
  94. package/dist/gated-call-CDCVZIK-.cjs +5 -0
  95. package/dist/gated-call-D-tT7P_t.js +722 -0
  96. package/dist/gated-call-D_VT2quk.js +4 -0
  97. package/dist/gated-call-DgJm1Mi_.cjs +787 -0
  98. package/dist/grant-circuits-DswmW3nI.cjs +71 -0
  99. package/dist/grant-circuits-Jxb5y1HW.js +42 -0
  100. package/dist/grant-rules-By07_eDi.js +6824 -0
  101. package/dist/grant-rules-BzVTWXS7.cjs +7099 -0
  102. package/dist/grant-spend-B3Md9L0n.js +215 -0
  103. package/dist/grant-spend-oWmzRsjH.cjs +217 -0
  104. package/dist/grant-status-B2y49iIu.js +2688 -0
  105. package/dist/grant-status-DOr3t_u8.cjs +2820 -0
  106. package/dist/grants-2BZ-qEVQ.js +5 -0
  107. package/dist/grants-BPoLSiMt.cjs +18 -0
  108. package/dist/grants-BoI5uwSF.cjs +272 -0
  109. package/dist/grants-CtofFu-e.js +213 -0
  110. package/dist/{group-cardano-addresses-by-account-B533oVXR.cjs → group-cardano-addresses-by-account-Bp0g4wEY.cjs} +3 -39
  111. package/dist/{group-cardano-addresses-by-account-RHKoEskR.js → group-cardano-addresses-by-account-SR8MMrZf.js} +5 -35
  112. package/dist/{guarded-transaction-signer-Bxl6_XNd.cjs → guarded-transaction-signer-MFpPg98D.cjs} +17 -18
  113. package/dist/{guarded-transaction-signer-CpKLj8Kp.js → guarded-transaction-signer-P6Rp1faj.js} +8 -15
  114. package/dist/hex-D9ITYbwt.cjs +263 -0
  115. package/dist/hex-mkXcV3pN.js +191 -0
  116. package/dist/http-client-B3N-TMxu.cjs +167 -0
  117. package/dist/http-client-TRlhDZGh.js +155 -0
  118. package/dist/identity-BMLuufva.cjs +263 -0
  119. package/dist/identity-DII6f-h7.js +233 -0
  120. package/dist/in-memory-wallet-integration-B2xzxORj.cjs +20741 -0
  121. package/dist/in-memory-wallet-integration-CBRiPjLO.js +130 -0
  122. package/dist/in-memory-wallet-integration-CULUB5Tf.cjs +240 -0
  123. package/dist/{in-memory-wallet-integration-D-qn65Kx.js → in-memory-wallet-integration-ChIOirMW.js} +5 -2
  124. package/dist/{in-memory-wallet-integration-Croiuopx.js → in-memory-wallet-integration-CljprQQV.js} +7 -104
  125. package/dist/{in-memory-wallet-integration-DVh9sRXa.cjs → in-memory-wallet-integration-Cm6P8sk6.cjs} +3 -2
  126. package/dist/in-memory-wallet-integration-TM9bBphA.js +20738 -0
  127. package/dist/{in-memory-wallet-integration-CnLYeX4-.cjs → in-memory-wallet-integration-t9I00R_V.cjs} +17 -108
  128. package/dist/index.cjs +84 -47
  129. package/dist/index.d.ts +37505 -10036
  130. package/dist/index.js +52 -24
  131. package/dist/{init-CLHuAMB-.js → init-0zzs9aqU.js} +4 -4
  132. package/dist/{init-U8c9yHYx.cjs → init-5KcGcBb5.cjs} +1 -1
  133. package/dist/{init-CigestoM.js → init-B3-1ghyx.js} +2 -2
  134. package/dist/init-B8U3ABhS.cjs +107 -0
  135. package/dist/init-BJn-8_hf.js +141 -0
  136. package/dist/init-BPU3j8sT.cjs +6 -0
  137. package/dist/init-BRzH6xu-2.cjs +2797 -0
  138. package/dist/init-BmzfDaKL.js +1142 -0
  139. package/dist/{init-C-jErzp5.cjs → init-BopV9ed4.cjs} +2 -2
  140. package/dist/init-BpHTq2R5.js +105 -0
  141. package/dist/init-BpSITBfF.js +39 -0
  142. package/dist/{init-DX4WyB0R.cjs → init-BrdVzxei.cjs} +3 -3
  143. package/dist/{init-LfyMo-sS.cjs → init-BwkU0ruo.cjs} +2 -2
  144. package/dist/{init-CB__aLD7.cjs → init-C-G32J12.cjs} +2 -2
  145. package/dist/init-C00gw1zi.js +422 -0
  146. package/dist/{init-TkPq_Ny_.js → init-C2RgrfZe.js} +1 -1
  147. package/dist/init-C5mYyFTv.js +3584 -0
  148. package/dist/{init-DcYY6zMD.js → init-C8URA2OX.js} +1 -1
  149. package/dist/init-CDkRynJa.js +2796 -0
  150. package/dist/{init-Cg9XdAru.js → init-CNM5m7M2.js} +4 -4
  151. package/dist/init-CR7BfztQ.cjs +18 -0
  152. package/dist/{init-CSHwHnfg.cjs → init-CSDpdu0Q.cjs} +2 -2
  153. package/dist/{init-aJHl-7AO.js → init-CX0AMQUn.js} +2 -2
  154. package/dist/{init-FMGDET-9.js → init-CfTbSEKy.js} +259 -60
  155. package/dist/{init-CR6tpw1B.js → init-Cigr_tKx.js} +47 -43
  156. package/dist/init-Clu8pxwQ.cjs +1181 -0
  157. package/dist/{init-CFYsq82V.js → init-CyAY4Lzl.js} +1 -1
  158. package/dist/{init-BKhH6mVR.cjs → init-D6BxBs7e.cjs} +1 -1
  159. package/dist/init-D8OeObDF.cjs +1141 -0
  160. package/dist/init-D9g1HXYf.cjs +40 -0
  161. package/dist/{init-CNLGJJRx.js → init-DA7zmptx.js} +1 -1
  162. package/dist/{init-DkIc5nqF.cjs → init-DFMiP2ZH.cjs} +1 -1
  163. package/dist/{init-zSzCjoor.js → init-DFjT8YvT.js} +4 -4
  164. package/dist/init-DGjXwWs2.cjs +143 -0
  165. package/dist/init-DHrCbpkW.cjs +121 -0
  166. package/dist/init-DRzJR02G.cjs +3585 -0
  167. package/dist/{init-B64zCLxG.cjs → init-DUF4ar8P.cjs} +4 -4
  168. package/dist/init-DlqJuHhl.js +119 -0
  169. package/dist/{init-y2Ra0vZP.js → init-Dnsv155v.js} +3 -3
  170. package/dist/init-DuYENxci.js +17 -0
  171. package/dist/{init-D6DBUsD3.cjs → init-Dv3zKj0r.cjs} +4 -4
  172. package/dist/{init-BtzMZ7Pk.cjs → init-Dy-05ktr.cjs} +1 -1
  173. package/dist/{init-BsCBAGWf.cjs → init-EP0CUWNK.cjs} +2 -2
  174. package/dist/{init-BJVU54pI.cjs → init-EhzD7a8i.cjs} +1 -1
  175. package/dist/{init-w9GEs73W.js → init-Fw89ZmrR.js} +2 -2
  176. package/dist/init-GsT2AEa4.cjs +424 -0
  177. package/dist/{init-Rxohwpmu.js → init-NCjgwCZy.js} +2 -2
  178. package/dist/{init-DxUHsN53.cjs → init-NdhG_VrF.cjs} +6 -6
  179. package/dist/{init-DDdhguVC.js → init-SZ01tARX2.js} +2 -2
  180. package/dist/{init-BAJJzBza.js → init-Y3mkB4XS.js} +2 -2
  181. package/dist/init-c4l6r-o-.js +5 -0
  182. package/dist/{init-Dku4b2lG.js → init-kEfUTuG2.js} +1 -1
  183. package/dist/{init-C7IeJwQR.cjs → init-lzHt4Cli.cjs} +256 -59
  184. package/dist/init-qSEd_Spq.js +1182 -0
  185. package/dist/{init-anYu6XB7.cjs → init-rmt7-fQE.cjs} +2 -2
  186. package/dist/{init-C4Bkib9u.cjs → init-zU-_9Gsp.cjs} +67 -65
  187. package/dist/{is-retriable-error-BU0e3hVI.js → is-retriable-error-BUiVJDwH.js} +1 -1
  188. package/dist/{is-retriable-error-CeeuHqDa.cjs → is-retriable-error-Dpt860if.cjs} +1 -1
  189. package/dist/jubjub-authoriser-D7zDXu3V.js +86 -0
  190. package/dist/jubjub-authoriser-Dgu6o3Sv.cjs +87 -0
  191. package/dist/key-source-5oUBFiC7.cjs +583 -0
  192. package/dist/key-source-B08HukZg.js +2550 -0
  193. package/dist/keyDerivation-D3k9XyHg.js +4077 -0
  194. package/dist/keyDerivation-u0nBA93T.cjs +274 -0
  195. package/dist/{lace-context-CZcNHr4M.js → lace-context-BZciB9c7.js} +4 -4
  196. package/dist/{lace-context-fJTDghdp.cjs → lace-context-DgR6vLli.cjs} +4 -4
  197. package/dist/lib--iqvW4O_.js +2354 -0
  198. package/dist/lib-Yk6Upl5D.cjs +2359 -0
  199. package/dist/{libsodium-wrappers-UH0LaOUE.js → libsodium-wrappers-BhbOA8dQ.js} +3 -1647
  200. package/dist/midnight-account-id.vo-0x9X-r3l.cjs +10 -0
  201. package/dist/midnight-account-id.vo-DjCAGcqc.js +5 -0
  202. package/dist/midnight-engine-DpemplKO.js +5 -0
  203. package/dist/midnight-engine-xU1wotne.cjs +6 -0
  204. package/dist/midnight-wallet-DIsAlSn6.js +18 -0
  205. package/dist/midnight-wallet-XTZc2li7.cjs +24 -0
  206. package/dist/midnight.cjs +1408 -0
  207. package/dist/midnight.d.ts +28934 -0
  208. package/dist/midnight.js +1352 -0
  209. package/dist/modules-cardano-D9Gs2j60.cjs +1108 -0
  210. package/dist/modules-cardano-VIM8fKu-.js +995 -0
  211. package/dist/node-relay-DWe1U0w2.cjs +49 -0
  212. package/dist/node-relay-h4i5IlAQ.js +48 -0
  213. package/dist/outputs-Bd2yZVjx.js +720 -0
  214. package/dist/outputs-CJoQBIA2.cjs +990 -0
  215. package/dist/pbkdf2-CIW-oWrm.cjs +1337 -0
  216. package/dist/pending-operation-B0_P78Jo.cjs +26 -0
  217. package/dist/pending-operation-BIS6mpjB.js +21 -0
  218. package/dist/providers-FjhM47BH.cjs +388 -0
  219. package/dist/providers-WtiSuxFu.js +365 -0
  220. package/dist/redacted-BmE2aXqr.js +81 -0
  221. package/dist/redacted-CRZJLS3w.cjs +86 -0
  222. package/dist/{retry-config-DC5IMaH7.cjs → retry-config-BaCfVC1H.cjs} +1 -1
  223. package/dist/{retry-config-BcUmMS--.js → retry-config-Dmgt28wM.js} +1 -1
  224. package/dist/safe-buffer-B_vMqJWU.js +43 -0
  225. package/dist/safe-buffer-DYOwEfHB.cjs +48 -0
  226. package/dist/sdk-Cb-gZnS9.js +1241 -0
  227. package/dist/sdk-DffwmX8b.cjs +1439 -0
  228. package/dist/sdk-init-Bln9rFtn.js +4138 -0
  229. package/dist/sdk-init-CYViTJY_.cjs +3841 -0
  230. package/dist/{seam-cardano-CATqBEyK.js → seam-cardano-B_etH4F4.js} +1 -1
  231. package/dist/{bytes.vo-TgiwogWF.js → secret-box-DUR0ACYz.js} +3 -25
  232. package/dist/{bytes.vo-Ck5u40RA.cjs → secret-box-DrjLZuS1.cjs} +1 -35
  233. package/dist/send-proof-progress-C-ljq1x5.js +30 -0
  234. package/dist/send-proof-progress-vmsaSfbz.cjs +47 -0
  235. package/dist/side-effects-BnqYz7Nl.js +768 -0
  236. package/dist/side-effects-CngaeXi0.cjs +804 -0
  237. package/dist/sign-bitcoin-transaction-with-seed-D4z62-jV.js +147 -0
  238. package/dist/sign-bitcoin-transaction-with-seed-DsLYXnCY.cjs +158 -0
  239. package/dist/signer-3fk8lZtE.cjs +7 -0
  240. package/dist/signer-CsL28DrK.cjs +121 -0
  241. package/dist/signer-DGluibtn.js +92 -0
  242. package/dist/signer-RqB5pu3K.js +2 -0
  243. package/dist/signer-factory-BA7WFJVZ.js +282 -0
  244. package/dist/signer-factory-Cwd6o-lG.cjs +281 -0
  245. package/dist/{signer-factory-9URFliA5.js → signer-factory-DObB55D4.js} +6 -3
  246. package/dist/signer-factory-DhZiE03y.cjs +149 -0
  247. package/dist/{signer-factory-BWGUmnvm.cjs → signer-factory-Ds6G2AZk.cjs} +4 -3
  248. package/dist/signer-factory-hzSRaIw2.js +148 -0
  249. package/dist/{slice-CuHUaPZx.cjs → slice-7G2xxYKJ.cjs} +3 -3
  250. package/dist/{slice-DZmQJNV8.cjs → slice-B4CdYoPu.cjs} +2 -2
  251. package/dist/slice-BPNuHKfw.js +9091 -0
  252. package/dist/{slice-DGcNrbPR.cjs → slice-Bg6HEr3K.cjs} +4 -4
  253. package/dist/{slice-DtaO72qY.cjs → slice-Bs2aMERu.cjs} +3 -3
  254. package/dist/{slice-HeHCv3bl.cjs → slice-C34iOOUH.cjs} +7 -7
  255. package/dist/{slice-Do2R2CYW.cjs → slice-C9TT5KhY.cjs} +6 -6
  256. package/dist/{slice-eIwcwKHI.js → slice-CK07EBCo.js} +4 -4
  257. package/dist/{slice-CnyWevM9.js → slice-CU80pbiu.js} +3 -3
  258. package/dist/{slice-CobanYgn.js → slice-CwyYrh1H.js} +2 -2
  259. package/dist/slice-Czfp6t84.cjs +436 -0
  260. package/dist/{slice-d0p6-xj5.js → slice-D-9aPKG-.js} +6 -6
  261. package/dist/{slice-maaskdUn.js → slice-DBpJ2QGf.js} +6 -6
  262. package/dist/{slice-mxLQ_FeY.cjs → slice-DTZTiJle.cjs} +352 -39
  263. package/dist/{slice-zJ9XVYjZ.js → slice-Da426sf9.js} +1 -1
  264. package/dist/{slice-D11m2EKl.cjs → slice-DayJvMRD.cjs} +1 -1
  265. package/dist/slice-DnBWfA-k.cjs +9109 -0
  266. package/dist/{slice-oqm_r1cS.cjs → slice-DnG-yvpI.cjs} +2 -2
  267. package/dist/{slice-BNu73oBa.js → slice-DyNs7oWp.js} +2 -2
  268. package/dist/{slice-CB4SnzMm.js → slice-GwiiJRoq.js} +3 -3
  269. package/dist/slice-oWnc7YVD.js +412 -0
  270. package/dist/{slice-B2PhoWAg.js → slice-qt0uBExh.js} +325 -37
  271. package/dist/slice-t8Gzj55G2.cjs +106 -0
  272. package/dist/slice-t8Q1cHm-.js +88 -0
  273. package/dist/src-BDzYIksE.cjs +20637 -0
  274. package/dist/src-BFoefPv_.js +20755 -0
  275. package/dist/store-B1Lq3cEf.cjs +66 -0
  276. package/dist/store-DuBG8qh5.js +37 -0
  277. package/dist/submit-Bs77dPn_.cjs +413 -0
  278. package/dist/submit-DOv8Z0Vf.js +336 -0
  279. package/dist/submit-bitcoin-tx-D6oYgH5S.js +983 -0
  280. package/dist/submit-bitcoin-tx-goFuRL7K.cjs +1049 -0
  281. package/dist/{sync-operation-utils-BYXLO80m.js → sync-operation-utils-31iFLExW.js} +2 -38
  282. package/dist/{sync-operation-utils-SdPbwFoD.cjs → sync-operation-utils-COIZ66-I.cjs} +1 -67
  283. package/dist/token-id-mapper-Bnds3xKH.cjs +18 -0
  284. package/dist/{token-id-mapper-DsPAL6Nh.cjs → token-id-mapper-CVyQJUKY.cjs} +2 -2
  285. package/dist/token-id-mapper-CnKHQ8DV.js +16 -0
  286. package/dist/{token-id-mapper-B2ivlLv3.js → token-id-mapper-D29Ggv8h.js} +2 -2
  287. package/dist/tokens-Cevp7rdU.cjs +62 -0
  288. package/dist/tokens-Diw4MLRM.js +44 -0
  289. package/dist/types-B8uiJn-X.js +12 -0
  290. package/dist/types-BHC12eSa.js +33 -0
  291. package/dist/types-CJT6XF2c.js +10 -0
  292. package/dist/types-CLRUYpfe.cjs +23 -0
  293. package/dist/types-Cc3mC8u0.cjs +50 -0
  294. package/dist/types-DWbVZpnF.cjs +15 -0
  295. package/dist/unwrap-provider-result-BZSiwabU.js +32 -0
  296. package/dist/unwrap-provider-result-ZqfBsTkk.cjs +39 -0
  297. package/dist/{util-CGzqQ8IV.cjs → util-Bu4W5lF4.cjs} +1 -1
  298. package/dist/{util-BaLzwa32.js → util-Cp5cZkfK.js} +1 -1
  299. package/dist/{utils-o8aMjfln.js → utils-BfBEUvWA.js} +2 -2
  300. package/dist/utils-DFwzEvbv.js +65 -0
  301. package/dist/{utils-5JvjbqH3.cjs → utils-DsElZgCI.cjs} +7 -1
  302. package/dist/utils-IXxR-Djh.cjs +112 -0
  303. package/dist/v8Signatures-CO_Uloy7.cjs +71 -0
  304. package/dist/{vote-delegation-tx-builder-CmKv6GoG.js → vote-delegation-tx-builder-BsBSDmcX.js} +5 -5
  305. package/dist/{vote-delegation-tx-builder-BpEMSti4.cjs → vote-delegation-tx-builder-DSs8nybk.cjs} +6 -6
  306. package/dist/watch-CUEvcP-V.js +21997 -0
  307. package/dist/watch-DMF2s-II.cjs +52281 -0
  308. package/package.json +96 -4
  309. package/dist/account-guards.stable-B1DSSh9D.cjs +0 -10
  310. package/dist/account-guards.stable-JRQ5qx2V.js +0 -5
  311. package/dist/codecs-B7X9pAsK.cjs +0 -1945
  312. package/dist/codecs-CC1Xjntz.js +0 -1882
  313. package/dist/init-Bv53hpLM.js +0 -19
  314. package/dist/init-CRbjI7p1.js +0 -3494
  315. package/dist/init-DAna1KCg.cjs +0 -3495
  316. package/dist/init-DGe47B22.cjs +0 -364
  317. package/dist/init-DMtyvYfC.cjs +0 -21
  318. package/dist/init-TkPDD750.js +0 -363
  319. package/dist/modules-cardano-BDvuL4Xx.js +0 -5248
  320. package/dist/modules-cardano-D2G3De2P.cjs +0 -5432
  321. package/dist/slice-CGVHXHDt.cjs +0 -125
  322. package/dist/slice-DhvF7L6X.js +0 -107
  323. /package/dist/{account-id.vo-LvCBVn5r.cjs → account-id.vo-DwqFjK5u.cjs} +0 -0
  324. /package/dist/{account-id.vo-MYSI7YFm.js → account-id.vo-OPz2v-JZ.js} +0 -0
  325. /package/dist/{actions-DdGbj7c7.cjs → actions-B2BJ4RTy.cjs} +0 -0
  326. /package/dist/{actions-9QSQR-GB.js → actions-iLXdgL5Y.js} +0 -0
  327. /package/dist/{apply-vkey-witnesses-ClZbpk5w.js → apply-vkey-witnesses-BKx3lcs0.js} +0 -0
  328. /package/dist/{apply-vkey-witnesses-CLzVSWxl.cjs → apply-vkey-witnesses-ZnFS0jnJ.cjs} +0 -0
  329. /package/dist/{asyncoption-Cw07zPH7.js → asyncoption-CruEYOBI.js} +0 -0
  330. /package/dist/{asyncoption-DYoGuQfP.cjs → asyncoption-i0VbqVTq.cjs} +0 -0
  331. /package/dist/{bignum.vo-B0rK_PQ1.js → bignum.vo-CEXOIew0.js} +0 -0
  332. /package/dist/{bignum.vo-DsG3kNiZ.cjs → bignum.vo-hx2kuqlA.cjs} +0 -0
  333. /package/dist/{bip32ed25519-1ApqeAZk.cjs → bip32ed25519-B7Yat217.cjs} +0 -0
  334. /package/dist/{bip32ed25519-DetAdGwD.js → bip32ed25519-FQ8qvdcq.js} +0 -0
  335. /package/dist/{blake2b-DOEVc57D.js → blake2b-BiQTw3GC.js} +0 -0
  336. /package/dist/{blake2b-B9tftbvG.cjs → blake2b-DEeVUdKR.cjs} +0 -0
  337. /package/dist/{blockchain-network-id.vo-BXpZhvvQ.cjs → blockchain-network-id.vo-BAKEwGjG.cjs} +0 -0
  338. /package/dist/{blockchain-network-id.vo-DNRkuT5B.js → blockchain-network-id.vo-CiVykuqG.js} +0 -0
  339. /package/dist/{blockingWithLatestFrom-C5wp_uA-.js → blockingWithLatestFrom-Cd8c8EPG.js} +0 -0
  340. /package/dist/{blockingWithLatestFrom-DY8OPg0w.cjs → blockingWithLatestFrom-D8kBPBMX.cjs} +0 -0
  341. /package/dist/{cardano-network-id-to-network-type-CrZfUcyP.js → cardano-network-id-to-network-type-BWwzeEtM.js} +0 -0
  342. /package/dist/{cardano-network-id-to-network-type-BDTF-HmK.cjs → cardano-network-id-to-network-type-C0ufJOyE.cjs} +0 -0
  343. /package/dist/{cardano-tx-id.vo-BPhV-AmZ.cjs → cardano-tx-id.vo-TLjJZHCI.cjs} +0 -0
  344. /package/dist/{cardano-tx-id.vo-DF9NzZXk.js → cardano-tx-id.vo-eVnKuzlm.js} +0 -0
  345. /package/dist/{composite-signer-factory-_46QsNBz.js → composite-signer-factory-CR8YHA1y.js} +0 -0
  346. /package/dist/{composite-signer-factory-BpF1mIYA.cjs → composite-signer-factory-m5cVs9h_.cjs} +0 -0
  347. /package/dist/{error-CNIquqT5.cjs → error-Cb3EnD0u.cjs} +0 -0
  348. /package/dist/{error-BCp9NkPi.js → error-DIZOY2Lw.js} +0 -0
  349. /package/dist/{esm-browser-C93Q-EOI.js → esm-browser-MG97cre9.js} +0 -0
  350. /package/dist/{esm-browser-DTc9IK3D.cjs → esm-browser-bweqfBlL.cjs} +0 -0
  351. /package/dist/{feature-flag-key.vo-ofrB6ZVQ.js → feature-flag-key.vo-DN_-4-sG.js} +0 -0
  352. /package/dist/{feature-flag-key.vo-BPz-ZAp6.cjs → feature-flag-key.vo-RlfHL3hq.cjs} +0 -0
  353. /package/dist/{first-state-of-status-OROkXcRv.cjs → first-state-of-status-CbT7hPa4.cjs} +0 -0
  354. /package/dist/{first-state-of-status-DQnMT3ya.js → first-state-of-status-unPynOuM.js} +0 -0
  355. /package/dist/{init-Es3wHW7D.js → init-829HRYcz.js} +0 -0
  356. /package/dist/{init-CKipPE_c.js → init-A-VyGSNW2.js} +0 -0
  357. /package/dist/{init-DFQQ9dTW.cjs → init-Atisw4x2.cjs} +0 -0
  358. /package/dist/{init-C5CEZ1m0.cjs → init-BFcvPHL-.cjs} +0 -0
  359. /package/dist/{init-IAk_CkGa.cjs → init-BgNobbNq.cjs} +0 -0
  360. /package/dist/{init-cqN3uX2j.js → init-atCFur0v.js} +0 -0
  361. /package/dist/{is-redux-persist-state-CTn3WZVh.cjs → is-redux-persist-state-BCFnSm36.cjs} +0 -0
  362. /package/dist/{is-redux-persist-state-Cxcd0_bM.js → is-redux-persist-state-yBfq0h_E.js} +0 -0
  363. /package/dist/{key-value-store-8cMzeNyG.js → key-value-store--W3SrMaw.js} +0 -0
  364. /package/dist/{key-value-store-DUAepXQf.cjs → key-value-store-C2Xt5Emp.cjs} +0 -0
  365. /package/dist/{repo-slice-WxetRhMY.cjs → repo-slice-7X4AYYVm.cjs} +0 -0
  366. /package/dist/{repo-slice-DwyMhCR1.js → repo-slice-RxFm0zDZ.js} +0 -0
  367. /package/dist/{reselect-CRDqmQY9.cjs → reselect-Bd94u0K-.cjs} +0 -0
  368. /package/dist/{reselect-C06X06oX.js → reselect-CGoLzEPv.js} +0 -0
  369. /package/dist/{serializable-B8GahgE1.js → serializable-BHdKIgk3.js} +0 -0
  370. /package/dist/{serializable-CRdnFaLZ.cjs → serializable-BxHkoPdk.cjs} +0 -0
  371. /package/dist/{slice-D11FHQuQ.cjs → slice-BiRsDKOK.cjs} +0 -0
  372. /package/dist/{slice-Be7hj4Iy.js → slice-Bk0Sv05J.js} +0 -0
  373. /package/dist/{slice-FioKeHtA.cjs → slice-Dqw1ecum.cjs} +0 -0
  374. /package/dist/{slice-B87b52iM.js → slice-obCSLm1x.js} +0 -0
  375. /package/dist/{src-vq1wS9sZ.js → src-BlxEp6Mm.js} +0 -0
  376. /package/dist/{src-BTPIvlDI.cjs → src-Cqp0B2M_.cjs} +0 -0
  377. /package/dist/{time.vo-CQ8pSXz2.cjs → time.vo-D3wWRw9L.cjs} +0 -0
  378. /package/dist/{time.vo-DkYYGYp6.js → time.vo-tNheinXm.js} +0 -0
  379. /package/dist/{toEmpty-CgAl3097.js → toEmpty-8Zax1MPd.js} +0 -0
  380. /package/dist/{toEmpty-DAMmNB5r.cjs → toEmpty-CYAbupM4.cjs} +0 -0
  381. /package/dist/{token-id.vo-ClsroxHO.js → token-id.vo-Bvwhr3ZE.js} +0 -0
  382. /package/dist/{token-id.vo-BxG9TG0O.cjs → token-id.vo-DXv5uS9n.cjs} +0 -0
  383. /package/dist/{util-DxzlYNS5.js → util-C8a4fA9p.js} +0 -0
  384. /package/dist/{util-CmdAhheh.cjs → util-CzeB3hfa.cjs} +0 -0
  385. /package/dist/{util-selector-CcK-GAdE.js → util-selector-BSTsxgne.js} +0 -0
  386. /package/dist/{util-selector-BcAncU4L.cjs → util-selector-BWPH68_l.cjs} +0 -0
  387. /package/dist/{while-active-BpppWuCs.js → while-active-B0lWy_6l.js} +0 -0
  388. /package/dist/{while-active-Dhc2LwOm.cjs → while-active-Dsowp0Fi.cjs} +0 -0
@@ -0,0 +1,1181 @@
1
+ require("./rolldown-runtime-Br2OG8yv.cjs");
2
+ require("./_polyfill-buffer-patch-CM8X7JiY.cjs");
3
+ require("./codecs-Cswkg7Tm.cjs");
4
+ const require_secret_box = require("./secret-box-DrjLZuS1.cjs");
5
+ const require_util = require("./util-Bu4W5lF4.cjs");
6
+ const require_bytes_vo = require("./bytes.vo-BNRquqaO.cjs");
7
+ const require_bignum_vo = require("./bignum.vo-hx2kuqlA.cjs");
8
+ const require_asyncoption = require("./asyncoption-i0VbqVTq.cjs");
9
+ const require_first_state_of_status = require("./first-state-of-status-CbT7hPa4.cjs");
10
+ require("./retry-config-BaCfVC1H.cjs");
11
+ const require_activity_type = require("./activity-type-Ch6ljxBy.cjs");
12
+ const require_cardano_network_id_vo = require("./cardano-network-id.vo-BEDPn6Li.cjs");
13
+ const require_const = require("./const-D-eZIS4n.cjs");
14
+ const require_TransactionBuilder = require("./TransactionBuilder-X1H9Gze6.cjs");
15
+ const require_apply_vkey_witnesses = require("./apply-vkey-witnesses-ZnFS0jnJ.cjs");
16
+ const require_account_guards = require("./account-guards-BtjTGxDZ.cjs");
17
+ const require_unwrap_provider_result = require("./unwrap-provider-result-ZqfBsTkk.cjs");
18
+ let _laceio_cardano_key_management = require("@laceio/cardano/key-management");
19
+ let _laceio_cardano_crypto = require("@laceio/cardano/crypto");
20
+ let _laceio_cardano_core = require("@laceio/cardano/core");
21
+ let _laceio_cardano_util = require("@laceio/cardano/util");
22
+ let rxjs = require("rxjs");
23
+ let _laceio_cardano_tx_construction = require("@laceio/cardano/tx-construction");
24
+ //#region ../../packages/contract/cardano-context/src/value-objects/cardano-testnet-id.vo.ts
25
+ const CARDANO_CHAIN_ID_BY_TESTNET = {
26
+ preprod: _laceio_cardano_core.Cardano.ChainIds.Preprod,
27
+ preview: _laceio_cardano_core.Cardano.ChainIds.Preview,
28
+ sanchonet: _laceio_cardano_core.Cardano.ChainIds.Sanchonet
29
+ };
30
+ const PREPROD_MAGIC = Number(_laceio_cardano_core.Cardano.ChainIds.Preprod.networkMagic);
31
+ const PREVIEW_MAGIC = Number(_laceio_cardano_core.Cardano.ChainIds.Preview.networkMagic);
32
+ const SANCHONET_MAGIC = Number(_laceio_cardano_core.Cardano.ChainIds.Sanchonet.networkMagic);
33
+ const getCardanoTestnetIdByNetworkMagic = (networkMagic) => {
34
+ const magic = Number(networkMagic);
35
+ if (magic === PREPROD_MAGIC) return "preprod";
36
+ if (magic === PREVIEW_MAGIC) return "preview";
37
+ if (magic === SANCHONET_MAGIC) return "sanchonet";
38
+ };
39
+ const getCardanoChainIdByTestnetId = (id) => CARDANO_CHAIN_ID_BY_TESTNET[id];
40
+ //#endregion
41
+ //#region ../../packages/module/blockchain-cardano/src/store/composer/resolve-validity-interval.ts
42
+ /** Two hours, matching the send flow's window (`build-tx.ts`). */
43
+ const DEFAULT_VALIDITY_SECONDS = 7200;
44
+ /**
45
+ * The era covering `slot`: the last summary that has already started.
46
+ * Summaries arrive oldest-first, so this walks forward while the next
47
+ * era's start is still at or below the slot.
48
+ */
49
+ const eraSummaryAtSlot = (eraSummaries, slot) => {
50
+ let index = 0;
51
+ while (index + 1 < eraSummaries.length && eraSummaries[index + 1].start.slot <= slot) index++;
52
+ return eraSummaries[index];
53
+ };
54
+ const secondsToSlots = (seconds, slotLengthMs) => Math.ceil(seconds * 1e3 / slotLengthMs);
55
+ /**
56
+ * Convert a tip-relative duration into the absolute slots a Cardano
57
+ * validity interval needs.
58
+ *
59
+ * @throws If the era summaries are missing/unusable, or the requested
60
+ * window is not a positive, coherent interval.
61
+ */
62
+ const resolveValidityInterval = ({ tipSlot, eraSummaries, validitySeconds = DEFAULT_VALIDITY_SECONDS, validityStartSeconds }) => {
63
+ if (eraSummaries.length === 0) throw new Error("Cannot resolve a validity interval: no Cardano era summaries available");
64
+ if (!Number.isFinite(validitySeconds) || validitySeconds <= 0) throw new Error(`Validity window must be a positive number of seconds, got ${validitySeconds}`);
65
+ const { slotLength } = eraSummaryAtSlot(eraSummaries, tipSlot).parameters;
66
+ if (!Number.isFinite(slotLength) || slotLength <= 0) throw new Error(`Era summary reports an unusable slot length: ${slotLength}`);
67
+ const invalidHereafter = _laceio_cardano_core.Cardano.Slot(tipSlot + secondsToSlots(validitySeconds, slotLength));
68
+ if (validityStartSeconds === void 0) return { invalidHereafter };
69
+ if (!Number.isFinite(validityStartSeconds) || validityStartSeconds < 0) throw new Error(`Validity start must be a non-negative number of seconds, got ${validityStartSeconds}`);
70
+ const invalidBefore = _laceio_cardano_core.Cardano.Slot(tipSlot + secondsToSlots(validityStartSeconds, slotLength));
71
+ if (invalidBefore >= invalidHereafter) throw new Error(`Validity window is empty: start slot ${invalidBefore} is not before end slot ${invalidHereafter}`);
72
+ return {
73
+ invalidBefore,
74
+ invalidHereafter
75
+ };
76
+ };
77
+ //#endregion
78
+ //#region ../../packages/module/blockchain-cardano/src/store/composer/build-composer-tx.ts
79
+ /** Failure with a code the side-effect maps to actionable copy. */
80
+ const fail = (message, code) => Object.assign(new Error(message), { code });
81
+ const utxoRefKey = (txIn) => `${txIn.txId}#${txIn.index}`;
82
+ /**
83
+ * An address from the request, as the SDK's payment address.
84
+ *
85
+ * The SDK's own constructor throws an UNCODED `InvalidStringError`, which would
86
+ * reach the side-effect as a build fault rather than as the request mistake it
87
+ * is — a bech32 the user mistyped would then read as "we couldn't build your
88
+ * transaction" instead of "check what you entered".
89
+ *
90
+ * @param what - names the address in the message, since a request may carry
91
+ * several and the failure has to say which one is unusable.
92
+ */
93
+ const toPaymentAddress = (value, what) => {
94
+ try {
95
+ return _laceio_cardano_core.Cardano.PaymentAddress(value);
96
+ } catch {
97
+ throw fail(`${what} is not a Cardano address: "${value}"`, "invalid-address");
98
+ }
99
+ };
100
+ /**
101
+ * Quantities cross the slice boundary as decimal strings, so a malformed
102
+ * one is a request error rather than a programming error — parse it into
103
+ * a coded failure instead of letting `BigInt` throw an uncoded SyntaxError.
104
+ */
105
+ const toQuantity = (value, what) => {
106
+ if (!/^-?\d+$/.test(value)) throw fail(`${what} is not a whole number: "${value}"`, "invalid-output");
107
+ return BigInt(value);
108
+ };
109
+ const toValue = (output) => {
110
+ const coins = toQuantity(output.lovelace, `Lovelace amount for the output to ${output.address}`);
111
+ if (coins < 0n) throw fail(`Output to ${output.address} requests a negative amount of lovelace`, "invalid-output");
112
+ if (!output.assets || output.assets.length === 0) return { coins };
113
+ const assets = /* @__PURE__ */ new Map();
114
+ for (const asset of output.assets) {
115
+ const quantity = toQuantity(asset.quantity, `Quantity for asset ${asset.assetId}`);
116
+ if (quantity <= 0n) throw fail(`Asset ${asset.assetId} requests a non-positive quantity`, "invalid-output");
117
+ const assetId = asset.assetId;
118
+ assets.set(assetId, (assets.get(assetId) ?? 0n) + quantity);
119
+ }
120
+ return {
121
+ coins,
122
+ assets
123
+ };
124
+ };
125
+ /**
126
+ * Raise the output's lovelace to the protocol minimum for its size when
127
+ * the request is below it. An assets-only output can therefore ask for
128
+ * `'0'` and still be spendable.
129
+ */
130
+ const withMinimumCoin = (address, value, params) => {
131
+ if ((0, _laceio_cardano_tx_construction.tokenBundleSizeExceedsLimit)(params.maxValueSize)(value.assets)) throw fail(`Output to ${address} exceeds the maximum token bundle size`, "invalid-output");
132
+ const minimumCoin = BigInt((0, _laceio_cardano_tx_construction.computeMinimumCoinQuantity)(params.coinsPerUtxoByte)({
133
+ address,
134
+ value
135
+ }));
136
+ return value.coins >= minimumCoin ? value : {
137
+ ...value,
138
+ coins: minimumCoin
139
+ };
140
+ };
141
+ const parseMetadata = (request) => {
142
+ if (!request.metadata || request.metadata.length === 0) return void 0;
143
+ const blob = /* @__PURE__ */ new Map();
144
+ for (const entry of request.metadata) {
145
+ if (!/^\d+$/.test(entry.label)) throw fail(`Metadata label "${entry.label}" is not a non-negative integer`, "invalid-metadata");
146
+ let parsed;
147
+ try {
148
+ parsed = JSON.parse(entry.json);
149
+ } catch (error) {
150
+ throw fail(`Metadata for label ${entry.label} is not valid JSON: ${error.message}`, "invalid-metadata");
151
+ }
152
+ blob.set(BigInt(entry.label), _laceio_cardano_core.metadatum.jsonToMetadatum(parsed));
153
+ }
154
+ return blob;
155
+ };
156
+ const resolveSelectedInputs = (request, spendableUtxos) => {
157
+ if (!request.selectedInputs || request.selectedInputs.length === 0) return [];
158
+ const byRef = new Map(spendableUtxos.map((utxo) => [utxoRefKey(utxo[0]), utxo]));
159
+ return request.selectedInputs.map((ref) => {
160
+ const utxo = byRef.get(`${ref.txId}#${ref.index}`);
161
+ if (!utxo) throw fail(`Selected input ${ref.txId}#${ref.index} is not among the account's spendable UTxOs`, "input-unavailable");
162
+ return utxo;
163
+ });
164
+ };
165
+ /**
166
+ * The balancer's own failure type is the only signal that the account cannot
167
+ * cover what was asked for — an unaffordable amount is a request mistake, not a
168
+ * build fault, and only the coded form reaches the copy that says so.
169
+ *
170
+ * Tagged rather than replaced: the reported name and message stay the
171
+ * balancer's, which is what names the shortfall for a diagnostic.
172
+ */
173
+ const codeInputSelectionFailure = async (build) => {
174
+ try {
175
+ return await build;
176
+ } catch (error) {
177
+ if (error instanceof require_TransactionBuilder.InputSelectionError) throw Object.assign(error, { code: "insufficient-funds" });
178
+ throw error;
179
+ }
180
+ };
181
+ const buildComposerTx = async ({ request, changeAddress, networkMagic, protocolParameters, spendableUtxos, tipSlot, eraSummaries }) => {
182
+ if (request.outputs.length === 0) throw fail("A composed transaction needs at least one output", "no-outputs");
183
+ if (spendableUtxos.length === 0) throw fail("The account has no spendable UTxOs to fund this transaction", "no-utxos");
184
+ const validityInterval = resolveValidityInterval({
185
+ tipSlot,
186
+ eraSummaries,
187
+ validitySeconds: request.validitySeconds,
188
+ validityStartSeconds: request.validityStartSeconds
189
+ });
190
+ const selectedInputs = resolveSelectedInputs(request, spendableUtxos);
191
+ const selectedReferences = new Set(selectedInputs.map((utxo) => utxoRefKey(utxo[0])));
192
+ const coverUtxos = spendableUtxos.filter((utxo) => !selectedReferences.has(utxoRefKey(utxo[0])));
193
+ const builder = new require_TransactionBuilder.TransactionBuilder(networkMagic, protocolParameters).setChangeAddress(changeAddress).setUnspentOutputs(coverUtxos).setValidityInterval(validityInterval);
194
+ for (const utxo of selectedInputs) builder.addInput(utxo);
195
+ const metadataBlob = parseMetadata(request);
196
+ if (metadataBlob) for (const [label, value] of metadataBlob) builder.setMetadata(label, value);
197
+ for (const output of request.outputs) {
198
+ const address = toPaymentAddress(output.address, "The address of an output");
199
+ builder.addOutput({
200
+ address,
201
+ value: withMinimumCoin(address, toValue(output), protocolParameters)
202
+ });
203
+ }
204
+ const transaction = await codeInputSelectionFailure(builder.build());
205
+ return {
206
+ cbor: transaction.toCbor(),
207
+ txId: transaction.getId(),
208
+ fee: transaction.toCore().body.fee
209
+ };
210
+ };
211
+ //#endregion
212
+ //#region ../../packages/module/blockchain-cardano/src/store/composer/build-side-effect.ts
213
+ const GENERIC_BUILD_ERROR_KEYS$1 = {
214
+ title: "v2.composer.build.error.title",
215
+ subtitle: "v2.composer.build.error.subtitle"
216
+ };
217
+ const BUILD_ERROR_KEYS_BY_CODE$1 = {
218
+ "no-utxos": {
219
+ title: "v2.composer.build.error.no-utxos.title",
220
+ subtitle: "v2.composer.build.error.no-utxos.subtitle"
221
+ },
222
+ "no-outputs": {
223
+ title: "v2.composer.build.error.invalid-request.title",
224
+ subtitle: "v2.composer.build.error.invalid-request.subtitle"
225
+ },
226
+ "invalid-output": {
227
+ title: "v2.composer.build.error.invalid-request.title",
228
+ subtitle: "v2.composer.build.error.invalid-request.subtitle"
229
+ },
230
+ "invalid-metadata": {
231
+ title: "v2.composer.build.error.invalid-request.title",
232
+ subtitle: "v2.composer.build.error.invalid-request.subtitle"
233
+ },
234
+ "input-unavailable": {
235
+ title: "v2.composer.build.error.invalid-request.title",
236
+ subtitle: "v2.composer.build.error.invalid-request.subtitle"
237
+ },
238
+ "invalid-address": {
239
+ title: "v2.composer.build.error.invalid-request.title",
240
+ subtitle: "v2.composer.build.error.invalid-request.subtitle"
241
+ },
242
+ "insufficient-funds": {
243
+ title: "v2.composer.build.error.invalid-request.title",
244
+ subtitle: "v2.composer.build.error.invalid-request.subtitle"
245
+ }
246
+ };
247
+ const failure$1 = (error, code) => ({
248
+ success: false,
249
+ error: {
250
+ name: error.name,
251
+ message: error.message
252
+ },
253
+ errorTranslationKeys: (code ? BUILD_ERROR_KEYS_BY_CODE$1[code] : void 0) ?? GENERIC_BUILD_ERROR_KEYS$1
254
+ });
255
+ const buildComposition = async (state, stateObservables, dependencies) => {
256
+ try {
257
+ const { accountId, request } = state;
258
+ const cardano = dependencies.txExecutorCardano;
259
+ const cardanoContext = stateObservables.cardanoContext;
260
+ const [networkMagic, protocolParameters, tip, eraSummaries, accountUtxos, unspendableUtxos, addresses] = await Promise.all([
261
+ (0, rxjs.firstValueFrom)(cardano.cardanoNetworkMagic$),
262
+ (0, rxjs.firstValueFrom)(cardanoContext.selectProtocolParameters$),
263
+ (0, rxjs.firstValueFrom)(cardanoContext.selectTip$),
264
+ (0, rxjs.firstValueFrom)(cardanoContext.selectEraSummaries$),
265
+ (0, rxjs.firstValueFrom)(cardano.cardanoAccountUtxos$),
266
+ (0, rxjs.firstValueFrom)(cardano.cardanoAccountUnspendableUtxos$),
267
+ (0, rxjs.firstValueFrom)(cardano.cardanoAddresses$)
268
+ ]);
269
+ if (networkMagic === void 0) throw new Error("Cardano network magic not available");
270
+ if (!protocolParameters) throw new Error("Cardano protocol parameters not available");
271
+ if (!tip) throw new Error("Cardano chain tip not available");
272
+ if (!eraSummaries) throw new Error("Cardano era summaries not available");
273
+ require_account_guards.refuseExtensionAccount(accountId, addresses);
274
+ const primary = addresses.filter((address) => address.accountId === accountId && address.blockchainName === "Cardano")[0];
275
+ if (!primary) throw new Error("No Cardano addresses found for account");
276
+ const result = await buildComposerTx({
277
+ request,
278
+ changeAddress: toPaymentAddress(request.changeAddress ?? primary.address, "The change address"),
279
+ networkMagic,
280
+ protocolParameters,
281
+ spendableUtxos: require_util.filterSpendableUtxos(accountUtxos[accountId] ?? [], unspendableUtxos[accountId] ?? []),
282
+ tipSlot: Number(tip.slot),
283
+ eraSummaries
284
+ });
285
+ return {
286
+ success: true,
287
+ serializedTx: result.cbor,
288
+ txId: result.txId,
289
+ fees: [{
290
+ tokenId: require_const.LOVELACE_TOKEN_ID,
291
+ amount: require_bignum_vo.BigNumber(result.fee)
292
+ }]
293
+ };
294
+ } catch (error) {
295
+ return failure$1(error instanceof Error ? error : new Error(String(error)), error.code);
296
+ }
297
+ };
298
+ const makeComposerBuilding = () => (_, stateObservables, dependencies) => require_first_state_of_status.firstStateOfStatus(stateObservables.composerFlow.selectState$, "Building").pipe((0, rxjs.switchMap)((state) => (0, rxjs.from)(buildComposition(state, stateObservables, dependencies)).pipe((0, rxjs.map)((result) => dependencies.actions.composerFlow.buildCompleted({
299
+ accountId: state.accountId,
300
+ result
301
+ })))));
302
+ //#endregion
303
+ //#region ../../packages/module/blockchain-cardano/src/store/composer-flow-side-effects.ts
304
+ const composerFlowSideEffects = [makeComposerBuilding()];
305
+ //#endregion
306
+ //#region ../../packages/module/blockchain-cardano/src/store/dependencies.ts
307
+ const initializeDependencies = async (_, { logger }) => ({ cardanoInMemorySigning: { signTransaction: (props) => (0, rxjs.forkJoin)([(0, rxjs.from)(_laceio_cardano_crypto.SodiumBip32Ed25519.create()), (0, rxjs.from)(_laceio_cardano_key_management.util.createTxInKeyPathMap(props.tx.body().toCore(), props.knownAddresses, require_util.createInputResolver(props.utxo)))]).pipe((0, rxjs.mergeMap)(([bip32Ed25519, txInKeyPathMap]) => {
308
+ const encryptedRootPrivateKeyBytes = require_bytes_vo.ByteArray.fromHex(props.encryptedRootPrivateKey);
309
+ return (0, rxjs.from)(new _laceio_cardano_key_management.InMemoryKeyAgent({
310
+ accountIndex: props.accountIndex,
311
+ chainId: props.chainId,
312
+ encryptedRootPrivateKeyBytes: [...encryptedRootPrivateKeyBytes],
313
+ extendedAccountPublicKey: props.extendedAccountPublicKey,
314
+ getPassphrase: async () => props.authSecret,
315
+ purpose: _laceio_cardano_key_management.KeyPurpose.STANDARD
316
+ }, {
317
+ bip32Ed25519,
318
+ logger,
319
+ rootPrivateKeyEncryption: require_secret_box.SecretBox.isSealed(encryptedRootPrivateKeyBytes) ? {
320
+ encrypt: require_secret_box.SecretBox.seal,
321
+ decrypt: require_secret_box.SecretBox.open
322
+ } : void 0
323
+ }).signTransaction(props.tx.body(), {
324
+ knownAddresses: props.knownAddresses,
325
+ txInKeyPathMap,
326
+ scripts: props.tx.toCore().witness.scripts
327
+ })).pipe((0, rxjs.map)((signatures) => {
328
+ const witnessSet = props.tx.witnessSet();
329
+ require_apply_vkey_witnesses.applyVkeyWitnesses(witnessSet, signatures);
330
+ props.tx.setWitnessSet(witnessSet);
331
+ return require_asyncoption.Ok(props.tx);
332
+ }));
333
+ }), (0, rxjs.catchError)((error) => (0, rxjs.of)(require_asyncoption.Err({
334
+ code: "SIGNING_FAILED",
335
+ message: error.message
336
+ })))) } });
337
+ //#endregion
338
+ //#region ../../packages/lib/cnight-dust-designation/src/constants.ts
339
+ const LOVELACE_FOR_REGISTRATION = 1586080n;
340
+ //#endregion
341
+ //#region ../../packages/lib/cnight-dust-designation/src/errors.ts
342
+ const Ok = (value) => ({
343
+ ok: true,
344
+ value
345
+ });
346
+ const Err = (error) => ({
347
+ ok: false,
348
+ error
349
+ });
350
+ //#endregion
351
+ //#region ../../packages/lib/cnight-dust-designation/src/value-objects/network-id.vo.ts
352
+ const CardanoDustNetwork = {
353
+ mainnet: "mainnet",
354
+ testnet: "testnet",
355
+ fromNetworkMagic: (networkMagic) => networkMagic === 764824073 ? CardanoDustNetwork.mainnet : CardanoDustNetwork.testnet,
356
+ toNetworkId: (network) => network === CardanoDustNetwork.mainnet ? 1 : 0
357
+ };
358
+ //#endregion
359
+ //#region ../../packages/lib/cnight-dust-designation/src/cnight-asset.ts
360
+ const TESTNET_CNIGHT_POLICY_ID = _laceio_cardano_core.Cardano.PolicyId("d2dbff622e509dda256fedbd31ef6e9fd98ed49ad91d5c0e07f68af1");
361
+ const TESTNET_CNIGHT_ASSET_NAME = _laceio_cardano_core.Cardano.AssetName("");
362
+ const MAINNET_CNIGHT_POLICY_ID = _laceio_cardano_core.Cardano.PolicyId("0691b2fecca1ac4f53cb6dfb00b7013e561d1f34403b957cbb5af1fa");
363
+ /** "NIGHT" in hex — the mainnet cNIGHT token is named NIGHT. */
364
+ const MAINNET_CNIGHT_ASSET_NAME = _laceio_cardano_core.Cardano.AssetName("4e49474854");
365
+ const getCnightAssetId = (network) => {
366
+ const policyId = network === CardanoDustNetwork.mainnet ? MAINNET_CNIGHT_POLICY_ID : TESTNET_CNIGHT_POLICY_ID;
367
+ const assetName = network === CardanoDustNetwork.mainnet ? MAINNET_CNIGHT_ASSET_NAME : TESTNET_CNIGHT_ASSET_NAME;
368
+ return _laceio_cardano_core.Cardano.AssetId.fromParts(policyId, assetName);
369
+ };
370
+ //#endregion
371
+ //#region ../../packages/lib/cnight-dust-designation/src/scripts/mainnet.ts
372
+ const CNIGHT_GENERATES_DUST_MAINNET_CBOR = "590c8401010029800aba4aba2aba1aba0aab9faab9eaab9dab9cab9a488888888a60022a6600492119657870656374205b782c202e2e726573745d203d206c69737400168a9980124929657870656374205b506169722822222c2031295d203d20746f6b656e73207c3e20746f5f706169727300168a9980124936657870656374206275696c74696e2e6c656e6774685f6f665f62797465617272617928647573745f6164647265737329203c3d20333300168a998012495365787065637420447573744d617070696e67446174756d207b20635f77616c6c65742c20647573745f61646472657373207d203d0a2020202020202020202020202020202020206f75747075745f646174756d00168a998012493065787065637420447573744d617070696e67446174756d207b20635f77616c6c65742c202e2e207d203d20646174756d00164888896600330013009375401f2300d300e001911919800800801912cc00400629422b3001300330100018a518998010011808800a0144039370e90004dc3a40052232330010010032259800800c026264b300130040018800c4cc00c00cc04800900b1808000a01c9b874801122222229800980a003cc040dd51809803c88966002600e60246ea800e264646600200200844b30010018a508acc004cdc79bae30190010038a51899801001180d000a026405c6eb8c058c04cdd5001c4cc0200048cdd798098008022020911192cc004c020006264b3001001801c4c966002003004802401200913259800980d801c01a00a80c0dd7000a0363018001405860286ea80122b300130070018992cc00400600713259800800c01200900480244c9660026036007006802a030375c00280d8c060005016180a1baa0048012022404460246ea800d22223322323298009bab301b0019bac301b301c301c0019bac301b007980b9baa0039bac301b0049bab301b0024888889660026024007133225980099baf30230104c103d87980008acc00401a2a6603c9211b657870656374205b696e7075742c202e2e5d203d20696e7075747300168992cc0040062b300130153020375400313259800800c06e264b30010018992cc00400603b13259800800c07a03d01e80f44c966002605400719800802456600266e24dc6800a408519800802403601c80a2040811a03e809a03e8138dd7000a05430270014094604e00501c80e40720388140c09400502318109baa00180d203c80d406a03501a409864b300132330010010082259800800c528456600266ebcc098c08cdd51813000801c528c4cc008008c09c00502020488992cc00400603b13259800981380144c96600266e3d220100375c6046005159800980b800c4c8c96600264b30010018a99812a48130657870656374205b5f2c202e2e6e66745d203d2076616c7565207c3e20746f5f64696374207c3e20746f5f70616972730016899baf374c60560026e98cc0a4cdd81ba9009374c6605266ec13010140004c010101004bd6f7b63025eb7bdb1810281bab30290018992cc004c060c098dd5000c4c0a8c09cdd5000c54cc09524012165787065637420496e6c696e65446174756d28646174756d29203d20646174756d001640906052605400315330244901266578706563742069735f73696e676c65746f6e2876616c75652c20706f6c6963792c202222290016408c6052604a6ea8cc05c0248cdd7981498131baa30293026375400200466e95200233026375200c97ae080fa04280fa042375a604600301e4090604a0028118dd5981099801002119b8f375c6042002009153301f49016b6578706563740a202020206c6973742e616e79280a202020202020696e707574732c0a202020202020666e28696e7075743a20496e70757429207b20696e7075742e6f75747075745f7265666572656e6365203d3d206f6e655f73686f745f726566207d2c0a202020202900164078604660406ea8c08c01902144c96600266ebcdd31981199bb04c10140003750653001001804520004004444b30010028800c660020073028002acc004cdd7981398121baa302730243754603460486ea8c09c008012266e0000520018800a042400c81292f5bded8c0604266004008466e3cdd71810800802456600330013371e0069111c0691b2fecca1ac4f53cb6dfb00b7013e561d1f34403b957cbb5af1fa00a50a5140791980099b8f003489076d61696e6e657400a50a51407914a080f2294101e19ba548008cc088dd480125eb8101d1bae3021301e375401244646600200200644b300100180f44c96600260080031001899801801981380120403025001408d1598009807801c4c9660026024603c6ea800626464944ca6002003007802a002222598008014400633001003981380156600266ebcc098c08cdd5181318119baa301930233754604c00400b159800800c54cc0852413f657870656374205b4f7574707574207b20616464726573732c2076616c75652c20646174756d2c202e2e207d2c202e2e726573745d203d206f757470757473001689919912cc004cdd7981498131baa30290030088992cc0040062a6604a920133657870656374205b5f2c202e2e6e66745f69645d203d2076616c7565207c3e20746f5f64696374207c3e20746f5f706169727300168acc004cdd79ba6302b0010088992cc004c064c09cdd5000c4c966002003159800980e98141baa0018992cc00400604713259800800c4c9660020030258992cc00400604d026813409a264b300130320038cc0040122b3001337126e3400520428acc006600200901580b20388804c54cc0b12413b65787065637420636865636b5f6175746828635f77616c6c65742c2065787472615f7369676e61746f726965732c207769746864726177616c7329001640ad02840ad027406d02740bc6eb80050321817800a05a302f002812409204902440c0605a0028158c0a4dd5000c089026408a045022811205c302b3028375400315330264912865787065637420496e6c696e65446174756d286f75747075745f646174756d29203d20646174756d001640946054605600715330254901266578706563742061735f64617461286e66745f696429203d3d2065787065637465645f6e6674001640908140dd59814801454cc09124012d65787065637420616464726573732e7061796d656e745f63726564656e7469616c203d3d206f776e5f637265640016408c6050002605000460466ea8c09800502444005020200640906e98cc084cdd81811180f9baa0014c0103a14001004bd6f7b630454cc07524012265787065637420536372697074286f776e5f6861736829203d206f776e5f63726564001640706042603c6ea80262b3001301100389919912cc004c054c080dd5000c4c966002003159800980b18109baa0018992cc00400603713259800800c4c96600200301d8992cc00400603d01e80f407a264b3001302b0038cc004012264b3001301b3027375400313259800cc00401a021011405d15980099b880014800229462b30013301e01123375e60520020071301d0018a5040988132294102619192cc004c074c0a4dd5000c5200089bad302d302a37540028138c966002603a60526ea80062980103d87a8000899198008009bab302e302b375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004cdc7a44100001899ba548000cc0c0c0b80092f5c114c0103d87a800040ad133004004303200340ac6eb8c0b0004c0bc00502d204e323300100100d2259800800c5300103d87a8000899192cc004cdc8802800c56600266e3c014006266e9520003302f302d0024bd7045300103d87a800040a9133004004303100340a86eb8c0ac004c0b800502c1bae302b3028375400315330264919165787065637420536372697074286f776e5f686173682920617320736372697074203d0a202020202020202020206d7573745f66696e6428696e707574732c20666e28696e70757429207b20696e7075742e6f75747075745f7265666572656e6365203d3d206f7574707574207d292e6f75747075742e616464726573732e7061796d656e745f63726564656e7469616c001640946054604e6ea8c0a8c09cdd5180e98139baa3301900d23375e605660506ea800402603e80a203e8140dd7000a05630280014098605000501c80e40720388148c09800502418111baa00180d203e80d406a03501a409c604860426ea80062a6603e9211a65787065637420536f6d6528646174756d29203d20646174756d00164078604400260446046002603c6ea80262b30013370e9003001c5660026024603a6ea8c084c088c078dd5004c528c5901b45901b2036406c80d8603660360026034603400460306030006602e603000845268a99803a491856616c696461746f722072657475726e65642066616c7365001365640181";
373
+ //#endregion
374
+ //#region ../../packages/lib/cnight-dust-designation/src/scripts/testnet.ts
375
+ const CNIGHT_GENERATES_DUST_TESTNET_CBOR = "590c6801010029800aba4aba2aba1aba0aab9faab9eaab9dab9cab9a488888888a60022a6600492119657870656374205b782c202e2e726573745d203d206c69737400168a9980124929657870656374205b506169722822222c2031295d203d20746f6b656e73207c3e20746f5f706169727300168a9980124936657870656374206275696c74696e2e6c656e6774685f6f665f62797465617272617928647573745f6164647265737329203c3d20333300168a998012495365787065637420447573744d617070696e67446174756d207b20635f77616c6c65742c20647573745f61646472657373207d203d0a2020202020202020202020202020202020206f75747075745f646174756d00168a998012493065787065637420447573744d617070696e67446174756d207b20635f77616c6c65742c202e2e207d203d20646174756d00164888896600330013009375401f2300d300e001911919800800801912cc00400629422b3001300330100018a518998010011808800a0144039370e90004dc3a40052232330010010032259800800c026264b300130040018800c4cc00c00cc04800900b1808000a01c9b874801122222229800980a003cc040dd51809803c88966002600e60246ea800e264646600200200844b30010018a508acc004cdc79bae30190010038a51899801001180d000a026405c6eb8c058c04cdd5001c4cc0200048cdd798098008022020911192cc004c020006264b3001001801c4c966002003004802401200913259800980d801c01a00a80c0dd7000a0363018001405860286ea80122b300130070018992cc00400600713259800800c01200900480244c9660026036007006802a030375c00280d8c060005016180a1baa0048012022404460246ea800d22223322323298009bab301b0019bac301b301c301c0019bac301b007980b9baa0039bac301b0049bab301b0024888889660026024007133225980099baf30230104c103d87980008acc00401a2a6603c9211b657870656374205b696e7075742c202e2e5d203d20696e7075747300168992cc0040062b300130153020375400313259800800c06e264b30010018992cc00400603b13259800800c07a03d01e80f44c966002605400719800802456600266e24dc6800a408519800802403601c80a2040811a03e809a03e8138dd7000a05430270014094604e00501c80e40720388140c09400502318109baa00180d203c80d406a03501a409864b300132330010010082259800800c528456600266ebcc098c08cdd51813000801c528c4cc008008c09c00502020488992cc00400603b13259800981380144c96600266e3d220100375c6046005159800980b800c4c8c96600264b30010018a99812a48130657870656374205b5f2c202e2e6e66745d203d2076616c7565207c3e20746f5f64696374207c3e20746f5f70616972730016899baf374c60560026e98cc0a4cdd81ba9009374c6605266ec13010140004c010101004bd6f7b63025eb7bdb1810281bab30290018992cc004c060c098dd5000c4c0a8c09cdd5000c54cc09524012165787065637420496e6c696e65446174756d28646174756d29203d20646174756d001640906052605400315330244901266578706563742069735f73696e676c65746f6e2876616c75652c20706f6c6963792c202222290016408c6052604a6ea8cc05c0248cdd7981498131baa30293026375400200466e95200233026375200c97ae080fa04280fa042375a604600301e4090604a0028118dd5981099801002119b8f375c6042002009153301f49016b6578706563740a202020206c6973742e616e79280a202020202020696e707574732c0a202020202020666e28696e7075743a20496e70757429207b20696e7075742e6f75747075745f7265666572656e6365203d3d206f6e655f73686f745f726566207d2c0a202020202900164078604660406ea8c08c01902144c96600266ebcdd31981199bb04c10140003750653001001804520004004444b30010028800c660020073028002acc004cdd7981398121baa302730243754603460486ea8c09c008012266e0000520018800a042400c81292f5bded8c0604266004008466e3cdd7181080080246600266e3c00d22011cd2dbff622e509dda256fedbd31ef6e9fd98ed49ad91d5c0e07f68af100a50a51407914a080f0cdd2a4004660446ea40092f5c080e8dd71810980f1baa0092232330010010032259800800c07a264b300130040018800c4cc00c00cc09c0090201812800a0468acc004c03c00e264b30013012301e3754003132324a2653001001803c0150011112cc00400a200319800801cc09c00ab30013375e604c60466ea8c098c08cdd5180c98119baa30260020058acc0040062a660429213f657870656374205b4f7574707574207b20616464726573732c2076616c75652c20646174756d2c202e2e207d2c202e2e726573745d203d206f757470757473001689919912cc004cdd7981498131baa30290030088992cc0040062a6604a920133657870656374205b5f2c202e2e6e66745f69645d203d2076616c7565207c3e20746f5f64696374207c3e20746f5f706169727300168acc004cdd79ba6302b0010088992cc004c064c09cdd5000c4c966002003159800980e98141baa0018992cc00400604713259800800c4c9660020030258992cc00400604d026813409a264b300130320038cc0040122b3001337126e3400520428acc006600200901580b20388804c54cc0b12413b65787065637420636865636b5f6175746828635f77616c6c65742c2065787472615f7369676e61746f726965732c207769746864726177616c7329001640ad02840ad027406d02740bc6eb80050321817800a05a302f002812409204902440c0605a0028158c0a4dd5000c089026408a045022811205c302b3028375400315330264912865787065637420496e6c696e65446174756d286f75747075745f646174756d29203d20646174756d001640946054605600715330254901266578706563742061735f64617461286e66745f696429203d3d2065787065637465645f6e6674001640908140dd59814801454cc09124012d65787065637420616464726573732e7061796d656e745f63726564656e7469616c203d3d206f776e5f637265640016408c6050002605000460466ea8c09800502444005020200640906e98cc084cdd81811180f9baa0014c0103a14001004bd6f7b630454cc07524012265787065637420536372697074286f776e5f6861736829203d206f776e5f63726564001640706042603c6ea80262b3001301100389919912cc004c054c080dd5000c4c966002003159800980b18109baa0018992cc00400603713259800800c4c96600200301d8992cc00400603d01e80f407a264b3001302b0038cc004012264b3001301b3027375400313259800cc00401a021011405d15980099b880014800229462b30013301e01123375e60520020071301d0018a5040988132294102619192cc004c074c0a4dd5000c5200089bad302d302a37540028138c966002603a60526ea80062980103d87a8000899198008009bab302e302b375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004cdc7a44100001899ba548000cc0c0c0b80092f5c114c0103d87a800040ad133004004303200340ac6eb8c0b0004c0bc00502d204e323300100100d2259800800c5300103d87a8000899192cc004cdc8802800c56600266e3c014006266e9520003302f302d0024bd7045300103d87a800040a9133004004303100340a86eb8c0ac004c0b800502c1bae302b3028375400315330264919165787065637420536372697074286f776e5f686173682920617320736372697074203d0a202020202020202020206d7573745f66696e6428696e707574732c20666e28696e70757429207b20696e7075742e6f75747075745f7265666572656e6365203d3d206f7574707574207d292e6f75747075742e616464726573732e7061796d656e745f63726564656e7469616c001640946054604e6ea8c0a8c09cdd5180e98139baa3301900d23375e605660506ea800402603e80a203e8140dd7000a05630280014098605000501c80e40720388148c09800502418111baa00180d203e80d406a03501a409c604860426ea80062a6603e9211a65787065637420536f6d6528646174756d29203d20646174756d00164078604400260446046002603c6ea80262b30013370e9003001c5660026024603a6ea8c084c088c078dd5004c528c5901b45901b2036406c80d8603660360026034603400460306030006602e603000845268a99803a491856616c696461746f722072657475726e65642066616c7365001365640181";
376
+ //#endregion
377
+ //#region ../../packages/lib/cnight-dust-designation/src/scripts/index.ts
378
+ const cborWrapHexBytes = (payloadHex) => {
379
+ const lengthBytes = payloadHex.length / 2;
380
+ let header;
381
+ if (lengthBytes < 24) header = (64 | lengthBytes).toString(16).padStart(2, "0");
382
+ else if (lengthBytes < 256) header = "58" + lengthBytes.toString(16).padStart(2, "0");
383
+ else if (lengthBytes < 65536) header = "59" + lengthBytes.toString(16).padStart(4, "0");
384
+ else if (lengthBytes < 4294967296) header = "5a" + lengthBytes.toString(16).padStart(8, "0");
385
+ else throw new Error(`script too large to CBOR-wrap (${lengthBytes} bytes)`);
386
+ return header + payloadHex;
387
+ };
388
+ const getDustGeneratorScriptCbor = (network) => (0, _laceio_cardano_util.HexBlob)(cborWrapHexBytes(network === CardanoDustNetwork.mainnet ? CNIGHT_GENERATES_DUST_MAINNET_CBOR : CNIGHT_GENERATES_DUST_TESTNET_CBOR));
389
+ const getDustGeneratorPlutusV3Script = (network) => _laceio_cardano_core.Serialization.PlutusV3Script.fromCbor(getDustGeneratorScriptCbor(network));
390
+ //#endregion
391
+ //#region ../../packages/lib/cnight-dust-designation/src/plutus/datum.ts
392
+ const encodeCWallet = (cWallet) => {
393
+ const fields = new _laceio_cardano_core.Serialization.PlutusList();
394
+ const hashBytes = cWallet.kind === "verificationKey" ? cWallet.stakeKeyHash : cWallet.scriptHash;
395
+ fields.add(_laceio_cardano_core.Serialization.PlutusData.newBytes(hashBytes));
396
+ const alternative = cWallet.kind === "verificationKey" ? 0n : 1n;
397
+ return _laceio_cardano_core.Serialization.PlutusData.newConstrPlutusData(new _laceio_cardano_core.Serialization.ConstrPlutusData(alternative, fields));
398
+ };
399
+ const encodeDustMappingDatum = (value) => {
400
+ const fields = new _laceio_cardano_core.Serialization.PlutusList();
401
+ fields.add(encodeCWallet(value.cWallet));
402
+ fields.add(_laceio_cardano_core.Serialization.PlutusData.newBytes(value.dustAddress));
403
+ return _laceio_cardano_core.Serialization.PlutusData.newConstrPlutusData(new _laceio_cardano_core.Serialization.ConstrPlutusData(0n, fields));
404
+ };
405
+ const dustMappingDatumToCbor = (value) => encodeDustMappingDatum(value).toCbor();
406
+ var CardanoStakeKeyHashError = class extends Error {
407
+ code;
408
+ constructor(message) {
409
+ super(message);
410
+ this.name = "CardanoStakeKeyHashError";
411
+ this.code = "invalid-length";
412
+ }
413
+ };
414
+ const CardanoStakeKeyHash = (bytes) => {
415
+ if (bytes.length !== 28) throw new CardanoStakeKeyHashError(`CardanoStakeKeyHash expects 28 bytes, got ${bytes.length}`);
416
+ return bytes;
417
+ };
418
+ CardanoStakeKeyHash.toHex = (hash) => Array.from(hash).map((b) => b.toString(16).padStart(2, "0")).join("");
419
+ CardanoStakeKeyHash.fromHex = (hex) => {
420
+ const normalised = hex.startsWith("0x") ? hex.slice(2) : hex;
421
+ if (normalised.length !== 56) throw new CardanoStakeKeyHashError(`CardanoStakeKeyHash hex expects 56 chars, got ${normalised.length}`);
422
+ if (!/^[0-9a-fA-F]+$/.test(normalised)) throw new CardanoStakeKeyHashError(`CardanoStakeKeyHash hex contains non-hex characters: ${hex}`);
423
+ const bytes = new Uint8Array(28);
424
+ for (let index = 0; index < bytes.length; index++) bytes[index] = parseInt(normalised.slice(index * 2, index * 2 + 2), 16);
425
+ return CardanoStakeKeyHash(bytes);
426
+ };
427
+ var MidnightCoinPubkeyError = class extends Error {
428
+ code;
429
+ constructor(code, message) {
430
+ super(message);
431
+ this.name = "MidnightCoinPubkeyError";
432
+ this.code = code;
433
+ }
434
+ };
435
+ const MidnightCoinPubkey = (bytes) => {
436
+ if (bytes.length > 33) throw new MidnightCoinPubkeyError("invalid-length", `MidnightCoinPubkey accepts at most 33 bytes, got ${bytes.length}`);
437
+ return bytes;
438
+ };
439
+ MidnightCoinPubkey.toHex = (pubkey) => Array.from(pubkey).map((b) => b.toString(16).padStart(2, "0")).join("");
440
+ //#endregion
441
+ //#region ../../packages/lib/cnight-dust-designation/src/plutus/datum-decode.ts
442
+ const decodeDustMappingDatum = (cbor) => {
443
+ let data;
444
+ try {
445
+ data = _laceio_cardano_core.Serialization.PlutusData.fromCbor((0, _laceio_cardano_util.HexBlob)(cbor.toString()));
446
+ } catch {
447
+ return;
448
+ }
449
+ const outer = data.asConstrPlutusData();
450
+ if (!outer || outer.getAlternative() !== 0n) return void 0;
451
+ const fields = outer.getData();
452
+ if (fields.getLength() !== 2) return void 0;
453
+ const cWalletData = fields.get(0).asConstrPlutusData();
454
+ if (!cWalletData) return void 0;
455
+ const cWalletFields = cWalletData.getData();
456
+ if (cWalletFields.getLength() !== 1) return void 0;
457
+ const credBytes = cWalletFields.get(0).asBoundedBytes();
458
+ if (!credBytes || credBytes.length !== 28) return void 0;
459
+ let cWallet;
460
+ if (cWalletData.getAlternative() === 0n) cWallet = {
461
+ kind: "verificationKey",
462
+ stakeKeyHash: CardanoStakeKeyHash(credBytes)
463
+ };
464
+ else if (cWalletData.getAlternative() === 1n) cWallet = {
465
+ kind: "script",
466
+ scriptHash: credBytes
467
+ };
468
+ else return;
469
+ const dustBytes = fields.get(1).asBoundedBytes();
470
+ if (!dustBytes || dustBytes.length > 33) return void 0;
471
+ let dustAddress;
472
+ try {
473
+ dustAddress = MidnightCoinPubkey(dustBytes);
474
+ } catch {
475
+ return;
476
+ }
477
+ return {
478
+ cWallet,
479
+ dustAddress
480
+ };
481
+ };
482
+ /**
483
+ * True when the datum's c_wallet VerificationKey hash matches the
484
+ * given stake-key-hash. Used by the designation-detection hook to
485
+ * find the active account's registration UTxO among the script
486
+ * address's outputs.
487
+ */
488
+ const datumMatchesStakeKey = (datum, stakeKeyHash) => {
489
+ if (datum.cWallet.kind !== "verificationKey") return false;
490
+ if (datum.cWallet.stakeKeyHash.length !== stakeKeyHash.length) return false;
491
+ for (let index = 0; index < stakeKeyHash.length; index++) if (datum.cWallet.stakeKeyHash[index] !== stakeKeyHash[index]) return false;
492
+ return true;
493
+ };
494
+ //#endregion
495
+ //#region ../../packages/lib/cnight-dust-designation/src/plutus/redeemer.ts
496
+ const emptyConstr = (alternative) => _laceio_cardano_core.Serialization.PlutusData.newConstrPlutusData(new _laceio_cardano_core.Serialization.ConstrPlutusData(alternative, new _laceio_cardano_core.Serialization.PlutusList()));
497
+ const dustActionCreate = () => emptyConstr(0n);
498
+ const dustActionBurn = () => emptyConstr(1n);
499
+ const dataVoid = () => emptyConstr(0n);
500
+ const dustActionCreateCbor = () => dustActionCreate().toCbor();
501
+ const dustActionBurnCbor = () => dustActionBurn().toCbor();
502
+ const dataVoidCbor = () => dataVoid().toCbor();
503
+ //#endregion
504
+ //#region ../../packages/lib/cnight-dust-designation/src/plutus/script-address.ts
505
+ const getDustGeneratorScriptHash = (network) => getDustGeneratorPlutusV3Script(network).hash();
506
+ const getDustGeneratorPaymentAddress = (network) => {
507
+ const scriptHash = getDustGeneratorScriptHash(network);
508
+ const networkId = CardanoDustNetwork.toNetworkId(network);
509
+ const credential = {
510
+ type: _laceio_cardano_core.Cardano.CredentialType.ScriptHash,
511
+ hash: scriptHash
512
+ };
513
+ return _laceio_cardano_core.Cardano.EnterpriseAddress.fromCredentials(networkId, credential).toAddress().toBech32();
514
+ };
515
+ const getDustGeneratorRewardAccount = (network) => {
516
+ const scriptHash = getDustGeneratorScriptHash(network);
517
+ const networkId = CardanoDustNetwork.toNetworkId(network);
518
+ const credential = {
519
+ type: _laceio_cardano_core.Cardano.CredentialType.ScriptHash,
520
+ hash: scriptHash
521
+ };
522
+ return _laceio_cardano_core.Cardano.RewardAddress.fromCredentials(networkId, credential).toAddress().toBech32();
523
+ };
524
+ const getDustMappingNftPolicyId = (network) => _laceio_cardano_core.Cardano.PolicyId(getDustGeneratorScriptHash(network));
525
+ /**
526
+ * The DUST-mapping NFT minted by the validator has policy = script
527
+ * hash and asset_name = empty bytestring. This is the on-chain
528
+ * identifier callers query for to determine "is this account
529
+ * designated?".
530
+ */
531
+ const getDustMappingNftAssetId = (network) => _laceio_cardano_core.Cardano.AssetId.fromParts(getDustMappingNftPolicyId(network), _laceio_cardano_core.Cardano.AssetName(""));
532
+ //#endregion
533
+ //#region ../../packages/lib/cnight-dust-designation/src/dust-address-decode.ts
534
+ const COMPACT_MODE_1_MIN = 64n;
535
+ const COMPACT_MODE_2_MIN = 1n << 14n;
536
+ const COMPACT_MODE_3_MIN = 1n << 30n;
537
+ const BLS12_381_SCALAR_MODULUS = BigInt("0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001");
538
+ const leBytesToScalar = (bytes) => {
539
+ let scalar = 0n;
540
+ for (let index = bytes.length - 1; index >= 0; index--) scalar = scalar << 8n | BigInt(bytes[index]);
541
+ return scalar;
542
+ };
543
+ /**
544
+ * Why `payload` is not the canonical (minimal) SCALE-compact encoding of an
545
+ * in-field BLS12-381 scalar, or `undefined` when it is.
546
+ *
547
+ * Minimality is ours to enforce: neither the Midnight SDK codec nor the
548
+ * midnight-node pallet checks it, and a padded encoding's claimability is
549
+ * unknown — so a non-canonical target must never reach the datum.
550
+ *
551
+ * Returns a reason instead of throwing so each boundary can surface it in its
552
+ * own channel: this file throws at the address-string input boundary, the
553
+ * blueprint builder returns `Err` at the datum-write boundary.
554
+ */
555
+ const canonicalDustPayloadDefect = (payload) => {
556
+ if (payload.length === 0) return "empty payload";
557
+ const header = payload[0];
558
+ const mode = header & 3;
559
+ let scalar;
560
+ if (mode === 0) {
561
+ if (payload.length !== 1) return `single-byte mode declared, ${payload.length}-byte payload`;
562
+ scalar = BigInt(header >> 2);
563
+ } else if (mode === 1) {
564
+ if (payload.length !== 2) return `two-byte mode declared, ${payload.length}-byte payload`;
565
+ scalar = BigInt(header >> 2) + (BigInt(payload[1]) << 6n);
566
+ if (scalar < COMPACT_MODE_1_MIN) return `${scalar} fits a shorter mode`;
567
+ } else if (mode === 2) {
568
+ if (payload.length !== 4) return `four-byte mode declared, ${payload.length}-byte payload`;
569
+ scalar = BigInt(header >> 2) + (BigInt(payload[1]) << 6n) + (BigInt(payload[2]) << 14n) + (BigInt(payload[3]) << 22n);
570
+ if (scalar < COMPACT_MODE_2_MIN) return `${scalar} fits a shorter mode`;
571
+ } else {
572
+ const declaredScalarBytes = (header >> 2) + 4;
573
+ if (payload.length !== declaredScalarBytes + 1) return `${declaredScalarBytes}-byte scalar declared, ${payload.length - 1} bytes present`;
574
+ if (payload[payload.length - 1] === 0) return "most significant scalar byte is zero";
575
+ scalar = leBytesToScalar(payload.subarray(1));
576
+ if (scalar < COMPACT_MODE_3_MIN) return `${scalar} fits a shorter mode`;
577
+ }
578
+ return scalar >= BLS12_381_SCALAR_MODULUS ? "scalar is outside the BLS12-381 field" : void 0;
579
+ };
580
+ //#endregion
581
+ //#region ../../packages/lib/cnight-dust-designation/src/builders/build-night-designation-tx.ts
582
+ const NFT_ASSET_NAME = _laceio_cardano_core.Cardano.AssetName("");
583
+ const computeScriptOutputLovelace = ({ scriptAddress, nftAsset, datumCbor, coinsPerUtxoByte }) => {
584
+ const datum = _laceio_cardano_core.Serialization.PlutusData.fromCbor(datumCbor).toCore();
585
+ const representativeOutput = {
586
+ address: scriptAddress,
587
+ value: {
588
+ coins: LOVELACE_FOR_REGISTRATION,
589
+ assets: new Map([[nftAsset, 1n]])
590
+ },
591
+ datum
592
+ };
593
+ const minCoin = (0, _laceio_cardano_tx_construction.computeMinimumCoinQuantity)(coinsPerUtxoByte)(representativeOutput);
594
+ return minCoin < 1586080n ? LOVELACE_FOR_REGISTRATION : minCoin;
595
+ };
596
+ const dustPubkeyError = (dustPubkey) => {
597
+ if (dustPubkey.length > 33) return {
598
+ code: "dust-address-too-long",
599
+ message: `dust_address exceeds the on-chain 33-byte limit enforced by the validator.`,
600
+ actualBytes: dustPubkey.length,
601
+ maxBytes: 33
602
+ };
603
+ const defect = canonicalDustPayloadDefect(dustPubkey);
604
+ return defect === void 0 ? void 0 : {
605
+ code: "invalid-dust-payload",
606
+ message: `dust_address is not a canonical SCALE-compact payload (${defect}).`
607
+ };
608
+ };
609
+ const buildNightDesignationTxBlueprint = (params) => {
610
+ if (params.cnightUtxos.length === 0) return Err({
611
+ code: "no-cnight",
612
+ message: "No cNIGHT in this account."
613
+ });
614
+ const scriptAddress = getDustGeneratorPaymentAddress(params.network);
615
+ const scriptRewardAccount = getDustGeneratorRewardAccount(params.network);
616
+ const nftPolicyId = getDustMappingNftPolicyId(params.network);
617
+ const nftAsset = getDustMappingNftAssetId(params.network);
618
+ const scriptCbor = getDustGeneratorScriptCbor(params.network);
619
+ const requiredSigners = {
620
+ paymentKeyHash: params.paymentKeyHash,
621
+ stakeKeyHash: params.stakeKeyHash
622
+ };
623
+ if (params.action.kind === "register") {
624
+ const dustError = dustPubkeyError(params.action.dustPubkey);
625
+ if (dustError) return Err(dustError);
626
+ const datumCbor = dustMappingDatumToCbor({
627
+ cWallet: {
628
+ kind: "verificationKey",
629
+ stakeKeyHash: params.stakeKeyHash
630
+ },
631
+ dustAddress: params.action.dustPubkey
632
+ });
633
+ return Ok({
634
+ network: params.network,
635
+ scriptAddress,
636
+ scriptRewardAccount,
637
+ dustMappingNftAssetId: nftAsset,
638
+ forcedInputs: params.cnightUtxos,
639
+ scriptOutput: {
640
+ address: scriptAddress,
641
+ lovelace: computeScriptOutputLovelace({
642
+ scriptAddress,
643
+ nftAsset,
644
+ datumCbor,
645
+ coinsPerUtxoByte: params.coinsPerUtxoByte
646
+ }),
647
+ nftAsset,
648
+ nftQuantity: 1n,
649
+ inlineDatumCbor: datumCbor
650
+ },
651
+ mint: {
652
+ policyId: nftPolicyId,
653
+ assetName: NFT_ASSET_NAME,
654
+ quantity: 1n,
655
+ redeemerCbor: dustActionCreateCbor()
656
+ },
657
+ spendRedeemer: null,
658
+ withdrawal: null,
659
+ requiredSigners,
660
+ scriptCbor
661
+ });
662
+ }
663
+ if (params.action.kind === "update") {
664
+ const dustError = dustPubkeyError(params.action.dustPubkey);
665
+ if (dustError) return Err(dustError);
666
+ const datumCbor = dustMappingDatumToCbor({
667
+ cWallet: {
668
+ kind: "verificationKey",
669
+ stakeKeyHash: params.stakeKeyHash
670
+ },
671
+ dustAddress: params.action.dustPubkey
672
+ });
673
+ return Ok({
674
+ network: params.network,
675
+ scriptAddress,
676
+ scriptRewardAccount,
677
+ dustMappingNftAssetId: nftAsset,
678
+ forcedInputs: [...params.cnightUtxos, params.action.registrationUtxo],
679
+ scriptOutput: {
680
+ address: scriptAddress,
681
+ lovelace: computeScriptOutputLovelace({
682
+ scriptAddress,
683
+ nftAsset,
684
+ datumCbor,
685
+ coinsPerUtxoByte: params.coinsPerUtxoByte
686
+ }),
687
+ nftAsset,
688
+ nftQuantity: 1n,
689
+ inlineDatumCbor: datumCbor
690
+ },
691
+ mint: null,
692
+ spendRedeemer: {
693
+ registrationUtxo: params.action.registrationUtxo,
694
+ redeemerCbor: dataVoidCbor()
695
+ },
696
+ withdrawal: {
697
+ rewardAccount: scriptRewardAccount,
698
+ lovelace: params.action.scriptWithdrawableLovelace,
699
+ redeemerCbor: dataVoidCbor()
700
+ },
701
+ requiredSigners,
702
+ scriptCbor
703
+ });
704
+ }
705
+ return Ok({
706
+ network: params.network,
707
+ scriptAddress,
708
+ scriptRewardAccount,
709
+ dustMappingNftAssetId: nftAsset,
710
+ forcedInputs: [...params.cnightUtxos, params.action.registrationUtxo],
711
+ scriptOutput: null,
712
+ mint: {
713
+ policyId: nftPolicyId,
714
+ assetName: NFT_ASSET_NAME,
715
+ quantity: -1n,
716
+ redeemerCbor: dustActionBurnCbor()
717
+ },
718
+ spendRedeemer: {
719
+ registrationUtxo: params.action.registrationUtxo,
720
+ redeemerCbor: dataVoidCbor()
721
+ },
722
+ withdrawal: null,
723
+ requiredSigners,
724
+ scriptCbor
725
+ });
726
+ };
727
+ //#endregion
728
+ //#region ../../packages/lib/cnight-dust-designation/src/value-objects/cardano-payment-key-hash.vo.ts
729
+ var CardanoPaymentKeyHashError = class extends Error {
730
+ code;
731
+ constructor(message) {
732
+ super(message);
733
+ this.name = "CardanoPaymentKeyHashError";
734
+ this.code = "invalid-length";
735
+ }
736
+ };
737
+ const CardanoPaymentKeyHash = (bytes) => {
738
+ if (bytes.length !== 28) throw new CardanoPaymentKeyHashError(`CardanoPaymentKeyHash expects 28 bytes, got ${bytes.length}`);
739
+ return bytes;
740
+ };
741
+ CardanoPaymentKeyHash.toHex = (hash) => Array.from(hash).map((b) => b.toString(16).padStart(2, "0")).join("");
742
+ CardanoPaymentKeyHash.fromHex = (hex) => {
743
+ const normalised = hex.startsWith("0x") ? hex.slice(2) : hex;
744
+ if (normalised.length !== 56) throw new CardanoPaymentKeyHashError(`CardanoPaymentKeyHash hex expects 56 chars, got ${normalised.length}`);
745
+ if (!/^[0-9a-fA-F]+$/.test(normalised)) throw new CardanoPaymentKeyHashError(`CardanoPaymentKeyHash hex contains non-hex characters: ${hex}`);
746
+ const bytes = new Uint8Array(28);
747
+ for (let index = 0; index < bytes.length; index++) bytes[index] = parseInt(normalised.slice(index * 2, index * 2 + 2), 16);
748
+ return CardanoPaymentKeyHash(bytes);
749
+ };
750
+ //#endregion
751
+ //#region ../../packages/module/blockchain-cardano/src/store/night-designation/account-key-hashes.ts
752
+ const hexToBytes = (hex) => {
753
+ if (hex.length % 2 !== 0 || !/^[0-9a-fA-F]*$/.test(hex)) throw new Error(`Invalid hex string: "${hex}"`);
754
+ return Uint8Array.from((hex.match(/.{1,2}/g) ?? []).map((byte) => parseInt(byte, 16)));
755
+ };
756
+ /**
757
+ * Read the account's credentials off its primary Cardano address.
758
+ *
759
+ * Throws when the account has no Cardano address or its address carries no
760
+ * stake credential — an enterprise address cannot satisfy the validator's
761
+ * `check_auth`, so there is no designation to build or index for it.
762
+ */
763
+ const resolveAccountKeyHashes = (addresses, accountId) => {
764
+ const primary = addresses.find((address) => address.accountId === accountId && address.blockchainName === "Cardano");
765
+ if (!primary) throw new Error("No Cardano addresses found for account");
766
+ const baseAddress = _laceio_cardano_core.Cardano.Address.fromString(primary.address)?.asBase();
767
+ if (!baseAddress) throw new Error("Account address is not a base (payment+stake) address");
768
+ return {
769
+ primaryAddress: _laceio_cardano_core.Cardano.PaymentAddress(primary.address),
770
+ paymentKeyHash: CardanoPaymentKeyHash(hexToBytes(baseAddress.getPaymentCredential().hash)),
771
+ stakeKeyHash: CardanoStakeKeyHash(hexToBytes(baseAddress.getStakeCredential().hash))
772
+ };
773
+ };
774
+ //#endregion
775
+ //#region ../../packages/module/blockchain-cardano/src/store/night-designation/build-night-designation-tx.ts
776
+ const toPlutusData = (cbor) => _laceio_cardano_core.Serialization.PlutusData.fromCbor(cbor).toCore();
777
+ const toKeyHashHex = (bytes) => Array.from(bytes).map((byte) => byte.toString(16).padStart(2, "0")).join("");
778
+ const sameRef = (a, b) => a.txId === b.txId && a.index === b.index;
779
+ const buildNightDesignationTx = async (params, dependencies) => {
780
+ const blueprintResult = buildNightDesignationTxBlueprint({
781
+ network: params.network,
782
+ cnightUtxos: params.cnightUtxos,
783
+ stakeKeyHash: params.stakeKeyHash,
784
+ paymentKeyHash: params.paymentKeyHash,
785
+ action: params.action,
786
+ coinsPerUtxoByte: params.protocolParameters.coinsPerUtxoByte
787
+ });
788
+ if (!blueprintResult.ok) return blueprintResult;
789
+ const blueprint = blueprintResult.value;
790
+ const builder = new require_TransactionBuilder.TransactionBuilder(dependencies.networkMagic, params.protocolParameters);
791
+ builder.setChangeAddress(params.changeAddress).setUnspentOutputs(dependencies.coverUtxos).setCollateralUtxos(dependencies.collateralUtxos).setCollateralChangeAddress(params.changeAddress).setPlutusContext({
792
+ costModels: params.protocolParameters.costModels,
793
+ txEvaluator: dependencies.txEvaluator,
794
+ inputResolver: dependencies.inputResolver
795
+ });
796
+ builder.attachScript({
797
+ __type: _laceio_cardano_core.Cardano.ScriptType.Plutus,
798
+ version: _laceio_cardano_core.Cardano.PlutusLanguageVersion.V3,
799
+ bytes: _laceio_cardano_core.Serialization.PlutusV3Script.fromCbor(blueprint.scriptCbor).rawBytes()
800
+ });
801
+ const registrationRef = blueprint.spendRedeemer?.registrationUtxo[0];
802
+ for (const utxo of blueprint.forcedInputs) if (blueprint.spendRedeemer && registrationRef && sameRef(utxo[0], registrationRef)) builder.addInput(utxo, { redeemer: toPlutusData(blueprint.spendRedeemer.redeemerCbor) });
803
+ else builder.addInput(utxo);
804
+ if (blueprint.mint) {
805
+ const assetId = _laceio_cardano_core.Cardano.AssetId.fromParts(blueprint.mint.policyId, blueprint.mint.assetName);
806
+ builder.mintAssets(new Map([[assetId, blueprint.mint.quantity]]), toPlutusData(blueprint.mint.redeemerCbor));
807
+ }
808
+ if (blueprint.scriptOutput) builder.addOutput({
809
+ address: blueprint.scriptOutput.address,
810
+ value: {
811
+ coins: blueprint.scriptOutput.lovelace,
812
+ assets: new Map([[blueprint.scriptOutput.nftAsset, blueprint.scriptOutput.nftQuantity]])
813
+ },
814
+ datum: toPlutusData(blueprint.scriptOutput.inlineDatumCbor)
815
+ });
816
+ if (blueprint.withdrawal) builder.addScriptWithdrawal(blueprint.withdrawal.rewardAccount, blueprint.withdrawal.lovelace, toPlutusData(blueprint.withdrawal.redeemerCbor));
817
+ builder.addRequiredSigner(toKeyHashHex(blueprint.requiredSigners.paymentKeyHash));
818
+ builder.addRequiredSigner(toKeyHashHex(blueprint.requiredSigners.stakeKeyHash));
819
+ builder.setValidityInterval({ invalidHereafter: params.ttlSlot });
820
+ const transaction = await builder.build();
821
+ const cbor = transaction.toCbor();
822
+ const fee = transaction.body().fee();
823
+ return Ok({
824
+ cbor,
825
+ txId: transaction.getId(),
826
+ fee
827
+ });
828
+ };
829
+ //#endregion
830
+ //#region ../../packages/module/blockchain-cardano/src/store/night-designation/bounded-ex-units-evaluator.ts
831
+ const BOUNDED_EX_UNITS_PER_REDEEMER = {
832
+ memory: 2e6,
833
+ steps: 7e8
834
+ };
835
+ /**
836
+ * A {@link TxEvaluator} that returns a fixed, conservative budget for
837
+ * every redeemer in the transaction (no network round-trip).
838
+ */
839
+ const boundedExUnitsEvaluator = { evaluate: async (tx) => (tx.witness.redeemers ?? []).map((redeemer) => ({
840
+ purpose: redeemer.purpose,
841
+ index: redeemer.index,
842
+ budget: BOUNDED_EX_UNITS_PER_REDEEMER
843
+ })) };
844
+ //#endregion
845
+ //#region ../../packages/module/blockchain-cardano/src/store/night-designation/provider-ex-units-evaluator.ts
846
+ /**
847
+ * Padding on every evaluated budget. The builder rewrites the fee (and the
848
+ * change output that absorbs it) AFTER evaluation, so the script context the
849
+ * node executes is not byte-identical to the one it priced. Under-declaring
850
+ * fails phase-2 and forfeits the collateral, so the difference is paid for
851
+ * rather than gambled on.
852
+ */
853
+ const EX_UNITS_MARGIN_PERCENT = 10;
854
+ const withMargin = (budget) => ({
855
+ memory: Math.ceil(budget.memory * (100 + EX_UNITS_MARGIN_PERCENT) / 100),
856
+ steps: Math.ceil(budget.steps * (100 + EX_UNITS_MARGIN_PERCENT) / 100)
857
+ });
858
+ /**
859
+ * A {@link TxEvaluator} that prices redeemers through the Cardano provider,
860
+ * leaving any redeemer the provider did not price on the fixed budget
861
+ * `boundedExUnitsEvaluator` assigns it.
862
+ */
863
+ const createProviderExUnitsEvaluator = ({ cardanoProvider, chainId, logger }) => {
864
+ const evaluate = async (tx) => {
865
+ try {
866
+ const result = await (0, rxjs.firstValueFrom)(cardanoProvider.evaluateTx({ tx: _laceio_cardano_core.Serialization.Transaction.fromCore(tx).toCbor() }, { chainId }));
867
+ if (result.isOk()) return result.value;
868
+ logger.warn("cNIGHT designation: ex-units evaluation declined, using the bounded budget", result.error);
869
+ } catch (error) {
870
+ logger.warn("cNIGHT designation: ex-units evaluation failed, using the bounded budget", error);
871
+ }
872
+ };
873
+ return { evaluate: async (tx, resolvedInputs) => {
874
+ const bounded = await boundedExUnitsEvaluator.evaluate(tx, resolvedInputs);
875
+ if (bounded.length === 0) return bounded;
876
+ const evaluated = await evaluate(tx);
877
+ return bounded.map((entry) => {
878
+ const match = evaluated?.find((budget) => budget.purpose === entry.purpose && budget.index === entry.index);
879
+ return match ? {
880
+ ...entry,
881
+ budget: withMargin(match.budget)
882
+ } : entry;
883
+ });
884
+ } };
885
+ };
886
+ //#endregion
887
+ //#region ../../packages/module/blockchain-cardano/src/store/night-designation/registration-utxo.ts
888
+ const decodeDatumOrSkip = (datum) => {
889
+ try {
890
+ return decodeDustMappingDatum(_laceio_cardano_core.Serialization.PlutusData.fromCore(datum).toCbor());
891
+ } catch {
892
+ return;
893
+ }
894
+ };
895
+ /**
896
+ * Pick the account's registration out of the UTxOs sitting at the dust
897
+ * generator's script address.
898
+ *
899
+ * A registration is identified by the singleton DUST-mapping NFT plus an
900
+ * inline `DustMappingDatum` whose `c_wallet` verification-key hash is the
901
+ * account's stake key hash. Undecodable datums belong to other accounts (or
902
+ * to a future datum revision) and are skipped rather than treated as errors.
903
+ */
904
+ const findRegistrationUtxo = (scriptUtxos, nftAssetId, stakeKeyHash) => {
905
+ for (const utxo of scriptUtxos) {
906
+ const [, out] = utxo;
907
+ if (out.value.assets?.get(nftAssetId) !== 1n) continue;
908
+ if (!out.datum) continue;
909
+ const datum = decodeDatumOrSkip(out.datum);
910
+ if (datum && datumMatchesStakeKey(datum, stakeKeyHash)) return {
911
+ utxo,
912
+ datum
913
+ };
914
+ }
915
+ };
916
+ //#endregion
917
+ //#region ../../packages/module/blockchain-cardano/src/store/night-designation/build-side-effect.ts
918
+ const TTL_BUFFER_SLOTS = 7200;
919
+ const LIVE_PENDING_WINDOW_MS = TTL_BUFFER_SLOTS * 1e3 + 6e5;
920
+ const PENDING_READ_TIMEOUT_MS = 2e3;
921
+ const NO_PENDING_ACTIVITIES = [];
922
+ /**
923
+ * Only `designate` counts: an update/deregister with no confirmed marker
924
+ * already fails `no-registration-utxo`, and with one the scan already refuses
925
+ * a designate — so widening this over-blocks for no safety gain.
926
+ */
927
+ const hasLivePendingDesignate = (pendingActivities) => pendingActivities.some((activity) => {
928
+ if (activity.blockchainSpecific?.Cardano?.nightDesignation?.action !== "designate") return false;
929
+ return Date.now() - activity.timestamp < LIVE_PENDING_WINDOW_MS;
930
+ });
931
+ const BUILD_ERROR_KEYS_BY_CODE = {
932
+ "already-registered": {
933
+ title: "v2.cnight-designation.build.error.already-registered.title",
934
+ subtitle: "v2.cnight-designation.build.error.already-registered.subtitle"
935
+ },
936
+ "no-cnight": {
937
+ title: "v2.cnight-designation.build.error.no-cnight.title",
938
+ subtitle: "v2.cnight-designation.build.error.no-cnight.subtitle"
939
+ },
940
+ "no-cardano-utxos": {
941
+ title: "v2.cnight-designation.build.error.no-cardano-utxos.title",
942
+ subtitle: "v2.cnight-designation.build.error.no-cardano-utxos.subtitle"
943
+ },
944
+ "no-registration-utxo": {
945
+ title: "v2.cnight-designation.build.error.no-registration-utxo.title",
946
+ subtitle: "v2.cnight-designation.build.error.no-registration-utxo.subtitle"
947
+ },
948
+ "script-stake-unregistered": {
949
+ title: "v2.cnight-designation.build.error.script-stake-unregistered.title",
950
+ subtitle: "v2.cnight-designation.build.error.script-stake-unregistered.subtitle"
951
+ }
952
+ };
953
+ const GENERIC_BUILD_ERROR_KEYS = {
954
+ title: "v2.cnight-designation.build.error.title",
955
+ subtitle: "v2.cnight-designation.build.error.subtitle"
956
+ };
957
+ const errorTranslationKeysForCode = (code) => (code ? BUILD_ERROR_KEYS_BY_CODE[code] : void 0) ?? GENERIC_BUILD_ERROR_KEYS;
958
+ const failure = (error, code) => ({
959
+ success: false,
960
+ error: {
961
+ name: error.name,
962
+ message: error.message
963
+ },
964
+ errorTranslationKeys: errorTranslationKeysForCode(code)
965
+ });
966
+ /**
967
+ * Resolve the rich cNIGHT action from the serializable `Building` state by
968
+ * scanning the script address for the registration UTxO whose inline datum is
969
+ * bound to the account's stake key. Every action needs that answer, not just
970
+ * update/deregister: Midnight honours neither of two registrations and the
971
+ * second revokes the first, so a designate over an existing one is refused
972
+ * here (`already-registered`) rather than signed. For update it also reads the
973
+ * script reward account so the withdrawal entry matches the amount the ledger
974
+ * will actually let the tx take.
975
+ */
976
+ const resolveAction = async ({ state, network, stakeKeyHash, dependencies, chainId, pendingActivities }) => {
977
+ const dustPubkey = state.dustPubkeyHex === void 0 ? void 0 : MidnightCoinPubkey(hexToBytes(state.dustPubkeyHex));
978
+ const scriptAddress = getDustGeneratorPaymentAddress(network);
979
+ const registration = findRegistrationUtxo(await (0, rxjs.firstValueFrom)(require_unwrap_provider_result.unwrapProviderResult(() => dependencies.cardanoProvider.getUtxosAtAddress({ address: scriptAddress }, { chainId }))), getDustMappingNftAssetId(network), stakeKeyHash);
980
+ if (state.action === "designate") {
981
+ if (registration) throw Object.assign(/* @__PURE__ */ new Error("This account already has a cNIGHT designation"), { code: "already-registered" });
982
+ if (hasLivePendingDesignate(pendingActivities)) throw Object.assign(/* @__PURE__ */ new Error("A cNIGHT designation for this account is still confirming"), { code: "already-registered" });
983
+ if (!dustPubkey) throw new Error("Missing dust pubkey for designate");
984
+ return {
985
+ kind: "register",
986
+ dustPubkey
987
+ };
988
+ }
989
+ if (!registration) throw Object.assign(/* @__PURE__ */ new Error("No cNIGHT designation registration found for this account"), { code: "no-registration-utxo" });
990
+ if (state.action === "deregister") return {
991
+ kind: "deregister",
992
+ registrationUtxo: registration.utxo
993
+ };
994
+ if (!dustPubkey) throw new Error("Missing dust pubkey for update");
995
+ const scriptRewardAccountInfo = await (0, rxjs.firstValueFrom)(require_unwrap_provider_result.unwrapProviderResult(() => dependencies.cardanoProvider.getRewardAccountInfo({ rewardAccount: require_util.CardanoRewardAccount(getDustGeneratorRewardAccount(network)) }, { chainId })));
996
+ if (!scriptRewardAccountInfo.isRegistered) throw Object.assign(/* @__PURE__ */ new Error("The cNIGHT validator's reward account is not registered on this network"), { code: "script-stake-unregistered" });
997
+ return {
998
+ kind: "update",
999
+ dustPubkey,
1000
+ registrationUtxo: registration.utxo,
1001
+ scriptWithdrawableLovelace: require_bignum_vo.BigNumber.valueOf(scriptRewardAccountInfo.withdrawableAmount)
1002
+ };
1003
+ };
1004
+ const buildDesignation = async (state, dependencies, pendingActivities) => {
1005
+ try {
1006
+ const { accountId } = state;
1007
+ const cardano = dependencies.txExecutorCardano;
1008
+ const [chainId, allAccountUtxos, unspendableUtxos, cardanoAddresses] = await Promise.all([
1009
+ (0, rxjs.firstValueFrom)(cardano.cardanoChainId$),
1010
+ (0, rxjs.firstValueFrom)(cardano.cardanoAccountUtxos$),
1011
+ (0, rxjs.firstValueFrom)(cardano.cardanoAccountUnspendableUtxos$),
1012
+ (0, rxjs.firstValueFrom)(cardano.cardanoAddresses$)
1013
+ ]);
1014
+ if (!chainId) throw new Error("Cardano chain id not available");
1015
+ require_account_guards.refuseExtensionAccount(accountId, cardanoAddresses);
1016
+ const [protocolParameters, tip] = await Promise.all([(0, rxjs.firstValueFrom)(require_unwrap_provider_result.unwrapProviderResult(() => dependencies.cardanoProvider.getProtocolParameters({ chainId }))), (0, rxjs.firstValueFrom)(require_unwrap_provider_result.unwrapProviderResult(() => dependencies.cardanoProvider.getTip({ chainId })))]);
1017
+ const network = CardanoDustNetwork.fromNetworkMagic(chainId.networkMagic);
1018
+ const { primaryAddress, paymentKeyHash, stakeKeyHash } = resolveAccountKeyHashes(cardanoAddresses, accountId);
1019
+ const accountUtxos = allAccountUtxos[accountId] ?? [];
1020
+ const reservedUtxos = unspendableUtxos[accountId] ?? [];
1021
+ const spendable = require_util.filterSpendableUtxos(accountUtxos, reservedUtxos);
1022
+ const cnightAssetId = getCnightAssetId(network);
1023
+ const cnightUtxos = spendable.filter(([, out]) => out.value.assets?.has(cnightAssetId));
1024
+ const coverUtxos = spendable.filter(([, out]) => !out.value.assets?.has(cnightAssetId));
1025
+ const reservedKeys = new Set(reservedUtxos.map(require_util.utxoKey));
1026
+ const reservedCollateral = require_util.getEligibleCollateralUtxo(accountUtxos.filter((utxo) => reservedKeys.has(require_util.utxoKey(utxo)) && utxo[1].address === primaryAddress));
1027
+ const action = await resolveAction({
1028
+ state,
1029
+ network,
1030
+ stakeKeyHash,
1031
+ dependencies,
1032
+ chainId,
1033
+ pendingActivities
1034
+ });
1035
+ if (coverUtxos.length === 0) return failure(/* @__PURE__ */ new Error("No ADA-only UTxO available to cover fee and outputs"), "no-cardano-utxos");
1036
+ const result = await buildNightDesignationTx({
1037
+ network,
1038
+ action,
1039
+ cnightUtxos,
1040
+ paymentKeyHash,
1041
+ stakeKeyHash,
1042
+ changeAddress: primaryAddress,
1043
+ ttlSlot: _laceio_cardano_core.Cardano.Slot(Number(tip.slot) + TTL_BUFFER_SLOTS),
1044
+ protocolParameters
1045
+ }, {
1046
+ networkMagic: chainId.networkMagic,
1047
+ coverUtxos,
1048
+ collateralUtxos: reservedCollateral ? [reservedCollateral] : coverUtxos,
1049
+ txEvaluator: createProviderExUnitsEvaluator({
1050
+ cardanoProvider: dependencies.cardanoProvider,
1051
+ chainId,
1052
+ logger: dependencies.logger
1053
+ }),
1054
+ inputResolver: require_util.createInputResolver([
1055
+ ...cnightUtxos,
1056
+ ...coverUtxos,
1057
+ ...action.kind === "register" ? [] : [action.registrationUtxo]
1058
+ ])
1059
+ });
1060
+ if (!result.ok) return failure(new Error(result.error.message), result.error.code);
1061
+ return {
1062
+ success: true,
1063
+ serializedTx: result.value.cbor,
1064
+ fees: [{
1065
+ tokenId: require_const.LOVELACE_TOKEN_ID,
1066
+ amount: require_bignum_vo.BigNumber(result.value.fee)
1067
+ }]
1068
+ };
1069
+ } catch (error) {
1070
+ const code = error instanceof require_TransactionBuilder.InputSelectionError ? "no-cardano-utxos" : error.code;
1071
+ return failure(error instanceof Error ? error : new Error(String(error)), code);
1072
+ }
1073
+ };
1074
+ const makeNightDesignationBuilding = () => (_, stateObservables, dependencies) => require_first_state_of_status.firstStateOfStatus(stateObservables.nightDesignationFlow.selectState$, "Building").pipe((0, rxjs.switchMap)((state) => stateObservables.activities.selectPendingActivitiesByAccount$.pipe((0, rxjs.map)((byAccount) => byAccount[state.accountId] ?? NO_PENDING_ACTIVITIES), (0, rxjs.take)(1), (0, rxjs.timeout)({
1075
+ first: PENDING_READ_TIMEOUT_MS,
1076
+ with: () => (0, rxjs.of)(NO_PENDING_ACTIVITIES)
1077
+ }), (0, rxjs.switchMap)((pendingActivities) => (0, rxjs.from)(buildDesignation(state, dependencies, pendingActivities)).pipe((0, rxjs.map)((result) => dependencies.actions.nightDesignationFlow.buildCompleted({
1078
+ accountId: state.accountId,
1079
+ result
1080
+ })))))));
1081
+ //#endregion
1082
+ //#region ../../packages/module/blockchain-cardano/src/store/night-designation/index-side-effect.ts
1083
+ /**
1084
+ * How long a refresh waits for the chain id and addresses it scans with.
1085
+ *
1086
+ * Only a bound, not a deadline: inputs that never arrive must resolve the entry
1087
+ * rather than leave it refreshing forever, with no way back to a retry.
1088
+ */
1089
+ const INPUTS_TIMEOUT_MS = 2e4;
1090
+ const scanInputs$ = (accountId, cardano, inputsTimeoutMs) => (0, rxjs.combineLatest)([cardano.cardanoChainId$, cardano.cardanoAddresses$]).pipe((0, rxjs.filter)((inputs) => {
1091
+ const [chainId, cardanoAddresses] = inputs;
1092
+ return chainId !== void 0 && cardanoAddresses.some((address) => address.accountId === accountId && require_util.isCardanoAddressOfSupportedNetwork(address, chainId));
1093
+ }), (0, rxjs.take)(1), (0, rxjs.timeout)({
1094
+ first: inputsTimeoutMs,
1095
+ with: () => (0, rxjs.throwError)(() => /* @__PURE__ */ new Error("Cardano chain id / addresses never published"))
1096
+ }));
1097
+ const readSnapshot$ = ({ accountId, chainId, cardanoAddresses, dependencies }) => {
1098
+ const { stakeKeyHash } = resolveAccountKeyHashes(cardanoAddresses, accountId);
1099
+ const network = CardanoDustNetwork.fromNetworkMagic(chainId.networkMagic);
1100
+ return (0, rxjs.forkJoin)([require_unwrap_provider_result.unwrapProviderResult(() => dependencies.cardanoProvider.getUtxosAtAddress({ address: getDustGeneratorPaymentAddress(network) }, { chainId })), require_unwrap_provider_result.unwrapProviderResult(() => dependencies.cardanoProvider.getRewardAccountInfo({ rewardAccount: require_util.CardanoRewardAccount(getDustGeneratorRewardAccount(network)) }, { chainId })).pipe((0, rxjs.map)((info) => info.isRegistered), (0, rxjs.catchError)(() => (0, rxjs.of)(void 0)))]).pipe((0, rxjs.map)(([scriptUtxos, isScriptStakeCredentialRegistered]) => {
1101
+ const registration = findRegistrationUtxo(scriptUtxos, getDustMappingNftAssetId(network), stakeKeyHash);
1102
+ return {
1103
+ scriptStakeCredentialRegistered: isScriptStakeCredentialRegistered,
1104
+ ...registration === void 0 ? {} : { registration: {
1105
+ txId: String(registration.utxo[0].txId),
1106
+ outputIndex: registration.utxo[0].index,
1107
+ dustPubkeyHex: MidnightCoinPubkey.toHex(registration.datum.dustAddress)
1108
+ } }
1109
+ };
1110
+ }));
1111
+ };
1112
+ const makeNightDesignationIndexRefresh = ({ inputsTimeoutMs = INPUTS_TIMEOUT_MS } = {}) => ({ nightDesignationIndex: { refreshRequested$ } }, _stateObservables, dependencies) => refreshRequested$.pipe((0, rxjs.groupBy)(({ payload }) => payload.accountId), (0, rxjs.mergeMap)((perAccount$) => perAccount$.pipe((0, rxjs.exhaustMap)(({ payload: { accountId } }) => scanInputs$(accountId, dependencies.txExecutorCardano, inputsTimeoutMs).pipe((0, rxjs.switchMap)(([chainId, cardanoAddresses]) => readSnapshot$({
1113
+ accountId,
1114
+ chainId,
1115
+ cardanoAddresses,
1116
+ dependencies
1117
+ })), (0, rxjs.map)((snapshot) => dependencies.actions.nightDesignationIndex.refreshCompleted({
1118
+ accountId,
1119
+ snapshot
1120
+ })), (0, rxjs.catchError)(() => (0, rxjs.of)(dependencies.actions.nightDesignationIndex.refreshFailed({ accountId }))))))));
1121
+ /**
1122
+ * How long an entry may stay provisional before the index re-reads anyway.
1123
+ *
1124
+ * The wait is on the submitted transaction's activity, which a dropped
1125
+ * transaction or a stalled account sync can leave pending forever; without a
1126
+ * bound the entry would offer no designation control for the rest of the
1127
+ * session.
1128
+ */
1129
+ const SETTLING_TIMEOUT_MS = 600 * 1e3;
1130
+ /**
1131
+ * Hold the index provisional from submission until the designation
1132
+ * transaction is on chain, then re-read it.
1133
+ *
1134
+ * `Success` is a SUBMIT result — the txId comes back from submission — so the
1135
+ * script address still answers for the state before the designation. Scanning
1136
+ * here would write "not designated" over an account that has just designated,
1137
+ * and every later read would repeat it. The entry is marked settling instead,
1138
+ * and the scan waits for that transaction's activity to stop being pending.
1139
+ */
1140
+ const makeNightDesignationIndexSettling = ({ settlingTimeoutMs = SETTLING_TIMEOUT_MS } = {}) => (_, stateObservables, { actions }) => require_first_state_of_status.firstStateOfStatus(stateObservables.nightDesignationFlow.selectState$, "Success").pipe((0, rxjs.mergeMap)(({ accountId, txId }) => (0, rxjs.concat)((0, rxjs.of)(actions.nightDesignationIndex.settlingStarted({
1141
+ accountId,
1142
+ txId
1143
+ })), (0, rxjs.merge)(stateObservables.activities.selectAllMap$.pipe((0, rxjs.filter)((byAccount) => (byAccount[accountId] ?? []).some((activity) => activity.activityId === txId && activity.type !== require_activity_type.ActivityType.Pending))), (0, rxjs.timer)(settlingTimeoutMs)).pipe((0, rxjs.take)(1), (0, rxjs.mergeMap)(() => (0, rxjs.from)([actions.nightDesignationIndex.refreshRequested({ accountId }), actions.nightDesignationIndex.settlingEnded({ accountId })]))))));
1144
+ //#endregion
1145
+ //#region ../../packages/module/blockchain-cardano/src/store/sdk-extensions.ts
1146
+ const sdkExtensionSideEffects = [...[
1147
+ makeNightDesignationBuilding(),
1148
+ makeNightDesignationIndexRefresh(),
1149
+ makeNightDesignationIndexSettling()
1150
+ ]];
1151
+ //#endregion
1152
+ //#region ../../packages/module/blockchain-cardano/src/store/side-effects.ts
1153
+ const mainnetMagic = Number(_laceio_cardano_core.Cardano.NetworkMagics.Mainnet);
1154
+ const deriveCardanoTestnetOptions = (config) => {
1155
+ const blockfrostConfigs = config.cardanoProvider.blockfrostConfigs;
1156
+ return Object.keys(blockfrostConfigs ?? {}).map((key) => Number(key)).filter((magic) => magic !== mainnetMagic).map(getCardanoTestnetIdByNetworkMagic).filter((id) => Boolean(id)).map((id) => {
1157
+ return {
1158
+ id: require_cardano_network_id_vo.CardanoNetworkId(getCardanoChainIdByTestnetId(id).networkMagic),
1159
+ label: id === "preprod" ? "v2.network-status.preprod" : id === "preview" ? "v2.network-status.preview" : "v2.network-status.preprod"
1160
+ };
1161
+ });
1162
+ };
1163
+ const registerCardanoTestnetOptions = (testnetOptions) => (_, { network: { selectTestnetOptions$ } }, { actions }) => selectTestnetOptions$.pipe((0, rxjs.filter)((options) => !options?.Cardano), (0, rxjs.map)(() => actions.network.setTestnetOptions({
1164
+ blockchainName: "Cardano",
1165
+ options: testnetOptions
1166
+ })));
1167
+ const createCardanoSideEffects = (config) => {
1168
+ return [registerCardanoTestnetOptions(deriveCardanoTestnetOptions(config))];
1169
+ };
1170
+ //#endregion
1171
+ //#region ../../packages/module/blockchain-cardano/src/store/init.ts
1172
+ const redux = async (props, dependencies) => ({
1173
+ sideEffects: [
1174
+ ...createCardanoSideEffects(props.runtime.config),
1175
+ ...composerFlowSideEffects,
1176
+ ...sdkExtensionSideEffects
1177
+ ],
1178
+ sideEffectDependencies: await initializeDependencies(props, dependencies)
1179
+ });
1180
+ //#endregion
1181
+ exports.default = redux;