Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v0.5.0 Pre-Release 1 #154

Merged
merged 124 commits into from
Mar 2, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
124 commits
Select commit Hold shift + click to select a range
994573c
Merge branch 'SeedSigner:main' into main
newtonick Sep 7, 2021
3986c9d
Merge branch 'SeedSigner:main' into main
newtonick Sep 10, 2021
dab55c7
Font size demo screen
kdmukai Sep 12, 2021
91d3671
Merge branch 'camera_rotation' into ui_overhaul
kdmukai Sep 18, 2021
f9817fc
Initial TextArea; still very raw
kdmukai Sep 20, 2021
a118bd5
font supersampling for better antialiasing
kdmukai Sep 20, 2021
3bb74a7
Supersampling demo
kdmukai Sep 20, 2021
82fe59e
"orange' comparison added
kdmukai Sep 20, 2021
b001e29
Added SemiBold tests at 16px and 17px
kdmukai Sep 21, 2021
a49518c
Added Regular 16px supersampled
kdmukai Sep 21, 2021
b067be7
Merge branch '0_4_5' into ui_overhaul
kdmukai Sep 25, 2021
a6e4728
Interim commit
kdmukai Sep 26, 2021
b8d33dd
Interim commit
kdmukai Sep 28, 2021
6638901
view_function is now View_cls; first CBVs
kdmukai Sep 29, 2021
b888653
Reusable text vertical centering
kdmukai Oct 1, 2021
5945cf7
Initial LargeButtonScreen implementation; various refactoring
kdmukai Oct 3, 2021
96d07ff
Interim commit; IconButton in progress
kdmukai Oct 9, 2021
65fbc65
Interim commit; working icons; top_nav wired
kdmukai Oct 10, 2021
5a10cb4
Further UI implementation; lots of improvements
kdmukai Oct 17, 2021
22d2b0b
Slight cleanup, further standardization
kdmukai Oct 17, 2021
9095361
interim commit
kdmukai Oct 24, 2021
f46fad9
Interim commit
kdmukai Oct 25, 2021
54f9674
Bugfixes; improved SeedValidScreen
kdmukai Oct 26, 2021
4c174ed
Adds WarningScreen and DireWarningScreen; first Warning views
kdmukai Nov 1, 2021
954908b
add krux urtypes to repo
newtonick Nov 9, 2021
2e7fe4d
Nearly complete first pass at xpub export
kdmukai Nov 12, 2021
095a239
Update seed_views.py
kdmukai Nov 12, 2021
e944950
SeedValidScreen now using IconTextLine
kdmukai Nov 14, 2021
d821f1d
interim commit
kdmukai Nov 14, 2021
6470adf
Merge branch 'SeedSigner:main' into main
newtonick Nov 19, 2021
6f960ec
Adds `Destination` class to hold routing details
kdmukai Nov 20, 2021
e1a9444
Full Xpub export flow now working!
kdmukai Nov 21, 2021
1ace9ca
Moved Keyboard; tentative success on custom derivation Screen
kdmukai Nov 21, 2021
d59d531
Completed custom derivation keyboard UI; cleanup
kdmukai Nov 22, 2021
1deab17
Passphrase keyboard integration
kdmukai Nov 22, 2021
af9726e
Eliminated "Advanced" Seed Options screen
kdmukai Nov 22, 2021
1a3a6c7
Cleanup
kdmukai Nov 26, 2021
c6d9c83
Initial integration with the Settings QR Generator
kdmukai Nov 30, 2021
fabf355
Bugfix on changed incoming attr
kdmukai Nov 30, 2021
106f654
Merge branch 'SeedSigner:main' into main
newtonick Dec 2, 2021
6cfae5c
Merge branch 'main' into urtypes
newtonick Dec 2, 2021
1a037d7
Settings now json; Xpub export flow skipping screens based on Settings
kdmukai Dec 2, 2021
5b9d4d1
Bug fixes; deeper config integration to alter flows, menus
kdmukai Dec 5, 2021
cebf8ea
Scrolling Settings menu
kdmukai Dec 14, 2021
2a82ff0
Sizing ButtonList to specs, added up arrow
kdmukai Dec 14, 2021
afc3d9c
add ur xpub export
newtonick Jan 7, 2022
2d6018e
cleanup; clearer comments
kdmukai Jan 10, 2022
98d9958
Initial SeedWordsView; some reorg
kdmukai Jan 12, 2022
97682f6
Interim commit; ComponentThread in progress but buggy
kdmukai Jan 17, 2022
2571d49
Adding Renderer.lock protections
kdmukai Jan 18, 2022
d094de9
update
newtonick Jan 22, 2022
f2cbbdd
update urtypes to use https instead of git for module remote path
newtonick Jan 23, 2022
1b3db71
update requirements to include urtypes and readme to pull submodules
newtonick Jan 23, 2022
cd7e3a0
Initial psbt scanning, routing, and details page
kdmukai Jan 26, 2022
e2989eb
add ur account test case
newtonick Jan 26, 2022
24c0544
test correction
newtonick Jan 26, 2022
f6f2f94
psbt overview screen w/mini tx explorer
kdmukai Jan 27, 2022
0ccdd04
initial PSBT pictogram animation
kdmukai Jan 27, 2022
b29971b
correct keypath depth
newtonick Jan 27, 2022
61d2224
change default QR background color to 777777 from FFFFFF
newtonick Jan 27, 2022
fdb11e5
animation tweaks
kdmukai Jan 28, 2022
1f12f7e
Merge pull request #139 from newtonick/urtypes
SeedSigner Jan 28, 2022
d862898
PSBT addr details screens
kdmukai Feb 2, 2022
7408fdc
Update developer_tips.md
kdmukai Feb 2, 2022
17e0ff9
BaseScreen.components added to eliminate boilerplate render() calls
kdmukai Feb 2, 2022
5ba6a97
Modifying tx sat calculation display; import bugfix
kdmukai Feb 3, 2022
2f3ddc8
Update renderer.py
kdmukai Feb 3, 2022
fc1a1f6
Change verification framework; threading improvements; loading screen
kdmukai Feb 5, 2022
86d356d
Update .gitignore
kdmukai Feb 5, 2022
b6951fd
PSBT input logic; nicer loading screen; routing method improvements
kdmukai Feb 6, 2022
ab061dc
Evolving PSBT change screen; FontAwesome integration
kdmukai Feb 10, 2022
e9ad26b
Complete (initial) PSBT signing flow; more FontAwesome integration
kdmukai Feb 10, 2022
0b9cac0
Settings rewrite; first `SettingsDefinition` implementation
kdmukai Feb 12, 2022
73911f9
Cleanup; removing unnecessary fonts and icons
kdmukai Feb 12, 2022
d908047
Interim commit before ugly merge from main
kdmukai Feb 13, 2022
02ca5ac
Merge remote-tracking branch 'upstream/0_4_6' into ui_overhaul
kdmukai Feb 14, 2022
225f098
Work in progress after merge w/main; Lots of breaking changes in Sett…
kdmukai Feb 16, 2022
a486a69
Scanning a SeedQR works again
kdmukai Feb 16, 2022
52cc675
Fix to scan PSBTs
kdmukai Feb 16, 2022
e8272ec
Fixes for completing psbt flow
kdmukai Feb 17, 2022
5cd8792
QR code brightness up and down
kdmukai Feb 17, 2022
6a84859
Xpub export fixed
kdmukai Feb 17, 2022
d32a60c
NotYetImplementedView for better user experience during preview release
kdmukai Feb 17, 2022
bfde0aa
Initial cut at a Pre-Release roadmap
kdmukai Feb 17, 2022
a47f68b
Update prerelease_roadmap.md
kdmukai Feb 17, 2022
f0cf0f8
Update prerelease_roadmap.md
kdmukai Feb 17, 2022
107879d
Rename to more general Feature Roadmap
kdmukai Feb 17, 2022
94819ec
Update feature_roadmap.md
kdmukai Feb 17, 2022
459e477
Update feature_roadmap.md
kdmukai Feb 17, 2022
cb422aa
Update feature_roadmap.md
kdmukai Feb 17, 2022
0c63f1e
Update feature_roadmap.md
kdmukai Feb 17, 2022
863d36b
minor tweaks
kdmukai Feb 18, 2022
cf65446
Merge branch 'compact_seed_qr' into ui_overhaul
kdmukai Feb 18, 2022
0401989
bugfix; Finished routing to SigningError view
kdmukai Feb 18, 2022
70f7940
Persistent settings; L/R nav integrated with BACK button
kdmukai Feb 18, 2022
9aaaada
Update controller.py
kdmukai Feb 19, 2022
bc98eef
Merge branch '0_4_6b' into ui_overhaul
kdmukai Feb 20, 2022
5e62059
Refactored EncodeQR; pythonic refactors; Seed slots removed
kdmukai Feb 20, 2022
873dc1d
Major DecodeQR refactoring
kdmukai Feb 21, 2022
4a8d977
Power off sequence, ResetView
kdmukai Feb 21, 2022
baca1d3
Custom icon font integration; PSBT screen tweaks
kdmukai Feb 22, 2022
721309b
Update __init__.py
kdmukai Feb 22, 2022
c9fa140
Missing file fixes
kdmukai Feb 23, 2022
b2617b2
Moving all Settings constants into Settings for SettingsQR generator …
kdmukai Feb 23, 2022
05dc18f
Delete .gitmodules
kdmukai Feb 23, 2022
35a03d7
Update setup.py
kdmukai Feb 23, 2022
7e4046b
experimental test for SettingsQR Generator integration
kdmukai Feb 23, 2022
1e23b63
Update settings_definition.py
kdmukai Feb 24, 2022
79b9182
Edits to support more compact SettingsDefinition values
kdmukai Feb 25, 2022
2c85ae8
Fixes for SettingsQR ingestion
kdmukai Feb 25, 2022
a4bb77b
Minor bugfix, compatibility fix
kdmukai Feb 25, 2022
00f68b2
settings cleanup
kdmukai Feb 25, 2022
00e5ad6
Bugfix for mnemonic seed QRs (ala iancoleman bip39 website)
kdmukai Feb 26, 2022
0dc35b0
PSBT flow bugfixes for self-transfers
kdmukai Feb 26, 2022
0f47d9a
Multisig psbt signing works again
kdmukai Feb 27, 2022
fca387c
PSBT Math screen tweaks
kdmukai Feb 27, 2022
4d37820
PassphraseVerification; handle long TopNav titles
kdmukai Feb 27, 2022
8ae8c61
slight optimization
kdmukai Feb 28, 2022
a7b1579
Removing debugging
kdmukai Mar 1, 2022
2bcb4cb
Passphrase "BACK" button bugfix; initial Component positioning refactor
kdmukai Mar 1, 2022
42ca0cb
Button now dynamically rendering screen_* positions; BACK from SeedVa…
kdmukai Mar 2, 2022
3161472
Interim routing tweaks for Pre-Release 1
kdmukai Mar 2, 2022
5f2da8a
Left nav top btn flexibility; Discard Seed dialogue; PSBT w/self-xfer…
kdmukai Mar 2, 2022
8b4d1ab
Update psbt_screens.py
kdmukai Mar 2, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@
__pycache__/
src/seedsigner.egg-info/
.nova
.vscode
src/seedsigner/models/settings_definition.json
21 changes: 21 additions & 0 deletions docs/code_structure.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Code Structure

