decred / paymetheus Goto Github PK
View Code? Open in Web Editor NEWThis project forked from btcsuite/paymetheus
Decred wallet for Windows.
License: ISC License
This project forked from btcsuite/paymetheus
Decred wallet for Windows.
License: ISC License
Now that we have a defaults.ini we can use it to store additional information.
For example, we should save if there is the need for a wallet database password. If there isn't we can skip the dialog prompting the user for it.
Implementing this requires defaults.ini to be used a bit more clever than currently is the case. At this time it is overwritten every time. This needs to become a merge and rewrite.
Just like the title says. If you type the wrong rpc password the user gets prompted twice. First dialog box shows crappy message; second is almost human readable.
It should be possible to optionally specify the previous unspent outputs to be used when creating a transaction.
Need a better way to present this error to the user.
Without this information it is unclear how much input value a transaction can use. Unspendable coins that show up in the total balance (such as immature coins that are unspendable by policy, as well as locked and immature coins which are unspendable by consensus) can not be used to fund the transaction, and the total balance in the corner also includes coins from other accounts, which will never be used.
Forgot to update dcrd/wallet/_o/ which caused the protocol to be off. In turn this caused paymetheus to crash. Simple to repro.
Dust is determined by a full node's actual relay fee, but we can assume the 0.01 DCR default.
This view is currently entirely unimplemented, other than the visual design. Need to add:
It should be possible to purchase tickets through the GUI. This will require adding a new RPC to the gRPC API that has the same or similar functionality to the purchaseticket
JSON-RPC method.
Right now, the System.String type is used for passphrases, the wallet seed, etc. This type is immutable and it is impossible (without unsafe) to clear it after it is finished being used. Instead, investigate other methods of storing these secrets (most likely a byte[]), avoiding creating copies of them when creating RPC requests, and zeroing them when finished.
This is not a totally solvable problem (it gets much worse) but a best attempt should be made regardless.
This feature was dropped for the initial release. It should come back in a later release.
The only indicator of the current block is the height in the bottom left corner.
For desktop (mouse) users it might be adequate to use a tooltip over the block height with additional information, but this is a bad solution for those with touch screens.
Steps to reproduce:
Go to accounts pane -> click default reveal triangle -> account details show up.
Clicking it again to hide account details does not work.
Clicking this button will open the passphrase prompt to sign the transaction even when we know the transaction will not be valid.
Right now this is hardcoded as 2 block confirmations everywhere in the code. Instead, this should be configurable.
Some kind of settings view could be added that enables changing this option.
Changing this value should result in updating all of the spendable balances with the new required number of confs.
The largest value the required confirmations can be set to is 256 (the coinbase maturity value) since transactions mined after this many blocks are not guaranteed to be saved in memory by Paymetheus.
There are a couple ways this could be fixed. Either simply hide the Border containing the address when the view is shown or hidden (by setting the property in the viewmodel to null) or the Border could be replaced with a message that covers the entire Shell, similar to the interactive dialog messages. This solves the issue by requiring dismissing the message before it is possible to switch to another view.
The intent is to only save transactions from the last 100 (coinbase maturity) blocks since these are needed to efficiently calculate a balance given any arbitrary number of confirmations, without going back over RPC.
Some of the code works with just these recent transactions available, but other parts (account history) require every transaction that is relevant to the wallet to be in Paymetheus's memory. RPC will be required to download these transactions as needed and discard when they are finished being used.
When a new account is created it is not displayed in the GUI.
Account cannot be selected in "create transaction", "request payment" and "history" panes (this one is known and tracked in another issue).
Account is created underneath because trying to add an account with the same name results in a dup account error.
When the default account is revealed by clicking the triangle there is a "Reveal" link that appears. Clicking it does nothing.
Additionally all information that is revealed seems to not be plugged in. It looks like all these are related issues.
It shows the following:
"Public key address Reveal Aa"
This should probably go somewhere in the Create Transaction view.
When calculating a fee for a transaction the cost is not obvious to casual users.
IMO, casual users would expect the fee to be based on amount, not transaction size.
No one expects the spanish inquisition!
These look like they came out of the 90s. Make them match the rest of the application's visual design.
Currently, when you launch Paymetheus the "network address", "username" and "password" are never filled in.
I have two ideas for that:
Don't rely on other default magic, force it.
Discovered by @marcopeereboom.
If the incorrect public passphrase is entered, and then the user attempts to continue opening the wallet with the correct public passphrase, the application hangs trying to open the wallet.
There is too much jargon in the popup failure dialog. It should print a human readable error instead.
Paymetheus already runs the wallet process in a different application data directory so it will not interfere with a normal command line install. It should also run the wallet processes on nonstandard ports so the normal install can run at the same time.
The fee estimation code has already been merged. It just needs to be used each time the pending outputs are changed in the create transaction view.
Having less buttons is always good so remove it since it doesn't do anything useful.
This is a balance tracking bug in Paymetheus, not the wallet process. When restarting the application, the correct balance is shown again.
This is already supported in the view model.
The view needs to be changed to modify the pending output item template to add some kind of a selector (probably a combobox) to choose between paying to addresses vs raw scripts (encoded as hexadecimal strings, perhaps even pasted in from an advanced Decred script IDE). This can allow the construction of more advanced, and even nonstandard, transaction types.
Paymetheus runs dcrwallet as a background process. If the application exits normally (both during clean and unclean shutdown from an unexpected exception) the dcrwallet process is terminated. However, if Paymetheus is killed (e.g. through taskmgr) it is not given the opportunity to terminate the dcrwallet process. There is no recourse for this except by manually killing the dcrwallet process as well.
It will also fail to load when a dcrwallet instance (or any other process) is using the same ports. This prevents starting the new dcrwallet instance since it can not bind to the expected RPC listen addresses.
After clicking a generate new address the GUI says that the address was copied to the clipboard. This is not the case.
Either remove the message or fix the bug.
There is a lot of cleanup that can be done to improve the readability of the XAML. Reusing styles is a great start.
A default password is set, when found, in the viewmodel. However this doesn't show in the view, since it's a one way "binding" (where actually the datacontext's property is set from a view callback).
Most notably, some of the Address and Script functionality will throw NotImplementedException
since new types were added during the Bitcoin -> Decred port and were left unimplemented.
Using a "catch-all" type for unhandled script types, such as OutputScript.Unrecognized
should be sufficient to prevent the errors, and the more advanced functionality can be re-added as needed.
Having to remember the RPC credentials and running a dcrd instance in a command prompt on windows is not the greatest experience.
If the dcrd executable is found in the PATH, it could be possible for the user to simply click one button which will start dcrd (in a new console window, NOT as a background process) and then start the dcrwallet <-> dcrd RPC with the correct credentials.
Some things to think about:
The SelectedAccount property of the SynchronzierViewModel should be removed. Instead, let each individual viewmodel manage their own active account that the view is representing.
It's weird to see some views switch between one account to another, just because a different view selected another account. If the application-wide selected account were to stay, there needs to be some visual indication of it, and all of the individual account combo boxes in the different views removed.
Balances are not updated when blocks are attached and transactions added to the wallet. The total balances in the shell and overview panes, as well as each account's individual balance, all need to be updated in real time.
At the moment, this is the only button that can be used to interact with any of the listed accounts. It is currently placed below the account properties and looks very silly all alone. As long as there is only one button, it needs to be moved somewhere better.
When clicking on the amount edit box code throws an empty exception.
It is at CreateTransactionViewModel.cs line 99
An exception of type 'Paymetheus.Decred.Wallet.AddressException' occurred in Paymetheus.exe but was not handled in user code
We can display a red border (or do even fancier things) around various text boxes where we know the input is already invalid, instead of opening a error message box when trying to continue to the next part of the app. For example, the network address for the dcrd RPC instance and seeds when recovering or confirming a new wallet backup can be validated in real time.
When any of the input is predetermined to be invalid, the button to continue through the dialog should be disabled.
I find popup message boxes to be distracting and they don't fit in visually with the rest of the application (such as the dialog banners used for prompts). They're very easy to use and pretty great for development, but eventually I want them all gone.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.