@did-btcr2/method 0.20.0 → 0.23.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/README.md +223 -1
- package/dist/browser.js +2566 -3507
- package/dist/browser.mjs +2566 -3507
- package/dist/cjs/core/beacon/aggregation/cohort/index.js +13 -2
- package/dist/cjs/core/beacon/aggregation/cohort/index.js.map +1 -1
- package/dist/cjs/core/beacon/aggregation/cohort/messages/base.js +7 -2
- package/dist/cjs/core/beacon/aggregation/cohort/messages/base.js.map +1 -1
- package/dist/cjs/core/beacon/aggregation/communication/adapter/did-comm.js +5 -10
- package/dist/cjs/core/beacon/aggregation/communication/adapter/did-comm.js.map +1 -1
- package/dist/cjs/core/beacon/aggregation/communication/adapter/nostr.js +4 -7
- package/dist/cjs/core/beacon/aggregation/communication/adapter/nostr.js.map +1 -1
- package/dist/cjs/core/beacon/aggregation/session/index.js +15 -3
- package/dist/cjs/core/beacon/aggregation/session/index.js.map +1 -1
- package/dist/cjs/core/beacon/cas-beacon.js +1 -1
- package/dist/cjs/core/beacon/cas-beacon.js.map +1 -1
- package/dist/cjs/core/beacon/signal-discovery.js +6 -6
- package/dist/cjs/core/beacon/signal-discovery.js.map +1 -1
- package/dist/cjs/core/beacon/singleton.js +18 -20
- package/dist/cjs/core/beacon/singleton.js.map +1 -1
- package/dist/cjs/core/beacon/smt-beacon.js +1 -1
- package/dist/cjs/core/beacon/smt-beacon.js.map +1 -1
- package/dist/cjs/core/identifier.js +11 -13
- package/dist/cjs/core/identifier.js.map +1 -1
- package/dist/cjs/core/resolve.js +52 -49
- package/dist/cjs/core/resolve.js.map +1 -1
- package/dist/cjs/core/update.js +3 -4
- package/dist/cjs/core/update.js.map +1 -1
- package/dist/cjs/did-btcr2.js +36 -35
- package/dist/cjs/did-btcr2.js.map +1 -1
- package/dist/cjs/utils/did-document-builder.js +0 -6
- package/dist/cjs/utils/did-document-builder.js.map +1 -1
- package/dist/cjs/utils/did-document.js +44 -26
- package/dist/cjs/utils/did-document.js.map +1 -1
- package/dist/esm/core/beacon/aggregation/cohort/index.js +13 -2
- package/dist/esm/core/beacon/aggregation/cohort/index.js.map +1 -1
- package/dist/esm/core/beacon/aggregation/cohort/messages/base.js +7 -2
- package/dist/esm/core/beacon/aggregation/cohort/messages/base.js.map +1 -1
- package/dist/esm/core/beacon/aggregation/communication/adapter/did-comm.js +5 -10
- package/dist/esm/core/beacon/aggregation/communication/adapter/did-comm.js.map +1 -1
- package/dist/esm/core/beacon/aggregation/communication/adapter/nostr.js +4 -7
- package/dist/esm/core/beacon/aggregation/communication/adapter/nostr.js.map +1 -1
- package/dist/esm/core/beacon/aggregation/session/index.js +15 -3
- package/dist/esm/core/beacon/aggregation/session/index.js.map +1 -1
- package/dist/esm/core/beacon/cas-beacon.js +1 -1
- package/dist/esm/core/beacon/cas-beacon.js.map +1 -1
- package/dist/esm/core/beacon/signal-discovery.js +6 -6
- package/dist/esm/core/beacon/signal-discovery.js.map +1 -1
- package/dist/esm/core/beacon/singleton.js +18 -20
- package/dist/esm/core/beacon/singleton.js.map +1 -1
- package/dist/esm/core/beacon/smt-beacon.js +1 -1
- package/dist/esm/core/beacon/smt-beacon.js.map +1 -1
- package/dist/esm/core/identifier.js +11 -13
- package/dist/esm/core/identifier.js.map +1 -1
- package/dist/esm/core/resolve.js +52 -49
- package/dist/esm/core/resolve.js.map +1 -1
- package/dist/esm/core/update.js +3 -4
- package/dist/esm/core/update.js.map +1 -1
- package/dist/esm/did-btcr2.js +36 -35
- package/dist/esm/did-btcr2.js.map +1 -1
- package/dist/esm/utils/did-document-builder.js +0 -6
- package/dist/esm/utils/did-document-builder.js.map +1 -1
- package/dist/esm/utils/did-document.js +44 -26
- package/dist/esm/utils/did-document.js.map +1 -1
- package/dist/types/core/beacon/aggregation/cohort/index.d.ts +1 -1
- package/dist/types/core/beacon/aggregation/cohort/index.d.ts.map +1 -1
- package/dist/types/core/beacon/aggregation/cohort/messages/base.d.ts +1 -1
- package/dist/types/core/beacon/aggregation/cohort/messages/base.d.ts.map +1 -1
- package/dist/types/core/beacon/aggregation/communication/adapter/did-comm.d.ts.map +1 -1
- package/dist/types/core/beacon/aggregation/communication/adapter/nostr.d.ts.map +1 -1
- package/dist/types/core/beacon/aggregation/session/index.d.ts +1 -1
- package/dist/types/core/beacon/aggregation/session/index.d.ts.map +1 -1
- package/dist/types/core/beacon/beacon.d.ts +3 -3
- package/dist/types/core/beacon/beacon.d.ts.map +1 -1
- package/dist/types/core/beacon/cas-beacon.d.ts +3 -3
- package/dist/types/core/beacon/cas-beacon.d.ts.map +1 -1
- package/dist/types/core/beacon/signal-discovery.d.ts +5 -5
- package/dist/types/core/beacon/signal-discovery.d.ts.map +1 -1
- package/dist/types/core/beacon/singleton.d.ts +4 -4
- package/dist/types/core/beacon/singleton.d.ts.map +1 -1
- package/dist/types/core/beacon/smt-beacon.d.ts +3 -3
- package/dist/types/core/beacon/smt-beacon.d.ts.map +1 -1
- package/dist/types/core/identifier.d.ts +17 -21
- package/dist/types/core/identifier.d.ts.map +1 -1
- package/dist/types/core/interfaces.d.ts +2 -2
- package/dist/types/core/interfaces.d.ts.map +1 -1
- package/dist/types/core/resolve.d.ts +10 -7
- package/dist/types/core/resolve.d.ts.map +1 -1
- package/dist/types/core/update.d.ts +2 -2
- package/dist/types/core/update.d.ts.map +1 -1
- package/dist/types/did-btcr2.d.ts +12 -8
- package/dist/types/did-btcr2.d.ts.map +1 -1
- package/dist/types/utils/did-document-builder.d.ts +0 -1
- package/dist/types/utils/did-document-builder.d.ts.map +1 -1
- package/dist/types/utils/did-document.d.ts +14 -9
- package/dist/types/utils/did-document.d.ts.map +1 -1
- package/package.json +8 -8
- package/src/core/beacon/aggregation/cohort/index.ts +13 -2
- package/src/core/beacon/aggregation/cohort/messages/base.ts +7 -2
- package/src/core/beacon/aggregation/communication/adapter/did-comm.ts +5 -12
- package/src/core/beacon/aggregation/communication/adapter/nostr.ts +5 -8
- package/src/core/beacon/aggregation/session/index.ts +15 -3
- package/src/core/beacon/beacon.ts +3 -3
- package/src/core/beacon/cas-beacon.ts +3 -3
- package/src/core/beacon/signal-discovery.ts +9 -9
- package/src/core/beacon/singleton.ts +21 -23
- package/src/core/beacon/smt-beacon.ts +3 -3
- package/src/core/identifier.ts +31 -28
- package/src/core/interfaces.ts +2 -2
- package/src/core/resolve.ts +73 -62
- package/src/core/update.ts +5 -5
- package/src/did-btcr2.ts +47 -43
- package/src/utils/did-document-builder.ts +0 -7
- package/src/utils/did-document.ts +54 -31
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
import { INVALID_SIDECAR_DATA, MISSING_UPDATE_DATA } from '@did-btcr2/common';
|
|
1
|
+
import { Canonicalization, INVALID_SIDECAR_DATA, MISSING_UPDATE_DATA } from '@did-btcr2/common';
|
|
2
2
|
import { SchnorrKeyPair } from '@did-btcr2/keypair';
|
|
3
|
-
import { Signer } from '@did-btcr2/kms';
|
|
4
3
|
import { opcodes, Psbt, script } from 'bitcoinjs-lib';
|
|
5
4
|
import { base58btc } from 'multiformats/bases/base58';
|
|
6
|
-
import { canonicalization } from '../../did-btcr2.js';
|
|
7
5
|
import { Beacon } from './beacon.js';
|
|
8
6
|
import { SingletonBeaconError } from './error.js';
|
|
9
7
|
/**
|
|
10
8
|
* Implements {@link https://dcdpr.github.io/did-btcr2/terminology.html#singleton-beacon | Singleton Beacon}.
|
|
11
9
|
* @class SingletonBeacon
|
|
12
10
|
* @type {SingletonBeacon}
|
|
13
|
-
* @extends {
|
|
11
|
+
* @extends {Beacon}
|
|
14
12
|
*/
|
|
15
13
|
export class SingletonBeacon extends Beacon {
|
|
16
14
|
/**
|
|
@@ -39,9 +37,9 @@ export class SingletonBeacon extends Beacon {
|
|
|
39
37
|
if (!signedUpdate) {
|
|
40
38
|
throw new SingletonBeaconError(`BTCR2 Signed Update not found for update hash ${updateHash}.`, MISSING_UPDATE_DATA, signal);
|
|
41
39
|
}
|
|
42
|
-
// Canonicalize, hash and encode to
|
|
43
|
-
const encodedUpdate =
|
|
44
|
-
// Encode the signal bytes hex string to
|
|
40
|
+
// Canonicalize, hash and encode to base58btc the signed update object found in sidecar or CAS
|
|
41
|
+
const encodedUpdate = Canonicalization.process(signedUpdate, { encoding: 'base58btc' });
|
|
42
|
+
// Encode the signal bytes hex string to base58btc
|
|
45
43
|
const signalBytes = base58btc.encode(Buffer.from(updateHash, 'hex'));
|
|
46
44
|
// Check for mismatch between found sidecar/cas update hash and onchain beacon signal hash
|
|
47
45
|
if (encodedUpdate !== signalBytes) {
|
|
@@ -58,7 +56,7 @@ export class SingletonBeacon extends Beacon {
|
|
|
58
56
|
* Broadcasts a SingletonBeacon signal to the Bitcoin network.
|
|
59
57
|
* @param {SignedBTCR2Update} signedUpdate The signed BTCR2 update to broadcast.
|
|
60
58
|
* @param {KeyBytes} secretKey The secret key for signing the Bitcoin transaction.
|
|
61
|
-
* @param {
|
|
59
|
+
* @param {BitcoinConnection} bitcoin The Bitcoin network connection.
|
|
62
60
|
* @returns {Promise<SignedBTCR2Update>} The signed update that was broadcast.
|
|
63
61
|
* @throws {SingletonBeaconError} if the bitcoin address is invalid or unfunded.
|
|
64
62
|
*/
|
|
@@ -66,7 +64,7 @@ export class SingletonBeacon extends Beacon {
|
|
|
66
64
|
// Convert the serviceEndpoint to a bitcoin address by removing the 'bitcoin:' prefix
|
|
67
65
|
const bitcoinAddress = this.service.serviceEndpoint.replace('bitcoin:', '');
|
|
68
66
|
// Query the Bitcoin network for UTXOs associated with the bitcoinAddress
|
|
69
|
-
const utxos = await bitcoin.
|
|
67
|
+
const utxos = await bitcoin.rest.address.getUtxos(bitcoinAddress);
|
|
70
68
|
// If no utxos are found, throw an error indicating the address is unfunded.
|
|
71
69
|
if (!utxos.length) {
|
|
72
70
|
throw new SingletonBeaconError('No UTXOs found, please fund address!', 'UNFUNDED_BEACON_ADDRESS', { bitcoinAddress });
|
|
@@ -78,11 +76,11 @@ export class SingletonBeacon extends Beacon {
|
|
|
78
76
|
throw new SingletonBeaconError('Beacon bitcoin address unfunded or utxos unconfirmed.', 'UNFUNDED_BEACON_ADDRESS', { bitcoinAddress });
|
|
79
77
|
}
|
|
80
78
|
// Get the previous tx to the utxo being spent
|
|
81
|
-
const prevTx = await bitcoin.
|
|
79
|
+
const prevTx = await bitcoin.rest.transaction.getHex(utxo.txid);
|
|
82
80
|
// Canonicalize and hash the signed update for OP_RETURN output
|
|
83
|
-
const updateHash =
|
|
81
|
+
const updateHash = Canonicalization.andHash(signedUpdate);
|
|
84
82
|
// Construct a spend transaction
|
|
85
|
-
const spendTx = new Psbt({ network: bitcoin.
|
|
83
|
+
const spendTx = new Psbt({ network: bitcoin.data })
|
|
86
84
|
// Spend tx contains the utxo as its input
|
|
87
85
|
.addInput({
|
|
88
86
|
hash: utxo.txid,
|
|
@@ -94,21 +92,21 @@ export class SingletonBeacon extends Beacon {
|
|
|
94
92
|
.addOutput({ address: bitcoinAddress, value: BigInt(utxo.value) - BigInt(500) })
|
|
95
93
|
// Add an OP_RETURN output containing the update hash
|
|
96
94
|
.addOutput({ script: script.compile([opcodes.OP_RETURN, updateHash]), value: 0n });
|
|
97
|
-
// Construct a
|
|
95
|
+
// Construct a key pair and PSBT signer from the secret key
|
|
98
96
|
const keyPair = SchnorrKeyPair.fromSecret(secretKey);
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
const signer = new Signer({ keyPair, network: bitcoin.network.name });
|
|
97
|
+
const signer = {
|
|
98
|
+
publicKey: keyPair.publicKey.compressed,
|
|
99
|
+
sign: (hash) => keyPair.secretKey.sign(hash, { scheme: 'ecdsa' }),
|
|
100
|
+
};
|
|
104
101
|
// Sign 0th input, finalize extract to hex in prep for broadcast
|
|
105
102
|
const signedTx = spendTx.signInput(0, signer)
|
|
106
103
|
.finalizeAllInputs()
|
|
107
104
|
.extractTransaction()
|
|
108
105
|
.toHex();
|
|
109
106
|
// Broadcast spendTx to the Bitcoin network.
|
|
110
|
-
const txid = await bitcoin.
|
|
111
|
-
|
|
107
|
+
const txid = await bitcoin.rest.transaction.send(signedTx);
|
|
108
|
+
// Log the txid of the broadcasted transaction
|
|
109
|
+
console.info(`Singleton Beacon Signal Broadcasted with txid: ${txid}`);
|
|
112
110
|
// Return the signed update
|
|
113
111
|
return signedUpdate;
|
|
114
112
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"singleton.js","sourceRoot":"","sources":["../../../../src/core/beacon/singleton.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAY,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"singleton.js","sourceRoot":"","sources":["../../../../src/core/beacon/singleton.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,7 +28,7 @@ export class SMTBeacon extends Beacon {
|
|
|
28
28
|
* Broadcast CAS Beacon signal to the Bitcoin network.
|
|
29
29
|
* @param {SignedBTCR2Update} signedUpdate The signed BTCR2 update to broadcast.
|
|
30
30
|
* @param {KeyBytes} secretKey The secret key for signing the Bitcoin transaction.
|
|
31
|
-
* @param {
|
|
31
|
+
* @param {BitcoinConnection} bitcoin The Bitcoin network connection.
|
|
32
32
|
* @return {Promise<SignedBTCR2Update>} The signed update that was broadcasted.
|
|
33
33
|
* @throws {SMTBeaconError} if broadcasting fails.
|
|
34
34
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smt-beacon.js","sourceRoot":"","sources":["../../../../src/core/beacon/smt-beacon.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C;;;;;GAKG;AACH,MAAM,OAAO,SAAU,SAAQ,MAAM;IACnC;;;OAGG;IACH,YAAY,OAAsB;QAChC,KAAK,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;;OAMG;IACH,cAAc,CACZ,OAA4B,EAC5B,OAAoB;QAEpB,MAAM,IAAI,cAAc,CAAC,yBAAyB,EAAE,wBAAwB,EAAE,EAAC,OAAO,EAAE,OAAO,EAAC,CAAC,CAAC;IACpG,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,eAAe,CACnB,YAA+B,EAC/B,SAAmB,EACnB,
|
|
1
|
+
{"version":3,"file":"smt-beacon.js","sourceRoot":"","sources":["../../../../src/core/beacon/smt-beacon.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C;;;;;GAKG;AACH,MAAM,OAAO,SAAU,SAAQ,MAAM;IACnC;;;OAGG;IACH,YAAY,OAAsB;QAChC,KAAK,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;;OAMG;IACH,cAAc,CACZ,OAA4B,EAC5B,OAAoB;QAEpB,MAAM,IAAI,cAAc,CAAC,yBAAyB,EAAE,wBAAwB,EAAE,EAAC,OAAO,EAAE,OAAO,EAAC,CAAC,CAAC;IACpG,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,eAAe,CACnB,YAA+B,EAC/B,SAAmB,EACnB,OAA0B;QAE1B,MAAM,IAAI,cAAc,CAAC,yBAAyB,EAAE,wBAAwB,EAAE,EAAC,YAAY,EAAE,SAAS,EAAE,OAAO,EAAC,CAAC,CAAC;IACpH,CAAC;CACF"}
|
|
@@ -24,15 +24,14 @@ export class Identifier {
|
|
|
24
24
|
* - a key-value representing a secp256k1 public key; or
|
|
25
25
|
* - a hash-value representing the hash of an initiating external DID document.
|
|
26
26
|
*
|
|
27
|
-
* @param {
|
|
28
|
-
* @param {
|
|
29
|
-
* @param {string} params.network Bitcoin network name.
|
|
30
|
-
* @param {number} params.version Identifier version.
|
|
31
|
-
* @param {KeyBytes | DocumentBytes} params.genesisBytes Public key or an intermediate document bytes.
|
|
27
|
+
* @param {KeyBytes | DocumentBytes} genesisBytes The genesis bytes (public key or document bytes).
|
|
28
|
+
* @param {DidCreateOptions} options The DID creation options.
|
|
32
29
|
* @returns {string} The new did:btcr2 identifier.
|
|
33
30
|
*/
|
|
34
|
-
static encode(
|
|
35
|
-
//
|
|
31
|
+
static encode(genesisBytes, options) {
|
|
32
|
+
// Deconstruct the options
|
|
33
|
+
const { idType, version = 1, network } = options;
|
|
34
|
+
// If idType is not a valid value per above, raise invalidDid error.
|
|
36
35
|
if (!(idType in IdentifierTypes)) {
|
|
37
36
|
throw new IdentifierError('Expected "idType" to be "KEY" or "EXTERNAL"', INVALID_DID, { idType });
|
|
38
37
|
}
|
|
@@ -223,14 +222,13 @@ export class Identifier {
|
|
|
223
222
|
* @returns {string} The new did:btcr2 identifier.
|
|
224
223
|
*/
|
|
225
224
|
static generate() {
|
|
226
|
-
const
|
|
227
|
-
const did = this.encode({
|
|
228
|
-
idType:
|
|
225
|
+
const keyPair = SchnorrKeyPair.generate();
|
|
226
|
+
const did = this.encode(keyPair.publicKey.compressed, {
|
|
227
|
+
idType: 'KEY',
|
|
229
228
|
version: 1,
|
|
230
|
-
network: '
|
|
231
|
-
genesisBytes: keys.publicKey.compressed
|
|
229
|
+
network: 'regtest'
|
|
232
230
|
});
|
|
233
|
-
return {
|
|
231
|
+
return { keyPair: keyPair.toJSON(), did };
|
|
234
232
|
}
|
|
235
233
|
/**
|
|
236
234
|
* Validates a did:btcr2 identifier.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identifier.js","sourceRoot":"","sources":["../../../src/core/identifier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"identifier.js","sourceRoot":"","sources":["../../../src/core/identifier.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/core/resolve.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { getNetwork } from '@did-btcr2/bitcoin';
|
|
2
|
-
import { DateUtils, IdentifierHrp, INVALID_DID, INVALID_DID_DOCUMENT, INVALID_DID_UPDATE, JSONPatch, JSONUtils, LATE_PUBLISHING_ERROR, MISSING_UPDATE_DATA, ResolveError } from '@did-btcr2/common';
|
|
2
|
+
import { Canonicalization, DateUtils, IdentifierHrp, INVALID_DID, INVALID_DID_DOCUMENT, INVALID_DID_UPDATE, JSONPatch, JSONUtils, LATE_PUBLISHING_ERROR, MISSING_UPDATE_DATA, ResolveError } from '@did-btcr2/common';
|
|
3
3
|
import { BIP340Cryptosuite, BIP340DataIntegrityProof, SchnorrMultikey } from '@did-btcr2/cryptosuite';
|
|
4
4
|
import { CompressedSecp256k1PublicKey } from '@did-btcr2/keypair';
|
|
5
5
|
import { bytesToHex } from '@noble/hashes/utils';
|
|
6
|
-
import {
|
|
6
|
+
import { DidBtcr2 } from '../did-btcr2.js';
|
|
7
7
|
import { Appendix } from '../utils/appendix.js';
|
|
8
8
|
import { DidDocument, ID_PLACEHOLDER_VALUE } from '../utils/did-document.js';
|
|
9
9
|
import { BeaconFactory } from './beacon/factory.js';
|
|
@@ -26,10 +26,10 @@ export class Resolve {
|
|
|
26
26
|
* @returns {DidDocument} The resolved DID Document object.
|
|
27
27
|
*/
|
|
28
28
|
static deterministic(didComponents) {
|
|
29
|
-
// Encode the did from the didComponents
|
|
30
|
-
const did = Identifier.encode(didComponents);
|
|
31
29
|
// Deconstruct the bytes from the given components
|
|
32
30
|
const { genesisBytes } = didComponents;
|
|
31
|
+
// Encode the did from the didComponents
|
|
32
|
+
const did = Identifier.encode(genesisBytes, didComponents);
|
|
33
33
|
// Construct a new CompressedSecp256k1PublicKey and deconstruct the publicKey and publicKeyMultibase
|
|
34
34
|
const { multibase: publicKeyMultibase } = new CompressedSecp256k1PublicKey(genesisBytes);
|
|
35
35
|
// Generate the service field for the DID Document
|
|
@@ -41,7 +41,6 @@ export class Resolve {
|
|
|
41
41
|
});
|
|
42
42
|
return new DidDocument({
|
|
43
43
|
id: did,
|
|
44
|
-
controller: [did],
|
|
45
44
|
verificationMethod: [{
|
|
46
45
|
id: `${did}#initialKey`,
|
|
47
46
|
type: 'Multikey',
|
|
@@ -60,15 +59,14 @@ export class Resolve {
|
|
|
60
59
|
*/
|
|
61
60
|
static async external(didComponents, genesisDocument) {
|
|
62
61
|
// Canonicalize and sha256 hash the currentDocument
|
|
63
|
-
const hashBytes =
|
|
64
|
-
|
|
65
|
-
const genesisBytes = bytesToHex(didComponents.genesisBytes);
|
|
62
|
+
const hashBytes = Canonicalization.process(genesisDocument, { encoding: 'hex' });
|
|
63
|
+
const { genesisBytes } = didComponents;
|
|
66
64
|
// If the genesisBytes do not match the hashBytes, throw an error
|
|
67
|
-
if (genesisBytes !== hashBytes) {
|
|
68
|
-
throw new ResolveError(`Initial document mismatch: genesisBytes ${genesisBytes} !== hashBytes ${hashBytes}`, INVALID_DID_DOCUMENT, { genesisBytes, hashBytes });
|
|
65
|
+
if (bytesToHex(genesisBytes) !== hashBytes) {
|
|
66
|
+
throw new ResolveError(`Initial document mismatch: genesisBytes ${bytesToHex(genesisBytes)} !== hashBytes ${hashBytes}`, INVALID_DID_DOCUMENT, { genesisBytes, hashBytes });
|
|
69
67
|
}
|
|
70
68
|
// Encode the did from the didComponents
|
|
71
|
-
const did = Identifier.encode(didComponents);
|
|
69
|
+
const did = Identifier.encode(genesisBytes, didComponents);
|
|
72
70
|
// Replace the placeholder did with the did throughout the currentDocument.
|
|
73
71
|
const currentDocument = JSON.parse(JSON.stringify(genesisDocument).replaceAll(ID_PLACEHOLDER_VALUE, did));
|
|
74
72
|
// Return a W3C conformant DID Document
|
|
@@ -84,13 +82,13 @@ export class Resolve {
|
|
|
84
82
|
const updateMap = new Map();
|
|
85
83
|
if (sidecar.updates?.length)
|
|
86
84
|
for (const update of sidecar.updates) {
|
|
87
|
-
updateMap.set(
|
|
85
|
+
updateMap.set(Canonicalization.process(update, { encoding: 'hex' }), update);
|
|
88
86
|
}
|
|
89
87
|
// CAS Announcements map
|
|
90
88
|
const casMap = new Map();
|
|
91
89
|
if (sidecar.casUpdates?.length)
|
|
92
90
|
for (const update of sidecar.casUpdates) {
|
|
93
|
-
casMap.set(
|
|
91
|
+
casMap.set(Canonicalization.process(update, { encoding: 'hex' }), update);
|
|
94
92
|
}
|
|
95
93
|
// SMT Proofs map
|
|
96
94
|
const smtMap = new Map();
|
|
@@ -135,23 +133,23 @@ export class Resolve {
|
|
|
135
133
|
* Signal Bytes (last output in OP_RETURN transaction).
|
|
136
134
|
* @param {Array<BeaconService>} beaconServices The array of BeaconService objects to search for signals.
|
|
137
135
|
* @param {SidecarData} sidecarData The sidecar data containing maps of updates, CAS announcements, and SMT proofs.
|
|
138
|
-
* @param {
|
|
136
|
+
* @param {BitcoinConnection} bitcoin The bitcoin network connection used to fetch beacon signals
|
|
139
137
|
* @returns {Promise<Array<[SignedBTCR2Update, BlockMetadata]>>} The array of BTCR2 Signed Updates announced by the Beacon Signals.
|
|
140
138
|
*/
|
|
141
139
|
static async beaconSignals(beaconServices, sidecarData, bitcoin) {
|
|
142
140
|
// Discover Beacon Signals via indexer server (esplora/electrs) or full node
|
|
143
|
-
const beaconServicesSignals = bitcoin.
|
|
141
|
+
const beaconServicesSignals = bitcoin.rest
|
|
144
142
|
? await BeaconSignalDiscovery.indexer(beaconServices, bitcoin)
|
|
145
143
|
: await BeaconSignalDiscovery.fullnode(beaconServices, bitcoin);
|
|
146
144
|
// Process each beacon's signals in parallel
|
|
147
|
-
const promises = Array.from(beaconServicesSignals.entries()).map(async ([service, signals]) => {
|
|
145
|
+
const promises = await Promise.all(Array.from(beaconServicesSignals.entries()).map(async ([service, signals]) => {
|
|
148
146
|
// Skip beacons with no signals
|
|
149
147
|
if (!signals.length)
|
|
150
148
|
return [];
|
|
151
149
|
// Establish a typed beacon and process its signals
|
|
152
150
|
return BeaconFactory.establish(service).processSignals(signals, sidecarData);
|
|
153
|
-
});
|
|
154
|
-
return
|
|
151
|
+
}));
|
|
152
|
+
return promises.flat();
|
|
155
153
|
}
|
|
156
154
|
/**
|
|
157
155
|
* Implements subsection {@link https://dcdpr.github.io/did-btcr2/operations/resolve.html#process-updates | 7.2.f Process updates Array}.
|
|
@@ -170,26 +168,30 @@ export class Resolve {
|
|
|
170
168
|
const updates = unsortedUpdates.sort(([upd0, blk0], [upd1, blk1]) => upd0.targetVersionId - upd1.targetVersionId || blk0.height - blk1.height);
|
|
171
169
|
// Create a default response object
|
|
172
170
|
const response = {
|
|
173
|
-
currentDocument,
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
171
|
+
didDocument: currentDocument,
|
|
172
|
+
metadata: {
|
|
173
|
+
versionId: `${currentVersionId}`,
|
|
174
|
+
confirmations: 0,
|
|
175
|
+
updated: '',
|
|
176
|
+
deactivated: currentDocument.deactivated || false
|
|
177
|
+
}
|
|
177
178
|
};
|
|
178
179
|
// Iterate over each (update block) pair
|
|
179
180
|
for (const [update, block] of updates) {
|
|
180
181
|
// Get the hash of the current document
|
|
181
|
-
const currentDocumentHash =
|
|
182
|
-
//
|
|
183
|
-
|
|
184
|
-
// Safely convert versionTime to timestamp
|
|
185
|
-
const vTime = DateUtils.dateStringToTimestamp(versionTime || '');
|
|
186
|
-
// Safely convert block.blocktime to timestamp
|
|
187
|
-
const bTime = DateUtils.blocktimeToTimestamp(block.time);
|
|
182
|
+
const currentDocumentHash = Canonicalization.process(response.didDocument, { encoding: 'base58btc' });
|
|
183
|
+
// Safely convert block.time to timestamp
|
|
184
|
+
const blocktime = DateUtils.blocktimeToTimestamp(block.time);
|
|
188
185
|
// Set the updated field to the blocktime of the current update
|
|
189
|
-
response.updated = DateUtils.toISOStringNonFractional(
|
|
186
|
+
response.metadata.updated = DateUtils.toISOStringNonFractional(blocktime);
|
|
187
|
+
// Set confirmations to the block confirmations
|
|
188
|
+
response.metadata.confirmations = block.confirmations;
|
|
190
189
|
// if resolutionOptions.versionTime is defined and the blocktime is more recent, return currentDocument
|
|
191
|
-
if (
|
|
192
|
-
|
|
190
|
+
if (versionTime) {
|
|
191
|
+
// Safely convert versionTime to timestamp
|
|
192
|
+
if (blocktime > DateUtils.dateStringToTimestamp(versionTime)) {
|
|
193
|
+
return response;
|
|
194
|
+
}
|
|
193
195
|
}
|
|
194
196
|
// Check update.targetVersionId against currentVersionId
|
|
195
197
|
// If update.targetVersionId <= currentVersionId, confirm duplicate update
|
|
@@ -199,37 +201,38 @@ export class Resolve {
|
|
|
199
201
|
}
|
|
200
202
|
// If update.targetVersionId == currentVersionId + 1, apply the update
|
|
201
203
|
else if (update.targetVersionId === currentVersionId + 1) {
|
|
202
|
-
// Prepend `z` to the sourceHash if it does not start with it
|
|
203
|
-
const sourceHash = update.sourceHash.startsWith('z') ? update.sourceHash : `z${update.sourceHash}`;
|
|
204
204
|
// Check if update.sourceHash !== currentDocumentHash
|
|
205
|
-
if (sourceHash !== currentDocumentHash) {
|
|
205
|
+
if (update.sourceHash !== currentDocumentHash) {
|
|
206
206
|
// Raise an INVALID_DID_UPDATE error if they do not match
|
|
207
|
-
throw new ResolveError(`Hash mismatch: update.sourceHash !== currentDocumentHash`, INVALID_DID_UPDATE, { sourceHash, currentDocumentHash });
|
|
207
|
+
throw new ResolveError(`Hash mismatch: update.sourceHash !== currentDocumentHash`, INVALID_DID_UPDATE, { sourceHash: update.sourceHash, currentDocumentHash });
|
|
208
208
|
}
|
|
209
209
|
// Apply the update to the currentDocument and set it in the response
|
|
210
|
-
response.
|
|
210
|
+
response.didDocument = await this.applyUpdate(response.didDocument, update);
|
|
211
211
|
// Create unsigned_update by removing the proof property from update.
|
|
212
212
|
const unsignedUpdate = JSONUtils.deleteKeys(update, ['proof']);
|
|
213
213
|
// Push the canonicalized unsigned update hash to the updateHashHistory
|
|
214
|
-
updateHashHistory.push(
|
|
214
|
+
updateHashHistory.push(Canonicalization.process(unsignedUpdate, { encoding: 'base58btc' }));
|
|
215
215
|
}
|
|
216
216
|
// If update.targetVersionId > currentVersionId + 1, throw LATE_PUBLISHING error
|
|
217
217
|
else if (update.targetVersionId > currentVersionId + 1) {
|
|
218
218
|
throw new ResolveError(`Version Id Mismatch: targetVersionId cannot be > currentVersionId + 1`, 'LATE_PUBLISHING_ERROR', {
|
|
219
219
|
targetVersionId: update.targetVersionId,
|
|
220
|
-
currentVersionId:
|
|
220
|
+
currentVersionId: currentVersionId + 1
|
|
221
221
|
});
|
|
222
222
|
}
|
|
223
223
|
// Increment currentVersionId
|
|
224
224
|
currentVersionId++;
|
|
225
|
-
// Set
|
|
226
|
-
response.versionId = `${currentVersionId}`;
|
|
225
|
+
// Set response.versionId to be the new currentVersionId
|
|
226
|
+
response.metadata.versionId = `${currentVersionId}`;
|
|
227
227
|
// If resolutionOptions.versionId is defined and <= currentVersionId, return currentDocument
|
|
228
228
|
if (currentVersionId >= Number(versionId)) {
|
|
229
229
|
return response;
|
|
230
230
|
}
|
|
231
231
|
// Check if the current document is deactivated before further processing
|
|
232
232
|
if (currentDocument.deactivated) {
|
|
233
|
+
// Set the response deactivated flag to true
|
|
234
|
+
response.metadata.deactivated = currentDocument.deactivated;
|
|
235
|
+
// If deactivated, stop processing further updates and return the response
|
|
233
236
|
return response;
|
|
234
237
|
}
|
|
235
238
|
}
|
|
@@ -244,10 +247,10 @@ export class Resolve {
|
|
|
244
247
|
*/
|
|
245
248
|
static confirmDuplicate(update, updateHashHistory) {
|
|
246
249
|
// Create unsigned_update by removing the proof property from update.
|
|
247
|
-
const unsignedUpdate =
|
|
250
|
+
const { proof: _, ...unsignedUpdate } = update;
|
|
248
251
|
// Hash unsignedUpdate with JSON Document Hashing algorithm
|
|
249
|
-
const unsignedUpdateHash =
|
|
250
|
-
//
|
|
252
|
+
const unsignedUpdateHash = Canonicalization.process(unsignedUpdate);
|
|
253
|
+
// Let historicalUpdateHash equal updateHashHistory[updateHashIndex].
|
|
251
254
|
const historicalUpdateHash = updateHashHistory[update.targetVersionId - 2];
|
|
252
255
|
// Check if the updateHash matches the historical hash
|
|
253
256
|
if (updateHashHistory[update.targetVersionId - 2] !== unsignedUpdateHash) {
|
|
@@ -292,7 +295,7 @@ export class Resolve {
|
|
|
292
295
|
// Construct a new BIP340Cryptosuite with the SchnorrMultikey.
|
|
293
296
|
const cryptosuite = new BIP340Cryptosuite(multikey);
|
|
294
297
|
// Canonicalize the update
|
|
295
|
-
const canonicalUpdate =
|
|
298
|
+
const canonicalUpdate = Canonicalization.canonicalize(update);
|
|
296
299
|
// Construct a DataIntegrityProof with the cryptosuite
|
|
297
300
|
const diProof = new BIP340DataIntegrityProof(cryptosuite);
|
|
298
301
|
// Call the verifyProof method
|
|
@@ -306,13 +309,13 @@ export class Resolve {
|
|
|
306
309
|
// Verify that updatedDocument is conformant to DID Core v1.1.
|
|
307
310
|
DidDocument.validate(updatedDocument);
|
|
308
311
|
// Canonicalize and hash the updatedDocument to get the currentDocumentHash.
|
|
309
|
-
const currentDocumentHash =
|
|
312
|
+
const currentDocumentHash = Canonicalization.process(updatedDocument, { encoding: 'base58btc' });
|
|
310
313
|
// Prepare the update targetHash for comparison with currentDocumentHash.
|
|
311
|
-
const updateTargetHash = update.targetHash
|
|
314
|
+
const updateTargetHash = update.targetHash;
|
|
312
315
|
// Make sure the update.targetHash equals currentDocumentHash.
|
|
313
|
-
if (
|
|
316
|
+
if (update.targetHash !== currentDocumentHash) {
|
|
314
317
|
// If they do not match, throw INVALID_DID_UPDATE error.
|
|
315
|
-
throw new ResolveError(`Invalid update:
|
|
318
|
+
throw new ResolveError(`Invalid update: update.targetHash !== currentDocumentHash`, INVALID_DID_UPDATE, { updateTargetHash, currentDocumentHash });
|
|
316
319
|
}
|
|
317
320
|
// Return final updatedDocument.
|
|
318
321
|
return updatedDocument;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/core/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,SAAS,EACT,aAAa,EACb,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EAClB,SAAS,EACT,SAAS,EACT,qBAAqB,EACrB,mBAAmB,EACnB,YAAY,EACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EAGhB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/core/resolve.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/core/update.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { INVALID_DID_UPDATE, JSONPatch, UpdateError } from '@did-btcr2/common';
|
|
1
|
+
import { Canonicalization, INVALID_DID_UPDATE, JSONPatch, UpdateError } from '@did-btcr2/common';
|
|
2
2
|
import { SchnorrMultikey } from '@did-btcr2/cryptosuite';
|
|
3
|
-
import { canonicalization } from '../did-btcr2.js';
|
|
4
3
|
import { DidDocument } from '../utils/did-document.js';
|
|
5
4
|
import { BeaconFactory } from './beacon/factory.js';
|
|
6
5
|
/**
|
|
@@ -38,7 +37,7 @@ export class Update {
|
|
|
38
37
|
patch: patches,
|
|
39
38
|
targetHash: '',
|
|
40
39
|
targetVersionId: sourceVersionId + 1,
|
|
41
|
-
sourceHash:
|
|
40
|
+
sourceHash: Canonicalization.process(sourceDocument, { encoding: 'base58btc' }),
|
|
42
41
|
};
|
|
43
42
|
// Apply all JSON patches to sourceDocument.
|
|
44
43
|
const targetDocument = JSONPatch.apply(sourceDocument, patches);
|
|
@@ -51,7 +50,7 @@ export class Update {
|
|
|
51
50
|
throw new UpdateError('Error validating targetDocument: ' + (error instanceof Error ? error.message : String(error)), INVALID_DID_UPDATE, targetDocument);
|
|
52
51
|
}
|
|
53
52
|
// Set the targetHash by canonicalizing the targetDocument and encoding it in base58.
|
|
54
|
-
unsignedUpdate.targetHash =
|
|
53
|
+
unsignedUpdate.targetHash = Canonicalization.process(targetDocument, { encoding: 'base58btc' });
|
|
55
54
|
// Return unsignedUpdate.
|
|
56
55
|
return unsignedUpdate;
|
|
57
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/core/update.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,SAAS,EAGT,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,eAAe,EAGhB,MAAM,wBAAwB,CAAC;AAChC,OAAO,
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/core/update.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,EAGT,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,eAAe,EAGhB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAoB,WAAW,EAAyB,MAAM,0BAA0B,CAAC;AAChG,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpD;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,MAAM;IACjB;;;;;;;;;OASG;IACH,MAAM,CAAC,KAAK,CAAC,SAAS,CACpB,cAAgC,EAChC,OAAyB,EACzB,eAAuB;QAEvB,0DAA0D;QAC1D,MAAM,cAAc,GAAwB;YAC1C,UAAU,EAAQ;gBAChB,8BAA8B;gBAC9B,0BAA0B;gBAC1B,mCAAmC;gBACnC,8BAA8B;aAC/B;YACD,KAAK,EAAa,OAAO;YACzB,UAAU,EAAQ,EAAE;YACpB,eAAe,EAAG,eAAe,GAAG,CAAC;YACrC,UAAU,EAAQ,gBAAgB,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;SACtF,CAAC;QAEF,4CAA4C;QAC5C,MAAM,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAEhE,IAAI,CAAC;YACH,4DAA4D;YAC5D,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qEAAqE;YACrE,MAAM,IAAI,WAAW,CACnB,mCAAmC,GAAG,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAC9F,kBAAkB,EAAE,cAAc,CACnC,CAAC;QACJ,CAAC;QAED,qFAAqF;QACrF,cAAc,CAAC,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;QAEhG,yBAAyB;QACzB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,CACf,GAAW,EACX,cAAmC,EACnC,kBAAyC,EACzC,SAAmB;QAEnB,mDAAmD;QACnD,MAAM,UAAU,GAAG,kBAAkB,CAAC,UAAU,CAAC;QACjD,mCAAmC;QACnC,MAAM,EAAE,GAAG,kBAAkB,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAE3E,+BAA+B;QAC/B,MAAM,QAAQ,GAAG,eAAe,CAAC,aAAa,CAAC,EAAE,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QAE1E,yCAAyC;QACzC,MAAM,MAAM,GAAwB;YAClC,UAAU,EAAG;gBACX,8BAA8B;gBAC9B,0BAA0B;gBAC1B,mCAAmC;gBACnC,8BAA8B;aAC/B;YACD,WAAW,EAAU,iBAAiB;YACtC,IAAI,EAAiB,oBAAoB;YACzC,kBAAkB,EAAG,kBAAkB,CAAC,EAAE;YAC1C,YAAY,EAAS,sBAAsB;YAC3C,UAAU,EAAW,iBAAiB,kBAAkB,CAAC,GAAG,CAAC,EAAE;YAC/D,gBAAgB,EAAK,OAAO;SAC7B,CAAC;QAEF,6CAA6C;QAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC,oBAAoB,EAAE,CAAC;QAEhE,uDAAuD;QACvD,OAAO,OAAO,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,KAAK,CAAC,QAAQ,CACnB,aAA4B,EAC5B,MAAyB,EACzB,SAAmB,EACnB,OAA0B;QAE1B,4BAA4B;QAC5B,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAEtD,uBAAuB;QACvB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAExE,yBAAyB;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|