@did-btcr2/method 0.36.0 → 0.37.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.
Files changed (164) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/browser.js +1371 -260
  3. package/dist/browser.mjs +1371 -260
  4. package/dist/cjs/index.js +1464 -343
  5. package/dist/esm/core/aggregation/beacon-strategy.js +19 -6
  6. package/dist/esm/core/aggregation/beacon-strategy.js.map +1 -1
  7. package/dist/esm/core/aggregation/cohort.js +142 -33
  8. package/dist/esm/core/aggregation/cohort.js.map +1 -1
  9. package/dist/esm/core/aggregation/conditions.js +27 -0
  10. package/dist/esm/core/aggregation/conditions.js.map +1 -1
  11. package/dist/esm/core/aggregation/fallback-spend.js +132 -0
  12. package/dist/esm/core/aggregation/fallback-spend.js.map +1 -0
  13. package/dist/esm/core/aggregation/messages/base.js.map +1 -1
  14. package/dist/esm/core/aggregation/messages/bodies.js +46 -1
  15. package/dist/esm/core/aggregation/messages/bodies.js.map +1 -1
  16. package/dist/esm/core/aggregation/messages/constants.js +11 -0
  17. package/dist/esm/core/aggregation/messages/constants.js.map +1 -1
  18. package/dist/esm/core/aggregation/messages/factories.js +27 -1
  19. package/dist/esm/core/aggregation/messages/factories.js.map +1 -1
  20. package/dist/esm/core/aggregation/messages/guards.js +4 -1
  21. package/dist/esm/core/aggregation/messages/guards.js.map +1 -1
  22. package/dist/esm/core/aggregation/participant.js +218 -18
  23. package/dist/esm/core/aggregation/participant.js.map +1 -1
  24. package/dist/esm/core/aggregation/phases.js +6 -0
  25. package/dist/esm/core/aggregation/phases.js.map +1 -1
  26. package/dist/esm/core/aggregation/recovery-policy.js +156 -0
  27. package/dist/esm/core/aggregation/recovery-policy.js.map +1 -0
  28. package/dist/esm/core/aggregation/recovery-spend.js +106 -0
  29. package/dist/esm/core/aggregation/recovery-spend.js.map +1 -0
  30. package/dist/esm/core/aggregation/runner/aggregation-runner.js +11 -3
  31. package/dist/esm/core/aggregation/runner/aggregation-runner.js.map +1 -1
  32. package/dist/esm/core/aggregation/runner/participant-runner.js +106 -19
  33. package/dist/esm/core/aggregation/runner/participant-runner.js.map +1 -1
  34. package/dist/esm/core/aggregation/runner/service-runner.js +409 -195
  35. package/dist/esm/core/aggregation/runner/service-runner.js.map +1 -1
  36. package/dist/esm/core/aggregation/service.js +221 -11
  37. package/dist/esm/core/aggregation/service.js.map +1 -1
  38. package/dist/esm/core/aggregation/signing-session.js +3 -3
  39. package/dist/esm/core/aggregation/signing-session.js.map +1 -1
  40. package/dist/esm/core/aggregation/transport/http/envelope.js +3 -3
  41. package/dist/esm/core/aggregation/transport/http/inbox-buffer.js +1 -1
  42. package/dist/esm/core/aggregation/transport/http/nonce-cache.js +1 -1
  43. package/dist/esm/core/aggregation/transport/http/rate-limiter.js +1 -1
  44. package/dist/esm/core/aggregation/transport/http/request-auth.js +1 -1
  45. package/dist/esm/core/aggregation/transport/http/server.js +1 -1
  46. package/dist/esm/core/aggregation/transport/http/sse-stream.js +1 -1
  47. package/dist/esm/core/aggregation/transport/http/sse-writer.js +1 -1
  48. package/dist/esm/core/aggregation/transport/in-memory.js +1 -1
  49. package/dist/esm/core/aggregation/transport/nostr.js +6 -6
  50. package/dist/esm/core/beacon/beacon.js +15 -10
  51. package/dist/esm/core/beacon/beacon.js.map +1 -1
  52. package/dist/esm/core/beacon/cas-beacon.js +6 -6
  53. package/dist/esm/core/beacon/cas-beacon.js.map +1 -1
  54. package/dist/esm/core/beacon/singleton-beacon.js +2 -2
  55. package/dist/esm/core/beacon/singleton-beacon.js.map +1 -1
  56. package/dist/esm/core/beacon/smt-beacon.js +3 -3
  57. package/dist/esm/core/beacon/smt-beacon.js.map +1 -1
  58. package/dist/esm/core/resolver.js +8 -8
  59. package/dist/esm/core/resolver.js.map +1 -1
  60. package/dist/esm/core/updater.js +6 -6
  61. package/dist/esm/core/updater.js.map +1 -1
  62. package/dist/esm/did-btcr2.js +2 -2
  63. package/dist/esm/index.js +3 -0
  64. package/dist/esm/index.js.map +1 -1
  65. package/dist/types/core/aggregation/beacon-strategy.d.ts +8 -4
  66. package/dist/types/core/aggregation/beacon-strategy.d.ts.map +1 -1
  67. package/dist/types/core/aggregation/cohort.d.ts +88 -17
  68. package/dist/types/core/aggregation/cohort.d.ts.map +1 -1
  69. package/dist/types/core/aggregation/conditions.d.ts +28 -0
  70. package/dist/types/core/aggregation/conditions.d.ts.map +1 -1
  71. package/dist/types/core/aggregation/fallback-spend.d.ts +94 -0
  72. package/dist/types/core/aggregation/fallback-spend.d.ts.map +1 -0
  73. package/dist/types/core/aggregation/logger.d.ts +1 -1
  74. package/dist/types/core/aggregation/messages/base.d.ts +6 -0
  75. package/dist/types/core/aggregation/messages/base.d.ts.map +1 -1
  76. package/dist/types/core/aggregation/messages/bodies.d.ts +50 -2
  77. package/dist/types/core/aggregation/messages/bodies.d.ts.map +1 -1
  78. package/dist/types/core/aggregation/messages/constants.d.ts +8 -0
  79. package/dist/types/core/aggregation/messages/constants.d.ts.map +1 -1
  80. package/dist/types/core/aggregation/messages/factories.d.ts +40 -0
  81. package/dist/types/core/aggregation/messages/factories.d.ts.map +1 -1
  82. package/dist/types/core/aggregation/messages/guards.d.ts.map +1 -1
  83. package/dist/types/core/aggregation/participant.d.ts +47 -4
  84. package/dist/types/core/aggregation/participant.d.ts.map +1 -1
  85. package/dist/types/core/aggregation/phases.d.ts +8 -2
  86. package/dist/types/core/aggregation/phases.d.ts.map +1 -1
  87. package/dist/types/core/aggregation/recovery-policy.d.ts +132 -0
  88. package/dist/types/core/aggregation/recovery-policy.d.ts.map +1 -0
  89. package/dist/types/core/aggregation/recovery-spend.d.ts +94 -0
  90. package/dist/types/core/aggregation/recovery-spend.d.ts.map +1 -0
  91. package/dist/types/core/aggregation/runner/aggregation-runner.d.ts +13 -3
  92. package/dist/types/core/aggregation/runner/aggregation-runner.d.ts.map +1 -1
  93. package/dist/types/core/aggregation/runner/events.d.ts +48 -16
  94. package/dist/types/core/aggregation/runner/events.d.ts.map +1 -1
  95. package/dist/types/core/aggregation/runner/participant-runner.d.ts +23 -14
  96. package/dist/types/core/aggregation/runner/participant-runner.d.ts.map +1 -1
  97. package/dist/types/core/aggregation/runner/service-runner.d.ts +102 -23
  98. package/dist/types/core/aggregation/runner/service-runner.d.ts.map +1 -1
  99. package/dist/types/core/aggregation/service.d.ts +26 -2
  100. package/dist/types/core/aggregation/service.d.ts.map +1 -1
  101. package/dist/types/core/aggregation/signing-session.d.ts +2 -2
  102. package/dist/types/core/aggregation/signing-session.d.ts.map +1 -1
  103. package/dist/types/core/aggregation/transport/http/envelope.d.ts +3 -3
  104. package/dist/types/core/aggregation/transport/http/inbox-buffer.d.ts +1 -1
  105. package/dist/types/core/aggregation/transport/http/nonce-cache.d.ts +1 -1
  106. package/dist/types/core/aggregation/transport/http/rate-limiter.d.ts +1 -1
  107. package/dist/types/core/aggregation/transport/http/request-auth.d.ts +1 -1
  108. package/dist/types/core/aggregation/transport/http/server.d.ts +1 -1
  109. package/dist/types/core/aggregation/transport/http/sse-stream.d.ts +2 -2
  110. package/dist/types/core/aggregation/transport/http/sse-writer.d.ts +1 -1
  111. package/dist/types/core/aggregation/transport/in-memory.d.ts +1 -1
  112. package/dist/types/core/aggregation/transport/nostr.d.ts +4 -4
  113. package/dist/types/core/aggregation/transport/transport.d.ts +4 -4
  114. package/dist/types/core/aggregation/transport/transport.d.ts.map +1 -1
  115. package/dist/types/core/beacon/beacon.d.ts +7 -7
  116. package/dist/types/core/beacon/beacon.d.ts.map +1 -1
  117. package/dist/types/core/beacon/cas-beacon.d.ts +2 -2
  118. package/dist/types/core/beacon/interfaces.d.ts +1 -1
  119. package/dist/types/core/resolver.d.ts +3 -3
  120. package/dist/types/core/updater.d.ts +4 -4
  121. package/dist/types/did-btcr2.d.ts +2 -2
  122. package/dist/types/index.d.ts +3 -0
  123. package/dist/types/index.d.ts.map +1 -1
  124. package/package.json +4 -4
  125. package/src/core/aggregation/beacon-strategy.ts +27 -9
  126. package/src/core/aggregation/cohort.ts +171 -35
  127. package/src/core/aggregation/conditions.ts +56 -0
  128. package/src/core/aggregation/fallback-spend.ts +223 -0
  129. package/src/core/aggregation/logger.ts +1 -1
  130. package/src/core/aggregation/messages/base.ts +6 -0
  131. package/src/core/aggregation/messages/bodies.ts +94 -1
  132. package/src/core/aggregation/messages/constants.ts +12 -0
  133. package/src/core/aggregation/messages/factories.ts +57 -0
  134. package/src/core/aggregation/messages/guards.ts +6 -0
  135. package/src/core/aggregation/participant.ts +264 -20
  136. package/src/core/aggregation/phases.ts +9 -0
  137. package/src/core/aggregation/recovery-policy.ts +237 -0
  138. package/src/core/aggregation/recovery-spend.ts +192 -0
  139. package/src/core/aggregation/runner/aggregation-runner.ts +27 -5
  140. package/src/core/aggregation/runner/events.ts +47 -19
  141. package/src/core/aggregation/runner/participant-runner.ts +113 -31
  142. package/src/core/aggregation/runner/service-runner.ts +484 -203
  143. package/src/core/aggregation/service.ts +260 -14
  144. package/src/core/aggregation/signing-session.ts +3 -3
  145. package/src/core/aggregation/transport/http/envelope.ts +3 -3
  146. package/src/core/aggregation/transport/http/inbox-buffer.ts +1 -1
  147. package/src/core/aggregation/transport/http/nonce-cache.ts +1 -1
  148. package/src/core/aggregation/transport/http/rate-limiter.ts +1 -1
  149. package/src/core/aggregation/transport/http/request-auth.ts +1 -1
  150. package/src/core/aggregation/transport/http/server.ts +1 -1
  151. package/src/core/aggregation/transport/http/sse-stream.ts +2 -2
  152. package/src/core/aggregation/transport/http/sse-writer.ts +1 -1
  153. package/src/core/aggregation/transport/in-memory.ts +1 -1
  154. package/src/core/aggregation/transport/nostr.ts +6 -6
  155. package/src/core/aggregation/transport/transport.ts +4 -4
  156. package/src/core/beacon/beacon.ts +16 -11
  157. package/src/core/beacon/cas-beacon.ts +7 -7
  158. package/src/core/beacon/interfaces.ts +1 -1
  159. package/src/core/beacon/singleton-beacon.ts +2 -2
  160. package/src/core/beacon/smt-beacon.ts +3 -3
  161. package/src/core/resolver.ts +8 -8
  162. package/src/core/updater.ts +6 -6
  163. package/src/did-btcr2.ts +2 -2
  164. package/src/index.ts +3 -0
