@opcat-labs/opcat 1.0.1 → 1.0.2

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 (293) hide show
  1. package/.cjs2esm.json +18 -0
  2. package/.mocharc.yaml +1 -1
  3. package/CHANGELOG.md +6 -0
  4. package/README.md +6 -0
  5. package/{lib/address.js → cjs/address.cjs} +77 -72
  6. package/cjs/block/block.cjs +332 -0
  7. package/{lib/block/blockheader.js → cjs/block/blockheader.cjs} +8 -7
  8. package/cjs/block/index.cjs +2 -0
  9. package/{lib/block/merkleblock.js → cjs/block/merkleblock.cjs} +23 -15
  10. package/cjs/bn.cjs +3411 -0
  11. package/{lib/crypto/bn.js → cjs/crypto/bn.cjs} +3 -3
  12. package/{lib/crypto/ecdsa.js → cjs/crypto/ecdsa.cjs} +150 -14
  13. package/{lib/crypto/hash.node.js → cjs/crypto/hash.cjs} +13 -2
  14. package/cjs/crypto/index.cjs +16 -0
  15. package/{lib/crypto/point.js → cjs/crypto/point.cjs} +11 -4
  16. package/cjs/crypto/random.cjs +18 -0
  17. package/{lib/crypto/signature.js → cjs/crypto/signature.cjs} +158 -8
  18. package/{lib/encoding/base58.js → cjs/encoding/base58.cjs} +58 -2
  19. package/cjs/encoding/base58check.cjs +192 -0
  20. package/cjs/encoding/bufferreader.cjs +333 -0
  21. package/cjs/encoding/bufferwriter.cjs +244 -0
  22. package/{lib/encoding/decode-asm.js → cjs/encoding/decode-asm.cjs} +4 -4
  23. package/{lib/encoding/decode-hex.js → cjs/encoding/decode-hex.cjs} +1 -1
  24. package/cjs/encoding/index.cjs +14 -0
  25. package/cjs/encoding/varint.cjs +116 -0
  26. package/{lib/errors/index.js → cjs/errors/index.cjs} +9 -9
  27. package/{lib/errors/spec.js → cjs/errors/spec.cjs} +2 -2
  28. package/cjs/hash-cache.cjs +98 -0
  29. package/{lib/hdprivatekey.js → cjs/hdprivatekey.cjs} +232 -140
  30. package/{lib/hdpublickey.js → cjs/hdpublickey.cjs} +120 -93
  31. package/cjs/index.cjs +94 -0
  32. package/cjs/interpreter/index.cjs +2 -0
  33. package/cjs/interpreter/interpreter.cjs +1988 -0
  34. package/{lib/script/stack.js → cjs/interpreter/stack.cjs} +9 -2
  35. package/{lib/message/message.js → cjs/message/message.cjs} +62 -25
  36. package/cjs/mnemonic/index.cjs +3 -0
  37. package/{lib/mnemonic/mnemonic.js → cjs/mnemonic/mnemonic.cjs} +44 -13
  38. package/{lib/mnemonic/pbkdf2.node.js → cjs/mnemonic/pbkdf2.cjs} +9 -2
  39. package/cjs/mnemonic/words/index.cjs +66 -0
  40. package/cjs/network.cjs +13 -0
  41. package/cjs/networks.cjs +321 -0
  42. package/{lib/opcode.js → cjs/opcode.cjs} +69 -5
  43. package/cjs/privatekey.cjs +422 -0
  44. package/{lib/publickey.js → cjs/publickey.cjs} +14 -16
  45. package/cjs/script/index.cjs +2 -0
  46. package/{lib/script/script.js → cjs/script/script.cjs} +322 -67
  47. package/cjs/transaction/index.cjs +5 -0
  48. package/cjs/transaction/input/index.cjs +34 -0
  49. package/cjs/transaction/input/input.cjs +396 -0
  50. package/{lib/transaction/input/multisig.js → cjs/transaction/input/multisig.cjs} +112 -18
  51. package/{lib/transaction/input/publickey.js → cjs/transaction/input/publickey.cjs} +29 -19
  52. package/{lib/transaction/input/publickeyhash.js → cjs/transaction/input/publickeyhash.cjs} +25 -17
  53. package/{lib/transaction/output.js → cjs/transaction/output.cjs} +100 -15
  54. package/cjs/transaction/sighash.cjs +187 -0
  55. package/{lib/transaction/signature.js → cjs/transaction/signature.cjs} +30 -6
  56. package/cjs/transaction/transaction.cjs +2000 -0
  57. package/{lib/transaction/unspentoutput.js → cjs/transaction/unspentoutput.cjs} +5 -5
  58. package/cjs/util/derivation.cjs +53 -0
  59. package/cjs/util/index.cjs +11 -0
  60. package/cjs/util/js.cjs +95 -0
  61. package/{lib/util/preconditions.js → cjs/util/preconditions.cjs} +2 -2
  62. package/esm/address.js +483 -0
  63. package/{lib → esm}/block/block.js +82 -27
  64. package/esm/block/blockheader.js +296 -0
  65. package/esm/block/index.js +2 -0
  66. package/esm/block/merkleblock.js +331 -0
  67. package/esm/bn.js +3411 -0
  68. package/esm/crypto/bn.js +278 -0
  69. package/esm/crypto/ecdsa.js +475 -0
  70. package/{lib/crypto/hash.browser.js → esm/crypto/hash.js} +18 -7
  71. package/esm/crypto/index.js +16 -0
  72. package/esm/crypto/point.js +228 -0
  73. package/esm/crypto/random.js +18 -0
  74. package/esm/crypto/signature.js +475 -0
  75. package/esm/encoding/base58.js +167 -0
  76. package/esm/encoding/base58check.js +192 -0
  77. package/esm/encoding/bufferreader.js +333 -0
  78. package/esm/encoding/bufferwriter.js +243 -0
  79. package/esm/encoding/decode-asm.js +24 -0
  80. package/esm/encoding/decode-hex.js +32 -0
  81. package/esm/encoding/decode-script-chunks.js +43 -0
  82. package/esm/encoding/encode-hex.js +284 -0
  83. package/esm/encoding/index.js +14 -0
  84. package/esm/encoding/is-hex.js +7 -0
  85. package/esm/encoding/varint.js +116 -0
  86. package/esm/errors/index.js +54 -0
  87. package/esm/errors/spec.js +314 -0
  88. package/esm/hash-cache.js +98 -0
  89. package/esm/hdprivatekey.js +768 -0
  90. package/esm/hdpublickey.js +549 -0
  91. package/esm/index.js +66 -0
  92. package/esm/interpreter/index.js +2 -0
  93. package/{lib/script → esm/interpreter}/interpreter.js +219 -66
  94. package/esm/interpreter/stack.js +116 -0
  95. package/esm/message/message.js +228 -0
  96. package/esm/mnemonic/index.js +3 -0
  97. package/esm/mnemonic/mnemonic.js +332 -0
  98. package/{lib/mnemonic/pbkdf2.browser.js → esm/mnemonic/pbkdf2.js} +13 -6
  99. package/esm/mnemonic/words/chinese.js +2054 -0
  100. package/esm/mnemonic/words/english.js +2054 -0
  101. package/esm/mnemonic/words/french.js +2054 -0
  102. package/esm/mnemonic/words/index.js +66 -0
  103. package/esm/mnemonic/words/italian.js +2054 -0
  104. package/esm/mnemonic/words/japanese.js +2054 -0
  105. package/esm/mnemonic/words/spanish.js +2054 -0
  106. package/esm/network.js +13 -0
  107. package/{lib → esm}/networks.js +61 -120
  108. package/esm/opcode.js +319 -0
  109. package/{lib → esm}/privatekey.js +76 -28
  110. package/esm/publickey.js +384 -0
  111. package/esm/script/index.js +2 -0
  112. package/esm/script/script.js +1329 -0
  113. package/esm/script/write-i32-le.js +17 -0
  114. package/esm/script/write-push-data.js +35 -0
  115. package/esm/script/write-u16-le.js +12 -0
  116. package/esm/script/write-u32-le.js +16 -0
  117. package/esm/script/write-u64-le.js +24 -0
  118. package/esm/script/write-u8-le.js +8 -0
  119. package/esm/script/write-varint.js +46 -0
  120. package/esm/transaction/index.js +5 -0
  121. package/esm/transaction/input/index.js +33 -0
  122. package/{lib → esm}/transaction/input/input.js +132 -90
  123. package/esm/transaction/input/multisig.js +335 -0
  124. package/esm/transaction/input/publickey.js +108 -0
  125. package/esm/transaction/input/publickeyhash.js +124 -0
  126. package/esm/transaction/output.js +316 -0
  127. package/{lib → esm}/transaction/sighash.js +42 -22
  128. package/esm/transaction/signature.js +120 -0
  129. package/{lib → esm}/transaction/transaction.js +522 -163
  130. package/esm/transaction/unspentoutput.js +112 -0
  131. package/esm/util/_.js +47 -0
  132. package/esm/util/derivation.js +53 -0
  133. package/esm/util/index.js +12 -0
  134. package/esm/util/js.js +95 -0
  135. package/esm/util/preconditions.js +33 -0
  136. package/fixup.cjs +17 -0
  137. package/package.json +18 -4
  138. package/test/{address.js → address.cjs} +14 -43
  139. package/test/block/{block.js → block.cjs} +3 -5
  140. package/test/block/{blockheader.js → blockheader.cjs} +2 -2
  141. package/test/block/{merklebloack.js → merklebloack.cjs} +2 -2
  142. package/test/crypto/{ecdsa.js → ecdsa.cjs} +9 -9
  143. package/test/crypto/{hash.browser.js → hash.browser.cjs} +2 -1
  144. package/test/crypto/{signature.js → signature.cjs} +2 -2
  145. package/test/data/bitcoind/script_tests.json +5 -5
  146. package/test/{hashCache.js → hashCache.cjs} +2 -1
  147. package/test/{hdkeys.js → hdkeys.cjs} +4 -2
  148. package/test/{hdprivatekey.js → hdprivatekey.cjs} +7 -6
  149. package/test/{hdpublickey.js → hdpublickey.cjs} +2 -7
  150. package/test/mnemonic/{pbkdf2.test.js → pbkdf2.test.cjs} +2 -2
  151. package/test/{networks.js → networks.cjs} +12 -31
  152. package/test/{publickey.js → publickey.cjs} +2 -2
  153. package/test/script/{interpreter.js → interpreter.cjs} +5 -5
  154. package/test/script/{script.js → script.cjs} +8 -2
  155. package/test/transaction/{deserialize.js → deserialize.cjs} +2 -2
  156. package/test/transaction/input/{input.js → input.cjs} +1 -1
  157. package/test/transaction/input/{multisig.js → multisig.cjs} +2 -1
  158. package/test/transaction/input/{publickeyhash.js → publickeyhash.cjs} +1 -1
  159. package/test/transaction/{sighash.js → sighash.cjs} +1 -1
  160. package/test/transaction/{transaction.js → transaction.cjs} +2 -2
  161. package/tsconfig.json +13 -0
  162. package/types/address.d.cts +252 -0
  163. package/types/block/block.d.cts +139 -0
  164. package/types/block/blockheader.d.cts +125 -0
  165. package/types/block/index.d.cts +2 -0
  166. package/types/block/merkleblock.d.cts +95 -0
  167. package/types/bn.d.cts +202 -0
  168. package/types/crypto/bn.d.cts +2 -0
  169. package/types/crypto/ecdsa.d.cts +187 -0
  170. package/types/crypto/hash.d.cts +118 -0
  171. package/types/crypto/index.d.cts +7 -0
  172. package/types/crypto/point.d.cts +134 -0
  173. package/types/crypto/random.d.cts +13 -0
  174. package/types/crypto/signature.d.cts +160 -0
  175. package/types/encoding/base58.d.cts +106 -0
  176. package/types/encoding/base58check.d.cts +107 -0
  177. package/types/encoding/bufferreader.d.cts +164 -0
  178. package/types/encoding/bufferwriter.d.cts +126 -0
  179. package/types/encoding/decode-asm.d.cts +2 -0
  180. package/types/encoding/decode-hex.d.cts +2 -0
  181. package/types/encoding/decode-script-chunks.d.cts +14 -0
  182. package/types/encoding/encode-hex.d.cts +2 -0
  183. package/types/encoding/index.d.cts +6 -0
  184. package/types/encoding/is-hex.d.cts +2 -0
  185. package/types/encoding/varint.d.cts +66 -0
  186. package/types/errors/index.d.cts +4 -0
  187. package/types/errors/spec.d.cts +22 -0
  188. package/types/hash-cache.d.cts +65 -0
  189. package/types/hdprivatekey.d.cts +281 -0
  190. package/types/hdpublickey.d.cts +240 -0
  191. package/types/index.d.cts +26 -0
  192. package/types/interpreter/index.d.cts +2 -0
  193. package/types/interpreter/interpreter.d.cts +228 -0
  194. package/types/interpreter/stack.d.cts +35 -0
  195. package/types/message/message.d.cts +110 -0
  196. package/types/mnemonic/index.d.cts +2 -0
  197. package/types/mnemonic/mnemonic.d.cts +171 -0
  198. package/types/mnemonic/pbkdf2.d.cts +14 -0
  199. package/types/mnemonic/words/chinese.d.cts +2 -0
  200. package/types/mnemonic/words/english.d.cts +2 -0
  201. package/types/mnemonic/words/french.d.cts +2 -0
  202. package/types/mnemonic/words/index.d.cts +22 -0
  203. package/types/mnemonic/words/italian.d.cts +2 -0
  204. package/types/mnemonic/words/japanese.d.cts +2 -0
  205. package/types/mnemonic/words/spanish.d.cts +2 -0
  206. package/types/network.d.cts +11 -0
  207. package/types/networks.d.cts +76 -0
  208. package/types/opcode.d.cts +93 -0
  209. package/types/privatekey.d.cts +169 -0
  210. package/types/publickey.d.cts +202 -0
  211. package/types/script/index.d.cts +2 -0
  212. package/types/script/script.d.cts +449 -0
  213. package/types/script/write-i32-le.d.cts +2 -0
  214. package/types/script/write-push-data.d.cts +2 -0
  215. package/types/script/write-u16-le.d.cts +2 -0
  216. package/types/script/write-u32-le.d.cts +2 -0
  217. package/types/script/write-u64-le.d.cts +2 -0
  218. package/types/script/write-u8-le.d.cts +2 -0
  219. package/types/script/write-varint.d.cts +2 -0
  220. package/types/transaction/index.d.cts +2 -0
  221. package/types/transaction/input/index.d.cts +2 -0
  222. package/types/transaction/input/input.d.cts +178 -0
  223. package/types/transaction/input/multisig.d.cts +127 -0
  224. package/types/transaction/input/publickey.d.cts +44 -0
  225. package/types/transaction/input/publickeyhash.d.cts +45 -0
  226. package/types/transaction/output.d.cts +118 -0
  227. package/types/transaction/sighash.d.cts +61 -0
  228. package/types/transaction/signature.d.cts +43 -0
  229. package/types/transaction/transaction.d.cts +716 -0
  230. package/types/transaction/unspentoutput.d.cts +83 -0
  231. package/types/util/_.d.cts +26 -0
  232. package/types/util/derivation.d.cts +21 -0
  233. package/types/util/index.d.cts +5 -0
  234. package/types/util/js.d.cts +50 -0
  235. package/types/util/preconditions.d.cts +3 -0
  236. package/index.d.ts +0 -1541
  237. package/index.js +0 -74
  238. package/lib/block/index.js +0 -4
  239. package/lib/bn.js +0 -3423
  240. package/lib/crypto/hash.js +0 -2
  241. package/lib/crypto/random.browser.js +0 -28
  242. package/lib/crypto/random.js +0 -2
  243. package/lib/crypto/random.node.js +0 -11
  244. package/lib/encoding/base58check.js +0 -121
  245. package/lib/encoding/bufferreader.js +0 -212
  246. package/lib/encoding/bufferwriter.js +0 -140
  247. package/lib/encoding/varint.js +0 -75
  248. package/lib/hash-cache.js +0 -50
  249. package/lib/mnemonic/pbkdf2.js +0 -2
  250. package/lib/mnemonic/words/index.js +0 -8
  251. package/lib/script/index.js +0 -5
  252. package/lib/transaction/index.js +0 -7
  253. package/lib/transaction/input/index.js +0 -5
  254. package/lib/util/js.js +0 -90
  255. /package/{lib/encoding/decode-script-chunks.js → cjs/encoding/decode-script-chunks.cjs} +0 -0
  256. /package/{lib/encoding/encode-hex.js → cjs/encoding/encode-hex.cjs} +0 -0
  257. /package/{lib/encoding/is-hex.js → cjs/encoding/is-hex.cjs} +0 -0
  258. /package/{lib/mnemonic/words/chinese.js → cjs/mnemonic/words/chinese.cjs} +0 -0
  259. /package/{lib/mnemonic/words/english.js → cjs/mnemonic/words/english.cjs} +0 -0
  260. /package/{lib/mnemonic/words/french.js → cjs/mnemonic/words/french.cjs} +0 -0
  261. /package/{lib/mnemonic/words/italian.js → cjs/mnemonic/words/italian.cjs} +0 -0
  262. /package/{lib/mnemonic/words/japanese.js → cjs/mnemonic/words/japanese.cjs} +0 -0
  263. /package/{lib/mnemonic/words/spanish.js → cjs/mnemonic/words/spanish.cjs} +0 -0
  264. /package/{lib/script/write-i32-le.js → cjs/script/write-i32-le.cjs} +0 -0
  265. /package/{lib/script/write-push-data.js → cjs/script/write-push-data.cjs} +0 -0
  266. /package/{lib/script/write-u16-le.js → cjs/script/write-u16-le.cjs} +0 -0
  267. /package/{lib/script/write-u32-le.js → cjs/script/write-u32-le.cjs} +0 -0
  268. /package/{lib/script/write-u64-le.js → cjs/script/write-u64-le.cjs} +0 -0
  269. /package/{lib/script/write-u8-le.js → cjs/script/write-u8-le.cjs} +0 -0
  270. /package/{lib/script/write-varint.js → cjs/script/write-varint.cjs} +0 -0
  271. /package/{lib/util/_.js → cjs/util/_.cjs} +0 -0
  272. /package/test/crypto/{bn.js → bn.cjs} +0 -0
  273. /package/test/crypto/{hash.js → hash.cjs} +0 -0
  274. /package/test/crypto/{point.js → point.cjs} +0 -0
  275. /package/test/crypto/{random.js → random.cjs} +0 -0
  276. /package/test/data/{blk86756-testnet.js → blk86756-testnet.cjs} +0 -0
  277. /package/test/data/{merkleblocks.js → merkleblocks.cjs} +0 -0
  278. /package/test/encoding/{base58.js → base58.cjs} +0 -0
  279. /package/test/encoding/{base58check.js → base58check.cjs} +0 -0
  280. /package/test/encoding/{bufferreader.js → bufferreader.cjs} +0 -0
  281. /package/test/encoding/{bufferwriter.js → bufferwriter.cjs} +0 -0
  282. /package/test/encoding/{varint.js → varint.cjs} +0 -0
  283. /package/test/{index.js → index.cjs} +0 -0
  284. /package/test/message/{message.js → message.cjs} +0 -0
  285. /package/test/mnemonic/{mnemonic.js → mnemonic.cjs} +0 -0
  286. /package/test/{opcode.js → opcode.cjs} +0 -0
  287. /package/test/{privatekey.js → privatekey.cjs} +0 -0
  288. /package/test/transaction/input/{publickey.js → publickey.cjs} +0 -0
  289. /package/test/transaction/{output.js → output.cjs} +0 -0
  290. /package/test/transaction/{signature.js → signature.cjs} +0 -0
  291. /package/test/transaction/{unspentoutput.js → unspentoutput.cjs} +0 -0
  292. /package/test/util/{js.js → js.cjs} +0 -0
  293. /package/test/util/{preconditions.js → preconditions.cjs} +0 -0
