From 5089a140e137f3b0bc7fc62705bf80a0b19d97d5 Mon Sep 17 00:00:00 2001 From: "Andres G. Aragoneses" Date: Mon, 12 Feb 2024 17:17:53 +0800 Subject: [PATCH] Backend: rename .OriginAddress->.OriginMainAddress This way, if a version of geewallet that is too old to have native segwit support (or disabled by default) tries to deserialize a transaction proposal, it will error out complaining about version mismatch instead of crashing with a weird error. --- src/GWallet.Backend.Tests/Deserialization.fs | 12 +++++------ src/GWallet.Backend.Tests/MarshallingData.fs | 6 +++--- src/GWallet.Backend/Account.fs | 4 ++-- src/GWallet.Backend/Ether/EtherAccount.fs | 2 +- src/GWallet.Backend/Transaction.fs | 20 ++++++++++++++----- .../UtxoCoin/UtxoCoinAccount.fs | 2 +- src/GWallet.Frontend.Console/Presentation.fs | 2 +- src/GWallet.Frontend.Console/Program.fs | 4 ++-- .../GWallet.Frontend.XF.Android.fsproj | 2 +- src/GWallet.Frontend.XF/SendPage.xaml.fs | 6 +++--- 10 files changed, 35 insertions(+), 25 deletions(-) diff --git a/src/GWallet.Backend.Tests/Deserialization.fs b/src/GWallet.Backend.Tests/Deserialization.fs index 1d7a1f535..7420db877 100644 --- a/src/GWallet.Backend.Tests/Deserialization.fs +++ b/src/GWallet.Backend.Tests/Deserialization.fs @@ -55,7 +55,7 @@ type Deserialization() = Assert.That(deserializedUnsignedTrans.Proposal.Amount.Currency, Is.EqualTo Currency.BTC) Assert.That(deserializedUnsignedTrans.Proposal.DestinationAddress, Is.EqualTo("13jxHQDxGto46QhjFiMb78dZdys9ZD8vW5")) - Assert.That(deserializedUnsignedTrans.Proposal.OriginAddress, + Assert.That(deserializedUnsignedTrans.Proposal.OriginMainAddress, Is.EqualTo("16pKBjGGZkUXo1afyBNf5ttFvV9hauS1kR")) let btcTxMetadata = deserializedUnsignedTrans.Metadata :?> UtxoCoin.TransactionMetadata @@ -84,7 +84,7 @@ type Deserialization() = Assert.That(deserializedUnsignedTrans.Proposal.Amount.Currency, Is.EqualTo Currency.ETC) Assert.That(deserializedUnsignedTrans.Proposal.DestinationAddress, Is.EqualTo("0xf3j4m0rjxdddud9403j")) - Assert.That(deserializedUnsignedTrans.Proposal.OriginAddress, + Assert.That(deserializedUnsignedTrans.Proposal.OriginMainAddress, Is.EqualTo("0xf3j4m0rjx94sushh03j")) let etherTxMetadata = deserializedUnsignedTrans.Metadata :?> Ether.TransactionMetadata @@ -122,7 +122,7 @@ type Deserialization() = Is.EqualTo(Currency.BTC)) Assert.That(deserializedSignedTrans.TransactionInfo.Proposal.DestinationAddress, Is.EqualTo("13jxHQDxGto46QhjFiMb78dZdys9ZD8vW5")) - Assert.That(deserializedSignedTrans.TransactionInfo.Proposal.OriginAddress, + Assert.That(deserializedSignedTrans.TransactionInfo.Proposal.OriginMainAddress, Is.EqualTo("16pKBjGGZkUXo1afyBNf5ttFvV9hauS1kR")) let btcTxMetadata = deserializedSignedTrans.TransactionInfo.Metadata :?> UtxoCoin.TransactionMetadata @@ -161,7 +161,7 @@ type Deserialization() = Is.EqualTo(Currency.ETC)) Assert.That(deserializedSignedTrans.TransactionInfo.Proposal.DestinationAddress, Is.EqualTo("0xf3j4m0rjxdddud9403j")) - Assert.That(deserializedSignedTrans.TransactionInfo.Proposal.OriginAddress, + Assert.That(deserializedSignedTrans.TransactionInfo.Proposal.OriginMainAddress, Is.EqualTo("0xf3j4m0rjx94sushh03j")) let etherTxMetadata = deserializedSignedTrans.TransactionInfo.Metadata :?> Ether.TransactionMetadata @@ -195,7 +195,7 @@ type Deserialization() = Assert.That(deserializedUnsignedTrans.Proposal.Amount.Currency, Is.EqualTo Currency.SAI) Assert.That(deserializedUnsignedTrans.Proposal.DestinationAddress, Is.EqualTo("0xDb0381B1a380d8db2724A9Ca2d33E0C6C044bE3b")) - Assert.That(deserializedUnsignedTrans.Proposal.OriginAddress, + Assert.That(deserializedUnsignedTrans.Proposal.OriginMainAddress, Is.EqualTo("0xba766d6d13E2Cc921Bf6e896319D32502af9e37E")) let saiTxMetadata = deserializedUnsignedTrans.Metadata :?> Ether.TransactionMetadata @@ -233,7 +233,7 @@ type Deserialization() = Is.EqualTo Currency.SAI) Assert.That(deserializedSignedTrans.TransactionInfo.Proposal.DestinationAddress, Is.EqualTo("0xDb0381B1a380d8db2724A9Ca2d33E0C6C044bE3b")) - Assert.That(deserializedSignedTrans.TransactionInfo.Proposal.OriginAddress, + Assert.That(deserializedSignedTrans.TransactionInfo.Proposal.OriginMainAddress, Is.EqualTo("0xba766d6d13E2Cc921Bf6e896319D32502af9e37E")) let etherTxMetadata = deserializedSignedTrans.TransactionInfo.Metadata :?> Ether.TransactionMetadata diff --git a/src/GWallet.Backend.Tests/MarshallingData.fs b/src/GWallet.Backend.Tests/MarshallingData.fs index 6bffab36b..4dd651417 100644 --- a/src/GWallet.Backend.Tests/MarshallingData.fs +++ b/src/GWallet.Backend.Tests/MarshallingData.fs @@ -127,7 +127,7 @@ module MarshallingData = let private someUnsignedEtherTransactionProposal = { - OriginAddress = "0xf3j4m0rjx94sushh03j"; + OriginMainAddress = "0xf3j4m0rjx94sushh03j"; Amount = TransferAmount(10.01m, 12.02m, Currency.ETC); DestinationAddress = "0xf3j4m0rjxdddud9403j"; } @@ -180,7 +180,7 @@ module MarshallingData = let private someUnsignedBtcTransactionProposal = { - OriginAddress = "16pKBjGGZkUXo1afyBNf5ttFvV9hauS1kR"; + OriginMainAddress = "16pKBjGGZkUXo1afyBNf5ttFvV9hauS1kR"; Amount = TransferAmount(10.01m, 12.02m, Currency.BTC); DestinationAddress = "13jxHQDxGto46QhjFiMb78dZdys9ZD8vW5"; } @@ -264,7 +264,7 @@ module MarshallingData = } let private someUnsignedSaiTransactionProposal = { - OriginAddress = "0xba766d6d13E2Cc921Bf6e896319D32502af9e37E"; + OriginMainAddress = "0xba766d6d13E2Cc921Bf6e896319D32502af9e37E"; Amount = TransferAmount(1m, 7.08m, Currency.SAI) DestinationAddress = "0xDb0381B1a380d8db2724A9Ca2d33E0C6C044bE3b"; } diff --git a/src/GWallet.Backend/Account.fs b/src/GWallet.Backend/Account.fs index e2c21ebc7..ddc2255fd 100644 --- a/src/GWallet.Backend/Account.fs +++ b/src/GWallet.Backend/Account.fs @@ -223,7 +223,7 @@ module Account = else transactionProposal.Amount.ValueToSend + fee.FeeValue Caching.Instance.StoreOutgoingTransaction - transactionProposal.OriginAddress + transactionProposal.OriginMainAddress transactionProposal.Amount.Currency fee.Currency txId @@ -445,7 +445,7 @@ module Account = let transactionProposal = { - OriginAddress = baseAccount.PublicAddress + OriginMainAddress = baseAccount.PublicAddress Amount = amount DestinationAddress = destination } diff --git a/src/GWallet.Backend/Ether/EtherAccount.fs b/src/GWallet.Backend/Ether/EtherAccount.fs index ec4fe860c..0daff27d7 100644 --- a/src/GWallet.Backend/Ether/EtherAccount.fs +++ b/src/GWallet.Backend/Ether/EtherAccount.fs @@ -487,7 +487,7 @@ module internal Account = let txDetails = { - OriginAddress = signer.GetSenderAddress signedTransaction.RawTransaction + OriginMainAddress = signer.GetSenderAddress signedTransaction.RawTransaction Amount = UnitConversion.Convert.FromWei (IntTypeDecoder().DecodeBigInteger tx.Value) Currency = getTransactionCurrency tx DestinationAddress = destAddress diff --git a/src/GWallet.Backend/Transaction.fs b/src/GWallet.Backend/Transaction.fs index 6f1764e69..17f17669b 100644 --- a/src/GWallet.Backend/Transaction.fs +++ b/src/GWallet.Backend/Transaction.fs @@ -1,32 +1,42 @@ namespace GWallet.Backend +open Newtonsoft.Json + type ITransactionDetails = - abstract member OriginAddress: string + abstract member OriginMainAddress: string abstract member Amount: decimal abstract member Currency: Currency abstract member DestinationAddress: string type internal SignedTransactionDetails = { - OriginAddress: string +#if !NATIVE_SEGWIT + [] +#endif + OriginMainAddress: string + Amount: decimal Currency: Currency DestinationAddress: string } interface ITransactionDetails with - member self.OriginAddress = self.OriginAddress + member self.OriginMainAddress = self.OriginMainAddress member self.Amount = self.Amount member self.Currency = self.Currency member self.DestinationAddress = self.DestinationAddress type UnsignedTransactionProposal = { - OriginAddress: string; +#if !NATIVE_SEGWIT + [] +#endif + OriginMainAddress: string + Amount: TransferAmount; DestinationAddress: string; } interface ITransactionDetails with - member self.OriginAddress = self.OriginAddress + member self.OriginMainAddress = self.OriginMainAddress member self.Amount = self.Amount.ValueToSend member self.Currency = self.Amount.Currency member self.DestinationAddress = self.DestinationAddress diff --git a/src/GWallet.Backend/UtxoCoin/UtxoCoinAccount.fs b/src/GWallet.Backend/UtxoCoin/UtxoCoinAccount.fs index c264523d4..2a8273b5d 100644 --- a/src/GWallet.Backend/UtxoCoin/UtxoCoinAccount.fs +++ b/src/GWallet.Backend/UtxoCoin/UtxoCoinAccount.fs @@ -759,7 +759,7 @@ module Account = failwith "expected a single destination address" { - OriginAddress = (account :> IAccount).PublicAddress + OriginMainAddress = (account :> IAccount).PublicAddress DestinationAddress = destinationAddress.ToString() Amount = value.ToDecimal MoneyUnit.BTC Currency = currency diff --git a/src/GWallet.Frontend.Console/Presentation.fs b/src/GWallet.Frontend.Console/Presentation.fs index 0ddf3546d..c1bd9d4d4 100644 --- a/src/GWallet.Frontend.Console/Presentation.fs +++ b/src/GWallet.Frontend.Console/Presentation.fs @@ -61,7 +61,7 @@ module Presentation = | NotFresh(NotAvailable) -> None Console.WriteLine("Transaction data:") - Console.WriteLine("Sender: " + trans.OriginAddress) + Console.WriteLine("Sender: " + trans.OriginMainAddress) Console.WriteLine("Recipient: " + trans.DestinationAddress) let fiatAmount = match maybeEstimatedAmountInUsd with diff --git a/src/GWallet.Frontend.Console/Program.fs b/src/GWallet.Frontend.Console/Program.fs index 3cc45c7ab..56ea14cc9 100644 --- a/src/GWallet.Frontend.Console/Program.fs +++ b/src/GWallet.Frontend.Console/Program.fs @@ -109,7 +109,7 @@ let SignOffPayment() = let unsTx = Account.LoadUnsignedTransactionFromFile fileToReadFrom.FullName let accountsWithSameAddress = Account.GetAllActiveAccounts().Where( - fun acc -> acc.PublicAddress = unsTx.Proposal.OriginAddress + fun acc -> acc.PublicAddress = unsTx.Proposal.OriginMainAddress ) Some (unsTx, accountsWithSameAddress) with @@ -188,7 +188,7 @@ let SendPaymentOfSpecificAmount (account: IAccount) Console.Write("Introduce a file name to save the unsigned transaction: ") let filePath = Console.ReadLine() let proposal = { - OriginAddress = account.PublicAddress; + OriginMainAddress = account.PublicAddress; Amount = amount; DestinationAddress = destination; } diff --git a/src/GWallet.Frontend.XF.Android/GWallet.Frontend.XF.Android.fsproj b/src/GWallet.Frontend.XF.Android/GWallet.Frontend.XF.Android.fsproj index 50c89f7d6..57783a751 100644 --- a/src/GWallet.Frontend.XF.Android/GWallet.Frontend.XF.Android.fsproj +++ b/src/GWallet.Frontend.XF.Android/GWallet.Frontend.XF.Android.fsproj @@ -503,7 +503,7 @@ - {2C7A1A49-CAD1-4961-866A-D32868AE7D18} + {85236682-6463-4209-B66C-E0643EF12B46} GWallet.Frontend.XF diff --git a/src/GWallet.Frontend.XF/SendPage.xaml.fs b/src/GWallet.Frontend.XF/SendPage.xaml.fs index fbdc062cf..aaeb33bad 100644 --- a/src/GWallet.Frontend.XF/SendPage.xaml.fs +++ b/src/GWallet.Frontend.XF/SendPage.xaml.fs @@ -418,7 +418,7 @@ type SendPage(account: IAccount, receivePage: Page, newReceivePageFunc: unit->Pa unsignedTransaction.Proposal.Amount.Currency account.Currency self.DisplayAlert("Alert", err, "OK") |> FrontendHelpers.DoubleCheckCompletionNonGeneric ) - elif account.PublicAddress <> unsignedTransaction.Proposal.OriginAddress then + elif account.PublicAddress <> unsignedTransaction.Proposal.OriginMainAddress then MainThread.BeginInvokeOnMainThread(fun _ -> transactionEntry.TextColor <- Color.Red let err = "Transaction proposal's sender address doesn't match with this currency's account" @@ -447,7 +447,7 @@ type SendPage(account: IAccount, receivePage: Page, newReceivePageFunc: unit->Pa signedTransaction.TransactionInfo.Proposal.Amount.Currency account.Currency self.DisplayAlert("Alert", err, "OK") |> FrontendHelpers.DoubleCheckCompletionNonGeneric ) - elif account.PublicAddress <> signedTransaction.TransactionInfo.Proposal.OriginAddress then + elif account.PublicAddress <> signedTransaction.TransactionInfo.Proposal.OriginMainAddress then MainThread.BeginInvokeOnMainThread(fun _ -> transactionEntry.TextColor <- Color.Red let err = "Transaction's sender address doesn't match with this currency's account" @@ -638,7 +638,7 @@ type SendPage(account: IAccount, receivePage: Page, newReceivePageFunc: unit->Pa | :? ReadOnlyAccount as _readOnlyAccount -> let proposal = { - OriginAddress = account.PublicAddress; + OriginMainAddress = account.PublicAddress Amount = txInfo.Amount; DestinationAddress = txInfo.Destination; }