@bsv/wallet-toolbox 2.0.10 → 2.1.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/docs/client.md +1 -1
  3. package/docs/wallet.md +1 -1
  4. package/out/src/index.all.d.ts +1 -0
  5. package/out/src/index.all.d.ts.map +1 -1
  6. package/out/src/index.all.js +1 -0
  7. package/out/src/index.all.js.map +1 -1
  8. package/out/src/mockchain/MockChainMigrations.d.ts +20 -0
  9. package/out/src/mockchain/MockChainMigrations.d.ts.map +1 -0
  10. package/out/src/mockchain/MockChainMigrations.js +67 -0
  11. package/out/src/mockchain/MockChainMigrations.js.map +1 -0
  12. package/out/src/mockchain/MockChainStorage.d.ts +58 -0
  13. package/out/src/mockchain/MockChainStorage.d.ts.map +1 -0
  14. package/out/src/mockchain/MockChainStorage.js +101 -0
  15. package/out/src/mockchain/MockChainStorage.js.map +1 -0
  16. package/out/src/mockchain/MockChainTracker.d.ts +28 -0
  17. package/out/src/mockchain/MockChainTracker.d.ts.map +1 -0
  18. package/out/src/mockchain/MockChainTracker.js +95 -0
  19. package/out/src/mockchain/MockChainTracker.js.map +1 -0
  20. package/out/src/mockchain/MockMiner.d.ts +16 -0
  21. package/out/src/mockchain/MockMiner.d.ts.map +1 -0
  22. package/out/src/mockchain/MockMiner.js +136 -0
  23. package/out/src/mockchain/MockMiner.js.map +1 -0
  24. package/out/src/mockchain/MockServices.d.ts +44 -0
  25. package/out/src/mockchain/MockServices.d.ts.map +1 -0
  26. package/out/src/mockchain/MockServices.js +504 -0
  27. package/out/src/mockchain/MockServices.js.map +1 -0
  28. package/out/src/mockchain/index.d.ts +9 -0
  29. package/out/src/mockchain/index.d.ts.map +1 -0
  30. package/out/src/mockchain/index.js +18 -0
  31. package/out/src/mockchain/index.js.map +1 -0
  32. package/out/src/mockchain/merkleTree.d.ts +13 -0
  33. package/out/src/mockchain/merkleTree.d.ts.map +1 -0
  34. package/out/src/mockchain/merkleTree.js +113 -0
  35. package/out/src/mockchain/merkleTree.js.map +1 -0
  36. package/out/src/monitor/Monitor.d.ts +3 -3
  37. package/out/src/monitor/Monitor.d.ts.map +1 -1
  38. package/out/src/monitor/Monitor.js +7 -0
  39. package/out/src/monitor/Monitor.js.map +1 -1
  40. package/out/src/monitor/tasks/TaskMineBlock.d.ts +13 -0
  41. package/out/src/monitor/tasks/TaskMineBlock.d.ts.map +1 -0
  42. package/out/src/monitor/tasks/TaskMineBlock.js +29 -0
  43. package/out/src/monitor/tasks/TaskMineBlock.js.map +1 -0
  44. package/out/src/sdk/WalletServices.interfaces.d.ts +1 -1
  45. package/out/src/sdk/types.d.ts +1 -1
  46. package/out/src/sdk/types.d.ts.map +1 -1
  47. package/out/src/services/Services.d.ts.map +1 -1
  48. package/out/src/services/Services.js +14 -4
  49. package/out/src/services/Services.js.map +1 -1
  50. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.d.ts.map +1 -1
  51. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js +24 -6
  52. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js.map +1 -1
  53. package/out/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.d.ts +2 -0
  54. package/out/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.d.ts.map +1 -0
  55. package/out/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.js +102 -0
  56. package/out/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.js.map +1 -0
  57. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.d.ts.map +1 -1
  58. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js +8 -8
  59. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js.map +1 -1
  60. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.d.ts.map +1 -1
  61. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js +27 -21
  62. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js.map +1 -1
  63. package/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -1
  64. package/out/src/services/createDefaultWalletServicesOptions.js +14 -4
  65. package/out/src/services/createDefaultWalletServicesOptions.js.map +1 -1
  66. package/out/src/services/providers/Bitails.d.ts.map +1 -1
  67. package/out/src/services/providers/Bitails.js +10 -1
  68. package/out/src/services/providers/Bitails.js.map +1 -1
  69. package/out/src/services/providers/SdkWhatsOnChain.d.ts +1 -1
  70. package/out/src/services/providers/SdkWhatsOnChain.d.ts.map +1 -1
  71. package/out/src/services/providers/SdkWhatsOnChain.js.map +1 -1
  72. package/out/src/services/providers/WhatsOnChain.d.ts.map +1 -1
  73. package/out/src/services/providers/WhatsOnChain.js +2 -0
  74. package/out/src/services/providers/WhatsOnChain.js.map +1 -1
  75. package/out/src/services/providers/exchangeRates.js +1 -1
  76. package/out/src/services/providers/exchangeRates.js.map +1 -1
  77. package/out/src/utility/utilityHelpers.d.ts.map +1 -1
  78. package/out/src/utility/utilityHelpers.js +10 -1
  79. package/out/src/utility/utilityHelpers.js.map +1 -1
  80. package/package.json +3 -3
