GUI for Grin Node + Wallet

Related tags

GUI grin-gui
Overview

Grin GUI

This is a very Work-in-Progress implementation of the Grin Core Team's Integrated GUI for both Grin Wallet and Grin Node.

Goals

The Grin team has spent countless hours making Grin's infrastructure extremely flexible, with multiple ways of running nodes and wallets and extensive developer APIs and documentation for both.

This project aims to pull all of this work together to create a lightweight, flexible and user-friendly method of using Grin. This includes:

  • Presenting a completely working Single UI for both Grin Node and Grin Wallet.
  • Allowing all wallet transaction operations to be performed in a user-friendly and intuitive manner
  • Create and manage a Grin node in-application if desired, while also retaining the options to communicate with other configured or public nodes.
  • The ability to create, configure and manage multiple wallets and nodes including existing installations

Status

NOTHING WORKS AT PRESENT

  • UI Framework iced-rs has been selected.
  • Overall structure of project is in place based on ajour as a sample project
  • Some refactoring of project structure to better separate GUI elements and events
  • Theming, localization, UI scaling is in place
  • Windows systray functionality in place

Current Focus

In contrast to most Grin development, Grin GUI is being developed on Windows, with Windows being the first-class citizen. MacOS and Linux will of course also be supported.

Current work is:

  • Including grin wallet + API
  • First-time 'Out of Box' setup and creation of a grin wallet from the UI
  • Wallet + Node configuration options

Contributing

Yes please! This is an excellent project for anyone wanting to get their feet wet with Grin development. Detailed knowledge of Grin's internals is not required, just a familiarity with Grin's APIs and a willingness to dive into iced-rs.

See Grin project contribution for general guidelines we'll eventually be using, however this project is still far too new for most of this to be relevant.

Building

Prerequisites

Windows

  • llvm must be installed

(instructions not yet complete)

Acknowledgement

  • Thanks to iced-rs for a workable native Rust GUI
  • Thank you to ajour for a completely working, non-trivial and tested-in-the-wild iced-rs project to use as a base for development.

License

GPL 3.0 (for the time being)

Note this differs from the rest of the Grin codebase (which uses Apache 2) due to ajour's licensing. Currently attempting to get copyright holder's permission to change this to Apache 2.