SeedSigner roughly follows a Model-View-Controller approach. Like in a typical web app (e.g. Flask) the `View`s can be called as needed like individual web urls. After completing display and interaction with the user, the `View` then decides where to route the user next, analogous to a web app returning a `response.redirect(url)`.

The `Controller` then ends up being quite stripped down. For example, there's no need for a web app's `urls.py` since there are no mappings from url to `View` to maintain since we're not actually using a url/http routing approach.

`View`s have to handle user interaction so there are `while True` loops that cycle between waiting for user input, gathering data, and then updating the UI components accordingly. You wouldn't find this kind of cycle in a web app because this sort of interactive user input is handled in the browser at the html/css/js level.



* `Model`s: Store the persistent settings, the in-memory seeds, current wallet information, etc.
* `Controller`: Manages the state of the world and controls access to global resources.
* `View`s: Implementation of each screen. Prepares relevant data for display. Must also instantiate the display objects that will actually render the UI.
* `gui.screens`: Re-usable formatted UI renderers.
* `gui.components`: Basic individual UI elements that are used by the `templates` such as the top nav, buttons, button lists, text displays.

In an typical webserver context the `View` would send data to an html template (e.g. Jinja) which would then dynamically populate the page with html elements like `<input>`, `<button>`, `<img>`, etc. This is analgous to our `gui.screens` constructing a UI renderer by piecing together various `gui.components` as needed.



