@did-btcr2/method 0.41.0 → 0.43.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/dist/cjs/index.js CHANGED
@@ -42,6 +42,7 @@ __export(index_exports, {
42
42
  CASBeaconError: () => CASBeaconError,
43
43
  CHANGE_OUTPUT_VBYTES: () => CHANGE_OUTPUT_VBYTES,
44
44
  DEFAULT_FEE_ESTIMATOR: () => DEFAULT_FEE_ESTIMATOR,
45
+ DEFAULT_MAX_DISCOVERY_ROUNDS: () => DEFAULT_MAX_DISCOVERY_ROUNDS,
45
46
  DID_REGEX: () => DID_REGEX,
46
47
  DUST_LIMIT_SATS: () => DUST_LIMIT_SATS,
47
48
  DidBtcr2: () => DidBtcr2,
@@ -68,6 +69,7 @@ __export(index_exports, {
68
69
  buildAggregationBeaconTx: () => buildAggregationBeaconTx,
69
70
  deriveSingletonAddress: () => deriveSingletonAddress,
70
71
  detectSingletonScriptKind: () => detectSingletonScriptKind,
72
+ extractOpReturnSignal: () => extractOpReturnSignal,
71
73
  opReturnScript: () => opReturnScript,
72
74
  resolveBtcr2SenderPk: () => resolveBtcr2SenderPk,
73
75
  resolveChangeAddress: () => resolveChangeAddress
@@ -2059,6 +2061,20 @@ var BeaconUtils = class {
2059
2061
  };
2060
2062
 
2061
2063
  // src/core/beacon/signal-discovery.ts
2064
+ function extractOpReturnSignal(asm) {
2065
+ if (!asm) {
2066
+ return null;
2067
+ }
2068
+ const tokens = asm.trim().split(/\s+/);
2069
+ if (tokens.length !== 3 || tokens[0] !== "OP_RETURN" || tokens[1] !== "OP_PUSHBYTES_32") {
2070
+ return null;
2071
+ }
2072
+ const signalHash = tokens[2];
2073
+ if (!/^[0-9a-fA-F]{64}$/.test(signalHash)) {
2074
+ return null;
2075
+ }
2076
+ return signalHash.toLowerCase();
2077
+ }
2062
2078
  var BeaconSignalDiscovery = class {
2063
2079
  /**
2064
2080
  * Retrieves the beacon signals for the given array of BeaconService objects
@@ -2080,15 +2096,10 @@ var BeaconSignalDiscovery = class {
2080
2096
  }
2081
2097
  for (const beaconSignal of beaconSignals) {
2082
2098
  const signalVout = beaconSignal.vout.slice(-1)[0];
2083
- if (!signalVout || !signalVout.scriptpubkey_asm.includes("OP_RETURN")) {
2084
- continue;
2085
- }
2086
- const outputMap = new Map(Object.entries(signalVout));
2087
- const signalVoutScriptPubkey = outputMap.get("scriptpubkey_asm");
2088
- if (!signalVoutScriptPubkey) {
2099
+ if (!signalVout) {
2089
2100
  continue;
2090
2101
  }
2091
- const updateHash = signalVoutScriptPubkey.split(" ").slice(-1)[0];
2102
+ const updateHash = extractOpReturnSignal(signalVout.scriptpubkey_asm);
2092
2103
  if (!updateHash) {
2093
2104
  continue;
2094
2105
  }
@@ -2157,14 +2168,11 @@ var BeaconSignalDiscovery = class {
2157
2168
  continue;
2158
2169
  }
2159
2170
  const txVoutScriptPubkeyAsm = prevout.vout[vin.vout].scriptPubKey.asm;
2160
- if (!txVoutScriptPubkeyAsm.includes("OP_RETURN")) {
2161
- continue;
2162
- }
2163
- console.info(`Tx ${tx.txid} contains beacon service address ${scriptPubKey.address} and OP_RETURN!`, tx);
2164
- const updateHash = txVoutScriptPubkeyAsm.split(" ").slice(-1)[0];
2171
+ const updateHash = extractOpReturnSignal(txVoutScriptPubkeyAsm);
2165
2172
  if (!updateHash) {
2166
2173
  continue;
2167
2174
  }
2175
+ console.info(`Tx ${tx.txid} contains beacon service address ${scriptPubKey.address} and OP_RETURN!`, tx);
2168
2176
  beaconServiceSignals.get(beaconService)?.push({
2169
2177
  tx,
2170
2178
  signalBytes: updateHash,
@@ -2913,7 +2921,8 @@ var DidBtcr2 = class {
2913
2921
  return new Resolver(didComponents, sidecarData, currentDocument, {
2914
2922
  versionId: resolutionOptions.versionId,
2915
2923
  versionTime: resolutionOptions.versionTime,
2916
- genesisDocument: resolutionOptions.sidecar?.genesisDocument
2924
+ genesisDocument: resolutionOptions.sidecar?.genesisDocument,
2925
+ maxDiscoveryRounds: resolutionOptions.maxDiscoveryRounds
2917
2926
  });
2918
2927
  }
2919
2928
  /**
@@ -3022,6 +3031,21 @@ var DidBtcr2 = class {
3022
3031
 
3023
3032
  // src/core/resolver.ts
3024
3033
  var import_utils6 = require("@noble/curves/utils.js");
3034
+ var DEFAULT_MAX_DISCOVERY_ROUNDS = 10;
3035
+ function isRecord(value) {
3036
+ return typeof value === "object" && value !== null && !Array.isArray(value);
3037
+ }
3038
+ function isCASAnnouncement(value) {
3039
+ return isRecord(value) && Object.values(value).every((v) => typeof v === "string");
3040
+ }
3041
+ function isSignedBTCR2Update(value) {
3042
+ if (!isRecord(value)) return false;
3043
+ return Array.isArray(value.patch) && typeof value.sourceHash === "string" && typeof value.targetHash === "string" && typeof value.targetVersionId === "number" && isRecord(value.proof);
3044
+ }
3045
+ function isSMTProof(value) {
3046
+ if (!isRecord(value)) return false;
3047
+ return typeof value.id === "string" && typeof value.collapsed === "string" && Array.isArray(value.hashes);
3048
+ }
3025
3049
  var Resolver = class _Resolver {
3026
3050
  // --- Immutable inputs ---
3027
3051
  #didComponents;
@@ -3039,6 +3063,10 @@ var Resolver = class _Resolver {
3039
3063
  #requestCache = /* @__PURE__ */ new Set();
3040
3064
  #unsortedUpdates = [];
3041
3065
  #resolvedResponse = null;
3066
+ /** Upper bound on multi-round beacon-discovery passes; see {@link DEFAULT_MAX_DISCOVERY_ROUNDS}. */
3067
+ #maxDiscoveryRounds;
3068
+ /** Count of beacon-discovery passes driven by updates adding new beacon services. */
3069
+ #discoveryRounds = 0;
3042
3070
  /**
3043
3071
  * @internal Use {@link DidBtcr2.resolve} to create instances.
3044
3072
  */
@@ -3048,6 +3076,7 @@ var Resolver = class _Resolver {
3048
3076
  this.#currentDocument = currentDocument;
3049
3077
  this.#versionId = options?.versionId;
3050
3078
  this.#versionTime = options?.versionTime;
3079
+ this.#maxDiscoveryRounds = options?.maxDiscoveryRounds ?? DEFAULT_MAX_DISCOVERY_ROUNDS;
3051
3080
  if (options?.genesisDocument) {
3052
3081
  this.#providedGenesisDocument = options.genesisDocument;
3053
3082
  }
@@ -3362,6 +3391,13 @@ var Resolver = class _Resolver {
3362
3391
  return !this.#requestCache.has(address);
3363
3392
  });
3364
3393
  if (hasNewServices) {
3394
+ if (++this.#discoveryRounds > this.#maxDiscoveryRounds) {
3395
+ throw new import_common12.ResolveError(
3396
+ `Exceeded maximum beacon-discovery rounds (${this.#maxDiscoveryRounds}); the DID document may chain beacon services without terminating.`,
3397
+ import_common12.INVALID_DID_DOCUMENT,
3398
+ { maxDiscoveryRounds: this.#maxDiscoveryRounds }
3399
+ );
3400
+ }
3365
3401
  this.#phase = "BeaconDiscovery" /* BeaconDiscovery */;
3366
3402
  continue;
3367
3403
  }
@@ -3388,38 +3424,84 @@ var Resolver = class _Resolver {
3388
3424
  provide(need, data) {
3389
3425
  switch (need.kind) {
3390
3426
  case "NeedGenesisDocument": {
3427
+ if (!isRecord(data)) {
3428
+ throw new import_common12.ResolveError(
3429
+ "Provided data for NeedGenesisDocument must be a document object.",
3430
+ import_common12.INVALID_DID_UPDATE,
3431
+ { kind: need.kind }
3432
+ );
3433
+ }
3391
3434
  this.#providedGenesisDocument = data;
3392
3435
  break;
3393
3436
  }
3394
3437
  case "NeedBeaconSignals": {
3395
- const signals = data;
3396
- for (const [service, serviceSignals] of signals) {
3438
+ if (!(data instanceof Map)) {
3439
+ throw new import_common12.ResolveError(
3440
+ "Provided data for NeedBeaconSignals must be a Map of beacon services to signals.",
3441
+ import_common12.INVALID_DID_UPDATE,
3442
+ { kind: need.kind }
3443
+ );
3444
+ }
3445
+ for (const [service, serviceSignals] of data) {
3397
3446
  this.#beaconServicesSignals.set(service, serviceSignals);
3398
3447
  }
3399
3448
  break;
3400
3449
  }
3401
3450
  case "NeedCASAnnouncement": {
3402
- const announcement = data;
3403
- this.#sidecarData.casMap.set((0, import_common12.canonicalHash)(announcement, { encoding: "hex" }), announcement);
3451
+ if (!isCASAnnouncement(data)) {
3452
+ throw new import_common12.ResolveError(
3453
+ "Provided data for NeedCASAnnouncement is not a CAS announcement.",
3454
+ import_common12.INVALID_DID_UPDATE,
3455
+ { kind: need.kind }
3456
+ );
3457
+ }
3458
+ const announcementHash = (0, import_common12.canonicalHash)(data, { encoding: "hex" });
3459
+ if (announcementHash !== need.announcementHash) {
3460
+ throw new import_common12.ResolveError(
3461
+ `CAS announcement hash mismatch: expected ${need.announcementHash}, got ${announcementHash}.`,
3462
+ import_common12.INVALID_DID_UPDATE,
3463
+ { expected: need.announcementHash, actual: announcementHash }
3464
+ );
3465
+ }
3466
+ this.#sidecarData.casMap.set(announcementHash, data);
3404
3467
  break;
3405
3468
  }
3406
3469
  case "NeedSignedUpdate": {
3407
- const update = data;
3408
- this.#sidecarData.updateMap.set((0, import_common12.canonicalHash)(update, { encoding: "hex" }), update);
3470
+ if (!isSignedBTCR2Update(data)) {
3471
+ throw new import_common12.ResolveError(
3472
+ "Provided data for NeedSignedUpdate is not a signed BTCR2 update.",
3473
+ import_common12.INVALID_DID_UPDATE,
3474
+ { kind: need.kind }
3475
+ );
3476
+ }
3477
+ const updateHash = (0, import_common12.canonicalHash)(data, { encoding: "hex" });
3478
+ if (updateHash !== need.updateHash) {
3479
+ throw new import_common12.ResolveError(
3480
+ `Signed update hash mismatch: expected ${need.updateHash}, got ${updateHash}.`,
3481
+ import_common12.INVALID_DID_UPDATE,
3482
+ { expected: need.updateHash, actual: updateHash }
3483
+ );
3484
+ }
3485
+ this.#sidecarData.updateMap.set(updateHash, data);
3409
3486
  break;
3410
3487
  }
3411
3488
  case "NeedSMTProof": {
3412
- const smtNeed = need;
3413
- const proof = data;
3414
- const proofIdHex = (0, import_common12.encode)((0, import_common12.decode)(proof.id, "base64urlnopad"), "hex");
3415
- if (proofIdHex !== smtNeed.smtRootHash) {
3489
+ if (!isSMTProof(data)) {
3490
+ throw new import_common12.ResolveError(
3491
+ "Provided data for NeedSMTProof is not an SMT proof.",
3492
+ import_common12.INVALID_DID_UPDATE,
3493
+ { kind: need.kind }
3494
+ );
3495
+ }
3496
+ const proofIdHex = (0, import_common12.encode)((0, import_common12.decode)(data.id, "base64urlnopad"), "hex");
3497
+ if (proofIdHex !== need.smtRootHash) {
3416
3498
  throw new import_common12.ResolveError(
3417
- `SMT proof root hash mismatch: expected ${smtNeed.smtRootHash}, got ${proofIdHex}`,
3499
+ `SMT proof root hash mismatch: expected ${need.smtRootHash}, got ${proofIdHex}`,
3418
3500
  import_common12.INVALID_DID_UPDATE,
3419
- { expected: smtNeed.smtRootHash, actual: proofIdHex }
3501
+ { expected: need.smtRootHash, actual: proofIdHex }
3420
3502
  );
3421
3503
  }
3422
- this.#sidecarData.smtMap.set(smtNeed.smtRootHash, proof);
3504
+ this.#sidecarData.smtMap.set(need.smtRootHash, data);
3423
3505
  break;
3424
3506
  }
3425
3507
  }
@@ -3494,6 +3576,7 @@ var DidDocumentBuilder = class {
3494
3576
  CASBeaconError,
3495
3577
  CHANGE_OUTPUT_VBYTES,
3496
3578
  DEFAULT_FEE_ESTIMATOR,
3579
+ DEFAULT_MAX_DISCOVERY_ROUNDS,
3497
3580
  DID_REGEX,
3498
3581
  DUST_LIMIT_SATS,
3499
3582
  DidBtcr2,
@@ -3520,6 +3603,7 @@ var DidDocumentBuilder = class {
3520
3603
  buildAggregationBeaconTx,
3521
3604
  deriveSingletonAddress,
3522
3605
  detectSingletonScriptKind,
3606
+ extractOpReturnSignal,
3523
3607
  opReturnScript,
3524
3608
  resolveBtcr2SenderPk,
3525
3609
  resolveChangeAddress
@@ -9,6 +9,28 @@ import { SinglePartyBeacon } from './beacon.js';
9
9
  * During resolution, the CAS Announcement is retrieved from the sidecar (or CAS)
10
10
  * and used to look up the individual signed update for the DID being resolved.
11
11
  *
12
+ * ## CAS announcement hash chain
13
+ *
14
+ * Resolution links an on-chain signal to a signed update through two hashes, with
15
+ * an encoding transition at each hop. The write path ({@link broadcastSignal})
16
+ * produces both hashes; the read path ({@link processSignals}) re-derives them:
17
+ *
18
+ * 1. **Signal hop.** The OP_RETURN payload is `canonicalHash(announcement)` in
19
+ * **hex**: this is `signal.signalBytes` and the lookup key into `sidecar.casMap`.
20
+ * Broadcast emits `hash(canonicalize(announcement))`; the resolver keys `casMap`
21
+ * by `canonicalHash(announcement, { encoding: 'hex' })`. These are the same bytes,
22
+ * so `signalBytes === canonicalHash(announcement, hex)`.
23
+ * 2. **Update hop.** Each `announcement[did]` is `canonicalHash(signedUpdate)` in
24
+ * **base64urlnopad** (per spec). It is decoded back to **hex** to key
25
+ * `sidecar.updateMap`, so `hex(decode(announcement[did])) === canonicalHash(signedUpdate, hex)`.
26
+ *
27
+ * Both links are enforced when sidecar data is supplied via `Resolver.provide()`
28
+ * (which validates the provided announcement and update against the need's hash),
29
+ * and structurally when sidecar maps are pre-loaded (they are keyed by
30
+ * `canonicalHash`, so a mismatched entry simply misses the lookup). The two
31
+ * encoding transitions (hex for on-chain and map keys, base64urlnopad for
32
+ * announcement values) are the subtle part: a regression test pins them.
33
+ *
12
34
  * @class CASBeacon
13
35
  * @type {CASBeacon}
14
36
  * @extends {SinglePartyBeacon}
@@ -1 +1 @@
1
- {"version":3,"file":"cas-beacon.js","sourceRoot":"","sources":["../../../../src/core/beacon/cas-beacon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cas-beacon.js","sourceRoot":"","sources":["../../../../src/core/beacon/cas-beacon.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAMtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAYhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,OAAO,SAAU,SAAQ,iBAAiB;IAC9C;;;OAGG;IACH,YAAY,OAAsB;QAChC,KAAK,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,cAAc,CACZ,OAA4B,EAC5B,OAAoB;QAEpB,MAAM,OAAO,GAAG,IAAI,KAAK,EAAsC,CAAC;QAChE,MAAM,KAAK,GAAG,IAAI,KAAK,EAAY,CAAC;QAEpC,mEAAmE;QACnE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAE1C,KAAI,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC5B,gEAAgE;YAChE,MAAM,gBAAgB,GAAG,MAAM,CAAC,WAAW,CAAC;YAE5C,iDAAiD;YACjD,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAE7D,IAAG,CAAC,eAAe,EAAE,CAAC;gBACpB,8CAA8C;gBAC9C,KAAK,CAAC,IAAI,CAAC;oBACT,IAAI,EAAgB,qBAAqB;oBACzC,gBAAgB;oBAChB,eAAe,EAAK,IAAI,CAAC,OAAO,CAAC,EAAE;iBACpC,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,yDAAyD;YACzD,iFAAiF;YACjF,MAAM,iBAAiB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;YAE/C,qFAAqF;YACrF,IAAG,CAAC,iBAAiB,EAAE,CAAC;gBACtB,SAAS;YACX,CAAC;YAED,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,EAAE,KAAK,CAAC,CAAC;YAE9E,iDAAiD;YACjD,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAEvD,IAAG,CAAC,YAAY,EAAE,CAAC;gBACjB,2CAA2C;gBAC3C,KAAK,CAAC,IAAI,CAAC;oBACT,IAAI,EAAe,kBAAkB;oBACrC,UAAU;oBACV,eAAe,EAAI,IAAI,CAAC,OAAO,CAAC,EAAE;iBACnC,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,eAAe,CACnB,YAA+B,EAC/B,MAAc,EACd,OAA0B,EAC1B,OAA6B;QAE7B,mEAAmE;QACnE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAE1C,kFAAkF;QAClF,MAAM,UAAU,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;QAE/C,kEAAkE;QAClE,MAAM,eAAe,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC;QAE9C,sEAAsE;QACtE,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC;QAE7D,qFAAqF;QACrF,MAAM,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAE7E,2EAA2E;QAC3E,IAAG,OAAO,EAAE,UAAU,EAAE,CAAC;YACvB,MAAM,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;CACF"}
@@ -1,6 +1,36 @@
1
1
  import { GENESIS_TX_ID, TXIN_WITNESS_COINBASE } from '@did-btcr2/bitcoin';
2
2
  import { ResolveError } from '@did-btcr2/common';
3
3
  import { BeaconUtils } from './utils.js';
4
+ /**
5
+ * Parses a scriptPubKey asm string and returns the beacon signal hash if and only
6
+ * if the output is exactly `OP_RETURN OP_PUSHBYTES_32 <32-byte hex>`.
7
+ *
8
+ * Beacon signals encode a single 32-byte update or announcement hash in an
9
+ * OP_RETURN data push. Any other shape (a bare `OP_RETURN`, a push of the wrong
10
+ * size, or a non-hex payload) is not a valid signal and returns `null`, so a
11
+ * malformed or adversarial on-chain output cannot be mistaken for a real signal
12
+ * downstream.
13
+ *
14
+ * @param {string | undefined} asm The scriptPubKey asm string to parse.
15
+ * @returns {string | null} The lowercased 32-byte hex hash, or `null` if not a valid signal.
16
+ */
17
+ export function extractOpReturnSignal(asm) {
18
+ if (!asm) {
19
+ return null;
20
+ }
21
+ // A standard NULL_DATA beacon output is exactly three asm tokens: the OP_RETURN
22
+ // opcode, the 32-byte push opcode, and the 64-character hex payload.
23
+ const tokens = asm.trim().split(/\s+/);
24
+ if (tokens.length !== 3 || tokens[0] !== 'OP_RETURN' || tokens[1] !== 'OP_PUSHBYTES_32') {
25
+ return null;
26
+ }
27
+ // The payload must be exactly 32 bytes of hex (64 hex characters).
28
+ const signalHash = tokens[2];
29
+ if (!/^[0-9a-fA-F]{64}$/.test(signalHash)) {
30
+ return null;
31
+ }
32
+ return signalHash.toLowerCase();
33
+ }
4
34
  /**
5
35
  * Static utility class for discovering Beacon Signals on the Bitcoin blockchain.
6
36
  * Extracted from `Resolver` for single-responsibility and independent testability.
@@ -42,19 +72,13 @@ export class BeaconSignalDiscovery {
42
72
  * value: 0
43
73
  * }
44
74
  */
45
- if (!signalVout || !signalVout.scriptpubkey_asm.includes('OP_RETURN')) {
46
- continue;
47
- }
48
- // Construct output map for easier access
49
- const outputMap = new Map(Object.entries(signalVout));
50
- // Grab the signal vout scriptpubkey
51
- const signalVoutScriptPubkey = outputMap.get('scriptpubkey_asm');
52
- // If the signal vout scriptpubkey does not exist, continue to next signal
53
- if (!signalVoutScriptPubkey) {
75
+ if (!signalVout) {
54
76
  continue;
55
77
  }
56
- // Extract hex string hash of the signal bytes from the scriptpubkey
57
- const updateHash = signalVoutScriptPubkey.split(' ').slice(-1)[0];
78
+ // A beacon signal output must be exactly `OP_RETURN OP_PUSHBYTES_32 <32-byte hash>`.
79
+ // Reject any other shape (bare OP_RETURN, wrong push size, non-hex payload) so a
80
+ // malformed on-chain output cannot masquerade as a phantom signal downstream.
81
+ const updateHash = extractOpReturnSignal(signalVout.scriptpubkey_asm);
58
82
  if (!updateHash) {
59
83
  continue;
60
84
  }
@@ -142,18 +166,16 @@ export class BeaconSignalDiscovery {
142
166
  if (!beaconService) {
143
167
  continue;
144
168
  }
145
- // Look for 'OP_RETURN' in the scriptPubKey asm
169
+ // A beacon signal output must be exactly `OP_RETURN OP_PUSHBYTES_32 <32-byte hash>`.
170
+ // Reject any other shape so a malformed on-chain output cannot masquerade as a
171
+ // phantom signal downstream.
146
172
  const txVoutScriptPubkeyAsm = prevout.vout[vin.vout].scriptPubKey.asm;
147
- if (!txVoutScriptPubkeyAsm.includes('OP_RETURN')) {
173
+ const updateHash = extractOpReturnSignal(txVoutScriptPubkeyAsm);
174
+ if (!updateHash) {
148
175
  continue;
149
176
  }
150
177
  // Log the found txid and beacon
151
178
  console.info(`Tx ${tx.txid} contains beacon service address ${scriptPubKey.address} and OP_RETURN!`, tx);
152
- // Extract hex string hash of the signal bytes from the scriptpubkey
153
- const updateHash = txVoutScriptPubkeyAsm.split(' ').slice(-1)[0];
154
- if (!updateHash) {
155
- continue;
156
- }
157
179
  // Push the beacon signal object to the beacon signals array for that beacon service
158
180
  beaconServiceSignals.get(beaconService)?.push({
159
181
  tx,
@@ -1 +1 @@
1
- {"version":3,"file":"signal-discovery.js","sourceRoot":"","sources":["../../../../src/core/beacon/signal-discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signal-discovery.js","sourceRoot":"","sources":["../../../../src/core/beacon/signal-discovery.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,42 @@ import { BeaconFactory } from './beacon/factory.js';
9
9
  import { BeaconUtils } from './beacon/utils.js';
10
10
  import { Identifier } from './identifier.js';
11
11
  import { equalBytes } from '@noble/curves/utils.js';
12
+ /**
13
+ * Default upper bound on multi-round beacon discovery. Each round applies the
14
+ * updates found so far and looks for beacon services those updates added; a
15
+ * document whose updates keep adding services would otherwise loop unbounded.
16
+ * Overridable via `ResolutionOptions.maxDiscoveryRounds`.
17
+ */
18
+ export const DEFAULT_MAX_DISCOVERY_ROUNDS = 10;
19
+ // ─── provide() payload guards ────────────────────────────────────────────────
20
+ // Runtime shape checks so a malformed payload fails fast at the provide()
21
+ // boundary rather than flowing downstream as an unchecked `as` cast.
22
+ /** True if `value` is a non-null, non-array object. */
23
+ function isRecord(value) {
24
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
25
+ }
26
+ /** True if `value` has the shape of a CAS Announcement (a flat record of string hashes). */
27
+ function isCASAnnouncement(value) {
28
+ return isRecord(value) && Object.values(value).every(v => typeof v === 'string');
29
+ }
30
+ /** True if `value` has the shape of a signed BTCR2 update. */
31
+ function isSignedBTCR2Update(value) {
32
+ if (!isRecord(value))
33
+ return false;
34
+ return Array.isArray(value.patch)
35
+ && typeof value.sourceHash === 'string'
36
+ && typeof value.targetHash === 'string'
37
+ && typeof value.targetVersionId === 'number'
38
+ && isRecord(value.proof);
39
+ }
40
+ /** True if `value` has the shape of an SMT inclusion / non-inclusion proof. */
41
+ function isSMTProof(value) {
42
+ if (!isRecord(value))
43
+ return false;
44
+ return typeof value.id === 'string'
45
+ && typeof value.collapsed === 'string'
46
+ && Array.isArray(value.hashes);
47
+ }
12
48
  /**
13
49
  * Different possible Resolver states representing phases in the resolution process.
14
50
  */
@@ -59,6 +95,10 @@ export class Resolver {
59
95
  #requestCache = new Set();
60
96
  #unsortedUpdates = [];
61
97
  #resolvedResponse = null;
98
+ /** Upper bound on multi-round beacon-discovery passes; see {@link DEFAULT_MAX_DISCOVERY_ROUNDS}. */
99
+ #maxDiscoveryRounds;
100
+ /** Count of beacon-discovery passes driven by updates adding new beacon services. */
101
+ #discoveryRounds = 0;
62
102
  /**
63
103
  * @internal Use {@link DidBtcr2.resolve} to create instances.
64
104
  */
@@ -68,6 +108,7 @@ export class Resolver {
68
108
  this.#currentDocument = currentDocument;
69
109
  this.#versionId = options?.versionId;
70
110
  this.#versionTime = options?.versionTime;
111
+ this.#maxDiscoveryRounds = options?.maxDiscoveryRounds ?? DEFAULT_MAX_DISCOVERY_ROUNDS;
71
112
  // If a genesis document was provided (from sidecar), pre-seed it for validation
72
113
  if (options?.genesisDocument) {
73
114
  this.#providedGenesisDocument = options.genesisDocument;
@@ -430,6 +471,13 @@ export class Resolver {
430
471
  return !this.#requestCache.has(address);
431
472
  });
432
473
  if (hasNewServices) {
474
+ // Bound multi-round discovery: a document whose updates keep adding
475
+ // beacon services would otherwise loop without end. Fail closed once
476
+ // the configured number of rounds is exceeded.
477
+ if (++this.#discoveryRounds > this.#maxDiscoveryRounds) {
478
+ throw new ResolveError(`Exceeded maximum beacon-discovery rounds (${this.#maxDiscoveryRounds}); `
479
+ + 'the DID document may chain beacon services without terminating.', INVALID_DID_DOCUMENT, { maxDiscoveryRounds: this.#maxDiscoveryRounds });
480
+ }
433
481
  // Loop back to discover signals for new beacon services
434
482
  this.#phase = ResolverPhase.BeaconDiscovery;
435
483
  continue;
@@ -457,35 +505,57 @@ export class Resolver {
457
505
  provide(need, data) {
458
506
  switch (need.kind) {
459
507
  case 'NeedGenesisDocument': {
508
+ if (!isRecord(data)) {
509
+ throw new ResolveError('Provided data for NeedGenesisDocument must be a document object.', INVALID_DID_UPDATE, { kind: need.kind });
510
+ }
460
511
  this.#providedGenesisDocument = data;
461
512
  break;
462
513
  }
463
514
  case 'NeedBeaconSignals': {
464
- const signals = data;
465
- for (const [service, serviceSignals] of signals) {
515
+ if (!(data instanceof Map)) {
516
+ throw new ResolveError('Provided data for NeedBeaconSignals must be a Map of beacon services to signals.', INVALID_DID_UPDATE, { kind: need.kind });
517
+ }
518
+ for (const [service, serviceSignals] of data) {
466
519
  this.#beaconServicesSignals.set(service, serviceSignals);
467
520
  }
468
521
  break;
469
522
  }
470
523
  case 'NeedCASAnnouncement': {
471
- const announcement = data;
472
- this.#sidecarData.casMap.set(canonicalHash(announcement, { encoding: 'hex' }), announcement);
524
+ if (!isCASAnnouncement(data)) {
525
+ throw new ResolveError('Provided data for NeedCASAnnouncement is not a CAS announcement.', INVALID_DID_UPDATE, { kind: need.kind });
526
+ }
527
+ // Fail fast if the provided announcement is not the one the on-chain
528
+ // signal requested: its canonical hash must equal the need's hash.
529
+ const announcementHash = canonicalHash(data, { encoding: 'hex' });
530
+ if (announcementHash !== need.announcementHash) {
531
+ throw new ResolveError(`CAS announcement hash mismatch: expected ${need.announcementHash}, got ${announcementHash}.`, INVALID_DID_UPDATE, { expected: need.announcementHash, actual: announcementHash });
532
+ }
533
+ this.#sidecarData.casMap.set(announcementHash, data);
473
534
  break;
474
535
  }
475
536
  case 'NeedSignedUpdate': {
476
- const update = data;
477
- this.#sidecarData.updateMap.set(canonicalHash(update, { encoding: 'hex' }), update);
537
+ if (!isSignedBTCR2Update(data)) {
538
+ throw new ResolveError('Provided data for NeedSignedUpdate is not a signed BTCR2 update.', INVALID_DID_UPDATE, { kind: need.kind });
539
+ }
540
+ // Fail fast if the provided update is not the one the on-chain signal
541
+ // requested: its canonical hash must equal the need's hash.
542
+ const updateHash = canonicalHash(data, { encoding: 'hex' });
543
+ if (updateHash !== need.updateHash) {
544
+ throw new ResolveError(`Signed update hash mismatch: expected ${need.updateHash}, got ${updateHash}.`, INVALID_DID_UPDATE, { expected: need.updateHash, actual: updateHash });
545
+ }
546
+ this.#sidecarData.updateMap.set(updateHash, data);
478
547
  break;
479
548
  }
480
549
  case 'NeedSMTProof': {
481
- const smtNeed = need;
482
- const proof = data;
550
+ if (!isSMTProof(data)) {
551
+ throw new ResolveError('Provided data for NeedSMTProof is not an SMT proof.', INVALID_DID_UPDATE, { kind: need.kind });
552
+ }
483
553
  // proof.id is base64url per spec; smtRootHash is the hex on-chain signal.
484
- const proofIdHex = encodeHash(decodeHash(proof.id, 'base64urlnopad'), 'hex');
485
- if (proofIdHex !== smtNeed.smtRootHash) {
486
- throw new ResolveError(`SMT proof root hash mismatch: expected ${smtNeed.smtRootHash}, got ${proofIdHex}`, INVALID_DID_UPDATE, { expected: smtNeed.smtRootHash, actual: proofIdHex });
554
+ const proofIdHex = encodeHash(decodeHash(data.id, 'base64urlnopad'), 'hex');
555
+ if (proofIdHex !== need.smtRootHash) {
556
+ throw new ResolveError(`SMT proof root hash mismatch: expected ${need.smtRootHash}, got ${proofIdHex}`, INVALID_DID_UPDATE, { expected: need.smtRootHash, actual: proofIdHex });
487
557
  }
488
- this.#sidecarData.smtMap.set(smtNeed.smtRootHash, proof);
558
+ this.#sidecarData.smtMap.set(need.smtRootHash, data);
489
559
  break;
490
560
  }
491
561
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../src/core/resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../src/core/resolver.ts"],"names":[],"mappings":"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"}
@@ -83,7 +83,8 @@ export class DidBtcr2 {
83
83
  return new Resolver(didComponents, sidecarData, currentDocument, {
84
84
  versionId: resolutionOptions.versionId,
85
85
  versionTime: resolutionOptions.versionTime,
86
- genesisDocument: resolutionOptions.sidecar?.genesisDocument
86
+ genesisDocument: resolutionOptions.sidecar?.genesisDocument,
87
+ maxDiscoveryRounds: resolutionOptions.maxDiscoveryRounds
87
88
  });
88
89
  }
89
90
  /**