diff --git a/src/Angor.Avalonia.sln b/src/Angor.Avalonia.sln
index f8cb6c45..e5ea45fe 100644
--- a/src/Angor.Avalonia.sln
+++ b/src/Angor.Avalonia.sln
@@ -12,7 +12,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
Angor\Avalonia\Directory.Packages.props = Angor\Avalonia\Directory.Packages.props
EndProjectSection
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AngorApp.Model", "AngorApp.Model\AngorApp.Model.csproj", "{5FEB5D7F-A9B3-47C7-B343-0126B90888E6}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AngorApp.Model", "Angor\Avalonia\AngorApp.Model\AngorApp.Model.csproj", "{AD095B93-61C9-46AF-9EB5-403D1C9EB29E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -28,10 +28,10 @@ Global
{B0BFAC0F-9F74-4770-9B12-A3A478DB0A71}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B0BFAC0F-9F74-4770-9B12-A3A478DB0A71}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B0BFAC0F-9F74-4770-9B12-A3A478DB0A71}.Release|Any CPU.Build.0 = Release|Any CPU
- {5FEB5D7F-A9B3-47C7-B343-0126B90888E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {5FEB5D7F-A9B3-47C7-B343-0126B90888E6}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {5FEB5D7F-A9B3-47C7-B343-0126B90888E6}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {5FEB5D7F-A9B3-47C7-B343-0126B90888E6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AD095B93-61C9-46AF-9EB5-403D1C9EB29E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AD095B93-61C9-46AF-9EB5-403D1C9EB29E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AD095B93-61C9-46AF-9EB5-403D1C9EB29E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AD095B93-61C9-46AF-9EB5-403D1C9EB29E}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/src/AngorApp.Model/AngorApp.Model.csproj b/src/Angor/Avalonia/AngorApp.Model/AngorApp.Model.csproj
similarity index 76%
rename from src/AngorApp.Model/AngorApp.Model.csproj
rename to src/Angor/Avalonia/AngorApp.Model/AngorApp.Model.csproj
index c30299db..3c992aa0 100644
--- a/src/AngorApp.Model/AngorApp.Model.csproj
+++ b/src/Angor/Avalonia/AngorApp.Model/AngorApp.Model.csproj
@@ -7,7 +7,7 @@
-
+
diff --git a/src/Angor/Avalonia/AngorApp.Model/BitcoinAddressValidator.cs b/src/Angor/Avalonia/AngorApp.Model/BitcoinAddressValidator.cs
new file mode 100644
index 00000000..fb8da982
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp.Model/BitcoinAddressValidator.cs
@@ -0,0 +1,269 @@
+namespace AngorApp.Model;
+
+using System.Numerics;
+using System.Security.Cryptography;
+
+public class BitcoinAddressValidator
+{
+ public enum BitcoinAddressType
+ {
+ Unknown,
+ P2PKH, // Pay to Public Key Hash (Legacy)
+ P2SH, // Pay to Script Hash (Legacy)
+ P2WPKH, // Pay to Witness Public Key Hash (Native SegWit)
+ P2WSH // Pay to Witness Script Hash (Native SegWit)
+ }
+
+ private static readonly string Base58Alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
+ private static readonly string Bech32Alphabet = "qpzry9x8gf2tvdw0s3jn54khce6mua7l";
+
+ public static ValidationResult ValidateBitcoinAddress(string address, BitcoinNetwork expectedNetwork)
+ {
+ if (string.IsNullOrEmpty(address))
+ {
+ return new ValidationResult(false, "Address cannot be empty");
+ }
+
+ // Check if it's a Bech32 address
+ if (address.StartsWith("bc1") || address.StartsWith("tb1"))
+ {
+ return ValidateBech32Address(address, expectedNetwork);
+ }
+
+ // Legacy or P2SH address validation
+ return ValidateLegacyAddress(address, expectedNetwork);
+ }
+
+ private static ValidationResult ValidateLegacyAddress(string address, BitcoinNetwork expectedNetwork)
+ {
+ // Validate length for legacy addresses
+ if (address.Length < 26 || address.Length > 35)
+ {
+ return new ValidationResult(false, "Invalid legacy address length");
+ }
+
+ // Validate characters
+ var invalidChars = address.Where(c => !Base58Alphabet.Contains(c)).ToList();
+ if (invalidChars.Any())
+ {
+ return new ValidationResult(false,
+ $"Invalid characters in address: {string.Join(", ", invalidChars)}");
+ }
+
+ try
+ {
+ // Decode Base58
+ var decoded = Base58Decode(address);
+
+ // Validate decoded length
+ if (decoded.Length != 25)
+ {
+ return new ValidationResult(false,
+ $"Invalid decoded length: {decoded.Length} bytes (expected 25 bytes)");
+ }
+
+ // Separate components
+ var withoutChecksum = decoded.Take(21).ToArray();
+ var checksum = decoded.Skip(21).Take(4).ToArray();
+
+ // Calculate checksum
+ var calculatedChecksum = CalculateChecksum(withoutChecksum);
+
+ // Compare checksums
+ if (!checksum.SequenceEqual(calculatedChecksum))
+ {
+ return new ValidationResult(false, "Invalid checksum");
+ }
+
+ // Identify version and network
+ var version = decoded[0];
+ var (detectedNetwork, addressType) = DetermineNetworkAndType(version);
+
+ if (detectedNetwork == BitcoinNetwork.Unknown)
+ {
+ return new ValidationResult(false,
+ $"Unrecognized version byte: 0x{version:X2}",
+ detectedNetwork,
+ addressType);
+ }
+
+ // Validate network
+ if (expectedNetwork != detectedNetwork)
+ {
+ return new ValidationResult(false,
+ $"Address belongs to network {detectedNetwork} but expected {expectedNetwork}",
+ detectedNetwork,
+ addressType);
+ }
+
+ return new ValidationResult(true, "Valid address", detectedNetwork, addressType);
+ }
+ catch (Exception ex)
+ {
+ return new ValidationResult(false, $"Error processing address: {ex.Message}");
+ }
+ }
+
+ private static ValidationResult ValidateBech32Address(string address, BitcoinNetwork expectedNetwork)
+ {
+ try
+ {
+ // Basic Bech32 validation
+ if (address.Length < 14 || address.Length > 74)
+ {
+ return new ValidationResult(false, "Invalid Bech32 address length");
+ }
+
+ // Validate characters
+ var invalidChars = address.ToLower()
+ .Skip(4) // Skip the prefix (bc1 or tb1) and separator (1)
+ .Where(c => !Bech32Alphabet.Contains(c))
+ .ToList();
+
+ if (invalidChars.Any())
+ {
+ return new ValidationResult(false,
+ $"Invalid characters in Bech32 address: {string.Join(", ", invalidChars)}");
+ }
+
+ // Determine network from prefix
+ var detectedNetwork = address.ToLower().StartsWith("bc1")
+ ? BitcoinNetwork.Mainnet
+ : address.ToLower().StartsWith("tb1")
+ ? BitcoinNetwork.Testnet
+ : BitcoinNetwork.Unknown;
+
+ if (detectedNetwork == BitcoinNetwork.Unknown)
+ {
+ return new ValidationResult(false,
+ "Invalid Bech32 address prefix",
+ BitcoinNetwork.Unknown,
+ BitcoinAddressType.Unknown);
+ }
+
+ // Validate network
+ if (expectedNetwork != detectedNetwork)
+ {
+ return new ValidationResult(false,
+ $"Address belongs to network {detectedNetwork} but expected {expectedNetwork}",
+ detectedNetwork,
+ BitcoinAddressType.Unknown);
+ }
+
+ // Determine SegWit version and program length
+ var program = DecodeBech32(address);
+ var witnessVersion = program[0];
+ var dataLength = program.Length - 1;
+
+ // Validate according to BIP141
+ var addressType = DetermineSegWitType(witnessVersion, dataLength);
+ if (addressType == BitcoinAddressType.Unknown)
+ {
+ return new ValidationResult(false,
+ "Invalid SegWit program length",
+ detectedNetwork,
+ BitcoinAddressType.Unknown);
+ }
+
+ return new ValidationResult(true, "Valid SegWit address", detectedNetwork, addressType);
+ }
+ catch (Exception ex)
+ {
+ return new ValidationResult(false, $"Error processing Bech32 address: {ex.Message}");
+ }
+ }
+
+ private static BitcoinAddressType DetermineSegWitType(int witnessVersion, int programLength)
+ {
+ if (witnessVersion != 0) return BitcoinAddressType.Unknown;
+
+ return programLength switch
+ {
+ 20 => BitcoinAddressType.P2WPKH,
+ 32 => BitcoinAddressType.P2WSH,
+ _ => BitcoinAddressType.Unknown
+ };
+ }
+
+ private static (BitcoinNetwork network, BitcoinAddressType type) DetermineNetworkAndType(byte version)
+ {
+ return version switch
+ {
+ 0x00 => (BitcoinNetwork.Mainnet, BitcoinAddressType.P2PKH), // Mainnet P2PKH (1...)
+ 0x05 => (BitcoinNetwork.Mainnet, BitcoinAddressType.P2SH), // Mainnet P2SH (3...)
+ 0x6F => (BitcoinNetwork.Testnet, BitcoinAddressType.P2PKH), // Testnet P2PKH (m... or n...)
+ 0xC4 => (BitcoinNetwork.Testnet, BitcoinAddressType.P2SH), // Testnet P2SH (2...)
+ 0x3C => (BitcoinNetwork.Regtest, BitcoinAddressType.P2PKH), // Regtest P2PKH
+ 0x26 => (BitcoinNetwork.Regtest, BitcoinAddressType.P2SH), // Regtest P2SH
+ _ => (BitcoinNetwork.Unknown, BitcoinAddressType.Unknown)
+ };
+ }
+
+ private static byte[] Base58Decode(string base58)
+ {
+ var result = new BigInteger(0);
+ var multiplier = new BigInteger(1);
+
+ // Convert from Base58 to number
+ for (var i = base58.Length - 1; i >= 0; i--)
+ {
+ var digit = Base58Alphabet.IndexOf(base58[i]);
+ if (digit == -1)
+ {
+ throw new FormatException($"Invalid character '{base58[i]}' at position {i}");
+ }
+
+ result += multiplier * digit;
+ multiplier *= Base58Alphabet.Length;
+ }
+
+ // Convert to bytes
+ var bytes = result.ToByteArray().Reverse().SkipWhile(b => b == 0).ToArray();
+
+ // Add leading zeros as needed
+ var leadingZeros = base58.TakeWhile(c => c == '1').Count();
+ var leadingZeroBytes = Enumerable.Repeat((byte)0, leadingZeros).ToArray();
+
+ return leadingZeroBytes.Concat(bytes).ToArray();
+ }
+
+ private static byte[] DecodeBech32(string address)
+ {
+ // Note: This is a simplified Bech32 decoder
+ // In a production environment, you should implement full Bech32 decoding
+ // including checksum verification according to BIP173
+ var data = address.ToLower()
+ .Skip(4) // Skip prefix and separator
+ .Select(c => (byte)Bech32Alphabet.IndexOf(c))
+ .ToArray();
+
+ return data;
+ }
+
+ private static byte[] CalculateChecksum(byte[] data)
+ {
+ using (var sha256 = SHA256.Create())
+ {
+ var hash1 = sha256.ComputeHash(data);
+ var hash2 = sha256.ComputeHash(hash1);
+ return hash2.Take(4).ToArray();
+ }
+ }
+
+ public class ValidationResult
+ {
+ public ValidationResult(bool isValid, string message, BitcoinNetwork network = BitcoinNetwork.Unknown,
+ BitcoinAddressType addressType = BitcoinAddressType.Unknown)
+ {
+ IsValid = isValid;
+ Message = message;
+ Network = network;
+ AddressType = addressType;
+ }
+
+ public bool IsValid { get; }
+ public string Message { get; }
+ public BitcoinNetwork Network { get; init; }
+ public BitcoinAddressType AddressType { get; init; }
+ }
+}
\ No newline at end of file
diff --git a/src/AngorApp.Model/BitcoinNetwork.cs b/src/Angor/Avalonia/AngorApp.Model/BitcoinNetwork.cs
similarity index 100%
rename from src/AngorApp.Model/BitcoinNetwork.cs
rename to src/Angor/Avalonia/AngorApp.Model/BitcoinNetwork.cs
diff --git a/src/AngorApp.Model/Destination.cs b/src/Angor/Avalonia/AngorApp.Model/Destination.cs
similarity index 67%
rename from src/AngorApp.Model/Destination.cs
rename to src/Angor/Avalonia/AngorApp.Model/Destination.cs
index a3c8a1de..671d7f98 100644
--- a/src/AngorApp.Model/Destination.cs
+++ b/src/Angor/Avalonia/AngorApp.Model/Destination.cs
@@ -2,7 +2,7 @@ namespace AngorApp.Model;
public class Destination
{
- public Destination(string name, decimal amount, string bitcoinAddress)
+ public Destination(string name, ulong amount, string bitcoinAddress)
{
Name = name;
Amount = amount;
@@ -10,6 +10,6 @@ public Destination(string name, decimal amount, string bitcoinAddress)
}
public string Name { get; }
- public decimal Amount { get; }
+ public ulong Amount { get; }
public string BitcoinAddress { get; }
}
\ No newline at end of file
diff --git a/src/AngorApp.Model/IBroadcastedTransaction.cs b/src/Angor/Avalonia/AngorApp.Model/IBroadcastedTransaction.cs
similarity index 90%
rename from src/AngorApp.Model/IBroadcastedTransaction.cs
rename to src/Angor/Avalonia/AngorApp.Model/IBroadcastedTransaction.cs
index 28015d12..7883e8f8 100644
--- a/src/AngorApp.Model/IBroadcastedTransaction.cs
+++ b/src/Angor/Avalonia/AngorApp.Model/IBroadcastedTransaction.cs
@@ -7,7 +7,7 @@ public interface IBroadcastedTransaction
public string Address { get; }
public decimal FeeRate { get; set; }
public decimal TotalFee { get; set; }
- public decimal Amount { get; }
+ public uint Amount { get; }
public string Path { get; }
public int UtxoCount { get; }
public string ViewRawJson { get; }
diff --git a/src/AngorApp.Model/IProject.cs b/src/Angor/Avalonia/AngorApp.Model/IProject.cs
similarity index 100%
rename from src/AngorApp.Model/IProject.cs
rename to src/Angor/Avalonia/AngorApp.Model/IProject.cs
diff --git a/src/AngorApp.Model/IStage.cs b/src/Angor/Avalonia/AngorApp.Model/IStage.cs
similarity index 83%
rename from src/AngorApp.Model/IStage.cs
rename to src/Angor/Avalonia/AngorApp.Model/IStage.cs
index a48c0cb9..225d7495 100644
--- a/src/AngorApp.Model/IStage.cs
+++ b/src/Angor/Avalonia/AngorApp.Model/IStage.cs
@@ -3,7 +3,7 @@ namespace AngorApp.Model;
public interface IStage
{
DateOnly ReleaseDate { get; }
- decimal Amount { get; }
+ uint Amount { get; }
int Index { get; }
double Weight { get; }
}
\ No newline at end of file
diff --git a/src/AngorApp.Model/IUnsignedTransaction.cs b/src/Angor/Avalonia/AngorApp.Model/IUnsignedTransaction.cs
similarity index 79%
rename from src/AngorApp.Model/IUnsignedTransaction.cs
rename to src/Angor/Avalonia/AngorApp.Model/IUnsignedTransaction.cs
index 58734027..1092847d 100644
--- a/src/AngorApp.Model/IUnsignedTransaction.cs
+++ b/src/Angor/Avalonia/AngorApp.Model/IUnsignedTransaction.cs
@@ -4,6 +4,6 @@ namespace AngorApp.Model;
public interface IUnsignedTransaction
{
- public decimal TotalFee { get; set; }
+ public ulong TotalFee { get; set; }
Task> Broadcast();
}
\ No newline at end of file
diff --git a/src/AngorApp.Model/IWallet.cs b/src/Angor/Avalonia/AngorApp.Model/IWallet.cs
similarity index 66%
rename from src/AngorApp.Model/IWallet.cs
rename to src/Angor/Avalonia/AngorApp.Model/IWallet.cs
index c02d9696..1d556cb3 100644
--- a/src/AngorApp.Model/IWallet.cs
+++ b/src/Angor/Avalonia/AngorApp.Model/IWallet.cs
@@ -5,9 +5,9 @@ namespace AngorApp.Model;
public interface IWallet
{
public IEnumerable History { get; }
- decimal? Balance { get; set; }
+ ulong? Balance { get; set; }
public BitcoinNetwork Network { get; }
public string ReceiveAddress { get; }
- Task> CreateTransaction(decimal amount, string address, decimal feerate);
+ Task> CreateTransaction(ulong amount, string address, ulong feerate);
Result IsAddressValid(string address);
}
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp.Model/IWalletFactory.cs b/src/Angor/Avalonia/AngorApp.Model/IWalletFactory.cs
new file mode 100644
index 00000000..31c24abd
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp.Model/IWalletFactory.cs
@@ -0,0 +1,11 @@
+using System.Threading.Tasks;
+using AngorApp.Model;
+using CSharpFunctionalExtensions;
+
+namespace AngorApp.Sections.Wallet.NoWallet;
+
+public interface IWalletFactory
+{
+ public Task> Recover();
+ public Task> Create();
+}
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp.Model/IWalletProvider.cs b/src/Angor/Avalonia/AngorApp.Model/IWalletProvider.cs
new file mode 100644
index 00000000..58d4c2b2
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp.Model/IWalletProvider.cs
@@ -0,0 +1,10 @@
+using AngorApp.Model;
+using CSharpFunctionalExtensions;
+
+namespace AngorApp.Sections.Wallet.NoWallet;
+
+public interface IWalletProvider
+{
+ Maybe GetWallet();
+ void SetWallet(IWallet wallet);
+}
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp/AngorApp.csproj b/src/Angor/Avalonia/AngorApp/AngorApp.csproj
index fc018732..2517be8b 100644
--- a/src/Angor/Avalonia/AngorApp/AngorApp.csproj
+++ b/src/Angor/Avalonia/AngorApp/AngorApp.csproj
@@ -37,7 +37,7 @@
-
+
diff --git a/src/Angor/Avalonia/AngorApp/App.axaml b/src/Angor/Avalonia/AngorApp/App.axaml
index a405b6fe..f517af97 100644
--- a/src/Angor/Avalonia/AngorApp/App.axaml
+++ b/src/Angor/Avalonia/AngorApp/App.axaml
@@ -20,6 +20,7 @@
+
@@ -31,6 +32,7 @@
+
diff --git a/src/Angor/Avalonia/AngorApp/Common/Success/SuccessView.axaml b/src/Angor/Avalonia/AngorApp/Common/Success/SuccessView.axaml
index dc3b5045..b2d62f7f 100644
--- a/src/Angor/Avalonia/AngorApp/Common/Success/SuccessView.axaml
+++ b/src/Angor/Avalonia/AngorApp/Common/Success/SuccessView.axaml
@@ -4,9 +4,10 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:avalonia="https://github.com/projektanker/icons.avalonia"
xmlns:common="clr-namespace:AngorApp.Common"
+ xmlns:success="clr-namespace:AngorApp.Common.Success"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
- x:Class="AngorApp.Common.SuccessView" x:DataType="common:SuccessViewModel">
-
+ x:Class="AngorApp.Common.Success.SuccessView" x:DataType="success:SuccessViewModel">
+
diff --git a/src/Angor/Avalonia/AngorApp/Common/Success/SuccessView.axaml.cs b/src/Angor/Avalonia/AngorApp/Common/Success/SuccessView.axaml.cs
index 0dcf5931..3b2349de 100644
--- a/src/Angor/Avalonia/AngorApp/Common/Success/SuccessView.axaml.cs
+++ b/src/Angor/Avalonia/AngorApp/Common/Success/SuccessView.axaml.cs
@@ -1,8 +1,4 @@
-using Avalonia;
-using Avalonia.Controls;
-using Avalonia.Markup.Xaml;
-
-namespace AngorApp.Common;
+namespace AngorApp.Common.Success;
public partial class SuccessView : UserControl
{
diff --git a/src/Angor/Avalonia/AngorApp/Common/Success/SuccessViewModel.cs b/src/Angor/Avalonia/AngorApp/Common/Success/SuccessViewModel.cs
index d2369906..d99007d6 100644
--- a/src/Angor/Avalonia/AngorApp/Common/Success/SuccessViewModel.cs
+++ b/src/Angor/Avalonia/AngorApp/Common/Success/SuccessViewModel.cs
@@ -1,7 +1,7 @@
using System.Reactive.Linq;
using Zafiro.Avalonia.Controls.Wizards.Builder;
-namespace AngorApp.Common;
+namespace AngorApp.Common.Success;
public class SuccessViewModel : IStep
{
diff --git a/src/Angor/Avalonia/AngorApp/Common/TransactionPreview/ITransactionPreview.cs b/src/Angor/Avalonia/AngorApp/Common/TransactionPreview/ITransactionPreviewViewModel.cs
similarity index 92%
rename from src/Angor/Avalonia/AngorApp/Common/TransactionPreview/ITransactionPreview.cs
rename to src/Angor/Avalonia/AngorApp/Common/TransactionPreview/ITransactionPreviewViewModel.cs
index 3fb579bd..8a49e1a7 100644
--- a/src/Angor/Avalonia/AngorApp/Common/TransactionPreview/ITransactionPreview.cs
+++ b/src/Angor/Avalonia/AngorApp/Common/TransactionPreview/ITransactionPreviewViewModel.cs
@@ -11,5 +11,5 @@ public interface ITransactionPreviewViewModel : IStep
ReactiveCommand> CreateTransaction { get; }
public IObservable TransactionConfirmed { get; }
public Destination Destination { get; }
- public decimal Feerate { get; set; }
+ public ulong Feerate { get; set; }
}
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp/Common/TransactionPreview/Summary.axaml b/src/Angor/Avalonia/AngorApp/Common/TransactionPreview/Summary.axaml
new file mode 100644
index 00000000..af4bc451
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/Common/TransactionPreview/Summary.axaml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+ This is a preview of the transaction you will send.
+ If everything is correct, you can confirm it with the button below.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp/Sections/Wallet/Receive.axaml.cs b/src/Angor/Avalonia/AngorApp/Common/TransactionPreview/Summary.axaml.cs
similarity index 51%
rename from src/Angor/Avalonia/AngorApp/Sections/Wallet/Receive.axaml.cs
rename to src/Angor/Avalonia/AngorApp/Common/TransactionPreview/Summary.axaml.cs
index 64c647cf..d22767d4 100644
--- a/src/Angor/Avalonia/AngorApp/Sections/Wallet/Receive.axaml.cs
+++ b/src/Angor/Avalonia/AngorApp/Common/TransactionPreview/Summary.axaml.cs
@@ -2,11 +2,11 @@
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
-namespace AngorApp.Sections.Wallet;
+namespace AngorApp.Common.TransactionPreview;
-public partial class Receive : UserControl
+public partial class Summary : UserControl
{
- public Receive()
+ public Summary()
{
InitializeComponent();
}
diff --git a/src/Angor/Avalonia/AngorApp/Common/TransactionPreview/TransactionPreviewView.axaml b/src/Angor/Avalonia/AngorApp/Common/TransactionPreview/TransactionPreviewView.axaml
index 983a9f61..756bd17c 100644
--- a/src/Angor/Avalonia/AngorApp/Common/TransactionPreview/TransactionPreviewView.axaml
+++ b/src/Angor/Avalonia/AngorApp/Common/TransactionPreview/TransactionPreviewView.axaml
@@ -2,25 +2,21 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- xmlns:wallet="clr-namespace:AngorApp.Sections.Wallet"
- xmlns:designTime="clr-namespace:Zafiro.Avalonia.DesignTime;assembly=Zafiro.Avalonia"
xmlns:controls="clr-namespace:AngorApp.Controls"
xmlns:dp="clr-namespace:AvaloniaProgressRing;assembly=AvaloniaProgressRing"
- xmlns:transactionPreview1="clr-namespace:AngorApp.Common.TransactionPreview"
- xmlns:f="clr-namespace:Zafiro.Avalonia.Converters;assembly=Zafiro.Avalonia"
+ xmlns:tp="clr-namespace:AngorApp.Common.TransactionPreview"
mc:Ignorable="d"
+ d:DesignWidth="600"
+ d:DesignHeight="400"
x:Class="AngorApp.Common.TransactionPreview.TransactionPreviewView"
- x:DataType="transactionPreview1:ITransactionPreviewViewModel">
+ x:DataType="tp:ITransactionPreviewViewModel">
-
-
-
-
-
+
+
@@ -29,36 +25,10 @@
-
-
- This is a preview of the transaction you will send.
- If everything is correct you can confirm it with the button below.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-