From 97383a4e354dabe28c3dd6e056a1dcc19e2d3346 Mon Sep 17 00:00:00 2001 From: Craig Raw Date: Fri, 15 May 2026 09:35:29 +0200 Subject: [PATCH] restrict to required sighash types when sending sp outputs --- drongo | 2 +- .../sparrow/transaction/HeadersController.java | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/drongo b/drongo index e4b63fbd..7df781c7 160000 --- a/drongo +++ b/drongo @@ -1 +1 @@ -Subproject commit e4b63fbd19e9df6daf749bae02c5e02523c64ce4 +Subproject commit 7df781c77c6aabf8464cb4eb6fc49cfda0f3c6c0 diff --git a/src/main/java/com/sparrowwallet/sparrow/transaction/HeadersController.java b/src/main/java/com/sparrowwallet/sparrow/transaction/HeadersController.java index c771cd45..2c1460cb 100644 --- a/src/main/java/com/sparrowwallet/sparrow/transaction/HeadersController.java +++ b/src/main/java/com/sparrowwallet/sparrow/transaction/HeadersController.java @@ -532,8 +532,10 @@ public class HeadersController extends TransactionFormController implements Init noWalletsWarningLink.visibleProperty().bind(noWalletsWarning.visibleProperty()); boolean taprootInput = psbt.getPsbtInputs().stream().anyMatch(PSBTInput::isTaproot); - SigHash psbtSigHash = psbt.getPsbtInputs().stream().map(PSBTInput::getSigHash).filter(Objects::nonNull).findFirst().orElse(taprootInput ? SigHash.DEFAULT : SigHash.ALL); - sigHash.setItems(FXCollections.observableList(taprootInput ? SigHash.TAPROOT_SIGNING_TYPES : SigHash.LEGACY_SIGNING_TYPES)); + boolean silentPaymentOutput = psbt.getPsbtOutputs().stream().anyMatch(o -> o.getSilentPaymentAddress() != null); + SigHash requiredSigHash = taprootInput ? SigHash.DEFAULT : SigHash.ALL; + SigHash psbtSigHash = silentPaymentOutput ? requiredSigHash : psbt.getPsbtInputs().stream().map(PSBTInput::getSigHash).filter(Objects::nonNull).findFirst().orElse(requiredSigHash); + sigHash.setItems(FXCollections.observableList(silentPaymentOutput ? List.of(requiredSigHash) : (taprootInput ? SigHash.TAPROOT_SIGNING_TYPES : SigHash.LEGACY_SIGNING_TYPES))); sigHash.setValue(psbtSigHash); sigHash.setConverter(new StringConverter<>() { @Override @@ -542,7 +544,8 @@ public class HeadersController extends TransactionFormController implements Init return ""; } - return sigHash.getName() + ((taprootInput && sigHash == SigHash.DEFAULT) || (!taprootInput && sigHash == SigHash.ALL) ? " (Recommended)" : ""); + boolean recommended = (taprootInput && sigHash == SigHash.DEFAULT) || (!taprootInput && sigHash == SigHash.ALL); + return sigHash.getName() + (recommended ? (silentPaymentOutput ? " (Required)" : " (Recommended)") : ""); } @Override