Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | 57x 57x 57x 57x 57x 57x 57x 57x 67x 67x 67x 67x 67x 67x 1x 67x 67x 8x 8x 8x 8x 80x 80x 1x 64x 64x 64x 11x 11x 11x 20x 20x 19x 8x 8x 8x 3x 3x 1x 8x 8x 8x 2x 2x 2x 8x 8x 8x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import { AbortActionArgs, AbortActionResult, AcquireCertificateArgs, AcquireCertificateResult, Transaction as BsvTransaction, CreateActionArgs, CreateActionResult, DiscoverByAttributesArgs, DiscoverByIdentityKeyArgs, DiscoverCertificatesResult, InternalizeActionArgs, InternalizeActionResult, KeyDeriver, KeyDeriverApi, ListActionsArgs, ListActionsResult, ListCertificatesArgs, ListCertificatesResult, ListOutputsArgs, ListOutputsResult, ProtoWallet, ProveCertificateArgs, ProveCertificateResult, RelinquishCertificateArgs, RelinquishCertificateResult, RelinquishOutputArgs, RelinquishOutputResult, SignActionArgs, SignActionResult } from '@bsv/sdk';
import { sdk } from "../index.client";
import { WalletStorageManager } from "../storage/WalletStorageManager";
import { acquireDirectCertificate } from "./methods/acquireDirectCertificate";
import { createAction } from "./methods/createAction";
import { internalizeAction } from "./methods/internalizeAction";
import { proveCertificate } from "./methods/proveCertificate";
import { signAction } from "./methods/signAction";
export class WalletSigner implements sdk.WalletSigner {
chain: sdk.Chain
keyDeriver: KeyDeriverApi
storage: WalletStorageManager
_services?: sdk.WalletServices
identityKey: string
pendingSignActions: Record<string, PendingSignAction>
constructor(chain: sdk.Chain, keyDeriver: KeyDeriver, storage: WalletStorageManager) {
Iif (storage._authId.identityKey != keyDeriver.identityKey) throw new sdk.WERR_INVALID_PARAMETER('storage', `authenticated as the same identityKey (${storage._authId.identityKey}) as the keyDeriver (${keyDeriver.identityKey}).`);
this.chain = chain
this.keyDeriver = keyDeriver
this.storage = storage
this.identityKey = this.keyDeriver.identityKey
this.pendingSignActions = {}
}
getProtoWallet() : ProtoWallet { return new ProtoWallet(this.keyDeriver) }
setServices(v: sdk.WalletServices) {
this._services = v
this.storage.setServices(v)
}
getServices(): sdk.WalletServices {
Iif (!this._services)
throw new sdk.WERR_INVALID_OPERATION('Must set WalletSigner services first.')
return this._services
}
getStorageIdentity(): sdk.StorageIdentity {
const s = this.storage.getSettings()
return { storageIdentityKey: s.storageIdentityKey, storageName: s.storageName }
}
getClientChangeKeyPair(): sdk.KeyPair {
const kp: sdk.KeyPair = {
privateKey: this.keyDeriver.rootKey.toString(),
publicKey: this.keyDeriver.rootKey.toPublicKey().toString()
}
return kp
}
async getChain(): Promise<sdk.Chain> {
return this.chain
}
private validateAuthAndArgs<A, T extends sdk.ValidWalletSignerArgs>(args: A, validate: (args: A) => T): { vargs: T, auth: sdk.AuthId } {
const vargs = validate(args)
const auth: sdk.AuthId = { identityKey: this.identityKey }
return { vargs, auth }
}
async listActions(args: ListActionsArgs): Promise<ListActionsResult> {
this.validateAuthAndArgs(args, sdk.validateListActionsArgs)
const r = await this.storage.listActions(args)
return r
}
async listOutputs(args: ListOutputsArgs): Promise<ListOutputsResult> {
this.validateAuthAndArgs(args, sdk.validateListOutputsArgs)
const r = await this.storage.listOutputs(args)
return r
}
async listCertificates(args: ListCertificatesArgs): Promise<ListCertificatesResult> {
const { vargs } = this.validateAuthAndArgs(args, sdk.validateListCertificatesArgs)
const r = await this.storage.listCertificates(vargs)
return r
}
async abortAction(args: AbortActionArgs): Promise<AbortActionResult> {
const { auth } = this.validateAuthAndArgs(args, sdk.validateAbortActionArgs)
const r = await this.storage.abortAction(args)
return r
}
async createAction(args: CreateActionArgs): Promise<CreateActionResult> {
const { auth, vargs } = this.validateAuthAndArgs(args, sdk.validateCreateActionArgs)
const r = await createAction(this, auth, vargs)
return r
}
async signAction(args: SignActionArgs): Promise<SignActionResult> {
const { auth, vargs } = this.validateAuthAndArgs(args, sdk.validateSignActionArgs)
const r = await signAction(this, auth, vargs)
return r
}
async internalizeAction(args: InternalizeActionArgs): Promise<InternalizeActionResult> {
const { auth, vargs } = this.validateAuthAndArgs(args, sdk.validateInternalizeActionArgs)
const r = await internalizeAction(this, auth, args)
return r
}
async relinquishOutput(args: RelinquishOutputArgs): Promise<RelinquishOutputResult> {
const { vargs } = this.validateAuthAndArgs(args, sdk.validateRelinquishOutputArgs)
const r = await this.storage.relinquishOutput(args)
return { relinquished: true }
}
async relinquishCertificate(args: RelinquishCertificateArgs): Promise<RelinquishCertificateResult> {
this.validateAuthAndArgs(args, sdk.validateRelinquishCertificateArgs)
const r = await this.storage.relinquishCertificate(args)
return { relinquished: true }
}
async acquireDirectCertificate(args: AcquireCertificateArgs): Promise<AcquireCertificateResult> {
const { auth, vargs } = this.validateAuthAndArgs(args, sdk.validateAcquireDirectCertificateArgs)
vargs.subject = (await this.getProtoWallet().getPublicKey({ identityKey: true, privileged: args.privileged, privilegedReason: args.privilegedReason })).publicKey
const r = await acquireDirectCertificate(this, auth, vargs)
return r
}
async proveCertificate(args: ProveCertificateArgs): Promise<ProveCertificateResult> {
const { auth, vargs } = this.validateAuthAndArgs(args, sdk.validateProveCertificateArgs)
const r = await proveCertificate(this, auth, vargs)
return r
}
async discoverByIdentityKey(args: DiscoverByIdentityKeyArgs): Promise<DiscoverCertificatesResult> {
this.validateAuthAndArgs(args, sdk.validateDiscoverByIdentityKeyArgs)
throw new Error("Method not implemented.");
}
async discoverByAttributes(args: DiscoverByAttributesArgs): Promise<DiscoverCertificatesResult> {
this.validateAuthAndArgs(args, sdk.validateDiscoverByAttributesArgs)
throw new Error("Method not implemented.");
}
}
export interface PendingStorageInput {
vin: number,
derivationPrefix: string,
derivationSuffix: string,
unlockerPubKey?: string,
sourceSatoshis: number,
lockingScript: string
}
export interface PendingSignAction {
reference: string
dcr: sdk.StorageCreateActionResult
args: sdk.ValidCreateActionArgs
tx: BsvTransaction
amount: number
pdi: PendingStorageInput[]
} |