@@ -0,0 +1,116 @@
1
+ 'use strict';
2
+
3
+ var BufferWriter = require('./bufferwriter.cjs');
4
+ var BufferReader = require('./bufferreader.cjs');
5
+ var BN = require('../crypto/bn.cjs');
6
+
7
+ /**
8
+ * Creates a Varint instance from various input types.
9
+ * @constructor
10
+ * @param {Buffer|number|BN|Object} buf - Input can be a Buffer, number, BN instance, or object with buffer properties.
11
+ * @returns {Varint} New Varint instance when called without `new`.
12
+ */
13
+ function Varint(buf) {
14
+ if (!(this instanceof Varint)) {
15
+ return new Varint(buf);
16
+ }
17
+ if (Buffer.isBuffer(buf)) {
18
+ this.buf = buf;
19
+ } else if (typeof buf === 'number') {
20
+ var num = buf;
21
+ this.fromNumber(num);
22
+ } else if (buf instanceof BN) {
23
+ var bn = buf;
24
+ this.fromBN(bn);
25
+ } else if (buf) {
26
+ var obj = buf;
27
+ this.set(obj);
28
+ }
29
+ };
30
+
31
+ /**
32
+ * Sets the buffer for the Varint instance.
33
+ * @param {Object} obj - The object containing the buffer to set.
34
+ * @param {Buffer} [obj.buf] - The buffer to assign. If not provided, keeps the current buffer.
35
+ * @returns {Varint} The Varint instance for chaining.
36
+ */
37
+ Varint.prototype.set = function (obj) {
38
+ this.buf = obj.buf || this.buf;
39
+ return this;
40
+ };
41
+
42
+ /**
43
+ * Converts a hex string to a Varint buffer and updates the instance.
44
+ * @param {string} str - Hex string to convert.
45
+ * @returns {Varint} The updated Varint instance.
46
+ */
47
+ Varint.prototype.fromString = function (str) {
48
+ this.set({
49
+ buf: Buffer.from(str, 'hex'),
50
+ });
51
+ return this;
52
+ };
53
+
54
+ /**
55
+ * Converts the Varint buffer to a hexadecimal string representation.
56
+ * @returns {string} Hexadecimal string of the buffer.
57
+ */
58
+ Varint.prototype.toString = function () {
59
+ return this.buf.toString('hex');
60
+ };
61
+
62
+ /**
63
+ * Sets the internal buffer to the provided buffer and returns the instance.
64
+ * @param {Buffer} buf - The buffer to set as the internal buffer.
65
+ * @returns {Varint} The instance for chaining.
66
+ */
67
+ Varint.prototype.fromBuffer = function (buf) {
68
+ this.buf = buf;
69
+ return this;
70
+ };
71
+
72
+ /**
73
+ * Reads a varint from a buffer reader and stores it in the instance.
74
+ * @param {Object} br - The buffer reader instance to read from.
75
+ * @returns {Varint} The current Varint instance for chaining.
76
+ */
77
+ Varint.prototype.fromBufferReader = function (br) {
78
+ this.buf = br.readVarintBuf();
79
+ return this;
80
+ };
81
+
82
+ /**
83
+ * Converts a BigNumber (BN) to a varint and stores it in the buffer.
84
+ * @param {BN} bn - The BigNumber to convert to varint format.
85
+ * @returns {Varint} Returns the Varint instance for chaining.
86
+ */
87
+ Varint.prototype.fromBN = function (bn) {
88
+ var bw = new BufferWriter();
89
+ this.buf = bw.writeVarintBN(bn).toBuffer();
90
+ return this;
91
+ };
92
+
93
+ /**
94
+ * Converts a number to a varint and stores it in the buffer.
95
+ * @param {number} num - The number to convert to varint format.
96
+ * @returns {Varint} Returns the instance for chaining.
97
+ */
98
+ Varint.prototype.fromNumber = function (num) {
99
+ var bw = new BufferWriter();
100
+ this.buf = bw.writeVarintNum(num).toBuffer();
101
+ return this;
102
+ };
103
+
104
+ Varint.prototype.toBuffer = function () {
105
+ return this.buf;
106
+ };
107
+
108
+ Varint.prototype.toBN = function () {
109
+ return BufferReader(this.buf).readVarintBN();
110
+ };
111
+
112
+ Varint.prototype.toNumber = function () {
113
+ return BufferReader(this.buf).readVarintNum();
114
+ };
115
+
116
+ module.exports = Varint;
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var _ = require('../util/_');
3
+ var _ = require('../util/_.cjs');
4
+ var data = require('./spec.cjs');
4
5
 
