@btc-vision/bitcoin 6.3.0 → 6.3.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 (260) hide show
  1. package/.babelrc +4 -0
  2. package/.gitattributes +2 -0
  3. package/.nyc_output/6368a5b2-daa5-4821-8ed0-b742d6fc7eab.json +1 -0
  4. package/.nyc_output/processinfo/6368a5b2-daa5-4821-8ed0-b742d6fc7eab.json +1 -0
  5. package/.nyc_output/processinfo/index.json +1 -0
  6. package/.prettierrc.json +12 -0
  7. package/CHANGELOG.md +403 -0
  8. package/CONTRIBUTING.md +83 -0
  9. package/browser/address.d.ts +16 -0
  10. package/{src → browser}/bip66.d.ts +6 -7
  11. package/{src → browser}/block.d.ts +29 -30
  12. package/{src → browser}/bufferutils.d.ts +34 -54
  13. package/browser/crypto/crypto.d.ts +1 -0
  14. package/{src → browser}/crypto.d.ts +13 -18
  15. package/browser/ecc_lib.d.ts +3 -0
  16. package/browser/hooks/AdvancedSignatureManager.d.ts +16 -0
  17. package/{src → browser}/hooks/HookedSigner.d.ts +4 -4
  18. package/browser/hooks/SignatureManager.d.ts +13 -0
  19. package/browser/index.d.ts +58 -0
  20. package/browser/index.js +2 -0
  21. package/browser/index.js.LICENSE.txt +14 -0
  22. package/browser/merkle.d.ts +1 -0
  23. package/browser/networks.d.ts +23 -0
  24. package/{src → browser}/ops.d.ts +126 -126
  25. package/browser/payments/bip341.d.ts +23 -0
  26. package/browser/payments/embed.d.ts +2 -0
  27. package/browser/payments/index.d.ts +41 -0
  28. package/{src → browser}/payments/lazy.d.ts +2 -2
  29. package/browser/payments/p2ms.d.ts +2 -0
  30. package/browser/payments/p2pk.d.ts +2 -0
  31. package/browser/payments/p2pkh.d.ts +2 -0
  32. package/browser/payments/p2sh.d.ts +2 -0
  33. package/browser/payments/p2tr.d.ts +2 -0
  34. package/browser/payments/p2wpkh.d.ts +2 -0
  35. package/browser/payments/p2wsh.d.ts +2 -0
  36. package/browser/psbt/bip371.d.ts +16 -0
  37. package/browser/psbt/psbtutils.d.ts +26 -0
  38. package/{src → browser}/psbt.d.ts +167 -235
  39. package/browser/push_data.d.ts +7 -0
  40. package/browser/script.d.ts +17 -0
  41. package/browser/script_number.d.ts +2 -0
  42. package/browser/script_signature.d.ts +7 -0
  43. package/{src → browser}/transaction.d.ts +48 -60
  44. package/{src → browser}/types.d.ts +37 -54
  45. package/build/address.d.ts +16 -0
  46. package/build/address.js +148 -0
  47. package/build/bip66.d.ts +6 -0
  48. package/build/bip66.js +99 -0
  49. package/build/block.d.ts +29 -0
  50. package/build/block.js +181 -0
  51. package/build/bufferutils.d.ts +34 -0
  52. package/build/bufferutils.js +141 -0
  53. package/build/crypto/crypto.d.ts +1 -0
  54. package/build/crypto/crypto.js +1 -0
  55. package/build/crypto.d.ts +13 -0
  56. package/build/crypto.js +87 -0
  57. package/build/ecc_lib.d.ts +3 -0
  58. package/build/ecc_lib.js +61 -0
  59. package/build/hooks/AdvancedSignatureManager.d.ts +16 -0
  60. package/build/hooks/AdvancedSignatureManager.js +52 -0
  61. package/build/hooks/HookedSigner.d.ts +4 -0
  62. package/build/hooks/HookedSigner.js +64 -0
  63. package/build/hooks/SignatureManager.d.ts +13 -0
  64. package/build/hooks/SignatureManager.js +45 -0
  65. package/build/index.d.ts +58 -0
  66. package/build/index.js +32 -0
  67. package/build/merkle.d.ts +1 -0
  68. package/build/merkle.js +19 -0
  69. package/build/networks.d.ts +23 -0
  70. package/build/networks.js +121 -0
  71. package/build/ops.d.ts +126 -0
  72. package/{src → build}/ops.js +127 -131
  73. package/build/payments/bip341.d.ts +23 -0
  74. package/build/payments/bip341.js +82 -0
  75. package/build/payments/embed.d.ts +2 -0
  76. package/build/payments/embed.js +39 -0
  77. package/build/payments/index.d.ts +41 -0
  78. package/build/payments/index.js +10 -0
  79. package/build/payments/lazy.d.ts +2 -0
  80. package/{src → build}/payments/lazy.js +28 -32
  81. package/build/payments/p2ms.d.ts +2 -0
  82. package/{src → build}/payments/p2ms.js +128 -158
  83. package/build/payments/p2pk.d.ts +2 -0
  84. package/build/payments/p2pk.js +68 -0
  85. package/build/payments/p2pkh.d.ts +2 -0
  86. package/build/payments/p2pkh.js +135 -0
  87. package/build/payments/p2sh.d.ts +2 -0
  88. package/build/payments/p2sh.js +175 -0
  89. package/build/payments/p2tr.d.ts +2 -0
  90. package/build/payments/p2tr.js +254 -0
  91. package/build/payments/p2wpkh.d.ts +2 -0
  92. package/build/payments/p2wpkh.js +130 -0
  93. package/build/payments/p2wsh.d.ts +2 -0
  94. package/build/payments/p2wsh.js +180 -0
  95. package/build/psbt/bip371.d.ts +16 -0
  96. package/build/psbt/bip371.js +246 -0
  97. package/build/psbt/psbtutils.d.ts +26 -0
  98. package/build/psbt/psbtutils.js +170 -0
  99. package/build/psbt.d.ts +167 -0
  100. package/build/psbt.js +1305 -0
  101. package/build/push_data.d.ts +7 -0
  102. package/build/push_data.js +57 -0
  103. package/build/script.d.ts +17 -0
  104. package/build/script.js +167 -0
  105. package/build/script_number.d.ts +2 -0
  106. package/build/script_number.js +49 -0
  107. package/build/script_signature.d.ts +7 -0
  108. package/build/script_signature.js +49 -0
  109. package/build/transaction.d.ts +48 -0
  110. package/build/transaction.js +445 -0
  111. package/build/types.d.ts +37 -0
  112. package/build/types.js +73 -0
  113. package/cjs/package.json +3 -0
  114. package/eslint.config.js +56 -0
  115. package/gulpfile.js +42 -0
  116. package/package.json +105 -50
  117. package/src/{address.js → address.ts} +93 -73
  118. package/src/{bip66.js → bip66.ts} +23 -19
  119. package/src/{block.js → block.ts} +114 -105
  120. package/src/{bufferutils.js → bufferutils.ts} +65 -67
  121. package/src/crypto/crypto-browser.js +75 -0
  122. package/src/crypto/crypto.ts +1 -0
  123. package/src/crypto.ts +108 -0
  124. package/src/{ecc_lib.js → ecc_lib.ts} +25 -53
  125. package/src/hooks/{AdvancedSignatureManager.js → AdvancedSignatureManager.ts} +34 -18
  126. package/src/hooks/HookedSigner.ts +108 -0
  127. package/src/hooks/{SignatureManager.js → SignatureManager.ts} +26 -14
  128. package/src/index.ts +86 -0
  129. package/src/{merkle.js → merkle.ts} +8 -7
  130. package/src/networks.ts +235 -0
  131. package/src/ops.ts +282 -0
  132. package/src/payments/bip341.ts +140 -0
  133. package/src/payments/embed.ts +55 -0
  134. package/src/payments/{index.d.ts → index.ts} +20 -10
  135. package/src/payments/lazy.ts +28 -0
  136. package/src/payments/p2ms.ts +150 -0
  137. package/src/payments/{p2pk.js → p2pk.ts} +32 -29
  138. package/src/payments/{p2pkh.js → p2pkh.ts} +53 -47
  139. package/src/payments/{p2sh.js → p2sh.ts} +72 -71
  140. package/src/payments/{p2tr.js → p2tr.ts} +114 -125
  141. package/src/payments/{p2wpkh.js → p2wpkh.ts} +51 -56
  142. package/src/payments/{p2wsh.js → p2wsh.ts} +69 -81
  143. package/src/psbt/{bip371.js → bip371.ts} +195 -178
  144. package/src/psbt/psbtutils.ts +299 -0
  145. package/src/{psbt.js → psbt.ts} +1048 -699
  146. package/src/{push_data.js → push_data.ts} +35 -21
  147. package/src/{script.js → script.ts} +93 -77
  148. package/src/{script_number.js → script_number.ts} +15 -21
  149. package/src/{script_signature.js → script_signature.ts} +26 -14
  150. package/src/{transaction.js → transaction.ts} +247 -167
  151. package/src/types.ts +122 -0
  152. package/test/address.spec.js +124 -0
  153. package/test/address.spec.ts +177 -0
  154. package/test/bitcoin.core.spec.js +170 -0
  155. package/test/bitcoin.core.spec.ts +234 -0
  156. package/test/block.spec.js +141 -0
  157. package/test/block.spec.ts +194 -0
  158. package/test/bufferutils.spec.js +427 -0
  159. package/test/bufferutils.spec.ts +513 -0
  160. package/test/crypto.spec.js +41 -0
  161. package/test/crypto.spec.ts +55 -0
  162. package/test/fixtures/address.json +329 -0
  163. package/test/fixtures/block.json +148 -0
  164. package/test/fixtures/bufferutils.json +102 -0
  165. package/test/fixtures/core/README.md +26 -0
  166. package/test/fixtures/core/base58_encode_decode.json +50 -0
  167. package/test/fixtures/core/base58_keys_invalid.json +152 -0
  168. package/test/fixtures/core/base58_keys_valid.json +452 -0
  169. package/test/fixtures/core/blocks.json +27 -0
  170. package/test/fixtures/core/sig_canonical.json +7 -0
  171. package/test/fixtures/core/sig_noncanonical.json +33 -0
  172. package/test/fixtures/core/sighash.json +3505 -0
  173. package/test/fixtures/core/tx_valid.json +2023 -0
  174. package/test/fixtures/crypto.json +43 -0
  175. package/test/fixtures/ecdsa.json +217 -0
  176. package/test/fixtures/ecpair.json +141 -0
  177. package/test/fixtures/embed.json +108 -0
  178. package/test/fixtures/p2ms.json +434 -0
  179. package/test/fixtures/p2pk.json +179 -0
  180. package/test/fixtures/p2pkh.json +276 -0
  181. package/test/fixtures/p2sh.json +508 -0
  182. package/test/fixtures/p2tr.json +1198 -0
  183. package/test/fixtures/p2wpkh.json +290 -0
  184. package/test/fixtures/p2wsh.json +489 -0
  185. package/test/fixtures/psbt.json +924 -0
  186. package/test/fixtures/script.json +465 -0
  187. package/test/fixtures/script_number.json +225 -0
  188. package/test/fixtures/signature.json +140 -0
  189. package/test/fixtures/transaction.json +916 -0
  190. package/test/integration/_regtest.js +7 -0
  191. package/test/integration/_regtest.ts +6 -0
  192. package/test/integration/addresses.spec.js +116 -0
  193. package/test/integration/addresses.spec.ts +154 -0
  194. package/test/integration/bip32.spec.js +85 -0
  195. package/test/integration/bip32.spec.ts +151 -0
  196. package/test/integration/blocks.spec.js +26 -0
  197. package/test/integration/blocks.spec.ts +28 -0
  198. package/test/integration/cltv.spec.js +199 -0
  199. package/test/integration/cltv.spec.ts +283 -0
  200. package/test/integration/csv.spec.js +362 -0
  201. package/test/integration/csv.spec.ts +527 -0
  202. package/test/integration/payments.spec.js +98 -0
  203. package/test/integration/payments.spec.ts +135 -0
  204. package/test/integration/taproot.spec.js +532 -0
  205. package/test/integration/taproot.spec.ts +707 -0
  206. package/test/integration/transactions.spec.js +561 -0
  207. package/test/integration/transactions.spec.ts +769 -0
  208. package/test/payments.spec.js +97 -0
  209. package/test/payments.spec.ts +125 -0
  210. package/test/payments.utils.js +190 -0
  211. package/test/payments.utils.ts +208 -0
  212. package/test/psbt.spec.js +1044 -0
  213. package/test/psbt.spec.ts +1414 -0
  214. package/test/script.spec.js +151 -0
  215. package/test/script.spec.ts +210 -0
  216. package/test/script_number.spec.js +24 -0
  217. package/test/script_number.spec.ts +29 -0
  218. package/test/script_signature.spec.js +52 -0
  219. package/test/script_signature.spec.ts +66 -0
  220. package/test/transaction.spec.js +269 -0
  221. package/test/transaction.spec.ts +387 -0
  222. package/test/ts-node-register.js +5 -0
  223. package/test/tsconfig.json +45 -0
  224. package/test/types.spec.js +46 -0
  225. package/test/types.spec.ts +58 -0
  226. package/tsconfig.base.json +27 -0
  227. package/tsconfig.json +19 -0
  228. package/tsconfig.webpack.json +18 -0
  229. package/webpack.config.js +79 -0
  230. package/src/address.d.ts +0 -42
  231. package/src/crypto.js +0 -128
  232. package/src/ecc_lib.d.ts +0 -17
  233. package/src/hooks/AdvancedSignatureManager.d.ts +0 -44
  234. package/src/hooks/HookedSigner.js +0 -90
  235. package/src/hooks/SignatureManager.d.ts +0 -35
  236. package/src/index.d.ts +0 -42
  237. package/src/index.js +0 -87
  238. package/src/merkle.d.ts +0 -10
  239. package/src/networks.d.ts +0 -29
  240. package/src/networks.js +0 -71
  241. package/src/payments/bip341.d.ts +0 -49
  242. package/src/payments/bip341.js +0 -124
  243. package/src/payments/embed.d.ts +0 -9
  244. package/src/payments/embed.js +0 -54
  245. package/src/payments/index.js +0 -69
  246. package/src/payments/p2ms.d.ts +0 -9
  247. package/src/payments/p2pk.d.ts +0 -10
  248. package/src/payments/p2pkh.d.ts +0 -10
  249. package/src/payments/p2sh.d.ts +0 -10
  250. package/src/payments/p2tr.d.ts +0 -10
  251. package/src/payments/p2wpkh.d.ts +0 -10
  252. package/src/payments/p2wsh.d.ts +0 -10
  253. package/src/psbt/bip371.d.ts +0 -42
  254. package/src/psbt/psbtutils.d.ts +0 -64
  255. package/src/psbt/psbtutils.js +0 -191
  256. package/src/push_data.d.ts +0 -29
  257. package/src/script.d.ts +0 -42
  258. package/src/script_number.d.ts +0 -19
  259. package/src/script_signature.d.ts +0 -21
  260. package/src/types.js +0 -106