`Controller` is a global singleton that any `View` can access and update as needed.
67 changes: 67 additions & 0 deletions docs/feature_roadmap.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# Feature Roadmap

Current focus: v0.5.0 preview releases.

*Note: It may or may not make sense to do minor bugfix preview releases along the way (e.g. 1.0 -> 1.1).*


## v0.5.0 Pre-Release 1.x
* Scan SeedQR / CompactSeedQR
* Add/Edit passphrase
* View seed words w/configurable warnings
* Export xpub w/configurable warnings and flow determined by Settings
* Scan PSBT
* Full PSBT review screens
* "Full Spend" (no change) warning
* Fully verify PSBT change addrs
* Send signed PSBT via QR
* QR display dimming/brightness UP/DOWN
* Subset of configurable Settings; persistent Settings storage
* SettingsQR integration proof-of-concept

Screens will be functional but not necessarily in their final presentation state (icons, text, positioning, etc).


## v0.5.0 Pre-Release 2.x
* Existing screen refinement (visual presentation, text, etc)
* Create new seed via image entropy
* Manual mnemonic seed word entry
* 12th/24th word calc
* SeedQR/CompactSeedQR manual transcription UI w/configurable UI style (dots vs grid)
* Single sig address scan and verification
* SettingsQR standalone UI refinement
* Fix broken tests
* All GUI Components support scrollable Screens