5
6
  function format(message, args) {
6
7
  return message.replace('{0}', args[0]).replace('{1}', args[1]).replace('{2}', args[2]);
@@ -36,19 +37,18 @@ var traverseRoot = function (parent, errorsDefinition) {
36
37
  return parent;
37
38
  };
38
39
 
39
- var opcat = {};
40
- opcat.Error = function () {
40
+ var OpcatError = function () {
41
41
  this.message = 'Internal error';
42
42
  this.stack = this.message + '\n' + new Error().stack;
43
43
  };
44
- opcat.Error.prototype = Object.create(Error.prototype);
45
- opcat.Error.prototype.name = 'opcat.Error';
44
+ OpcatError.prototype = Object.create(Error.prototype);
45
+ OpcatError.prototype.name = 'opcat.Error';
46
46
 
47
- var data = require('./spec');
48
- traverseRoot(opcat.Error, data);
49
47
 
50
- module.exports = opcat.Error;
48
+ traverseRoot(OpcatError, data);
49
+
50
+ module.exports = OpcatError;
51
51
 
52
52
  module.exports.extend = function (spec) {
53
- return traverseNode(opcat.Error, spec);
53
+ return traverseNode(OpcatError, spec);
54
54
  };
@@ -196,7 +196,7 @@ module.exports = [
196
196
  {
197
197
  name: 'CantDeriveAddress',
198
198
  message:
199
- "Can't derive address associated with script {0}, needs to be p2pkh in, p2pkh out, p2sh in, or p2sh out.",
199
+ "Can't derive address associated with script: {0}, needs to be p2pkh in, p2pkh out",
200
200
  },
201
201
  {
202
202
  name: 'InvalidBuffer',
@@ -251,7 +251,7 @@ module.exports = [
251
251
  errors: [
252
252
  {
253
253
  name: 'ArgumentIsPrivateExtended',
254
- message: 'Argument is an extended private key: {0}',
254
+ message: 'Argument is an extended private key',
255
255
  },
256
256
  {
257
257
  name: 'InvalidDerivationArgument',
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Hash Cache
3
+ * ==========
4
+ *
5
+ * For use in sighash.
6
+ */
7
+ 'use strict';
8
+
9
+ /**
10
+ * A class representing a cache for transaction hash buffers.
11
+ * Provides methods for serialization/deserialization between Buffer, JSON, and hex formats.
12
+ *
13
+ * @class
14
+ * @property {Buffer} prevoutsHashBuf - Hash buffer for transaction prevouts
15
+ * @property {Buffer} sequenceHashBuf - Hash buffer for transaction sequence
16
+ * @property {Buffer} outputsHashBuf - Hash buffer for transaction outputs
17
+ */
18
+ class HashCache {
19
+ /**
20
+ * Constructs a new hash cache instance with the provided hash buffers.
21
+ * @param {Buffer} prevoutsHashBuf - Hash buffer for prevouts
22
+ * @param {Buffer} sequenceHashBuf - Hash buffer for sequence
23
+ * @param {Buffer} outputsHashBuf - Hash buffer for outputs
24
+ */
25
+ constructor(prevoutsHashBuf, sequenceHashBuf, outputsHashBuf) {
26
+ this.prevoutsHashBuf = prevoutsHashBuf;
27
+ this.sequenceHashBuf = sequenceHashBuf;
28
+ this.outputsHashBuf = outputsHashBuf;
29
+ }
30
+
31
+ /**
32
+ * Creates a HashCache instance from a buffer by parsing it as JSON.
33
+ * @param {Buffer} buf - The input buffer containing JSON data.
34
+ * @returns {HashCache} A new HashCache instance created from the parsed JSON.
35
+ */
36
+ static fromBuffer(buf) {
37
+ return HashCache.fromJSON(JSON.parse(buf.toString()));
38
+ }
39
+
40
+ /**
41
+ * Converts the object to a Buffer containing its JSON string representation.
42
+ * @returns {Buffer} A Buffer containing the JSON string of the object.
43
+ */
44
+ toBuffer() {
45
+ return Buffer.from(JSON.stringify(this.toJSON()));
46
+ }
47
+
48
+ /**
49
+ * Creates a HashCache instance from a JSON object.
50
+ * @param {Object} json - The JSON object containing hash buffers in hex format.
51
+ * @param {string} [json.prevoutsHashBuf] - Hex string for prevouts hash buffer.
52
+ * @param {string} [json.sequenceHashBuf] - Hex string for sequence hash buffer.
53
+ * @param {string} [json.outputsHashBuf] - Hex string for outputs hash buffer.
54
+ * @returns {HashCache} A new HashCache instance with converted Buffer values.
55
+ */
56
+ static fromJSON(json) {
57
+ return new HashCache(
58
+ json.prevoutsHashBuf ? Buffer.from(json.prevoutsHashBuf, 'hex') : undefined,
59
+ json.sequenceHashBuf ? Buffer.from(json.sequenceHashBuf, 'hex') : undefined,
60
+ json.outputsHashBuf ? Buffer.from(json.outputsHashBuf, 'hex') : undefined,
61
+ );
62
+ }
63
+
64
+ /**
65
+ * Converts the hash cache object to a JSON representation.
66
+ * @returns {Object} An object containing hex string representations of the hash buffers:
67
+ * - prevoutsHashBuf: Hex string of prevouts hash buffer (if exists)
68
+ * - sequenceHashBuf: Hex string of sequence hash buffer (if exists)
69
+ * - outputsHashBuf: Hex string of outputs hash buffer (if exists)
70
+ */
71
+ toJSON() {
72
+ return {
73
+ prevoutsHashBuf: this.prevoutsHashBuf ? this.prevoutsHashBuf.toString('hex') : undefined,
74
+ sequenceHashBuf: this.sequenceHashBuf ? this.sequenceHashBuf.toString('hex') : undefined,
75
+ outputsHashBuf: this.outputsHashBuf ? this.outputsHashBuf.toString('hex') : undefined,
76
+ };
77
+ }
78
+
79
+ /**
80
+ * Converts the object's buffer representation to a hexadecimal string.
81
+ * @returns {string} Hexadecimal string representation of the buffer.
82
+ */
83
+ toHex() {
84
+ return this.toBuffer().toString('hex');
85
+ }
86
+
87
+ /**
88
+ * Creates a HashCache instance from a hex string.
89
+ * @param {string} hex - The hex string to convert to a buffer.
90
+ * @returns {HashCache} A HashCache instance created from the hex string buffer.
91
+ */
92
+ static fromHex(hex) {
93
+ const buf = Buffer.from(hex, 'hex');
94
+ return HashCache.fromBuffer(buf);
95
+ }
96
+ }
97
+
98
+ module.exports = HashCache;