package/CHANGELOG.md CHANGED
@@ -4,6 +4,33 @@ This document captures the history of significant changes to the wallet-toolbox
4
4
  The git commit history contains the details but is unable to draw
5
5
  attention to changes that materially alter behavior or extend functionality.
6
6
 
7
+ ## wallet-toolbox 2.1.0
8
+
9
+ ### Add `teratest` and `mock` chain types
10
+
11
+ - Change `Chain` type from `'main' | 'test'` to `'main' | 'test' | 'teratest' | 'mock'`.
12
+
13
+ **`teratest` chain:**
14
+ - Add ARC URL `https://arc-teratest.taal.com` for the teratest network.
15
+ - Chaintracks URL follows existing `${chain}net-chaintracks.babbage.systems` pattern.
16
+ - WhatsOnChain URL follows existing `https://api.whatsonchain.com/v1/bsv/${network}` pattern.
17
+ - Bitails is not available on teratest (only `main` and `test`).
18
+
19
+ **`mock` chain — full self-contained mock blockchain:**
20
+ - Add new `src/mockchain/` module with `MockServices`, `MockChainTracker`, `MockMiner`, `MockChainStorage`, and merkle tree utilities.
21
+ - `MockServices` implements the `WalletServices` interface against a local SQLite database (3 tables: `mockchain_block_headers`, `mockchain_transactions`, `mockchain_utxos`).
22
+ - Transactions are validated with full script execution via `@bsv/sdk` `Transaction.verify()`.
23
+ - Coinbase maturity rule enforced (100 block confirmations required before spending).
24
+ - On-demand block mining via `MockServices.mineBlock()`.
25
+ - Chain reorganization simulation via `MockServices.reorg()` with `txidMap` for controlling which transactions land in which new blocks.
26
+ - Add `TaskMineBlock` monitor task for periodic mining (10 minutes) with `mineNow` static flag for on-demand triggering.
27
+ - `Monitor.services` type widened from `Services` to `Services | WalletServices` to support mock chain.
28
+ - `Services` class, `createDefaultWalletServicesOptions`, and external service providers (`WhatsOnChain`, `Bitails`) throw explicit errors if instantiated with `'mock'` chain.
29
+
30
+ **Explicit chain handling across codebase:**
31
+ - Convert chain-dependent ternaries to explicit switch statements in `toWalletNetwork`, `genesisHeader`, `Bitails` constructor, WoC WebSocket ingestors, and `ChaintracksStorageNoDb`.
32
+ - Each chain value (`main`, `test`, `teratest`, `mock`) is handled explicitly rather than falling through a catch-all else branch.
33
+
7
34
  ## wallet-toolbox 2.0.9
8
35
 
9
36
  Added support for more currency types.
package/docs/client.md CHANGED
@@ -7726,7 +7726,7 @@ disableMapiCallback?: boolean
7726
7726
  ###### Property exchangeratesapiKey
