Commit Graph

85 Commits

Author SHA1 Message Date
tomFlowee b112cfa3a5 Add CHIP compliant wallet backup class.
This serializes and deserializes a wallet's HD properties.
2025-10-28 14:48:18 +01:00
tomFlowee 45ab9b23bb Wrap Wallet in shared_ptr
The Wallet object used to have a guarenteed lifetime longer than the App
singleton, but then we started allowing people to delete their wallet
(argh!).
Also "external" modules, especially living outside of the main tree,
would be much more stable if they can avoid using raw pointers for core
concepts like the Wallet.
2025-10-08 22:54:27 +02:00
tomFlowee 5e3fb8da96 Many tweaks and more features 2025-07-10 16:31:23 +02:00
tomFlowee cdff2f3e0a Add more properties to the RepeatPaymentDetails 2025-06-24 18:34:46 +02:00
tomFlowee 179d184640 Store repeat Payments on Flowee Pay and persist them.
The application will thus be able to remember payments between restarts.
2025-06-23 11:28:48 +02:00
tomFlowee 10e48af861 Rework data struct for RepeatPayment, with test. 2025-06-23 11:28:48 +02:00
tomFlowee 4575d4cf9b Add next() to return the next payment date. 2025-06-21 20:39:39 +02:00
tomFlowee dfc055b04b Add saving repeat payment details unit test and code. 2025-06-20 18:31:18 +02:00
tomFlowee 5b40359ee6 Add tdd Payment saving code 2025-06-08 12:46:00 +02:00
tomFlowee 2b13984e82 Start the save method 2025-06-07 22:23:34 +02:00
tomFlowee e1925ad7c3 Remove dead code 2025-06-07 22:17:36 +02:00
tomFlowee 3090b74e4f Update amountToString to remove the stringBuilder
This cleans up the code even more, unifying the different cases
into one simple approach.

Added a unit test to verify the result.
2025-04-07 20:59:40 +02:00
tomFlowee a79e8ff1df Test and fix fiat rendering in some cases
In some locales the group separator is a unicode character that does not
fit in an 8 byte string, causing misrenderings.
We now assume that things fit in 16 bit characters which should fit all
living languages.
2025-03-07 23:27:08 +01:00
tomFlowee 0bb6bb0bf5 Fix includes
Avoid the includes of whole modules, which is expensive and
unpredictable.
2025-03-07 23:27:08 +01:00
tomFlowee 42df2fb2c8 Fix new wallet being marked as import for a little
This moves the decision if it is importing out of the wallet and we stop
using a broken heuristic.

Also cleanup the API usage of the hd masterkey format in the wallet
header.
2024-12-31 15:57:17 +01:00
tomFlowee 98906ac3e1 Make history return timestamp with price
this changes the call for historicalPrice() to now take the (int based)
timestamp as a ref and we change that to the actually found timestamp
upon success.
2024-07-05 13:05:40 +02:00
tomFlowee 5e89ba5d41 match comment to reality 2024-03-18 22:51:32 +01:00
tomFlowee dbed7c7a69 Reject transactions of v >= 10
This is purely a future-proofing measure, don't accept transactions that
are likely to be handled differently than todays transactions.
Since the May 2023 upgrade versions other than 1 or two are not allowed
on-chain, but before that some version 4 transactions were mined (and some
negative numbered ones longer ago).

Talks about a version 10 transaction has started, so make sure this software,
if it is still running at someone's machine, will already reject higher
version transactions because we can't know if they are compatible or not.
2024-03-13 17:03:37 +01:00
tomFlowee 8e0c7c57e6 Follow Streaming::pool() refactor
This upstream refactor stopped passing in the pool by pointer and
now wraps it in a shared_ptr.

A lot less 'address-of' operators and generally cleaner code are
the result.
2023-12-22 16:46:23 +01:00
tomFlowee 47746e724d Follow upstream includes rename
The PublicKey. and PrivteKey.h used to be called different.
2023-11-24 18:20:41 +01:00
tomFlowee 1deccd9226 Make fiat mode an actual bool on BitcoinValue
The CPP now does more of the (heavy) lifting and the UI layer can
ignore
most of the details with regards to there being digits behind the
separator for fiat at all.

The internal change is that the fiat based values are always processed
in cents, even if the cents are not displayed. This solves incorrect
display and generally removes special cases.
2023-10-18 11:43:23 +02:00
tomFlowee 7e375f50b5 Bugfix how we handle numbers from user input
This is a long overdue cleanup around the ideas of entering
numbers in Flowee Pay.

The core dataclass BitcoinValue now keeps track where the number
came from, either user input or some calculation. This allows
us to have the Fiat and the Coin price stay in sync without weird
problems.
The one we type uses a string, the price field that we are not typing in
is then a slave and we follow the auto-generated number as the
source.

This solves a host of known issues:

* Editing of value objects is much more consistnnt and predictable now.
* Switching to a different fiat type now properly re-calculates the
  values that are slaved. So if the primary is a BCH value then the fiat
  value gets the new exhange rate instantly applied.
* Switching to a different fiat type properly applies having a separator
  So if you go from euro to Japanese yen, we now remove the separator
  and the numbers behind it.
* Changing the app setting from BCH to mBCH now properly updates all
  amounts. Notice that the user-typed string wins, if you typed 2 and
  then change to mBCH we assume you wanted 2, not 2000.
* Paste now works more logcally.
* Cursor is no longer sometimes invisible, requiring backspace to make
  it show up.

And last we now protect against too large numbers. It is seen as an
error to type a number above 21 million BCH.

