@bsv/wallet-toolbox 1.3.23 → 1.3.24

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 (184) hide show
  1. package/docs/client.md +99 -59
  2. package/docs/storage.md +55 -75
  3. package/docs/wallet.md +99 -59
  4. package/mobile/out/src/Wallet.d.ts +1 -1
  5. package/mobile/out/src/Wallet.d.ts.map +1 -1
  6. package/mobile/out/src/Wallet.js +16 -6
  7. package/mobile/out/src/Wallet.js.map +1 -1
  8. package/mobile/out/src/monitor/Monitor.d.ts.map +1 -1
  9. package/mobile/out/src/monitor/Monitor.js +2 -4
  10. package/mobile/out/src/monitor/Monitor.js.map +1 -1
  11. package/mobile/out/src/monitor/tasks/TaskNewHeader.d.ts +1 -1
  12. package/mobile/out/src/monitor/tasks/TaskNewHeader.d.ts.map +1 -1
  13. package/mobile/out/src/sdk/WalletStorage.interfaces.d.ts +14 -1
  14. package/mobile/out/src/sdk/WalletStorage.interfaces.d.ts.map +1 -1
  15. package/mobile/out/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.d.ts.map +1 -0
  16. package/mobile/out/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.js.map +1 -0
  17. package/mobile/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.d.ts +1 -1
  18. package/mobile/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.d.ts.map +1 -1
  19. package/mobile/out/src/services/chaintracker/chaintracks/index.d.ts +1 -1
  20. package/mobile/out/src/services/chaintracker/chaintracks/index.d.ts.map +1 -1
  21. package/mobile/out/src/services/chaintracker/chaintracks/index.js +1 -1
  22. package/mobile/out/src/services/chaintracker/chaintracks/index.js.map +1 -1
  23. package/mobile/out/src/signer/methods/internalizeAction.d.ts +2 -2
  24. package/mobile/out/src/signer/methods/internalizeAction.d.ts.map +1 -1
  25. package/mobile/out/src/signer/methods/internalizeAction.js.map +1 -1
  26. package/mobile/out/src/storage/StorageProvider.d.ts +5 -6
  27. package/mobile/out/src/storage/StorageProvider.d.ts.map +1 -1
  28. package/mobile/out/src/storage/StorageProvider.js +75 -101
  29. package/mobile/out/src/storage/StorageProvider.js.map +1 -1
  30. package/mobile/out/src/storage/WalletStorageManager.d.ts +2 -2
  31. package/mobile/out/src/storage/WalletStorageManager.d.ts.map +1 -1
  32. package/mobile/out/src/storage/methods/generateChange.d.ts +0 -24
  33. package/mobile/out/src/storage/methods/generateChange.d.ts.map +1 -1
  34. package/mobile/out/src/storage/methods/generateChange.js +2 -50
  35. package/mobile/out/src/storage/methods/generateChange.js.map +1 -1
  36. package/mobile/out/src/storage/methods/getBeefForTransaction.js +3 -2
  37. package/mobile/out/src/storage/methods/getBeefForTransaction.js.map +1 -1
  38. package/mobile/out/src/storage/methods/internalizeAction.d.ts +2 -10
  39. package/mobile/out/src/storage/methods/internalizeAction.d.ts.map +1 -1
  40. package/mobile/out/src/storage/methods/internalizeAction.js +16 -1
  41. package/mobile/out/src/storage/methods/internalizeAction.js.map +1 -1
  42. package/mobile/out/src/storage/methods/processAction.d.ts +16 -1
  43. package/mobile/out/src/storage/methods/processAction.d.ts.map +1 -1
  44. package/mobile/out/src/storage/methods/processAction.js +4 -1
  45. package/mobile/out/src/storage/methods/processAction.js.map +1 -1
  46. package/mobile/out/src/storage/methods/utils.d.ts +25 -0
  47. package/mobile/out/src/storage/methods/utils.d.ts.map +1 -0
  48. package/mobile/out/src/storage/methods/utils.js +53 -0
  49. package/mobile/out/src/storage/methods/utils.js.map +1 -0
  50. package/mobile/out/src/storage/remoting/StorageClient.d.ts +2 -2
  51. package/mobile/out/src/storage/remoting/StorageClient.d.ts.map +1 -1
  52. package/mobile/out/src/storage/remoting/StorageClient.js.map +1 -1
  53. package/mobile/out/src/storage/remoting/StorageMobile.d.ts +2 -2
  54. package/mobile/out/src/storage/remoting/StorageMobile.d.ts.map +1 -1
  55. package/mobile/out/src/storage/remoting/StorageMobile.js.map +1 -1
  56. package/mobile/out/src/utility/utilityHelpers.d.ts +1 -1
  57. package/mobile/out/src/utility/utilityHelpers.d.ts.map +1 -1
  58. package/mobile/out/src/utility/utilityHelpers.js +3 -3
  59. package/mobile/out/src/utility/utilityHelpers.js.map +1 -1
  60. package/mobile/package-lock.json +2 -2
  61. package/mobile/package.json +1 -1
  62. package/out/src/Wallet.d.ts +1 -1
  63. package/out/src/Wallet.d.ts.map +1 -1
  64. package/out/src/Wallet.js +16 -6
  65. package/out/src/Wallet.js.map +1 -1
  66. package/out/src/monitor/Monitor.d.ts.map +1 -1
  67. package/out/src/monitor/Monitor.js +2 -4
  68. package/out/src/monitor/Monitor.js.map +1 -1
  69. package/out/src/monitor/tasks/TaskNewHeader.d.ts +1 -1
  70. package/out/src/monitor/tasks/TaskNewHeader.d.ts.map +1 -1
  71. package/out/src/sdk/WalletStorage.interfaces.d.ts +14 -1
  72. package/out/src/sdk/WalletStorage.interfaces.d.ts.map +1 -1
  73. package/out/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.d.ts.map +1 -0
  74. package/out/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.js.map +1 -0
  75. package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.d.ts +1 -1
  76. package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.d.ts.map +1 -1
  77. package/out/src/services/chaintracker/chaintracks/index.d.ts +1 -1
  78. package/out/src/services/chaintracker/chaintracks/index.d.ts.map +1 -1
  79. package/out/src/services/chaintracker/chaintracks/index.js +1 -1
  80. package/out/src/services/chaintracker/chaintracks/index.js.map +1 -1
  81. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.d.ts +144 -0
  82. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.d.ts.map +1 -0
  83. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js +463 -0
  84. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js.map +1 -0
  85. package/out/src/services/chaintracker/chaintracks/util/dirtyHashes.d.ts +20 -0
  86. package/out/src/services/chaintracker/chaintracks/util/dirtyHashes.d.ts.map +1 -0
  87. package/out/src/services/chaintracker/chaintracks/util/dirtyHashes.js +31 -0
  88. package/out/src/services/chaintracker/chaintracks/util/dirtyHashes.js.map +1 -0
  89. package/out/src/signer/methods/internalizeAction.d.ts +2 -2
  90. package/out/src/signer/methods/internalizeAction.d.ts.map +1 -1
  91. package/out/src/signer/methods/internalizeAction.js.map +1 -1
  92. package/out/src/storage/StorageProvider.d.ts +5 -6
  93. package/out/src/storage/StorageProvider.d.ts.map +1 -1
  94. package/out/src/storage/StorageProvider.js +75 -101
  95. package/out/src/storage/StorageProvider.js.map +1 -1
  96. package/out/src/storage/WalletStorageManager.d.ts +2 -2
  97. package/out/src/storage/WalletStorageManager.d.ts.map +1 -1
  98. package/out/src/storage/__test/StorageIdb.test.js +1 -0
  99. package/out/src/storage/__test/StorageIdb.test.js.map +1 -1
  100. package/out/src/storage/__test/adminStats.man.test.js +2 -0
  101. package/out/src/storage/__test/adminStats.man.test.js.map +1 -1
  102. package/out/src/storage/methods/generateChange.d.ts +0 -24
  103. package/out/src/storage/methods/generateChange.d.ts.map +1 -1
  104. package/out/src/storage/methods/generateChange.js +2 -50
  105. package/out/src/storage/methods/generateChange.js.map +1 -1
  106. package/out/src/storage/methods/getBeefForTransaction.js +3 -2
  107. package/out/src/storage/methods/getBeefForTransaction.js.map +1 -1
  108. package/out/src/storage/methods/internalizeAction.d.ts +2 -10
  109. package/out/src/storage/methods/internalizeAction.d.ts.map +1 -1
  110. package/out/src/storage/methods/internalizeAction.js +16 -1
  111. package/out/src/storage/methods/internalizeAction.js.map +1 -1
  112. package/out/src/storage/methods/processAction.d.ts +16 -1
  113. package/out/src/storage/methods/processAction.d.ts.map +1 -1
  114. package/out/src/storage/methods/processAction.js +4 -1
  115. package/out/src/storage/methods/processAction.js.map +1 -1
  116. package/out/src/storage/methods/utils.Buffer.d.ts +21 -0
  117. package/out/src/storage/methods/utils.Buffer.d.ts.map +1 -0
  118. package/out/src/storage/methods/utils.Buffer.js +37 -0
  119. package/out/src/storage/methods/utils.Buffer.js.map +1 -0
  120. package/out/src/storage/methods/utils.d.ts +25 -0
  121. package/out/src/storage/methods/utils.d.ts.map +1 -0
  122. package/out/src/storage/methods/utils.js +53 -0
  123. package/out/src/storage/methods/utils.js.map +1 -0
  124. package/out/src/storage/remoting/StorageClient.d.ts +2 -2
  125. package/out/src/storage/remoting/StorageClient.d.ts.map +1 -1
  126. package/out/src/storage/remoting/StorageClient.js.map +1 -1
  127. package/out/src/storage/remoting/StorageMobile.d.ts +2 -2
  128. package/out/src/storage/remoting/StorageMobile.d.ts.map +1 -1
  129. package/out/src/storage/remoting/StorageMobile.js.map +1 -1
  130. package/out/src/utility/Format.d.ts +14 -0
  131. package/out/src/utility/Format.d.ts.map +1 -0
  132. package/out/src/utility/Format.js +167 -0
  133. package/out/src/utility/Format.js.map +1 -0
  134. package/out/src/utility/utilityHelpers.d.ts +1 -1
  135. package/out/src/utility/utilityHelpers.d.ts.map +1 -1
  136. package/out/src/utility/utilityHelpers.js +3 -3
  137. package/out/src/utility/utilityHelpers.js.map +1 -1
  138. package/out/test/Wallet/support/operations.man.test.js +18 -138
  139. package/out/test/Wallet/support/operations.man.test.js.map +1 -1
  140. package/out/test/Wallet/support/reqErrorReview.2025.05.06.man.test.d.ts +2 -0
  141. package/out/test/Wallet/support/reqErrorReview.2025.05.06.man.test.d.ts.map +1 -0
  142. package/out/test/Wallet/support/reqErrorReview.2025.05.06.man.test.js +385 -0
  143. package/out/test/Wallet/support/reqErrorReview.2025.05.06.man.test.js.map +1 -0
  144. package/out/test/utils/TestUtilsWalletStorage.d.ts +5 -0
  145. package/out/test/utils/TestUtilsWalletStorage.d.ts.map +1 -1
  146. package/out/test/utils/TestUtilsWalletStorage.js +20 -0
  147. package/out/test/utils/TestUtilsWalletStorage.js.map +1 -1
  148. package/out/tsconfig.all.tsbuildinfo +1 -1
  149. package/package.json +1 -1
  150. package/src/Wallet.ts +25 -10
  151. package/src/monitor/Monitor.ts +2 -4
  152. package/src/monitor/tasks/TaskNewHeader.ts +1 -1
  153. package/src/sdk/WalletStorage.interfaces.ts +16 -1
  154. package/src/services/chaintracker/chaintracks/ChaintracksServiceClient.ts +1 -1
  155. package/src/services/chaintracker/chaintracks/index.ts +1 -1
  156. package/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.ts +490 -0
  157. package/src/services/chaintracker/chaintracks/util/dirtyHashes.ts +29 -0
  158. package/src/signer/methods/internalizeAction.ts +2 -2
  159. package/src/storage/StorageProvider.ts +43 -31
  160. package/src/storage/WalletStorageManager.ts +1 -1
  161. package/src/storage/__test/StorageIdb.test.ts +1 -0
  162. package/src/storage/__test/adminStats.man.test.ts +2 -0
  163. package/src/storage/methods/generateChange.ts +1 -54
  164. package/src/storage/methods/getBeefForTransaction.ts +10 -2
  165. package/src/storage/methods/internalizeAction.ts +22 -14
  166. package/src/storage/methods/processAction.ts +5 -2
  167. package/src/storage/methods/utils.Buffer.ts +33 -0
  168. package/src/storage/methods/utils.ts +56 -0
  169. package/src/storage/remoting/StorageClient.ts +2 -2
  170. package/src/storage/remoting/StorageMobile.ts +2 -2
  171. package/src/utility/Format.ts +133 -0
  172. package/src/utility/utilityHelpers.ts +2 -2
  173. package/test/Wallet/support/operations.man.test.ts +20 -125
  174. package/test/Wallet/support/reqErrorReview.2025.05.06.man.test.ts +359 -0
  175. package/test/utils/TestUtilsWalletStorage.ts +23 -0
  176. package/mobile/out/src/services/chaintracker/chaintracks/BlockHeaderApi.d.ts.map +0 -1
  177. package/mobile/out/src/services/chaintracker/chaintracks/BlockHeaderApi.js.map +0 -1
  178. package/out/src/services/chaintracker/chaintracks/BlockHeaderApi.d.ts.map +0 -1
  179. package/out/src/services/chaintracker/chaintracks/BlockHeaderApi.js.map +0 -1
  180. /package/mobile/out/src/services/chaintracker/chaintracks/{BlockHeaderApi.d.ts → Api/BlockHeaderApi.d.ts} +0 -0
  181. /package/mobile/out/src/services/chaintracker/chaintracks/{BlockHeaderApi.js → Api/BlockHeaderApi.js} +0 -0
  182. /package/out/src/services/chaintracker/chaintracks/{BlockHeaderApi.d.ts → Api/BlockHeaderApi.d.ts} +0 -0
  183. /package/out/src/services/chaintracker/chaintracks/{BlockHeaderApi.js → Api/BlockHeaderApi.js} +0 -0
  184. /package/src/services/chaintracker/chaintracks/{BlockHeaderApi.ts → Api/BlockHeaderApi.ts} +0 -0
