@bsv/wallet-toolbox-mobile 2.0.24 → 2.0.25-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.
- package/out/src/index.mobile.d.ts +1 -0
- package/out/src/index.mobile.d.ts.map +1 -1
- package/out/src/index.mobile.js +1 -0
- package/out/src/index.mobile.js.map +1 -1
- package/out/src/mockchain/MockChainMigrations.d.ts +20 -0
- package/out/src/mockchain/MockChainMigrations.d.ts.map +1 -0
- package/out/src/mockchain/MockChainMigrations.js +67 -0
- package/out/src/mockchain/MockChainMigrations.js.map +1 -0
- package/out/src/mockchain/MockChainStorage.d.ts +58 -0
- package/out/src/mockchain/MockChainStorage.d.ts.map +1 -0
- package/out/src/mockchain/MockChainStorage.js +101 -0
- package/out/src/mockchain/MockChainStorage.js.map +1 -0
- package/out/src/mockchain/MockChainTracker.d.ts +28 -0
- package/out/src/mockchain/MockChainTracker.d.ts.map +1 -0
- package/out/src/mockchain/MockChainTracker.js +95 -0
- package/out/src/mockchain/MockChainTracker.js.map +1 -0
- package/out/src/mockchain/MockMiner.d.ts +16 -0
- package/out/src/mockchain/MockMiner.d.ts.map +1 -0
- package/out/src/mockchain/MockMiner.js +136 -0
- package/out/src/mockchain/MockMiner.js.map +1 -0
- package/out/src/mockchain/MockServices.d.ts +44 -0
- package/out/src/mockchain/MockServices.d.ts.map +1 -0
- package/out/src/mockchain/MockServices.js +504 -0
- package/out/src/mockchain/MockServices.js.map +1 -0
- package/out/src/mockchain/merkleTree.d.ts +13 -0
- package/out/src/mockchain/merkleTree.d.ts.map +1 -0
- package/out/src/mockchain/merkleTree.js +113 -0
- package/out/src/mockchain/merkleTree.js.map +1 -0
- package/out/src/monitor/Monitor.d.ts +23 -0
- package/out/src/monitor/Monitor.d.ts.map +1 -1
- package/out/src/monitor/Monitor.js +27 -0
- package/out/src/monitor/Monitor.js.map +1 -1
- package/out/src/monitor/tasks/TaskArcSSE.d.ts +24 -0
- package/out/src/monitor/tasks/TaskArcSSE.d.ts.map +1 -0
- package/out/src/monitor/tasks/TaskArcSSE.js +155 -0
- package/out/src/monitor/tasks/TaskArcSSE.js.map +1 -0
- package/out/src/monitor/tasks/TaskMineBlock.d.ts +13 -0
- package/out/src/monitor/tasks/TaskMineBlock.d.ts.map +1 -0
- package/out/src/monitor/tasks/TaskMineBlock.js +29 -0
- package/out/src/monitor/tasks/TaskMineBlock.js.map +1 -0
- package/out/src/sdk/validationHelpers.d.ts +303 -0
- package/out/src/sdk/validationHelpers.d.ts.map +1 -0
- package/out/src/sdk/validationHelpers.js +632 -0
- package/out/src/sdk/validationHelpers.js.map +1 -0
- package/out/src/services/providers/ArcSSEClient.d.ts +56 -0
- package/out/src/services/providers/ArcSSEClient.d.ts.map +1 -0
- package/out/src/services/providers/ArcSSEClient.js +122 -0
- package/out/src/services/providers/ArcSSEClient.js.map +1 -0
- package/out/src/utility/ReaderUint8Array.d.ts +28 -0
- package/out/src/utility/ReaderUint8Array.d.ts.map +1 -0
- package/out/src/utility/ReaderUint8Array.js +166 -0
- package/out/src/utility/ReaderUint8Array.js.map +1 -0
- package/package.json +2 -2
|
@@ -6,6 +6,7 @@ export * from './CWIStyleWalletManager';
|
|
|
6
6
|
export * from './monitor/Monitor';
|
|
7
7
|
export * from './sdk/PrivilegedKeyManager';
|
|
8
8
|
export * from './services/Services';
|
|
9
|
+
export * from './services/providers/ArcSSEClient';
|
|
9
10
|
export * from './signer/WalletSigner';
|
|
10
11
|
export * from './SimpleWalletManager';
|
|
11
12
|
export * from './wab-client/auth-method-interactors/AuthMethodInteractor';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mobile.d.ts","sourceRoot":"","sources":["../../../src/index.mobile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,aAAa,CAAA;AAElC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,kDAAkD,CAAA;AAEhE,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"}
|
|
1
|
+
{"version":3,"file":"index.mobile.d.ts","sourceRoot":"","sources":["../../../src/index.mobile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,aAAa,CAAA;AAElC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,kDAAkD,CAAA;AAEhE,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,mCAAmC,CAAA;AACjD,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"}
|
package/out/src/index.mobile.js
CHANGED
|
@@ -45,6 +45,7 @@ __exportStar(require("./CWIStyleWalletManager"), exports);
|
|
|
45
45
|
__exportStar(require("./monitor/Monitor"), exports);
|
|
46
46
|
__exportStar(require("./sdk/PrivilegedKeyManager"), exports);
|
|
47
47
|
__exportStar(require("./services/Services"), exports);
|
|
48
|
+
__exportStar(require("./services/providers/ArcSSEClient"), exports);
|
|
48
49
|
__exportStar(require("./signer/WalletSigner"), exports);
|
|
49
50
|
__exportStar(require("./SimpleWalletManager"), exports);
|
|
50
51
|
__exportStar(require("./wab-client/auth-method-interactors/AuthMethodInteractor"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mobile.js","sourceRoot":"","sources":["../../../src/index.mobile.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAkC;AAElC,yDAAsC;AACtC,yDAAsC;AACtC,mFAAgE;AAEhE,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"}
|
|
1
|
+
{"version":3,"file":"index.mobile.js","sourceRoot":"","sources":["../../../src/index.mobile.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAkC;AAElC,yDAAsC;AACtC,yDAAsC;AACtC,mFAAgE;AAEhE,0DAAuC;AACvC,oDAAiC;AACjC,6DAA0C;AAC1C,sDAAmC;AACnC,oEAAiD;AACjD,wDAAqC;AACrC,wDAAqC;AACrC,4FAAyE;AACzE,2FAAwE;AACxE,6FAA0E;AAC1E,4FAAyE;AACzE,yDAAsC;AACtC,2CAAwB;AACxB,iDAA8B;AAC9B,gEAA6C;AAC7C,6DAA0C"}
|
|
@@ -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"}
|
|
@@ -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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"}
|