@bsv/wallet-toolbox 2.4.0 → 2.4.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 (179) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +45 -0
  3. package/docs/client.md +493 -168
  4. package/docs/managed-change-policy.md +79 -0
  5. package/docs/services.md +61 -26
  6. package/docs/storage.md +417 -69
  7. package/docs/wallet.md +465 -155
  8. package/out/src/Wallet.d.ts +5 -1
  9. package/out/src/Wallet.d.ts.map +1 -1
  10. package/out/src/Wallet.js +14 -8
  11. package/out/src/Wallet.js.map +1 -1
  12. package/out/src/WalletPermissionsManager.d.ts +18 -0
  13. package/out/src/WalletPermissionsManager.d.ts.map +1 -1
  14. package/out/src/WalletPermissionsManager.js +56 -9
  15. package/out/src/WalletPermissionsManager.js.map +1 -1
  16. package/out/src/monitor/tasks/TaskArcSSE.d.ts.map +1 -1
  17. package/out/src/monitor/tasks/TaskArcSSE.js +46 -18
  18. package/out/src/monitor/tasks/TaskArcSSE.js.map +1 -1
  19. package/out/src/monitor/tasks/TaskCheckForProofs.d.ts.map +1 -1
  20. package/out/src/monitor/tasks/TaskCheckForProofs.js +10 -10
  21. package/out/src/monitor/tasks/TaskCheckForProofs.js.map +1 -1
  22. package/out/src/monitor/tasks/TaskReviewStatus.d.ts.map +1 -1
  23. package/out/src/monitor/tasks/TaskReviewStatus.js +7 -2
  24. package/out/src/monitor/tasks/TaskReviewStatus.js.map +1 -1
  25. package/out/src/monitor/tasks/TaskUnFail.d.ts.map +1 -1
  26. package/out/src/monitor/tasks/TaskUnFail.js +2 -57
  27. package/out/src/monitor/tasks/TaskUnFail.js.map +1 -1
  28. package/out/src/sdk/WalletServices.interfaces.d.ts +1 -0
  29. package/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
  30. package/out/src/sdk/WalletStorage.interfaces.d.ts +10 -4
  31. package/out/src/sdk/WalletStorage.interfaces.d.ts.map +1 -1
  32. package/out/src/sdk/types.d.ts +10 -1
  33. package/out/src/sdk/types.d.ts.map +1 -1
  34. package/out/src/sdk/types.js +16 -2
  35. package/out/src/sdk/types.js.map +1 -1
  36. package/out/src/services/Services.d.ts.map +1 -1
  37. package/out/src/services/Services.js +39 -19
  38. package/out/src/services/Services.js.map +1 -1
  39. package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.d.ts.map +1 -1
  40. package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.js +8 -0
  41. package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.js.map +1 -1
  42. package/out/src/services/chaintracker/chaintracks/GoChaintracksServiceClient.d.ts.map +1 -1
  43. package/out/src/services/chaintracker/chaintracks/GoChaintracksServiceClient.js +4 -0
  44. package/out/src/services/chaintracker/chaintracks/GoChaintracksServiceClient.js.map +1 -1
  45. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.d.ts.map +1 -1
  46. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js +2 -0
  47. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js.map +1 -1
  48. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.d.ts.map +1 -1
  49. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js +2 -1
  50. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js.map +1 -1
  51. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.d.ts.map +1 -1
  52. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js +1 -0
  53. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js.map +1 -1
  54. package/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -1
  55. package/out/src/services/createDefaultWalletServicesOptions.js +17 -3
  56. package/out/src/services/createDefaultWalletServicesOptions.js.map +1 -1
  57. package/out/src/services/networkConfig.d.ts +29 -0
  58. package/out/src/services/networkConfig.d.ts.map +1 -0
  59. package/out/src/services/networkConfig.js +54 -0
  60. package/out/src/services/networkConfig.js.map +1 -0
  61. package/out/src/services/providers/Arcade.d.ts +1 -0
  62. package/out/src/services/providers/Arcade.d.ts.map +1 -1
  63. package/out/src/services/providers/Arcade.js +45 -14
  64. package/out/src/services/providers/Arcade.js.map +1 -1
  65. package/out/src/services/providers/SdkWhatsOnChain.d.ts +1 -1
  66. package/out/src/services/providers/SdkWhatsOnChain.d.ts.map +1 -1
  67. package/out/src/services/providers/SdkWhatsOnChain.js +12 -4
  68. package/out/src/services/providers/SdkWhatsOnChain.js.map +1 -1
  69. package/out/src/signer/methods/buildSignableTransaction.d.ts.map +1 -1
  70. package/out/src/signer/methods/buildSignableTransaction.js +3 -1
  71. package/out/src/signer/methods/buildSignableTransaction.js.map +1 -1
  72. package/out/src/signer/methods/completeSignedTransaction.d.ts.map +1 -1
  73. package/out/src/signer/methods/completeSignedTransaction.js +5 -3
  74. package/out/src/signer/methods/completeSignedTransaction.js.map +1 -1
  75. package/out/src/signer/methods/createAction.d.ts.map +1 -1
  76. package/out/src/signer/methods/createAction.js +12 -5
  77. package/out/src/signer/methods/createAction.js.map +1 -1
  78. package/out/src/signer/methods/internalizeAction.d.ts +6 -4
  79. package/out/src/signer/methods/internalizeAction.d.ts.map +1 -1
  80. package/out/src/signer/methods/internalizeAction.js +12 -7
  81. package/out/src/signer/methods/internalizeAction.js.map +1 -1
  82. package/out/src/signer/methods/resultBeef.d.ts +4 -0
  83. package/out/src/signer/methods/resultBeef.d.ts.map +1 -0
  84. package/out/src/signer/methods/resultBeef.js +12 -0
  85. package/out/src/signer/methods/resultBeef.js.map +1 -0
  86. package/out/src/signer/methods/signAction.d.ts.map +1 -1
  87. package/out/src/signer/methods/signAction.js +6 -1
  88. package/out/src/signer/methods/signAction.js.map +1 -1
  89. package/out/src/storage/StorageIdb.d.ts +2 -1
  90. package/out/src/storage/StorageIdb.d.ts.map +1 -1
  91. package/out/src/storage/StorageIdb.js +12 -5
  92. package/out/src/storage/StorageIdb.js.map +1 -1
  93. package/out/src/storage/StorageKnex.d.ts +2 -1
  94. package/out/src/storage/StorageKnex.d.ts.map +1 -1
  95. package/out/src/storage/StorageKnex.js +27 -2
  96. package/out/src/storage/StorageKnex.js.map +1 -1
  97. package/out/src/storage/StorageProvider.d.ts +17 -0
  98. package/out/src/storage/StorageProvider.d.ts.map +1 -1
  99. package/out/src/storage/StorageProvider.js +206 -13
  100. package/out/src/storage/StorageProvider.js.map +1 -1
  101. package/out/src/storage/index.all.d.ts +2 -0
  102. package/out/src/storage/index.all.d.ts.map +1 -1
  103. package/out/src/storage/index.all.js +2 -0
  104. package/out/src/storage/index.all.js.map +1 -1
  105. package/out/src/storage/index.client.d.ts +1 -0
  106. package/out/src/storage/index.client.d.ts.map +1 -1
  107. package/out/src/storage/index.client.js +1 -0
  108. package/out/src/storage/index.client.js.map +1 -1
  109. package/out/src/storage/methods/ListOutputsSpecOp.d.ts +2 -0
  110. package/out/src/storage/methods/ListOutputsSpecOp.d.ts.map +1 -1
  111. package/out/src/storage/methods/ListOutputsSpecOp.js +13 -1
  112. package/out/src/storage/methods/ListOutputsSpecOp.js.map +1 -1
  113. package/out/src/storage/methods/createAction.d.ts.map +1 -1
  114. package/out/src/storage/methods/createAction.js +23 -10
  115. package/out/src/storage/methods/createAction.js.map +1 -1
  116. package/out/src/storage/methods/getBeefForTransaction.d.ts.map +1 -1
  117. package/out/src/storage/methods/getBeefForTransaction.js +47 -24
  118. package/out/src/storage/methods/getBeefForTransaction.js.map +1 -1
  119. package/out/src/storage/methods/internalizeAction.d.ts +6 -4
  120. package/out/src/storage/methods/internalizeAction.d.ts.map +1 -1
  121. package/out/src/storage/methods/internalizeAction.js +26 -15
  122. package/out/src/storage/methods/internalizeAction.js.map +1 -1
  123. package/out/src/storage/methods/listOutputsIdb.d.ts.map +1 -1
  124. package/out/src/storage/methods/listOutputsIdb.js +21 -3
  125. package/out/src/storage/methods/listOutputsIdb.js.map +1 -1
  126. package/out/src/storage/methods/listOutputsKnex.d.ts.map +1 -1
  127. package/out/src/storage/methods/listOutputsKnex.js +14 -0
  128. package/out/src/storage/methods/listOutputsKnex.js.map +1 -1
  129. package/out/src/storage/methods/managedChange.d.ts +26 -0
  130. package/out/src/storage/methods/managedChange.d.ts.map +1 -0
  131. package/out/src/storage/methods/managedChange.js +43 -0
  132. package/out/src/storage/methods/managedChange.js.map +1 -0
  133. package/out/src/storage/methods/processAction.d.ts.map +1 -1
  134. package/out/src/storage/methods/processAction.js +5 -4
  135. package/out/src/storage/methods/processAction.js.map +1 -1
  136. package/out/src/storage/remoting/BinaryJson.d.ts +10 -0
  137. package/out/src/storage/remoting/BinaryJson.d.ts.map +1 -0
  138. package/out/src/storage/remoting/BinaryJson.js +172 -0
  139. package/out/src/storage/remoting/BinaryJson.js.map +1 -0
  140. package/out/src/storage/remoting/KnexSessionManager.d.ts +37 -0
  141. package/out/src/storage/remoting/KnexSessionManager.d.ts.map +1 -0
  142. package/out/src/storage/remoting/KnexSessionManager.js +198 -0
  143. package/out/src/storage/remoting/KnexSessionManager.js.map +1 -0
  144. package/out/src/storage/remoting/StorageClient.d.ts +2 -2
  145. package/out/src/storage/remoting/StorageClient.d.ts.map +1 -1
  146. package/out/src/storage/remoting/StorageClient.js +14 -5
  147. package/out/src/storage/remoting/StorageClient.js.map +1 -1
  148. package/out/src/storage/remoting/StorageClientBase.d.ts +11 -1
  149. package/out/src/storage/remoting/StorageClientBase.d.ts.map +1 -1
  150. package/out/src/storage/remoting/StorageClientBase.js +4 -1
  151. package/out/src/storage/remoting/StorageClientBase.js.map +1 -1
  152. package/out/src/storage/remoting/StorageMobile.d.ts +2 -2
  153. package/out/src/storage/remoting/StorageMobile.d.ts.map +1 -1
  154. package/out/src/storage/remoting/StorageMobile.js +14 -5
  155. package/out/src/storage/remoting/StorageMobile.js.map +1 -1
  156. package/out/src/storage/remoting/StorageServer.d.ts +10 -0
  157. package/out/src/storage/remoting/StorageServer.d.ts.map +1 -1
  158. package/out/src/storage/remoting/StorageServer.js +48 -21
  159. package/out/src/storage/remoting/StorageServer.js.map +1 -1
  160. package/out/src/storage/schema/KnexMigrations.d.ts +2 -0
  161. package/out/src/storage/schema/KnexMigrations.d.ts.map +1 -1
  162. package/out/src/storage/schema/KnexMigrations.js +34 -1
  163. package/out/src/storage/schema/KnexMigrations.js.map +1 -1
  164. package/out/src/storage/schema/tables/TableAuthSession.d.ts +20 -0
  165. package/out/src/storage/schema/tables/TableAuthSession.d.ts.map +1 -0
  166. package/out/src/storage/schema/tables/TableAuthSession.js +15 -0
  167. package/out/src/storage/schema/tables/TableAuthSession.js.map +1 -0
  168. package/out/src/storage/schema/tables/index.d.ts +1 -0
  169. package/out/src/storage/schema/tables/index.d.ts.map +1 -1
  170. package/out/src/storage/schema/tables/index.js +1 -0
  171. package/out/src/storage/schema/tables/index.js.map +1 -1
  172. package/out/src/storage/storageProviderHelpers.d.ts +5 -4
  173. package/out/src/storage/storageProviderHelpers.d.ts.map +1 -1
  174. package/out/src/storage/storageProviderHelpers.js +7 -6
  175. package/out/src/storage/storageProviderHelpers.js.map +1 -1
  176. package/out/src/utility/utilityHelpers.d.ts.map +1 -1
  177. package/out/src/utility/utilityHelpers.js +2 -0
  178. package/out/src/utility/utilityHelpers.js.map +1 -1
  179. package/package.json +6 -5
