@helios-lang/effect 0.1.14 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (387) hide show
  1. package/dist/Cardano/CoinSelection.js +130 -0
  2. package/dist/Cardano/CoinSelection.js.map +1 -0
  3. package/dist/{Ledger → Cardano/Ledger}/Address.js +30 -20
  4. package/dist/Cardano/Ledger/Address.js.map +1 -0
  5. package/dist/{Ledger → Cardano/Ledger}/AssetClass.js +16 -11
  6. package/dist/Cardano/Ledger/AssetClass.js.map +1 -0
  7. package/dist/Cardano/Ledger/Assets.js +235 -0
  8. package/dist/Cardano/Ledger/Assets.js.map +1 -0
  9. package/dist/Cardano/Ledger/Credential.js +53 -0
  10. package/dist/Cardano/Ledger/Credential.js.map +1 -0
  11. package/dist/Cardano/Ledger/DCert.js +117 -0
  12. package/dist/Cardano/Ledger/DCert.js.map +1 -0
  13. package/dist/Cardano/Ledger/DatumHash.js +25 -0
  14. package/dist/Cardano/Ledger/DatumHash.js.map +1 -0
  15. package/dist/Cardano/Ledger/MintingPolicy.js +40 -0
  16. package/dist/Cardano/Ledger/MintingPolicy.js.map +1 -0
  17. package/dist/Cardano/Ledger/NativeScript.js +140 -0
  18. package/dist/Cardano/Ledger/NativeScript.js.map +1 -0
  19. package/dist/Cardano/Ledger/PubKey.js +22 -0
  20. package/dist/Cardano/Ledger/PubKey.js.map +1 -0
  21. package/dist/{Ledger → Cardano/Ledger}/PubKeyHash.js +5 -5
  22. package/dist/Cardano/Ledger/PubKeyHash.js.map +1 -0
  23. package/dist/Cardano/Ledger/Redeemer.js +155 -0
  24. package/dist/Cardano/Ledger/Redeemer.js.map +1 -0
  25. package/dist/Cardano/Ledger/RewardAddress.js +93 -0
  26. package/dist/Cardano/Ledger/RewardAddress.js.map +1 -0
  27. package/dist/Cardano/Ledger/Signature.js +23 -0
  28. package/dist/Cardano/Ledger/Signature.js.map +1 -0
  29. package/dist/Cardano/Ledger/Tx.js +498 -0
  30. package/dist/Cardano/Ledger/Tx.js.map +1 -0
  31. package/dist/Cardano/Ledger/TxHash.js +38 -0
  32. package/dist/Cardano/Ledger/TxHash.js.map +1 -0
  33. package/dist/Cardano/Ledger/TxOutput.js +167 -0
  34. package/dist/Cardano/Ledger/TxOutput.js.map +1 -0
  35. package/dist/{Ledger → Cardano/Ledger}/TxOutputDatum.js +44 -8
  36. package/dist/Cardano/Ledger/TxOutputDatum.js.map +1 -0
  37. package/dist/Cardano/Ledger/UTxO.js +100 -0
  38. package/dist/Cardano/Ledger/UTxO.js.map +1 -0
  39. package/dist/{Ledger → Cardano/Ledger}/UTxORef.js +28 -6
  40. package/dist/Cardano/Ledger/UTxORef.js.map +1 -0
  41. package/dist/{Ledger → Cardano/Ledger}/ValidatorHash.js +5 -5
  42. package/dist/Cardano/Ledger/ValidatorHash.js.map +1 -0
  43. package/dist/{Ledger → Cardano/Ledger}/index.js +5 -0
  44. package/dist/Cardano/Ledger/index.js.map +1 -0
  45. package/dist/Cardano/Network/IsMainnet.js.map +1 -0
  46. package/dist/{Network → Cardano/Network}/Params.js +27 -3
  47. package/dist/Cardano/Network/Params.js.map +1 -0
  48. package/dist/Cardano/Network/UTxO.js +20 -0
  49. package/dist/Cardano/Network/UTxO.js.map +1 -0
  50. package/dist/Cardano/Network/UTxOsAt.js +4 -0
  51. package/dist/Cardano/Network/UTxOsAt.js.map +1 -0
  52. package/dist/Cardano/Network/errors.js +33 -0
  53. package/dist/Cardano/Network/errors.js.map +1 -0
  54. package/dist/{Network → Cardano/Network}/index.js +1 -0
  55. package/dist/Cardano/Network/index.js.map +1 -0
  56. package/dist/Cardano/TxBuilder.js +946 -0
  57. package/dist/Cardano/TxBuilder.js.map +1 -0
  58. package/dist/Cardano/Uplc/Builtins.js +1820 -0
  59. package/dist/Cardano/Uplc/Builtins.js.map +1 -0
  60. package/dist/Cardano/Uplc/Cek.js +716 -0
  61. package/dist/Cardano/Uplc/Cek.js.map +1 -0
  62. package/dist/Cardano/Uplc/Cost.js +956 -0
  63. package/dist/Cardano/Uplc/Cost.js.map +1 -0
  64. package/dist/{Uplc → Cardano/Uplc}/Data.js +143 -22
  65. package/dist/Cardano/Uplc/Data.js.map +1 -0
  66. package/dist/Cardano/Uplc/Script.js +118 -0
  67. package/dist/Cardano/Uplc/Script.js.map +1 -0
  68. package/dist/Cardano/Uplc/ScriptContext.js +259 -0
  69. package/dist/Cardano/Uplc/ScriptContext.js.map +1 -0
  70. package/dist/Cardano/Uplc/Term.js +384 -0
  71. package/dist/Cardano/Uplc/Term.js.map +1 -0
  72. package/dist/Cardano/Uplc/Type.js +131 -0
  73. package/dist/Cardano/Uplc/Type.js.map +1 -0
  74. package/dist/Cardano/Uplc/Value.js +315 -0
  75. package/dist/Cardano/Uplc/Value.js.map +1 -0
  76. package/dist/Cardano/Uplc/index.js +7 -0
  77. package/dist/Cardano/Uplc/index.js.map +1 -0
  78. package/dist/Cardano/index.js +6 -0
  79. package/dist/Cardano/index.js.map +1 -0
  80. package/dist/{internal → Codecs}/Base32.js +2 -2
  81. package/dist/Codecs/Base32.js.map +1 -0
  82. package/dist/{Bech32.js → Codecs/Bech32.js} +2 -2
  83. package/dist/Codecs/Bech32.js.map +1 -0
  84. package/dist/Codecs/BigEndian.js.map +1 -0
  85. package/dist/Codecs/Bits.js.map +1 -0
  86. package/dist/{internal → Codecs}/Bytes.js +23 -12
  87. package/dist/Codecs/Bytes.js.map +1 -0
  88. package/dist/{Cbor.js → Codecs/Cbor.js} +559 -328
  89. package/dist/Codecs/Cbor.js.map +1 -0
  90. package/dist/{internal → Codecs}/Flat.js +16 -0
  91. package/dist/Codecs/Flat.js.map +1 -0
  92. package/dist/Codecs/Float.js.map +1 -0
  93. package/dist/Codecs/LittleEndian.js +27 -0
  94. package/dist/Codecs/LittleEndian.js.map +1 -0
  95. package/dist/Codecs/Uint64.js +89 -0
  96. package/dist/Codecs/Uint64.js.map +1 -0
  97. package/dist/{internal → Codecs}/Utf8.js +7 -2
  98. package/dist/Codecs/Utf8.js.map +1 -0
  99. package/dist/Codecs/ZigZag.js +26 -0
  100. package/dist/Codecs/ZigZag.js.map +1 -0
  101. package/dist/Codecs/index.js +8 -0
  102. package/dist/Codecs/index.js.map +1 -0
  103. package/dist/Crypto/Blake2b.js +156 -0
  104. package/dist/Crypto/Blake2b.js.map +1 -0
  105. package/dist/Crypto/Curve.js +92 -0
  106. package/dist/Crypto/Curve.js.map +1 -0
  107. package/dist/Crypto/Ed25519.js +323 -0
  108. package/dist/Crypto/Ed25519.js.map +1 -0
  109. package/dist/Crypto/EdDSA.js +222 -0
  110. package/dist/Crypto/EdDSA.js.map +1 -0
  111. package/dist/Crypto/Field.js +323 -0
  112. package/dist/Crypto/Field.js.map +1 -0
  113. package/dist/Crypto/Hmac.js +51 -0
  114. package/dist/Crypto/Hmac.js.map +1 -0
  115. package/dist/Crypto/Keccak.js +167 -0
  116. package/dist/Crypto/Keccak.js.map +1 -0
  117. package/dist/Crypto/Pbkdf2.js +45 -0
  118. package/dist/Crypto/Pbkdf2.js.map +1 -0
  119. package/dist/Crypto/Sha2_256.js +200 -0
  120. package/dist/Crypto/Sha2_256.js.map +1 -0
  121. package/dist/Crypto/Sha2_512.js +264 -0
  122. package/dist/Crypto/Sha2_512.js.map +1 -0
  123. package/dist/Crypto/Sha3_256.js +10 -0
  124. package/dist/Crypto/Sha3_256.js.map +1 -0
  125. package/dist/Crypto/errors.js +9 -0
  126. package/dist/Crypto/errors.js.map +1 -0
  127. package/dist/Crypto/index.js +12 -0
  128. package/dist/Crypto/index.js.map +1 -0
  129. package/dist/index.js +3 -5
  130. package/dist/index.js.map +1 -1
  131. package/package.json +24 -6
  132. package/tsconfig.build.json +1 -1
  133. package/tsconfig.build.tsbuildinfo +1 -1
  134. package/tsconfig.tsbuildinfo +1 -1
  135. package/types/Cardano/CoinSelection.d.ts +26 -0
  136. package/types/Cardano/CoinSelection.d.ts.map +1 -0
  137. package/types/{Ledger → Cardano/Ledger}/Address.d.ts +7 -6
  138. package/types/Cardano/Ledger/Address.d.ts.map +1 -0
  139. package/types/{Ledger → Cardano/Ledger}/AssetClass.d.ts +2 -2
  140. package/types/Cardano/Ledger/AssetClass.d.ts.map +1 -0
  141. package/types/Cardano/Ledger/Assets.d.ts +114 -0
  142. package/types/Cardano/Ledger/Assets.d.ts.map +1 -0
  143. package/types/{Ledger → Cardano/Ledger}/Credential.d.ts +10 -4
  144. package/types/Cardano/Ledger/Credential.d.ts.map +1 -0
  145. package/types/Cardano/Ledger/DCert.d.ts +40 -0
  146. package/types/Cardano/Ledger/DCert.d.ts.map +1 -0
  147. package/types/{Ledger → Cardano/Ledger}/DatumHash.d.ts +6 -5
  148. package/types/Cardano/Ledger/DatumHash.d.ts.map +1 -0
  149. package/types/{Ledger → Cardano/Ledger}/MintingPolicy.d.ts +11 -8
  150. package/types/Cardano/Ledger/MintingPolicy.d.ts.map +1 -0
  151. package/types/Cardano/Ledger/NativeScript.d.ts +105 -0
  152. package/types/Cardano/Ledger/NativeScript.d.ts.map +1 -0
  153. package/types/Cardano/Ledger/PubKey.d.ts +41 -0
  154. package/types/Cardano/Ledger/PubKey.d.ts.map +1 -0
  155. package/types/{Ledger → Cardano/Ledger}/PubKeyHash.d.ts +5 -5
  156. package/types/Cardano/Ledger/PubKeyHash.d.ts.map +1 -0
  157. package/types/Cardano/Ledger/Redeemer.d.ts +303 -0
  158. package/types/Cardano/Ledger/Redeemer.d.ts.map +1 -0
  159. package/types/Cardano/Ledger/RewardAddress.d.ts +60 -0
  160. package/types/Cardano/Ledger/RewardAddress.d.ts.map +1 -0
  161. package/types/Cardano/Ledger/Signature.d.ts +13 -0
  162. package/types/Cardano/Ledger/Signature.d.ts.map +1 -0
  163. package/types/Cardano/Ledger/Tx.d.ts +375 -0
  164. package/types/Cardano/Ledger/Tx.d.ts.map +1 -0
  165. package/types/{Ledger → Cardano/Ledger}/TxHash.d.ts +35 -5
  166. package/types/Cardano/Ledger/TxHash.d.ts.map +1 -0
  167. package/types/Cardano/Ledger/TxOutput.d.ts +438 -0
  168. package/types/Cardano/Ledger/TxOutput.d.ts.map +1 -0
  169. package/types/Cardano/Ledger/TxOutputDatum.d.ts +98 -0
  170. package/types/Cardano/Ledger/TxOutputDatum.d.ts.map +1 -0
  171. package/types/Cardano/Ledger/UTxO.d.ts +1420 -0
  172. package/types/Cardano/Ledger/UTxO.d.ts.map +1 -0
  173. package/types/Cardano/Ledger/UTxORef.d.ts +222 -0
  174. package/types/Cardano/Ledger/UTxORef.d.ts.map +1 -0
  175. package/types/{Ledger → Cardano/Ledger}/ValidatorHash.d.ts +5 -5
  176. package/types/Cardano/Ledger/ValidatorHash.d.ts.map +1 -0
  177. package/types/{Ledger → Cardano/Ledger}/index.d.ts +5 -0
  178. package/types/Cardano/Ledger/index.d.ts.map +1 -0
  179. package/types/Cardano/Network/IsMainnet.d.ts.map +1 -0
  180. package/types/{Network → Cardano/Network}/Params.d.ts +32 -4
  181. package/types/Cardano/Network/Params.d.ts.map +1 -0
  182. package/types/Cardano/Network/UTxO.d.ts +15 -0
  183. package/types/Cardano/Network/UTxO.d.ts.map +1 -0
  184. package/types/Cardano/Network/UTxOsAt.d.ts +9 -0
  185. package/types/Cardano/Network/UTxOsAt.d.ts.map +1 -0
  186. package/types/Cardano/Network/errors.d.ts +39 -0
  187. package/types/Cardano/Network/errors.d.ts.map +1 -0
  188. package/types/{Network → Cardano/Network}/index.d.ts +1 -0
  189. package/types/Cardano/Network/index.d.ts.map +1 -0
  190. package/types/Cardano/TxBuilder.d.ts +261 -0
  191. package/types/Cardano/TxBuilder.d.ts.map +1 -0
  192. package/types/Cardano/Uplc/Builtins.d.ts +163 -0
  193. package/types/Cardano/Uplc/Builtins.d.ts.map +1 -0
  194. package/types/Cardano/Uplc/Cek.d.ts +165 -0
  195. package/types/Cardano/Uplc/Cek.d.ts.map +1 -0
  196. package/types/Cardano/Uplc/Cost.d.ts +93 -0
  197. package/types/Cardano/Uplc/Cost.d.ts.map +1 -0
  198. package/types/{Uplc → Cardano/Uplc}/Data.d.ts +149 -15
  199. package/types/Cardano/Uplc/Data.d.ts.map +1 -0
  200. package/types/Cardano/Uplc/Script.d.ts +87 -0
  201. package/types/Cardano/Uplc/Script.d.ts.map +1 -0
  202. package/types/Cardano/Uplc/ScriptContext.d.ts +21 -0
  203. package/types/Cardano/Uplc/ScriptContext.d.ts.map +1 -0
  204. package/types/Cardano/Uplc/Term.d.ts +454 -0
  205. package/types/Cardano/Uplc/Term.d.ts.map +1 -0
  206. package/types/Cardano/Uplc/Type.d.ts +29 -0
  207. package/types/Cardano/Uplc/Type.d.ts.map +1 -0
  208. package/types/Cardano/Uplc/Value.d.ts +152 -0
  209. package/types/Cardano/Uplc/Value.d.ts.map +1 -0
  210. package/types/Cardano/Uplc/index.d.ts +7 -0
  211. package/types/Cardano/Uplc/index.d.ts.map +1 -0
  212. package/types/Cardano/index.d.ts +6 -0
  213. package/types/Cardano/index.d.ts.map +1 -0
  214. package/types/Codecs/Base32.d.ts.map +1 -0
  215. package/types/Codecs/Bech32.d.ts.map +1 -0
  216. package/types/Codecs/BigEndian.d.ts.map +1 -0
  217. package/types/Codecs/Bits.d.ts.map +1 -0
  218. package/types/{internal → Codecs}/Bytes.d.ts +7 -6
  219. package/types/Codecs/Bytes.d.ts.map +1 -0
  220. package/types/{Cbor.d.ts → Codecs/Cbor.d.ts} +77 -55
  221. package/types/Codecs/Cbor.d.ts.map +1 -0
  222. package/types/{internal → Codecs}/Flat.d.ts +2 -0
  223. package/types/Codecs/Flat.d.ts.map +1 -0
  224. package/types/Codecs/Float.d.ts.map +1 -0
  225. package/types/Codecs/LittleEndian.d.ts +18 -0
  226. package/types/Codecs/LittleEndian.d.ts.map +1 -0
  227. package/types/Codecs/Uint64.d.ts +16 -0
  228. package/types/Codecs/Uint64.d.ts.map +1 -0
  229. package/types/{internal → Codecs}/Utf8.d.ts +2 -2
  230. package/types/Codecs/Utf8.d.ts.map +1 -0
  231. package/types/Codecs/ZigZag.d.ts +3 -0
  232. package/types/Codecs/ZigZag.d.ts.map +1 -0
  233. package/types/Codecs/index.d.ts +8 -0
  234. package/types/Codecs/index.d.ts.map +1 -0
  235. package/types/Crypto/Blake2b.d.ts +16 -0
  236. package/types/Crypto/Blake2b.d.ts.map +1 -0
  237. package/types/Crypto/Curve.d.ts +161 -0
  238. package/types/Crypto/Curve.d.ts.map +1 -0
  239. package/types/Crypto/Ed25519.d.ts +155 -0
  240. package/types/Crypto/Ed25519.d.ts.map +1 -0
  241. package/types/Crypto/EdDSA.d.ts +159 -0
  242. package/types/Crypto/EdDSA.d.ts.map +1 -0
  243. package/types/Crypto/Field.d.ts +273 -0
  244. package/types/Crypto/Field.d.ts.map +1 -0
  245. package/types/Crypto/Hmac.d.ts +20 -0
  246. package/types/Crypto/Hmac.d.ts.map +1 -0
  247. package/types/Crypto/Keccak.d.ts +16 -0
  248. package/types/Crypto/Keccak.d.ts.map +1 -0
  249. package/types/Crypto/Pbkdf2.d.ts +15 -0
  250. package/types/Crypto/Pbkdf2.d.ts.map +1 -0
  251. package/types/Crypto/Sha2_256.d.ts +36 -0
  252. package/types/Crypto/Sha2_256.d.ts.map +1 -0
  253. package/types/Crypto/Sha2_512.d.ts +31 -0
  254. package/types/Crypto/Sha2_512.d.ts.map +1 -0
  255. package/types/Crypto/Sha3_256.d.ts +8 -0
  256. package/types/Crypto/Sha3_256.d.ts.map +1 -0
  257. package/types/Crypto/errors.d.ts +10 -0
  258. package/types/Crypto/errors.d.ts.map +1 -0
  259. package/types/Crypto/index.d.ts +12 -0
  260. package/types/Crypto/index.d.ts.map +1 -0
  261. package/types/index.d.ts +3 -5
  262. package/types/index.d.ts.map +1 -1
  263. package/dist/Address.js +0 -13
  264. package/dist/Address.js.map +0 -1
  265. package/dist/Bech32.js.map +0 -1
  266. package/dist/Cbor.js.map +0 -1
  267. package/dist/Ledger/Address.js.map +0 -1
  268. package/dist/Ledger/AssetClass.js.map +0 -1
  269. package/dist/Ledger/Assets.js +0 -120
  270. package/dist/Ledger/Assets.js.map +0 -1
  271. package/dist/Ledger/Credential.js +0 -17
  272. package/dist/Ledger/Credential.js.map +0 -1
  273. package/dist/Ledger/DatumHash.js +0 -21
  274. package/dist/Ledger/DatumHash.js.map +0 -1
  275. package/dist/Ledger/IsMainnet.js +0 -4
  276. package/dist/Ledger/IsMainnet.js.map +0 -1
  277. package/dist/Ledger/MintingPolicy.js +0 -45
  278. package/dist/Ledger/MintingPolicy.js.map +0 -1
  279. package/dist/Ledger/NetworkParams.js +0 -40
  280. package/dist/Ledger/NetworkParams.js.map +0 -1
  281. package/dist/Ledger/PubKeyHash.js.map +0 -1
  282. package/dist/Ledger/TxHash.js +0 -23
  283. package/dist/Ledger/TxHash.js.map +0 -1
  284. package/dist/Ledger/TxId.js +0 -23
  285. package/dist/Ledger/TxId.js.map +0 -1
  286. package/dist/Ledger/TxInput.js +0 -51
  287. package/dist/Ledger/TxInput.js.map +0 -1
  288. package/dist/Ledger/TxOutput.js +0 -118
  289. package/dist/Ledger/TxOutput.js.map +0 -1
  290. package/dist/Ledger/TxOutputDatum.js.map +0 -1
  291. package/dist/Ledger/TxOutputId.js +0 -55
  292. package/dist/Ledger/TxOutputId.js.map +0 -1
  293. package/dist/Ledger/UTxO.js +0 -43
  294. package/dist/Ledger/UTxO.js.map +0 -1
  295. package/dist/Ledger/UTxORef.js.map +0 -1
  296. package/dist/Ledger/ValidatorHash.js.map +0 -1
  297. package/dist/Ledger/index.js.map +0 -1
  298. package/dist/Network/IsMainnet.js.map +0 -1
  299. package/dist/Network/Params.js.map +0 -1
  300. package/dist/Network/UTxOsAt.js +0 -4
  301. package/dist/Network/UTxOsAt.js.map +0 -1
  302. package/dist/Network/errors.js +0 -16
  303. package/dist/Network/errors.js.map +0 -1
  304. package/dist/Network/index.js.map +0 -1
  305. package/dist/Uplc/Cek.js +0 -3
  306. package/dist/Uplc/Cek.js.map +0 -1
  307. package/dist/Uplc/Data.js.map +0 -1
  308. package/dist/Uplc/DataSchema.js +0 -118
  309. package/dist/Uplc/DataSchema.js.map +0 -1
  310. package/dist/Uplc/Primitive.js +0 -23
  311. package/dist/Uplc/Primitive.js.map +0 -1
  312. package/dist/Uplc/index.js +0 -3
  313. package/dist/Uplc/index.js.map +0 -1
  314. package/dist/internal/Base32.js.map +0 -1
  315. package/dist/internal/BigEndian.js.map +0 -1
  316. package/dist/internal/Bits.js.map +0 -1
  317. package/dist/internal/Bytes.js.map +0 -1
  318. package/dist/internal/Flat.js.map +0 -1
  319. package/dist/internal/Float.js.map +0 -1
  320. package/dist/internal/Utf8.js.map +0 -1
  321. package/tsconfig.check.tsbuildinfo +0 -1
  322. package/types/Address.d.ts +0 -5
  323. package/types/Address.d.ts.map +0 -1
  324. package/types/Bech32.d.ts.map +0 -1
  325. package/types/Cbor.d.ts.map +0 -1
  326. package/types/Ledger/Address.d.ts.map +0 -1
  327. package/types/Ledger/AssetClass.d.ts.map +0 -1
  328. package/types/Ledger/Assets.d.ts +0 -70
  329. package/types/Ledger/Assets.d.ts.map +0 -1
  330. package/types/Ledger/Credential.d.ts.map +0 -1
  331. package/types/Ledger/DatumHash.d.ts.map +0 -1
  332. package/types/Ledger/IsMainnet.d.ts +0 -6
  333. package/types/Ledger/IsMainnet.d.ts.map +0 -1
  334. package/types/Ledger/MintingPolicy.d.ts.map +0 -1
  335. package/types/Ledger/NetworkParams.d.ts +0 -40
  336. package/types/Ledger/NetworkParams.d.ts.map +0 -1
  337. package/types/Ledger/PubKeyHash.d.ts.map +0 -1
  338. package/types/Ledger/TxHash.d.ts.map +0 -1
  339. package/types/Ledger/TxId.d.ts +0 -70
  340. package/types/Ledger/TxId.d.ts.map +0 -1
  341. package/types/Ledger/TxInput.d.ts +0 -55
  342. package/types/Ledger/TxInput.d.ts.map +0 -1
  343. package/types/Ledger/TxOutput.d.ts +0 -63
  344. package/types/Ledger/TxOutput.d.ts.map +0 -1
  345. package/types/Ledger/TxOutputDatum.d.ts +0 -41
  346. package/types/Ledger/TxOutputDatum.d.ts.map +0 -1
  347. package/types/Ledger/TxOutputId.d.ts +0 -133
  348. package/types/Ledger/TxOutputId.d.ts.map +0 -1
  349. package/types/Ledger/UTxO.d.ts +0 -55
  350. package/types/Ledger/UTxO.d.ts.map +0 -1
  351. package/types/Ledger/UTxORef.d.ts +0 -133
  352. package/types/Ledger/UTxORef.d.ts.map +0 -1
  353. package/types/Ledger/ValidatorHash.d.ts.map +0 -1
  354. package/types/Ledger/index.d.ts.map +0 -1
  355. package/types/Network/IsMainnet.d.ts.map +0 -1
  356. package/types/Network/Params.d.ts.map +0 -1
  357. package/types/Network/UTxOsAt.d.ts +0 -9
  358. package/types/Network/UTxOsAt.d.ts.map +0 -1
  359. package/types/Network/errors.d.ts +0 -18
  360. package/types/Network/errors.d.ts.map +0 -1
  361. package/types/Network/index.d.ts.map +0 -1
  362. package/types/Uplc/Cek.d.ts +0 -72
  363. package/types/Uplc/Cek.d.ts.map +0 -1
  364. package/types/Uplc/Data.d.ts.map +0 -1
  365. package/types/Uplc/DataSchema.d.ts +0 -227
  366. package/types/Uplc/DataSchema.d.ts.map +0 -1
  367. package/types/Uplc/Primitive.d.ts +0 -26
  368. package/types/Uplc/Primitive.d.ts.map +0 -1
  369. package/types/Uplc/index.d.ts +0 -3
  370. package/types/Uplc/index.d.ts.map +0 -1
  371. package/types/internal/Base32.d.ts.map +0 -1
  372. package/types/internal/BigEndian.d.ts.map +0 -1
  373. package/types/internal/Bits.d.ts.map +0 -1
  374. package/types/internal/Bytes.d.ts.map +0 -1
  375. package/types/internal/Flat.d.ts.map +0 -1
  376. package/types/internal/Float.d.ts.map +0 -1
  377. package/types/internal/Utf8.d.ts.map +0 -1
  378. /package/dist/{Network → Cardano/Network}/IsMainnet.js +0 -0
  379. /package/dist/{internal → Codecs}/BigEndian.js +0 -0
  380. /package/dist/{internal → Codecs}/Bits.js +0 -0
  381. /package/dist/{internal → Codecs}/Float.js +0 -0
  382. /package/types/{Network → Cardano/Network}/IsMainnet.d.ts +0 -0
  383. /package/types/{internal → Codecs}/Base32.d.ts +0 -0
  384. /package/types/{Bech32.d.ts → Codecs/Bech32.d.ts} +0 -0
  385. /package/types/{internal → Codecs}/BigEndian.d.ts +0 -0
  386. /package/types/{internal → Codecs}/Bits.d.ts +0 -0
  387. /package/types/{internal → Codecs}/Float.d.ts +0 -0
