@did-btcr2/method 0.37.0 → 0.38.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
@@ -55,6 +55,7 @@ __export(index_exports, {
55
55
  BeaconUtils: () => BeaconUtils,
56
56
  CASBeacon: () => CASBeacon,
57
57
  CASBeaconError: () => CASBeaconError,
58
+ CHANGE_OUTPUT_VBYTES: () => CHANGE_OUTPUT_VBYTES,
58
59
  COHORT_ADVERT: () => COHORT_ADVERT,
59
60
  COHORT_OPT_IN: () => COHORT_OPT_IN,
60
61
  COHORT_OPT_IN_ACCEPT: () => COHORT_OPT_IN_ACCEPT,
@@ -63,6 +64,7 @@ __export(index_exports, {
63
64
  DEFAULT_ADVERT_REPEAT_INTERVAL_MS: () => DEFAULT_ADVERT_REPEAT_INTERVAL_MS,
64
65
  DEFAULT_BROADCAST_LOOKBACK_MS: () => DEFAULT_BROADCAST_LOOKBACK_MS,
65
66
  DEFAULT_CLOCK_SKEW_SEC: () => DEFAULT_CLOCK_SKEW_SEC,
67
+ DEFAULT_FEE_ESTIMATOR: () => DEFAULT_FEE_ESTIMATOR,
66
68
  DEFAULT_FUNDING_MODEL: () => DEFAULT_FUNDING_MODEL,
67
69
  DEFAULT_MAX_UPDATE_SIZE_BYTES: () => DEFAULT_MAX_UPDATE_SIZE_BYTES,
68
70
  DEFAULT_NONCE_LEN_BYTES: () => DEFAULT_NONCE_LEN_BYTES,
@@ -70,6 +72,7 @@ __export(index_exports, {
70
72
  DEFAULT_RECOVERY_SEQUENCE: () => DEFAULT_RECOVERY_SEQUENCE,
71
73
  DID_REGEX: () => DID_REGEX,
72
74
  DISTRIBUTE_AGGREGATED_DATA: () => DISTRIBUTE_AGGREGATED_DATA,
75
+ DUST_LIMIT_SATS: () => DUST_LIMIT_SATS2,
73
76
  DidBtcr2: () => DidBtcr2,
74
77
  DidCommTransport: () => DidCommTransport,
75
78
  DidDocument: () => DidDocument,
@@ -126,6 +129,7 @@ __export(index_exports, {
126
129
  TypedEventEmitter: () => TypedEventEmitter,
127
130
  Updater: () => Updater,
128
131
  VALIDATION_ACK: () => VALIDATION_ACK,
132
+ beaconTxVsize: () => beaconTxVsize,
129
133
  buildAggregationBeaconTx: () => buildAggregationBeaconTx,
130
134
  buildFallbackLeaf: () => buildFallbackLeaf,
131
135
  buildFallbackSpend: () => buildFallbackSpend,
@@ -177,6 +181,7 @@ __export(index_exports, {
177
181
  parseRequestAuth: () => parseRequestAuth,
178
182
  parseSseStream: () => parseSseStream,
179
183
  registerBeaconStrategy: () => registerBeaconStrategy,
184
+ resolveChangeAddress: () => resolveChangeAddress,
180
185
  resolveFallbackThreshold: () => resolveFallbackThreshold,
181
186
  reviveFromWire: () => reviveFromWire,
182
187
  signEnvelope: () => signEnvelope,
@@ -4856,6 +4861,27 @@ var TypedEventEmitter = class {
4856
4861
  }
4857
4862
  };
4858
4863
 
4864
+ // src/core/beacon/fee-estimator.ts
4865
+ var StaticFeeEstimator = class {
4866
+ satsPerVbyte;
4867
+ /**
4868
+ * @param satsPerVbyte Fee rate in satoshis per virtual byte. Default: 5 sat/vB.
4869
+ */
4870
+ constructor(satsPerVbyte = 5) {
4871
+ if (satsPerVbyte < 0 || !Number.isFinite(satsPerVbyte)) {
4872
+ throw new Error(`Invalid satsPerVbyte: ${satsPerVbyte}`);
4873
+ }
4874
+ this.satsPerVbyte = satsPerVbyte;
4875
+ }
4876
+ async estimateFee(vsize) {
4877
+ if (vsize < 0 || !Number.isFinite(vsize)) {
4878
+ throw new Error(`Invalid vsize: ${vsize}`);
4879
+ }
4880
+ return BigInt(Math.ceil(vsize * this.satsPerVbyte));
4881
+ }
4882
+ };
4883
+ var DEFAULT_FEE_ESTIMATOR = new StaticFeeEstimator(5);
4884
+
4859
4885
  // src/core/aggregation/runner/service-runner.ts
4860
4886
  var DEFAULT_ADVERT_REPEAT_INTERVAL_MS = 6e4;
4861
4887
  var AggregationServiceRunner = class _AggregationServiceRunner extends TypedEventEmitter {
@@ -4867,6 +4893,7 @@ var AggregationServiceRunner = class _AggregationServiceRunner extends TypedEven
4867
4893
  #onOptInReceived;
4868
4894
  #onReadyToFinalize;
4869
4895
  #onProvideTxData;
4896
+ #feeEstimator;
4870
4897
  #cohortTtlMs;
4871
4898
  #phaseTimeoutMs;
4872
4899
  #advertRepeatIntervalMs;
@@ -4891,6 +4918,7 @@ var AggregationServiceRunner = class _AggregationServiceRunner extends TypedEven
4891
4918
  finalize: acceptedCount >= minRequired
4892
4919
  }));
4893
4920
  this.#onProvideTxData = options.onProvideTxData;
4921
+ this.#feeEstimator = options.feeEstimator ?? DEFAULT_FEE_ESTIMATOR;
4894
4922
  this.#cohortTtlMs = options.cohortTtlMs;
4895
4923
  this.#phaseTimeoutMs = options.phaseTimeoutMs;
4896
4924
  this.#advertRepeatIntervalMs = options.advertRepeatIntervalMs ?? DEFAULT_ADVERT_REPEAT_INTERVAL_MS;
@@ -5321,7 +5349,8 @@ var AggregationServiceRunner = class _AggregationServiceRunner extends TypedEven
5321
5349
  const txData = await this.#onProvideTxData({
5322
5350
  cohortId: ctx.cohortId,
5323
5351
  beaconAddress: cohort.beaconAddress,
5324
- signalBytes: cohort.signalBytes
5352
+ signalBytes: cohort.signalBytes,
5353
+ feeEstimator: this.#feeEstimator
5325
5354
  });
5326
5355
  const authMsgs = this.session.startSigning(ctx.cohortId, txData);
5327
5356
  const sessionId = this.session.getSigningSessionId(ctx.cohortId) ?? "";
@@ -5775,6 +5804,7 @@ var AggregationRunner = class {
5775
5804
  keys: options.service.keys,
5776
5805
  config: { minParticipants: 1, network: options.config.network, beaconType: options.config.beaconType, recoveryKey, recoverySequence, fundingModel: DEFAULT_FUNDING_MODEL },
5777
5806
  onProvideTxData: options.onProvideTxData,
5807
+ feeEstimator: options.feeEstimator,
5778
5808
  cohortTtlMs: options.cohortTtlMs,
5779
5809
  phaseTimeoutMs: options.phaseTimeoutMs,
5780
5810
  // In-process bus with the participant already listening: a single advert
@@ -5830,28 +5860,7 @@ var SMTBeaconError = class extends import_common12.MethodError {
5830
5860
  }
5831
5861
  };
5832
5862
 
5833
- // src/core/beacon/fee-estimator.ts
5834
- var StaticFeeEstimator = class {
5835
- satsPerVbyte;
5836
- /**
5837
- * @param satsPerVbyte Fee rate in satoshis per virtual byte. Default: 5 sat/vB.
5838
- */
5839
- constructor(satsPerVbyte = 5) {
5840
- if (satsPerVbyte < 0 || !Number.isFinite(satsPerVbyte)) {
5841
- throw new Error(`Invalid satsPerVbyte: ${satsPerVbyte}`);
5842
- }
5843
- this.satsPerVbyte = satsPerVbyte;
5844
- }
5845
- async estimateFee(vsize) {
5846
- if (vsize < 0 || !Number.isFinite(vsize)) {
5847
- throw new Error(`Invalid vsize: ${vsize}`);
5848
- }
5849
- return BigInt(Math.ceil(vsize * this.satsPerVbyte));
5850
- }
5851
- };
5852
-
5853
5863
  // src/core/beacon/beacon.ts
5854
- var DEFAULT_FEE_ESTIMATOR = new StaticFeeEstimator(5);
5855
5864
  var P2TR_BEACON_TX_VSIZE = 160;
5856
5865
  var P2WPKH_BEACON_TX_VSIZE = 155;
5857
5866
  var P2PKH_BEACON_TX_VSIZE = 240;
@@ -5860,6 +5869,20 @@ var SINGLETON_BEACON_TX_VSIZE = {
5860
5869
  p2wpkh: P2WPKH_BEACON_TX_VSIZE,
5861
5870
  p2tr: P2TR_BEACON_TX_VSIZE
5862
5871
  };
5872
+ var CHANGE_OUTPUT_VBYTES = {
5873
+ p2pkh: 34,
5874
+ p2wpkh: 31,
5875
+ p2tr: 43
5876
+ };
5877
+ var DUST_LIMIT_SATS2 = {
5878
+ p2pkh: 546,
5879
+ p2wpkh: 294,
5880
+ p2tr: 330
5881
+ };
5882
+ function beaconTxVsize(beaconKind, changeKind) {
5883
+ const base2 = SINGLETON_BEACON_TX_VSIZE[beaconKind] - CHANGE_OUTPUT_VBYTES[beaconKind];
5884
+ return base2 + CHANGE_OUTPUT_VBYTES[changeKind];
5885
+ }
5863
5886
  function detectSingletonScriptKind(bitcoinAddress, network) {
5864
5887
  const decoded = (0, import_btc_signer7.Address)(network).decode(bitcoinAddress);
5865
5888
  if (decoded.type === "pkh") return "p2pkh";
@@ -5876,6 +5899,26 @@ function deriveSingletonAddress(kind, pubkey, network) {
5876
5899
  if (kind === "p2wpkh") return (0, import_btc_signer7.p2wpkh)(pubkey, network).address;
5877
5900
  return (0, import_btc_signer7.p2tr)(pubkey.slice(1, 33), void 0, network).address;
5878
5901
  }
5902
+ function resolveChangeAddress(beaconAddress, network, changeAddress) {
5903
+ if (!changeAddress || changeAddress === beaconAddress) return beaconAddress;
5904
+ try {
5905
+ (0, import_btc_signer7.Address)(network).decode(changeAddress);
5906
+ } catch {
5907
+ throw new BeaconError(
5908
+ `Invalid change address "${changeAddress}" for network "${network}".`,
5909
+ "INVALID_CHANGE_ADDRESS",
5910
+ { changeAddress, network }
5911
+ );
5912
+ }
5913
+ return changeAddress;
5914
+ }
5915
+ function changeOutputKind(changeAddress, network) {
5916
+ try {
5917
+ return detectSingletonScriptKind(changeAddress, network);
5918
+ } catch {
5919
+ return "p2tr";
5920
+ }
5921
+ }
5879
5922
  function opReturnScript(signalBytes) {
5880
5923
  return import_btc_signer7.Script.encode(["RETURN", signalBytes]);
5881
5924
  }
@@ -5902,8 +5945,10 @@ async function fetchSpendableUtxo(bitcoinAddress, bitcoin) {
5902
5945
  async function buildAggregationBeaconTx(opts) {
5903
5946
  const feeEstimator = opts.feeEstimator ?? DEFAULT_FEE_ESTIMATOR;
5904
5947
  const { utxo, prevTxBytes } = await fetchSpendableUtxo(opts.beaconAddress, opts.bitcoin);
5948
+ const changeAddress = resolveChangeAddress(opts.beaconAddress, opts.network, opts.changeAddress);
5905
5949
  const witnessScript = import_btc_signer7.OutScript.encode((0, import_btc_signer7.Address)(opts.network).decode(opts.beaconAddress));
5906
- const feeSats = await feeEstimator.estimateFee(P2TR_BEACON_TX_VSIZE);
5950
+ const changeKind = changeOutputKind(changeAddress, opts.network);
5951
+ const feeSats = await feeEstimator.estimateFee(beaconTxVsize("p2tr", changeKind));
5907
5952
  if (BigInt(utxo.value) <= feeSats) {
5908
5953
  throw new BeaconError(
5909
5954
  `UTXO value (${utxo.value}) insufficient to cover fee (${feeSats}).`,
@@ -5919,13 +5964,17 @@ async function buildAggregationBeaconTx(opts) {
5919
5964
  witnessUtxo: { amount: BigInt(utxo.value), script: witnessScript },
5920
5965
  tapInternalKey: opts.internalPubkey
5921
5966
  });
5922
- tx.addOutputAddress(opts.beaconAddress, BigInt(utxo.value) - feeSats, opts.network);
5967
+ const changeValue = BigInt(utxo.value) - feeSats;
5968
+ if (changeValue >= BigInt(DUST_LIMIT_SATS2[changeKind])) {
5969
+ tx.addOutputAddress(changeAddress, changeValue, opts.network);
5970
+ }
5923
5971
  tx.addOutput({ script: opReturnScript(opts.signalBytes), amount: 0n });
5924
5972
  return {
5925
5973
  tx,
5926
5974
  prevOutScripts: [witnessScript],
5927
5975
  prevOutValues: [BigInt(utxo.value)],
5928
5976
  beaconAddress: opts.beaconAddress,
5977
+ changeAddress,
5929
5978
  utxo,
5930
5979
  feeSats,
5931
5980
  scriptKind: "p2tr"
@@ -6003,7 +6052,8 @@ var SinglePartyBeacon = class {
6003
6052
  prevTxBytes,
6004
6053
  signer,
6005
6054
  bitcoin,
6006
- feeEstimator
6055
+ feeEstimator,
6056
+ changeAddress: options?.changeAddress
6007
6057
  });
6008
6058
  const signedHex = await this.signSinglePartyTx(plan, signer);
6009
6059
  return this.broadcastRawTx(bitcoin, signedHex);
@@ -6015,13 +6065,15 @@ var SinglePartyBeacon = class {
6015
6065
  * the input accordingly. Validates that the signer's pubkey produces the beacon
6016
6066
  * address under that script kind: without this check, a misconfigured caller
6017
6067
  * would burn a real UTXO on a tx that fails at broadcast. Fees are computed from
6018
- * the per-kind {@link SINGLETON_BEACON_TX_VSIZE} constant, avoiding any probe-sign
6019
- * round-trip.
6068
+ * the per-kind {@link SINGLETON_BEACON_TX_VSIZE} constant (via {@link beaconTxVsize}),
6069
+ * avoiding any probe-sign round-trip; a change address of a different kind re-sizes
6070
+ * the fee by the change output's size delta so it stays a valid upper bound.
6020
6071
  */
6021
6072
  async buildSinglePartyTx(opts) {
6022
6073
  const network = opts.bitcoin.data;
6023
6074
  const pubkey = opts.signer.publicKey;
6024
6075
  const kind = detectSingletonScriptKind(opts.beaconAddress, network);
6076
+ const changeAddress = resolveChangeAddress(opts.beaconAddress, network, opts.changeAddress);
6025
6077
  const derivedAddress = deriveSingletonAddress(kind, pubkey, network);
6026
6078
  if (derivedAddress !== opts.beaconAddress) {
6027
6079
  throw new BeaconError(
@@ -6030,7 +6082,8 @@ var SinglePartyBeacon = class {
6030
6082
  { kind, address: opts.beaconAddress, derivedAddress }
6031
6083
  );
6032
6084
  }
6033
- const feeSats = await opts.feeEstimator.estimateFee(SINGLETON_BEACON_TX_VSIZE[kind]);
6085
+ const changeKind = changeOutputKind(changeAddress, network);
6086
+ const feeSats = await opts.feeEstimator.estimateFee(beaconTxVsize(kind, changeKind));
6034
6087
  const amount = BigInt(opts.utxo.value);
6035
6088
  if (amount <= feeSats) {
6036
6089
  throw new BeaconError(
@@ -6067,13 +6120,17 @@ var SinglePartyBeacon = class {
6067
6120
  tapInternalKey: internalKey
6068
6121
  });
6069
6122
  }
6070
- tx.addOutputAddress(opts.beaconAddress, amount - feeSats, network);
6123
+ const changeValue = amount - feeSats;
6124
+ if (changeValue >= BigInt(DUST_LIMIT_SATS2[changeKind])) {
6125
+ tx.addOutputAddress(changeAddress, changeValue, network);
6126
+ }
6071
6127
  tx.addOutput({ script: opReturnScript(opts.signalBytes), amount: 0n });
6072
6128
  return {
6073
6129
  tx,
6074
6130
  prevOutScripts: [prevOutScript],
6075
6131
  prevOutValues: [amount],
6076
6132
  beaconAddress: opts.beaconAddress,
6133
+ changeAddress,
6077
6134
  utxo: opts.utxo,
6078
6135
  feeSats,
6079
6136
  scriptKind: kind
@@ -8983,6 +9040,7 @@ var DidDocumentBuilder = class {
8983
9040
  BeaconUtils,
8984
9041
  CASBeacon,
8985
9042
  CASBeaconError,
9043
+ CHANGE_OUTPUT_VBYTES,
8986
9044
  COHORT_ADVERT,
8987
9045
  COHORT_OPT_IN,
8988
9046
  COHORT_OPT_IN_ACCEPT,
@@ -8991,6 +9049,7 @@ var DidDocumentBuilder = class {
8991
9049
  DEFAULT_ADVERT_REPEAT_INTERVAL_MS,
8992
9050
  DEFAULT_BROADCAST_LOOKBACK_MS,
8993
9051
  DEFAULT_CLOCK_SKEW_SEC,
9052
+ DEFAULT_FEE_ESTIMATOR,
8994
9053
  DEFAULT_FUNDING_MODEL,
8995
9054
  DEFAULT_MAX_UPDATE_SIZE_BYTES,
8996
9055
  DEFAULT_NONCE_LEN_BYTES,
@@ -8998,6 +9057,7 @@ var DidDocumentBuilder = class {
8998
9057
  DEFAULT_RECOVERY_SEQUENCE,
8999
9058
  DID_REGEX,
9000
9059
  DISTRIBUTE_AGGREGATED_DATA,
9060
+ DUST_LIMIT_SATS,
9001
9061
  DidBtcr2,
9002
9062
  DidCommTransport,
9003
9063
  DidDocument,
@@ -9054,6 +9114,7 @@ var DidDocumentBuilder = class {
9054
9114
  TypedEventEmitter,
9055
9115
  Updater,
9056
9116
  VALIDATION_ACK,
9117
+ beaconTxVsize,
9057
9118
  buildAggregationBeaconTx,
9058
9119
  buildFallbackLeaf,
9059
9120
  buildFallbackSpend,
@@ -9105,6 +9166,7 @@ var DidDocumentBuilder = class {
9105
9166
  parseRequestAuth,
9106
9167
  parseSseStream,
9107
9168
  registerBeaconStrategy,
9169
+ resolveChangeAddress,
9108
9170
  resolveFallbackThreshold,
9109
9171
  reviveFromWire,
9110
9172
  signEnvelope,
@@ -48,6 +48,7 @@ export class AggregationRunner {
48
48
  keys: options.service.keys,
49
49
  config: { minParticipants: 1, network: options.config.network, beaconType: options.config.beaconType, recoveryKey, recoverySequence, fundingModel: DEFAULT_FUNDING_MODEL },
50
50
  onProvideTxData: options.onProvideTxData,
51
+ feeEstimator: options.feeEstimator,
51
52
  cohortTtlMs: options.cohortTtlMs,
52
53
  phaseTimeoutMs: options.phaseTimeoutMs,
53
54
  // In-process bus with the participant already listening: a single advert
@@ -1 +1 @@
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
+ {"version":3,"file":"aggregation-runner.js","sourceRoot":"","sources":["../../../../../src/core/aggregation/runner/aggregation-runner.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { AggregationServiceError } from '../errors.js';
3
3
  import { COHORT_OPT_IN, FALLBACK_SIGNATURE, NONCE_CONTRIBUTION, SIGNATURE_AUTHORIZATION, SUBMIT_NONINCLUDED, SUBMIT_UPDATE, VALIDATION_ACK, } from '../messages/constants.js';
4
4
  import { ServiceCohortPhase } from '../phases.js';
5
5
  import { AggregationService } from '../service.js';
6
+ import { DEFAULT_FEE_ESTIMATOR } from '../../beacon/fee-estimator.js';
6
7
  import { TypedEventEmitter } from './typed-emitter.js';
7
8
  /** Default cadence for re-publishing COHORT_ADVERT until keygen completes: 60 seconds. */
8
9
  export const DEFAULT_ADVERT_REPEAT_INTERVAL_MS = 60_000;
@@ -30,8 +31,9 @@ export const DEFAULT_ADVERT_REPEAT_INTERVAL_MS = 60_000;
30
31
  * transport,
31
32
  * did: serviceDid,
32
33
  * keys: serviceKeys,
33
- * onProvideTxData: async ({ cohortId, beaconAddress, signalBytes }) => {
34
- * return await buildBeaconTransaction(beaconAddress, signalBytes, bitcoin);
34
+ * onProvideTxData: async ({ beaconAddress, signalBytes, feeEstimator }) => {
35
+ * // Forward feeEstimator so a dynamic rate injected at the runner is honored.
36
+ * return await buildBeaconTransaction(beaconAddress, signalBytes, bitcoin, feeEstimator);
35
37
  * },
36
38
  * });
37
39
  *
@@ -62,6 +64,7 @@ export class AggregationServiceRunner extends TypedEventEmitter {
62
64
  #onOptInReceived;
63
65
  #onReadyToFinalize;
64
66
  #onProvideTxData;
67
+ #feeEstimator;
65
68
  #cohortTtlMs;
66
69
  #phaseTimeoutMs;
67
70
  #advertRepeatIntervalMs;
@@ -86,6 +89,7 @@ export class AggregationServiceRunner extends TypedEventEmitter {
86
89
  finalize: acceptedCount >= minRequired,
87
90
  }));
88
91
  this.#onProvideTxData = options.onProvideTxData;
92
+ this.#feeEstimator = options.feeEstimator ?? DEFAULT_FEE_ESTIMATOR;
89
93
  this.#cohortTtlMs = options.cohortTtlMs;
90
94
  this.#phaseTimeoutMs = options.phaseTimeoutMs;
91
95
  this.#advertRepeatIntervalMs = options.advertRepeatIntervalMs ?? DEFAULT_ADVERT_REPEAT_INTERVAL_MS;
@@ -583,6 +587,7 @@ export class AggregationServiceRunner extends TypedEventEmitter {
583
587
  cohortId: ctx.cohortId,
584
588
  beaconAddress: cohort.beaconAddress,
585
589
  signalBytes: cohort.signalBytes,
590
+ feeEstimator: this.#feeEstimator,
586
591
  });
587
592
  const authMsgs = this.session.startSigning(ctx.cohortId, txData);
588
593
  const sessionId = this.session.getSigningSessionId(ctx.cohortId) ?? '';
@@ -1 +1 @@
1
- {"version":3,"file":"service-runner.js","sourceRoot":"","sources":["../../../../../src/core/aggregation/runner/service-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service-runner.js","sourceRoot":"","sources":["../../../../../src/core/aggregation/runner/service-runner.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,7 @@
1
1
  import { concatBytes, hexToBytes } from '@noble/hashes/utils.js';
2
2
  import { Address, OutScript, p2pkh, p2tr, p2wpkh, Script, SigHash, Transaction } from '@scure/btc-signer';
3
3
  import { BeaconError } from './error.js';
4
- import { StaticFeeEstimator } from './fee-estimator.js';
5
- /** Default fee estimator used when none is supplied. ~5 sat/vB static rate. */
6
- const DEFAULT_FEE_ESTIMATOR = new StaticFeeEstimator(5);
4
+ import { DEFAULT_FEE_ESTIMATOR } from './fee-estimator.js';
7
5
  /**
8
6
  * Conservative vsize estimate for a 1-input P2TR key-path to 1 P2TR change + 1 OP_RETURN(32) tx.
9
7
  * Stripped 137 + witness ≈ 68 (marker + flag + stack-count + sig-len + 64 BIP-340 sig).
@@ -29,6 +27,48 @@ export const SINGLETON_BEACON_TX_VSIZE = {
29
27
  p2wpkh: P2WPKH_BEACON_TX_VSIZE,
30
28
  p2tr: P2TR_BEACON_TX_VSIZE,
31
29
  };
30
+ /**
31
+ * Serialized size (vbytes) of a single change output, by script kind:
32
+ * 8 (value) + 1 (scriptPubKey length) + scriptPubKey bytes. P2PKH 25, P2WPKH 22,
33
+ * P2TR 34. These are non-witness bytes, so each contributes its full byte count to
34
+ * the transaction vsize. The {@link SINGLETON_BEACON_TX_VSIZE} constants bake in a
35
+ * same-kind change output; {@link beaconTxVsize} uses these deltas to re-size the
36
+ * fee when a caller routes change to an address of a different kind (ADR 044).
37
+ */
38
+ export const CHANGE_OUTPUT_VBYTES = {
39
+ p2pkh: 34,
40
+ p2wpkh: 31,
41
+ p2tr: 43,
42
+ };
43
+ /**
44
+ * Dust threshold (sats) below which a change output is not worth creating, by script
45
+ * kind (the standard Bitcoin Core dust relay thresholds at the default 3 sat/vB dust
46
+ * rate). When the change after fees falls below this, the builders omit the change
47
+ * output and let the remainder fall into the fee rather than emit an unspendable,
48
+ * relay-rejected dust output (ADR 044).
49
+ */
50
+ export const DUST_LIMIT_SATS = {
51
+ p2pkh: 546,
52
+ p2wpkh: 294,
53
+ p2tr: 330,
54
+ };
55
+ /**
56
+ * vsize (vbytes) for a beacon transaction that spends one input of `beaconKind`
57
+ * and returns change to an output of `changeKind`, plus the OP_RETURN(32) signal.
58
+ *
59
+ * When `changeKind === beaconKind` (the default, change to the beacon address) this
60
+ * returns the per-kind {@link SINGLETON_BEACON_TX_VSIZE} constant unchanged, so the
61
+ * default path and the constants' lock-in tests are byte-identical. A differing
62
+ * `changeKind` swaps the assumed same-kind change output for the actual one, keeping
63
+ * the result a valid upper bound. The aggregation key-path spend is the
64
+ * `beaconKind: 'p2tr'` case (its input is always the cohort's P2TR key path; only the
65
+ * change output varies), the analytical sizing ADR 045 calls for, computed without a
66
+ * secret.
67
+ */
68
+ export function beaconTxVsize(beaconKind, changeKind) {
69
+ const base = SINGLETON_BEACON_TX_VSIZE[beaconKind] - CHANGE_OUTPUT_VBYTES[beaconKind];
70
+ return base + CHANGE_OUTPUT_VBYTES[changeKind];
71
+ }
32
72
  /**
33
73
  * Detect the singleton script kind of a Bitcoin address (P2PKH / P2WPKH / P2TR).
34
74
  * The deterministic-DID document emits all three kinds; the broadcast path needs
@@ -58,6 +98,37 @@ export function deriveSingletonAddress(kind, pubkey, network) {
58
98
  // P2TR key-path: x-only internal key (drop the SEC prefix byte).
59
99
  return p2tr(pubkey.slice(1, 33), undefined, network).address;
60
100
  }
101
+ /**
102
+ * Resolve the change-output recipient for a beacon transaction. Returns the beacon
103
+ * address when no change address is supplied (preserving the prior behavior of
104
+ * returning change to the spent address), otherwise validates the caller-supplied
105
+ * address against the network and returns it. Validating here fails fast rather than
106
+ * burning a real UTXO on a transaction that breaks at broadcast (ADR 044).
107
+ */
108
+ export function resolveChangeAddress(beaconAddress, network, changeAddress) {
109
+ if (!changeAddress || changeAddress === beaconAddress)
110
+ return beaconAddress;
111
+ try {
112
+ Address(network).decode(changeAddress);
113
+ }
114
+ catch {
115
+ throw new BeaconError(`Invalid change address "${changeAddress}" for network "${network}".`, 'INVALID_CHANGE_ADDRESS', { changeAddress, network });
116
+ }
117
+ return changeAddress;
118
+ }
119
+ /**
120
+ * Detect the change output's script kind for fee sizing. A change address that is not
121
+ * one of the three singleton kinds (for example P2SH or P2WSH) is sized as P2TR, the
122
+ * largest standard change output, so the estimated fee stays a valid upper bound.
123
+ */
124
+ function changeOutputKind(changeAddress, network) {
125
+ try {
126
+ return detectSingletonScriptKind(changeAddress, network);
127
+ }
128
+ catch {
129
+ return 'p2tr';
130
+ }
131
+ }
61
132
  /**
62
133
  * Build an OP_RETURN script carrying a 32-byte beacon signal.
63
134
  * Exported as a utility so callers building txs outside SinglePartyBeacon (e.g., the aggregation
@@ -105,6 +176,7 @@ async function fetchSpendableUtxo(bitcoinAddress, bitcoin) {
105
176
  export async function buildAggregationBeaconTx(opts) {
106
177
  const feeEstimator = opts.feeEstimator ?? DEFAULT_FEE_ESTIMATOR;
107
178
  const { utxo, prevTxBytes } = await fetchSpendableUtxo(opts.beaconAddress, opts.bitcoin);
179
+ const changeAddress = resolveChangeAddress(opts.beaconAddress, opts.network, opts.changeAddress);
108
180
  // The funded beacon output is a Taproot script-tree output: key path is the
109
181
  // MuSig2 aggregate, script path is the k-of-n fallback + CSV recovery leaves
110
182
  // (see cohort.ts and ADR 042). Derive the witnessUtxo scriptPubKey from the
@@ -112,8 +184,11 @@ export async function buildAggregationBeaconTx(opts) {
112
184
  // would not match the script-tree UTXO on chain and would invalidate both the
113
185
  // key-path sighash and the fallback script-path sighash.
114
186
  const witnessScript = OutScript.encode(Address(opts.network).decode(opts.beaconAddress));
115
- // Fee cannot be probe-measured (no secret key for MuSig2 round). Use fixed P2TR vsize.
116
- const feeSats = await feeEstimator.estimateFee(P2TR_BEACON_TX_VSIZE);
187
+ // The fee cannot be probe-measured (no secret key until the downstream MuSig2
188
+ // round), so size it analytically. The input is the cohort's P2TR key path; only
189
+ // the change output's kind varies, so the vsize follows the change address (ADR 045).
190
+ const changeKind = changeOutputKind(changeAddress, opts.network);
191
+ const feeSats = await feeEstimator.estimateFee(beaconTxVsize('p2tr', changeKind));
117
192
  if (BigInt(utxo.value) <= feeSats) {
118
193
  throw new BeaconError(`UTXO value (${utxo.value}) insufficient to cover fee (${feeSats}).`, 'INSUFFICIENT_FUNDS', { address: opts.beaconAddress, valueSats: utxo.value, feeSats });
119
194
  }
@@ -128,13 +203,19 @@ export async function buildAggregationBeaconTx(opts) {
128
203
  witnessUtxo: { amount: BigInt(utxo.value), script: witnessScript },
129
204
  tapInternalKey: opts.internalPubkey,
130
205
  });
131
- tx.addOutputAddress(opts.beaconAddress, BigInt(utxo.value) - feeSats, opts.network);
206
+ // Change first (omitted when it would be dust, sweeping the remainder into the
207
+ // fee), then the OP_RETURN signal, which the spec requires to be the last output.
208
+ const changeValue = BigInt(utxo.value) - feeSats;
209
+ if (changeValue >= BigInt(DUST_LIMIT_SATS[changeKind])) {
210
+ tx.addOutputAddress(changeAddress, changeValue, opts.network);
211
+ }
132
212
  tx.addOutput({ script: opReturnScript(opts.signalBytes), amount: 0n });
133
213
  return {
134
214
  tx,
135
215
  prevOutScripts: [witnessScript],
136
216
  prevOutValues: [BigInt(utxo.value)],
137
217
  beaconAddress: opts.beaconAddress,
218
+ changeAddress,
138
219
  utxo,
139
220
  feeSats,
140
221
  scriptKind: 'p2tr',
@@ -252,6 +333,7 @@ export class SinglePartyBeacon {
252
333
  const { utxo, prevTxBytes } = await fetchSpendableUtxo(beaconAddress, bitcoin);
253
334
  const plan = await this.buildSinglePartyTx({
254
335
  signalBytes, beaconAddress, utxo, prevTxBytes, signer, bitcoin, feeEstimator,
336
+ changeAddress: options?.changeAddress,
255
337
  });
256
338
  const signedHex = await this.signSinglePartyTx(plan, signer);
257
339
  return this.broadcastRawTx(bitcoin, signedHex);
@@ -263,18 +345,21 @@ export class SinglePartyBeacon {
263
345
  * the input accordingly. Validates that the signer's pubkey produces the beacon
264
346
  * address under that script kind: without this check, a misconfigured caller
265
347
  * would burn a real UTXO on a tx that fails at broadcast. Fees are computed from
266
- * the per-kind {@link SINGLETON_BEACON_TX_VSIZE} constant, avoiding any probe-sign
267
- * round-trip.
348
+ * the per-kind {@link SINGLETON_BEACON_TX_VSIZE} constant (via {@link beaconTxVsize}),
349
+ * avoiding any probe-sign round-trip; a change address of a different kind re-sizes
350
+ * the fee by the change output's size delta so it stays a valid upper bound.
268
351
  */
269
352
  async buildSinglePartyTx(opts) {
270
353
  const network = opts.bitcoin.data;
271
354
  const pubkey = opts.signer.publicKey;
272
355
  const kind = detectSingletonScriptKind(opts.beaconAddress, network);
356
+ const changeAddress = resolveChangeAddress(opts.beaconAddress, network, opts.changeAddress);
273
357
  const derivedAddress = deriveSingletonAddress(kind, pubkey, network);
274
358
  if (derivedAddress !== opts.beaconAddress) {
275
359
  throw new BeaconError(`Signer pubkey produces ${kind.toUpperCase()} address "${derivedAddress}", but beacon address is "${opts.beaconAddress}".`, 'SIGNER_KEY_MISMATCH', { kind, address: opts.beaconAddress, derivedAddress });
276
360
  }
277
- const feeSats = await opts.feeEstimator.estimateFee(SINGLETON_BEACON_TX_VSIZE[kind]);
361
+ const changeKind = changeOutputKind(changeAddress, network);
362
+ const feeSats = await opts.feeEstimator.estimateFee(beaconTxVsize(kind, changeKind));
278
363
  const amount = BigInt(opts.utxo.value);
279
364
  if (amount <= feeSats) {
280
365
  throw new BeaconError(`UTXO value (${opts.utxo.value}) insufficient to cover fee (${feeSats}).`, 'INSUFFICIENT_FUNDS', { address: opts.beaconAddress, valueSats: opts.utxo.value, feeSats });
@@ -315,13 +400,19 @@ export class SinglePartyBeacon {
315
400
  tapInternalKey: internalKey,
316
401
  });
317
402
  }
318
- tx.addOutputAddress(opts.beaconAddress, amount - feeSats, network);
403
+ // Change first (omitted when it would be dust, sweeping the remainder into the
404
+ // fee), then the OP_RETURN signal, which the spec requires to be the last output.
405
+ const changeValue = amount - feeSats;
406
+ if (changeValue >= BigInt(DUST_LIMIT_SATS[changeKind])) {
407
+ tx.addOutputAddress(changeAddress, changeValue, network);
408
+ }
319
409
  tx.addOutput({ script: opReturnScript(opts.signalBytes), amount: 0n });
320
410
  return {
321
411
  tx,
322
412
  prevOutScripts: [prevOutScript],
323
413
  prevOutValues: [amount],
324
414
  beaconAddress: opts.beaconAddress,
415
+ changeAddress,
325
416
  utxo: opts.utxo,
326
417
  feeSats,
327
418
  scriptKind: kind,