@bsv/wallet-toolbox-client 2.0.24 → 2.1.1

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 (65) hide show
  1. package/out/src/Wallet.js +1 -1
  2. package/out/src/Wallet.js.map +1 -1
  3. package/out/src/mockchain/MockChainMigrations.d.ts +20 -0
  4. package/out/src/mockchain/MockChainMigrations.d.ts.map +1 -0
  5. package/out/src/mockchain/MockChainMigrations.js +67 -0
  6. package/out/src/mockchain/MockChainMigrations.js.map +1 -0
  7. package/out/src/mockchain/MockChainStorage.d.ts +58 -0
  8. package/out/src/mockchain/MockChainStorage.d.ts.map +1 -0
  9. package/out/src/mockchain/MockChainStorage.js +101 -0
  10. package/out/src/mockchain/MockChainStorage.js.map +1 -0
  11. package/out/src/mockchain/MockChainTracker.d.ts +28 -0
  12. package/out/src/mockchain/MockChainTracker.d.ts.map +1 -0
  13. package/out/src/mockchain/MockChainTracker.js +95 -0
  14. package/out/src/mockchain/MockChainTracker.js.map +1 -0
  15. package/out/src/mockchain/MockMiner.d.ts +16 -0
  16. package/out/src/mockchain/MockMiner.d.ts.map +1 -0
  17. package/out/src/mockchain/MockMiner.js +136 -0
  18. package/out/src/mockchain/MockMiner.js.map +1 -0
  19. package/out/src/mockchain/MockServices.d.ts +44 -0
  20. package/out/src/mockchain/MockServices.d.ts.map +1 -0
  21. package/out/src/mockchain/MockServices.js +504 -0
  22. package/out/src/mockchain/MockServices.js.map +1 -0
  23. package/out/src/mockchain/merkleTree.d.ts +13 -0
  24. package/out/src/mockchain/merkleTree.d.ts.map +1 -0
  25. package/out/src/mockchain/merkleTree.js +113 -0
  26. package/out/src/mockchain/merkleTree.js.map +1 -0
  27. package/out/src/monitor/Monitor.d.ts +3 -3
  28. package/out/src/monitor/Monitor.d.ts.map +1 -1
  29. package/out/src/monitor/Monitor.js +7 -0
  30. package/out/src/monitor/Monitor.js.map +1 -1
  31. package/out/src/monitor/tasks/TaskMineBlock.d.ts +13 -0
  32. package/out/src/monitor/tasks/TaskMineBlock.d.ts.map +1 -0
  33. package/out/src/monitor/tasks/TaskMineBlock.js +29 -0
  34. package/out/src/monitor/tasks/TaskMineBlock.js.map +1 -0
  35. package/out/src/sdk/types.d.ts +1 -1
  36. package/out/src/sdk/types.d.ts.map +1 -1
  37. package/out/src/services/Services.d.ts.map +1 -1
  38. package/out/src/services/Services.js +14 -4
  39. package/out/src/services/Services.js.map +1 -1
  40. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.d.ts.map +1 -1
  41. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js +24 -6
  42. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js.map +1 -1
  43. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.d.ts.map +1 -1
  44. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js +8 -8
  45. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js.map +1 -1
  46. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.d.ts.map +1 -1
  47. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js +27 -21
  48. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js.map +1 -1
  49. package/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -1
  50. package/out/src/services/createDefaultWalletServicesOptions.js +14 -4
  51. package/out/src/services/createDefaultWalletServicesOptions.js.map +1 -1
  52. package/out/src/services/providers/Bitails.d.ts.map +1 -1
  53. package/out/src/services/providers/Bitails.js +10 -1
  54. package/out/src/services/providers/Bitails.js.map +1 -1
  55. package/out/src/services/providers/SdkWhatsOnChain.d.ts +1 -1
  56. package/out/src/services/providers/SdkWhatsOnChain.d.ts.map +1 -1
  57. package/out/src/services/providers/SdkWhatsOnChain.js.map +1 -1
  58. package/out/src/services/providers/WhatsOnChain.d.ts.map +1 -1
  59. package/out/src/services/providers/WhatsOnChain.js +2 -0
  60. package/out/src/services/providers/WhatsOnChain.js.map +1 -1
  61. package/out/src/utility/utilityHelpers.d.ts +5 -0
  62. package/out/src/utility/utilityHelpers.d.ts.map +1 -1
  63. package/out/src/utility/utilityHelpers.js +24 -1
  64. package/out/src/utility/utilityHelpers.js.map +1 -1
  65. package/package.json +1 -1
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockMiner = void 0;
4
+ exports.createCoinbaseTransaction = createCoinbaseTransaction;
5
+ const sdk_1 = require("@bsv/sdk");
6
+ const MockChainStorage_1 = require("./MockChainStorage");
7
+ const merkleTree_1 = require("./merkleTree");
8
+ const Services_1 = require("../services/Services");
9
+ const utilityHelpers_1 = require("../utility/utilityHelpers");
10
+ const utilityHelpers_noBuffer_1 = require("../utility/utilityHelpers.noBuffer");
11
+ /**
12
+ * Creates a coinbase transaction for the given block height.
13
+ * Uses OP_TRUE (0x51) as the output script so anyone can spend it.
14
+ */
15
+ function createCoinbaseTransaction(height) {
16
+ const tx = new sdk_1.Transaction();
17
+ // BIP34: height in scriptSig
18
+ // Encode height as a minimally-encoded script number pushed in the unlocking script
19
+ const heightBytes = [];
20
+ let h = height;
21
+ if (h === 0) {
22
+ heightBytes.push(0);
23
+ }
24
+ else {
25
+ while (h > 0) {
26
+ heightBytes.push(h & 0xff);
27
+ h >>= 8;
28
+ }
29
+ // If the high bit is set, add a 0x00 byte to keep it positive
30
+ if (heightBytes[heightBytes.length - 1] & 0x80) {
31
+ heightBytes.push(0);
32
+ }
33
+ }
34
+ const scriptSigBytes = [heightBytes.length, ...heightBytes];
35
+ const unlockingScript = sdk_1.Script.fromBinary(scriptSigBytes);
36
+ tx.addInput({
37
+ sourceTXID: '00'.repeat(32),
38
+ sourceOutputIndex: 0xffffffff,
39
+ unlockingScript,
40
+ sequence: 0xffffffff
41
+ });
42
+ tx.addOutput({
43
+ satoshis: 5000000000,
44
+ lockingScript: sdk_1.Script.fromHex('51') // OP_TRUE
45
+ });
46
+ return tx;
47
+ }
48
+ class MockMiner {
49
+ /**
50
+ * Mine a new block containing all unmined transactions.
51
+ * Returns the new block header.
52
+ */
53
+ async mineBlock(storage) {
54
+ const tip = await storage.getChainTip();
55
+ const newHeight = tip ? tip.height + 1 : 0;
56
+ const previousHash = tip ? tip.hash : '00'.repeat(32);
57
+ const unminedTxs = await storage.getUnminedTransactions();
58
+ const coinbaseTx = createCoinbaseTransaction(newHeight);
59
+ const coinbaseTxid = coinbaseTx.id('hex');
60
+ const coinbaseRawTx = Array.from(coinbaseTx.toBinary());
61
+ const txids = [coinbaseTxid, ...unminedTxs.map(t => t.txid)];
62
+ const merkleRoot = (0, merkleTree_1.computeMerkleRoot)(txids);
63
+ const time = Math.floor(Date.now() / 1000);
64
+ const bits = 0x207fffff;
65
+ const nonce = Math.floor(Math.random() * 0xffffffff);
66
+ const headerObj = {
67
+ version: 1,
68
+ previousHash,
69
+ merkleRoot,
70
+ time,
71
+ bits,
72
+ nonce
73
+ };
74
+ const headerBinary = (0, Services_1.toBinaryBaseBlockHeader)(headerObj);
75
+ const hash = (0, utilityHelpers_noBuffer_1.asString)((0, utilityHelpers_1.doubleSha256BE)(headerBinary));
76
+ // Compute script hash for the coinbase output (OP_TRUE = 0x51)
77
+ const coinbaseOutputScript = [0x51];
78
+ const coinbaseScriptHash = (0, utilityHelpers_noBuffer_1.asString)((0, utilityHelpers_1.sha256Hash)(coinbaseOutputScript));
79
+ // Wrap in a knex transaction for atomicity
80
+ await storage.knex.transaction(async (trx) => {
81
+ const trxStorage = new MockChainStorage_1.MockChainStorage(trx);
82
+ // Insert coinbase tx
83
+ await trxStorage.knex('mockchain_transactions').insert({
84
+ txid: coinbaseTxid,
85
+ rawTx: Buffer.from(coinbaseRawTx),
86
+ blockHeight: newHeight,
87
+ blockIndex: 0
88
+ });
89
+ // Insert coinbase UTXO
90
+ await trxStorage.knex('mockchain_utxos').insert({
91
+ txid: coinbaseTxid,
92
+ vout: 0,
93
+ lockingScript: Buffer.from(coinbaseOutputScript),
94
+ satoshis: 5000000000,
95
+ scriptHash: coinbaseScriptHash,
96
+ spentByTxid: null,
97
+ isCoinbase: true,
98
+ blockHeight: newHeight
99
+ });
100
+ // Update unmined txs with block height and sequential block index
101
+ for (let i = 0; i < unminedTxs.length; i++) {
102
+ await trxStorage
103
+ .knex('mockchain_transactions')
104
+ .where({ txid: unminedTxs[i].txid })
105
+ .update({ blockHeight: newHeight, blockIndex: i + 1 });
106
+ // Update blockHeight on UTXOs belonging to these transactions
107
+ await trxStorage.knex('mockchain_utxos').where({ txid: unminedTxs[i].txid }).update({ blockHeight: newHeight });
108
+ }
109
+ // Insert block header
110
+ const headerRow = {
111
+ height: newHeight,
112
+ hash,
113
+ previousHash,
114
+ merkleRoot,
115
+ version: 1,
116
+ time,
117
+ bits,
118
+ nonce,
119
+ coinbaseTxid
120
+ };
121
+ await trxStorage.knex('mockchain_block_headers').insert(headerRow);
122
+ });
123
+ return {
124
+ height: newHeight,
125
+ hash,
126
+ previousHash,
127
+ merkleRoot,
128
+ version: 1,
129
+ time,
130
+ bits,
131
+ nonce
132
+ };
133
+ }
134
+ }
135
+ exports.MockMiner = MockMiner;
136
+ //# sourceMappingURL=MockMiner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockMiner.js","sourceRoot":"","sources":["../../../../src/mockchain/MockMiner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { Beef, ChainTracker, Transaction as BsvTransaction } from '@bsv/sdk';
2
+ import { Knex } from 'knex';
3
+ import { Chain } from '../sdk/types';
4
+ import { BlockHeader, FiatExchangeRates, GetMerklePathResult, GetRawTxResult, GetScriptHashHistoryResult, GetStatusForTxidsResult, GetUtxoStatusOutputFormat, GetUtxoStatusResult, PostBeefResult, ServicesCallHistory, WalletServices } from '../sdk/WalletServices.interfaces';
5
+ import type { FiatCurrencyCode } from '../sdk/WalletServices.interfaces';
6
+ import { TableOutput } from '../storage/schema/tables/TableOutput';
7
+ import { MockChainStorage } from './MockChainStorage';
8
+ import { MockChainTracker } from './MockChainTracker';
9
+ import { MockMiner } from './MockMiner';
10
+ export interface ReorgResult {
11
+ oldTip: BlockHeader;
12
+ newTip: BlockHeader;
13
+ deactivatedHeaders: BlockHeader[];
14
+ }
15
+ export declare class MockServices implements WalletServices {
16
+ knex: Knex;
17
+ chain: Chain;
18
+ storage: MockChainStorage;
19
+ tracker: MockChainTracker;
20
+ miner: MockMiner;
21
+ constructor(knex: Knex);
22
+ initialize(): Promise<void>;
23
+ mineBlock(): Promise<BlockHeader>;
24
+ postBeef(beef: Beef, txids: string[]): Promise<PostBeefResult[]>;
25
+ reorg(startingHeight: number, numBlocks: number, txidMap?: Record<string, number>): Promise<ReorgResult>;
26
+ getRawTx(txid: string): Promise<GetRawTxResult>;
27
+ getMerklePath(txid: string): Promise<GetMerklePathResult>;
28
+ getUtxoStatus(output: string, outputFormat?: GetUtxoStatusOutputFormat, outpoint?: string): Promise<GetUtxoStatusResult>;
29
+ getStatusForTxids(txids: string[]): Promise<GetStatusForTxidsResult>;
30
+ getScriptHashHistory(hash: string): Promise<GetScriptHashHistoryResult>;
31
+ getChainTracker(): Promise<ChainTracker>;
32
+ getHeaderForHeight(height: number): Promise<number[]>;
33
+ getHeight(): Promise<number>;
34
+ hashToHeader(hash: string): Promise<BlockHeader>;
35
+ hashOutputScript(script: string): string;
36
+ isUtxo(output: TableOutput): Promise<boolean>;
37
+ getBsvExchangeRate(): Promise<number>;
38
+ getFiatExchangeRate(currency: FiatCurrencyCode, base?: FiatCurrencyCode): Promise<number>;
39
+ getFiatExchangeRates(targetCurrencies: FiatCurrencyCode[]): Promise<FiatExchangeRates>;
40
+ nLockTimeIsFinal(tx: string | number[] | BsvTransaction | number): Promise<boolean>;
41
+ getBeefForTxid(txid: string): Promise<Beef>;
42
+ getServicesCallHistory(): ServicesCallHistory;
43
+ }
44
+ //# sourceMappingURL=MockServices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockServices.d.ts","sourceRoot":"","sources":["../../../../src/mockchain/MockServices.ts"],"names":[],"mappings":"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"}