@@ -0,0 +1,144 @@
1
+ import { BigNumber } from '@bsv/sdk';
2
+ import { BaseBlockHeader, BlockHeader } from '../Api/BlockHeaderApi';
3
+ import { Chain } from '../../../../sdk/types';
4
+ /**
5
+ * Computes sha256 hash of file contents read as bytes with no encoding.
6
+ * @param filepath Full filepath to file.
7
+ * @param bufferSize Optional read buffer size to use. Defaults to 80,000 bytes.
8
+ * @returns `{hash, length}` where `hash` is base64 string form of file hash and `length` is file length in bytes.
9
+ */
10
+ export declare function sha256HashOfBinaryFile(filepath: string, bufferSize?: number): Promise<{
11
+ hash: string;
12
+ length: number;
13
+ }>;
14
+ /**
15
+ * Validate headers contained in an array of bytes. The headers must be consecutive block headers, 80 bytes long,
16
+ * where the hash of each header equals the previousHash of the following header.
17
+ * @param buffer Buffer of headers to be validated.
18
+ * @param previousHash Expected previousHash of first header.
19
+ * @param offset Optional starting offset within `buffer`.
20
+ * @param count Optional number of headers to validate. Validates to end of buffer if missing.
21
+ * @returns Header hash of last header validated or previousHash if there where none.
22
+ */
23
+ export declare function validateBufferOfHeaders(buffer: number[], previousHash: string, offset?: number, count?: number): string;
24
+ /**
25
+ * @param work chainWork as a BigNumber
26
+ * @returns Converted chainWork value from BN to hex string of 32 bytes.
27
+ */
28
+ export declare function workBNtoBuffer(work: BigNumber): string;
29
+ /**
30
+ * Returns true if work1 is more work (greater than) work2
31
+ */
32
+ export declare function isMoreWork(work1: string, work2: string): boolean;
33
+ /**
34
+ * Add two Buffer encoded chainwork values
35
+ * @returns Sum of work1 + work2 as Buffer encoded chainWork value
36
+ */
37
+ export declare function addWork(work1: string, work2: string): string;
38
+ /**
39
+ * Subtract Buffer encoded chainwork values
40
+ * @returns work1 - work2 as Buffer encoded chainWork value
41
+ */
42
+ export declare function subWork(work1: string, work2: string): string;
43
+ /**
44
+ * Computes "target" value for 4 byte Bitcoin block header "bits" value.
45
+ * @param bits number or converted from Buffer using `readUint32LE`
46
+ * @returns 32 byte Buffer with "target" value
47
+ */
48
+ export declare function convertBitsToTarget(bits: number | number[]): BigNumber;
49
+ /**
50
+ * Computes "chainWork" value for 4 byte Bitcoin block header "bits" value.
51
+ * @param bits number or converted from Buffer using `readUint32LE`
52
+ * @returns 32 byte Buffer with "chainWork" value
53
+ */
54
+ export declare function convertBitsToWork(bits: number | number[]): string;
55
+ export declare function deserializeBaseBlockHeaders(buffer: number[], offset?: number, count?: number | undefined): BaseBlockHeader[];
56
+ export declare function deserializeBlockHeaders(firstHeight: number, buffer: number[], offset?: number, count?: number | undefined): BlockHeader[];
57
+ /**
58
+ * Extract an array of block hashes and of merkleRoots from a buffer of serialized block headers.
59
+ * @param buffer
60
+ */
61
+ export declare function extractHashesAndRoots(buffer: Buffer): {
62
+ hashes: Buffer[];
63
+ merkleRoots: Buffer[];
64
+ };
65
+ /**
66
+ * Given a block header, ensures that its format is correct. This does not
67
+ * check its difficulty or validity relative to the chain of headers.
68
+ *
69
+ * Throws on format errors.
70
+ *
71
+ * @param The header to validate
72
+ *
73
+ * @returns true if the header is correctly formatted
74
+ */
75
+ export declare function validateHeaderFormat(header: BlockHeader): void;
76
+ /**
77
+ * Ensures that a header has a valid proof-of-work
78
+ * Requires chain is 'main'
79
+ *
80
+ * @param header The header to validate
81
+ *
82
+ * @returns true if the header is valid
83
+ */
84
+ export declare function validateHeaderDifficulty(hash: Buffer, bits: number): boolean;
85
+ /**
86
+ * Computes double sha256 hash of bitcoin block header
87
+ * bytes are reversed to bigendian order
88
+ *
89
+ * If header is a Buffer, it is required to 80 bytes long
90
+ * and in standard block header serialized encoding.
91
+ *
92
+ * @returns doule sha256 hash of header bytes reversed
93
+ * @publicbody
94
+ */
95
+ export declare function blockHash(header: BaseBlockHeader | number[]): string;
96
+ /**
97
+ * Serializes a block header as an 80 byte Buffer.
98
+ * The exact serialized format is defined in the Bitcoin White Paper
99
+ * such that computing a double sha256 hash of the buffer computes
100
+ * the block hash for the header.
101
+ * @returns 80 byte Buffer
102
+ * @publicbody
103
+ */
104
+ export declare function serializeBlockHeader(header: BaseBlockHeader, buffer?: number[], offset?: number): number[];
105
+ /**
106
+ * Deserialize a block header from an 80 byte buffer
107
+ * @publicbody
108
+ */
109
+ export declare function deserializeBlockHeader(buffer: number[], offset?: number): BaseBlockHeader;
110
+ /**
111
+ * Returns the genesis block for the specified chain.
112
+ * @publicbody
113
+ */
114
+ export declare function genesisHeader(chain: Chain): BlockHeader;
115
+ /**
116
+ * Returns the genesis block for the specified chain.
117
+ * @publicbody
118
+ */
119
+ export declare function genesisBuffer(chain: Chain): number[];
120
+ /**
121
+ * Returns a copy of a Buffer with byte order reversed.
122
+ * @returns new buffer with byte order reversed.
123
+ * @publicbody
124
+ */
125
+ export declare function swapByteOrder(buffer: number[]): number[];
126
+ /**
127
+ * @param num a number value in the Uint32 value range
128
+ * @param littleEndian true for little-endian byte order in Buffer
129
+ * @returns four byte buffer with Uint32 number encoded
130
+ * @publicbody
131
+ */
132
+ export declare function convertUint32ToBuffer(n: number, littleEndian?: boolean): number[];
133
+ export declare function writeUInt32LE(n: number, a: number[], offset: number): number;
134
+ export declare function writeUInt32BE(n: number, a: number[], offset: number): number;
135
+ export declare function readUInt32LE(a: number[], offset: number): number;
136
+ export declare function readUInt32BE(a: number[], offset: number): number;
137
+ /**
138
+ * @param buffer four byte buffer with Uint32 number encoded
139
+ * @param littleEndian true for little-endian byte order in Buffer
140
+ * @returns a number value in the Uint32 value range
141
+ * @publicbody
142
+ */
143
+ export declare function convertBufferToUint32(buffer: number[], littleEndian?: boolean): number;
144
+ //# sourceMappingURL=blockHeaderUtilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockHeaderUtilities.d.ts","sourceRoot":"","sources":["../../../../../../src/services/chaintracker/chaintracks/util/blockHeaderUtilities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,463 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sha256HashOfBinaryFile = sha256HashOfBinaryFile;
4
+ exports.validateBufferOfHeaders = validateBufferOfHeaders;
5
+ exports.workBNtoBuffer = workBNtoBuffer;
6
+ exports.isMoreWork = isMoreWork;
7
+ exports.addWork = addWork;
8
+ exports.subWork = subWork;
9
+ exports.convertBitsToTarget = convertBitsToTarget;
10
+ exports.convertBitsToWork = convertBitsToWork;
11
+ exports.deserializeBaseBlockHeaders = deserializeBaseBlockHeaders;
12
+ exports.deserializeBlockHeaders = deserializeBlockHeaders;
13
+ exports.extractHashesAndRoots = extractHashesAndRoots;
14
+ exports.validateHeaderFormat = validateHeaderFormat;
15
+ exports.validateHeaderDifficulty = validateHeaderDifficulty;
16
+ exports.blockHash = blockHash;
17
+ exports.serializeBlockHeader = serializeBlockHeader;
18
+ exports.deserializeBlockHeader = deserializeBlockHeader;
19
+ exports.genesisHeader = genesisHeader;
20
+ exports.genesisBuffer = genesisBuffer;
21
+ exports.swapByteOrder = swapByteOrder;
22
+ exports.convertUint32ToBuffer = convertUint32ToBuffer;
23
+ exports.writeUInt32LE = writeUInt32LE;
24
+ exports.writeUInt32BE = writeUInt32BE;
25
+ exports.readUInt32LE = readUInt32LE;
26
+ exports.readUInt32BE = readUInt32BE;
27
+ exports.convertBufferToUint32 = convertBufferToUint32;
28
+ const dirtyHashes_1 = require("./dirtyHashes");
29
+ const sdk_1 = require("@bsv/sdk");
30
+ const fs_1 = require("fs");
31
+ const utilityHelpers_buffer_1 = require("../../../../utility/utilityHelpers.buffer");
32
+ const utilityHelpers_1 = require("../../../../utility/utilityHelpers");
33
+ /**
34
+ * Computes sha256 hash of file contents read as bytes with no encoding.
35
+ * @param filepath Full filepath to file.
36
+ * @param bufferSize Optional read buffer size to use. Defaults to 80,000 bytes.
37
+ * @returns `{hash, length}` where `hash` is base64 string form of file hash and `length` is file length in bytes.
38
+ */
39
+ async function sha256HashOfBinaryFile(filepath, bufferSize = 80000) {
40
+ const file = await fs_1.promises.open(filepath, 'r');
41
+ try {
42
+ let length = 0;
43
+ const sha256 = new sdk_1.Hash.SHA256();
44
+ const readBuf = Buffer.alloc(bufferSize);
45
+ // eslint-disable-next-line no-constant-condition
46
+ while (true) {
47
+ const rr = await file.read(readBuf, 0, readBuf.length);
48
+ if (!rr.bytesRead)
49
+ break;
50
+ length += rr.bytesRead;
51
+ sha256.update((0, utilityHelpers_buffer_1.asArray)(rr.buffer));
52
+ }
53
+ return { hash: sdk_1.Utils.toBase64(sha256.digest()), length };
54
+ }
55
+ finally {
56
+ await file.close();
57
+ }
58
+ }
59
+ /**
60
+ * Validate headers contained in an array of bytes. The headers must be consecutive block headers, 80 bytes long,
61
+ * where the hash of each header equals the previousHash of the following header.
62
+ * @param buffer Buffer of headers to be validated.
63
+ * @param previousHash Expected previousHash of first header.
64
+ * @param offset Optional starting offset within `buffer`.
65
+ * @param count Optional number of headers to validate. Validates to end of buffer if missing.
66
+ * @returns Header hash of last header validated or previousHash if there where none.
67
+ */
68
+ function validateBufferOfHeaders(buffer, previousHash, offset = 0, count = -1) {
69
+ if (count < 0)
70
+ count = Math.floor((buffer.length - offset) / 80);
71
+ count = Math.max(0, count);
72
+ let lastHeaderHash = previousHash;
73
+ for (let i = 0; i < count; i++) {
74
+ const headerStart = offset + i * 80;
75
+ const headerEnd = headerStart + 80;
76
+ if (headerEnd > buffer.length) {
77
+ throw {
78
+ message: `header ${i} missing bytes for header at offset ${headerStart} in buffer of length ${buffer.length}`
79
+ };
80
+ }
81
+ const header = buffer.slice(headerStart, headerEnd);
82
+ const hashPrev = (0, utilityHelpers_buffer_1.asString)(header.slice(4, 36).reverse());
83
+ if (lastHeaderHash !== hashPrev)
84
+ throw { message: `header ${i} invalid previousHash ${lastHeaderHash} vs ${hashPrev}` };
85
+ lastHeaderHash = (0, utilityHelpers_buffer_1.asString)((0, utilityHelpers_1.doubleSha256BE)(header));
86
+ (0, dirtyHashes_1.validateAgainstDirtyHashes)(lastHeaderHash);
87
+ }
88
+ return lastHeaderHash;
89
+ }
90
+ /**
91
+ * @param work chainWork as a BigNumber
92
+ * @returns Converted chainWork value from BN to hex string of 32 bytes.
93
+ */
94
+ function workBNtoBuffer(work) {
95
+ return work.toString(16).padStart(64, '0');
96
+ }
97
+ /**
98
+ * Returns true if work1 is more work (greater than) work2
99
+ */
100
+ function isMoreWork(work1, work2) {
101
+ return new sdk_1.BigNumber((0, utilityHelpers_buffer_1.asArray)(work1), 16).gt(new sdk_1.BigNumber((0, utilityHelpers_buffer_1.asArray)(work2), 16));
102
+ }
103
+ /**
104
+ * Add two Buffer encoded chainwork values
105
+ * @returns Sum of work1 + work2 as Buffer encoded chainWork value
106
+ */
107
+ function addWork(work1, work2) {
108
+ const sum = new sdk_1.BigNumber((0, utilityHelpers_buffer_1.asArray)(work1), 16).add(new sdk_1.BigNumber((0, utilityHelpers_buffer_1.asArray)(work2), 16));
109
+ return workBNtoBuffer(sum);
110
+ }
111
+ /**
112
+ * Subtract Buffer encoded chainwork values
113
+ * @returns work1 - work2 as Buffer encoded chainWork value
114
+ */
115
+ function subWork(work1, work2) {
116
+ const sum = new sdk_1.BigNumber((0, utilityHelpers_buffer_1.asArray)(work1), 16).sub(new sdk_1.BigNumber((0, utilityHelpers_buffer_1.asArray)(work2), 16));
117
+ return workBNtoBuffer(sum);
118
+ }
119
+ /**
120
+ * Computes "target" value for 4 byte Bitcoin block header "bits" value.
121
+ * @param bits number or converted from Buffer using `readUint32LE`
122
+ * @returns 32 byte Buffer with "target" value
123
+ */
124
+ function convertBitsToTarget(bits) {
125
+ if (Array.isArray(bits))
126
+ bits = readUInt32LE(bits, 0);
127
+ const shift = (bits >> 24) & 0xff;
128
+ const data = bits & 0x007fffff;
129
+ const target = new sdk_1.BigNumber(data);
130
+ if (shift <= 3) {
131
+ target.iushrn(8 * (3 - shift));
132
+ }
133
+ else {
134
+ target.iushln(8 * (shift - 3));
135
+ }
136
+ return target;
137
+ }
138
+ /**
139
+ * Computes "chainWork" value for 4 byte Bitcoin block header "bits" value.
140
+ * @param bits number or converted from Buffer using `readUint32LE`
141
+ * @returns 32 byte Buffer with "chainWork" value
142
+ */
143
+ function convertBitsToWork(bits) {
144
+ const target = convertBitsToTarget(bits);
145
+ // convert target to work
146
+ const work = target.notn(256).div(target.addn(1)).addn(1);
147
+ return work.toString(16).padStart(64, '0');
148
+ }
149
+ function deserializeBaseBlockHeaders(buffer, offset = 0, count) {
150
+ const headers = [];
151
+ while ((!count || headers.length < count) && offset + 80 <= buffer.length && offset >= 0) {
152
+ headers.push(deserializeBlockHeader(buffer, offset));
153
+ offset += 80;
154
+ }
155
+ return headers;
156
+ }
157
+ function deserializeBlockHeaders(firstHeight, buffer, offset = 0, count) {
158
+ const headers = [];
159
+ let nextHeight = firstHeight;
160
+ while ((!count || headers.length < count) && offset + 80 <= buffer.length && offset >= 0) {
161
+ const baseBuffer = buffer.slice(offset, offset + 80);
162
+ const base = deserializeBlockHeader(baseBuffer);
163
+ const header = {
164
+ ...base,
165
+ height: nextHeight++,
166
+ hash: (0, utilityHelpers_buffer_1.asString)(blockHash(baseBuffer))
167
+ };
168
+ headers.push(header);
169
+ offset += 80;
170
+ }
171
+ return headers;
172
+ }
173
+ /**
174
+ * Extract an array of block hashes and of merkleRoots from a buffer of serialized block headers.
175
+ * @param buffer
176
+ */
177
+ function extractHashesAndRoots(buffer) {
178
+ const hashes = [];
179
+ const merkleRoots = [];
180
+ for (let i = 0; i < buffer.length / 80; i++) {
181
+ const offset = i * 80;
182
+ const hash = (0, utilityHelpers_buffer_1.asBuffer)((0, utilityHelpers_1.doubleSha256LE)((0, utilityHelpers_buffer_1.asArray)(buffer.subarray(offset, 80 + offset))).reverse());
183
+ const merkleRoot = buffer.subarray(36 + offset, 68 + offset).reverse();
184
+ hashes.push(hash);
185
+ merkleRoots.push(merkleRoot);
186
+ }
187
+ return { hashes, merkleRoots };
188
+ }
189
+ /**
190
+ * Given a block header, ensures that its format is correct. This does not
191
+ * check its difficulty or validity relative to the chain of headers.
192
+ *
193
+ * Throws on format errors.
194
+ *
195
+ * @param The header to validate
196
+ *
197
+ * @returns true if the header is correctly formatted
198
+ */
199
+ function validateHeaderFormat(header) {
200
+ const ALLOWED_KEYS = {
201
+ version: true,
202
+ previousHash: true,
203
+ merkleRoot: true,
204
+ time: true,
205
+ bits: true,
206
+ nonce: true,
207
+ height: true,
208
+ hash: true
209
+ };
210
+ const UINT_MAX = 0xffffffff;
211
+ /**
212
+ * Root object checks
213
+ */
214
+ if (typeof header === 'undefined') {
215
+ throw new Error('Missing header.');
216
+ }
217
+ if (typeof header !== 'object') {
218
+ throw new Error('Header must be an object.');
219
+ }
220
+ if (!Object.keys(header).every(key => ALLOWED_KEYS[key])) {
221
+ throw new Error('Header contains extra properties.');
222
+ }
223
+ /**
224
+ * Version
225
+ */
226
+ if (typeof header.version !== 'number') {
227
+ throw new Error('Header version must be a number.');
228
+ }
229
+ if (!Number.isInteger(header.version)) {
230
+ throw new Error('Header version must be an integer.');
231
+ }
232
+ if (header.version < 0 || header.version > UINT_MAX) {
233
+ throw new Error(`Header version must be between 0 and ${UINT_MAX}.`);
234
+ }
235
+ /**
236
+ * Height
237
+ */
238
+ if (typeof header.height !== 'number') {
239
+ throw new Error('Header height must be a number.');
240
+ }
241
+ if (!Number.isInteger(header.height)) {
242
+ throw new Error('Header height must be an integer.');
243
+ }
244
+ if (header.height < 0 || header.height > UINT_MAX / 2) {
245
+ throw new Error(`Header version must be between 0 and ${UINT_MAX / 2}.`);
246
+ }
247
+ /**
248
+ * Previous hash
249
+ */
250
+ if (header.previousHash.length !== 64) {
251
+ throw new Error('Header previousHash must be 32 hex bytes.');
252
+ }
253
+ /**
254
+ * Merkle root
255
+ */
256
+ if (header.merkleRoot.length !== 64) {
257
+ throw new Error('Header merkleRoot must be 32 hex bytes.');
258
+ }
259
+ /**
260
+ * Time
261
+ */
262
+ if (typeof header.time !== 'number') {
263
+ throw new Error('Header time must be a number.');
264
+ }
265
+ if (!Number.isInteger(header.time)) {
266
+ throw new Error('Header time must be an integer.');
267
+ }
268
+ if (header.time < 0 || header.time > UINT_MAX) {
269
+ throw new Error(`Header time must be between 0 and ${UINT_MAX}.`);
270
+ }
271
+ /**
272
+ * Bits
273
+ */
274
+ if (typeof header.bits !== 'number') {
275
+ throw new Error('Header bits must be a number.');
276
+ }
277
+ if (!Number.isInteger(header.bits)) {
278
+ throw new Error('Header bits must be an integer.');
279
+ }
280
+ if (header.bits < 0 || header.bits > UINT_MAX) {
281
+ throw new Error(`Header bits must be between 0 and ${UINT_MAX}.`);
282
+ }
283
+ /**
284
+ * Nonce
285
+ */
286
+ if (typeof header.nonce !== 'number') {
287
+ throw new Error('Header nonce must be a number.');
288
+ }
289
+ if (!Number.isInteger(header.nonce)) {
290
+ throw new Error('Header nonce must be an integer.');
291
+ }
292
+ if (header.nonce < 0 || header.nonce > UINT_MAX) {
293
+ throw new Error(`Header nonce must be between 0 and ${UINT_MAX}.`);
294
+ }
295
+ /**
296
+ * Hash
297
+ */
298
+ if (header.hash.length !== 64) {
299
+ throw new Error('Header hash must be 32 hex bytes.');
300
+ }
301
+ if (header.hash !== (0, utilityHelpers_buffer_1.asString)(blockHash(header))) {
302
+ throw new Error('Header hash is invalid.');
303
+ }
304
+ }
305
+ /**
306
+ * Ensures that a header has a valid proof-of-work
307
+ * Requires chain is 'main'
308
+ *
309
+ * @param header The header to validate
310
+ *
311
+ * @returns true if the header is valid
312
+ */
313
+ function validateHeaderDifficulty(hash, bits) {
314
+ const hashBN = new sdk_1.BigNumber((0, utilityHelpers_buffer_1.asArray)(hash));
315
+ const target = convertBitsToTarget(bits);
316
+ if (hashBN.lte(target))
317
+ return true;
318
+ throw new Error('Block hash is not less than specified target.');
319
+ }
320
+ /**
321
+ * Computes double sha256 hash of bitcoin block header
322
+ * bytes are reversed to bigendian order
323
+ *
324
+ * If header is a Buffer, it is required to 80 bytes long
325
+ * and in standard block header serialized encoding.
326
+ *
327
+ * @returns doule sha256 hash of header bytes reversed
328
+ * @publicbody
329
+ */
330
+ function blockHash(header) {
331
+ const a = !Array.isArray(header) ? serializeBlockHeader(header) : header;
332
+ if (a.length !== 80)
333
+ throw new Error('Block header must be 80 bytes long.');
334
+ return (0, utilityHelpers_buffer_1.asString)((0, utilityHelpers_1.doubleSha256BE)(a));
335
+ }
336
+ /**
337
+ * Serializes a block header as an 80 byte Buffer.
338
+ * The exact serialized format is defined in the Bitcoin White Paper
339
+ * such that computing a double sha256 hash of the buffer computes
340
+ * the block hash for the header.
341
+ * @returns 80 byte Buffer
342
+ * @publicbody
343
+ */
344
+ function serializeBlockHeader(header, buffer, offset) {
345
+ const writer = new sdk_1.Utils.Writer();
346
+ writer.writeUInt32LE(header.version);
347
+ writer.write((0, utilityHelpers_buffer_1.asArray)(header.previousHash).reverse());
348
+ writer.write((0, utilityHelpers_buffer_1.asArray)(header.merkleRoot).reverse());
349
+ writer.writeUInt32LE(header.time);
350
+ writer.writeUInt32LE(header.bits);
351
+ writer.writeUInt32LE(header.nonce);
352
+ const data = writer.toArray();
353
+ if (buffer) {
354
+ offset || (offset = 0);
355
+ buffer.splice(offset, buffer.length, ...data);
356
+ }
357
+ return data;
358
+ }
359
+ /**
360
+ * Deserialize a block header from an 80 byte buffer
361
+ * @publicbody
362
+ */
363
+ function deserializeBlockHeader(buffer, offset = 0) {
364
+ const reader = new sdk_1.Utils.Reader(buffer, offset);
365
+ const header = {
366
+ version: reader.readUInt32LE(),
367
+ previousHash: (0, utilityHelpers_buffer_1.asString)(reader.read(32).reverse()),
368
+ merkleRoot: (0, utilityHelpers_buffer_1.asString)(reader.read(32).reverse()),
369
+ time: reader.readUInt32LE(),
370
+ bits: reader.readUInt32LE(),
371
+ nonce: reader.readUInt32LE()
372
+ };
373
+ return header;
374
+ }
375
+ /**
376
+ * Returns the genesis block for the specified chain.
377
+ * @publicbody
378
+ */
379
+ function genesisHeader(chain) {
380
+ return chain === 'main'
381
+ ? {
382
+ version: 1,
383
+ previousHash: '0000000000000000000000000000000000000000000000000000000000000000',
384
+ merkleRoot: '4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b',
385
+ time: 1231006505,
386
+ bits: 486604799,
387
+ nonce: 2083236893,
388
+ height: 0,
389
+ hash: '000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f'
390
+ }
391
+ : {
392
+ version: 1,
393
+ previousHash: '0000000000000000000000000000000000000000000000000000000000000000',
394
+ merkleRoot: '4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b',
395
+ time: 1296688602,
396
+ bits: 486604799,
397
+ nonce: 414098458,
398
+ height: 0,
399
+ hash: '000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943'
400
+ };
401
+ }
402
+ /**
403
+ * Returns the genesis block for the specified chain.
404
+ * @publicbody
405
+ */
406
+ function genesisBuffer(chain) {
407
+ return serializeBlockHeader(genesisHeader(chain));
408
+ }
409
+ /**
410
+ * Returns a copy of a Buffer with byte order reversed.
411
+ * @returns new buffer with byte order reversed.
412
+ * @publicbody
413
+ */
414
+ function swapByteOrder(buffer) {
415
+ return buffer.slice().reverse();
416
+ }
417
+ /**
418
+ * @param num a number value in the Uint32 value range
419
+ * @param littleEndian true for little-endian byte order in Buffer
420
+ * @returns four byte buffer with Uint32 number encoded
421
+ * @publicbody
422
+ */
423
+ function convertUint32ToBuffer(n, littleEndian = true) {
424
+ const a = [
425
+ n & 0xff, // lowest byte
426
+ (n >> 8) & 0xff,
427
+ (n >> 16) & 0xff,
428
+ (n >> 24) & 0xff // highest byte
429
+ ];
430
+ return littleEndian ? a : a.reverse();
431
+ }
432
+ function writeUInt32LE(n, a, offset) {
433
+ a[offset++] = n & 0xff; // lowest byte
434
+ a[offset++] = (n >> 8) & 0xff;
435
+ a[offset++] = (n >> 16) & 0xff;
436
+ a[offset++] = (n >> 24) & 0xff; // highest byte
437
+ return offset;
438
+ }
439
+ function writeUInt32BE(n, a, offset) {
440
+ a[offset++] = (n >> 24) & 0xff; // highest byte
441
+ a[offset++] = (n >> 16) & 0xff;
442
+ a[offset++] = (n >> 8) & 0xff;
443
+ a[offset++] = n & 0xff; // lowest byte
444
+ return offset;
445
+ }
446
+ function readUInt32LE(a, offset) {
447
+ return a[offset++] | (a[offset++] << 8) | (a[offset++] << 16) | (a[offset++] << 24);
448
+ }
449
+ function readUInt32BE(a, offset) {
450
+ return (a[offset++] << 24) | (a[offset++] << 16) | (a[offset++] << 8) | a[offset++];
451
+ }
452
+ /**
453
+ * @param buffer four byte buffer with Uint32 number encoded
454
+ * @param littleEndian true for little-endian byte order in Buffer
455
+ * @returns a number value in the Uint32 value range
456
+ * @publicbody
457
+ */
458
+ function convertBufferToUint32(buffer, littleEndian = true) {
459
+ const a = littleEndian ? buffer : buffer.slice().reverse();
460
+ const n = a[0] | (a[1] << 8) | (a[2] << 16) | (a[3] << 24);
461
+ return n;
462
+ }
463
+ //# sourceMappingURL=blockHeaderUtilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockHeaderUtilities.js","sourceRoot":"","sources":["../../../../../../src/services/chaintracker/chaintracks/util/blockHeaderUtilities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * These hashes are for blocks that are to known to have violated the Bitcoin
3
+ * protocol. Regardless of the amount of proof-of-work that chains built on top
4
+ * of them may have accumulated, they cannot be considered valid Bitcoin blocks.
5
+ *
6
+ * In the first instance, segregating witness data from transactions is not
7
+ * part of the design of Bitcoin.
8
+ *
9
+ * In the second instance, adding new opcodes to be used when evaluating
10
+ * scripts is also not allowed.
11
+ */
12
+ export declare const dirtyHashes: {
13
+ '00000000000000000019f112ec0a9982926f1258cdcc558dd7c3b7e5dc7fa148': string;
14
+ '0000000000000000004626ff6e3b936941d341c5932ece4357eeccac44e6d56c': string;
15
+ };
16
+ /**
17
+ * Throws Error if blockHash is in the dirtyHashes list.
18
+ */
19
+ export declare function validateAgainstDirtyHashes(blockHash: string): void;
20
+ //# sourceMappingURL=dirtyHashes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dirtyHashes.d.ts","sourceRoot":"","sources":["../../../../../../src/services/chaintracker/chaintracks/util/dirtyHashes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW;;;CAQvB,CAAA;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAIlE"}