7727
7727
 
7728
7728
  API key for use accessing fiat exchange rates API at
7729
- `http://api.exchangeratesapi.io/v1/latest?access_key=${key}`
7729
+ `https://api.exchangeratesapi.io/v1/latest?access_key=${key}`
7730
7730
 
7731
7731
  Obtain your own api key here:
7732
7732
  https://manage.exchangeratesapi.io/signup/free
package/docs/wallet.md CHANGED
@@ -7726,7 +7726,7 @@ disableMapiCallback?: boolean
7726
7726
  ###### Property exchangeratesapiKey
7727
7727
 
7728
7728
  API key for use accessing fiat exchange rates API at
7729
- `http://api.exchangeratesapi.io/v1/latest?access_key=${key}`
7729
+ `https://api.exchangeratesapi.io/v1/latest?access_key=${key}`
7730
7730
 
7731
7731
  Obtain your own api key here:
7732
7732
  https://manage.exchangeratesapi.io/signup/free
@@ -24,4 +24,5 @@ export * from './WalletPermissionsManager';
24
24
  export * from './WalletSettingsManager';
25
25
  export * from './ShamirWalletManager';
26
26
  export * from './entropy/EntropyCollector';
27
+ export * from './mockchain/index';
27
28
  //# sourceMappingURL=index.all.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.all.d.ts","sourceRoot":"","sources":["../../src/index.all.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,aAAa,CAAA;AAElC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mCAAmC,CAAA;AAEjD,cAAc,SAAS,CAAA;AACvB,cAAc,yBAAyB,CAAA;AAEvC,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAE7B,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2DAA2D,CAAA;AACzE,cAAc,0DAA0D,CAAA;AACxE,cAAc,4DAA4D,CAAA;AAC1E,cAAc,2DAA2D,CAAA;AACzE,cAAc,wBAAwB,CAAA;AACtC,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,+BAA+B,CAAA;AAC7C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA"}
