diff --git a/Plugins/BTCPayServer.Plugins.Wabisabi/Views/Shared/Wabisabi/WabisabiDashboard.cshtml b/Plugins/BTCPayServer.Plugins.Wabisabi/Views/Shared/Wabisabi/WabisabiDashboard.cshtml
index 09dfe39..694fa14 100644
--- a/Plugins/BTCPayServer.Plugins.Wabisabi/Views/Shared/Wabisabi/WabisabiDashboard.cshtml
+++ b/Plugins/BTCPayServer.Plugins.Wabisabi/Views/Shared/Wabisabi/WabisabiDashboard.cshtml
@@ -1,15 +1,13 @@
@using BTCPayServer.Abstractions.Contracts
-@using BTCPayServer.Client
-@using BTCPayServer.Client.Models
@using BTCPayServer.Common
@using BTCPayServer.Plugins.Wabisabi
-@using BTCPayServer.Security
-@using Microsoft.AspNetCore.Mvc.TagHelpers
@using NBitcoin
-@using WalletWasabi.Blockchain.Analysis
+@using WalletWasabi.Extensions
+@using WalletWasabi.WabiSabi.Backend.Rounds
+@using WalletWasabi.WabiSabi.Client
+@using WalletWasabi.WabiSabi.Models
@model object
@inject IScopeProvider ScopeProvider
-@inject BTCPayServerClient Client
@inject WabisabiService WabisabiService;
@inject WalletProvider WalletProvider;
@inject WabisabiCoordinatorClientInstanceManager WabisabiCoordinatorClientInstanceManager
@@ -22,12 +20,6 @@
{
return;
}
-
- @if (!(await ExplorerClientProvider.GetExplorerClient("BTC").GetStatusAsync()).IsFullySynched)
- {
- available = false;
- return;
- }
var storeId = ScopeProvider.GetCurrentStoreId();
}
@@ -57,7 +49,7 @@
}
else
{
-
-
+
Enabled coordinators
@{
@@ -282,42 +274,172 @@
{
continue;
}
-
-
@coordinator.CoordinatorDisplayName
-
-
- @coordinator.Coordinator
-
- @if (!coordinator.WasabiCoordinatorStatusFetcher.Connected)
+ RoundState currentRound = null;
+ CoinJoinTracker tracker = null;
+ if (coordinator.CoinJoinManager.TrackedCoinJoins?.TryGetValue(wallet.WalletName, out tracker) is true &&
+ tracker?.CoinJoinClient?.CurrentRoundId is { } &&
+ tracker?.CoinJoinClient?.RoundStatusUpdater?.RoundStates?.TryGetValue(tracker?.CoinJoinClient?.CurrentRoundId, out currentRound) is true)
+ {
+ }
+ var statusMsg = coordinator.WasabiCoordinatorStatusFetcher.Connected ? $"Connected to {(coordinator.Coordinator?.ToString() ?? "local")}" : $"Not connected to {(coordinator.Coordinator?.ToString() ?? "local")}";
+
+
+
+
+
@coordinator.CoordinatorDisplayName
+
+ @if(currentRound is not null)
{
-
Not connected
- }
- else
+
+
+
+
+ Mixing
+
+
+ }else if( coordinator.WasabiCoordinatorStatusFetcher.Connected)
{
-
Connected
+
+
Idle
}
@{
-
if (coordinator.CoinPrison is not null)
{
-
- var bannedCoins = coins.Where(coin => coordinator.CoinPrison.TryGetOrRemoveBannedCoin(coin.Outpoint, out _));
+ var bannedCoins = coins.Where(coin => coordinator.CoinPrison.TryGetOrRemoveBannedCoin(coin.Outpoint, out _));
@if (bannedCoins.Any())
{
-
-
Coins currently banned (for disrupting rounds)
-
-
@bannedCoins.Count()
-
-
-
+
@bannedCoins.Count() banned coins(for disrupting rounds)
}
}
+
+
+ if (currentRound is not null)
+ {
+
+
+
+ | Status |
+ @currentRound.Phase.ToString().ToSentenceCase() |
+
+ | Round id |
+ @currentRound.Id.ToString() |
+
+
+ | Mining feerate |
+ @currentRound.CoinjoinState.Parameters.MiningFeeRate.ToString() |
+
+
+ | Coinjoin total inputs |
+ @currentRound.CoinjoinState.Inputs.Count() inputs (@currentRound.CoinjoinState.Inputs.Sum(coin => coin.Amount.ToDecimal(MoneyUnit.BTC)) BTC) |
+
+ @if (!tracker.CoinJoinClient.CoinsToRegister.IsEmpty)
+ {
+
+ | Your inputs |
+
+ Registered @tracker.CoinJoinClient.CoinsInCriticalPhase.Count() inputs (@tracker.CoinJoinClient.CoinsInCriticalPhase.Sum(coin => coin.Amount.ToDecimal(MoneyUnit.BTC)) BTC) / @tracker.CoinJoinClient.CoinsToRegister.Count() inputs (@tracker.CoinJoinClient.CoinsToRegister.Sum(coin => coin.Amount.ToDecimal(MoneyUnit.BTC)) BTC)
+ @if (tracker.BannedCoins.Any())
+ {
+ but got @tracker.BannedCoins.Count() inputs (@tracker.BannedCoins.Sum(coin => coin.Coin.Amount.ToDecimal(MoneyUnit.BTC)) BTC) banned
+ }
+ |
+
+ }
+
+ @if (currentRound.Phase >= Phase.OutputRegistration)
+ {
+
+ | Coinjoin total outputs |
+ @currentRound.CoinjoinState.Outputs.Count() outputs (@currentRound.CoinjoinState.Outputs.Sum(coin => coin.Value.ToDecimal(MoneyUnit.BTC)) BTC) |
+
+ if (tracker.CoinJoinClient.OutputTxOuts is { } outputs)
+ {
+
+ | Your outputs |
+ @outputs.outputTxOuts.Count() outputs (@outputs.outputTxOuts.Sum(coin => coin.Value.ToDecimal(MoneyUnit.BTC)) BTC, @outputs.batchedPayments.Count() batched payments) |
+
+ }
+ }
+
+
+
+
+ @*
*@
+ @* *@
+ @*
*@
+ @* *@
+ @*
- *@
+ @* Status *@
+ @*
*@
+ @* - *@
+ @* @currentRound.Phase.ToString().ToSentenceCase() *@
+ @*
*@
+ @* *@
+ @* *@
+ @*
- *@
+ @* Round ID *@
+ @*
*@
+ @* - *@
+ @* @currentRound.Id.ToString() *@
+ @*
*@
+ @* *@
+ @* *@
+ @*
- *@
+ @* Mining feerate *@
+ @*
*@
+ @* - *@
+ @* @currentRound.CoinjoinState.Parameters.MiningFeeRate.ToString() *@
+ @*
*@
+ @* *@
+ @* *@
+ @*
- *@
+ @* Coinjoin total inputs *@
+ @*
*@
+ @* - *@
+ @* @currentRound.CoinjoinState.Inputs.Count() inputs (@currentRound.CoinjoinState.Inputs.Sum(coin => coin.Amount.ToDecimal(MoneyUnit.BTC)) BTC) *@
+ @*
*@
+ @* *@
+ @* *@
+ @* *@
+ @* @if (!tracker.CoinJoinClient.CoinsToRegister.IsEmpty) *@
+ @* { *@
+ @* *@
+ @*
- Your inputs
*@
+ @* - *@
+ @* Registered @tracker.CoinJoinClient.CoinsInCriticalPhase.Count() inputs (@tracker.CoinJoinClient.CoinsInCriticalPhase.Sum(coin => coin.Amount.ToDecimal(MoneyUnit.BTC)) BTC) / @tracker.CoinJoinClient.CoinsToRegister.Count() inputs (@tracker.CoinJoinClient.CoinsToRegister.Sum(coin => coin.Amount.ToDecimal(MoneyUnit.BTC)) BTC) *@
+ @* @if (tracker.BannedCoins.Any()) *@
+ @* { *@
+ @* but got @tracker.BannedCoins.Count() inputs (@tracker.BannedCoins.Sum(coin => coin.Coin.Amount.ToDecimal(MoneyUnit.BTC)) BTC) banned *@
+ @* } *@
+ @*
*@
+ @* *@
+ @* } *@
+ @* *@
+ @* @if (currentRound.Phase >= Phase.OutputRegistration) *@
+ @* { *@
+ @* *@
+ @*
- Coinjoin total outputs
*@
+ @* - *@
+ @* @currentRound.CoinjoinState.Outputs.Count() outputs (@currentRound.CoinjoinState.Outputs.Sum(coin => coin.Value.ToDecimal(MoneyUnit.BTC)) BTC) *@
+ @*
*@
+ @* *@
+ @* if (tracker.CoinJoinClient.OutputTxOuts is { } outputs) *@
+ @* { *@
+ @* *@
+ @*
- >Your outputs
*@
+ @* - *@
+ @* @outputs.outputTxOuts.Count() outputs (@outputs.outputTxOuts.Sum(coin => coin.Value.ToDecimal(MoneyUnit.BTC)) BTC, @outputs.batchedPayments.Count() batched payments) *@
+ @*
*@
+ @* *@
+ @* } *@
+ @* } *@
+ @*
*@
+ @* *@
+ @*
*@
+ }
}
-
-
}
}
@@ -326,8 +448,6 @@
-
-
}
diff --git a/Plugins/BTCPayServer.Plugins.Wabisabi/Views/WabisabiCoordinatorConfig/UpdateWabisabiSettings.cshtml b/Plugins/BTCPayServer.Plugins.Wabisabi/Views/WabisabiCoordinatorConfig/UpdateWabisabiSettings.cshtml
index 82f184e..655187e 100644
--- a/Plugins/BTCPayServer.Plugins.Wabisabi/Views/WabisabiCoordinatorConfig/UpdateWabisabiSettings.cshtml
+++ b/Plugins/BTCPayServer.Plugins.Wabisabi/Views/WabisabiCoordinatorConfig/UpdateWabisabiSettings.cshtml
@@ -1,5 +1,4 @@
-@using WalletWasabi.Backend.Controllers
@using BTCPayServer.Plugins.Wabisabi
@model WalletWasabi.Backend.Controllers.WabisabiCoordinatorSettings
@@ -8,9 +7,19 @@
ViewData["NavPartialName"] = "../UIServer/_Nav";
}
-
Coinjoin coordinator configuration