## v0.5.0 Pre-Release 3.x
* Further existing screen refinement
* "Final" bugfixes
* Create new seed via dice rolls
* Custom derivation paths in xpub export flow
* QR display dimming/brightness, framerate, density(?) controls in transparent overlay
* HRF partner logo on startup
* Improve test suite coverage


## Initial v0.5.0 Release
All of the above!


## Beyond v0.5.0
These features will not be included in the initial v0.5.0 release and will have varying degrees of priority for subsequent releases (or possibly not at all).

* Multisig wallet descriptor QR scan(?) and addr verification(?)
* Multi-language support (Transifex free for open source projects)
* Multisig: sign PSBT with multiple keys at once.
* Custom OS, possibly with swappable SD card PSBT and multisig wallet descriptor storage
* Decoy game mode at launch (Snake, Tetris, Sudoku...?)
* BIP-39 wordlists in additional languages
* Address message signing
* UI color scheme customization


# v0.6 and Beyond...?
* Alternate hardware profile / touchscreen
* PGP signer
* Liquid?
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

setuptools.setup(
name="seedsigner",
version="0.4.4",
version="0.5.0",
author="SeedSigner",
author_email="author@example.com",
description="Build an offline, airgapped Bitcoin signing device for less than $50!",
Expand Down
16 changes: 0 additions & 16 deletions src/default_settings.ini

This file was deleted.

14 changes: 1 addition & 13 deletions src/main.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,4 @@
import configparser
import sys
import time

from seedsigner.controller import Controller


config = configparser.ConfigParser()
config.read("settings.ini")

# One-time setup to intialize the one and only Controller
Controller.configure_instance(config)

# Get the one and only Controller instance and start our main loop
controller = Controller.get_instance()
controller.start()
Controller.get_instance().start()
1 change: 1 addition & 0 deletions src/seedsigner/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from .controller import Controller
6 changes: 4 additions & 2 deletions src/seedsigner/camera.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@

from picamera import PiCamera
from PIL import Image
from seedsigner.helpers import PiVideoStream, Singleton
from seedsigner.models import Singleton
from seedsigner.helpers import PiVideoStream
from seedsigner.models.settings import SettingsConstants



Expand All @@ -18,7 +20,7 @@ def get_instance(cls):
from seedsigner.models import Settings
if cls._instance is None:
cls._instance = cls.__new__(cls)
cls._instance._camera_rotation = Settings.get_instance().camera_rotation
cls._instance._camera_rotation = int(Settings.get_instance().get_value(SettingsConstants.SETTING__CAMERA_ROTATION))
return cls._instance


Expand Down
Loading