1
+ {"version":3,"file":"index.all.d.ts","sourceRoot":"","sources":["../../src/index.all.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,aAAa,CAAA;AAElC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mCAAmC,CAAA;AAEjD,cAAc,SAAS,CAAA;AACvB,cAAc,yBAAyB,CAAA;AAEvC,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAE7B,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2DAA2D,CAAA;AACzE,cAAc,0DAA0D,CAAA;AACxE,cAAc,4DAA4D,CAAA;AAC1E,cAAc,2DAA2D,CAAA;AACzE,cAAc,wBAAwB,CAAA;AACtC,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,+BAA+B,CAAA;AAC7C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,mBAAmB,CAAA"}
@@ -63,4 +63,5 @@ __exportStar(require("./WalletPermissionsManager"), exports);
63
63
  __exportStar(require("./WalletSettingsManager"), exports);
64
64
  __exportStar(require("./ShamirWalletManager"), exports);
65
65
  __exportStar(require("./entropy/EntropyCollector"), exports);
66
+ __exportStar(require("./mockchain/index"), exports);
66
67
  //# sourceMappingURL=index.all.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.all.js","sourceRoot":"","sources":["../../src/index.all.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAkC;AAElC,sDAAmC;AACnC,sDAAmC;AACnC,oEAAiD;AAEjD,0CAAuB;AACvB,0DAAuC;AAEvC,gDAA6B;AAC7B,gDAA6B;AAE7B,0DAAuC;AACvC,oDAAiC;AACjC,6DAA0C;AAC1C,sDAAmC;AACnC,wDAAqC;AACrC,wDAAqC;AACrC,4FAAyE;AACzE,2FAAwE;AACxE,6FAA0E;AAC1E,4FAAyE;AACzE,yDAAsC;AACtC,2CAAwB;AACxB,iDAA8B;AAC9B,gEAA6C;AAC7C,6DAA0C;AAC1C,0DAAuC;AACvC,wDAAqC;AACrC,6DAA0C"}
1
+ {"version":3,"file":"index.all.js","sourceRoot":"","sources":["../../src/index.all.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAkC;AAElC,sDAAmC;AACnC,sDAAmC;AACnC,oEAAiD;AAEjD,0CAAuB;AACvB,0DAAuC;AAEvC,gDAA6B;AAC7B,gDAA6B;AAE7B,0DAAuC;AACvC,oDAAiC;AACjC,6DAA0C;AAC1C,sDAAmC;AACnC,wDAAqC;AACrC,wDAAqC;AACrC,4FAAyE;AACzE,2FAAwE;AACxE,6FAA0E;AAC1E,4FAAyE;AACzE,yDAAsC;AACtC,2CAAwB;AACxB,iDAA8B;AAC9B,gEAA6C;AAC7C,6DAA0C;AAC1C,0DAAuC;AACvC,wDAAqC;AACrC,6DAA0C;AAC1C,oDAAiC"}
@@ -0,0 +1,20 @@
1
+ import { Knex } from 'knex';
2
+ interface Migration {
3
+ up: (knex: Knex) => Promise<void>;
4
+ down?: (knex: Knex) => Promise<void>;
5
+ }
6
+ interface MigrationSource<TMigrationSpec> {
7
+ getMigrations(loadExtensions: readonly string[]): Promise<TMigrationSpec[]>;
8
+ getMigrationName(migration: TMigrationSpec): string;
9
+ getMigration(migration: TMigrationSpec): Promise<Migration>;
10
+ }
11
+ export declare class MockChainMigrations implements MigrationSource<string> {
12
+ migrations: Record<string, Migration>;
13
+ constructor();
14
+ getMigrations(): Promise<string[]>;
15
+ getMigrationName(migration: string): string;
16
+ getMigration(migration: string): Promise<Migration>;
17
+ setupMigrations(): Record<string, Migration>;
18
+ }
19
+ export {};
20
+ //# sourceMappingURL=MockChainMigrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockChainMigrations.d.ts","sourceRoot":"","sources":["../../../src/mockchain/MockChainMigrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,UAAU,SAAS;IACjB,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACjC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACrC;AAED,UAAU,eAAe,CAAC,cAAc;IACtC,aAAa,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;IAC3E,gBAAgB,CAAC,SAAS,EAAE,cAAc,GAAG,MAAM,CAAA;IACnD,YAAY,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;CAC5D;AAED,qBAAa,mBAAoB,YAAW,eAAe,CAAC,MAAM,CAAC;IACjE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAK;;IAMpC,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAGxC,gBAAgB,CAAC,SAAS,EAAE,MAAM;IAG5B,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAIzD,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;CAmD7C"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockChainMigrations = void 0;
4
+ class MockChainMigrations {
5
+ constructor() {
6
+ this.migrations = {};
7
+ this.migrations = this.setupMigrations();
8
+ }
9
+ async getMigrations() {
10
+ return Object.keys(this.migrations).sort();
11
+ }
12
+ getMigrationName(migration) {
13
+ return migration;
14
+ }
15
+ async getMigration(migration) {
16
+ return this.migrations[migration];
17
+ }
18
+ setupMigrations() {
19
+ const migrations = {};
20
+ migrations['2026-01-01-001 initial mockchain tables'] = {
21
+ async up(knex) {
22
+ await knex.schema.createTable('mockchain_block_headers', table => {
23
+ table.integer('height').primary();
24
+ table.string('hash', 64).notNullable().unique();
25
+ table.string('previousHash', 64).notNullable();
26
+ table.string('merkleRoot', 64).notNullable();
27
+ table.integer('version').notNullable().defaultTo(1);
28
+ table.integer('time').notNullable();
29
+ table.integer('bits').notNullable();
30
+ table.integer('nonce').notNullable();
31
+ table.string('coinbaseTxid', 64).notNullable();
32
+ table.timestamp('created_at').defaultTo(knex.fn.now()).notNullable();
33
+ });
34
+ await knex.schema.createTable('mockchain_transactions', table => {
35
+ table.string('txid', 64).primary();
36
+ table.binary('rawTx').notNullable();
37
+ table.integer('blockHeight').nullable();
38
+ table.integer('blockIndex').nullable();
39
+ table.timestamp('created_at').defaultTo(knex.fn.now()).notNullable();
40
+ });
41
+ await knex.schema.createTable('mockchain_utxos', table => {
42
+ table.increments('id').primary();
43
+ table.string('txid', 64).notNullable();
44
+ table.integer('vout').notNullable();
45
+ table.binary('lockingScript').notNullable();
46
+ table.bigInteger('satoshis').notNullable();
47
+ table.string('scriptHash', 64).notNullable();
48
+ table.string('spentByTxid', 64).nullable();
49
+ table.boolean('isCoinbase').notNullable().defaultTo(false);
50
+ table.integer('blockHeight').nullable();
51
+ table.timestamp('created_at').defaultTo(knex.fn.now()).notNullable();
52
+ table.unique(['txid', 'vout']);
53
+ table.index('scriptHash');
54
+ table.index('spentByTxid');
55
+ });
56
+ },
57
+ async down(knex) {
58
+ await knex.schema.dropTableIfExists('mockchain_utxos');
59
+ await knex.schema.dropTableIfExists('mockchain_transactions');
60
+ await knex.schema.dropTableIfExists('mockchain_block_headers');
61
+ }
62
+ };
63
+ return migrations;
64
+ }
65
+ }
66
+ exports.MockChainMigrations = MockChainMigrations;
67
+ //# sourceMappingURL=MockChainMigrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockChainMigrations.js","sourceRoot":"","sources":["../../../src/mockchain/MockChainMigrations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { Knex } from 'knex';
2
+ import { BlockHeader } from '../sdk/WalletServices.interfaces';
3
+ export interface MockChainBlockHeaderRow {
4
+ height: number;
5
+ hash: string;
6
+ previousHash: string;
7
+ merkleRoot: string;
8
+ version: number;
9
+ time: number;
10
+ bits: number;
11
+ nonce: number;
12
+ coinbaseTxid: string;
13
+ created_at?: Date | string;
14
+ }
15
+ export interface MockChainTransactionRow {
16
+ txid: string;
17
+ rawTx: number[] | Buffer | Uint8Array;
18
+ blockHeight: number | null;
19
+ blockIndex: number | null;
20
+ created_at?: Date | string;
21
+ }
22
+ export interface MockChainUtxoRow {
23
+ id?: number;
24
+ txid: string;
25
+ vout: number;
26
+ lockingScript: number[] | Buffer | Uint8Array;
27
+ satoshis: number;
28
+ scriptHash: string;
29
+ spentByTxid: string | null;
30
+ isCoinbase: boolean;
31
+ blockHeight: number | null;
32
+ created_at?: Date | string;
33
+ }
34
+ export declare class MockChainStorage {
35
+ knex: Knex;
36
+ constructor(knex: Knex);
37
+ migrate(): Promise<void>;
38
+ insertTransaction(txid: string, rawTx: number[]): Promise<void>;
39
+ getTransaction(txid: string): Promise<MockChainTransactionRow | undefined>;
40
+ getUnminedTransactions(): Promise<MockChainTransactionRow[]>;
41
+ setTransactionBlock(txid: string, height: number, index: number): Promise<void>;
42
+ insertUtxo(txid: string, vout: number, lockingScript: number[], satoshis: number, scriptHash: string, isCoinbase?: boolean, blockHeight?: number | null): Promise<void>;
43
+ getUtxo(txid: string, vout: number): Promise<MockChainUtxoRow | undefined>;
44
+ getUtxosByScriptHash(scriptHash: string): Promise<MockChainUtxoRow[]>;
45
+ markUtxoSpent(txid: string, vout: number, spentByTxid: string): Promise<void>;
46
+ insertBlockHeader(header: MockChainBlockHeaderRow): Promise<void>;
47
+ getBlockHeaderByHeight(height: number): Promise<BlockHeader | undefined>;
48
+ getBlockHeaderByHash(hash: string): Promise<BlockHeader | undefined>;
49
+ getChainTip(): Promise<BlockHeader | undefined>;
50
+ getTransactionsInBlock(height: number): Promise<MockChainTransactionRow[]>;
51
+ deleteBlockHeader(height: number): Promise<void>;
52
+ deleteTransaction(txid: string): Promise<void>;
53
+ deleteUtxosByTxid(txid: string): Promise<void>;
54
+ setUtxoBlockHeight(txid: string, blockHeight: number | null): Promise<void>;
55
+ unspendUtxo(txid: string, vout: number): Promise<void>;
56
+ private rowToBlockHeader;
57
+ }
58
+ //# sourceMappingURL=MockChainStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockChainStorage.d.ts","sourceRoot":"","sources":["../../../src/mockchain/MockChainStorage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockChainStorage = void 0;
4
+ const MockChainMigrations_1 = require("./MockChainMigrations");
5
+ class MockChainStorage {
6
+ constructor(knex) {
7
+ this.knex = knex;
8
+ }
9
+ async migrate() {
10
+ const migrationSource = new MockChainMigrations_1.MockChainMigrations();
11
+ await this.knex.migrate.latest({
12
+ migrationSource,
13
+ tableName: 'knex_migrations_mockchain'
14
+ });
15
+ }
16
+ async insertTransaction(txid, rawTx) {
17
+ await this.knex('mockchain_transactions').insert({
18
+ txid,
19
+ rawTx: Buffer.from(rawTx),
20
+ blockHeight: null,
21
+ blockIndex: null
22
+ });
23
+ }
24
+ async getTransaction(txid) {
25
+ return this.knex('mockchain_transactions').where({ txid }).first();
26
+ }
27
+ async getUnminedTransactions() {
28
+ return this.knex('mockchain_transactions').whereNull('blockHeight');
29
+ }
30
+ async setTransactionBlock(txid, height, index) {
31
+ await this.knex('mockchain_transactions').where({ txid }).update({ blockHeight: height, blockIndex: index });
32
+ }
33
+ async insertUtxo(txid, vout, lockingScript, satoshis, scriptHash, isCoinbase = false, blockHeight = null) {
34
+ await this.knex('mockchain_utxos').insert({
35
+ txid,
36
+ vout,
37
+ lockingScript: Buffer.from(lockingScript),
38
+ satoshis,
39
+ scriptHash,
40
+ spentByTxid: null,
41
+ isCoinbase,
42
+ blockHeight
43
+ });
44
+ }
45
+ async getUtxo(txid, vout) {
46
+ return this.knex('mockchain_utxos').where({ txid, vout }).first();
47
+ }
48
+ async getUtxosByScriptHash(scriptHash) {
49
+ return this.knex('mockchain_utxos').where({ scriptHash });
50
+ }
51
+ async markUtxoSpent(txid, vout, spentByTxid) {
52
+ await this.knex('mockchain_utxos').where({ txid, vout }).update({ spentByTxid });
53
+ }
54
+ async insertBlockHeader(header) {
55
+ await this.knex('mockchain_block_headers').insert(header);
56
+ }
57
+ async getBlockHeaderByHeight(height) {
58
+ const row = await this.knex('mockchain_block_headers').where({ height }).first();
59
+ return row ? this.rowToBlockHeader(row) : undefined;
60
+ }
61
+ async getBlockHeaderByHash(hash) {
62
+ const row = await this.knex('mockchain_block_headers').where({ hash }).first();
63
+ return row ? this.rowToBlockHeader(row) : undefined;
64
+ }
65
+ async getChainTip() {
66
+ const row = await this.knex('mockchain_block_headers').orderBy('height', 'desc').first();
67
+ return row ? this.rowToBlockHeader(row) : undefined;
68
+ }
69
+ async getTransactionsInBlock(height) {
70
+ return this.knex('mockchain_transactions').where({ blockHeight: height }).orderBy('blockIndex', 'asc');
71
+ }
72
+ async deleteBlockHeader(height) {
73
+ await this.knex('mockchain_block_headers').where({ height }).delete();
74
+ }
75
+ async deleteTransaction(txid) {
76
+ await this.knex('mockchain_transactions').where({ txid }).delete();
77
+ }
78
+ async deleteUtxosByTxid(txid) {
79
+ await this.knex('mockchain_utxos').where({ txid }).delete();
80
+ }
81
+ async setUtxoBlockHeight(txid, blockHeight) {
82
+ await this.knex('mockchain_utxos').where({ txid }).update({ blockHeight });
83
+ }
84
+ async unspendUtxo(txid, vout) {
85
+ await this.knex('mockchain_utxos').where({ txid, vout }).update({ spentByTxid: null });
86
+ }
87
+ rowToBlockHeader(row) {
88
+ return {
89
+ height: row.height,
90
+ hash: row.hash,
91
+ previousHash: row.previousHash,
92
+ merkleRoot: row.merkleRoot,
93
+ version: row.version,
94
+ time: row.time,
95
+ bits: row.bits,
96
+ nonce: row.nonce
97
+ };
98
+ }
99
+ }
100
+ exports.MockChainStorage = MockChainStorage;
101
+ //# sourceMappingURL=MockChainStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockChainStorage.js","sourceRoot":"","sources":["../../../src/mockchain/MockChainStorage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { Chain } from '../sdk/types';
2
+ import { BaseBlockHeader, BlockHeader } from '../sdk/WalletServices.interfaces';
3
+ import { ChaintracksClientApi, ChaintracksInfoApi, HeaderListener, ReorgListener } from '../services/chaintracker/chaintracks/Api/ChaintracksClientApi';
4
+ import { MockChainStorage } from './MockChainStorage';
5
+ export declare class MockChainTracker implements ChaintracksClientApi {
6
+ chain: Chain;
7
+ storage: MockChainStorage;
8
+ constructor(chain: Chain, storage: MockChainStorage);
9
+ currentHeight(): Promise<number>;
10
+ isValidRootForHeight(root: string, height: number): Promise<boolean>;
11
+ getChain(): Promise<Chain>;
12
+ getInfo(): Promise<ChaintracksInfoApi>;
13
+ getPresentHeight(): Promise<number>;
14
+ getHeaders(height: number, count: number): Promise<string>;
15
+ findChainTipHeader(): Promise<BlockHeader>;
16
+ findChainTipHash(): Promise<string>;
17
+ findHeaderForHeight(height: number): Promise<BlockHeader | undefined>;
18
+ findHeaderForBlockHash(hash: string): Promise<BlockHeader | undefined>;
19
+ addHeader(_header: BaseBlockHeader): Promise<void>;
20
+ startListening(): Promise<void>;
21
+ listening(): Promise<void>;
22
+ isListening(): Promise<boolean>;
23
+ isSynchronized(): Promise<boolean>;
24
+ subscribeHeaders(_listener: HeaderListener): Promise<string>;
25
+ subscribeReorgs(_listener: ReorgListener): Promise<string>;
26
+ unsubscribe(_subscriptionId: string): Promise<boolean>;
27
+ }
28
+ //# sourceMappingURL=MockChainTracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockChainTracker.d.ts","sourceRoot":"","sources":["../../../src/mockchain/MockChainTracker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AACpC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAE/E,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,aAAa,EACd,MAAM,+DAA+D,CAAA;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAIrD,qBAAa,gBAAiB,YAAW,oBAAoB;IAElD,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,gBAAgB;gBADzB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,gBAAgB;IAG5B,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAKhC,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMpE,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC;IAI1B,OAAO,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAatC,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAInC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW1D,kBAAkB,IAAI,OAAO,CAAC,WAAW,CAAC;IAM1C,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAMnC,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAIrE,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAItE,SAAS,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAI1B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAIlC,gBAAgB,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5D,eAAe,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAI1D,WAAW,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAG7D"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockChainTracker = void 0;
4
+ const sdk_1 = require("@bsv/sdk");
5
+ const Services_1 = require("../services/Services");
6
+ const WERR_errors_1 = require("../sdk/WERR_errors");
7
+ class MockChainTracker {
8
+ constructor(chain, storage) {
9
+ this.chain = chain;
10
+ this.storage = storage;
11
+ }
12
+ async currentHeight() {
13
+ const tip = await this.storage.getChainTip();
14
+ return tip ? tip.height : -1;
15
+ }
16
+ async isValidRootForHeight(root, height) {
17
+ const header = await this.storage.getBlockHeaderByHeight(height);
18
+ if (!header)
19
+ return false;
20
+ return header.merkleRoot === root;
21
+ }
22
+ async getChain() {
23
+ return this.chain;
24
+ }
25
+ async getInfo() {
26
+ const tip = await this.storage.getChainTip();
27
+ return {
28
+ chain: this.chain,
29
+ heightBulk: tip ? tip.height : -1,
30
+ heightLive: tip ? tip.height : -1,
31
+ storage: 'mockchain',
32
+ bulkIngestors: [],
33
+ liveIngestors: [],
34
+ packages: []
35
+ };
36
+ }
37
+ async getPresentHeight() {
38
+ return this.currentHeight();
39
+ }
40
+ async getHeaders(height, count) {
41
+ let hex = '';
42
+ for (let h = height; h < height + count; h++) {
43
+ const header = await this.storage.getBlockHeaderByHeight(h);
44
+ if (!header)
45
+ break;
46
+ const binary = (0, Services_1.toBinaryBaseBlockHeader)(header);
47
+ hex += sdk_1.Utils.toHex(binary);
48
+ }
49
+ return hex;
50
+ }
51
+ async findChainTipHeader() {
52
+ const tip = await this.storage.getChainTip();
53
+ if (!tip)
54
+ throw new Error('Mock chain has no blocks');
55
+ return tip;
56
+ }
57
+ async findChainTipHash() {
58
+ const tip = await this.storage.getChainTip();
59
+ if (!tip)
60
+ throw new Error('Mock chain has no blocks');
61
+ return tip.hash;
62
+ }
63
+ async findHeaderForHeight(height) {
64
+ return this.storage.getBlockHeaderByHeight(height);
65
+ }
66
+ async findHeaderForBlockHash(hash) {
67
+ return this.storage.getBlockHeaderByHash(hash);
68
+ }
69
+ async addHeader(_header) {
70
+ // no-op for mock chain
71
+ }
72
+ async startListening() {
73
+ // no-op
74
+ }
75
+ async listening() {
76
+ // no-op
77
+ }
78
+ async isListening() {
79
+ return true;
80
+ }
81
+ async isSynchronized() {
82
+ return true;
83
+ }
84
+ async subscribeHeaders(_listener) {
85
+ throw new WERR_errors_1.WERR_NOT_IMPLEMENTED('subscribeHeaders not supported on mock chain');
86
+ }
87
+ async subscribeReorgs(_listener) {
88
+ throw new WERR_errors_1.WERR_NOT_IMPLEMENTED('subscribeReorgs not supported on mock chain');
89
+ }
90
+ async unsubscribe(_subscriptionId) {
91
+ throw new WERR_errors_1.WERR_NOT_IMPLEMENTED('unsubscribe not supported on mock chain');
92
+ }
93
+ }
94
+ exports.MockChainTracker = MockChainTracker;
95
+ //# sourceMappingURL=MockChainTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockChainTracker.js","sourceRoot":"","sources":["../../../src/mockchain/MockChainTracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { Transaction } from '@bsv/sdk';
2
+ import { MockChainStorage } from './MockChainStorage';
3
+ import { BlockHeader } from '../sdk/WalletServices.interfaces';
4
+ /**
5
+ * Creates a coinbase transaction for the given block height.
6
+ * Uses OP_TRUE (0x51) as the output script so anyone can spend it.
7
+ */
8
+ export declare function createCoinbaseTransaction(height: number): Transaction;
9
+ export declare class MockMiner {
10
+ /**
11
+ * Mine a new block containing all unmined transactions.
12
+ * Returns the new block header.
13
+ */
14
+ mineBlock(storage: MockChainStorage): Promise<BlockHeader>;
15
+ }
16
+ //# sourceMappingURL=MockMiner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockMiner.d.ts","sourceRoot":"","sources":["../../../src/mockchain/MockMiner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAiB,MAAM,UAAU,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAA2B,MAAM,oBAAoB,CAAA;AAK9E,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAE9D;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAoCrE;AAED,qBAAa,SAAS;IACpB;;;OAGG;IACG,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC;CA+FjE"}