mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2025-12-17 22:14:26 +01:00
Add utility tool to decode PSBT
This commit is contained in:
@@ -182,6 +182,9 @@
|
|||||||
<Content Update="Views\Wallets\ListWallets.cshtml">
|
<Content Update="Views\Wallets\ListWallets.cshtml">
|
||||||
<Pack>$(IncludeRazorContentInPack)</Pack>
|
<Pack>$(IncludeRazorContentInPack)</Pack>
|
||||||
</Content>
|
</Content>
|
||||||
|
<Content Update="Views\Wallets\WalletPSBT.cshtml">
|
||||||
|
<Pack>$(IncludeRazorContentInPack)</Pack>
|
||||||
|
</Content>
|
||||||
<Content Update="Views\Wallets\WalletRescan.cshtml">
|
<Content Update="Views\Wallets\WalletRescan.cshtml">
|
||||||
<Pack>$(IncludeRazorContentInPack)</Pack>
|
<Pack>$(IncludeRazorContentInPack)</Pack>
|
||||||
</Content>
|
</Content>
|
||||||
|
|||||||
@@ -247,6 +247,12 @@ namespace BTCPayServer.Controllers
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var psbt = await CreatePSBT(network, derivationScheme, sendModel, cancellation);
|
var psbt = await CreatePSBT(network, derivationScheme, sendModel, cancellation);
|
||||||
|
if (command == "analyze-psbt")
|
||||||
|
return View(nameof(WalletPSBT), new WalletPSBTViewModel()
|
||||||
|
{
|
||||||
|
Decoded = psbt.PSBT.ToString(),
|
||||||
|
PSBT = psbt.PSBT.ToBase64()
|
||||||
|
});
|
||||||
return File(psbt.PSBT.ToBytes(), "application/octet-stream", $"Send-{vm.Amount.Value}-{network.CryptoCode}-to-{destination[0].ToString()}.psbt");
|
return File(psbt.PSBT.ToBytes(), "application/octet-stream", $"Send-{vm.Amount.Value}-{network.CryptoCode}-to-{destination[0].ToString()}.psbt");
|
||||||
}
|
}
|
||||||
catch (NBXplorerException ex)
|
catch (NBXplorerException ex)
|
||||||
@@ -331,6 +337,31 @@ namespace BTCPayServer.Controllers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("{walletId}/psbt")]
|
||||||
|
public IActionResult WalletPSBT()
|
||||||
|
{
|
||||||
|
return View(new WalletPSBTViewModel());
|
||||||
|
}
|
||||||
|
[HttpPost]
|
||||||
|
[Route("{walletId}/psbt")]
|
||||||
|
public IActionResult WalletPSBT(
|
||||||
|
[ModelBinder(typeof(WalletIdModelBinder))]
|
||||||
|
WalletId walletId,
|
||||||
|
WalletPSBTViewModel vm)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(vm.PSBT))
|
||||||
|
vm.Decoded = PSBT.Parse(vm.PSBT, NetworkProvider.GetNetwork(walletId.CryptoCode).NBitcoinNetwork).ToString();
|
||||||
|
}
|
||||||
|
catch (FormatException ex)
|
||||||
|
{
|
||||||
|
ModelState.AddModelError(nameof(vm.PSBT), ex.Message);
|
||||||
|
}
|
||||||
|
return View(vm);
|
||||||
|
}
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[Route("{walletId}/rescan")]
|
[Route("{walletId}/rescan")]
|
||||||
public async Task<IActionResult> WalletRescan(
|
public async Task<IActionResult> WalletRescan(
|
||||||
|
|||||||
13
BTCPayServer/Models/WalletViewModels/WalletPSBTViewModel.cs
Normal file
13
BTCPayServer/Models/WalletViewModels/WalletPSBTViewModel.cs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace BTCPayServer.Models.WalletViewModels
|
||||||
|
{
|
||||||
|
public class WalletPSBTViewModel
|
||||||
|
{
|
||||||
|
public string Decoded { get; set; }
|
||||||
|
public string PSBT { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
29
BTCPayServer/Views/Wallets/WalletPSBT.cshtml
Normal file
29
BTCPayServer/Views/Wallets/WalletPSBT.cshtml
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
@model WalletPSBTViewModel
|
||||||
|
@{
|
||||||
|
Layout = "../Shared/_NavLayout.cshtml";
|
||||||
|
ViewData["Title"] = "PSBT";
|
||||||
|
ViewData.SetActivePageAndTitle(WalletsNavPages.PSBT);
|
||||||
|
}
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-10">
|
||||||
|
@if (!string.IsNullOrEmpty(Model.Decoded))
|
||||||
|
{
|
||||||
|
<h3>Decoded PSBT</h3>
|
||||||
|
<pre><code class="json">@Model.Decoded</code></pre>
|
||||||
|
}
|
||||||
|
<h3>PSBT to decode</h3>
|
||||||
|
<form class="form-group" method="post" asp-action="WalletPSBT">
|
||||||
|
<div class="form-group">
|
||||||
|
<textarea class="form-control" rows="5" asp-for="PSBT"></textarea>
|
||||||
|
<span asp-validation-for="PSBT" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-primary">Decode</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@section Scripts {
|
||||||
|
<link rel="stylesheet" href="~/vendor/highlightjs/default.min.css">
|
||||||
|
<script src="~/vendor/highlightjs/highlight.min.js"></script>
|
||||||
|
<script>hljs.initHighlightingOnLoad();</script>
|
||||||
|
}
|
||||||
@@ -90,6 +90,7 @@
|
|||||||
<div class="dropdown-menu" aria-labelledby="SendMenu">
|
<div class="dropdown-menu" aria-labelledby="SendMenu">
|
||||||
<button name="command" type="submit" class="dropdown-item" value="ledger">... your Ledger Wallet device</button>
|
<button name="command" type="submit" class="dropdown-item" value="ledger">... your Ledger Wallet device</button>
|
||||||
<button name="command" type="submit" class="dropdown-item" value="save-psbt">... a wallet supporting PSBT</button>
|
<button name="command" type="submit" class="dropdown-item" value="save-psbt">... a wallet supporting PSBT</button>
|
||||||
|
<button name="command" type="submit" class="dropdown-item" value="analyze-psbt">... analyze the PSBT</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ namespace BTCPayServer.Views.Wallets
|
|||||||
{
|
{
|
||||||
Send,
|
Send,
|
||||||
Transactions,
|
Transactions,
|
||||||
Rescan
|
Rescan,
|
||||||
|
PSBT
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,5 +4,6 @@
|
|||||||
<a class="nav-link @ViewData.IsActivePage(WalletsNavPages.Transactions)" asp-action="WalletTransactions">Transactions</a>
|
<a class="nav-link @ViewData.IsActivePage(WalletsNavPages.Transactions)" asp-action="WalletTransactions">Transactions</a>
|
||||||
<a class="nav-link @ViewData.IsActivePage(WalletsNavPages.Send)" asp-action="WalletSend">Send</a>
|
<a class="nav-link @ViewData.IsActivePage(WalletsNavPages.Send)" asp-action="WalletSend">Send</a>
|
||||||
<a class="nav-link @ViewData.IsActivePage(WalletsNavPages.Rescan)" asp-action="WalletRescan">Rescan</a>
|
<a class="nav-link @ViewData.IsActivePage(WalletsNavPages.Rescan)" asp-action="WalletRescan">Rescan</a>
|
||||||
|
<a class="nav-link @ViewData.IsActivePage(WalletsNavPages.PSBT)" asp-action="WalletPSBT">PSBT</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user