Comments
  • Start the embedded node on test net chain if the active wallet is_testnet is true.

    Start the embedded node on test net chain if the active wallet is_testnet is true.

    I've made the assumption here that there will only ever be one internal embedded node. This node's chain type will be based off of the active wallet's is_testnet flag.

    opened by flomang 3
  • Open wallet

    Open wallet

    Mostly makeup.

    • clear user password after they leave the open wallet view
    • open wallet alignments
    • button lipstick everywhere
    • scrollable node summary
    • node summary alignment
    opened by flomang 2
  • Balance History Chart

    Balance History Chart

    I figured that this is smooth enough now to share so the other devs can have a taste of something really sweet. This merge adds a historical balance chart to the wallet home screen.

    You'll notice that I've started to construct a balance history of the grin wallet in wallet/operation/tx_list_display.rs - starting from line 140. The backdating of the first transaction to "2019-01-20T00:00:00Z" is only left in for dev purposes to provide us adequate data to populate the chart with. My first transaction in a recovered wallet was being set to the date that I restored the wallet. I'm not sure if that is how things are supposed to work?

    Some work will be needed to identify what interval is best to populate the chart with - daily or hourly - contingent upon the oldest transaction of the wallet. The chart requires a certain number of data points to be populated with to be useful.

    Historical prices are currently pulled from coingecko. I'm sure we could make this configurable one day so the user can choose where they want to source this information from. It's probably more than I want to deal with for version 1.0 though. This is currently handled in "wallet/operation/home.rs" - function update_prices.

    Last but not least is the added config - Currency. This setting will change the user's home title balance as well as the chart historical prices. You'll noticed that the symbol is missing for "bitcoin" when you switch. I think we need to find a font that supports it or we explore other solutions to make that more obvious for the user.

    As with most of the current code base this is not finished yet but it works well enough to play with.

    opened by flomang 1
  • Crashes on first time startup

    Crashes on first time startup

    The current master branch crashes on first time startup on a fresh install, i.e. an install with no pre-existing wallet data or config file.

    Building from an older version, creating a wallet, exiting, and then running the current version allows it to run ok.

    Old version I used for this: https://github.com/30-r/grin-gui/tree/11-15

    I have experienced the crash on Ubuntu 20,22 and Windows 10,11. I have tested the initialization workaround on Windows 10.

    opened by 30-r 1
  • [WIP] Home / Transaction Screen Updates

    [WIP] Home / Transaction Screen Updates

    • Including new version of wallet including query API created in #666
    • Rework look of transaction list
    • Don't retrieve transaction list at intervals, instead provide selection buttons as to what type of transactions user would like to see in the view
    • Split transaction list view off into separate file ...
    opened by yeastplume 1
  • Iced 0.5 upgrade

    Iced 0.5 upgrade

    An Incantation of Sorts:

    It took me some time to figure out a quaint way to migrate the custom widgets. Alas, the path is alight! This deprecates the out of date method of styling (src/gui/style.rs). The new method of styling is implemented under the theme module (core/src/theme). I still have more styles to migrate from the original style.rs file. I'll be doing that as we continue. Our styling should be much more maintainable now instead of having them in one ginormous file. Aside from this, the other major improvement was that this eliminates the need to pass the color_palette param everywhere, and therefore, it was dropped.

    opened by flomang 1
  • [WIP] Slatepack creation workflow

    [WIP] Slatepack creation workflow

    Currently working through creating a slatepack transaction (and uncovering deficiencies in the underlying workflow).

    • Late-locked slatepack amounts don't appear to be saved properly in the TX, need to look into this
    • Would like to be able to recover slatepacks/correct transactions etc from the transaction list UI
    opened by yeastplume 1
  • Wallet List

    Wallet List

    Improved wallet list:

    • fixed table row selection bounds
    • fixed table row hover bounds
    • user can now select wallet by clicking table row
    • removed checkbox on wallet list
    • wallet list should scroll
    • create wallet view should be scrollable
    • add new wallet button on wallet list screen
    • cancel open wallet returns user to wallet list - fist time screen should only appear on initial setup
    • added styles
    • alignments, alignments, and more alignments.
    opened by flomang 1
  • Wallet Home Screen visuals

    Wallet Home Screen visuals

    • Bringing all of the wallet homescreen elements into place, info and basic transaction listing. Might not end up looking perfect but at least the info will be there.
    • Adding placeholder and structure for actual transaction operations
    • Bug fix to wallet startup
    opened by yeastplume 1
  • Minor bug fixes

    Minor bug fixes

    It still looks ugly but the functionality is starting to come together. I added a temp back button to close the wallet. Minor bug fixes aside from that.

    opened by flomang 1
  • Open wallet should restart node if chain types don't match

    Open wallet should restart node if chain types don't match

    More bug fixes. Restart of node server will not work without global edits.

    https://github.com/mimblewimble/grin/pull/3737.

    I also, fixed an overflow bug in that merge for new wallets.

    opened by flomang 1
  • Lock chart caption when it runs off the screen

    Lock chart caption when it runs off the screen

    When the user hovers right on the chart the caption flies off the screen.

    Solution A: lock the caption to a specific area

    Solution B: Send in a second mouse index in the mouse event loop that sends in the offset of the caption as well. If width of caption > chart bounds send in max offset of caption. This allows the caption to follow the eyes of the user but keeps the caption from going out of bounds on the right.

    Solution C: This chart stuff is nonesense and silly - throw it out.

    opened by flomang 0
  • Finish the create wallet screen.

    Finish the create wallet screen.

    This screen still needs to be finished. Specifically the areas that say (TBD)

    • the choose folder button should match the style we have in other places
    • we need proper error msgs under the fields that have errors: e.g red label under display name when the display name clashes with existing
    • remove anything that says TBD after it was determined and done of course!
    opened by flomang 0
  • Match wallet list style with other parts of app

    Match wallet list style with other parts of app

    Wallet list is still rough. The headers specially should be resized or restyled to match how we do the table in other areas otherwise it looks very amateurish.

    opened by flomang 0
  • Tab between input fields

    Tab between input fields

    As a user I would like to be able to tab between input fields during wallet creation/login so my hands don't have to leave the keyboard. The user must focus on each field now :-(.

    opened by flomang 0
Owner
null
Egui node graph is a featureful, customizable library to create node graph applications using egui

