@bsv/wallet-toolbox 2.1.0-beta.3 → 2.1.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.
- package/CHANGELOG.md +31 -1
- package/docs/client.md +581 -199
- package/docs/monitor.md +30 -11
- package/docs/services.md +78 -27
- package/docs/storage.md +18 -82
- package/docs/wallet.md +581 -199
- package/out/src/Setup.js +1 -4
- package/out/src/Setup.js.map +1 -1
- package/out/src/WalletPermissionsManager.d.ts +4 -2
- package/out/src/WalletPermissionsManager.d.ts.map +1 -1
- package/out/src/WalletPermissionsManager.js +127 -35
- package/out/src/WalletPermissionsManager.js.map +1 -1
- package/out/src/__tests/WalletPermissionsManager.flows.test.js +113 -1
- package/out/src/__tests/WalletPermissionsManager.flows.test.js.map +1 -1
- package/out/src/mockchain/MockChainMigrations.js +1 -1
- package/out/src/mockchain/MockChainMigrations.js.map +1 -1
- package/out/src/sdk/WalletStorage.interfaces.d.ts +2 -0
- package/out/src/sdk/WalletStorage.interfaces.d.ts.map +1 -1
- package/out/src/services/Services.d.ts +15 -0
- package/out/src/services/Services.d.ts.map +1 -1
- package/out/src/services/Services.js +59 -4
- package/out/src/services/Services.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Chaintracks.js +20 -4
- package/out/src/services/chaintracker/chaintracks/Chaintracks.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.js +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/__tests/bulkIngestorFailures.test.d.ts +2 -0
- package/out/src/services/chaintracker/chaintracks/__tests/bulkIngestorFailures.test.d.ts.map +1 -0
- package/out/src/services/chaintracker/chaintracks/__tests/bulkIngestorFailures.test.js +109 -0
- package/out/src/services/chaintracker/chaintracks/__tests/bulkIngestorFailures.test.js.map +1 -0
- package/out/src/storage/StorageIdb.d.ts.map +1 -1
- package/out/src/storage/StorageIdb.js +4 -0
- package/out/src/storage/StorageIdb.js.map +1 -1
- package/out/src/storage/StorageKnex.d.ts +8 -0
- package/out/src/storage/StorageKnex.d.ts.map +1 -1
- package/out/src/storage/StorageKnex.js +125 -71
- package/out/src/storage/StorageKnex.js.map +1 -1
- package/out/src/storage/StorageProvider.d.ts +8 -0
- package/out/src/storage/StorageProvider.d.ts.map +1 -1
- package/out/src/storage/StorageProvider.js +42 -0
- package/out/src/storage/StorageProvider.js.map +1 -1
- package/out/src/storage/methods/ListOutputsSpecOp.d.ts.map +1 -1
- package/out/src/storage/methods/ListOutputsSpecOp.js +24 -7
- package/out/src/storage/methods/ListOutputsSpecOp.js.map +1 -1
- package/out/src/storage/methods/createAction.d.ts.map +1 -1
- package/out/src/storage/methods/createAction.js +69 -32
- package/out/src/storage/methods/createAction.js.map +1 -1
- package/out/src/storage/methods/listActionsIdb.d.ts.map +1 -1
- package/out/src/storage/methods/listActionsIdb.js +17 -3
- package/out/src/storage/methods/listActionsIdb.js.map +1 -1
- package/out/src/storage/methods/listActionsKnex.d.ts.map +1 -1
- package/out/src/storage/methods/listActionsKnex.js +28 -2
- package/out/src/storage/methods/listActionsKnex.js.map +1 -1
- package/out/src/storage/methods/listOutputsKnex.d.ts.map +1 -1
- package/out/src/storage/methods/listOutputsKnex.js +83 -50
- package/out/src/storage/methods/listOutputsKnex.js.map +1 -1
- package/out/src/storage/remoting/StorageServer.d.ts +1 -0
- package/out/src/storage/remoting/StorageServer.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageServer.js +58 -8
- package/out/src/storage/remoting/StorageServer.js.map +1 -1
- package/out/src/storage/remoting/__test/StorageClient.man.test.js +361 -96
- package/out/src/storage/remoting/__test/StorageClient.man.test.js.map +1 -1
- package/out/src/storage/schema/KnexMigrations.d.ts.map +1 -1
- package/out/src/storage/schema/KnexMigrations.js +41 -1
- package/out/src/storage/schema/KnexMigrations.js.map +1 -1
- package/out/src/storage/sync/StorageMySQLDojoReader.d.ts.map +1 -1
- package/out/src/storage/sync/StorageMySQLDojoReader.js +4 -0
- package/out/src/storage/sync/StorageMySQLDojoReader.js.map +1 -1
- package/out/src/utility/brc114ActionTimeLabels.d.ts +9 -0
- package/out/src/utility/brc114ActionTimeLabels.d.ts.map +1 -0
- package/out/src/utility/brc114ActionTimeLabels.js +51 -0
- package/out/src/utility/brc114ActionTimeLabels.js.map +1 -0
- package/package.json +3 -3
- package/out/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.d.ts +0 -2
- package/out/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.d.ts.map +0 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.js +0 -102
- package/out/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.js.map +0 -1
package/docs/monitor.md
CHANGED
|
@@ -100,7 +100,7 @@ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](
|
|
|
100
100
|
```ts
|
|
101
101
|
export interface MonitorOptions {
|
|
102
102
|
chain: Chain;
|
|
103
|
-
services: Services;
|
|
103
|
+
services: Services | WalletServices;
|
|
104
104
|
storage: MonitorStorage;
|
|
105
105
|
chaintracks: ChaintracksClientApi;
|
|
106
106
|
chaintracksWithEvents?: Chaintracks;
|
|
@@ -114,7 +114,7 @@ export interface MonitorOptions {
|
|
|
114
114
|
}
|
|
115
115
|
```
|
|
116
116
|
|
|
117
|
-
See also: [Chain](./client.md#type-chain), [Chaintracks](./services.md#class-chaintracks), [ChaintracksClientApi](./services.md#interface-chaintracksclientapi), [MonitorStorage](./monitor.md#type-monitorstorage), [ProvenTransactionStatus](./client.md#interface-proventransactionstatus), [ReviewActionResult](./client.md#interface-reviewactionresult), [Services](./services.md#class-services)
|
|
117
|
+
See also: [Chain](./client.md#type-chain), [Chaintracks](./services.md#class-chaintracks), [ChaintracksClientApi](./services.md#interface-chaintracksclientapi), [MonitorStorage](./monitor.md#type-monitorstorage), [ProvenTransactionStatus](./client.md#interface-proventransactionstatus), [ReviewActionResult](./client.md#interface-reviewactionresult), [Services](./services.md#class-services), [WalletServices](./client.md#interface-walletservices)
|
|
118
118
|
|
|
119
119
|
###### Property msecsWaitPerMerkleProofServiceReq
|
|
120
120
|
|
|
@@ -176,14 +176,14 @@ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](
|
|
|
176
176
|
|
|
177
177
|
| | |
|
|
178
178
|
| --- | --- |
|
|
179
|
-
| [Monitor](#class-monitor) | [
|
|
180
|
-
| [MonitorDaemon](#class-monitordaemon) | [
|
|
181
|
-
| [TaskCheckForProofs](#class-taskcheckforproofs) | [
|
|
182
|
-
| [TaskCheckNoSends](#class-taskchecknosends) | [
|
|
183
|
-
| [TaskClock](#class-taskclock) | [
|
|
184
|
-
| [TaskFailAbandoned](#class-taskfailabandoned) | [
|
|
179
|
+
| [Monitor](#class-monitor) | [TaskNewHeader](#class-tasknewheader) |
|
|
180
|
+
| [MonitorDaemon](#class-monitordaemon) | [TaskPurge](#class-taskpurge) |
|
|
181
|
+
| [TaskCheckForProofs](#class-taskcheckforproofs) | [TaskReorg](#class-taskreorg) |
|
|
182
|
+
| [TaskCheckNoSends](#class-taskchecknosends) | [TaskReviewStatus](#class-taskreviewstatus) |
|
|
183
|
+
| [TaskClock](#class-taskclock) | [TaskSendWaiting](#class-tasksendwaiting) |
|
|
184
|
+
| [TaskFailAbandoned](#class-taskfailabandoned) | [TaskSyncWhenIdle](#class-tasksyncwhenidle) |
|
|
185
|
+
| [TaskMineBlock](#class-taskmineblock) | [TaskUnFail](#class-taskunfail) |
|
|
185
186
|
| [TaskMonitorCallHistory](#class-taskmonitorcallhistory) | [WalletMonitorTask](#class-walletmonitortask) |
|
|
186
|
-
| [TaskNewHeader](#class-tasknewheader) | |
|
|
187
187
|
|
|
188
188
|
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
189
189
|
|
|
@@ -198,7 +198,7 @@ and potentially that reorgs update proofs that were already received.
|
|
|
198
198
|
export class Monitor {
|
|
199
199
|
static createDefaultWalletMonitorOptions(chain: Chain, storage: MonitorStorage, services?: Services, chaintracks?: Chaintracks): MonitorOptions
|
|
200
200
|
options: MonitorOptions;
|
|
201
|
-
services: Services;
|
|
201
|
+
services: Services | WalletServices;
|
|
202
202
|
chain: Chain;
|
|
203
203
|
storage: MonitorStorage;
|
|
204
204
|
chaintracks: ChaintracksClientApi;
|
|
@@ -249,7 +249,7 @@ export class Monitor {
|
|
|
249
249
|
}
|
|
250
250
|
```
|
|
251
251
|
|
|
252
|
-
See also: [BlockHeader](./client.md#interface-blockheader), [Chain](./client.md#type-chain), [Chaintracks](./services.md#class-chaintracks), [ChaintracksClientApi](./services.md#interface-chaintracksclientapi), [DeactivedHeader](./monitor.md#interface-deactivedheader), [MonitorOptions](./monitor.md#interface-monitoroptions), [MonitorStorage](./monitor.md#type-monitorstorage), [ProvenTransactionStatus](./client.md#interface-proventransactionstatus), [ReviewActionResult](./client.md#interface-reviewactionresult), [Services](./services.md#class-services), [TaskPurgeParams](./monitor.md#interface-taskpurgeparams), [WalletMonitorTask](./monitor.md#class-walletmonitortask)
|
|
252
|
+
See also: [BlockHeader](./client.md#interface-blockheader), [Chain](./client.md#type-chain), [Chaintracks](./services.md#class-chaintracks), [ChaintracksClientApi](./services.md#interface-chaintracksclientapi), [DeactivedHeader](./monitor.md#interface-deactivedheader), [MonitorOptions](./monitor.md#interface-monitoroptions), [MonitorStorage](./monitor.md#type-monitorstorage), [ProvenTransactionStatus](./client.md#interface-proventransactionstatus), [ReviewActionResult](./client.md#interface-reviewactionresult), [Services](./services.md#class-services), [TaskPurgeParams](./monitor.md#interface-taskpurgeparams), [WalletMonitorTask](./monitor.md#class-walletmonitortask), [WalletServices](./client.md#interface-walletservices)
|
|
253
253
|
|
|
254
254
|
###### Property _otherTasks
|
|
255
255
|
|
|
@@ -516,6 +516,25 @@ See also: [Monitor](./monitor.md#class-monitor), [WalletMonitorTask](./monitor.m
|
|
|
516
516
|
|
|
517
517
|
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
518
518
|
|
|
519
|
+
---
|
|
520
|
+
##### Class: TaskMineBlock
|
|
521
|
+
|
|
522
|
+
```ts
|
|
523
|
+
export class TaskMineBlock extends WalletMonitorTask {
|
|
524
|
+
static taskName = "MineBlock";
|
|
525
|
+
static mineNow = false;
|
|
526
|
+
constructor(monitor: Monitor, public triggerMsecs = 10 * Monitor.oneMinute)
|
|
527
|
+
trigger(nowMsecsSinceEpoch: number): {
|
|
528
|
+
run: boolean;
|
|
529
|
+
}
|
|
530
|
+
async runTask(): Promise<string>
|
|
531
|
+
}
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
See also: [Monitor](./monitor.md#class-monitor), [WalletMonitorTask](./monitor.md#class-walletmonitortask)
|
|
535
|
+
|
|
536
|
+
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
537
|
+
|
|
519
538
|
---
|
|
520
539
|
##### Class: TaskMonitorCallHistory
|
|
521
540
|
|
package/docs/services.md
CHANGED
|
@@ -3457,19 +3457,28 @@ export class Chaintracks implements ChaintracksManagementApi {
|
|
|
3457
3457
|
async startListening(): Promise<void>
|
|
3458
3458
|
private async syncBulkStorageNoLock(presentHeight: number, initialRanges: HeightRanges): Promise<void> {
|
|
3459
3459
|
let newLiveHeaders: BlockHeader[] = [];
|
|
3460
|
-
let bulkDone = false;
|
|
3461
3460
|
let before = initialRanges;
|
|
3462
3461
|
let after = before;
|
|
3463
3462
|
let added = HeightRange.empty;
|
|
3463
|
+
const maxSyncRounds = Math.max(1, this.bulkIngestors.length * 2);
|
|
3464
3464
|
let done = false;
|
|
3465
|
-
for (; !done;) {
|
|
3465
|
+
for (let round = 1; !done && round <= maxSyncRounds; round++) {
|
|
3466
3466
|
let bulkSyncError: WalletError | undefined;
|
|
3467
|
+
let roundMadeProgress = false;
|
|
3468
|
+
let roundHadSuccess = false;
|
|
3467
3469
|
for (const bulk of this.bulkIngestors) {
|
|
3468
3470
|
try {
|
|
3471
|
+
const beforeBulkMax = before.bulk.maxHeight;
|
|
3472
|
+
const beforeLiveRange = HeightRange.from(newLiveHeaders);
|
|
3469
3473
|
const r = await bulk.synchronize(presentHeight, before, newLiveHeaders);
|
|
3474
|
+
roundHadSuccess = true;
|
|
3470
3475
|
newLiveHeaders = r.liveHeaders;
|
|
3471
3476
|
after = await this.storage.getAvailableHeightRanges();
|
|
3472
3477
|
added = after.bulk.above(before.bulk);
|
|
3478
|
+
const afterLiveRange = HeightRange.from(newLiveHeaders);
|
|
3479
|
+
if (after.bulk.maxHeight > beforeBulkMax || afterLiveRange.maxHeight > beforeLiveRange.maxHeight) {
|
|
3480
|
+
roundMadeProgress = true;
|
|
3481
|
+
}
|
|
3473
3482
|
before = after;
|
|
3474
3483
|
this.log(`Bulk Ingestor: ${added.length} added with ${newLiveHeaders.length} live headers from ${bulk.constructor.name}`);
|
|
3475
3484
|
if (r.done) {
|
|
@@ -3484,12 +3493,19 @@ export class Chaintracks implements ChaintracksManagementApi {
|
|
|
3484
3493
|
break;
|
|
3485
3494
|
}
|
|
3486
3495
|
}
|
|
3487
|
-
if (!
|
|
3496
|
+
if (!this.available && bulkSyncError && !roundHadSuccess) {
|
|
3488
3497
|
this.startupError = bulkSyncError;
|
|
3489
3498
|
break;
|
|
3490
3499
|
}
|
|
3491
|
-
if (
|
|
3500
|
+
if (done)
|
|
3501
|
+
break;
|
|
3502
|
+
if (!roundMadeProgress) {
|
|
3503
|
+
this.log(`Bulk sync stalled after round ${round}. Deferring further bulk sync attempts to continue live header processing.`);
|
|
3492
3504
|
break;
|
|
3505
|
+
}
|
|
3506
|
+
if (round === maxSyncRounds) {
|
|
3507
|
+
this.log(`Bulk sync paused after ${maxSyncRounds} rounds to avoid runaway retries. Will retry in a later sync cycle.`);
|
|
3508
|
+
}
|
|
3493
3509
|
}
|
|
3494
3510
|
if (!this.startupError) {
|
|
3495
3511
|
this.liveHeaders.unshift(...newLiveHeaders);
|
|
@@ -4465,7 +4481,7 @@ export default class SdkWhatsOnChain implements ChainTracker {
|
|
|
4465
4481
|
readonly apiKey: string;
|
|
4466
4482
|
protected readonly URL: string;
|
|
4467
4483
|
protected readonly httpClient: HttpClient;
|
|
4468
|
-
constructor(network: "main" | "test" | "stn" = "main", config: WhatsOnChainConfig = {})
|
|
4484
|
+
constructor(network: "main" | "test" | "stn" | "teratest" = "main", config: WhatsOnChainConfig = {})
|
|
4469
4485
|
async isValidRootForHeight(root: string, height: number): Promise<boolean>
|
|
4470
4486
|
async currentHeight(): Promise<number>
|
|
4471
4487
|
protected getHttpHeaders(): Record<string, string>
|
|
@@ -4477,7 +4493,7 @@ export default class SdkWhatsOnChain implements ChainTracker {
|
|
|
4477
4493
|
Constructs an instance of the WhatsOnChain ChainTracker.
|
|
4478
4494
|
|
|
4479
4495
|
```ts
|
|
4480
|
-
constructor(network: "main" | "test" | "stn" = "main", config: WhatsOnChainConfig = {})
|
|
4496
|
+
constructor(network: "main" | "test" | "stn" | "teratest" = "main", config: WhatsOnChainConfig = {})
|
|
4481
4497
|
```
|
|
4482
4498
|
|
|
4483
4499
|
Argument Details
|
|
@@ -4598,6 +4614,9 @@ export class Services implements WalletServices {
|
|
|
4598
4614
|
async getUtxoStatus(output: string, outputFormat?: GetUtxoStatusOutputFormat, outpoint?: string, useNext?: boolean, logger?: WalletLoggerInterface): Promise<GetUtxoStatusResult>
|
|
4599
4615
|
async getScriptHashHistory(hash: string, useNext?: boolean, logger?: WalletLoggerInterface): Promise<GetScriptHashHistoryResult>
|
|
4600
4616
|
postBeefMode: "PromiseAll" | "UntilSuccess" = "UntilSuccess";
|
|
4617
|
+
postBeefUntilSuccessSoftTimeoutMs = 5000;
|
|
4618
|
+
postBeefUntilSuccessSoftTimeoutPerKbMs = 50;
|
|
4619
|
+
postBeefUntilSuccessSoftTimeoutMaxMs = 30000;
|
|
4601
4620
|
async postBeef(beef: Beef, txids: string[], logger?: WalletLoggerInterface): Promise<PostBeefResult[]>
|
|
4602
4621
|
async getRawTx(txid: string, useNext?: boolean): Promise<GetRawTxResult>
|
|
4603
4622
|
async invokeChaintracksWithRetry<R>(method: () => Promise<R>): Promise<R>
|
|
@@ -4613,6 +4632,32 @@ export class Services implements WalletServices {
|
|
|
4613
4632
|
|
|
4614
4633
|
See also: [ARC](./services.md#class-arc), [Bitails](./services.md#class-bitails), [BlockHeader](./client.md#interface-blockheader), [Chain](./client.md#type-chain), [FiatCurrencyCode](./client.md#type-fiatcurrencycode), [FiatExchangeRates](./client.md#interface-fiatexchangerates), [GetMerklePathResult](./client.md#interface-getmerklepathresult), [GetMerklePathService](./client.md#type-getmerklepathservice), [GetRawTxResult](./client.md#interface-getrawtxresult), [GetRawTxService](./client.md#type-getrawtxservice), [GetScriptHashHistoryResult](./client.md#interface-getscripthashhistoryresult), [GetScriptHashHistoryService](./client.md#type-getscripthashhistoryservice), [GetStatusForTxidsResult](./client.md#interface-getstatusfortxidsresult), [GetStatusForTxidsService](./client.md#type-getstatusfortxidsservice), [GetUtxoStatusOutputFormat](./client.md#type-getutxostatusoutputformat), [GetUtxoStatusResult](./client.md#interface-getutxostatusresult), [GetUtxoStatusService](./client.md#type-getutxostatusservice), [PostBeefResult](./client.md#interface-postbeefresult), [PostBeefService](./client.md#type-postbeefservice), [ServiceCollection](./services.md#class-servicecollection), [ServicesCallHistory](./client.md#type-servicescallhistory), [TableOutput](./storage.md#interface-tableoutput), [UpdateFiatExchangeRateService](./client.md#type-updatefiatexchangerateservice), [WalletServices](./client.md#interface-walletservices), [WalletServicesOptions](./client.md#interface-walletservicesoptions), [WhatsOnChain](./services.md#class-whatsonchain), [getBeefForTxid](./services.md#function-getbeeffortxid), [logger](./client.md#variable-logger)
|
|
4615
4634
|
|
|
4635
|
+
###### Property postBeefUntilSuccessSoftTimeoutMaxMs
|
|
4636
|
+
|
|
4637
|
+
Upper bound for adaptive soft-timeout in `UntilSuccess` mode.
|
|
4638
|
+
|
|
4639
|
+
```ts
|
|
4640
|
+
postBeefUntilSuccessSoftTimeoutMaxMs = 30000
|
|
4641
|
+
```
|
|
4642
|
+
|
|
4643
|
+
###### Property postBeefUntilSuccessSoftTimeoutMs
|
|
4644
|
+
|
|
4645
|
+
Soft timeout used for each provider call in `UntilSuccess` mode.
|
|
4646
|
+
This bounds request latency when a provider hangs before failover.
|
|
4647
|
+
|
|
4648
|
+
```ts
|
|
4649
|
+
postBeefUntilSuccessSoftTimeoutMs = 5000
|
|
4650
|
+
```
|
|
4651
|
+
|
|
4652
|
+
###### Property postBeefUntilSuccessSoftTimeoutPerKbMs
|
|
4653
|
+
|
|
4654
|
+
Additional soft-timeout budget (ms) per KiB of serialized Beef payload.
|
|
4655
|
+
Helps avoid false timeout failover on legitimately large submissions.
|
|
4656
|
+
|
|
4657
|
+
```ts
|
|
4658
|
+
postBeefUntilSuccessSoftTimeoutPerKbMs = 50
|
|
4659
|
+
```
|
|
4660
|
+
|
|
4616
4661
|
###### Method hashOutputScript
|
|
4617
4662
|
|
|
4618
4663
|
```ts
|
|
@@ -5294,27 +5339,33 @@ Returns the genesis block for the specified chain.
|
|
|
5294
5339
|
|
|
5295
5340
|
```ts
|
|
5296
5341
|
export function genesisHeader(chain: Chain): BlockHeader {
|
|
5297
|
-
|
|
5298
|
-
|
|
5299
|
-
|
|
5300
|
-
|
|
5301
|
-
|
|
5302
|
-
|
|
5303
|
-
|
|
5304
|
-
|
|
5305
|
-
|
|
5306
|
-
|
|
5307
|
-
|
|
5308
|
-
|
|
5309
|
-
|
|
5310
|
-
|
|
5311
|
-
|
|
5312
|
-
|
|
5313
|
-
|
|
5314
|
-
|
|
5315
|
-
|
|
5316
|
-
|
|
5317
|
-
|
|
5342
|
+
switch (chain) {
|
|
5343
|
+
case "main":
|
|
5344
|
+
return {
|
|
5345
|
+
version: 1,
|
|
5346
|
+
previousHash: "0000000000000000000000000000000000000000000000000000000000000000",
|
|
5347
|
+
merkleRoot: "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b",
|
|
5348
|
+
time: 1231006505,
|
|
5349
|
+
bits: 486604799,
|
|
5350
|
+
nonce: 2083236893,
|
|
5351
|
+
height: 0,
|
|
5352
|
+
hash: "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f"
|
|
5353
|
+
};
|
|
5354
|
+
case "test":
|
|
5355
|
+
case "teratest":
|
|
5356
|
+
return {
|
|
5357
|
+
version: 1,
|
|
5358
|
+
previousHash: "0000000000000000000000000000000000000000000000000000000000000000",
|
|
5359
|
+
merkleRoot: "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b",
|
|
5360
|
+
time: 1296688602,
|
|
5361
|
+
bits: 486604799,
|
|
5362
|
+
nonce: 414098458,
|
|
5363
|
+
height: 0,
|
|
5364
|
+
hash: "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943"
|
|
5365
|
+
};
|
|
5366
|
+
case "mock":
|
|
5367
|
+
throw new Error(`genesisHeader does not support 'mock' chain. Mock chain generates its own genesis block.`);
|
|
5368
|
+
}
|
|
5318
5369
|
}
|
|
5319
5370
|
```
|
|
5320
5371
|
|
package/docs/storage.md
CHANGED
|
@@ -3570,87 +3570,15 @@ export class StorageKnex extends StorageProvider implements WalletStorageProvide
|
|
|
3570
3570
|
log: string;
|
|
3571
3571
|
}>
|
|
3572
3572
|
async countChangeInputs(userId: number, basketId: number, excludeSending: boolean): Promise<number>
|
|
3573
|
-
async
|
|
3574
|
-
|
|
3575
|
-
|
|
3576
|
-
|
|
3577
|
-
|
|
3578
|
-
|
|
3579
|
-
|
|
3580
|
-
|
|
3581
|
-
|
|
3582
|
-
let oidr = await trx.raw(rawQuery);
|
|
3583
|
-
outputId = undefined;
|
|
3584
|
-
if (!oidr["outputId"] && oidr.length > 0)
|
|
3585
|
-
oidr = oidr[0];
|
|
3586
|
-
if (!oidr["outputId"] && oidr.length > 0)
|
|
3587
|
-
oidr = oidr[0];
|
|
3588
|
-
if (oidr["outputId"])
|
|
3589
|
-
outputId = Number(oidr["outputId"]);
|
|
3590
|
-
};
|
|
3591
|
-
if (exactSatoshis !== undefined) {
|
|
3592
|
-
await setOutputId(`
|
|
3593
|
-
SELECT outputId
|
|
3594
|
-
FROM outputs
|
|
3595
|
-
WHERE userId = ${userId}
|
|
3596
|
-
AND spendable = 1
|
|
3597
|
-
AND basketId = ${basketId}
|
|
3598
|
-
${txStatusCondition}
|
|
3599
|
-
AND satoshis = ${exactSatoshis}
|
|
3600
|
-
LIMIT 1;
|
|
3601
|
-
`);
|
|
3602
|
-
}
|
|
3603
|
-
if (outputId === undefined) {
|
|
3604
|
-
await setOutputId(`
|
|
3605
|
-
SELECT outputId
|
|
3606
|
-
FROM outputs
|
|
3607
|
-
WHERE userId = ${userId}
|
|
3608
|
-
AND spendable = 1
|
|
3609
|
-
AND basketId = ${basketId}
|
|
3610
|
-
${txStatusCondition}
|
|
3611
|
-
AND satoshis - ${targetSatoshis} = (
|
|
3612
|
-
SELECT MIN(satoshis - ${targetSatoshis})
|
|
3613
|
-
FROM outputs
|
|
3614
|
-
WHERE userId = ${userId}
|
|
3615
|
-
AND spendable = 1
|
|
3616
|
-
AND basketId = ${basketId}
|
|
3617
|
-
${txStatusCondition}
|
|
3618
|
-
AND satoshis - ${targetSatoshis} >= 0
|
|
3619
|
-
)
|
|
3620
|
-
LIMIT 1;
|
|
3621
|
-
`);
|
|
3622
|
-
}
|
|
3623
|
-
if (outputId === undefined) {
|
|
3624
|
-
await setOutputId(`
|
|
3625
|
-
SELECT outputId
|
|
3626
|
-
FROM outputs
|
|
3627
|
-
WHERE userId = ${userId}
|
|
3628
|
-
AND spendable = 1
|
|
3629
|
-
AND basketId = ${basketId}
|
|
3630
|
-
${txStatusCondition}
|
|
3631
|
-
AND satoshis - ${targetSatoshis} = (
|
|
3632
|
-
SELECT MAX(satoshis - ${targetSatoshis})
|
|
3633
|
-
FROM outputs
|
|
3634
|
-
WHERE userId = ${userId}
|
|
3635
|
-
AND spendable = 1
|
|
3636
|
-
AND basketId = ${basketId}
|
|
3637
|
-
${txStatusCondition}
|
|
3638
|
-
AND satoshis - ${targetSatoshis} < 0
|
|
3639
|
-
)
|
|
3640
|
-
LIMIT 1;
|
|
3641
|
-
`);
|
|
3642
|
-
}
|
|
3643
|
-
if (outputId === undefined)
|
|
3644
|
-
return undefined;
|
|
3645
|
-
await this.updateOutput(outputId, {
|
|
3646
|
-
spendable: false,
|
|
3647
|
-
spentBy: transactionId
|
|
3648
|
-
}, trx);
|
|
3649
|
-
const r = verifyTruthy(await this.findOutputById(outputId, trx));
|
|
3650
|
-
return r;
|
|
3651
|
-
});
|
|
3652
|
-
return r;
|
|
3653
|
-
}
|
|
3573
|
+
override async findOutputsByIds(outputIds: number[], trx?: TrxToken): Promise<Record<number, TableOutput>>
|
|
3574
|
+
override async findOutputsByOutpoints(userId: number, outpoints: Array<{
|
|
3575
|
+
txid: string;
|
|
3576
|
+
vout: number;
|
|
3577
|
+
}>, trx?: TrxToken): Promise<Record<string, TableOutput>>
|
|
3578
|
+
override async findOrInsertOutputBasketsBulk(userId: number, names: string[], trx?: TrxToken): Promise<Record<string, TableOutputBasket>>
|
|
3579
|
+
override async findOrInsertOutputTagsBulk(userId: number, tags: string[], trx?: TrxToken): Promise<Record<string, TableOutputTag>>
|
|
3580
|
+
override async sumSpendableSatoshisInBasket(userId: number, basketId: number, excludeSending: boolean, trx?: TrxToken): Promise<number>
|
|
3581
|
+
async allocateChangeInput(userId: number, basketId: number, targetSatoshis: number, exactSatoshis: number | undefined, excludeSending: boolean, transactionId: number): Promise<TableOutput | undefined>
|
|
3654
3582
|
validateEntity<T extends EntityTimeStamp>(entity: T, dateFields?: string[], booleanFields?: string[]): T
|
|
3655
3583
|
validateEntities<T extends EntityTimeStamp>(entities: T[], dateFields?: string[], booleanFields?: string[]): T[]
|
|
3656
3584
|
async adminStats(adminIdentityKey: string): Promise<AdminStatsResult> {
|
|
@@ -3815,7 +3743,7 @@ select
|
|
|
3815
3743
|
}
|
|
3816
3744
|
```
|
|
3817
3745
|
|
|
3818
|
-
See also: [AdminStatsResult](./storage.md#interface-adminstatsresult), [AuthId](./client.md#interface-authid), [DBType](./storage.md#type-dbtype), [EntityTimeStamp](./client.md#interface-entitytimestamp), [FindCertificateFieldsArgs](./client.md#interface-findcertificatefieldsargs), [FindCertificatesArgs](./client.md#interface-findcertificatesargs), [FindCommissionsArgs](./client.md#interface-findcommissionsargs), [FindForUserSincePagedArgs](./client.md#interface-findforusersincepagedargs), [FindMonitorEventsArgs](./client.md#interface-findmonitoreventsargs), [FindOutputBasketsArgs](./client.md#interface-findoutputbasketsargs), [FindOutputTagMapsArgs](./client.md#interface-findoutputtagmapsargs), [FindOutputTagsArgs](./client.md#interface-findoutputtagsargs), [FindOutputsArgs](./client.md#interface-findoutputsargs), [FindPartialSincePagedArgs](./client.md#interface-findpartialsincepagedargs), [FindProvenTxReqsArgs](./client.md#interface-findproventxreqsargs), [FindProvenTxsArgs](./client.md#interface-findproventxsargs), [FindSyncStatesArgs](./client.md#interface-findsyncstatesargs), [FindTransactionsArgs](./client.md#interface-findtransactionsargs), [FindTxLabelMapsArgs](./client.md#interface-findtxlabelmapsargs), [FindTxLabelsArgs](./client.md#interface-findtxlabelsargs), [FindUsersArgs](./client.md#interface-findusersargs), [ProvenOrRawTx](./client.md#interface-provenorrawtx), [PurgeParams](./client.md#interface-purgeparams), [PurgeResults](./client.md#interface-purgeresults), [ServicesCallHistory](./client.md#type-servicescallhistory), [StorageKnexOptions](./storage.md#interface-storageknexoptions), [StorageProvider](./storage.md#class-storageprovider), [TableCertificate](./storage.md#interface-tablecertificate), [TableCertificateField](./storage.md#interface-tablecertificatefield), [TableCertificateX](./storage.md#interface-tablecertificatex), [TableCommission](./storage.md#interface-tablecommission), [TableMonitorEvent](./storage.md#interface-tablemonitorevent), [TableOutput](./storage.md#interface-tableoutput), [TableOutputBasket](./storage.md#interface-tableoutputbasket), [TableOutputTag](./storage.md#interface-tableoutputtag), [TableOutputTagMap](./storage.md#interface-tableoutputtagmap), [TableProvenTx](./storage.md#interface-tableproventx), [TableProvenTxReq](./storage.md#interface-tableproventxreq), [TableSettings](./storage.md#interface-tablesettings), [TableSyncState](./storage.md#interface-tablesyncstate), [TableTransaction](./storage.md#interface-tabletransaction), [TableTxLabel](./storage.md#interface-tabletxlabel), [TableTxLabelMap](./storage.md#interface-tabletxlabelmap), [TableUser](./storage.md#interface-tableuser), [
|
|
3746
|
+
See also: [AdminStatsResult](./storage.md#interface-adminstatsresult), [AuthId](./client.md#interface-authid), [DBType](./storage.md#type-dbtype), [EntityTimeStamp](./client.md#interface-entitytimestamp), [FindCertificateFieldsArgs](./client.md#interface-findcertificatefieldsargs), [FindCertificatesArgs](./client.md#interface-findcertificatesargs), [FindCommissionsArgs](./client.md#interface-findcommissionsargs), [FindForUserSincePagedArgs](./client.md#interface-findforusersincepagedargs), [FindMonitorEventsArgs](./client.md#interface-findmonitoreventsargs), [FindOutputBasketsArgs](./client.md#interface-findoutputbasketsargs), [FindOutputTagMapsArgs](./client.md#interface-findoutputtagmapsargs), [FindOutputTagsArgs](./client.md#interface-findoutputtagsargs), [FindOutputsArgs](./client.md#interface-findoutputsargs), [FindPartialSincePagedArgs](./client.md#interface-findpartialsincepagedargs), [FindProvenTxReqsArgs](./client.md#interface-findproventxreqsargs), [FindProvenTxsArgs](./client.md#interface-findproventxsargs), [FindSyncStatesArgs](./client.md#interface-findsyncstatesargs), [FindTransactionsArgs](./client.md#interface-findtransactionsargs), [FindTxLabelMapsArgs](./client.md#interface-findtxlabelmapsargs), [FindTxLabelsArgs](./client.md#interface-findtxlabelsargs), [FindUsersArgs](./client.md#interface-findusersargs), [ProvenOrRawTx](./client.md#interface-provenorrawtx), [PurgeParams](./client.md#interface-purgeparams), [PurgeResults](./client.md#interface-purgeresults), [ServicesCallHistory](./client.md#type-servicescallhistory), [StorageKnexOptions](./storage.md#interface-storageknexoptions), [StorageProvider](./storage.md#class-storageprovider), [TableCertificate](./storage.md#interface-tablecertificate), [TableCertificateField](./storage.md#interface-tablecertificatefield), [TableCertificateX](./storage.md#interface-tablecertificatex), [TableCommission](./storage.md#interface-tablecommission), [TableMonitorEvent](./storage.md#interface-tablemonitorevent), [TableOutput](./storage.md#interface-tableoutput), [TableOutputBasket](./storage.md#interface-tableoutputbasket), [TableOutputTag](./storage.md#interface-tableoutputtag), [TableOutputTagMap](./storage.md#interface-tableoutputtagmap), [TableProvenTx](./storage.md#interface-tableproventx), [TableProvenTxReq](./storage.md#interface-tableproventxreq), [TableSettings](./storage.md#interface-tablesettings), [TableSyncState](./storage.md#interface-tablesyncstate), [TableTransaction](./storage.md#interface-tabletransaction), [TableTxLabel](./storage.md#interface-tabletxlabel), [TableTxLabelMap](./storage.md#interface-tabletxlabelmap), [TableUser](./storage.md#interface-tableuser), [TrxToken](./client.md#interface-trxtoken), [WERR_NOT_IMPLEMENTED](./client.md#class-werr_not_implemented), [WalletStorageProvider](./client.md#interface-walletstorageprovider), [listActions](./storage.md#function-listactions), [listOutputs](./storage.md#function-listoutputs), [purgeData](./storage.md#function-purgedata), [reviewStatus](./storage.md#function-reviewstatus), [verifyOneOrNone](./client.md#function-verifyoneornone)
|
|
3819
3747
|
|
|
3820
3748
|
###### Method allocateChangeInput
|
|
3821
3749
|
|
|
@@ -3937,6 +3865,14 @@ export abstract class StorageProvider extends StorageReaderWriter implements Wal
|
|
|
3937
3865
|
abstract listActions(auth: AuthId, args: Validation.ValidListActionsArgs): Promise<ListActionsResult>;
|
|
3938
3866
|
abstract listOutputs(auth: AuthId, args: Validation.ValidListOutputsArgs): Promise<ListOutputsResult>;
|
|
3939
3867
|
abstract countChangeInputs(userId: number, basketId: number, excludeSending: boolean): Promise<number>;
|
|
3868
|
+
async findOutputsByIds(outputIds: number[], trx?: TrxToken): Promise<Record<number, TableOutput>>
|
|
3869
|
+
async findOutputsByOutpoints(userId: number, outpoints: Array<{
|
|
3870
|
+
txid: string;
|
|
3871
|
+
vout: number;
|
|
3872
|
+
}>, trx?: TrxToken): Promise<Record<string, TableOutput>>
|
|
3873
|
+
async findOrInsertOutputBasketsBulk(userId: number, names: string[], trx?: TrxToken): Promise<Record<string, TableOutputBasket>>
|
|
3874
|
+
async findOrInsertOutputTagsBulk(userId: number, tags: string[], trx?: TrxToken): Promise<Record<string, TableOutputTag>>
|
|
3875
|
+
async sumSpendableSatoshisInBasket(userId: number, basketId: number, excludeSending: boolean, trx?: TrxToken): Promise<number>
|
|
3940
3876
|
abstract findCertificatesAuth(auth: AuthId, args: FindCertificatesArgs): Promise<TableCertificateX[]>;
|
|
3941
3877
|
abstract findOutputBasketsAuth(auth: AuthId, args: FindOutputBasketsArgs): Promise<TableOutputBasket[]>;
|
|
3942
3878
|
abstract findOutputsAuth(auth: AuthId, args: FindOutputsArgs): Promise<TableOutput[]>;
|