theseus/bundled-addons/bchwallet/lib/dgb/psbt/sign.js
Local Dev 4c63ae1bc7 feat(theseus/aegis): DGB adapter on @dgb-wallet/{core,psbt} vendored packages
Aegis now shares its DGB code with the standalone DigiByte web-wallet at
D:\Dev\SilentCode\Digibyte. Address derivation and PSBT construction come
from that project's @dgb-wallet/core and @dgb-wallet/psbt packages instead
of Aegis-local reimplementations. Any bugfix upstream flows in via a
re-vendor of dist/*.

- lib/dgb/{core,psbt}/ — vendored dist/ output of the two packages plus
  a tiny package.json shim marking them as ESM. @dgb-wallet/core's own
  import specifier "@dgb-wallet/core" inside psbt/*.js is rewritten to
  "../core/index.js" so the sibling module resolves without a workspace.
- New Theseus deps: bitcoinjs-lib, bip32, bip39, @bitcoinerlab/secp256k1,
  ecpair — the peer deps the vendored packages need. Loaded via
  api.require in index.js's loadDeps().
- chain-dgb.js is a thin adapter now: BIP32 tree via bip32 + DGB
  Network object, addresses via core.p2wpkhAddress, tx via
  psbt.buildPsbt + PSBT.signInput (per-input, since each UTXO's key
  differs) + psbt.finalizeAndExtract. Runtime backend stays the same —
  Theseus's lib/electrum.js against the DGB ElectrumX pool.
- Verified end-to-end in scratchpad: abandon×11 mnemonic derives
  dgb1q9gmf0pv8jdymcly6lz6fl7lf6mhslsd72e2jq8 (matches iancoleman.io/bip39
  and the previous inline implementation, so no on-chain address change
  for anyone who was already using Aegis's DGB slot). PSBT build+sign+
  finalize on a mock UTXO produces a valid 223-byte witness tx.

BIP44 (D…) and BIP49 (S…) address families are implemented in the
vendored core but not yet exposed in Aegis's picker — the panel needs
an "address family" selector inside the DGB settings block first. Left
for a follow-up; today's DGB pick uses BIP84 native SegWit only.
2026-09-07 02:19:44 +02:00

25 lines
No EOL
1,022 B
JavaScript

// Sign every input of a PSBT with the given key. Fails loudly if any
// input can't be signed by this key (rather than silently leaving it
// unsigned), so callers notice before broadcasting a half-signed tx.
export function signAllInputs(psbt, keyPair) {
psbt.signAllInputs(keyPair);
return psbt;
}
// After all inputs are signed by all necessary parties, finalize and
// extract the network-ready hex-encoded transaction.
export function finalizeAndExtract(psbt) {
psbt.finalizeAllInputs();
const tx = psbt.extractTransaction();
return { hex: tx.toHex(), txid: tx.getId() };
}
// Fee computed from the difference between total input value and total
// output value. Requires all inputs to have witnessUtxo or
// nonWitnessUtxo populated (which `buildPsbt` in this package
// guarantees when the caller populates Utxo.value fields).
export function feeSats(psbt) {
return psbt.getFee();
}
export function feeRateSatsPerByte(psbt) {
return psbt.getFeeRate();
}
//# sourceMappingURL=sign.js.map