@@ -1 +1 @@
1
- {"version":3,"file":"participant.js","sourceRoot":"","sources":["../../../../src/core/aggregation/participant.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"participant.js","sourceRoot":"","sources":["../../../../src/core/aggregation/participant.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,8 @@ export var ServiceCohortPhase;
10
10
  ServiceCohortPhase["SigningStarted"] = "SigningStarted";
11
11
  ServiceCohortPhase["NoncesCollected"] = "NoncesCollected";
12
12
  ServiceCohortPhase["AwaitingPartialSigs"] = "AwaitingPartialSigs";
13
+ /** Optimistic n-of-n key path abandoned; collecting k-of-n fallback signatures (ADR 042). */
14
+ ServiceCohortPhase["FallbackRequested"] = "FallbackRequested";
13
15
  ServiceCohortPhase["Complete"] = "Complete";
14
16
  ServiceCohortPhase["Failed"] = "Failed";
15
17
  })(ServiceCohortPhase || (ServiceCohortPhase = {}));
@@ -19,11 +21,15 @@ export var ParticipantCohortPhase;
19
21
  ParticipantCohortPhase["OptedIn"] = "OptedIn";
20
22
  ParticipantCohortPhase["CohortReady"] = "CohortReady";
21
23
  ParticipantCohortPhase["UpdateSubmitted"] = "UpdateSubmitted";
