@opcat-labs/scrypt-ts-opcat 1.0.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 (537) hide show
  1. package/assets/.templates/smart-contract/builtin-libs/TxHashPreimageUtils.scrypt.map +1 -0
  2. package/assets/.templates/smart-contract/builtin-libs/TxHashPreimageUtils.scrypt.tpl +18 -0
  3. package/assets/.templates/smart-contract/builtin-libs/TxHashPreimageUtils.transformer.json +7 -0
  4. package/assets/.templates/smart-contract/builtin-libs/backtrace.scrypt.map +1 -0
  5. package/assets/.templates/smart-contract/builtin-libs/backtrace.scrypt.tpl +36 -0
  6. package/assets/.templates/smart-contract/builtin-libs/backtrace.transformer.json +7 -0
  7. package/assets/.templates/smart-contract/builtin-libs/byteStringReader.scrypt.map +1 -0
  8. package/assets/.templates/smart-contract/builtin-libs/byteStringReader.scrypt.tpl +64 -0
  9. package/assets/.templates/smart-contract/builtin-libs/byteStringReader.transformer.json +7 -0
  10. package/assets/.templates/smart-contract/builtin-libs/byteStringWriter.scrypt.map +1 -0
  11. package/assets/.templates/smart-contract/builtin-libs/byteStringWriter.scrypt.tpl +48 -0
  12. package/assets/.templates/smart-contract/builtin-libs/byteStringWriter.transformer.json +7 -0
  13. package/assets/.templates/smart-contract/builtin-libs/contextUtils.scrypt.map +1 -0
  14. package/assets/.templates/smart-contract/builtin-libs/contextUtils.scrypt.tpl +101 -0
  15. package/assets/.templates/smart-contract/builtin-libs/contextUtils.transformer.json +7 -0
  16. package/assets/.templates/smart-contract/builtin-libs/p2pk.scrypt.map +1 -0
  17. package/assets/.templates/smart-contract/builtin-libs/p2pk.scrypt.tpl +7 -0
  18. package/assets/.templates/smart-contract/builtin-libs/p2pk.transformer.json +7 -0
  19. package/assets/.templates/smart-contract/builtin-libs/p2pkh.scrypt.map +1 -0
  20. package/assets/.templates/smart-contract/builtin-libs/p2pkh.scrypt.tpl +8 -0
  21. package/assets/.templates/smart-contract/builtin-libs/p2pkh.transformer.json +7 -0
  22. package/assets/.templates/smart-contract/builtin-libs/stateLib.scrypt.map +1 -0
  23. package/assets/.templates/smart-contract/builtin-libs/stateLib.scrypt.tpl +3 -0
  24. package/assets/.templates/smart-contract/builtin-libs/stateLib.transformer.json +7 -0
  25. package/assets/.templates/smart-contract/builtin-libs/stateUtils.scrypt.map +1 -0
  26. package/assets/.templates/smart-contract/builtin-libs/stateUtils.scrypt.tpl +7 -0
  27. package/assets/.templates/smart-contract/builtin-libs/stateUtils.transformer.json +7 -0
  28. package/assets/.templates/smart-contract/builtin-libs/stdUtils.scrypt.map +1 -0
  29. package/assets/.templates/smart-contract/builtin-libs/stdUtils.scrypt.tpl +89 -0
  30. package/assets/.templates/smart-contract/builtin-libs/stdUtils.transformer.json +7 -0
  31. package/assets/.templates/smart-contract/builtin-libs/txUtils.scrypt.map +1 -0
  32. package/assets/.templates/smart-contract/builtin-libs/txUtils.scrypt.tpl +42 -0
  33. package/assets/.templates/smart-contract/builtin-libs/txUtils.transformer.json +7 -0
  34. package/assets/.templates/smart-contract/types/structs.scrypt.map +1 -0
  35. package/assets/.templates/smart-contract/types/structs.scrypt.tpl +48 -0
  36. package/assets/.templates/smart-contract/types/structs.transformer.json +7 -0
  37. package/assets/smart-contract/builtin-libs/TxHashPreimageUtils.scrypt +20 -0
  38. package/assets/smart-contract/builtin-libs/backtrace.scrypt +38 -0
  39. package/assets/smart-contract/builtin-libs/byteStringReader.scrypt +66 -0
  40. package/assets/smart-contract/builtin-libs/byteStringWriter.scrypt +50 -0
  41. package/assets/smart-contract/builtin-libs/contextUtils.scrypt +103 -0
  42. package/assets/smart-contract/builtin-libs/p2pk.scrypt +9 -0
  43. package/assets/smart-contract/builtin-libs/p2pkh.scrypt +10 -0
  44. package/assets/smart-contract/builtin-libs/stateLib.scrypt +5 -0
  45. package/assets/smart-contract/builtin-libs/stateUtils.scrypt +9 -0
  46. package/assets/smart-contract/builtin-libs/stdUtils.scrypt +91 -0
  47. package/assets/smart-contract/builtin-libs/txUtils.scrypt +44 -0
  48. package/assets/smart-contract/types/structs.scrypt +50 -0
  49. package/dist/cjs/features/call.cjs +38 -0
  50. package/dist/cjs/features/call.js.map +1 -0
  51. package/dist/cjs/features/deploy.cjs +33 -0
  52. package/dist/cjs/features/deploy.js.map +1 -0
  53. package/dist/cjs/features/index.cjs +8 -0
  54. package/dist/cjs/features/index.js.map +1 -0
  55. package/dist/cjs/globalTypes.cjs +3 -0
  56. package/dist/cjs/globalTypes.js.map +1 -0
  57. package/dist/cjs/index.cjs +55 -0
  58. package/dist/cjs/index.js.map +1 -0
  59. package/dist/cjs/networks.cjs +69 -0
  60. package/dist/cjs/networks.js.map +1 -0
  61. package/dist/cjs/providers/chainProvider.cjs +3 -0
  62. package/dist/cjs/providers/chainProvider.js.map +1 -0
  63. package/dist/cjs/providers/dummyProvider.cjs +87 -0
  64. package/dist/cjs/providers/dummyProvider.js.map +1 -0
  65. package/dist/cjs/providers/index.cjs +13 -0
  66. package/dist/cjs/providers/index.js.map +1 -0
  67. package/dist/cjs/providers/mempoolProvider.cjs +207 -0
  68. package/dist/cjs/providers/mempoolProvider.js.map +1 -0
  69. package/dist/cjs/providers/rpcProvider.cjs +296 -0
  70. package/dist/cjs/providers/rpcProvider.js.map +1 -0
  71. package/dist/cjs/providers/utxoProvider.cjs +18 -0
  72. package/dist/cjs/providers/utxoProvider.js.map +1 -0
  73. package/dist/cjs/psbt/bip66.cjs +182 -0
  74. package/dist/cjs/psbt/bip66.js.map +1 -0
  75. package/dist/cjs/psbt/bufferutils.cjs +186 -0
  76. package/dist/cjs/psbt/bufferutils.js.map +1 -0
  77. package/dist/cjs/psbt/contextProvider.cjs +111 -0
  78. package/dist/cjs/psbt/contextProvider.js.map +1 -0
  79. package/dist/cjs/psbt/extPsbt.cjs +589 -0
  80. package/dist/cjs/psbt/extPsbt.js.map +1 -0
  81. package/dist/cjs/psbt/psbt.cjs +973 -0
  82. package/dist/cjs/psbt/psbt.js.map +1 -0
  83. package/dist/cjs/psbt/psbtutils.cjs +140 -0
  84. package/dist/cjs/psbt/psbtutils.js.map +1 -0
  85. package/dist/cjs/psbt/signatureutils.cjs +230 -0
  86. package/dist/cjs/psbt/signatureutils.js.map +1 -0
  87. package/dist/cjs/psbt/types.cjs +3 -0
  88. package/dist/cjs/psbt/types.js.map +1 -0
  89. package/dist/cjs/signer.cjs +3 -0
  90. package/dist/cjs/signer.js.map +1 -0
  91. package/dist/cjs/signers/defaultSigner.cjs +68 -0
  92. package/dist/cjs/signers/defaultSigner.js.map +1 -0
  93. package/dist/cjs/signers/index.cjs +8 -0
  94. package/dist/cjs/signers/index.js.map +1 -0
  95. package/dist/cjs/signers/unisatSigner.cjs +38 -0
  96. package/dist/cjs/signers/unisatSigner.js.map +1 -0
  97. package/dist/cjs/smart-contract/abi.cjs +380 -0
  98. package/dist/cjs/smart-contract/abi.js.map +1 -0
  99. package/dist/cjs/smart-contract/abiutils.cjs +183 -0
  100. package/dist/cjs/smart-contract/abiutils.js.map +1 -0
  101. package/dist/cjs/smart-contract/abstractContract.cjs +25 -0
  102. package/dist/cjs/smart-contract/abstractContract.js.map +1 -0
  103. package/dist/cjs/smart-contract/builtin-libs/backtrace.cjs +102 -0
  104. package/dist/cjs/smart-contract/builtin-libs/backtrace.js.map +1 -0
  105. package/dist/cjs/smart-contract/builtin-libs/byteStringReader.cjs +138 -0
  106. package/dist/cjs/smart-contract/builtin-libs/byteStringReader.js.map +1 -0
  107. package/dist/cjs/smart-contract/builtin-libs/byteStringWriter.cjs +109 -0
  108. package/dist/cjs/smart-contract/builtin-libs/byteStringWriter.js.map +1 -0
  109. package/dist/cjs/smart-contract/builtin-libs/contextUtils.cjs +304 -0
  110. package/dist/cjs/smart-contract/builtin-libs/contextUtils.js.map +1 -0
  111. package/dist/cjs/smart-contract/builtin-libs/index.cjs +18 -0
  112. package/dist/cjs/smart-contract/builtin-libs/index.js.map +1 -0
  113. package/dist/cjs/smart-contract/builtin-libs/p2pk.cjs +74 -0
  114. package/dist/cjs/smart-contract/builtin-libs/p2pk.js.map +1 -0
  115. package/dist/cjs/smart-contract/builtin-libs/p2pkh.cjs +80 -0
  116. package/dist/cjs/smart-contract/builtin-libs/p2pkh.js.map +1 -0
  117. package/dist/cjs/smart-contract/builtin-libs/stateLib.cjs +65 -0
  118. package/dist/cjs/smart-contract/builtin-libs/stateLib.js.map +1 -0
  119. package/dist/cjs/smart-contract/builtin-libs/stateUtils.cjs +42 -0
  120. package/dist/cjs/smart-contract/builtin-libs/stateUtils.js.map +1 -0
  121. package/dist/cjs/smart-contract/builtin-libs/stdUtils.cjs +192 -0
  122. package/dist/cjs/smart-contract/builtin-libs/stdUtils.js.map +1 -0
  123. package/dist/cjs/smart-contract/builtin-libs/txHashPreimageUtils.cjs +56 -0
  124. package/dist/cjs/smart-contract/builtin-libs/txHashPreimageUtils.js.map +1 -0
  125. package/dist/cjs/smart-contract/builtin-libs/txUtils.cjs +183 -0
  126. package/dist/cjs/smart-contract/builtin-libs/txUtils.js.map +1 -0
  127. package/dist/cjs/smart-contract/consts.cjs +100 -0
  128. package/dist/cjs/smart-contract/consts.js.map +1 -0
  129. package/dist/cjs/smart-contract/decorators.cjs +83 -0
  130. package/dist/cjs/smart-contract/decorators.js.map +1 -0
  131. package/dist/cjs/smart-contract/fns/assert.cjs +17 -0
  132. package/dist/cjs/smart-contract/fns/assert.js.map +1 -0
  133. package/dist/cjs/smart-contract/fns/bitwise.cjs +141 -0
  134. package/dist/cjs/smart-contract/fns/bitwise.js.map +1 -0
  135. package/dist/cjs/smart-contract/fns/byteString.cjs +106 -0
  136. package/dist/cjs/smart-contract/fns/byteString.js.map +1 -0
  137. package/dist/cjs/smart-contract/fns/equals.cjs +66 -0
  138. package/dist/cjs/smart-contract/fns/equals.js.map +1 -0
  139. package/dist/cjs/smart-contract/fns/fill.cjs +19 -0
  140. package/dist/cjs/smart-contract/fns/fill.js.map +1 -0
  141. package/dist/cjs/smart-contract/fns/hashes.cjs +81 -0
  142. package/dist/cjs/smart-contract/fns/hashes.js.map +1 -0
  143. package/dist/cjs/smart-contract/fns/index.cjs +37 -0
  144. package/dist/cjs/smart-contract/fns/index.js.map +1 -0
  145. package/dist/cjs/smart-contract/fns/math.cjs +52 -0
  146. package/dist/cjs/smart-contract/fns/math.js.map +1 -0
  147. package/dist/cjs/smart-contract/fns/pubKey2Addr.cjs +17 -0
  148. package/dist/cjs/smart-contract/fns/pubKey2Addr.js.map +1 -0
  149. package/dist/cjs/smart-contract/methods/backtraceToGenensis.cjs +41 -0
  150. package/dist/cjs/smart-contract/methods/backtraceToGenensis.js.map +1 -0
  151. package/dist/cjs/smart-contract/methods/buildOutput.cjs +41 -0
  152. package/dist/cjs/smart-contract/methods/buildOutput.js.map +1 -0
  153. package/dist/cjs/smart-contract/methods/checkCtx.cjs +58 -0
  154. package/dist/cjs/smart-contract/methods/checkCtx.js.map +1 -0
  155. package/dist/cjs/smart-contract/methods/checkInputState.cjs +16 -0
  156. package/dist/cjs/smart-contract/methods/checkInputState.js.map +1 -0
  157. package/dist/cjs/smart-contract/methods/checkInputStateHashes.cjs +16 -0
  158. package/dist/cjs/smart-contract/methods/checkInputStateHashes.js.map +1 -0
  159. package/dist/cjs/smart-contract/methods/checkSHPreimage.cjs +17 -0
  160. package/dist/cjs/smart-contract/methods/checkSHPreimage.js.map +1 -0
  161. package/dist/cjs/smart-contract/methods/checkSig.cjs +77 -0
  162. package/dist/cjs/smart-contract/methods/checkSig.js.map +1 -0
  163. package/dist/cjs/smart-contract/serializer.cjs +145 -0
  164. package/dist/cjs/smart-contract/serializer.js.map +1 -0
  165. package/dist/cjs/smart-contract/smartContract.cjs +568 -0
  166. package/dist/cjs/smart-contract/smartContract.js.map +1 -0
  167. package/dist/cjs/smart-contract/smartContractLib.cjs +46 -0
  168. package/dist/cjs/smart-contract/smartContractLib.js.map +1 -0
  169. package/dist/cjs/smart-contract/stateSerializer.cjs +134 -0
  170. package/dist/cjs/smart-contract/stateSerializer.js.map +1 -0
  171. package/dist/cjs/smart-contract/types/abi.cjs +69 -0
  172. package/dist/cjs/smart-contract/types/abi.js.map +1 -0
  173. package/dist/cjs/smart-contract/types/artifact.cjs +16 -0
  174. package/dist/cjs/smart-contract/types/artifact.js.map +1 -0
  175. package/dist/cjs/smart-contract/types/bn.cjs +117 -0
  176. package/dist/cjs/smart-contract/types/bn.js.map +1 -0
  177. package/dist/cjs/smart-contract/types/context.cjs +3 -0
  178. package/dist/cjs/smart-contract/types/context.js.map +1 -0
  179. package/dist/cjs/smart-contract/types/index.cjs +16 -0
  180. package/dist/cjs/smart-contract/types/index.js.map +1 -0
  181. package/dist/cjs/smart-contract/types/opCode.cjs +754 -0
  182. package/dist/cjs/smart-contract/types/opCode.js.map +1 -0
  183. package/dist/cjs/smart-contract/types/primitives.cjs +108 -0
  184. package/dist/cjs/smart-contract/types/primitives.js.map +1 -0
  185. package/dist/cjs/smart-contract/types/script.cjs +43 -0
  186. package/dist/cjs/smart-contract/types/script.js.map +1 -0
  187. package/dist/cjs/smart-contract/types/structs.cjs +3 -0
  188. package/dist/cjs/smart-contract/types/structs.js.map +1 -0
  189. package/dist/cjs/smart-contract/types/utils.cjs +21 -0
  190. package/dist/cjs/smart-contract/types/utils.js.map +1 -0
  191. package/dist/cjs/utils/bvm.cjs +30 -0
  192. package/dist/cjs/utils/bvm.js.map +1 -0
  193. package/dist/cjs/utils/checkIntegrity.cjs +49 -0
  194. package/dist/cjs/utils/checkIntegrity.js.map +1 -0
  195. package/dist/cjs/utils/common.cjs +228 -0
  196. package/dist/cjs/utils/common.js.map +1 -0
  197. package/dist/cjs/utils/constants.cjs +5 -0
  198. package/dist/cjs/utils/constants.js.map +1 -0
  199. package/dist/cjs/utils/index.cjs +45 -0
  200. package/dist/cjs/utils/index.js.map +1 -0
  201. package/dist/cjs/utils/preimage.cjs +93 -0
  202. package/dist/cjs/utils/preimage.js.map +1 -0
  203. package/dist/cjs/utils/proof.cjs +110 -0
  204. package/dist/cjs/utils/proof.js.map +1 -0
  205. package/dist/cjs/utils/script_number.cjs +107 -0
  206. package/dist/cjs/utils/script_number.js.map +1 -0
  207. package/dist/esm/features/call.js +34 -0
  208. package/dist/esm/features/call.js.map +1 -0
  209. package/dist/esm/features/deploy.js +29 -0
  210. package/dist/esm/features/deploy.js.map +1 -0
  211. package/dist/esm/features/index.js +3 -0
  212. package/dist/esm/features/index.js.map +1 -0
  213. package/dist/esm/globalTypes.js +2 -0
  214. package/dist/esm/globalTypes.js.map +1 -0
  215. package/dist/esm/index.js +23 -0
  216. package/dist/esm/index.js.map +1 -0
  217. package/dist/esm/networks.js +41 -0
  218. package/dist/esm/networks.js.map +1 -0
  219. package/dist/esm/providers/chainProvider.js +2 -0
  220. package/dist/esm/providers/chainProvider.js.map +1 -0
  221. package/dist/esm/providers/dummyProvider.js +60 -0
  222. package/dist/esm/providers/dummyProvider.js.map +1 -0
  223. package/dist/esm/providers/index.js +5 -0
  224. package/dist/esm/providers/index.js.map +1 -0
  225. package/dist/esm/providers/mempoolProvider.js +200 -0
  226. package/dist/esm/providers/mempoolProvider.js.map +1 -0
  227. package/dist/esm/providers/rpcProvider.js +266 -0
  228. package/dist/esm/providers/rpcProvider.js.map +1 -0
  229. package/dist/esm/providers/utxoProvider.js +13 -0
  230. package/dist/esm/providers/utxoProvider.js.map +1 -0
  231. package/dist/esm/psbt/bip66.js +175 -0
  232. package/dist/esm/psbt/bip66.js.map +1 -0
  233. package/dist/esm/psbt/bufferutils.js +156 -0
  234. package/dist/esm/psbt/bufferutils.js.map +1 -0
  235. package/dist/esm/psbt/contextProvider.js +84 -0
  236. package/dist/esm/psbt/contextProvider.js.map +1 -0
  237. package/dist/esm/psbt/extPsbt.js +562 -0
  238. package/dist/esm/psbt/extPsbt.js.map +1 -0
  239. package/dist/esm/psbt/psbt.js +945 -0
  240. package/dist/esm/psbt/psbt.js.map +1 -0
  241. package/dist/esm/psbt/psbtutils.js +110 -0
  242. package/dist/esm/psbt/psbtutils.js.map +1 -0
  243. package/dist/esm/psbt/signatureutils.js +199 -0
  244. package/dist/esm/psbt/signatureutils.js.map +1 -0
  245. package/dist/esm/psbt/types.js +2 -0
  246. package/dist/esm/psbt/types.js.map +1 -0
  247. package/dist/esm/signer.js +2 -0
  248. package/dist/esm/signer.js.map +1 -0
  249. package/dist/esm/signers/defaultSigner.js +63 -0
  250. package/dist/esm/signers/defaultSigner.js.map +1 -0
  251. package/dist/esm/signers/index.js +3 -0
  252. package/dist/esm/signers/index.js.map +1 -0
  253. package/dist/esm/signers/unisatSigner.js +34 -0
  254. package/dist/esm/signers/unisatSigner.js.map +1 -0
  255. package/dist/esm/smart-contract/abi.js +373 -0
  256. package/dist/esm/smart-contract/abi.js.map +1 -0
  257. package/dist/esm/smart-contract/abiutils.js +171 -0
  258. package/dist/esm/smart-contract/abiutils.js.map +1 -0
  259. package/dist/esm/smart-contract/abstractContract.js +21 -0
  260. package/dist/esm/smart-contract/abstractContract.js.map +1 -0
  261. package/dist/esm/smart-contract/builtin-libs/backtrace.js +98 -0
  262. package/dist/esm/smart-contract/builtin-libs/backtrace.js.map +1 -0
  263. package/dist/esm/smart-contract/builtin-libs/byteStringReader.js +134 -0
  264. package/dist/esm/smart-contract/builtin-libs/byteStringReader.js.map +1 -0
  265. package/dist/esm/smart-contract/builtin-libs/byteStringWriter.js +105 -0
  266. package/dist/esm/smart-contract/builtin-libs/byteStringWriter.js.map +1 -0
  267. package/dist/esm/smart-contract/builtin-libs/contextUtils.js +300 -0
  268. package/dist/esm/smart-contract/builtin-libs/contextUtils.js.map +1 -0
  269. package/dist/esm/smart-contract/builtin-libs/index.js +8 -0
  270. package/dist/esm/smart-contract/builtin-libs/index.js.map +1 -0
  271. package/dist/esm/smart-contract/builtin-libs/p2pk.js +70 -0
  272. package/dist/esm/smart-contract/builtin-libs/p2pk.js.map +1 -0
  273. package/dist/esm/smart-contract/builtin-libs/p2pkh.js +76 -0
  274. package/dist/esm/smart-contract/builtin-libs/p2pkh.js.map +1 -0
  275. package/dist/esm/smart-contract/builtin-libs/stateLib.js +61 -0
  276. package/dist/esm/smart-contract/builtin-libs/stateLib.js.map +1 -0
  277. package/dist/esm/smart-contract/builtin-libs/stateUtils.js +38 -0
  278. package/dist/esm/smart-contract/builtin-libs/stateUtils.js.map +1 -0
  279. package/dist/esm/smart-contract/builtin-libs/stdUtils.js +188 -0
  280. package/dist/esm/smart-contract/builtin-libs/stdUtils.js.map +1 -0
  281. package/dist/esm/smart-contract/builtin-libs/txHashPreimageUtils.js +52 -0
  282. package/dist/esm/smart-contract/builtin-libs/txHashPreimageUtils.js.map +1 -0
  283. package/dist/esm/smart-contract/builtin-libs/txUtils.js +179 -0
  284. package/dist/esm/smart-contract/builtin-libs/txUtils.js.map +1 -0
  285. package/dist/esm/smart-contract/consts.js +97 -0
  286. package/dist/esm/smart-contract/consts.js.map +1 -0
  287. package/dist/esm/smart-contract/decorators.js +78 -0
  288. package/dist/esm/smart-contract/decorators.js.map +1 -0
  289. package/dist/esm/smart-contract/fns/assert.js +13 -0
  290. package/dist/esm/smart-contract/fns/assert.js.map +1 -0
  291. package/dist/esm/smart-contract/fns/bitwise.js +109 -0
  292. package/dist/esm/smart-contract/fns/bitwise.js.map +1 -0
  293. package/dist/esm/smart-contract/fns/byteString.js +97 -0
  294. package/dist/esm/smart-contract/fns/byteString.js.map +1 -0
  295. package/dist/esm/smart-contract/fns/equals.js +62 -0
  296. package/dist/esm/smart-contract/fns/equals.js.map +1 -0
  297. package/dist/esm/smart-contract/fns/fill.js +15 -0
  298. package/dist/esm/smart-contract/fns/fill.js.map +1 -0
  299. package/dist/esm/smart-contract/fns/hashes.js +73 -0
  300. package/dist/esm/smart-contract/fns/hashes.js.map +1 -0
  301. package/dist/esm/smart-contract/fns/index.js +9 -0
  302. package/dist/esm/smart-contract/fns/index.js.map +1 -0
  303. package/dist/esm/smart-contract/fns/math.js +45 -0
  304. package/dist/esm/smart-contract/fns/math.js.map +1 -0
  305. package/dist/esm/smart-contract/fns/pubKey2Addr.js +13 -0
  306. package/dist/esm/smart-contract/fns/pubKey2Addr.js.map +1 -0
  307. package/dist/esm/smart-contract/methods/backtraceToGenensis.js +36 -0
  308. package/dist/esm/smart-contract/methods/backtraceToGenensis.js.map +1 -0
  309. package/dist/esm/smart-contract/methods/buildOutput.js +36 -0
  310. package/dist/esm/smart-contract/methods/buildOutput.js.map +1 -0
  311. package/dist/esm/smart-contract/methods/checkCtx.js +31 -0
  312. package/dist/esm/smart-contract/methods/checkCtx.js.map +1 -0
  313. package/dist/esm/smart-contract/methods/checkInputState.js +12 -0
  314. package/dist/esm/smart-contract/methods/checkInputState.js.map +1 -0
  315. package/dist/esm/smart-contract/methods/checkInputStateHashes.js +12 -0
  316. package/dist/esm/smart-contract/methods/checkInputStateHashes.js.map +1 -0
  317. package/dist/esm/smart-contract/methods/checkSHPreimage.js +13 -0
  318. package/dist/esm/smart-contract/methods/checkSHPreimage.js.map +1 -0
  319. package/dist/esm/smart-contract/methods/checkSig.js +73 -0
  320. package/dist/esm/smart-contract/methods/checkSig.js.map +1 -0
  321. package/dist/esm/smart-contract/serializer.js +112 -0
  322. package/dist/esm/smart-contract/serializer.js.map +1 -0
  323. package/dist/esm/smart-contract/smartContract.js +564 -0
  324. package/dist/esm/smart-contract/smartContract.js.map +1 -0
  325. package/dist/esm/smart-contract/smartContractLib.js +42 -0
  326. package/dist/esm/smart-contract/smartContractLib.js.map +1 -0
  327. package/dist/esm/smart-contract/stateSerializer.js +129 -0
  328. package/dist/esm/smart-contract/stateSerializer.js.map +1 -0
  329. package/dist/esm/smart-contract/types/abi.js +63 -0
  330. package/dist/esm/smart-contract/types/abi.js.map +1 -0
  331. package/dist/esm/smart-contract/types/artifact.js +13 -0
  332. package/dist/esm/smart-contract/types/artifact.js.map +1 -0
  333. package/dist/esm/smart-contract/types/bn.js +89 -0
  334. package/dist/esm/smart-contract/types/bn.js.map +1 -0
  335. package/dist/esm/smart-contract/types/context.js +2 -0
  336. package/dist/esm/smart-contract/types/context.js.map +1 -0
  337. package/dist/esm/smart-contract/types/index.js +3 -0
  338. package/dist/esm/smart-contract/types/index.js.map +1 -0
  339. package/dist/esm/smart-contract/types/opCode.js +750 -0
  340. package/dist/esm/smart-contract/types/opCode.js.map +1 -0
  341. package/dist/esm/smart-contract/types/primitives.js +95 -0
  342. package/dist/esm/smart-contract/types/primitives.js.map +1 -0
  343. package/dist/esm/smart-contract/types/script.js +16 -0
  344. package/dist/esm/smart-contract/types/script.js.map +1 -0
  345. package/dist/esm/smart-contract/types/structs.js +2 -0
  346. package/dist/esm/smart-contract/types/structs.js.map +1 -0
  347. package/dist/esm/smart-contract/types/utils.js +17 -0
  348. package/dist/esm/smart-contract/types/utils.js.map +1 -0
  349. package/dist/esm/utils/bvm.js +26 -0
  350. package/dist/esm/utils/bvm.js.map +1 -0
  351. package/dist/esm/utils/checkIntegrity.js +41 -0
  352. package/dist/esm/utils/checkIntegrity.js.map +1 -0
  353. package/dist/esm/utils/common.js +188 -0
  354. package/dist/esm/utils/common.js.map +1 -0
  355. package/dist/esm/utils/constants.js +2 -0
  356. package/dist/esm/utils/constants.js.map +1 -0
  357. package/dist/esm/utils/index.js +7 -0
  358. package/dist/esm/utils/index.js.map +1 -0
  359. package/dist/esm/utils/preimage.js +65 -0
  360. package/dist/esm/utils/preimage.js.map +1 -0
  361. package/dist/esm/utils/proof.js +98 -0
  362. package/dist/esm/utils/proof.js.map +1 -0
  363. package/dist/esm/utils/script_number.js +79 -0
  364. package/dist/esm/utils/script_number.js.map +1 -0
  365. package/dist/types/features/call.d.ts +21 -0
  366. package/dist/types/features/call.d.ts.map +1 -0
  367. package/dist/types/features/deploy.d.ts +16 -0
  368. package/dist/types/features/deploy.d.ts.map +1 -0
  369. package/dist/types/features/index.d.ts +3 -0
  370. package/dist/types/features/index.d.ts.map +1 -0
  371. package/dist/types/globalTypes.d.ts +37 -0
  372. package/dist/types/globalTypes.d.ts.map +1 -0
  373. package/dist/types/index.d.ts +18 -0
  374. package/dist/types/index.d.ts.map +1 -0
  375. package/dist/types/networks.d.ts +19 -0
  376. package/dist/types/networks.d.ts.map +1 -0
  377. package/dist/types/providers/chainProvider.d.ts +31 -0
  378. package/dist/types/providers/chainProvider.d.ts.map +1 -0
  379. package/dist/types/providers/dummyProvider.d.ts +23 -0
  380. package/dist/types/providers/dummyProvider.d.ts.map +1 -0
  381. package/dist/types/providers/index.d.ts +6 -0
  382. package/dist/types/providers/index.d.ts.map +1 -0
  383. package/dist/types/providers/mempoolProvider.d.ts +28 -0
  384. package/dist/types/providers/mempoolProvider.d.ts.map +1 -0
  385. package/dist/types/providers/rpcProvider.d.ts +34 -0
  386. package/dist/types/providers/rpcProvider.d.ts.map +1 -0
  387. package/dist/types/providers/utxoProvider.d.ts +43 -0
  388. package/dist/types/providers/utxoProvider.d.ts.map +1 -0
  389. package/dist/types/psbt/bip66.d.ts +28 -0
  390. package/dist/types/psbt/bip66.d.ts.map +1 -0
  391. package/dist/types/psbt/bufferutils.d.ts +47 -0
  392. package/dist/types/psbt/bufferutils.d.ts.map +1 -0
  393. package/dist/types/psbt/contextProvider.d.ts +15 -0
  394. package/dist/types/psbt/contextProvider.d.ts.map +1 -0
  395. package/dist/types/psbt/extPsbt.d.ts +131 -0
  396. package/dist/types/psbt/extPsbt.d.ts.map +1 -0
  397. package/dist/types/psbt/psbt.d.ts +194 -0
  398. package/dist/types/psbt/psbt.d.ts.map +1 -0
  399. package/dist/types/psbt/psbtutils.d.ts +37 -0
  400. package/dist/types/psbt/psbtutils.d.ts.map +1 -0
  401. package/dist/types/psbt/signatureutils.d.ts +52 -0
  402. package/dist/types/psbt/signatureutils.d.ts.map +1 -0
  403. package/dist/types/psbt/types.d.ts +63 -0
  404. package/dist/types/psbt/types.d.ts.map +1 -0
  405. package/dist/types/signer.d.ts +48 -0
  406. package/dist/types/signer.d.ts.map +1 -0
  407. package/dist/types/signers/defaultSigner.d.ts +30 -0
  408. package/dist/types/signers/defaultSigner.d.ts.map +1 -0
  409. package/dist/types/signers/index.d.ts +4 -0
  410. package/dist/types/signers/index.d.ts.map +1 -0
  411. package/dist/types/signers/unisatSigner.d.ts +32 -0
  412. package/dist/types/signers/unisatSigner.d.ts.map +1 -0
  413. package/dist/types/smart-contract/abi.d.ts +43 -0
  414. package/dist/types/smart-contract/abi.d.ts.map +1 -0
  415. package/dist/types/smart-contract/abiutils.d.ts +51 -0
  416. package/dist/types/smart-contract/abiutils.d.ts.map +1 -0
  417. package/dist/types/smart-contract/abstractContract.d.ts +115 -0
  418. package/dist/types/smart-contract/abstractContract.d.ts.map +1 -0
  419. package/dist/types/smart-contract/builtin-libs/backtrace.d.ts +43 -0
  420. package/dist/types/smart-contract/builtin-libs/backtrace.d.ts.map +1 -0
  421. package/dist/types/smart-contract/builtin-libs/byteStringReader.d.ts +32 -0
  422. package/dist/types/smart-contract/builtin-libs/byteStringReader.d.ts.map +1 -0
  423. package/dist/types/smart-contract/builtin-libs/byteStringWriter.d.ts +29 -0
  424. package/dist/types/smart-contract/builtin-libs/byteStringWriter.d.ts.map +1 -0
  425. package/dist/types/smart-contract/builtin-libs/contextUtils.d.ts +53 -0
  426. package/dist/types/smart-contract/builtin-libs/contextUtils.d.ts.map +1 -0
  427. package/dist/types/smart-contract/builtin-libs/index.d.ts +8 -0
  428. package/dist/types/smart-contract/builtin-libs/index.d.ts.map +1 -0
  429. package/dist/types/smart-contract/builtin-libs/p2pk.d.ts +8 -0
  430. package/dist/types/smart-contract/builtin-libs/p2pk.d.ts.map +1 -0
  431. package/dist/types/smart-contract/builtin-libs/p2pkh.d.ts +8 -0
  432. package/dist/types/smart-contract/builtin-libs/p2pkh.d.ts.map +1 -0
  433. package/dist/types/smart-contract/builtin-libs/stateLib.d.ts +27 -0
  434. package/dist/types/smart-contract/builtin-libs/stateLib.d.ts.map +1 -0
  435. package/dist/types/smart-contract/builtin-libs/stateUtils.d.ts +18 -0
  436. package/dist/types/smart-contract/builtin-libs/stateUtils.d.ts.map +1 -0
  437. package/dist/types/smart-contract/builtin-libs/stdUtils.d.ts +44 -0
  438. package/dist/types/smart-contract/builtin-libs/stdUtils.d.ts.map +1 -0
  439. package/dist/types/smart-contract/builtin-libs/txHashPreimageUtils.d.ts +8 -0
  440. package/dist/types/smart-contract/builtin-libs/txHashPreimageUtils.d.ts.map +1 -0
  441. package/dist/types/smart-contract/builtin-libs/txUtils.d.ts +69 -0
  442. package/dist/types/smart-contract/builtin-libs/txUtils.d.ts.map +1 -0
  443. package/dist/types/smart-contract/consts.d.ts +97 -0
  444. package/dist/types/smart-contract/consts.d.ts.map +1 -0
  445. package/dist/types/smart-contract/decorators.d.ts +40 -0
  446. package/dist/types/smart-contract/decorators.d.ts.map +1 -0
  447. package/dist/types/smart-contract/fns/assert.d.ts +8 -0
  448. package/dist/types/smart-contract/fns/assert.d.ts.map +1 -0
  449. package/dist/types/smart-contract/fns/bitwise.d.ts +50 -0
  450. package/dist/types/smart-contract/fns/bitwise.d.ts.map +1 -0
  451. package/dist/types/smart-contract/fns/byteString.d.ts +56 -0
  452. package/dist/types/smart-contract/fns/byteString.d.ts.map +1 -0
  453. package/dist/types/smart-contract/fns/equals.d.ts +8 -0
  454. package/dist/types/smart-contract/fns/equals.d.ts.map +1 -0
  455. package/dist/types/smart-contract/fns/fill.d.ts +11 -0
  456. package/dist/types/smart-contract/fns/fill.d.ts.map +1 -0
  457. package/dist/types/smart-contract/fns/hashes.d.ts +60 -0
  458. package/dist/types/smart-contract/fns/hashes.d.ts.map +1 -0
  459. package/dist/types/smart-contract/fns/index.d.ts +9 -0
  460. package/dist/types/smart-contract/fns/index.d.ts.map +1 -0
  461. package/dist/types/smart-contract/fns/math.d.ts +38 -0
  462. package/dist/types/smart-contract/fns/math.d.ts.map +1 -0
  463. package/dist/types/smart-contract/fns/pubKey2Addr.d.ts +11 -0
  464. package/dist/types/smart-contract/fns/pubKey2Addr.d.ts.map +1 -0
  465. package/dist/types/smart-contract/methods/backtraceToGenensis.d.ts +20 -0
  466. package/dist/types/smart-contract/methods/backtraceToGenensis.d.ts.map +1 -0
  467. package/dist/types/smart-contract/methods/buildOutput.d.ts +25 -0
  468. package/dist/types/smart-contract/methods/buildOutput.d.ts.map +1 -0
  469. package/dist/types/smart-contract/methods/checkCtx.d.ts +18 -0
  470. package/dist/types/smart-contract/methods/checkCtx.d.ts.map +1 -0
  471. package/dist/types/smart-contract/methods/checkInputState.d.ts +9 -0
  472. package/dist/types/smart-contract/methods/checkInputState.d.ts.map +1 -0
  473. package/dist/types/smart-contract/methods/checkInputStateHashes.d.ts +10 -0
  474. package/dist/types/smart-contract/methods/checkInputStateHashes.d.ts.map +1 -0
  475. package/dist/types/smart-contract/methods/checkSHPreimage.d.ts +10 -0
  476. package/dist/types/smart-contract/methods/checkSHPreimage.d.ts.map +1 -0
  477. package/dist/types/smart-contract/methods/checkSig.d.ts +11 -0
  478. package/dist/types/smart-contract/methods/checkSig.d.ts.map +1 -0
  479. package/dist/types/smart-contract/serializer.d.ts +48 -0
  480. package/dist/types/smart-contract/serializer.d.ts.map +1 -0
  481. package/dist/types/smart-contract/smartContract.d.ts +274 -0
  482. package/dist/types/smart-contract/smartContract.d.ts.map +1 -0
  483. package/dist/types/smart-contract/smartContractLib.d.ts +26 -0
  484. package/dist/types/smart-contract/smartContractLib.d.ts.map +1 -0
  485. package/dist/types/smart-contract/stateSerializer.d.ts +8 -0
  486. package/dist/types/smart-contract/stateSerializer.d.ts.map +1 -0
  487. package/dist/types/smart-contract/types/abi.d.ts +55 -0
  488. package/dist/types/smart-contract/types/abi.d.ts.map +1 -0
  489. package/dist/types/smart-contract/types/artifact.d.ts +108 -0
  490. package/dist/types/smart-contract/types/artifact.d.ts.map +1 -0
  491. package/dist/types/smart-contract/types/bn.d.ts +3 -0
  492. package/dist/types/smart-contract/types/bn.d.ts.map +1 -0
  493. package/dist/types/smart-contract/types/context.d.ts +126 -0
  494. package/dist/types/smart-contract/types/context.d.ts.map +1 -0
  495. package/dist/types/smart-contract/types/index.d.ts +4 -0
  496. package/dist/types/smart-contract/types/index.d.ts.map +1 -0
  497. package/dist/types/smart-contract/types/opCode.d.ts +747 -0
  498. package/dist/types/smart-contract/types/opCode.d.ts.map +1 -0
  499. package/dist/types/smart-contract/types/primitives.d.ts +217 -0
  500. package/dist/types/smart-contract/types/primitives.d.ts.map +1 -0
  501. package/dist/types/smart-contract/types/script.d.ts +14 -0
  502. package/dist/types/smart-contract/types/script.d.ts.map +1 -0
  503. package/dist/types/smart-contract/types/structs.d.ts +206 -0
  504. package/dist/types/smart-contract/types/structs.d.ts.map +1 -0
  505. package/dist/types/smart-contract/types/utils.d.ts +5 -0
  506. package/dist/types/smart-contract/types/utils.d.ts.map +1 -0
  507. package/dist/types/utils/bvm.d.ts +9 -0
  508. package/dist/types/utils/bvm.d.ts.map +1 -0
  509. package/dist/types/utils/checkIntegrity.d.ts +46 -0
  510. package/dist/types/utils/checkIntegrity.d.ts.map +1 -0
  511. package/dist/types/utils/common.d.ts +61 -0
  512. package/dist/types/utils/common.d.ts.map +1 -0
  513. package/dist/types/utils/constants.d.ts +3 -0
  514. package/dist/types/utils/constants.d.ts.map +1 -0
  515. package/dist/types/utils/index.d.ts +7 -0
  516. package/dist/types/utils/index.d.ts.map +1 -0
  517. package/dist/types/utils/preimage.d.ts +31 -0
  518. package/dist/types/utils/preimage.d.ts.map +1 -0
  519. package/dist/types/utils/proof.d.ts +31 -0
  520. package/dist/types/utils/proof.d.ts.map +1 -0
  521. package/dist/types/utils/script_number.d.ts +19 -0
  522. package/dist/types/utils/script_number.d.ts.map +1 -0
  523. package/package.json +79 -0
  524. package/scrypt.index.json +85 -0
  525. package/src/smart-contract/builtin-libs/backtrace.ts +116 -0
  526. package/src/smart-contract/builtin-libs/byteStringReader.ts +111 -0
  527. package/src/smart-contract/builtin-libs/byteStringWriter.ts +86 -0
  528. package/src/smart-contract/builtin-libs/contextUtils.ts +270 -0
  529. package/src/smart-contract/builtin-libs/index.ts +7 -0
  530. package/src/smart-contract/builtin-libs/p2pk.ts +58 -0
  531. package/src/smart-contract/builtin-libs/p2pkh.ts +67 -0
  532. package/src/smart-contract/builtin-libs/stateLib.ts +82 -0
  533. package/src/smart-contract/builtin-libs/stateUtils.ts +37 -0
  534. package/src/smart-contract/builtin-libs/stdUtils.ts +156 -0
  535. package/src/smart-contract/builtin-libs/txHashPreimageUtils.ts +34 -0
  536. package/src/smart-contract/builtin-libs/txUtils.ts +152 -0
  537. package/src/smart-contract/types/structs.ts +244 -0
