Giter Site home page Giter Site logo

paymetheus's People

Contributors

cjepson avatar dajohi avatar jcvernaleo avatar jrick avatar marcopeereboom avatar tuxcanfly avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

paymetheus's Issues

Remember if there is a wallet db password

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.

Create transaction view should show the selected account's spendable balance

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.

Ticket purchasing

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.

Investigate using a mutable type for passphrases and other secrets

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.

Block hash of best block is missing

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.

Required confirmations for spendable policy should be configurable

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.

Generated addresses are not hidden after switching to another view and back

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.

Don't download every wallet transaction

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.

New accounts don't show up in Accounts pane.

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.

Reveal link in defaults pane doesn't do anything.

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"

Fee calculation is not obvious

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!

Try to fill out reasonable defaults on startup screen.

Currently, when you launch Paymetheus the "network address", "username" and "password" are never filled in.

I have two ideas for that:

  1. Try to discover these values by trolling dcrwallet and dcrd AppData configuration files. If this fails do not offer defaults and let the user fill them out.
  2. Once defaults have been provided, store them in a configuration file in the Paymetheus AppData folder and reload those values on next start.

Start wallet process with nonstandard RPC listen addresses.

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.

Output kind in Create Transaction view should be selectable.

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.

Application fails to load when a dcrwallet instance is already running

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.

Offer to start dcrd for user

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:

  • We need to verify that dcrd is the correct version before starting it. This is why I believe semantic versioning entire applications (and not just APIs) is so important
  • Can we check the dcrd signature to make sure we're not running a malicious binary?
  • Perhaps starting dcrd as a service instead of in a new console window is better? However, doing this will definitely prevent Paymetheus from ever being converted to a Windows Store application (using the Project Centennial automatic conversion in Windows 10 Redstone).

Remove the application-wide "current account"

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

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.

  • Fix total balance across all accounts
  • Fix individual account balances

Rename account button needs better placement.

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.

Do dynamic input validation in the startup dialogs

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.

Remove MessageBox.

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.