GithubHelp home page GithubHelp logo

revault / revault-gui Goto Github PK

View Code? Open in Web Editor NEW
51.0 51.0 8.0 2.32 MB

Revault terminal

Home Page: https://revault.dev

License: BSD 3-Clause "New" or "Revised" License

Rust 99.90% Shell 0.10%
bitcoin custody gui revault rust

revault-gui's People

Contributors

danielabrozzoni avatar darosior avatar edouardparis avatar zshan0 avatar

Stargazers

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

Watchers

 avatar  avatar  avatar

revault-gui's Issues

UI: refac components module

The current state is a little messy.
Each component is often paired with a <Component>Style which is often a struct implementing the container::StyleSheet trait.
Maybe it would be cleaner to implement a new module style in the component module with a generic struct implementing container::StyleSheet and with chained methods:

example:

pub struct ContainerStyle(iced::container::Style);

impl ContainerStyle {
    pub fn new() -> Self {
        ContainerStyle(iced::container::Style::default())
    }
    pub fn rounded(mut self) -> Self {
        self.0.border_radius = 10.0;
        self
    }
}

impl iced::container::StyleSheet for ContainerStyle {
    fn style(&self) -> container::Style {
        return self.0;
    }
}

usage:

        Container::new(content)
            .padding(15)
            .style(ContainerStyle::new().rounded().backround(color::BACKGROUND))

maybe use macro instead

In order to generate at build time the struct needed.

UI: Add settings Panel

Currently the settings button on the sidebar (view/sidebar.rs) is sending a message::Install,
It should send message::Menu(Settings)

  • modify revaultd config in order to include every missing sections, check revaultd repository
  • create Menu::Settings and modify sidebar view to send the message::Menu(Menu::Settings)
  • create a new State call SettingsState, (find inspiration with HistoryState) with a view SettingsView
  • Handle the message and load the SettingsState in the app

The state should handle the app Config and keep it loaded.
First we will only display the config and will not modify it.

For the view: check the config file and for each section, implement a new card for each of the following sections:

  • bitcoind config
  • coordinator
  • stakeholders (xpubs)
  • managers (xpubs)
  • cosigner (xpubs)
  • emergency (emergency address)

Inspiration for the design:
Screenshot_2021-02-11 Figma

UI: simplify state reloading after tick.

some state like Home, Network, History should have a simplified reloading mechanism.

  • drop the use of state::util::Watch for a simple last_reloading.
  • State::load every 15s min if the last_reloading is before now()-15s

ui: improve network panel

  • Add current network to bitcoin core card
  • Add more precise sync status
  • green dot is maybe confusing
  • Add a card for the coordinator, by adding a servers entry to revaultd's getinfo
  • If manager, add a card for the cosigners too

A stronger vault abstraction instead of "coin" language

We've been discussing the UI and UX a lot lately with all the demo tests, and getting valuable feedback for Kevin and Jake from a "blunt" software perspective. By this i mean that since they did not assist to the incremental development, they could raise fundamental questions on the layout and clickpath.

I touched about it during the last meeting but it seems to me that increasing the abstraction of a "vault" at the expense of onchain transactions details would address a lot of these concerns.
For example take the confirmation of the deposit transaction:

  • The transaction is technically confirmed after a block
  • revaultd will tell it's funded after n blocks (6 right now but configurable soon ™️)
  • revaultd will tell it's unconfirmed otherwise
    It may be confusing to the user (and it was to our pro testers) to have a confirmed transaction denoted as unconfirmed. I think that's an instance where a stronger "vault" abstraction would help:
  • Not deeply confirmed: "vault is not matured yet"
  • Deeply confirmed: "vault is mature"

I think there is a number of other places where removing the Bitcoin language for a simpler one (effectively coining a vault language if i may :p) would help, even though here i just reused the coinbase one.

Opening this issue to gather feedback and point to other places where it would benefit. What do you think @edouardparis @danielabrozzoni @kloaec ?

Fixes #85
Fixes #69

UI: stakeholder fund activation panel

Stakeholder should have a panel to sign unvault transactions and activate vaults.

  • new button action "Activate fund" or "Delegate fund" on sidebar
  • Add get_unvaul_transaction and set_unvault_transaction to revaultd client
  • new stakeholderActivateFund state and view.

Resuse state/signer to have a common interface to sign unvault PSBT

No indicator for Spend Tx progress

As a manager, after I broadcast a Spend Tx, the Tx shows up under 'pending spend transactions' but there's no info to tell me when it is expected to be confirmed. Perhaps we should put pending unvault: 0/CSV, pending spend: 0/6 confirmations or something?

ui: improve send transaction process

Would be nice to:

  • Have a title to the coin selection screen, something like "Select the vaults you want to spend"
  • Be able to select a vault by just clicking on the row

Fund acknowledgement: let the user know they actually signed

Related: revault/revaultd#105

There are two ways to approach this:

  • Handle it on the GUI side:
    • Expose an our_xpub field in revaultd's getinfo so the GUI can keep it in its context (or even poll it on demand)
    • Have the GUI call listonchaintransactions <deposit outpoint> after a listvaults to check if the PSBT's partial_sigs contain a signature for derivation_index at input 0
  • Stuff it on revaultd side:
    • Have a new vault status or a new column in DB

@edouard: I think the first one would be easier for now, since you already call listonchaintransactions for each vault on the homepage so this would not bloat it either. Wdyt?

UI: add deposit panel

Both for manager and stakeholder mode:

  • Add button action "Deposit" to sidebar
  • Add DepositState get getdepositaddress result
  • Add DepositView: display deposit_address both with a text field with clipboard button and a QR code

UI: refac component::button

when using buttons components, in order to disable the button a Message::None is passed as argument.
Problem is: we want these components to be imported in widget or state returning its own message enum like DepositMessage without adding a new value in enum like DepositMessage::None.
Solution: remove .on_press from Macro and let the caller add it.

History: generate CSV

Users will have different use-cases, and we should need to adapt to their requirements.

Typically:
"Accounting view" with receive/spend
"transaction view" as in Bitcoin transaction
"detailed view" with fees, cancel, change, etc

We also should have a tool to extract a CSV for accounting purpose.

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.