24
+ /** Member declined to submit an update this round (cooperative non-inclusion); still signs. */
25
+ ParticipantCohortPhase["NonIncluded"] = "NonIncluded";
22
26
  ParticipantCohortPhase["AwaitingValidation"] = "AwaitingValidation";
23
27
  ParticipantCohortPhase["ValidationSent"] = "ValidationSent";
24
28
  ParticipantCohortPhase["AwaitingSigning"] = "AwaitingSigning";
25
29
  ParticipantCohortPhase["NonceSent"] = "NonceSent";
26
30
  ParticipantCohortPhase["AwaitingPartialSig"] = "AwaitingPartialSig";
31
+ /** Service fell back to the k-of-n script path; member can sign the fallback (ADR 042). */
32
+ ParticipantCohortPhase["AwaitingFallbackSig"] = "AwaitingFallbackSig";
27
33
  ParticipantCohortPhase["Complete"] = "Complete";
28
34
  ParticipantCohortPhase["Failed"] = "Failed";
29
35
  })(ParticipantCohortPhase || (ParticipantCohortPhase = {}));
@@ -1 +1 @@
1
- {"version":3,"file":"phases.js","sourceRoot":"","sources":["../../../../src/core/aggregation/phases.ts"],"names":[],"mappings":"AAwBA,MAAM,CAAN,IAAY,kBAaX;AAbD,WAAY,kBAAkB;IAC5B,yCAAmB,CAAA;IACnB,+CAAyB,CAAA;IACzB,6CAAuB,CAAA;IACvB,6DAAuC,CAAA;IACvC,2DAAqC,CAAA;IACrC,yDAAmC,CAAA;IACnC,6CAAuB,CAAA;IACvB,uDAAiC,CAAA;IACjC,yDAAmC,CAAA;IACnC,iEAA2C,CAAA;IAC3C,2CAAqB,CAAA;IACrB,uCAAiB,CAAA;AACnB,CAAC,EAbW,kBAAkB,KAAlB,kBAAkB,QAa7B;AAeD,MAAM,CAAN,IAAY,sBAYX;AAZD,WAAY,sBAAsB;IAChC,mDAAyB,CAAA;IACzB,6CAAmB,CAAA;IACnB,qDAA2B,CAAA;IAC3B,6DAAmC,CAAA;IACnC,mEAAyC,CAAA;IACzC,2DAAiC,CAAA;IACjC,6DAAmC,CAAA;IACnC,iDAAuB,CAAA;IACvB,mEAAyC,CAAA;IACzC,+CAAqB,CAAA;IACrB,2CAAiB,CAAA;AACnB,CAAC,EAZW,sBAAsB,KAAtB,sBAAsB,QAYjC;AAUD,MAAM,CAAN,IAAY,mBAOX;AAPD,WAAY,mBAAmB;IAC7B,gFAAyD,CAAA;IACzD,gFAAyD,CAAA;IACzD,8EAAuD,CAAA;IACvD,8EAAuD,CAAA;IACvD,4CAAqB,CAAA;IACrB,wCAAiB,CAAA;AACnB,CAAC,EAPW,mBAAmB,KAAnB,mBAAmB,QAO9B"}
1
+ {"version":3,"file":"phases.js","sourceRoot":"","sources":["../../../../src/core/aggregation/phases.ts"],"names":[],"mappings":"AAyBA,MAAM,CAAN,IAAY,kBAeX;AAfD,WAAY,kBAAkB;IAC5B,yCAAmB,CAAA;IACnB,+CAAyB,CAAA;IACzB,6CAAuB,CAAA;IACvB,6DAAuC,CAAA;IACvC,2DAAqC,CAAA;IACrC,yDAAmC,CAAA;IACnC,6CAAuB,CAAA;IACvB,uDAAiC,CAAA;IACjC,yDAAmC,CAAA;IACnC,iEAA2C,CAAA;IAC3C,6FAA6F;IAC7F,6DAAuC,CAAA;IACvC,2CAAqB,CAAA;IACrB,uCAAiB,CAAA;AACnB,CAAC,EAfW,kBAAkB,KAAlB,kBAAkB,QAe7B;AAiBD,MAAM,CAAN,IAAY,sBAgBX;AAhBD,WAAY,sBAAsB;IAChC,mDAAyB,CAAA;IACzB,6CAAmB,CAAA;IACnB,qDAA2B,CAAA;IAC3B,6DAAmC,CAAA;IACnC,+FAA+F;IAC/F,qDAA2B,CAAA;IAC3B,mEAAyC,CAAA;IACzC,2DAAiC,CAAA;IACjC,6DAAmC,CAAA;IACnC,iDAAuB,CAAA;IACvB,mEAAyC,CAAA;IACzC,2FAA2F;IAC3F,qEAA2C,CAAA;IAC3C,+CAAqB,CAAA;IACrB,2CAAiB,CAAA;AACnB,CAAC,EAhBW,sBAAsB,KAAtB,sBAAsB,QAgBjC;AAUD,MAAM,CAAN,IAAY,mBAOX;AAPD,WAAY,mBAAmB;IAC7B,gFAAyD,CAAA;IACzD,gFAAyD,CAAA;IACzD,8EAAuD,CAAA;IACvD,8EAAuD,CAAA;IACvD,4CAAqB,CAAA;IACrB,wCAAiB,CAAA;AACnB,CAAC,EAPW,mBAAmB,KAAnB,mBAAmB,QAO9B"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Recovery policy for aggregate beacon outputs.
3
+ *
4
+ * An aggregate beacon UTXO is a Taproot output whose key path is the cohort's
5
+ * n-of-n MuSig2 aggregate key. A key-path-only output can be spent only with a
6
+ * signature from every cohort member, so a single missing signer would lock the
7
+ * funds forever. To prevent that, the output commits to a script tree with two
8
+ * leaves:
9
+ * - a k-of-n fallback leaf (`p2tr_ms`, BIP-342 CHECKSIGADD): any k cohort members
10
+ * can still push the announcement through if some signers go missing, so the
11
+ * beacon stays live without waiting out the timelock.
12
+ * - a CSV recovery leaf: after a relative-timelock delay the funder can reclaim
13
+ * the UTXO unilaterally with its own recovery key, so funds are never
14
+ * permanently stranded even if fewer than k members remain.
15
+ *
16
+ * This module is the seam between the funding model and the concrete script
17
+ * leaves. Only `operator-funded` is implemented today (the k-of-n fallback leaf
18
+ * plus one CSV leaf keyed to the operator's recovery key). A future
19
+ * `participant-funded` model can be added as another case returning
20
+ * per-participant refund leaves, without touching the cohort, service, or
21
+ * signing code. See ADR 042.
22
+ */
23
+ import { schnorr } from '@noble/curves/secp256k1.js';
24
+ import { concatBytes } from '@noble/hashes/utils';
25
+ import { Script, p2tr_ms } from '@scure/btc-signer';
26
+ import { sortKeys } from '@scure/btc-signer/musig2';
27
+ import { AggregationCohortError } from './errors.js';
28
+ /** Default funding model when an advert/config leaves it unspecified. */
29
+ export const DEFAULT_FUNDING_MODEL = 'operator-funded';
30
+ /**
31
+ * Default relative-timelock (in blocks) before operator recovery is spendable.
32
+ * About one day at 10-minute blocks. Operators set their own per-cohort value;
33
+ * this is only a convenience default for callers.
34
+ */
35
+ export const DEFAULT_RECOVERY_SEQUENCE = 144;
36
+ /**
37
+ * Maximum allowed `recoverySequence`, 0xffff (65535 blocks, about 455 days).
38
+ *
39
+ * The value is a BIP-68 block-based relative timelock and is placed directly in
40
+ * the spending input's nSequence. BIP-68 only uses the low 16 bits as the value
41
+ * when the type flag (bit 22) is clear, so constraining to [1, 0xffff] keeps the
42
+ * timelock block-based and, critically, leaves the disable flag (bit 31) clear.
43
+ * A value with bit 31 set would disable CHECKSEQUENCEVERIFY entirely, letting the
44
+ * recovery key spend with no delay; an upper bound of 0xffff makes that
45
+ * unrepresentable.
46
+ */
47
+ export const MAX_RECOVERY_SEQUENCE = 0xffff;
48
+ /** BIP-341 default tapscript leaf version. */
49
+ export const TAPROOT_LEAF_VERSION = 0xc0;
50
+ /** BIP-340 compact-size (varint) prefix for a byte length (scripts stay well under 2^32). */
51
+ function compactSize(n) {
52
+ if (n < 0xfd)
53
+ return new Uint8Array([n]);
54
+ if (n <= 0xffff)
55
+ return new Uint8Array([0xfd, n & 0xff, (n >> 8) & 0xff]);
56
+ return new Uint8Array([0xfe, n & 0xff, (n >> 8) & 0xff, (n >> 16) & 0xff, (n >> 24) & 0xff]);
57
+ }
58
+ /**
59
+ * BIP-341 tapleaf hash: `taggedHash("TapLeaf", leafVersion || compactSize(len) || script)`.
60
+ * Used to key a script-path signature to its leaf when assembling the witness
61
+ * for a script-path spend (the fallback and recovery spend builders).
62
+ */
63
+ export function tapLeafHash(script, leafVersion = TAPROOT_LEAF_VERSION) {
64
+ return schnorr.utils.taggedHash('TapLeaf', concatBytes(new Uint8Array([leafVersion]), compactSize(script.length), script));
65
+ }
66
+ /**
67
+ * Resolve the effective fallback threshold k from an advertised value and the
68
+ * cohort size n. When unadvertised it defaults to n-1 (tolerate one missing or
69
+ * defecting signer, the cheapest useful fallback witness), floored at 1. Both
70
+ * the service and every participant resolve this identically so they derive the
71
+ * same beacon address.
72
+ */
73
+ export function resolveFallbackThreshold(advertised, n) {
74
+ return advertised ?? Math.max(1, n - 1);
75
+ }
76
+ function assertFallbackParams({ cohortKeys, fallbackThreshold }) {
77
+ const n = cohortKeys.length;
78
+ if (n === 0) {
79
+ throw new AggregationCohortError('Cannot build fallback leaf: no cohort keys.', 'NO_COHORT_KEYS');
80
+ }
81
+ for (const key of cohortKeys) {
82
+ if (key.length !== 33) {
83
+ throw new AggregationCohortError(`Cohort key must be a 33-byte compressed public key, got ${key.length} bytes.`, 'INVALID_COHORT_KEY', { length: key.length });
84
+ }
85
+ }
86
+ if (!Number.isInteger(fallbackThreshold) || fallbackThreshold < 1 || fallbackThreshold > n) {
87
+ throw new AggregationCohortError(`Fallback threshold must be an integer in [1, ${n}] (k-of-n), got ${fallbackThreshold}.`, 'INVALID_FALLBACK_THRESHOLD', { fallbackThreshold, n });
88
+ }
89
+ }
90
+ /**
91
+ * Build the k-of-n fallback leaf script: a BIP-342 `p2tr_ms` CHECKSIGADD
92
+ * multisig over the cohort's x-only keys. Any k members can spend this leaf to
93
+ * push the announcement through when the optimistic n-of-n key path stalls.
94
+ *
95
+ * The keys are sorted per BIP-327 (matching the MuSig2 internal-key ordering)
96
+ * and reduced to x-only, so the leaf is identical for every party that builds it.
97
+ */
98
+ export function buildFallbackLeaf(params) {
99
+ assertFallbackParams(params);
100
+ const xOnlyKeys = sortKeys(params.cohortKeys).map(k => k.slice(1));
101
+ return p2tr_ms(params.fallbackThreshold, xOnlyKeys).script;
102
+ }
103
+ function assertRecoveryParams({ recoveryKey, recoverySequence }) {
104
+ if (recoveryKey.length !== 32) {
105
+ throw new AggregationCohortError(`Recovery key must be a 32-byte x-only public key, got ${recoveryKey.length} bytes.`, 'INVALID_RECOVERY_KEY');
106
+ }
107
+ if (!Number.isInteger(recoverySequence) || recoverySequence < 1 || recoverySequence > MAX_RECOVERY_SEQUENCE) {
108
+ throw new AggregationCohortError(`Recovery sequence must be a block-based BIP-68 relative timelock in [1, ${MAX_RECOVERY_SEQUENCE}], got ${recoverySequence}.`, 'INVALID_RECOVERY_SEQUENCE');
109
+ }
110
+ }
111
+ /**
112
+ * Build the CSV recovery leaf script:
113
+ * `<recoverySequence> CHECKSEQUENCEVERIFY DROP <recoveryKey> CHECKSIG`.
114
+ *
115
+ * After `recoverySequence` blocks (relative to the UTXO's confirmation) the
116
+ * holder of `recoveryKey` can spend the output via the script path.
117
+ */
118
+ export function buildRecoveryScript(params) {
119
+ assertRecoveryParams(params);
120
+ return Script.encode([
121
+ params.recoverySequence,
122
+ 'CHECKSEQUENCEVERIFY',
123
+ 'DROP',
124
+ params.recoveryKey,
125
+ 'CHECKSIG',
126
+ ]);
127
+ }
128
+ /**
129
+ * Build the Taproot script-tree leaves for a funding model. The returned leaves
130
+ * are the script tree the beacon output key commits to alongside the cohort's
131
+ * MuSig2 internal key.
132
+ *
133
+ * Canonical leaf order is fallback (k-of-n, leaf A) then CSV recovery (leaf B).
134
+ * For the current two-leaf tree the Merkle root is order-invariant (a TapBranch
135
+ * sorts its two child hashes), but fixing the order keeps the construction
136
+ * deterministic and reviewable, and is consensus-affecting should the tree ever
137
+ * grow past two leaves.
138
+ *
139
+ * @throws {AggregationCohortError} when the funding model is reserved (e.g.
140
+ * `participant-funded`) or unknown, or when the fallback/recovery params are
141
+ * invalid.
142
+ */
143
+ export function buildRecoveryLeaves(fundingModel, params) {
144
+ switch (fundingModel) {
145
+ case 'operator-funded':
146
+ return [
147
+ { script: buildFallbackLeaf(params) },
148
+ { script: buildRecoveryScript(params) },
149
+ ];
150
+ case 'participant-funded':
151
+ throw new AggregationCohortError('Funding model \'participant-funded\' is reserved and not yet implemented.', 'UNSUPPORTED_FUNDING_MODEL', { fundingModel });
152
+ default:
153
+ throw new AggregationCohortError(`Unknown funding model: ${fundingModel}.`, 'UNKNOWN_FUNDING_MODEL', { fundingModel });
154
+ }
155
+ }
156
+ //# sourceMappingURL=recovery-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery-policy.js","sourceRoot":"","sources":["../../../../src/core/aggregation/recovery-policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Recovery spend builder for aggregate beacon outputs.
3
+ *
4
+ * An aggregate beacon UTXO is a Taproot output whose key path is the cohort's
5
+ * n-of-n MuSig2 aggregate key and whose script path carries a timelocked
6
+ * recovery leaf (see {@link ./recovery-policy.ts} and ADR 042). When the
7
+ * optimistic cooperative key-path spend cannot complete (a missing or defecting
8
+ * signer), the funder reclaims the UTXO via the recovery leaf after the
9
+ * relative-timelock delay.
10
+ *
11
+ * This module builds and signs that script-path spend. It is pure with respect
12
+ * to the network: it takes a UTXO reference plus the cohort and recovery
13
+ * parameters and returns a finalized {@link Transaction}; broadcasting and
14
+ * confirmation are the caller's concern. The recovery key path is a single
15
+ * BIP-340 Schnorr signature, so unlike the MuSig2 key path it can be driven by
16
+ * an opaque or HSM-backed signer.
17
+ *
18
+ * The relative timelock is enforced by consensus (BIP-68/112): the spend is only
19
+ * valid once the UTXO has `recoverySequence` confirmations, and the input's
20
+ * nSequence is set accordingly. The transaction version is 2 so BIP-68 applies.
21
+ */
22
+ import { getNetwork } from '@did-btcr2/bitcoin';
23
+ import { schnorr } from '@noble/curves/secp256k1.js';
24
+ import { p2tr, Transaction } from '@scure/btc-signer';
25
+ import { keyAggExport, keyAggregate, sortKeys } from '@scure/btc-signer/musig2';
26
+ import { AggregationCohortError } from './errors.js';
27
+ import { DEFAULT_FUNDING_MODEL, buildRecoveryLeaves, resolveFallbackThreshold } from './recovery-policy.js';
28
+ /**
29
+ * Conservative dust floor (satoshis). The standard p2pkh dust limit; a generic
30
+ * floor below which the recovered output would not be relayable regardless of
31
+ * the destination script type.
32
+ */
33
+ const DUST_LIMIT_SATS = 546n;
34
+ function bytesEqual(a, b) {
35
+ return a.length === b.length && a.every((x, i) => x === b[i]);
36
+ }
37
+ /**
38
+ * Build and sign a script-path recovery spend of an aggregate beacon UTXO.
39
+ *
40
+ * Reconstructs the same Taproot output the cohort funded (MuSig2 internal key +
41
+ * recovery script tree), spends it through the recovery leaf with the operator's
42
+ * recovery key, and finalizes the witness (signature + leaf script + control
43
+ * block). The returned transaction is ready to broadcast once the UTXO has
44
+ * `recoverySequence` confirmations.
45
+ *
46
+ * @throws {AggregationCohortError} when the recovery secret key does not match
47
+ * the committed recovery key, when there are no cohort keys, or when the fee
48
+ * exceeds the UTXO value.
49
+ */
50
+ export function buildRecoverySpend(params) {
51
+ const { cohortKeys, recoverySecretKey, recoveryKey, recoverySequence, fallbackThreshold, fundingModel, network, utxo, destinationAddress, fee, beaconAddress, } = params;
52
+ if (cohortKeys.length === 0) {
53
+ throw new AggregationCohortError('Cannot build recovery spend: no cohort keys.', 'NO_COHORT_KEYS');
54
+ }
55
+ // The recovery leaf commits to recoveryKey; signing it requires the matching
56
+ // secret. Fail loudly here rather than producing a transaction that cannot
57
+ // finalize (btc-signer would throw an opaque "No taproot scripts signed").
58
+ const derivedPub = schnorr.getPublicKey(recoverySecretKey);
59
+ if (!bytesEqual(derivedPub, recoveryKey)) {
60
+ throw new AggregationCohortError('Recovery secret key does not correspond to the committed recovery key.', 'RECOVERY_KEY_MISMATCH');
61
+ }
62
+ const out = utxo.value - fee;
63
+ if (out <= 0n) {
64
+ throw new AggregationCohortError(`Recovery fee ${fee} exceeds UTXO value ${utxo.value}.`, 'FEE_EXCEEDS_VALUE', { fee: fee.toString(), value: utxo.value.toString() });
65
+ }
66
+ if (out < DUST_LIMIT_SATS) {
67
+ throw new AggregationCohortError(`Recovered output ${out} is below the dust limit ${DUST_LIMIT_SATS}; the spend would not relay.`, 'DUST_OUTPUT', { output: out.toString(), dustLimit: DUST_LIMIT_SATS.toString() });
68
+ }
69
+ // Reconstruct the funded output. sortKeys mirrors the cohort's key ordering so
70
+ // the aggregate internal key (and therefore the address and control block)
71
+ // match the UTXO being spent.
72
+ const internalKey = keyAggExport(keyAggregate(sortKeys(cohortKeys)));
73
+ const leaves = buildRecoveryLeaves(fundingModel ?? DEFAULT_FUNDING_MODEL, {
74
+ recoveryKey, recoverySequence, cohortKeys,
75
+ fallbackThreshold: resolveFallbackThreshold(fallbackThreshold, cohortKeys.length),
76
+ });
77
+ const net = getNetwork(network);
78
+ // allowUnknownOutputs: the CSV recovery leaf is a custom script (see cohort.ts).
79
+ const payment = p2tr(internalKey, leaves, net, true);
80
+ // Catch a caller mismatch up front: if the reconstructed address does not match
81
+ // the cohort's funded address, the witnessUtxo script would not match the chain
82
+ // and the spend would be unspendable.
83
+ if (beaconAddress !== undefined && payment.address !== beaconAddress) {
84
+ throw new AggregationCohortError(`Reconstructed beacon address ${payment.address} does not match the cohort's funded address ${beaconAddress}.`, 'BEACON_ADDRESS_MISMATCH', { reconstructed: payment.address, expected: beaconAddress });
85
+ }
86
+ // allowUnknownInputs: the CSV recovery leaf is a custom (non-template) script,
87
+ // so btc-signer's finalizer treats it as 'unknown' and will only assemble the
88
+ // witness for it under this flag (it then signs "what we can": our single
89
+ // recovery signature). version 2 activates BIP-68 relative timelocks.
90
+ const tx = new Transaction({ version: 2, allowUnknownInputs: true });
91
+ // Only tapLeafScript is set (no tapInternalKey): btc-signer then skips the
92
+ // key-path branch and signs the recovery leaf with recoverySecretKey. The
93
+ // input nSequence carries the BIP-68 relative timelock the leaf enforces.
94
+ tx.addInput({
95
+ txid: utxo.txid,
96
+ index: utxo.vout,
97
+ witnessUtxo: { script: payment.script, amount: utxo.value },
98
+ tapLeafScript: payment.tapLeafScript,
99
+ sequence: recoverySequence,
100
+ });
101
+ tx.addOutputAddress(destinationAddress, out, net);
102
+ tx.signIdx(recoverySecretKey, 0);
103
+ tx.finalize();
104
+ return tx;
105
+ }
106
+ //# sourceMappingURL=recovery-spend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery-spend.js","sourceRoot":"","sources":["../../../../src/core/aggregation/recovery-spend.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ import { bytesToHex } from '@noble/hashes/utils';
2
+ import { DEFAULT_FUNDING_MODEL, DEFAULT_RECOVERY_SEQUENCE } from '../recovery-policy.js';
1
3
  import { InMemoryBus, InMemoryTransport } from '../transport/in-memory.js';
2
4
  import { AggregationParticipantRunner } from './participant-runner.js';
3
5
  import { AggregationServiceRunner } from './service-runner.js';
@@ -13,8 +15,8 @@ export class AggregationRunner {
13
15
  *
14
16
  * One party plays both the coordinating service and the lone participant,
15
17
  * connected over an {@link InMemoryTransport} (no relay or HTTP server). This
16
- * makes the single-participant aggregate-beacon path the N=1 corner of the
17
- * two-axis beacon matrix (see ADR 037) first-class, useful for generating
18
+ * makes the single-participant aggregate-beacon path (the N=1 corner of the
19
+ * two-axis beacon matrix, see ADR 037) first-class, useful for generating
18
20
  * and reproducing single-participant aggregate test vectors.
19
21
  *
20
22
  * The service advertises a cohort with `minParticipants: 1`; the participant
@@ -34,11 +36,17 @@ export class AggregationRunner {
34
36
  transport.registerPeer(options.participant.did, options.participant.keys.publicKey.compressed);
35
37
  transport.registerPeer(options.service.did, options.service.keys.publicKey.compressed);
36
38
  transport.start();
39
+ // In a solo run the service actor is the operator and holds full keys, so it
40
+ // can both advertise the recovery terms and, if ever needed, perform the
41
+ // recovery. Default the recovery key to the service's own x-only key.
42
+ const recoveryKey = options.config.recoveryKey
43
+ ?? bytesToHex(options.service.keys.publicKey.compressed.slice(1));
44
+ const recoverySequence = options.config.recoverySequence ?? DEFAULT_RECOVERY_SEQUENCE;
37
45
  const service = new AggregationServiceRunner({
38
46
  transport,
39
47
  did: options.service.did,
40
48
  keys: options.service.keys,
41
- config: { minParticipants: 1, network: options.config.network, beaconType: options.config.beaconType },
49
+ config: { minParticipants: 1, network: options.config.network, beaconType: options.config.beaconType, recoveryKey, recoverySequence, fundingModel: DEFAULT_FUNDING_MODEL },
42
50
  onProvideTxData: options.onProvideTxData,
43
51
  cohortTtlMs: options.cohortTtlMs,
44
52
  phaseTimeoutMs: options.phaseTimeoutMs,
@@ -1 +1 @@
1
- {"version":3,"file":"aggregation-runner.js","sourceRoot":"","sources":["../../../../../src/core/aggregation/runner/aggregation-runner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AAEvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AA2B/D;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IAC5B;;;;;;;;;;;;;;;;;OAiBG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAA0B;QAC1C,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;QAC3D,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnE,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3E,4EAA4E;QAC5E,4DAA4D;QAC5D,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC/F,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACvF,SAAS,CAAC,KAAK,EAAE,CAAC;QAElB,MAAM,OAAO,GAAG,IAAI,wBAAwB,CAAC;YAC3C,SAAS;YACT,GAAG,EAAsB,OAAO,CAAC,OAAO,CAAC,GAAG;YAC5C,IAAI,EAAqB,OAAO,CAAC,OAAO,CAAC,IAAI;YAC7C,MAAM,EAAmB,EAAE,eAAe,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE;YACvH,eAAe,EAAU,OAAO,CAAC,eAAe;YAChD,WAAW,EAAc,OAAO,CAAC,WAAW;YAC5C,cAAc,EAAW,OAAO,CAAC,cAAc;YAC/C,yEAAyE;YACzE,kEAAkE;YAClE,sBAAsB,EAAG,CAAC;SAC3B,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,IAAI,4BAA4B,CAAC;YACnD,SAAS;YACT,GAAG,EAAe,OAAO,CAAC,WAAW,CAAC,GAAG;YACzC,IAAI,EAAc,OAAO,CAAC,WAAW,CAAC,IAAI;YAC1C,UAAU,EAAQ,KAAK,IAAI,EAAE,CAAC,IAAI;YAClC,eAAe,EAAG,OAAO,CAAC,eAAe;SAC1C,CAAC,CAAC;QAEH,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,OAAO,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC;QAC7B,CAAC;gBAAS,CAAC;YACT,WAAW,CAAC,IAAI,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"aggregation-runner.js","sourceRoot":"","sources":["../../../../../src/core/aggregation/runner/aggregation-runner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAEzF,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AAEvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAwC/D;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IAC5B;;;;;;;;;;;;;;;;;OAiBG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAA0B;QAC1C,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;QAC3D,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnE,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3E,4EAA4E;QAC5E,4DAA4D;QAC5D,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC/F,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACvF,SAAS,CAAC,KAAK,EAAE,CAAC;QAElB,6EAA6E;QAC7E,yEAAyE;QACzE,sEAAsE;QACtE,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW;eACzC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,IAAI,yBAAyB,CAAC;QAEtF,MAAM,OAAO,GAAG,IAAI,wBAAwB,CAAC;YAC3C,SAAS;YACT,GAAG,EAAsB,OAAO,CAAC,OAAO,CAAC,GAAG;YAC5C,IAAI,EAAqB,OAAO,CAAC,OAAO,CAAC,IAAI;YAC7C,MAAM,EAAmB,EAAE,eAAe,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,qBAAqB,EAAE;YAC3L,eAAe,EAAU,OAAO,CAAC,eAAe;YAChD,WAAW,EAAc,OAAO,CAAC,WAAW;YAC5C,cAAc,EAAW,OAAO,CAAC,cAAc;YAC/C,yEAAyE;YACzE,kEAAkE;YAClE,sBAAsB,EAAG,CAAC;SAC3B,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,IAAI,4BAA4B,CAAC;YACnD,SAAS;YACT,GAAG,EAAe,OAAO,CAAC,WAAW,CAAC,GAAG;YACzC,IAAI,EAAc,OAAO,CAAC,WAAW,CAAC,IAAI;YAC1C,UAAU,EAAQ,KAAK,IAAI,EAAE,CAAC,IAAI;YAClC,eAAe,EAAG,OAAO,CAAC,eAAe;SAC1C,CAAC,CAAC;QAEH,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,OAAO,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC;QAC7B,CAAC;gBAAS,CAAC;YACT,WAAW,CAAC,IAAI,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;CACF"}
@@ -1,5 +1,5 @@
1
1
  var _a;
2
- import { AGGREGATED_NONCE, AUTHORIZATION_REQUEST, COHORT_ADVERT, COHORT_OPT_IN_ACCEPT, COHORT_READY, DISTRIBUTE_AGGREGATED_DATA, } from '../messages/constants.js';
2
+ import { AGGREGATED_NONCE, AUTHORIZATION_REQUEST, COHORT_ADVERT, COHORT_OPT_IN_ACCEPT, COHORT_READY, DISTRIBUTE_AGGREGATED_DATA, FALLBACK_AUTHORIZATION_REQUEST, } from '../messages/constants.js';
3
3
  import { AggregationParticipant } from '../participant.js';
4
4
  import { ParticipantCohortPhase } from '../phases.js';
5
5
  import { KeyPairAggregationSigner } from '../signer.js';
@@ -88,6 +88,7 @@ export class AggregationParticipantRunner extends TypedEventEmitter {
88
88
  DISTRIBUTE_AGGREGATED_DATA,
89
89
  AUTHORIZATION_REQUEST,
90
90
  AGGREGATED_NONCE,
91
+ FALLBACK_AUTHORIZATION_REQUEST,
91
92
  ];
92
93
  /** Internal: detach from the transport. Safe to call repeatedly. */
93
94
  #unregisterHandlers() {
@@ -100,7 +101,8 @@ export class AggregationParticipantRunner extends TypedEventEmitter {
100
101
  }
101
102
  /**
102
103
  * Single-shot helper: start, join the first cohort that passes `shouldJoin`,
103
- * drive it to completion, and resolve. Convenient for tests and demos.
104
+ * drive it to completion, and resolve. Convenient for tests and demos. The
105
+ * single-cohort special case of {@link joinMatching} (count = 1).
104
106
  */
105
107
  static async joinFirst(options) {
106
108
  return new Promise((resolve, reject) => {
@@ -113,6 +115,37 @@ export class AggregationParticipantRunner extends TypedEventEmitter {
113
115
  runner.start().catch(reject);
114
116
  });
115
117
  }
118
+ /**
119
+ * Multi-cohort helper: start, join EVERY cohort whose advert passes
120
+ * `shouldJoin`, drive each to completion in parallel, and resolve once
121
+ * `count` cohorts have completed (the runner stops at that point). The
122
+ * N-cohort generalization of {@link joinFirst}, for a participant that joins
123
+ * several cohorts advertised by one service.
124
+ *
125
+ * For an open-ended, long-lived subscriber (no fixed count), construct an
126
+ * {@link AggregationParticipantRunner} directly, set `shouldJoin`, call
127
+ * `start()`, and listen for `cohort-complete` - the runner already drives
128
+ * any number of cohorts concurrently.
129
+ *
130
+ * @param options Participant runner options (set `shouldJoin` to select cohorts).
131
+ * @param count Number of completed cohorts to collect before resolving.
132
+ * @returns The {@link CohortCompleteInfo} for each completed cohort, in completion order.
133
+ */
134
+ static async joinMatching(options, count) {
135
+ return new Promise((resolve, reject) => {
136
+ const runner = new _a(options);
137
+ const completed = [];
138
+ runner.on('cohort-complete', (info) => {
139
+ completed.push(info);
140
+ if (completed.length >= count) {
141
+ runner.stop();
142
+ resolve(completed);
143
+ }
144
+ });
145
+ runner.on('error', reject);
146
+ runner.start().catch(reject);
147
+ });
148
+ }
116
149
  /**
117
150
  * Internal: handler registration with the transport. Idempotent and safe to call multiple times,
118
151
  * but only registers handlers once.
@@ -127,6 +160,7 @@ export class AggregationParticipantRunner extends TypedEventEmitter {
127
160
  this.#transport.registerMessageHandler(this.#did, DISTRIBUTE_AGGREGATED_DATA, this.#handleDistributeData.bind(this));
128
161
  this.#transport.registerMessageHandler(this.#did, AUTHORIZATION_REQUEST, this.#handleAuthorizationRequest.bind(this));
129
162
  this.#transport.registerMessageHandler(this.#did, AGGREGATED_NONCE, this.#handleAggregatedNonce.bind(this));
163
+ this.#transport.registerMessageHandler(this.#did, FALLBACK_AUTHORIZATION_REQUEST, this.#handleFallbackAuthorizationRequest.bind(this));
130
164
  }
131
165
  /**
132
166
  * Internal: handler for cohort adverts. Applies the `shouldJoin` filter and joins if approved.
@@ -188,13 +222,21 @@ export class AggregationParticipantRunner extends TypedEventEmitter {
188
222
  if (!info)
189
223
  return;
190
224
  this.emit('cohort-ready', { cohortId, beaconAddress: info.beaconAddress });
191
- // Construct the signed update via caller callback and submit
225
+ // Construct the signed update via caller callback and submit. A null return
226
+ // means the member has no update this round: it declines (cooperative
227
+ // non-inclusion) but stays in the cohort and still signs.
192
228
  const signedUpdate = await this.#onProvideUpdate({
193
229
  cohortId,
194
230
  beaconAddress: info.beaconAddress,
195
231
  });
196
- await this.#sendAll(this.session.submitUpdate(cohortId, signedUpdate));
197
- this.emit('update-submitted', { cohortId });
232
+ if (signedUpdate === null) {
233
+ await this.#sendAll(this.session.declineUpdate(cohortId));
234
+ this.emit('update-declined', { cohortId });
235
+ }
236
+ else {
237
+ await this.#sendAll(this.session.submitUpdate(cohortId, signedUpdate));
238
+ this.emit('update-submitted', { cohortId });
239
+ }
198
240
  }
199
241
  catch (err) {
200
242
  this.emit('error', err);
@@ -283,26 +325,71 @@ export class AggregationParticipantRunner extends TypedEventEmitter {
283
325
  return;
284
326
  await this.#sendAll(this.session.generatePartialSignature(cohortId));
285
327
  // Check if we've reached completion
286
- if (this.session.getCohortPhase(cohortId) === ParticipantCohortPhase.Complete) {
287
- const info = this.session.joinedCohorts.get(cohortId);
288
- if (info) {
289
- // Surface the sidecar data the participant will need for future resolutions:
290
- // the CAS Announcement map (CAS beacons) or their SMT inclusion proof.
291
- const validation = this.session.pendingValidations.get(cohortId);
292
- this.emit('cohort-complete', {
293
- cohortId,
294
- beaconAddress: info.beaconAddress,
295
- beaconType: validation?.beaconType ?? '',
296
- casAnnouncement: validation?.casAnnouncement,
297
- smtProof: validation?.smtProof,
298
- });
299
- }
328
+ this.#emitCohortCompleteIfDone(cohortId);
329
+ }
330
+ catch (err) {
331
+ this.emit('error', err);
332
+ }
333
+ }
334
+ /**
335
+ * Internal: handler for fallback authorization requests. The service abandoned
336
+ * the optimistic key path; the member authorizes the k-of-n script-path spend
337
+ * of the same beacon transaction (ADR 042). Reuses `onApproveSigning` to gate
338
+ * the decision, signs the fallback, and completes once it has contributed (the
339
+ * service needs only k members).
340
+ * @param {BaseMessage} msg - The received fallback authorization request message.
341
+ * @returns {Promise<void>} Resolves when processing is complete.
342
+ */
343
+ async #handleFallbackAuthorizationRequest(msg) {
344
+ if (this.#stopped)
345
+ return;
346
+ try {
347
+ this.session.receive(msg);
348
+ const cohortId = msg.body?.cohortId;
349
+ if (!cohortId)
350
+ return;
351
+ const req = this.session.pendingFallbackRequests.get(cohortId);
352
+ if (!req)
353
+ return;
354
+ this.emit('fallback-requested', req);
355
+ const decision = await this.#onApproveSigning(req);
356
+ if (!decision.approved) {
357
+ this.emit('cohort-failed', { cohortId, reason: 'Fallback signing rejected by participant' });
358
+ return;
300
359
  }
360
+ await this.#sendAll(this.session.approveFallback(cohortId));
361
+ // The member has contributed its fallback signature and is done from its
362
+ // own perspective, regardless of whether the service has yet collected k.
363
+ this.#emitCohortCompleteIfDone(cohortId);
301
364
  }
302
365
  catch (err) {
303
366
  this.emit('error', err);
304
367
  }
305
368
  }
369
+ /**
370
+ * Internal: emit `cohort-complete` with the participant's retained sidecar once
371
+ * the cohort has reached the Complete phase. Surfaces the CAS Announcement map
372
+ * (CAS beacons) or the SMT proof (SMT beacons) the participant keeps for future
373
+ * DID resolution. Read via getValidation (not pendingValidations, which lists
374
+ * only the AwaitingValidation phase) so the sidecar is still available at
375
+ * Complete. Shared by the optimistic and fallback completion paths.
376
+ */
377
+ #emitCohortCompleteIfDone(cohortId) {
378
+ if (this.session.getCohortPhase(cohortId) !== ParticipantCohortPhase.Complete)
379
+ return;
380
+ const info = this.session.joinedCohorts.get(cohortId);
381
+ if (!info)
382
+ return;
383
+ const validation = this.session.getValidation(cohortId);
384
+ this.emit('cohort-complete', {
385
+ cohortId,
386
+ beaconAddress: info.beaconAddress,
387
+ beaconType: validation?.beaconType ?? '',
388
+ included: validation?.included ?? true,
389
+ casAnnouncement: validation?.casAnnouncement,
390
+ smtProof: validation?.smtProof,
391
+ });
392
+ }
306
393
  /**
307
394
  * Internal: send helper to ensure messages are sent sequentially. This is important for protocol
308
395
  * correctness, as some transports may not guarantee message order if sent in parallel.