@@ -0,0 +1,45 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ESNext",
4
+ "module": "commonjs",
5
+ "outDir": "../",
6
+ "declaration": false,
7
+ "rootDir": "../",
8
+ "rootDirs": [
9
+ "../src",
10
+ "../types"
11
+ ],
12
+ "types": [
13
+ "node",
14
+ "mocha"
15
+ ],
16
+ "lib": [
17
+ "ES2021"
18
+ ],
19
+ "allowJs": false,
20
+ "resolveJsonModule": true,
21
+ "strict": true,
22
+ "noImplicitAny": true,
23
+ "strictNullChecks": true,
24
+ "strictFunctionTypes": true,
25
+ "strictBindCallApply": true,
26
+ "strictPropertyInitialization": true,
27
+ "noImplicitThis": true,
28
+ "alwaysStrict": true,
29
+ "esModuleInterop": false,
30
+ "noUnusedLocals": true,
31
+ "noUnusedParameters": true,
32
+ "baseUrl": ".",
33
+ "paths": {
34
+ "../src/*": [
35
+ "../ts_src/*"
36
+ ]
37
+ }
38
+ },
39
+ "include": [
40
+ "./**/*.ts"
41
+ ],
42
+ "exclude": [
43
+ "../ts_src/**/*.ts"
44
+ ]
45
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const assert = require("assert");
4
+ const mocha_1 = require("mocha");
5
+ const types = require("../src/types");
6
+ const typeforce = require('typeforce');
7
+ (0, mocha_1.describe)('types', () => {
8
+ (0, mocha_1.describe)('Buffer Hash160/Hash256', () => {
9
+ const buffer20byte = Buffer.alloc(20);
10
+ const buffer32byte = Buffer.alloc(32);
11
+ (0, mocha_1.it)('return true for valid size', () => {
12
+ assert(types.Hash160bit(buffer20byte));
13
+ assert(types.Hash256bit(buffer32byte));
14
+ });
15
+ (0, mocha_1.it)('return true for oneOf', () => {
16
+ assert.doesNotThrow(() => {
17
+ typeforce(types.oneOf(types.Hash160bit, types.Hash256bit), buffer32byte);
18
+ });
19
+ assert.doesNotThrow(() => {
20
+ typeforce(types.oneOf(types.Hash256bit, types.Hash160bit), buffer32byte);
21
+ });
22
+ });
23
+ (0, mocha_1.it)('throws for invalid size', () => {
24
+ assert.throws(() => {
25
+ types.Hash160bit(buffer32byte);
26
+ }, /Expected Buffer\(Length: 20\), got Buffer\(Length: 32\)/);
27
+ assert.throws(() => {
28
+ types.Hash256bit(buffer20byte);
29
+ }, /Expected Buffer\(Length: 32\), got Buffer\(Length: 20\)/);
30
+ });
31
+ });
32
+ (0, mocha_1.describe)('Satoshi', () => {
33
+ [
34
+ { value: -1, result: false },
35
+ { value: 0, result: true },
36
+ { value: 1, result: true },
37
+ { value: 20999999 * 1e8, result: true },
38
+ { value: 21000000 * 1e8, result: true },
39
+ { value: 21000001 * 1e8, result: false },
40
+ ].forEach(f => {
41
+ (0, mocha_1.it)('returns ' + f.result + ' for valid for ' + f.value, () => {
42
+ assert.strictEqual(types.Satoshi(f.value), f.result);
43
+ });
44
+ });
45
+ });
46
+ });
@@ -0,0 +1,58 @@
1
+ import * as assert from 'assert';
2
+ import { describe, it } from 'mocha';
3
+ import * as types from '../src/types';
4
+
5
+ const typeforce = require('typeforce');
6
+
7
+ describe('types', () => {
8
+ describe('Buffer Hash160/Hash256', () => {
9
+ const buffer20byte = Buffer.alloc(20);
10
+ const buffer32byte = Buffer.alloc(32);
11
+
12
+ it('return true for valid size', () => {
13
+ assert(types.Hash160bit(buffer20byte));
14
+ assert(types.Hash256bit(buffer32byte));
15
+ });
16
+
17
+ it('return true for oneOf', () => {
18
+ assert.doesNotThrow(() => {
19
+ typeforce(
20
+ types.oneOf(types.Hash160bit, types.Hash256bit),
21
+ buffer32byte,
22
+ );
23
+ });
24
+
25
+ assert.doesNotThrow(() => {
26
+ typeforce(
27
+ types.oneOf(types.Hash256bit, types.Hash160bit),
28
+ buffer32byte,
29
+ );
30
+ });
31
+ });
32
+
33
+ it('throws for invalid size', () => {
34
+ assert.throws(() => {
35
+ types.Hash160bit(buffer32byte);
36
+ }, /Expected Buffer\(Length: 20\), got Buffer\(Length: 32\)/);
37
+
38
+ assert.throws(() => {
39
+ types.Hash256bit(buffer20byte);
40
+ }, /Expected Buffer\(Length: 32\), got Buffer\(Length: 20\)/);
41
+ });
42
+ });
43
+
44
+ describe('Satoshi', () => {
45
+ [
46
+ { value: -1, result: false },
47
+ { value: 0, result: true },
48
+ { value: 1, result: true },
49
+ { value: 20999999 * 1e8, result: true },
50
+ { value: 21000000 * 1e8, result: true },
51
+ { value: 21000001 * 1e8, result: false },
52
+ ].forEach(f => {
53
+ it('returns ' + f.result + ' for valid for ' + f.value, () => {
54
+ assert.strictEqual(types.Satoshi(f.value), f.result);
55
+ });
56
+ });
57
+ });
58
+ });
@@ -0,0 +1,27 @@
1
+ {
2
+ "compilerOptions": {
3
+ "declaration": true,
4
+ "noImplicitAny": true,
5
+ "removeComments": true,
6
+ "suppressImplicitAnyIndexErrors": false,
7
+ "preserveConstEnums": true,
8
+ "resolveJsonModule": true,
9
+ "skipLibCheck": true,
10
+ "sourceMap": false,
11
+ "moduleDetection": "force",
12
+ "experimentalDecorators": true,
13
+ "lib": ["es6", "es2020", "es2021", "es2022", "esnext", "webworker", "dom", "scripthost"],
14
+ "strict": true,
15
+ "strictNullChecks": true,
16
+ "strictFunctionTypes": true,
17
+ "strictBindCallApply": true,
18
+ "strictPropertyInitialization": true,
19
+ "alwaysStrict": true,
20
+ "moduleResolution": "node",
21
+ "allowJs": true,
22
+ "incremental": true,
23
+ "allowSyntheticDefaultImports": true,
24
+ "esModuleInterop": true
25
+ },
26
+ "include": ["src/**/*.ts", "src/*", "src/**/*.js", "src/*.ts", "src/*.js", "src/*.cjs"]
27
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "extends": "./tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "module": "ESNext",
5
+ "target": "ES2020",
6
+ "declaration": true,
7
+ "outDir": "./build",
8
+ "moduleResolution": "node",
9
+ "esModuleInterop": true,
10
+ "skipLibCheck": true,
11
+ "allowSyntheticDefaultImports": true
12
+ },
13
+ "include": [
14
+ "src/**/*.ts"
15
+ ],
16
+ "exclude": [
17
+ "node_modules"
18
+ ]
19
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "module": "esnext",
5
+ "outDir": "browser",
6
+ "target": "esnext",
7
+ "declaration": true,
8
+ "esModuleInterop": true,
9
+ "skipLibCheck": true,
10
+ "strict": true,
11
+ "baseUrl": ".",
12
+ "paths": {
13
+ "@btc-vision/logger": ["node_modules/@btc-vision/logger"]
14
+ },
15
+ "moduleResolution": "bundler"
16
+ },
17
+ "exclude": ["./src/tests"]
18
+ }
@@ -0,0 +1,79 @@
1
+ import webpack from 'webpack';
2
+ import path from 'node:path';
3
+
4
+ export default {
5
+ mode: 'production',
6
+ target: 'web',
7
+ entry: {
8
+ index: {
9
+ import: './src/index.ts',
10
+ },
11
+ },
12
+ watch: false,
13
+ output: {
14
+ filename: 'index.js',
15
+ path: path.join(import.meta.dirname, './browser'),
16
+ libraryTarget: 'module',
17
+ },
18
+ node: {
19
+ __dirname: false,
20
+ },
21
+ experiments: {
22
+ outputModule: true,
23
+ asyncWebAssembly: false,
24
+ syncWebAssembly: true,
25
+ },
26
+ resolve: {
27
+ extensionAlias: {
28
+ '.js': ['.js', '.ts'],
29
+ },
30
+ modules: ['.', 'node_modules'],
31
+ extensions: ['.*', '.js', '.jsx', '.tsx', '.ts', '.wasm'],
32
+ fallback: {
33
+ buffer: import.meta.resolve('buffer/'),
34
+
35
+ assert: import.meta.resolve('assert/'),
36
+ crypto: import.meta.resolve('./src/crypto/crypto-browser.js'),
37
+ http: import.meta.resolve('stream-http/'),
38
+ https: import.meta.resolve('https-browserify/'),
39
+ os: import.meta.resolve('os-browserify/browser/'),
40
+ stream: import.meta.resolve('stream-browserify'),
41
+ process: import.meta.resolve('process/browser'),
42
+ zlib: import.meta.resolve('browserify-zlib'),
43
+ },
44
+ },
45
+ cache: false,
46
+ module: {
47
+ rules: [
48
+ {
49
+ test: /\.(js|jsx|tsx|ts)$/,
50
+ exclude: /node_modules/,
51
+ resolve: {
52
+ fullySpecified: false,
53
+ },
54
+ use: [
55
+ {
56
+ loader: 'babel-loader',
57
+ },
58
+ {
59
+ loader: 'ts-loader',
60
+ options: {
61
+ configFile: 'tsconfig.webpack.json',
62
+ },
63
+ },
64
+ ],
65
+ },
66
+ ],
67
+ },
68
+ optimization: {
69
+ usedExports: true,
70
+ },
71
+ plugins: [
72
+ new webpack.ProvidePlugin({
73
+ Buffer: ['buffer', 'Buffer'],
74
+ process: 'process/browser',
75
+ stream: 'stream-browserify',
76
+ zlib: 'browserify-zlib',
77
+ }),
78
+ ],
79
+ };
package/src/address.d.ts DELETED
@@ -1,42 +0,0 @@
1
- /// <reference types="node" />
2
- import { Network } from './networks';
3
- /** base58check decode result */
4
- export interface Base58CheckResult {
5
- /** address hash */
6
- hash: Buffer;
7
- /** address version: 0x00 for P2PKH, 0x05 for P2SH */
8
- version: number;
9
- }
10
- /** bech32 decode result */
11
- export interface Bech32Result {
12
- /** address version: 0x00 for P2WPKH、P2WSH, 0x01 for P2TR*/
13
- version: number;
14
- /** address prefix: bc for P2WPKH、P2WSH、P2TR */
15
- prefix: string;
16
- /** address data:20 bytes for P2WPKH, 32 bytes for P2WSH、P2TR */
17
- data: Buffer;
18
- }
19
- /**
20
- * decode address with base58 specification, return address version and address hash if valid
21
- */
22
- export declare function fromBase58Check(address: string): Base58CheckResult;
23
- /**
24
- * decode address with bech32 specification, return address version、address prefix and address data if valid
25
- */
26
- export declare function fromBech32(address: string): Bech32Result;
27
- /**
28
- * encode address hash to base58 address with version
29
- */
30
- export declare function toBase58Check(hash: Buffer, version: number): string;
31
- /**
32
- * encode address hash to bech32 address with version and prefix
33
- */
34
- export declare function toBech32(data: Buffer, version: number, prefix: string): string;
35
- /**
36
- * decode address from output script with network, return address if matched
37
- */
38
- export declare function fromOutputScript(output: Buffer, network?: Network): string;
39
- /**
40
- * encodes address to output script with network, return output script if address matched
41
- */
42
- export declare function toOutputScript(address: string, network?: Network): Buffer;
package/src/crypto.js DELETED
@@ -1,128 +0,0 @@
1
- 'use strict';
2
- Object.defineProperty(exports, '__esModule', { value: true });
3
- exports.taggedHash =
4
- exports.TAGGED_HASH_PREFIXES =
5
- exports.TAGS =
6
- exports.hash256 =
7
- exports.hash160 =
8
- exports.sha256 =
9
- exports.sha1 =
10
- exports.ripemd160 =
11
- void 0;
12
- /**
13
- * A module for hashing functions.
14
- * include ripemd160、sha1、sha256、hash160、hash256、taggedHash
15
- *
16
- * @packageDocumentation
17
- */
18
- const ripemd160_1 = require('@noble/hashes/ripemd160');
19
- const sha1_1 = require('@noble/hashes/sha1');
20
- const sha256_1 = require('@noble/hashes/sha256');
21
- function ripemd160(buffer) {
22
- return Buffer.from((0, ripemd160_1.ripemd160)(Uint8Array.from(buffer)));
23
- }
24
- exports.ripemd160 = ripemd160;
25
- function sha1(buffer) {
26
- return Buffer.from((0, sha1_1.sha1)(Uint8Array.from(buffer)));
27
- }
28
- exports.sha1 = sha1;
29
- function sha256(buffer) {
30
- return Buffer.from((0, sha256_1.sha256)(Uint8Array.from(buffer)));
31
- }
32
- exports.sha256 = sha256;
33
- function hash160(buffer) {
34
- return Buffer.from(
35
- (0, ripemd160_1.ripemd160)(
36
- (0, sha256_1.sha256)(Uint8Array.from(buffer)),
37
- ),
38
- );
39
- }
40
- exports.hash160 = hash160;
41
- function hash256(buffer) {
42
- return Buffer.from(
43
- (0, sha256_1.sha256)((0, sha256_1.sha256)(Uint8Array.from(buffer))),
44
- );
45
- }
46
- exports.hash256 = hash256;
47
- exports.TAGS = [
48
- 'BIP0340/challenge',
49
- 'BIP0340/aux',
50
- 'BIP0340/nonce',
51
- 'TapLeaf',
52
- 'TapBranch',
53
- 'TapSighash',
54
- 'TapTweak',
55
- 'KeyAgg list',
56
- 'KeyAgg coefficient',
57
- ];
58
- /** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */
59
- /**
60
- * Defines the tagged hash prefixes used in the crypto module.
61
- */
62
- exports.TAGGED_HASH_PREFIXES = {
63
- 'BIP0340/challenge': Buffer.from([
64
- 123, 181, 45, 122, 159, 239, 88, 50, 62, 177, 191, 122, 64, 125, 179,
65
- 130, 210, 243, 242, 216, 27, 177, 34, 79, 73, 254, 81, 143, 109, 72,
66
- 211, 124, 123, 181, 45, 122, 159, 239, 88, 50, 62, 177, 191, 122, 64,
67
- 125, 179, 130, 210, 243, 242, 216, 27, 177, 34, 79, 73, 254, 81, 143,
68
- 109, 72, 211, 124,
69
- ]),
70
- 'BIP0340/aux': Buffer.from([
71
- 241, 239, 78, 94, 192, 99, 202, 218, 109, 148, 202, 250, 157, 152, 126,
72
- 160, 105, 38, 88, 57, 236, 193, 31, 151, 45, 119, 165, 46, 216, 193,
73
- 204, 144, 241, 239, 78, 94, 192, 99, 202, 218, 109, 148, 202, 250, 157,
74
- 152, 126, 160, 105, 38, 88, 57, 236, 193, 31, 151, 45, 119, 165, 46,
75
- 216, 193, 204, 144,
76
- ]),
77
- 'BIP0340/nonce': Buffer.from([
78
- 7, 73, 119, 52, 167, 155, 203, 53, 91, 155, 140, 125, 3, 79, 18, 28,
79
- 244, 52, 215, 62, 247, 45, 218, 25, 135, 0, 97, 251, 82, 191, 235, 47,
80
- 7, 73, 119, 52, 167, 155, 203, 53, 91, 155, 140, 125, 3, 79, 18, 28,
81
- 244, 52, 215, 62, 247, 45, 218, 25, 135, 0, 97, 251, 82, 191, 235, 47,
82
- ]),
83
- TapLeaf: Buffer.from([
84
- 174, 234, 143, 220, 66, 8, 152, 49, 5, 115, 75, 88, 8, 29, 30, 38, 56,
85
- 211, 95, 28, 181, 64, 8, 212, 211, 87, 202, 3, 190, 120, 233, 238, 174,
86
- 234, 143, 220, 66, 8, 152, 49, 5, 115, 75, 88, 8, 29, 30, 38, 56, 211,
87
- 95, 28, 181, 64, 8, 212, 211, 87, 202, 3, 190, 120, 233, 238,
88
- ]),
89
- TapBranch: Buffer.from([
90
- 25, 65, 161, 242, 229, 110, 185, 95, 162, 169, 241, 148, 190, 92, 1,
91
- 247, 33, 111, 51, 237, 130, 176, 145, 70, 52, 144, 208, 91, 245, 22,
92
- 160, 21, 25, 65, 161, 242, 229, 110, 185, 95, 162, 169, 241, 148, 190,
93
- 92, 1, 247, 33, 111, 51, 237, 130, 176, 145, 70, 52, 144, 208, 91, 245,
94
- 22, 160, 21,
95
- ]),
96
- TapSighash: Buffer.from([
97
- 244, 10, 72, 223, 75, 42, 112, 200, 180, 146, 75, 242, 101, 70, 97, 237,
98
- 61, 149, 253, 102, 163, 19, 235, 135, 35, 117, 151, 198, 40, 228, 160,
99
- 49, 244, 10, 72, 223, 75, 42, 112, 200, 180, 146, 75, 242, 101, 70, 97,
100
- 237, 61, 149, 253, 102, 163, 19, 235, 135, 35, 117, 151, 198, 40, 228,
101
- 160, 49,
102
- ]),
103
- TapTweak: Buffer.from([
104
- 232, 15, 225, 99, 156, 156, 160, 80, 227, 175, 27, 57, 193, 67, 198, 62,
105
- 66, 156, 188, 235, 21, 217, 64, 251, 181, 197, 161, 244, 175, 87, 197,
106
- 233, 232, 15, 225, 99, 156, 156, 160, 80, 227, 175, 27, 57, 193, 67,
107
- 198, 62, 66, 156, 188, 235, 21, 217, 64, 251, 181, 197, 161, 244, 175,
108
- 87, 197, 233,
109
- ]),
110
- 'KeyAgg list': Buffer.from([
111
- 72, 28, 151, 28, 60, 11, 70, 215, 240, 178, 117, 174, 89, 141, 78, 44,
112
- 126, 215, 49, 156, 89, 74, 92, 110, 199, 158, 160, 212, 153, 2, 148,
113
- 240, 72, 28, 151, 28, 60, 11, 70, 215, 240, 178, 117, 174, 89, 141, 78,
114
- 44, 126, 215, 49, 156, 89, 74, 92, 110, 199, 158, 160, 212, 153, 2, 148,
115
- 240,
116
- ]),
117
- 'KeyAgg coefficient': Buffer.from([
118
- 191, 201, 4, 3, 77, 28, 136, 232, 200, 14, 34, 229, 61, 36, 86, 109,
119
- 100, 130, 78, 214, 66, 114, 129, 192, 145, 0, 249, 77, 205, 82, 201,
120
- 129, 191, 201, 4, 3, 77, 28, 136, 232, 200, 14, 34, 229, 61, 36, 86,
121
- 109, 100, 130, 78, 214, 66, 114, 129, 192, 145, 0, 249, 77, 205, 82,
122
- 201, 129,
123
- ]),
124
- };
125
- function taggedHash(prefix, data) {
126
- return sha256(Buffer.concat([exports.TAGGED_HASH_PREFIXES[prefix], data]));
127
- }
128
- exports.taggedHash = taggedHash;
package/src/ecc_lib.d.ts DELETED
@@ -1,17 +0,0 @@
1
- import { TinySecp256k1Interface } from './types';
2
- /**
3
- * Initializes the ECC library with the provided instance.
4
- * If `eccLib` is `undefined`, the library will be cleared.
5
- * If `eccLib` is a new instance, it will be verified before setting it as the active library.
6
- *
7
- * @param eccLib The instance of the ECC library to initialize.
8
- */
9
- export declare function initEccLib(eccLib: TinySecp256k1Interface | undefined): void;
10
- /**
11
- * Retrieves the ECC Library instance.
12
- * Throws an error if the ECC Library is not provided.
13
- * You must call initEccLib() with a valid TinySecp256k1Interface instance before calling this function.
14
- * @returns The ECC Library instance.
15
- * @throws Error if the ECC Library is not provided.
16
- */
17
- export declare function getEccLib(): TinySecp256k1Interface;
@@ -1,44 +0,0 @@
1
- /// <reference types="node" />
2
- export interface CacheEntry {
3
- pubKey: string;
4
- dataRef: WeakRef<Buffer>;
5
- signature: Buffer;
6
- }
7
- export declare class AdvancedSignatureManager {
8
- private static instance;
9
- /**
10
- * Map to index cache entries by signer public key.
11
- * Key: Public Key (string)
12
- * Value: Set of CacheEntries
13
- */
14
- private cacheBySigner;
15
- /**
16
- * FinalizationRegistry to clean up cache entries when their data buffers are garbage collected.
17
- */
18
- private registry;
19
- private constructor();
20
- static getInstance(): AdvancedSignatureManager;
21
- /**
22
- * Adds (caches) the signature for the given data buffer and signer public key.
23
- * @param pubKey The signer's public key.
24
- * @param data The data buffer.
25
- * @param signature The signature buffer.
26
- */
27
- addSignature(pubKey: string, data: Buffer, signature: Buffer): Buffer;
28
- /**
29
- * Retrieves the signature for the given data buffer and signer public key.
30
- * @param pubKey The signer's public key.
31
- * @param data The data buffer.
32
- * @returns The signature buffer if found; otherwise, undefined.
33
- */
34
- getSignature(pubKey: string, data: Buffer): Buffer | undefined;
35
- /**
36
- * Use with caution as it removes all cached signatures for all signers.
37
- */
38
- clearCache(): void;
39
- /**
40
- * Clears the cache for a specific signer.
41
- * @param pubKey The signer's public key.
42
- */
43
- clearCacheForSigner(pubKey: string): void;
44
- }
@@ -1,90 +0,0 @@
1
- 'use strict';
2
- Object.defineProperty(exports, '__esModule', { value: true });
3
- exports.hookSigner = void 0;
4
- const SignatureManager_js_1 = require('./SignatureManager.js');
5
- const AdvancedSignatureManager_js_1 = require('./AdvancedSignatureManager.js');
6
- const advancedSignatureManager =
7
- AdvancedSignatureManager_js_1.AdvancedSignatureManager.getInstance();
8
- function getPublicKey(keyPair) {
9
- if (keyPair.publicKey && Buffer.isBuffer(keyPair.publicKey)) {
10
- return keyPair.publicKey.toString('hex');
11
- }
12
- }
13
- function hookKeyPair(keyPair) {
14
- const oldSign = keyPair.sign;
15
- if (oldSign) {
16
- keyPair.sign = new Proxy(oldSign, {
17
- apply: function (target, thisArg, argumentsList) {
18
- const publicKey = getPublicKey(keyPair);
19
- const hash = argumentsList[0];
20
- if (publicKey) {
21
- let possibleSignature =
22
- advancedSignatureManager.getSignature(publicKey, hash);
23
- if (!possibleSignature) {
24
- possibleSignature =
25
- advancedSignatureManager.addSignature(
26
- publicKey,
27
- hash,
28
- Reflect.apply(target, thisArg, argumentsList),
29
- );
30
- }
31
- return possibleSignature;
32
- } else {
33
- let possibleSignature =
34
- keyPair.signatureManager.getSignature(hash);
35
- if (!possibleSignature) {
36
- possibleSignature =
37
- keyPair.signatureManager.addSignature(
38
- hash,
39
- Reflect.apply(target, thisArg, argumentsList),
40
- );
41
- }
42
- return possibleSignature;
43
- }
44
- },
45
- });
46
- }
47
- const oldSignSchnorr = keyPair.signSchnorr;
48
- if (oldSignSchnorr) {
49
- keyPair.signSchnorr = new Proxy(oldSignSchnorr, {
50
- apply: function (target, thisArg, argumentsList) {
51
- const publicKey = getPublicKey(keyPair);
52
- const hash = argumentsList[0];
53
- if (publicKey) {
54
- let possibleSignature =
55
- advancedSignatureManager.getSignature(publicKey, hash);
56
- if (!possibleSignature) {
57
- possibleSignature =
58
- advancedSignatureManager.addSignature(
59
- publicKey,
60
- hash,
61
- Reflect.apply(target, thisArg, argumentsList),
62
- );
63
- }
64
- return possibleSignature;
65
- } else {
66
- let possibleSignature =
67
- keyPair.signatureManager.getSignature(hash);
68
- if (!possibleSignature) {
69
- possibleSignature =
70
- keyPair.signatureManager.addSignature(
71
- hash,
72
- Reflect.apply(target, thisArg, argumentsList),
73
- );
74
- }
75
- return possibleSignature;
76
- }
77
- },
78
- });
79
- }
80
- }
81
- function hookSigner(keyPair) {
82
- const newKeypair = keyPair;
83
- if (!newKeypair.hasHook) {
84
- newKeypair.hasHook = true;
85
- newKeypair.signatureManager =
86
- new SignatureManager_js_1.SignatureManager();
87
- hookKeyPair(newKeypair);
88
- }
89
- }
90
- exports.hookSigner = hookSigner;
@@ -1,35 +0,0 @@
1
- /// <reference types="node" />
2
- export interface CacheEntry {
3
- length: number;
4
- dataRef: WeakRef<Buffer>;
5
- signature: Buffer;
6
- }
7
- export declare class SignatureManager {
8
- /**
9
- * Map to index cache entries by buffer length.
10
- * Key: Buffer length
11
- * Value: Set of CacheEntries with that buffer length
12
- */
13
- private cacheByLength;
14
- /**
15
- * FinalizationRegistry to clean up cache entries when their data buffers are garbage collected.
16
- */
17
- private registry;
18
- constructor();
19
- /**
20
- * Adds (caches) the signature for the given data buffer.
21
- * @param data The data buffer.
22
- * @param signature The signature buffer.
23
- */
24
- addSignature(data: Buffer, signature: Buffer): Buffer;
25
- /**
26
- * Retrieves the signature for the given data buffer.
27
- * @param data The data buffer.
28
- * @returns The signature buffer if found; otherwise, undefined.
29
- */
30
- getSignature(data: Buffer): Buffer | undefined;
31
- /**
32
- * Use with caution as it removes all cached signatures.
33
- */
34
- clearCache(): void;
35
- }