mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2025-12-17 14:04:26 +01:00
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:
@@ -4,6 +4,7 @@ using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Net.Mime;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using BTCPayServer.Abstractions.Constants;
|
||||
@@ -1289,6 +1290,9 @@ namespace BTCPayServer.Controllers
|
||||
ChangeAddress = psbtResponse.ChangeAddress?.ToString(),
|
||||
PSBT = psbt.ToHex()
|
||||
};
|
||||
|
||||
if (!psbt.IsReadyToSign() && command == "sign")
|
||||
command = "analyze-psbt";
|
||||
switch (command)
|
||||
{
|
||||
case "createpending":
|
||||
@@ -1512,9 +1516,9 @@ namespace BTCPayServer.Controllers
|
||||
|
||||
var psbt = PSBT.Parse(viewModel.SigningContext.PSBT, network.NBitcoinNetwork);
|
||||
|
||||
if (!psbt.IsReadyToSign())
|
||||
if (!psbt.IsReadyToSign(out var errors))
|
||||
{
|
||||
ModelState.AddModelError(nameof(viewModel.SigningContext.PSBT), "PSBT is not ready to be signed");
|
||||
ModelState.AddModelError(nameof(viewModel.SigningContext.PSBT), BuildErrorMessage(errors));
|
||||
}
|
||||
|
||||
if (!ModelState.IsValid)
|
||||
@@ -1580,6 +1584,27 @@ namespace BTCPayServer.Controllers
|
||||
});
|
||||
}
|
||||
|
||||
private static string BuildErrorMessage(PSBTError[] errors)
|
||||
{
|
||||
StringBuilder errorMessage = new();
|
||||
errorMessage.Append("PSBT is not ready to be signed.");
|
||||
if (errors.Length == 1)
|
||||
{
|
||||
errorMessage.Append($" ({errors[0]})");
|
||||
}
|
||||
else
|
||||
{
|
||||
errorMessage.AppendLine();
|
||||
foreach (var error in errors.Take(5))
|
||||
{
|
||||
errorMessage.AppendLine(error.ToString());
|
||||
}
|
||||
}
|
||||
if (errors.Length > 5)
|
||||
errorMessage.Append($"{errors.Length - 5} more errors...");
|
||||
return errorMessage.ToString();
|
||||
}
|
||||
|
||||
private WalletPSBTReadyViewModel.StringAmounts ValueToString(Money v, BTCPayNetworkBase network,
|
||||
FiatRate? rate) =>
|
||||
new(
|
||||
|
||||
Reference in New Issue
Block a user