@@ -0,0 +1,79 @@
1
+ # Managed change, sweeping, and recovery
2
+
3
+ The default basket is the wallet's funding pool. An output being physically
4
+ stored in that basket is not, by itself, proof that the wallet can spend it.
5
+ Automatic funding and wallet balance therefore use the managed-change policy
6
+ below instead of trusting basket membership or the locking script alone.
7
+
8
+ ## Output classes
9
+
10
+ A **managed change output** has all of the following metadata:
11
+
12
+ - `type: 'P2PKH'`
13
+ - `change: true`
14
+ - `providedBy: 'storage'`
15
+ - `purpose: 'change'`
16
+ - non-empty `derivationPrefix` and `derivationSuffix`
17
+
18
+ Here, `type: 'P2PKH'` is an operational signer type, not merely a description
19
+ of the script. It selects the BRC-29 unlocking path. A raw P2PKH output without
20
+ matching derivation metadata is not managed change and must not be selected by
21
+ the wallet automatically.
22
+
23
+ A **custom output** belongs to an application-defined protocol. It is normally
24
+ stored outside the default basket with `type: 'custom'`, `change: false`, and
25
+ `providedBy: 'you'`. Custom outputs are discoverable and may be explicitly
26
+ spent by application logic, but are not wallet balance and are never automatic
27
+ fee inputs.
28
+
29
+ ## Enforcement
30
+
31
+ The same managed-change predicate is applied to:
32
+
33
+ - change-input counting and allocation in Knex/SQLite/MySQL and IndexedDB;
34
+ - the default wallet balance and `balanceAndUtxos()` results; and
35
+ - validation of `noSendChange` inputs.
36
+
37
+ Raw administrative `listOutputs({ basket: 'default' })` remains unfiltered on
38
+ purpose. This makes incompatible legacy rows visible for diagnosis and recovery
39
+ without allowing them into balance or automatic funding.
40
+
41
+ ## `internalizeAction` rules
42
+
43
+ | Request | New output | Existing custom output | Existing managed change |
44
+ | --- | --- | --- | --- |
45
+ | `wallet payment` | Store as managed change in `default` | Promote to managed change after BRC-29 script verification | Idempotent when already in `default` |
46
+ | `basket insertion` to a non-default basket | Store as custom | Move/update as custom; no wallet-balance adjustment | Reject; managed change cannot be reclassified |
47
+ | `basket insertion` to `default` | Reject | Reject | Reject |
48
+
49
+ The wallet signer verifies that `paymentRemittance` derives the transaction
50
+ output's locking script before storage can promote it. This is the supported
51
+ way to repair a genuine BRC-29 payment that was previously classified as
52
+ custom. Merely recognizing a P2PKH locking script is not enough.
53
+
54
+ ## Sweeping and recovery
55
+
56
+ "Sweep" means moving an incompatible custom row out of the default basket with
57
+ a `basket insertion` into a named, non-default recovery basket. This is a
58
+ metadata repair: the output remains custom and wallet balance does not change.
59
+
60
+ There are two valid recovery choices for a legacy custom row in `default`:
61
+
62
+ 1. If it is a genuine payment to this wallet under BRC-29, internalize it as a
63
+ `wallet payment` with the correct derivation prefix, derivation suffix, and
64
+ sender identity key. Successful verification promotes it to managed change
65
+ and adds its value to wallet balance.
66
+ 2. Otherwise, sweep it to a non-default basket. The application can then apply
67
+ its own unlocking and lifecycle rules explicitly.
68
+
69
+ Do not repair rows by directly changing `type`, `change`, or derivation fields.
70
+ That bypasses the BRC-29 ownership check and can make balance appear spendable
71
+ when the wallet does not possess the required key path.
72
+
73
+ ## BRC-29 remittance module
74
+
75
+ `Brc29RemittanceModule` always accepts settlements through the `wallet payment`
76
+ protocol. The deprecated `internalizeProtocol: 'basket insertion'` setting is
77
+ rejected because it supplied no insertion remittance and would classify a
78
+ recipient payment as a custom application output instead of spendable wallet
79
+ balance.
package/docs/services.md CHANGED
@@ -4732,7 +4732,7 @@ export default class SdkWhatsOnChain implements ChainTracker {
4732
4732
  readonly apiKey: string;
4733
4733
  protected readonly URL: string;
4734
4734
  protected readonly httpClient: HttpClient;
4735
- constructor(network: "main" | "test" | "stn" | "ttn" = "main", config: WhatsOnChainConfig = {})
4735
+ constructor(network: "main" | "test" | "stn" | "ttn" | "tstn" = "main", config: WhatsOnChainConfig = {})
4736
4736
  async isValidRootForHeight(root: string, height: number): Promise<boolean>
4737
4737
  async currentHeight(): Promise<number>
4738
4738
  protected getHttpHeaders(): Record<string, string>
@@ -4744,7 +4744,7 @@ export default class SdkWhatsOnChain implements ChainTracker {
4744
4744
  Constructs an instance of the WhatsOnChain ChainTracker.
4745
4745
 
4746
4746
  ```ts
4747
- constructor(network: "main" | "test" | "stn" | "ttn" = "main", config: WhatsOnChainConfig = {})
4747
+ constructor(network: "main" | "test" | "stn" | "ttn" | "tstn" = "main", config: WhatsOnChainConfig = {})
4748
4748
  ```
4749
4749
 
4750
4750
  Argument Details
@@ -5135,30 +5135,31 @@ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](
5135
5135
 
5136
5136
  | | | |
5137
5137
  | --- | --- | --- |
5138
- | [WocHeadersBulkListener](#function-wocheadersbulklistener) | [deserializeBaseBlockHeaders](#function-deserializebaseblockheaders) | [readUInt32BE](#function-readuint32be) |
5139
- | [WocHeadersBulkListener_test](#function-wocheadersbulklistener_test) | [deserializeBlockHeader](#function-deserializeblockheader) | [readUInt32LE](#function-readuint32le) |
5140
- | [WocHeadersLiveListener](#function-wocheaderslivelistener) | [deserializeBlockHeaders](#function-deserializeblockheaders) | [selectBulkHeaderFiles](#function-selectbulkheaderfiles) |
5141
- | [WocHeadersLiveListener_test](#function-wocheaderslivelistener_test) | [genesisBuffer](#function-genesisbuffer) | [serializeBaseBlockHeader](#function-serializebaseblockheader) |
5142
- | [addWork](#function-addwork) | [genesisHeader](#function-genesisheader) | [serializeBaseBlockHeaders](#function-serializebaseblockheaders) |
5143
- | [arcDefaultUrl](#function-arcdefaulturl) | [getBeefForTxid](#function-getbeeffortxid) | [sha256HashOfBinaryFile](#function-sha256hashofbinaryfile) |
5144
- | [arcGorillaPoolUrl](#function-arcgorillapoolurl) | [getExchangeRatesIo](#function-getexchangeratesio) | [subWork](#function-subwork) |
5145
- | [arcadeDefaultUrl](#function-arcadedefaulturl) | [getWhatsOnChainBlockHeaderByHash](#function-getwhatsonchainblockheaderbyhash) | [swapByteOrder](#function-swapbyteorder) |
5146
- | [blockHash](#function-blockhash) | [handlePostRawTxErrorResponse](#function-handlepostrawtxerrorresponse) | [toBinaryBaseBlockHeader](#function-tobinarybaseblockheader) |
5147
- | [buildChaintracksOptionsWithIngestors](#function-buildchaintracksoptionswithingestors) | [handleScriptHashHistoryCatch](#function-handlescripthashhistorycatch) | [updateChaintracksFiatExchangeRates](#function-updatechaintracksfiatexchangerates) |
5148
- | [classifyMerklePathResponse](#function-classifymerklepathresponse) | [handleScriptHashHistoryResponse](#function-handlescripthashhistoryresponse) | [updateExchangeratesapi](#function-updateexchangeratesapi) |
5149
- | [convertBitsToTarget](#function-convertbitstotarget) | [handleUtxoConnReset](#function-handleutxoconnreset) | [validBulkHeaderFilesByFileHash](#function-validbulkheaderfilesbyfilehash) |
5150
- | [convertBitsToWork](#function-convertbitstowork) | [isArcAcceptedTxStatus](#function-isarcacceptedtxstatus) | [validateAgainstDirtyHashes](#function-validateagainstdirtyhashes) |
5151
- | [convertBufferToUint32](#function-convertbuffertouint32) | [isArcDoubleSpendTxStatus](#function-isarcdoublespendtxstatus) | [validateBufferOfHeaders](#function-validatebufferofheaders) |
5152
- | [convertUint32ToBuffer](#function-convertuint32tobuffer) | [isArcInvalidTxStatus](#function-isarcinvalidtxstatus) | [validateBulkFileData](#function-validatebulkfiledata) |
5153
- | [convertWocToBlockHeaderHex](#function-convertwoctoblockheaderhex) | [isArcServiceErrorStatus](#function-isarcserviceerrorstatus) | [validateGenesisHeader](#function-validategenesisheader) |
5154
- | [createDefaultIdbChaintracksOptions](#function-createdefaultidbchaintracksoptions) | [isBaseBlockHeader](#function-isbaseblockheader) | [validateHeaderDifficulty](#function-validateheaderdifficulty) |
5155
- | [createDefaultKnexChaintracksOptions](#function-createdefaultknexchaintracksoptions) | [isBlockHeader](#function-isblockheader) | [validateHeaderFormat](#function-validateheaderformat) |
5156
- | [createDefaultNoDbChaintracksOptions](#function-createdefaultnodbchaintracksoptions) | [isKnownValidBulkHeaderFile](#function-isknownvalidbulkheaderfile) | [validateScriptHash](#function-validatescripthash) |
5157
- | [createDefaultWalletServicesOptions](#function-createdefaultwalletservicesoptions) | [isLive](#function-islive) | [wocGetHeadersHeaderToBlockHeader](#function-wocgetheadersheadertoblockheader) |
5158
- | [createIdbChaintracks](#function-createidbchaintracks) | [isLiveBlockHeader](#function-isliveblockheader) | [workBNtoBuffer](#function-workbntobuffer) |
5159
- | [createKnexChaintracks](#function-createknexchaintracks) | [isMoreWork](#function-ismorework) | [writeUInt32BE](#function-writeuint32be) |
5160
- | [createNoDbChaintracks](#function-createnodbchaintracks) | [makeMerklePathNote](#function-makemerklepathnote) | [writeUInt32LE](#function-writeuint32le) |
5161
- | [deserializeBaseBlockHeader](#function-deserializebaseblockheader) | [populateUtxoDetails](#function-populateutxodetails) | |
5138
+ | [WocHeadersBulkListener](#function-wocheadersbulklistener) | [deserializeBlockHeader](#function-deserializeblockheader) | [selectBulkHeaderFiles](#function-selectbulkheaderfiles) |
5139
+ | [WocHeadersBulkListener_test](#function-wocheadersbulklistener_test) | [deserializeBlockHeaders](#function-deserializeblockheaders) | [serializeBaseBlockHeader](#function-serializebaseblockheader) |
5140
+ | [WocHeadersLiveListener](#function-wocheaderslivelistener) | [genesisBuffer](#function-genesisbuffer) | [serializeBaseBlockHeaders](#function-serializebaseblockheaders) |
5141
+ | [WocHeadersLiveListener_test](#function-wocheaderslivelistener_test) | [genesisHeader](#function-genesisheader) | [sha256HashOfBinaryFile](#function-sha256hashofbinaryfile) |
5142
+ | [addWork](#function-addwork) | [getBeefForTxid](#function-getbeeffortxid) | [subWork](#function-subwork) |
5143
+ | [arcDefaultUrl](#function-arcdefaulturl) | [getExchangeRatesIo](#function-getexchangeratesio) | [swapByteOrder](#function-swapbyteorder) |
5144
+ | [arcGorillaPoolUrl](#function-arcgorillapoolurl) | [getWhatsOnChainBlockHeaderByHash](#function-getwhatsonchainblockheaderbyhash) | [toBinaryBaseBlockHeader](#function-tobinarybaseblockheader) |
5145
+ | [arcadeDefaultUrl](#function-arcadedefaulturl) | [handlePostRawTxErrorResponse](#function-handlepostrawtxerrorresponse) | [tstnArcadeUrl](#function-tstnarcadeurl) |
5146
+ | [blockHash](#function-blockhash) | [handleScriptHashHistoryCatch](#function-handlescripthashhistorycatch) | [tstnChaintracksUrl](#function-tstnchaintracksurl) |
5147
+ | [buildChaintracksOptionsWithIngestors](#function-buildchaintracksoptionswithingestors) | [handleScriptHashHistoryResponse](#function-handlescripthashhistoryresponse) | [updateChaintracksFiatExchangeRates](#function-updatechaintracksfiatexchangerates) |
5148
+ | [classifyMerklePathResponse](#function-classifymerklepathresponse) | [handleUtxoConnReset](#function-handleutxoconnreset) | [updateExchangeratesapi](#function-updateexchangeratesapi) |
5149
+ | [convertBitsToTarget](#function-convertbitstotarget) | [isArcAcceptedTxStatus](#function-isarcacceptedtxstatus) | [validBulkHeaderFilesByFileHash](#function-validbulkheaderfilesbyfilehash) |
5150
+ | [convertBitsToWork](#function-convertbitstowork) | [isArcDoubleSpendTxStatus](#function-isarcdoublespendtxstatus) | [validateAgainstDirtyHashes](#function-validateagainstdirtyhashes) |
5151
+ | [convertBufferToUint32](#function-convertbuffertouint32) | [isArcInvalidTxStatus](#function-isarcinvalidtxstatus) | [validateBufferOfHeaders](#function-validatebufferofheaders) |
5152
+ | [convertUint32ToBuffer](#function-convertuint32tobuffer) | [isArcServiceErrorStatus](#function-isarcserviceerrorstatus) | [validateBulkFileData](#function-validatebulkfiledata) |
5153
+ | [convertWocToBlockHeaderHex](#function-convertwoctoblockheaderhex) | [isBaseBlockHeader](#function-isbaseblockheader) | [validateGenesisHeader](#function-validategenesisheader) |
5154
+ | [createDefaultIdbChaintracksOptions](#function-createdefaultidbchaintracksoptions) | [isBlockHeader](#function-isblockheader) | [validateHeaderDifficulty](#function-validateheaderdifficulty) |
5155
+ | [createDefaultKnexChaintracksOptions](#function-createdefaultknexchaintracksoptions) | [isKnownValidBulkHeaderFile](#function-isknownvalidbulkheaderfile) | [validateHeaderFormat](#function-validateheaderformat) |
5156
+ | [createDefaultNoDbChaintracksOptions](#function-createdefaultnodbchaintracksoptions) | [isLive](#function-islive) | [validateScriptHash](#function-validatescripthash) |
5157
+ | [createDefaultWalletServicesOptions](#function-createdefaultwalletservicesoptions) | [isLiveBlockHeader](#function-isliveblockheader) | [wocGetHeadersHeaderToBlockHeader](#function-wocgetheadersheadertoblockheader) |
5158
+ | [createIdbChaintracks](#function-createidbchaintracks) | [isMoreWork](#function-ismorework) | [workBNtoBuffer](#function-workbntobuffer) |
5159
+ | [createKnexChaintracks](#function-createknexchaintracks) | [makeMerklePathNote](#function-makemerklepathnote) | [writeUInt32BE](#function-writeuint32be) |
5160
+ | [createNoDbChaintracks](#function-createnodbchaintracks) | [populateUtxoDetails](#function-populateutxodetails) | [writeUInt32LE](#function-writeuint32le) |
5161
+ | [deserializeBaseBlockHeader](#function-deserializebaseblockheader) | [readUInt32BE](#function-readuint32be) | |
5162
+ | [deserializeBaseBlockHeaders](#function-deserializebaseblockheaders) | [readUInt32LE](#function-readuint32le) | |
5162
5163
 
5163
5164
  Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
5164
5165
 
@@ -5663,6 +5664,7 @@ export function genesisHeader(chain: Chain): BlockHeader {
5663
5664
  };
5664
5665
  case "test":
5665
5666
  case "ttn":
5667
+ case "tstn":
5666
5668
  return {
5667
5669
  version: 1,
5668
5670
  previousHash: "0000000000000000000000000000000000000000000000000000000000000000",
@@ -6131,6 +6133,29 @@ Returns
6131
6133
 
6132
6134
  Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
6133
6135
 
6136
+ ---
6137
+ ##### Function: tstnArcadeUrl
6138
+
6139
+ Arcade broadcaster / ARC endpoint for tstn, or `undefined` when `TSTN_ARCADE_URL` is unset.
6140
+
6141
+ ```ts
6142
+ export function tstnArcadeUrl(): string | undefined
6143
+ ```
6144
+
6145
+ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
6146
+
6147
+ ---
6148
+ ##### Function: tstnChaintracksUrl
6149
+
6150
+ ChainTracks service URL for tstn. Falls back to `${TSTN_ARCADE_URL}/chaintracks/v1` when
6151
+ `TSTN_CHAINTRACKS_URL` is unset (mirrors the ttn layout). Throws when neither is configured.
6152
+
6153
+ ```ts
6154
+ export function tstnChaintracksUrl(): string
6155
+ ```
6156
+
6157
+ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
6158
+
6134
6159
  ---
6135
6160
  ##### Function: updateChaintracksFiatExchangeRates
6136
6161
 
@@ -6467,6 +6492,7 @@ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](
6467
6492
 
6468
6493
  | |
6469
6494
  | --- |
6495
+ | [ARCADE_POST_BEEF_CONCURRENCY](#variable-arcade_post_beef_concurrency) |
6470
6496
  | [ChaintracksFs](#variable-chaintracksfs) |
6471
6497
  | [dirtyHashes](#variable-dirtyhashes) |
6472
6498
  | [validBulkHeaderFiles](#variable-validbulkheaderfiles) |
@@ -6475,6 +6501,15 @@ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](
6475
6501
 
6476
6502
  ---
6477
6503
 
6504
+ ##### Variable: ARCADE_POST_BEEF_CONCURRENCY
6505
+
6506
+ ```ts
6507
+ ARCADE_POST_BEEF_CONCURRENCY = 4
6508
+ ```
6509
+
6510
+ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
6511
+
6512
+ ---
6478
6513
  ##### Variable: ChaintracksFs
6479
6514
 
6480
6515
  ```ts