Egui node graph is a featureful, customizable library to create node graph applications using egui. The library takes care of presenting a node graph to your users, and allows customizing many aspects of the interaction, creating the semantics you want for your specific application.

null 367 Jan 8, 2023
A simple, cross-platform GUI automation module for Rust.

AutoPilot AutoPilot is a Rust port of the Python C extension AutoPy, a simple, cross-platform GUI automation library for Python. For more information,

null 271 Dec 27, 2022
Desktop GUI Framework

Azul - Desktop GUI framework WARNING: The features advertised in this README may not work yet. Azul is a free, functional, immediate mode GUI framewor

Maps4Print 5.4k Jan 1, 2023
An easy-to-use, 2D GUI library written entirely in Rust.

Conrod An easy-to-use, 2D GUI library written entirely in Rust. Guide What is Conrod? A Brief Summary Screenshots and Videos Feature Overview Availabl

PistonDevelopers 3.3k Jan 1, 2023
Rust bindings for the FLTK GUI library.

fltk-rs Rust bindings for the FLTK Graphical User Interface library. The FLTK crate is a crossplatform lightweight gui library which can be statically

Mohammed Alyousef 1.1k Jan 9, 2023
Idiomatic, GTK+-based, GUI library, inspired by Elm, written in Rust

Relm Asynchronous, GTK+-based, GUI library, inspired by Elm, written in Rust. This library is in beta stage: it has not been thoroughly tested and its

null 2.2k Dec 31, 2022
Clear Coat is a Rust wrapper for the IUP GUI library.

Clear Coat Clear Coat is a Rust wrapper for the IUP GUI library. IUP uses native controls and has Windows and GTK backends. A macOS backend has been o

Jordan Miner 18 Feb 13, 2021
A single-header ANSI C immediate mode cross-platform GUI library

Nuklear This is a minimal-state, immediate-mode graphical user interface toolkit written in ANSI C and licensed under public domain. It was designed a

Immediate Mode UIs, Nuklear, etc. 6.9k Jan 8, 2023
The bindings to the Nuklear 2D immediate GUI library.

nuklear-rust The bindings to the Nuklear 2D immediate GUI library. Currently beta. Drawing backends: gfx-pre-ll for GFX 3D drawing engine (examples: O

Serhii Plyhun 332 Dec 27, 2022
A cross-platform GUI library for Rust, inspired by Elm

Iced A cross-platform GUI library for Rust focused on simplicity and type-safety. Inspired by Elm. Features Simple, easy-to-use, batteries-included AP

Héctor Ramón 17.5k Jan 2, 2023
Truly cross platform, truly native. multiple backend GUI for rust

WIP: Sauron-native a rust UI library that conquers all platforms ranging from desktop to mobile devices. An attempt to create a truly native, truly cr

Jovansonlee Cesar 627 Jan 5, 2023
A GUI for Cargo

A GUI for Cargo This is a project to make a GUI for cargo, built using SixtyFPS: The idea cargo install cargo-ui cargo ui Prerequisites In addition to

SixtyFPS 128 Dec 28, 2022
A cross-platform GUI library for Rust focused on simplicity and type-safety

A cross-platform GUI library for Rust, inspired by Elm

Héctor Ramón 17.5k Jan 8, 2023
Automatically create GUI applications from clap3 apps

Automatically create GUI applications from clap3 apps

Michał Gniadek 340 Dec 20, 2022
A simple news reading GUI app built in Rust

Headlines [WIP] A native GUI app built with Rust using egui. Uses newsapi.org as the source to fetch news articles. This is a WIP and the current stat

creativcoder 89 Dec 29, 2022
Build GUI applications with minimal dependencies in Rust

winapi-app-windows A crate to build applications' windows in Windows using WinAPI. This would be less confusing if the operating system was called som

Lonami 5 Jul 26, 2022
A simple GUI version of the pH calibration tool written in egui, based on the eframe template.

caliphui A simple GUI version of the pH calibration tool written in egui, based on the eframe template. Usage Native binaries are provided under relea

Peter Dunne 0 Dec 29, 2021
GUI based tool to sort and categorize images written in Rust

ImageSieve GUI based tool to sort out images based on similarity, categorize them according to their creation date and archive them in a target folder

Florian Fetz 67 Dec 14, 2022
Simplify generating an fltk gui from a data structure

This crate aims to simplify generating gui from a data structure.

fltk-rs 3 Dec 19, 2021