@@ -0,0 +1,564 @@
1
+ import { AbstractContract } from './abstractContract.js';
2
+ import { buildChangeOutputImpl, buildStateOutputImpl } from './methods/buildOutput.js';
3
+ import { checkCtxImpl } from './methods/checkCtx.js';
4
+ import { checkSHPreimageImpl as checkSHPreimageImpl } from './methods/checkSHPreimage.js';
5
+ import { checkSigImpl } from './methods/checkSig.js';
6
+ import { ABICoder } from './abi.js';
7
+ import { uint8ArrayToHex, cloneDeep, isFinal, hexToUint8Array } from '../utils/index.js';
8
+ import { hash256, sha256 } from './fns/hashes.js';
9
+ import { slice } from './fns/byteString.js';
10
+ import { checkInputStateImpl } from './methods/checkInputState.js';
11
+ import { deserializeOutputs } from './serializer.js';
12
+ import { backtraceToOutpointImpl, backtraceToScriptImpl } from './methods/backtraceToGenensis.js';
13
+ import { deserializeState, serializeState } from './stateSerializer.js';
14
+ import { getUnRenamedSymbol } from './abiutils.js';
15
+ import { checkInputStateHashesImpl } from './methods/checkInputStateHashes.js';
16
+ import { toTxHashPreimage } from '../utils/proof.js';
17
+ /**
18
+ * The main contract class. To write a contract, extend this class as such:
19
+ * @onchain
20
+ * @example
21
+ * ```ts
22
+ * class YourSmartContract extends SmartContract {
23
+ * // your smart contract code here
24
+ * }
25
+ * ```
26
+ * @category SmartContract
27
+ */
28
+ export class SmartContract extends AbstractContract {
29
+ /**
30
+ *
31
+ * @ignore
32
+ */
33
+ getStateType() {
34
+ const clazz = this.constructor;
35
+ return clazz.stateType;
36
+ }
37
+ /**
38
+ * This function is usually called on the frontend.
39
+ * The contract class needs to call this function before instantiating.
40
+ * @param artifact a contract artifact json object
41
+ */
42
+ static loadArtifact(artifact) {
43
+ if (getUnRenamedSymbol(artifact.contract) !== getUnRenamedSymbol(this.name)) {
44
+ throw new Error(`Artifact does not match contract ${this.name}!`);
45
+ }
46
+ this.artifact = artifact;
47
+ this.stateType = artifact.stateType;
48
+ return this;
49
+ }
50
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
51
+ constructor(...args) {
52
+ super();
53
+ const ContractClazz = this.constructor;
54
+ if (!ContractClazz.artifact) {
55
+ throw new Error(`Artifact not loaded for contract ${this.constructor.name}!`);
56
+ }
57
+ const artifact = ContractClazz.artifact;
58
+ this._abiCoder = new ABICoder(artifact);
59
+ if (Object.getPrototypeOf(this.constructor.prototype) !== SmartContract.prototype) {
60
+ // contract is not a direct child of SmartContract, should use ContractClazz.create instead
61
+ if (!SmartContract.newFromCreate) {
62
+ throw new Error(`Contract \`${this.constructor.name}\` is not a direct child of \`SmartContract\`, should use \`${this.constructor.name}.create\` instead of use \`new ${this.constructor.name}\``);
63
+ }
64
+ }
65
+ if (!SmartContract.newFromCreate) {
66
+ this.generateLockingScript(...args);
67
+ }
68
+ }
69
+ /**
70
+ * @ignore
71
+ * @param args
72
+ */
73
+ generateLockingScript(...args) {
74
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
75
+ this.lockingScript = this._abiCoder.encodeConstructorCall(args);
76
+ }
77
+ /**
78
+ * Used to create an instance of a smart contract. If your smart contract has a base class, you must use this method to instantiate it.
79
+ * @param this
80
+ * @param args
81
+ * @returns
82
+ */
83
+ static create(...args) {
84
+ SmartContract.newFromCreate = true;
85
+ const instance = new this(...args);
86
+ SmartContract.newFromCreate = false;
87
+ instance.generateLockingScript(...args);
88
+ return instance;
89
+ }
90
+ /**
91
+ * Using the [OP_PUSH_TX]{@link https://medium.com/@xiaohuiliu/op-push-tx-3d3d279174c1} technique, check if `shPreimage` is the preimage of the current transaction.
92
+ * @onchain
93
+ * @param txPreimage The format of the preimage is [specified]{@link https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#signature-validation-rules}
94
+ * @returns true if `shPreimage` is the preimage of the current transaction. Otherwise false.
95
+ */
96
+ checkSHPreimage(shPreimage) {
97
+ return checkSHPreimageImpl(this, shPreimage);
98
+ }
99
+ /**
100
+ * A built-in function verifies an Schnorr signature. It takes two inputs from the stack, a public key (on top of the stack) and an Schnorr signature in its DER_CANONISED format concatenated with sighash flags.
101
+ * It outputs true or false on the stack based on whether the signature check passes or fails. [see]{@link https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#specification}
102
+ * @onchain
103
+ * @category Signature Verification
104
+ */
105
+ checkSig(signature, publickey, errorMsg = 'signature check failed') {
106
+ const fSuccess = checkSigImpl(this, signature, publickey);
107
+ if (!fSuccess && signature.length) {
108
+ // because NULLFAIL rule, always throw if catch a wrong signature
109
+ // https://github.com/bitcoin/bips/blob/master/bip-0146.mediawiki#nullfail
110
+ throw new Error(errorMsg);
111
+ }
112
+ return fSuccess;
113
+ }
114
+ /**
115
+ * A built-in function to create an [change output]{@link https://en.bitcoin.it/wiki/Change}.
116
+ * @onchain
117
+ * @returns
118
+ */
119
+ buildChangeOutput() {
120
+ this._checkPsbtBinding();
121
+ return buildChangeOutputImpl(this._curPsbt);
122
+ }
123
+ /**
124
+ * @ignore
125
+ */
126
+ get accessedInputStateProofs() {
127
+ return (this._abiCoder.artifact.abi.filter((func) => func.params.filter((p) => p.name === '__scrypt_ts_inputStateProofs').length > 0).length > 0);
128
+ }
129
+ /**
130
+ * A built-in function to create all outputs added by `appendStateOutput()`
131
+ * @onchain
132
+ * @returns an output containing the new state
133
+ */
134
+ buildStateOutput(satoshis) {
135
+ this._checkPsbtBinding();
136
+ return buildStateOutputImpl(this, this.state, satoshis, this.ctx.spentScriptHash);
137
+ }
138
+ /**
139
+ * Calculate the hash of all states of the current contract
140
+ * @onchain
141
+ * @param state state of the contract
142
+ * @returns hash160 of the state
143
+ */
144
+ static serializeState(state) {
145
+ const selfClazz = this;
146
+ const artifact = selfClazz.artifact;
147
+ if (!artifact) {
148
+ throw new Error(`Artifact is not loaded for the contract: ${this.name}`);
149
+ }
150
+ const stateType = selfClazz.stateType;
151
+ if (!stateType) {
152
+ throw new Error(`State struct \`${stateType}\` is not defined!`);
153
+ }
154
+ return serializeState(artifact, stateType, state);
155
+ }
156
+ static deserializeState(serializedState) {
157
+ const selfClazz = this;
158
+ const artifact = selfClazz.artifact;
159
+ if (!artifact) {
160
+ throw new Error(`Artifact is not loaded for the contract: ${this.name}`);
161
+ }
162
+ const stateType = selfClazz.stateType;
163
+ if (!stateType) {
164
+ throw new Error(`State struct \`${stateType}\` is not defined!`);
165
+ }
166
+ return deserializeState(artifact, stateType, serializedState);
167
+ }
168
+ static stateHash(state) {
169
+ return sha256(this.serializeState(state));
170
+ }
171
+ /**
172
+ * check StateHash of the input. By default, the system checks the StateHash of all inputs.
173
+ * If you use this function to specify checking only specific inputs' StateHash, you must set the `autoCheckInputState`
174
+ * option in the `@method()` decorator to false.
175
+ * @onchain
176
+ * @param inputIndex index of the input
177
+ * @param stateData the state data of the input
178
+ * @returns success if stateData is valid
179
+ */
180
+ checkInputState(inputIndex, stateData) {
181
+ const stateHash = slice(this.inputContext.spentDataHashes, inputIndex * 32n, (inputIndex + 1n) * 32n);
182
+ checkInputStateImpl(stateHash, stateData);
183
+ return true;
184
+ }
185
+ /**
186
+ * Get the context details of the current PSBT input in which this contract is called or spent.
187
+ * @onchain
188
+ */
189
+ get ctx() {
190
+ const { shPreimage, inputCount, prevouts, prevout, spentScriptHashes, spentAmounts, spentDataHashes, } = this.inputContext;
191
+ return {
192
+ ...shPreimage,
193
+ inputCount,
194
+ prevouts,
195
+ prevout,
196
+ spentScriptHashes,
197
+ spentAmounts,
198
+ spentDataHashes,
199
+ };
200
+ }
201
+ /**
202
+ * Mark the contract instance as spent from the input of the PSBT.
203
+ * @param psbt
204
+ * @param inputIndex
205
+ */
206
+ spentFromInput(psbt, inputIndex) {
207
+ this._curPsbt = psbt;
208
+ this._curInputIndex = inputIndex;
209
+ }
210
+ get spentPsbt() {
211
+ return this._curPsbt;
212
+ }
213
+ setSighashType(sigHashType) {
214
+ this._checkPsbtBinding();
215
+ this._curPsbt.setSighashType(this._curInputIndex, sigHashType);
216
+ }
217
+ /**
218
+ * Get the context of the current PSBT input in which this contract is called or spent.
219
+ * @returns the context of the current PSBT input
220
+ */
221
+ get inputContext() {
222
+ this._checkPsbtBinding();
223
+ return this._curPsbt.getInputCtx(this._curInputIndex);
224
+ }
225
+ /**
226
+ *
227
+ * @ignore
228
+ */
229
+ extendMethodArgs(method, args, autoCheckInputState) {
230
+ // extend the args with the context
231
+ if (this._shouldInjectCtx(method)) {
232
+ this._autoInject(method, args, autoCheckInputState);
233
+ }
234
+ const unlockingScript = this._abiCoder.encodePubFunctionCall(method, args);
235
+ this._methodCall = {
236
+ method,
237
+ args,
238
+ unlockingScript,
239
+ };
240
+ }
241
+ /**
242
+ *
243
+ * @ignore
244
+ */
245
+ isPubFunction(method) {
246
+ return this._abiCoder.isPubFunction(method);
247
+ }
248
+ isSmartContract() {
249
+ return true;
250
+ }
251
+ _shouldInjectCtx(method) {
252
+ return this._abiCoder.artifact.abi.some((abiEntity) => {
253
+ return (abiEntity.name === method &&
254
+ abiEntity.params.some((param) => param.name === '__scrypt_ts_shPreimage'));
255
+ });
256
+ }
257
+ _autoInject(method, args, autoCheckInputState) {
258
+ const { shPreimage, prevouts, prevout, spentScriptHashes, spentAmounts, spentDataHashes, inputCount, } = this.inputContext;
259
+ checkCtxImpl(this, shPreimage, this._curInputIndex, prevouts, prevout, spentScriptHashes, spentAmounts, spentDataHashes);
260
+ const curState = this.state;
261
+ const abiEntity = this._abiCoder.artifact.abi.find((abiEntity) => {
262
+ return abiEntity.name === method;
263
+ });
264
+ if (abiEntity) {
265
+ abiEntity.params.forEach((param) => {
266
+ if (param.name === '__scrypt_ts_shPreimage') {
267
+ const { shPreimage } = this.inputContext;
268
+ args.push(shPreimage);
269
+ }
270
+ else if (param.name === '__scrypt_ts_changeInfo') {
271
+ args.push(this.changeInfo);
272
+ }
273
+ else if (param.name === '__scrypt_ts_prevouts') {
274
+ args.push(prevouts);
275
+ }
276
+ else if (param.name === '__scrypt_ts_prevout') {
277
+ args.push(prevout);
278
+ }
279
+ else if (param.name === '__scrypt_ts_spentScriptHashes') {
280
+ const { spentScriptHashes } = this.inputContext;
281
+ args.push(spentScriptHashes);
282
+ }
283
+ else if (param.name === '__scrypt_ts_spentAmounts') {
284
+ args.push(spentAmounts);
285
+ }
286
+ else if (param.name === '__scrypt_ts_inputCount') {
287
+ args.push(inputCount);
288
+ }
289
+ else if (param.name === '__scrypt_ts_spentDataHashes') {
290
+ checkInputStateHashesImpl(shPreimage.hashSpentDataHashes, spentDataHashes);
291
+ args.push(spentDataHashes);
292
+ }
293
+ else if (param.name === '__scrypt_ts_curState') {
294
+ this._checkState();
295
+ if (autoCheckInputState) {
296
+ checkInputStateImpl(shPreimage.spentDataHash, this.constructor.serializeState(curState));
297
+ }
298
+ args.push(curState);
299
+ }
300
+ else if (param.name === '__scrypt_ts_prevTxHashPreimage') {
301
+ if (!this.utxo.txHashPreimage) {
302
+ throw new Error('utxo.txHashPreimage is required for backtrace');
303
+ }
304
+ args.push(toTxHashPreimage(hexToUint8Array(this.utxo.txHashPreimage)));
305
+ }
306
+ });
307
+ }
308
+ }
309
+ _checkPsbtBinding() {
310
+ if (this._curPsbt === undefined || this._curInputIndex === undefined) {
311
+ throw new Error('Not binding to any PSBT input!');
312
+ }
313
+ }
314
+ _checkState() {
315
+ if (this.state === undefined) {
316
+ throw new Error('State is not initialized!');
317
+ }
318
+ }
319
+ /**
320
+ * Get the change info of the change output for current psbt.
321
+ * @onchain
322
+ * @returns the change info of current psbt
323
+ */
324
+ get changeInfo() {
325
+ this._checkPsbtBinding();
326
+ return this._curPsbt.getChangeInfo();
327
+ }
328
+ /**
329
+ * A set of functions for debugging contracts, which can only be called in `@method` methods.
330
+ * @onchain
331
+ */
332
+ get debug() {
333
+ return {
334
+ diffOutputs: (outputsByte) => {
335
+ const outputs = deserializeOutputs(outputsByte);
336
+ if (outputs.length !== this._curPsbt?.txOutputs.length) {
337
+ console.warn(`Outputs count is different: ${outputs.length}(#contract) vs ${this._curPsbt?.txOutputs.length}(#context)`);
338
+ return;
339
+ }
340
+ this._curPsbt?.txOutputs.forEach((output, index) => {
341
+ const scriptHash = sha256(uint8ArrayToHex(output.script));
342
+ const dataHash = sha256(uint8ArrayToHex(output.data));
343
+ if (outputs[index].dataHash !== dataHash) {
344
+ console.warn(`Output[${index}] dataHash is different: ${outputs[index]?.dataHash}(#contract) vs ${dataHash}(#context)`);
345
+ }
346
+ if (outputs[index].scriptHash !== scriptHash) {
347
+ console.warn(`Output[${index}] scriptHash is different: ${outputs[index]?.scriptHash}(#contract) vs ${scriptHash}(#context)`);
348
+ }
349
+ if (outputs[index]?.value !== output.value) {
350
+ console.warn(`Output[${index}] value is different: ${outputs[index]?.value}(#contract) vs ${output.value}(#context)`);
351
+ }
352
+ });
353
+ },
354
+ };
355
+ }
356
+ /**
357
+ * Check the outputs with the context of current transaction.
358
+ * @param outputs the expected serialized outputs of the current transaction
359
+ * @returns true if the outputs are not consistent with the transaction context, otherwise false.
360
+ * @onchain
361
+ */
362
+ checkOutputs(outputs) {
363
+ if (this.ctx.hashOutputs !== hash256(outputs)) {
364
+ this.debug.diffOutputs(outputs);
365
+ return false;
366
+ }
367
+ return true;
368
+ }
369
+ /**
370
+ * Returns the raw arguments from the call data of the smart contract.
371
+ * @returns The raw arguments extracted from the call data.
372
+ */
373
+ getUnlockingScript() {
374
+ return this.getCallData().unlockingScript;
375
+ }
376
+ /**
377
+ * Gets the method call data for the current smart contract.
378
+ * @throws {Error} If no method call is found.
379
+ * @returns {MethodCallData} The method call data object.
380
+ */
381
+ getCallData() {
382
+ if (!this._methodCall) {
383
+ throw new Error('No method call found!');
384
+ }
385
+ return this._methodCall;
386
+ }
387
+ /**
388
+ * Transform unlocking script from the testimony into arguments previously used to invoke the contract.
389
+ * @ignore
390
+ * @param _args
391
+ * @param _method
392
+ */
393
+ unlockingScriptToCallData(_args, _method) {
394
+ throw new Error('Method not implemented.');
395
+ }
396
+ /**
397
+ * Checks a locktime parameter with the transaction's locktime.
398
+ * There are two times of nLockTime: lock-by-blockheight and lock-by-blocktime,
399
+ * distinguished by whether nLockTime < LOCKTIME_THRESHOLD = 500000000
400
+ *
401
+ * See the corresponding code on bitcoin core:
402
+ * https://github.com/bitcoin/bitcoin/blob/ffd75adce01a78b3461b3ff05bcc2b530a9ce994/src/script/interpreter.cpp#L1129
403
+ *
404
+ * See the bip65 for specification
405
+ * https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki#summary
406
+ * @onchain
407
+ * @param {BN} nLockTime the locktime read from the script
408
+ * @return {boolean} true if the transaction's locktime is less than or equal to
409
+ * the transaction's locktime
410
+ */
411
+ absTimeLock(nLockTime) {
412
+ // We want to compare apples to apples, so fail the script
413
+ // unless the type of nLockTime being tested is the same as
414
+ // the nLockTime in the transaction.
415
+ const locktime = this._curPsbt.getlockTime();
416
+ const LOCKTIME_THRESHOLD = 500000000;
417
+ const LOCKTIME_THRESHOLD_BN = BigInt(LOCKTIME_THRESHOLD);
418
+ if (!((locktime < LOCKTIME_THRESHOLD && nLockTime < LOCKTIME_THRESHOLD_BN) ||
419
+ (locktime >= LOCKTIME_THRESHOLD && nLockTime >= LOCKTIME_THRESHOLD_BN))) {
420
+ return false;
421
+ }
422
+ // Now that we know we're comparing apples-to-apples, the
423
+ // comparison is a simple numeric one.
424
+ if (nLockTime > BigInt(locktime)) {
425
+ return false;
426
+ }
427
+ // Finally the nLockTime feature can be disabled and thus
428
+ // CHECKLOCKTIMEVERIFY bypassed if every txin has been
429
+ // finalized by setting nSequence to maxint. The
430
+ // transaction would be allowed into the blockchain, making
431
+ // the opcode ineffective.
432
+ //
433
+ // Testing if this vin is not final is sufficient to
434
+ // prevent this condition. Alternatively we could test all
435
+ // inputs, but testing just this input minimizes the data
436
+ // required to prove correct CHECKLOCKTIMEVERIFY execution.
437
+ const sequence = this._curPsbt.getSequence(this._curInputIndex);
438
+ if (!isFinal(sequence)) {
439
+ return false;
440
+ }
441
+ return true;
442
+ }
443
+ /**
444
+ * Checks a sequence parameter with the transaction's sequence.
445
+ * @onchain
446
+ * @param {BN} nSequence the sequence read from the script
447
+ * @return {boolean} true if the transaction's sequence is less than or equal to
448
+ * the transaction's sequence
449
+ */
450
+ relTimeLock(nSequence) {
451
+ // Relative lock times are supported by comparing the passed in operand to
452
+ // the sequence number of the input.
453
+ const txToSequence = this._curPsbt.getSequence(this._curInputIndex);
454
+ // Fail if the transaction's version number is not set high enough to
455
+ // trigger BIP 68 rules.
456
+ // if (this.tx.version < 2) {
457
+ // return false;
458
+ // }
459
+ // Sequence numbers with their most significant bit set are not consensus
460
+ // constrained. Testing that the transaction's sequence number do not have
461
+ // this bit set prevents using this property to get around a
462
+ // CHECKSEQUENCEVERIFY check.
463
+ // if (txToSequence & Interpreter.SEQUENCE_LOCKTIME_DISABLE_FLAG) {
464
+ // return false;
465
+ // }
466
+ /**
467
+ * If CTxIn::nSequence encodes a relative lock-time and this flag is set,
468
+ * the relative lock-time has units of 512 seconds, otherwise it specifies
469
+ * blocks with a granularity of 1.
470
+ */
471
+ const SEQUENCE_LOCKTIME_TYPE_FLAG = 1 << 22;
472
+ /**
473
+ * If CTxIn::nSequence encodes a relative lock-time, this mask is applied to
474
+ * extract that lock-time from the sequence field.
475
+ */
476
+ const SEQUENCE_LOCKTIME_MASK = 0x0000ffff;
477
+ // Mask off any bits that do not have consensus-enforced meaning before
478
+ // doing the integer comparisons
479
+ const nLockTimeMask = SEQUENCE_LOCKTIME_TYPE_FLAG | SEQUENCE_LOCKTIME_MASK;
480
+ const txToSequenceMasked = BigInt(txToSequence & nLockTimeMask);
481
+ const nSequenceMasked = nSequence & BigInt(nLockTimeMask);
482
+ // There are two kinds of nSequence: lock-by-blockheight and
483
+ // lock-by-blocktime, distinguished by whether nSequenceMasked <
484
+ // CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG.
485
+ //
486
+ // We want to compare apples to apples, so fail the script unless the type
487
+ // of nSequenceMasked being tested is the same as the nSequenceMasked in the
488
+ // transaction.
489
+ const SEQUENCE_LOCKTIME_TYPE_FLAG_BN = BigInt(SEQUENCE_LOCKTIME_TYPE_FLAG);
490
+ if (!((txToSequenceMasked < SEQUENCE_LOCKTIME_TYPE_FLAG_BN &&
491
+ nSequenceMasked < SEQUENCE_LOCKTIME_TYPE_FLAG_BN) ||
492
+ (txToSequenceMasked >= SEQUENCE_LOCKTIME_TYPE_FLAG_BN &&
493
+ nSequenceMasked >= SEQUENCE_LOCKTIME_TYPE_FLAG_BN))) {
494
+ return false;
495
+ }
496
+ // Now that we know we're comparing apples-to-apples, the comparison is a
497
+ // simple numeric one.
498
+ return nSequenceMasked <= txToSequenceMasked;
499
+ }
500
+ /**
501
+ * Check whether the contract can be traced back to the genesis outpoint.
502
+ * @param backtraceInfo the backtrace info to verify, including prevTx and prevPrevTx informations
503
+ * @param genesisOutpoint expected genesis outpoint to be traced back to
504
+ * @returns true if the contract can be backtraced to the genesis outpoint. Otherwise false.
505
+ * @onchain
506
+ * @category Backtrace
507
+ */
508
+ backtraceToOutpoint(backtraceInfo, genesisOutpoint) {
509
+ return backtraceToOutpointImpl(this, backtraceInfo, genesisOutpoint);
510
+ }
511
+ /**
512
+ * Check whether the contract can be traced back to the genesis script.
513
+ * @param backtraceInfo the backtrace info to verify, including prevTx and prevPrevTx informations
514
+ * @param genesisScript expected genesis script to be traced back to
515
+ * @returns true if the contract can be backtraced to the genesis script. Otherwise false.
516
+ * @onchain
517
+ * @category Backtrace
518
+ */
519
+ backtraceToScript(backtraceInfo, genesisScript) {
520
+ return backtraceToScriptImpl(this, backtraceInfo, genesisScript);
521
+ }
522
+ /**
523
+ * Get a new contract instance with the new state.
524
+ * @param newState the new state
525
+ * @returns the new covenant
526
+ */
527
+ next(newState) {
528
+ const next = cloneDeep(this);
529
+ next.state = newState;
530
+ next.utxo = undefined;
531
+ return next;
532
+ }
533
+ /**
534
+ * Binds the smart contract to a UTXO by verifying and setting its script.
535
+ * @param utxo - The UTXO to bind to (script field is optional)
536
+ * @returns The contract instance for chaining
537
+ * @throws Error if the UTXO's script exists and doesn't match the contract's locking script
538
+ */
539
+ bindToUtxo(utxo) {
540
+ if (utxo.script && this.lockingScript.toHex() !== utxo.script) {
541
+ throw new Error(`Different script, can not bind contract '${this.constructor.name}' to this UTXO: ${JSON.stringify(utxo)}!`);
542
+ }
543
+ this.utxo = { ...utxo, script: this.lockingScript.toHex() };
544
+ if (this.constructor.isStateful()) {
545
+ this.state = this.constructor.deserializeState(utxo.data);
546
+ }
547
+ return this;
548
+ }
549
+ /**
550
+ * Checks if the contract has state by verifying if the state object exists and is not empty.
551
+ * @returns {boolean} True if the contract has state, false otherwise.
552
+ */
553
+ static isStateful() {
554
+ const selfClazz = this;
555
+ const artifact = selfClazz.artifact;
556
+ if (!artifact) {
557
+ throw new Error(`Artifact is not loaded for the contract: ${this.name}`);
558
+ }
559
+ const stateType = selfClazz.stateType;
560
+ return !!stateType;
561
+ }
562
+ }
563
+ SmartContract.newFromCreate = false;
564
+ //# sourceMappingURL=smartContract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smartContract.js","sourceRoot":"","sources":["../../../src/smart-contract/smartContract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,mBAAmB,IAAI,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,QAAQ,EAAa,MAAM,UAAU,CAAC;AAG/C,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AASzF,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAClG,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAcrD;;;;;;;;;;GAUG;AACH,MAAM,OAAO,aACX,SAAQ,gBAAgB;IAcxB;;;OAGG;IACH,YAAY;QACV,MAAM,KAAK,GAAG,IAAI,CAAC,WAAmC,CAAC;QACvD,OAAO,KAAK,CAAC,SAAS,CAAC;IACzB,CAAC;IAeD;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAC,QAAkB;QACpC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6DAA6D;IAC7D,YAAY,GAAG,IAA0B;QACvC,KAAK,EAAE,CAAC;QACR,MAAM,aAAa,GAAG,IAAI,CAAC,WAAmC,CAAC;QAC/D,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,CAAC;QAChF,CAAC;QAED,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAExC,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,aAAa,CAAC,SAAS,EAAE,CAAC;YAClF,2FAA2F;YAC3F,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CACb,cAAc,IAAI,CAAC,WAAW,CAAC,IAAI,+DAA+D,IAAI,CAAC,WAAW,CAAC,IAAI,kCAAkC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CACnL,CAAC;YACJ,CAAC;QACH,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;YACjC,IAAI,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAEC;;;KAGC;IACK,qBAAqB,CAAC,GAAG,IAA0B;QACzD,8DAA8D;QAC7D,IAAY,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC3E,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,MAAM,CAEX,GAAG,IAA8B;QAEjC,aAAa,CAAC,aAAa,GAAG,IAAI,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACnC,aAAa,CAAC,aAAa,GAAG,KAAK,CAAC;QACnC,QAA0B,CAAC,qBAAqB,CAAC,GAAI,IAA6B,CAAC,CAAC;QACrF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACH,eAAe,CAAC,UAAsB;QACpC,OAAO,mBAAmB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CACN,SAAc,EACd,SAAiB,EACjB,WAAmB,wBAAwB;QAE3C,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;YAClC,iEAAiE;YACjE,0EAA0E;YAC1E,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACH,iBAAiB;QACf,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,OAAO,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,IAAI,wBAAwB;QAC1B,OAAO,CACL,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAChC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,8BAA8B,CAAC,CAAC,MAAM,GAAG,CAAC,CAC1F,CAAC,MAAM,GAAG,CAAC,CACb,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,gBAAgB,CAAC,QAAe;QAC9B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,OAAO,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACpF,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAU,cAAc,CAE5B,KAAQ;QAER,MAAM,SAAS,GAAI,IAAoC,CAAC;QAExD,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,4CAA4C,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;QACtC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,kBAAkB,SAAS,oBAAoB,CAAC,CAAC;QACnE,CAAC;QAED,OAAO,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,CAAC,gBAAgB,CAErB,eAA2B;QAE3B,MAAM,SAAS,GAAI,IAAoC,CAAC;QAExD,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,4CAA4C,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;QACtC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,kBAAkB,SAAS,oBAAoB,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,gBAAgB,CAAI,QAAQ,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,CAAU,SAAS,CAEvB,KAAQ;QAER,OAAO,MAAM,CAAE,IAAY,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC;IAED;;;;;;;;OAQG;IACM,eAAe,CAAC,UAAiB,EAAE,SAAqB;QAC/D,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,UAAU,GAAG,GAAG,EAAE,CAAC,UAAU,GAAI,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;QACvG,mBAAmB,CACjB,SAAS,EACT,SAAS,CACV,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAYD;;;OAGG;IACH,IAAI,GAAG;QACL,MAAM,EACJ,UAAU,EACV,UAAU,EACV,QAAQ,EACR,OAAO,EACP,iBAAiB,EACjB,YAAY,EACZ,eAAe,GAChB,GAAG,IAAI,CAAC,YAAY,CAAC;QACtB,OAAO;YACL,GAAG,UAAU;YACb,UAAU;YACV,QAAQ;YACR,OAAO;YACP,iBAAiB;YACjB,YAAY;YACZ,eAAe;SAChB,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,IAAgB,EAAE,UAAkB;QACjD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;IACnC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,cAAc,CAAC,WAAwB;QACrC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IACjE,CAAC;IAED;;;OAGG;IACH,IAAI,YAAY;QACd,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACxD,CAAC;IAMD;;;OAGG;IACH,gBAAgB,CAAC,MAAc,EAAE,IAA0B,EAAE,mBAA4B;QACvF,mCAAmC;QACnC,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAE3E,IAAI,CAAC,WAAW,GAAG;YACjB,MAAM;YACN,IAAI;YACJ,eAAe;SAChB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,aAAa,CAAC,MAAc;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,gBAAgB,CAAC,MAAc;QACrC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;YACpD,OAAO,CACL,SAAS,CAAC,IAAI,KAAK,MAAM;gBACzB,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,wBAAwB,CAAC,CAC1E,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,WAAW,CACjB,MAAc,EACd,IAA0B,EAC1B,mBAA4B;QAE5B,MAAM,EACJ,UAAU,EACV,QAAQ,EACR,OAAO,EACP,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,UAAU,GACX,GAAG,IAAI,CAAC,YAAY,CAAC;QAEtB,YAAY,CACV,IAAI,EACJ,UAAU,EACV,IAAI,CAAC,cAAc,EACnB,QAAQ,EACR,OAAO,EACP,iBAAiB,EACjB,YAAY,EACZ,eAAe,CAChB,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;QAE5B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;YAC/D,OAAO,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACjC,IAAI,KAAK,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;oBAC5C,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;oBACzC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACxB,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;oBACnD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC7B,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;oBACjD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtB,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;oBAChD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACrB,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,+BAA+B,EAAE,CAAC;oBAC1D,MAAM,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;oBAChD,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAC/B,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,0BAA0B,EAAE,CAAC;oBACrD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC1B,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;oBACnD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACxB,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,6BAA6B,EAAE,CAAC;oBACxD,yBAAyB,CAAC,UAAU,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAA;oBAC1E,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC7B,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;oBACjD,IAAI,CAAC,WAAW,EAAE,CAAC;oBACnB,IAAI,mBAAmB,EAAE,CAAC;wBACxB,mBAAmB,CACjB,UAAU,CAAC,aAAa,EACvB,IAAI,CAAC,WAA4C,CAAC,cAAc,CAAC,QAAQ,CAAC,CAC5E,CAAC;oBACJ,CAAC;oBACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtB,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,gCAAgC,EAAE,CAAC;oBAC3D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;wBAC9B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;oBACnE,CAAC;oBACD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,IAAK,CAAC,cAAe,CAAC,CAAC,CAAC,CAAC;gBAC3E,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,iBAAiB;QACvB,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACrE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAEO,WAAW;QACjB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,IAAI,UAAU;QACZ,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,IAAI,KAAK;QACP,OAAO;YACL,WAAW,EAAE,CAAC,WAAuB,EAAE,EAAE;gBACvC,MAAM,OAAO,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;gBAEhD,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;oBACvD,OAAO,CAAC,IAAI,CACV,+BAA+B,OAAO,CAAC,MAAM,kBAAkB,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,YAAY,CAC3G,CAAC;oBACF,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;oBACjD,MAAM,UAAU,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;oBACtD,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;wBACzC,OAAO,CAAC,IAAI,CACV,UAAU,KAAK,4BAA4B,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,kBAAkB,QAAQ,YAAY,CAC1G,CAAC;oBACJ,CAAC;oBACD,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;wBAC7C,OAAO,CAAC,IAAI,CACV,UAAU,KAAK,8BAA8B,OAAO,CAAC,KAAK,CAAC,EAAE,UAAU,kBAAkB,UAAU,YAAY,CAChH,CAAC;oBACJ,CAAC;oBACD,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;wBAC3C,OAAO,CAAC,IAAI,CACV,UAAU,KAAK,yBAAyB,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,kBAAkB,MAAM,CAAC,KAAK,YAAY,CACxG,CAAC;oBACJ,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACM,YAAY,CAAC,OAAmB;QACvC,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAChC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAGD;;;OAGG;IACH,kBAAkB;QAChB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,eAAe,CAAC;IAC5C,CAAC;IAGD;;;;OAIG;IACH,WAAW;QACT,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACH,yBAAyB,CAAC,KAAa,EAAE,OAAe;QACtD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,WAAW,CAAC,SAAgB;QAC1B,0DAA0D;QAC1D,2DAA2D;QAC3D,oCAAoC;QAEpC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAS,CAAC,WAAW,EAAE,CAAC;QAC9C,MAAM,kBAAkB,GAAG,SAAS,CAAC;QACrC,MAAM,qBAAqB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACzD,IACE,CAAC,CACC,CAAC,QAAQ,GAAG,kBAAkB,IAAI,SAAS,GAAG,qBAAqB,CAAC;YACpE,CAAC,QAAQ,IAAI,kBAAkB,IAAI,SAAS,IAAI,qBAAqB,CAAC,CACvE,EACD,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,yDAAyD;QACzD,sCAAsC;QACtC,IAAI,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,yDAAyD;QACzD,sDAAsD;QACtD,gDAAgD;QAChD,2DAA2D;QAC3D,0BAA0B;QAC1B,EAAE;QACF,oDAAoD;QACpD,0DAA0D;QAC1D,yDAAyD;QACzD,2DAA2D;QAE3D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAS,CAAC,WAAW,CAAC,IAAI,CAAC,cAAe,CAAC,CAAC;QAClE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;OAMG;IACH,WAAW,CAAC,SAAgB;QAC1B,0EAA0E;QAC1E,oCAAoC;QACpC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAS,CAAC,WAAW,CAAC,IAAI,CAAC,cAAe,CAAC,CAAC;QAEtE,qEAAqE;QACrE,wBAAwB;QACxB,6BAA6B;QAC7B,kBAAkB;QAClB,IAAI;QAEJ,yEAAyE;QACzE,0EAA0E;QAC1E,4DAA4D;QAC5D,6BAA6B;QAC7B,mEAAmE;QACnE,kBAAkB;QAClB,IAAI;QAEJ;;;;WAIG;QACH,MAAM,2BAA2B,GAAG,CAAC,IAAI,EAAE,CAAC;QAE5C;;;WAGG;QACH,MAAM,sBAAsB,GAAG,UAAU,CAAC;QAE1C,uEAAuE;QACvE,gCAAgC;QAChC,MAAM,aAAa,GAAG,2BAA2B,GAAG,sBAAsB,CAAC;QAC3E,MAAM,kBAAkB,GAAG,MAAM,CAAC,YAAY,GAAG,aAAa,CAAC,CAAC;QAChE,MAAM,eAAe,GAAG,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;QAE1D,4DAA4D;QAC5D,gEAAgE;QAChE,sCAAsC;QACtC,EAAE;QACF,0EAA0E;QAC1E,4EAA4E;QAC5E,eAAe;QACf,MAAM,8BAA8B,GAAG,MAAM,CAAC,2BAA2B,CAAC,CAAC;QAE3E,IACE,CAAC,CACC,CAAC,kBAAkB,GAAG,8BAA8B;YAClD,eAAe,GAAG,8BAA8B,CAAC;YACnD,CAAC,kBAAkB,IAAI,8BAA8B;gBACnD,eAAe,IAAI,8BAA8B,CAAC,CACrD,EACD,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,yEAAyE;QACzE,sBAAsB;QACtB,OAAO,eAAe,IAAI,kBAAkB,CAAC;IAC/C,CAAC;IAED;;;;;;;OAOG;IACM,mBAAmB,CAAC,aAA4B,EAAE,eAA2B;QACpF,OAAO,uBAAuB,CAAC,IAAI,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;IACvE,CAAC;IAED;;;;;;;OAOG;IACM,iBAAiB,CAAC,aAA4B,EAAE,aAAyB;QAChF,OAAO,qBAAqB,CAAC,IAAI,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IACnE,CAAC;IAGD;;;;OAIG;IACH,IAAI,CAAC,QAAgB;QACnB,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAGD;;;;;OAKG;IACH,UAAU,CAAC,IAA4D;QACrE,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CACb,4CAA4C,IAAI,CAAC,WAAW,CAAC,IAAI,mBAAmB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAC5G,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC;QAC5D,IAAK,IAAI,CAAC,WAA4C,CAAC,UAAU,EAAE,EAAE,CAAC;YACpE,IAAI,CAAC,KAAK,GAAI,IAAI,CAAC,WAA4C,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9F,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,UAAU;QAEf,MAAM,SAAS,GAAI,IAAoC,CAAC;QAExD,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,4CAA4C,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;QACtC,OAAO,CAAC,CAAC,SAAS,CAAA;IACpB,CAAC;;AArsBc,2BAAa,GAAY,KAAK,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { getUnRenamedSymbol } from './abiutils.js';
2
+ /**
3
+ * The contract library class. To write a contract library, extend this class as such:
4
+ * @example
5
+ * ```ts
6
+ * class YourSmartContractLib extends SmartContractLib {
7
+ * // your library functions code here
8
+ * }
9
+ * ```
10
+ * @category SmartContract
11
+ */
12
+ export class SmartContractLib {
13
+ static loadArtifact(artifact) {
14
+ const library = artifact.library.find((lib) => getUnRenamedSymbol(lib.name) === getUnRenamedSymbol(this.name));
15
+ if (!library) {
16
+ throw new Error(`Library ${this.name} is not found in the artifact`);
17
+ }
18
+ this.artifact = artifact;
19
+ this.stateType = library.stateType;
20
+ return this;
21
+ }
22
+ constructor(...args) {
23
+ this.args = [];
24
+ this.args = args;
25
+ }
26
+ /**
27
+ *
28
+ * @ignore
29
+ */
30
+ getArgs() {
31
+ return (this.args || []).map((arg) => {
32
+ if (arg instanceof SmartContractLib) {
33
+ return arg.getArgs();
34
+ }
35
+ return arg;
36
+ });
37
+ }
38
+ isSmartContractLib() {
39
+ return true;
40
+ }
41
+ }
42
+ //# sourceMappingURL=smartContractLib.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smartContractLib.js","sourceRoot":"","sources":["../../../src/smart-contract/smartContractLib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAInD;;;;;;;;;GASG;AACH,MAAM,OAAO,gBAAgB;IAI3B,MAAM,CAAC,YAAY,CAAC,QAAkB;QACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CACnC,CAAC,GAAG,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CACxE,CAAC;QACF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,IAAI,+BAA+B,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,YAAY,GAAG,IAA0B;QADzC,SAAI,GAAG,EAAE,CAAC;QAER,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IACD;;;OAGG;IACH,OAAO;QACL,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACnC,IAAI,GAAG,YAAY,gBAAgB,EAAE,CAAC;gBACpC,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC;YACvB,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}