@@ -0,0 +1,259 @@
1
+ import { Context, Effect, Option, Schema } from "effect";
2
+ import { FromUplcData as DatumHashFromUplcData, hash as hashDatum } from "../Ledger/DatumHash.js";
3
+ import { FromUplcData as MintingPolicyFromUplcData } from "../Ledger/MintingPolicy.js";
4
+ import { FromUplcData as AssetsFromUplcData, nonAdaPolicies } from "../Ledger/Assets.js";
5
+ import { FromUplcData as DCertFromUplcData } from "../Ledger/DCert.js";
6
+ import { FromUplcData as PubKeyHashFromUplcData } from "../Ledger/PubKeyHash.js";
7
+ import { Redeemer } from "../Ledger/Redeemer.js";
8
+ import { FromUplcData as RewardAddressFromUplcData } from "../Ledger/RewardAddress.js";
9
+ import { hash as hashTx, inputDatum } from "../Ledger/Tx.js";
10
+ import { FromUplcData as TxHashFromUplcData, FromUplcDataV3 as TxHashFromUplcDataV3 } from "../Ledger/TxHash.js";
11
+ import { FromUplcData as TxOutputFromUplcData } from "../Ledger/TxOutput.js";
12
+ import { FromUplcData as UTxOFromUplcData, FromUplcDataV3 as UTxOFromUplcDataV3 } from "../Ledger/UTxO.js";
13
+ import { FromUplcData as UTxORefFromUplcData, FromUplcDataV3 as UTxORefFromUplcDataV3 } from "../Ledger/UTxORef.js";
14
+ import * as Params from "../Network/Params.js";
15
+ import * as Data from "./Data.js";
16
+ export const makeArgs = (version, tx, redeemerIndex) => Effect.gen(function* () {
17
+ switch (version) {
18
+ case 1:
19
+ throw new Error("ScriptContext for UPLC v1 not supported");
20
+ case 2:
21
+ return yield* makeArgsV2(tx, redeemerIndex);
22
+ case 3:
23
+ return yield* makeArgsV3(tx, redeemerIndex);
24
+ }
25
+ });
26
+ const LovelaceFromData = Schema.transform(AssetsFromUplcData(false), Schema.BigIntFromSelf, {
27
+ strict: true,
28
+ decode: (assets) => assets[""],
29
+ encode: (fee) => ({ "": fee })
30
+ });
31
+ /**
32
+ * in V2, 0 lovelace is prepended
33
+ */
34
+ const MintedAssetsV2 = Schema.transform(AssetsFromUplcData(true), Schema.typeSchema(AssetsFromUplcData(true)), {
35
+ strict: true,
36
+ decode: (assets) => assets,
37
+ encode: (assets) => ({ "": 0n, ...assets })
38
+ });
39
+ const ValiditySlotRange = Schema.transformOrFail(Data.TimeRange, Schema.Struct({
40
+ firstValidSlot: Schema.optional(Schema.Int),
41
+ lastValidSlot: Schema.optional(Schema.Int)
42
+ }), {
43
+ strict: true,
44
+ decode: (tr) => Effect.zip(Number.isFinite(tr.start)
45
+ ? Params.timeToSlot(tr.start)
46
+ : Effect.succeed(undefined), Number.isFinite(tr.end)
47
+ ? Params.timeToSlot(tr.end)
48
+ : Effect.succeed(undefined)).pipe(Effect.map(([firstValidSlot, lastValidSlot]) => ({
49
+ firstValidSlot,
50
+ lastValidSlot
51
+ }))),
52
+ encode: (tr) => Effect.zip(tr.firstValidSlot === undefined
53
+ ? Effect.succeed(Number.NEGATIVE_INFINITY)
54
+ : Params.slotToTime(tr.firstValidSlot), tr.lastValidSlot === undefined
55
+ ? Effect.succeed(Number.POSITIVE_INFINITY)
56
+ : Params.slotToTime(tr.lastValidSlot)).pipe(Effect.map(([start, end]) => ({ start, end })))
57
+ });
58
+ const TxInfoV2 = Data.EnumVariant(0, {
59
+ inputs: Data.Array(UTxOFromUplcData),
60
+ refInputs: Data.Array(UTxOFromUplcData),
61
+ outputs: Data.Array(TxOutputFromUplcData),
62
+ fee: LovelaceFromData,
63
+ minted: MintedAssetsV2,
64
+ dcerts: Data.Array(DCertFromUplcData),
65
+ withdrawals: Data.PairArray(RewardAddressFromUplcData, Data.BigInt),
66
+ validityTimeRange: ValiditySlotRange,
67
+ signers: Data.Array(PubKeyHashFromUplcData),
68
+ redeemers: Data.PairArray(Data.Data, Data.Data),
69
+ datums: Data.PairArray(DatumHashFromUplcData, Data.Data),
70
+ txHash: Data.EnumVariant(0, { hash: TxHashFromUplcData })
71
+ });
72
+ const TxInfoV3 = Data.EnumVariant(0, {
73
+ inputs: Data.Array(UTxOFromUplcDataV3),
74
+ refInputs: Data.Array(UTxOFromUplcDataV3),
75
+ outputs: Data.Array(TxOutputFromUplcData),
76
+ fee: LovelaceFromData,
77
+ minted: AssetsFromUplcData(true),
78
+ dcerts: Data.Array(DCertFromUplcData),
79
+ withdrawals: Data.PairArray(RewardAddressFromUplcData, Data.BigInt),
80
+ validityTimeRange: ValiditySlotRange,
81
+ signers: Data.Array(PubKeyHashFromUplcData),
82
+ redeemers: Data.PairArray(Data.Data, Data.Data),
83
+ datums: Data.PairArray(DatumHashFromUplcData, Data.Data),
84
+ txHash: TxHashFromUplcDataV3,
85
+ votes: Data.PairArray(Data.Data, Data.Data), // TODO
86
+ proposalProcedures: Data.Array(Data.Data), // TODO
87
+ currentTreasuryAmount: Data.Option(Data.Data), // TODO
88
+ treasuryDonation: Data.Option(Data.Data) // TODO
89
+ });
90
+ class CurrentTx extends Context.Tag("Cardano.Uplc.ScriptContext.CurrentTx")() {
91
+ }
92
+ /**
93
+ * Uses same tags as Redeemer to make encoding easy
94
+ */
95
+ const PurposeV2 = Schema.transformOrFail(Data.Enum({
96
+ Minting: {
97
+ policy: MintingPolicyFromUplcData
98
+ },
99
+ Spending: {
100
+ ref: UTxORefFromUplcData
101
+ },
102
+ Rewarding: {
103
+ address: RewardAddressFromUplcData
104
+ },
105
+ Certifying: {
106
+ dcert: DCertFromUplcData
107
+ }
108
+ }), Schema.typeSchema(Redeemer), {
109
+ strict: true,
110
+ decode: (_purpose) => {
111
+ throw new Error("can't reconstruct redeemer from purpose");
112
+ },
113
+ encode: (redeemer) => CurrentTx.pipe(Effect.map((tx) => {
114
+ switch (redeemer._tag) {
115
+ case "Minting":
116
+ return {
117
+ _tag: "Minting",
118
+ policy: nonAdaPolicies(tx.body.minted)[redeemer.policyIndex]
119
+ };
120
+ case "Spending":
121
+ return {
122
+ _tag: "Spending",
123
+ ref: tx.body.inputs[redeemer.inputIndex].ref
124
+ };
125
+ case "Rewarding":
126
+ return {
127
+ _tag: "Rewarding",
128
+ address: tx.body.withdrawals[redeemer.withdrawalIndex][0]
129
+ };
130
+ case "Certifying":
131
+ return {
132
+ _tag: "Certifying",
133
+ dcert: tx.body.dcerts[redeemer.dcertIndex]
134
+ };
135
+ }
136
+ }))
137
+ });
138
+ /**
139
+ * TODO: add voting and proposing redeemers
140
+ */
141
+ const PurposeV3 = Schema.transformOrFail(Data.Enum({
142
+ Minting: {
143
+ policy: MintingPolicyFromUplcData
144
+ },
145
+ Spending: {
146
+ ref: UTxORefFromUplcDataV3,
147
+ datum: Data.Option(Data.Data)
148
+ },
149
+ Rewarding: {
150
+ address: RewardAddressFromUplcData
151
+ },
152
+ Certifying: {
153
+ dcert: DCertFromUplcData
154
+ }
155
+ }), Schema.typeSchema(Redeemer), {
156
+ strict: true,
157
+ decode: (_purpose) => {
158
+ throw new Error("can't reconstruct redeemer from purpose");
159
+ },
160
+ encode: (redeemer) => CurrentTx.pipe(Effect.map((tx) => {
161
+ switch (redeemer._tag) {
162
+ case "Minting":
163
+ return {
164
+ _tag: "Minting",
165
+ policy: nonAdaPolicies(tx.body.minted)[redeemer.policyIndex]
166
+ };
167
+ case "Spending": {
168
+ return {
169
+ _tag: "Spending",
170
+ ref: tx.body.inputs[redeemer.inputIndex].ref,
171
+ datum: Option.fromNullable(inputDatum(redeemer.inputIndex)(tx))
172
+ };
173
+ }
174
+ case "Rewarding":
175
+ return {
176
+ _tag: "Rewarding",
177
+ address: tx.body.withdrawals[redeemer.withdrawalIndex][0]
178
+ };
179
+ case "Certifying":
180
+ return {
181
+ _tag: "Certifying",
182
+ dcert: tx.body.dcerts[redeemer.dcertIndex]
183
+ };
184
+ }
185
+ }))
186
+ });
187
+ const makeArgsV2 = (tx, redeemerIndex) => Effect.gen(function* () {
188
+ const redeemer = tx.witnesses.redeemers[redeemerIndex];
189
+ const purposes = yield* Effect.all(tx.witnesses.redeemers.map((r) => Schema.encode(PurposeV2)(r))).pipe(Effect.provideService(CurrentTx, tx));
190
+ const purpose = purposes[redeemerIndex];
191
+ const txInfo = yield* Schema.encode(TxInfoV2)({
192
+ inputs: tx.body.inputs,
193
+ refInputs: tx.body.refInputs,
194
+ outputs: tx.body.outputs,
195
+ fee: tx.body.fee,
196
+ minted: tx.body.minted,
197
+ dcerts: tx.body.dcerts,
198
+ withdrawals: tx.body.withdrawals,
199
+ validityTimeRange: {
200
+ firstValidSlot: tx.body.firstValidSlot,
201
+ lastValidSlot: tx.body.lastValidSlot
202
+ },
203
+ signers: tx.body.signers,
204
+ redeemers: tx.witnesses.redeemers.map((r, i) => [purposes[i], r.data]),
205
+ datums: tx.witnesses.datums.map((d) => [hashDatum(d), d]),
206
+ txHash: { hash: hashTx(tx) }
207
+ });
208
+ const scriptContext = Data.makeConstrData(0, [txInfo, purpose]);
209
+ switch (redeemer._tag) {
210
+ case "Certifying":
211
+ case "Minting":
212
+ case "Rewarding":
213
+ return [
214
+ { data: redeemer.data },
215
+ { data: scriptContext }
216
+ ];
217
+ case "Spending": {
218
+ const datum = inputDatum(redeemer.inputIndex)(tx);
219
+ if (datum === undefined) {
220
+ throw new Error(`No datum found for input ${redeemer.inputIndex}`);
221
+ }
222
+ return [
223
+ { data: datum },
224
+ { data: redeemer.data },
225
+ { data: scriptContext }
226
+ ];
227
+ }
228
+ }
229
+ });
230
+ const makeArgsV3 = (tx, redeemerIndex) => Effect.gen(function* () {
231
+ const redeemer = tx.witnesses.redeemers[redeemerIndex];
232
+ const purposes = yield* Effect.all(tx.witnesses.redeemers.map((r) => Schema.encode(PurposeV3)(r))).pipe(Effect.provideService(CurrentTx, tx));
233
+ const purpose = purposes[redeemerIndex];
234
+ const txInfo = yield* Schema.encode(TxInfoV3)({
235
+ inputs: tx.body.inputs,
236
+ refInputs: tx.body.refInputs,
237
+ outputs: tx.body.outputs,
238
+ fee: tx.body.fee,
239
+ minted: tx.body.minted,
240
+ dcerts: tx.body.dcerts,
241
+ withdrawals: tx.body.withdrawals,
242
+ validityTimeRange: {
243
+ firstValidSlot: tx.body.firstValidSlot,
244
+ lastValidSlot: tx.body.lastValidSlot
245
+ },
246
+ signers: tx.body.signers,
247
+ redeemers: tx.witnesses.redeemers.map((r, i) => [purposes[i], r.data]),
248
+ datums: tx.witnesses.datums.map((d) => [hashDatum(d), d]),
249
+ txHash: hashTx(tx),
250
+ votes: [],
251
+ proposalProcedures: [],
252
+ currentTreasuryAmount: Option.none(),
253
+ treasuryDonation: Option.none()
254
+ });
255
+ return [
256
+ { data: Data.makeConstrData(0, [txInfo, redeemer.data, purpose]) }
257
+ ];
258
+ });
259
+ //# sourceMappingURL=ScriptContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScriptContext.js","sourceRoot":"","sources":["../../../src/Cardano/Uplc/ScriptContext.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,384 @@
1
+ import { Either, Schema } from "effect";
2
+ import * as Flat from "../../Codecs/Flat.js";
3
+ import * as Type from "./Type.js";
4
+ import * as Value from "./Value.js";
5
+ export const SourceSpan = Schema.Struct({
6
+ file: Schema.String,
7
+ start: Schema.Struct({
8
+ line: Schema.Number,
9
+ column: Schema.Number
10
+ }),
11
+ end: Schema.optional(Schema.Struct({
12
+ line: Schema.Number,
13
+ column: Schema.Number
14
+ }))
15
+ });
16
+ const SuspendedTerm = Schema.suspend(() => Term);
17
+ export const Apply = Schema.TaggedStruct("Apply", {
18
+ fn: SuspendedTerm,
19
+ arg: SuspendedTerm,
20
+ sourceSpan: Schema.optional(SourceSpan)
21
+ });
22
+ const Builtin$ = Schema.TaggedStruct("Builtin", {
23
+ id: Schema.Int, // TODO: also constrain to be positive
24
+ name: Schema.optional(Schema.String), // though is redundant information, it is much easier to keep track of this here for debugging purposes
25
+ sourceSpan: Schema.optional(SourceSpan)
26
+ });
27
+ export { Builtin$ as Builtin };
28
+ export const Case = Schema.TaggedStruct("Case", {
29
+ arg: SuspendedTerm,
30
+ cases: Schema.Array(SuspendedTerm),
31
+ sourceSpan: Schema.optional(SourceSpan)
32
+ });
33
+ export const Const = Schema.TaggedStruct("Const", {
34
+ value: Value.Value,
35
+ name: Schema.optional(Schema.String),
36
+ sourceSpan: Schema.optional(SourceSpan)
37
+ });
38
+ export const Constr = Schema.TaggedStruct("Constr", {
39
+ tag: Schema.Int,
40
+ args: Schema.Array(SuspendedTerm),
41
+ sourceSpan: Schema.optional(SourceSpan)
42
+ });
43
+ export const Delay = Schema.TaggedStruct("Delay", {
44
+ arg: SuspendedTerm,
45
+ sourceSpan: Schema.optional(SourceSpan)
46
+ });
47
+ const Error$ = Schema.TaggedStruct("Error", {
48
+ sourceSpan: Schema.optional(SourceSpan)
49
+ });
50
+ export { Error$ as Error };
51
+ export const Force = Schema.TaggedStruct("Force", {
52
+ arg: SuspendedTerm,
53
+ sourceSpan: Schema.optional(SourceSpan)
54
+ });
55
+ export const Lambda = Schema.TaggedStruct("Lambda", {
56
+ body: SuspendedTerm,
57
+ argName: Schema.optional(Schema.String),
58
+ sourceSpan: Schema.optional(SourceSpan),
59
+ name: Schema.optional(Schema.String)
60
+ });
61
+ export const Var = Schema.TaggedStruct("Var", {
62
+ index: Schema.Int, // TODO: also constrain to be positive?
63
+ name: Schema.optional(Schema.String),
64
+ sourceSpan: Schema.optional(SourceSpan)
65
+ });
66
+ export const Term = Schema.Union(Apply, Builtin$, Case, Const, Constr, Delay, Error$, Force, Lambda, Var);
67
+ /**
68
+ * Simple recursive algorithm that calculates the number of bits of the flat encoded term
69
+ * @param term
70
+ * @returns
71
+ */
72
+ export function flatSize(term) {
73
+ switch (term._tag) {
74
+ case "Apply":
75
+ return 4 + flatSize(term.fn) + flatSize(term.arg);
76
+ case "Builtin":
77
+ return 4 + 7;
78
+ case "Case":
79
+ return 4 + flatSize(term.arg) + Flat.listSize(term.cases, flatSize);
80
+ case "Const":
81
+ return 4 + Value.flatSize(term.value);
82
+ case "Constr":
83
+ return (4 + Flat.intSize(term.tag, false) + Flat.listSize(term.args, flatSize));
84
+ case "Delay":
85
+ return 4 + flatSize(term.arg);
86
+ case "Error":
87
+ return 4;
88
+ case "Force":
89
+ return 4 + flatSize(term.arg);
90
+ case "Lambda":
91
+ return 4 + flatSize(term.body);
92
+ case "Var":
93
+ return 4 + Flat.intSize(term.index, false);
94
+ }
95
+ }
96
+ const ApplyTag = 3;
97
+ const BuiltinTag = 7;
98
+ const CaseTag = 9;
99
+ const ConstTag = 4;
100
+ const ConstrTag = 8;
101
+ const DelayTag = 1;
102
+ const ErrorTag = 6;
103
+ const ForceTag = 5;
104
+ const LambdaTag = 2;
105
+ const VarTag = 0;
106
+ export function flatTag(term) {
107
+ switch (term._tag) {
108
+ case "Apply":
109
+ return ApplyTag;
110
+ case "Builtin":
111
+ return BuiltinTag;
112
+ case "Case":
113
+ return CaseTag;
114
+ case "Const":
115
+ return ConstTag;
116
+ case "Constr":
117
+ return ConstrTag;
118
+ case "Delay":
119
+ return DelayTag;
120
+ case "Error":
121
+ return ErrorTag;
122
+ case "Force":
123
+ return ForceTag;
124
+ case "Lambda":
125
+ return LambdaTag;
126
+ case "Var":
127
+ return VarTag;
128
+ }
129
+ }
130
+ /**
131
+ * Reads a single Term using stack-based algorithm for its children
132
+ * @param param0
133
+ * @returns
134
+ */
135
+ export const decode = ({ builtinName }) => (r) => {
136
+ /**
137
+ * Undefined -> decoding
138
+ * Defined -> collecting
139
+ */
140
+ let term = undefined;
141
+ const collect = [];
142
+ while (!term || collect.length > 0) {
143
+ if (!term) {
144
+ const tag = r.readTag();
145
+ switch (tag) {
146
+ case VarTag:
147
+ term = { _tag: "Var", index: Number(r.readInt()) };
148
+ break;
149
+ case DelayTag:
150
+ collect.push({ kind: "delay" });
151
+ break;
152
+ case LambdaTag:
153
+ collect.push({ kind: "lambda" });
154
+ break;
155
+ case ApplyTag:
156
+ collect.push({ kind: "applyfn" });
157
+ break;
158
+ case ConstTag:
159
+ {
160
+ const value = Value.decode(r);
161
+ if (Either.isLeft(value)) {
162
+ return Either.left(value.left);
163
+ }
164
+ term = { _tag: "Const", value: value.right };
165
+ }
166
+ break;
167
+ case ForceTag:
168
+ collect.push({ kind: "force" });
169
+ break;
170
+ case ErrorTag:
171
+ term = { _tag: "Error" };
172
+ break;
173
+ case BuiltinTag:
174
+ {
175
+ const id = r.readBuiltinId();
176
+ term = { _tag: "Builtin", id, name: builtinName?.(id) };
177
+ }
178
+ break;
179
+ case ConstrTag:
180
+ {
181
+ const constrTag = Number(r.readInt());
182
+ const nilOrCons = r.readBits(1);
183
+ if (nilOrCons == 0) {
184
+ term = { _tag: "Constr", tag: constrTag, args: [] };
185
+ }
186
+ else {
187
+ collect.push({
188
+ kind: "constr",
189
+ tag: constrTag,
190
+ args: []
191
+ });
192
+ }
193
+ }
194
+ break;
195
+ case CaseTag:
196
+ collect.push({ kind: "casearg" });
197
+ break;
198
+ default:
199
+ return Either.left(new Error("term tag " + tag.toString() + " unhandled"));
200
+ }
201
+ }
202
+ else {
203
+ const c = collect.pop();
204
+ if (!c) {
205
+ return Either.left(new Error("Term decoding failed, collect is empty"));
206
+ }
207
+ switch (c.kind) {
208
+ case "apply":
209
+ term = { _tag: "Apply", fn: c.fn, arg: term };
210
+ break;
211
+ case "applyfn":
212
+ collect.push({ kind: "apply", fn: term });
213
+ term = undefined;
214
+ break;
215
+ case "case":
216
+ {
217
+ const cases = c.cases.concat([term]);
218
+ const nilOrCons = r.readBits(1);
219
+ if (nilOrCons == 0) {
220
+ term = { _tag: "Case", arg: c.arg, cases };
221
+ }
222
+ else {
223
+ collect.push({ ...c, cases });
224
+ term = undefined;
225
+ }
226
+ }
227
+ break;
228
+ case "casearg":
229
+ {
230
+ const nilOrCons = r.readBits(1);
231
+ if (nilOrCons == 0) {
232
+ term = { _tag: "Case", arg: term, cases: [] };
233
+ }
234
+ else {
235
+ collect.push({ kind: "case", arg: term, cases: [] });
236
+ term = undefined;
237
+ }
238
+ }
239
+ break;
240
+ case "constr":
241
+ {
242
+ const args = c.args.concat([term]);
243
+ const nilOrCons = r.readBits(1);
244
+ if (nilOrCons == 0) {
245
+ term = { _tag: "Constr", tag: c.tag, args };
246
+ }
247
+ else {
248
+ collect.push({ ...c, args });
249
+ term = undefined;
250
+ }
251
+ }
252
+ break;
253
+ case "delay":
254
+ term = { _tag: "Delay", arg: term };
255
+ break;
256
+ case "force":
257
+ term = { _tag: "Force", arg: term };
258
+ break;
259
+ case "lambda":
260
+ term = { _tag: "Lambda", body: term };
261
+ break;
262
+ }
263
+ }
264
+ }
265
+ if (term === undefined) {
266
+ return Either.left(new Error("term decoding failed"));
267
+ }
268
+ return Either.right(term);
269
+ };
270
+ /**
271
+ * Mutates the Flat.Writer
272
+ * @param w
273
+ */
274
+ export const encode = (w) => (term) => {
275
+ const pending = [
276
+ {
277
+ kind: "notInList",
278
+ term
279
+ }
280
+ ];
281
+ let action = pending.pop();
282
+ while (action) {
283
+ if (action.kind == "listItem" || action.kind == "notInList") {
284
+ if (action.kind == "listItem") {
285
+ w.writeListCons();
286
+ }
287
+ const t = action.term;
288
+ switch (t._tag) {
289
+ case "Builtin":
290
+ w.writeTermTag(BuiltinTag);
291
+ w.writeBuiltinId(t.id);
292
+ break;
293
+ case "Apply":
294
+ w.writeTermTag(ApplyTag);
295
+ pending.push({ kind: "notInList", term: t.arg });
296
+ pending.push({ kind: "notInList", term: t.fn });
297
+ break;
298
+ case "Case":
299
+ w.writeTermTag(CaseTag);
300
+ pending.push({ kind: "listEnd" });
301
+ for (let i = t.cases.length - 1; i >= 0; i--) {
302
+ pending.push({ kind: "listItem", term: t.cases[i] });
303
+ }
304
+ pending.push({ kind: "notInList", term: t.arg });
305
+ break;
306
+ case "Const":
307
+ if (t.value !== null &&
308
+ typeof t.value == "object" &&
309
+ ("g1Element" in t.value ||
310
+ "g2Element" in t.value ||
311
+ "mlResult" in t.value)) {
312
+ throw new Error("not yet implemented");
313
+ }
314
+ else {
315
+ w.writeTermTag(ConstTag);
316
+ w.writeTypeBits(Value.toType(t.value));
317
+ Value.toFlat(w)(t.value);
318
+ }
319
+ break;
320
+ case "Constr":
321
+ w.writeTermTag(ConstrTag);
322
+ w.writeInt(t.tag);
323
+ pending.push({ kind: "listEnd" });
324
+ for (let i = t.args.length - 1; i >= 0; i--) {
325
+ pending.push({ kind: "listItem", term: t.args[i] });
326
+ }
327
+ break;
328
+ case "Delay":
329
+ w.writeTermTag(DelayTag);
330
+ pending.push({ kind: "notInList", term: t.arg });
331
+ break;
332
+ case "Error":
333
+ w.writeTermTag(ErrorTag);
334
+ break;
335
+ case "Force":
336
+ w.writeTermTag(ForceTag);
337
+ pending.push({ kind: "notInList", term: t.arg });
338
+ break;
339
+ case "Lambda":
340
+ w.writeTermTag(LambdaTag);
341
+ pending.push({ kind: "notInList", term: t.body });
342
+ break;
343
+ case "Var":
344
+ w.writeTermTag(VarTag);
345
+ w.writeInt(BigInt(t.index));
346
+ break;
347
+ }
348
+ }
349
+ else {
350
+ w.writeListNil();
351
+ }
352
+ action = pending.pop();
353
+ }
354
+ };
355
+ /**
356
+ * Simple recursive algorithm the generates the textual UPLC representation
357
+ * @param term
358
+ * @returns
359
+ */
360
+ export function toString(term) {
361
+ switch (term._tag) {
362
+ case "Apply":
363
+ return `[${toString(term.fn)} ${toString(term.arg)}]`;
364
+ case "Builtin":
365
+ return `(builtin ${term.id.toString()})`;
366
+ case "Case":
367
+ return `(case (${toString(term.arg)}) ${term.cases.map((c) => `(${toString(c)})`).join(" ")})`;
368
+ case "Const":
369
+ return `(con ${Type.toString(Value.toType(term.value))} ${Value.toString(term.value)})`;
370
+ case "Constr":
371
+ return `(constr ${term.tag} ${term.args.map(toString).join(" ")})`;
372
+ case "Delay":
373
+ return `(delay ${toString(term.arg)})`;
374
+ case "Error":
375
+ return "(error)";
376
+ case "Force":
377
+ return `(force ${toString(term.arg)})`;
378
+ case "Lambda":
379
+ return `(lam ${term.argName !== undefined ? `${term.argName} ` : ""}${toString(term.body)})`;
380
+ case "Var":
381
+ return term.name ?? `x${term.index}`;
382
+ }
383
+ }
384
+ //# sourceMappingURL=Term.js.map