Fixes #19
2023-06-23 10:35:35 +02:00
tomFlowee 1220a3839c Start a setup for modules.
This sets up a basic system for creating modules on top of the flowee
pay static lib in a way that is ensured to be isolated (modules can't
accidentally use each other's classes)

The setup is made such that the buildsystem does the hard work on
plugging in a new module, making it so that all you need to do is create
a new dir and a "{something}ModuleInfo.h" file and it will get compiled
in.
The point there is to make it not have any merge conflicts and just make
it dead easy to get started.
2023-06-13 15:59:37 +02:00
tomFlowee 5125ecc222 Upgrade tests for 'earlier-this-month' model.
This fixes some cornercases and makes the test
a) properly data-driven (don't use 'today').
b) much more extensive.

This also removes some duplicate code and fixes some bugs in the actual
model it tests.
2023-05-08 10:29:15 +02:00
tomFlowee 2e4860f1c1 Fix unit test sometimes failing
As the code is by nature probabilistic, the unit test needed to be a
little more flexible in handling different outcomes.
2023-05-02 20:07:39 +02:00
tomFlowee 73e10f8bef Fix reordering of finding transactions
In our wallet we very rarely end up in a situation where we have to ask
the same transactions twice from a peer due to us having generated a
bunch of new keys from a HD wallet in the middle of a series we asked
that peer. Making the filter we sent at the start of the series be
outdated halfway through.

This is now handled properly.

This adds a unit test which tests that we now reach the right balance
and can add the same block multiple times without it failing.

Fixes: #12
2023-04-04 13:36:07 +02:00
tomFlowee d5d5c74cb4 Fixlet in unit test. 2023-02-02 12:46:30 +01:00
tomFlowee 6c82e6cd4f Fix being able to run 'make check'.
Make the name here match the name registerd in the child cmakelists.txt
2022-12-19 23:29:38 +01:00
tomFlowee 702735e17a Fix the grouping of transactions.
This adds a unit test as well, which is a bit tricky as this is date
specific.
2022-12-13 20:53:58 +01:00
tomFlowee 163e615613 Move sources into the src subdir
Slowly the amount of cpp sources has been growing to the point
where its just too much to store in the root of the project.
I think they are more happy in a subdir as well, getting an elevated
position for themselves.
2022-12-13 11:54:03 +01:00
tomFlowee f25b4a716c Allow the 'BitcoinValue' to easier editable
This new allows a value to be set as a number, for instance from the
user reading a QR code, and the "typed-value" is created from this
in order to allow the user to edit it instead of overwrite it.
2022-12-06 22:09:28 +01:00
tomFlowee f36d075c64 Make unit test pass again. 2022-10-07 22:45:02 +02:00
tomFlowee 01e169e41b Fixlets from linter detection. 2022-09-26 16:23:21 +02:00
tomFlowee e643a7749b Port to Qt6 2022-08-20 18:23:51 +02:00
tomFlowee f27667c172 Integrate historical price module
For mined transactions we now use the historical fiat price of BCH
instead of the current.

This will give us a much more stable and historically accurate view of
our transactions.

Fixes: #7
2022-08-12 23:46:18 +02:00
tomFlowee 5eda36008d Add some more functionality to the price history 2022-08-11 13:48:59 +02:00
tomFlowee b81910226d Start new class 2022-08-02 21:49:30 +02:00
tomFlowee fff90de695 Fixlets and simplification in unit unit test
This reflects that we no longer have a 3-state but that a wallet is
either open or closed.
2022-07-21 14:21:31 +02:00
tomFlowee 56f367a515 Fixlet in unit test. 2022-07-06 22:54:37 +02:00
tomFlowee 663169530d Follow rename of CKeyID -> KeyId 2022-07-06 22:06:58 +02:00
tomFlowee 7558fb1517 Refactor encryption, pass pwd when needed. 2022-06-19 14:29:27 +02:00
tomFlowee 9afdad806f Add more encryption support to the QML classes.
Also allow better interaction with the wallet.
2022-05-18 12:59:01 +02:00
tomFlowee 751d8f2119 Add test for saveTransaction 2022-05-17 22:49:01 +02:00
tomFlowee e120df9b71 Implement fully encrypting the wallet files.
For the 'fullyEncrypted' option we now simply fully
encrypt the entire blob of both the secrets file as well
as the wallet.dat (which transactions we own).
2022-05-17 22:26:48 +02:00
tomFlowee f0ca231e7a Make the re-loading of an encrypted tx work. 2022-05-17 16:21:59 +02:00
tomFlowee fe6fa98ff2 Make full-encrypted encrypt the transactions
This additionally makes the password get hashed more often and we create
an 'iv' from it as well.
2022-05-17 00:44:51 +02:00
tomFlowee a58bf9f09f Make basic wallet-encryption work.
We encrypt using a standard AES256 encryption scheme.
The key is 256 bits and we derive that from a user provided password
which we double-hash (sha256). Additionally we use a randomly generated
salt for a specific wallet that is fed into the hashing algo as well.

This version simply encrypts the private keys of a wallet, which makes
it quite basic. A good start.
2022-05-14 14:34:28 +02:00
tomFlowee 2accfa9700 Start wallet-encryption 2022-05-13 19:29:25 +02:00
tomFlowee a9004af44f Cleanup code quality. 2022-04-15 18:09:02 +02:00
tomFlowee b2ca1f0d31 Improve UTXO selection wrt Fusions
When the wallet contains fused transactions we select UTXOs a bit
different in order to maximize privacy.

Additionally this prefers an UTXO that is closest in value to the paid
amount.
2022-04-15 18:09:02 +02:00