Better error message on invalid PSBT in Sign with Seed (#6920)

* Better error message on invalid PSBT in Sign with Seed

* Improve error reporting if a PSBT built by SendWallet is not signable
This commit is contained in:
Nicolas Dorier
2025-09-18 10:49:54 +09:00
committed by GitHub
parent 790616d2a6
commit fa29176a9c
2 changed files with 47 additions and 9 deletions

View File

@@ -86,6 +86,7 @@ namespace BTCPayServer.Controllers
BackUrl = vm.BackUrl
});
}
switch (command)
{
case "vault":
@@ -170,6 +171,7 @@ namespace BTCPayServer.Controllers
{
return View("WalletPSBT", vm);
}
switch (command)
{
case "createpending":
@@ -373,14 +375,25 @@ namespace BTCPayServer.Controllers
vm.FeeRate = feeRate.ToString();
}
var sanityErrors = psbtObject.CheckSanity();
if (sanityErrors.Count != 0)
if (!psbtObject.IsAllFinalized())
{
vm.SetErrors(sanityErrors);
}
else if (!psbtObject.IsAllFinalized() && !psbtObject.TryFinalize(out var errors))
{
vm.SetErrors(errors);
var sanityErrors = new List<PSBTError>();
foreach (var input in psbtObject.Inputs)
{
if (input.IsFinalized())
continue;
if (input.GetSignableCoin(out var missingCoin) is null)
{
sanityErrors.Add(new PSBTError(input.Index, missingCoin));
}
else if (!input.TryFinalizeInput(out var err))
{
sanityErrors.Add(err[0]);
}
}
if (sanityErrors.Count > 0)
vm.SetErrors(sanityErrors);
}
var combinedTypeIds = inputToObjects.Values.SelectMany(ids => ids).Concat(outputToObjects.Values)