diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 095ea96b..13c1912a 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,8 +1,33 @@ ## Description -_Describe the change simply. Provide a reason for the change._ +### Problem or Issue being addressed -_Include screenshots of any new or modified screens (or at least explain why they were omitted)_ + + +### Solution + + + +### Additional Information + + + +### Screenshots + + + +--- This pull request is categorized as a: @@ -12,21 +37,51 @@ This pull request is categorized as a: - [ ] Documentation - [ ] Other +--- + ## Checklist -- [ ] I’ve run `pytest` and made sure all unit tests pass before sumbitting the PR - -If you modified or added functionality/workflow, did you add new unit tests? - -- [ ] No, I’m a fool -- [ ] Yes +#### I ran `pytest` locally +- [ ] All tests passed before submitting the PR +- [ ] I couldn't run the tests - [ ] N/A -I have tested this PR on the following platforms/os: +--- -- [ ] Raspberry Pi OS [Manual Build](https://github.com/SeedSigner/seedsigner/blob/dev/docs/manual_installation.md) +#### I included screenshots of any new or modified screens + +Should be part of the PR description above. +- [ ] Yes +- [ ] No +- [ ] N/A + +--- + +#### I added or updated tests + +Any new or altered functionality should be covered in a unit test. Any new or updated sequences require FlowTests. +- [ ] Yes +- [ ] No, I’m a fool +- [ ] N/A + +--- + +#### I tested this PR hands-on on the following platform(s): +- [ ] Raspberry Pi OS [Manual Build](https://github.com/SeedSigner/seedsigner/blob/dev/docs/raspberry_pi_os_build_instructions.md) - [ ] [SeedSigner OS](https://github.com/SeedSigner/seedsigner-os) on a Pi0/Pi0W board -- [ ] Other +- [ ] Emulator +--- -Note: Keep your changes limited in scope; if you uncover other issues or improvements along the way, ideally submit those as a separate PR. The more complicated the PR the harder to review, test, and merge. +#### I have reviewed these notes: +* Keep your changes limited in scope. +* If you uncover other issues or improvements along the way, ideally submit those as a separate PR. +* The more complicated the PR, the harder it is to review, test, and merge. +* We appreciate your efforts, but we're a small team of volunteers so PR review can be a very slow process. +* Please only "@" mention a contributor if their input is truly needed to enable further progress. + +- [ ] I understand + +--- + +Thank you! Please join our [Devs' Telegram group](https://t.me/seedsigner_new_devs) to get more involved. \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 87a407fe..94770cbb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,6 +16,18 @@ on: default: main required: true +# Explicitly restrict the auto-provisioned GITHUB_TOKEN to the least privilege required +# for this workflow. +permissions: + contents: read + +# Cancel superseded runs on the same branch/PR. Intermediate builds on dev/main +# have no downstream consumers (official releases are built offline), so only +# the latest commit per ref needs to be built. +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + # Increment this number as part of a PR to trigger an image build for the PR # trigger = 0 @@ -23,6 +35,7 @@ jobs: build: name: build runs-on: ubuntu-latest + timeout-minutes: 120 # Prevent resource consuming cron triggered runs in forks if: (!github.event.repository.fork || github.event_name == 'workflow_dispatch') strategy: @@ -71,6 +84,9 @@ jobs: fi - name: delete unnecessary files + # The seedsigner-os buildroot overlay only needs src/; drop everything + # else from the seedsigner checkout (tests, docs, tooling, .git, etc.) + # to keep the overlay minimal. run: | cd seedsigner-os/opt/rootfs-overlay/opt find . -mindepth 1 -maxdepth 1 ! -name src -exec rm -rf {} + @@ -151,10 +167,7 @@ jobs: ls -lRa images - name: get seedsigner latest commit hash - id: get-seedsigner-hash - run: | - git init - echo "source_hash=$(git rev-parse --short ${{ github.sha }})" >> $GITHUB_ENV + run: echo "source_hash=${GITHUB_SHA::7}" >> $GITHUB_ENV - name: write sha256sum run: | diff --git a/.github/workflows/telegram.yml b/.github/workflows/telegram.yml deleted file mode 100644 index 78b506d3..00000000 --- a/.github/workflows/telegram.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: GitHub Notify on Telegram -on: - pull_request_target: - branches: - - dev - types: - - closed - -jobs: - if_merged: - if: github.event.pull_request.merged == true - runs-on: ubuntu-latest - steps: - - name: Notify on Telegram - uses: EverythingSuckz/github-telegram-notify@main - with: - bot_token: '${{ secrets.BOT_TOKEN }}' - chat_id: '${{ secrets.CHAT_ID }}' diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 9be339c0..c9cfae88 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -2,11 +2,13 @@ name: CI on: push: - branches: - - dev - - main pull_request: +# Explicitly restrict the auto-provisioned GITHUB_TOKEN to the least privilege required +# for this workflow. +permissions: + contents: read + concurrency: # Concurrency group that uses the workflow name and PR number if available # or commit SHA as a fallback. If a new build is triggered under that @@ -19,6 +21,7 @@ concurrency: jobs: test: runs-on: ubuntu-latest + timeout-minutes: 20 strategy: matrix: # 3.10: currently used by Seedsigner @@ -34,19 +37,24 @@ jobs: uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} + cache: "pip" + cache-dependency-path: | + requirements.txt + tests/requirements.txt - name: Install dependencies run: | sudo apt-get install libzbar0 python -m pip install --upgrade pip - pip install -r requirements.txt -r tests/requirements.txt - pip install . + pip install -r requirements.txt -r tests/requirements.txt -r l10n/requirements-l10n.txt + pip install -e . + - name: Compile translations + run: python setup.py compile_catalog - name: Test with pytest run: | - mkdir artifacts + mkdir -p artifacts python -m pytest \ --color=yes \ --cov=seedsigner \ - --cov-append \ --cov-branch \ --durations 5 \ -vv @@ -69,5 +77,5 @@ jobs: path: artifacts/** retention-days: 10 # Upload also when tests fail. The workflow result (red/green) will - # be not effected by this. + # not be affected by this. if: always() diff --git a/README.md b/README.md index e483bc41..4e0ef878 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ If you have specific questions about the project, our [Telegram Group](https://t * Stateless, air-gapped operation: * Temporarily stores seeds in memory while the device is powered; all memory is wiped when power is removed. * SD card removable after boot to ensure no secret data can be written to it. - * No wifi or Bluetooth hardware onboard. + * No WiFi or Bluetooth hardware onboard. * Can only receive data via reading QR codes with its camera. * Can only send data by displaying QR codes on its screen. @@ -51,7 +51,7 @@ If you have specific questions about the project, our [Telegram Group](https://t * Import any existing seed phrase via an optimized seed word entry interface. * Partial support for Electrum Segwit seed phrases [(info)](docs/electrum.md). -* Wallet setup and transaction signing +* Wallet setup and transaction signing: * Script types: Taproot, native segwit, nested segwit, legacy (p2pkh). * Single sig and multisig xpub export. * Support for user-defined custom derivation paths. @@ -59,7 +59,7 @@ If you have specific questions about the project, our [Telegram Group](https://t * Verify the PSBT's single sig or multisig change outputs or self-transfer outputs. * Mainnet, testnet, and regtest. -* Additional utilities +* Additional utilities: * [SettingsQR](https://github.com/SeedSigner/seedsigner-settings-generator) to instantly reconfigure a SeedSigner for beginners, advanced users, or tailored to your preferences. * Scan a software wallet's receive or change address to verify that it's correct. * Address Explorer for single sig and multisig wallets. @@ -93,7 +93,7 @@ To build a SeedSigner, you will need: Notes: * You may need to solder the 40 GPIO pins (20 pins per row) to the Raspberry Pi Zero board. If you don't want to solder, most stores offer the board "with headers" already soldered on. -* The Pi Zero "W" or "2W" is often easier to find but has wifi/Bluetooth hardware. You can still use these boards and can optionally [disable the wifi/Bluetooth hardware](https://github.com/DesobedienteTecnologico/rpi_disable_wifi_and_bt_by_hardware). +* The Pi Zero "W" or "2W" is often easier to find but has WiFi/Bluetooth hardware. You can still use these boards and can optionally [disable the WiFi/Bluetooth hardware](https://github.com/DesobedienteTecnologico/rpi_disable_wifi_and_bt_by_hardware). * Other cameras with the above sensor module should work, but may not fit in the Orange Pill enclosure. * Choose the Waveshare screen carefully; they make a number of different boards that look very similar but ARE NOT COMPATIBLE! Make sure you purchase the model that has a resolution of 240x240 pixels. * Raspberry Pi 1 is also compatible, but will require a [hardware modification to the Waveshare LCD Hat](./docs/legacy_hardware.md). @@ -112,23 +112,24 @@ Instructions to build a SeedSigner OS image (using precisely the same process th ## Downloading the Software -Download the current Version (0.8.5) software image that is compatible with your Raspberry Pi Hardware. The Pi Zero 1.3 is the most common and recommended board. +Download the current Version (0.8.7) software image that is compatible with your Raspberry Pi Hardware. The Pi Zero 1.3 is the most common and recommended board. | Board | Download Image Link/Name | | --------------------- | --------------------------------- | -|**[Raspberry Pi Zero 1.3](https://www.raspberrypi.com/products/raspberry-pi-zero/)** |[`seedsigner_os.0.8.5.pi0.img`](https://github.com/SeedSigner/seedsigner/releases/download/0.8.5/seedsigner_os.0.8.5.pi0.img) | -|[Raspberry Pi Zero W](https://www.raspberrypi.com/products/raspberry-pi-zero-w/) |[`seedsigner_os.0.8.5.pi0.img`](https://github.com/SeedSigner/seedsigner/releases/download/0.8.5/seedsigner_os.0.8.5.pi0.img) | -|[Raspberry Pi Zero 2 W](https://www.raspberrypi.com/products/raspberry-pi-zero-2-w/) |[`seedsigner_os.0.8.5.pi02w.img`](https://github.com/SeedSigner/seedsigner/releases/download/0.8.5/seedsigner_os.0.8.5.pi02w.img) | -|[Raspberry Pi 1 Model B/B+](https://www.raspberrypi.com/products/raspberry-pi-1-model-b-plus/) |[`seedsigner_os.0.8.5.pi0.img`](https://github.com/SeedSigner/seedsigner/releases/download/0.8.5/seedsigner_os.0.8.5.pi0.img) | -|[Raspberry Pi 2 Model B](https://www.raspberrypi.com/products/raspberry-pi-2-model-b/) |[`seedsigner_os.0.8.5.pi2.img`](https://github.com/SeedSigner/seedsigner/releases/download/0.8.5/seedsigner_os.0.8.5.pi2.img) | -|[Raspberry Pi 3 Model B](https://www.raspberrypi.com/products/raspberry-pi-3-model-b/) |[`seedsigner_os.0.8.5.pi02w.img`](https://github.com/SeedSigner/seedsigner/releases/download/0.8.5/seedsigner_os.0.8.5.pi02w.img) | -|[Raspberry Pi 4 Model B](https://www.raspberrypi.com/products/raspberry-pi-4-model-b/) |[`seedsigner_os.0.8.5.pi4.img`](https://github.com/SeedSigner/seedsigner/releases/download/0.8.5/seedsigner_os.0.8.5.pi4.img) | -|[Raspberry Pi 400](https://www.raspberrypi.com/products/raspberry-pi-400-unit/) |[`seedsigner_os.0.8.5.pi4.img`](https://github.com/SeedSigner/seedsigner/releases/download/0.8.5/seedsigner_os.0.8.5.pi4.img) | +|**[Raspberry Pi Zero 1.3](https://www.raspberrypi.com/products/raspberry-pi-zero/)** |[`seedsigner_os.0.8.7.pi0.img`](https://github.com/SeedSigner/seedsigner/releases/download/0.8.7/seedsigner_os.0.8.7.pi0.img) | +|[Raspberry Pi Zero W](https://www.raspberrypi.com/products/raspberry-pi-zero-w/) |[`seedsigner_os.0.8.7.pi0.img`](https://github.com/SeedSigner/seedsigner/releases/download/0.8.7/seedsigner_os.0.8.7.pi0.img) | +|[Raspberry Pi Zero 2 W](https://www.raspberrypi.com/products/raspberry-pi-zero-2-w/) |[`seedsigner_os.0.8.7.pi02w.img`](https://github.com/SeedSigner/seedsigner/releases/download/0.8.7/seedsigner_os.0.8.7.pi02w.img) | +|[Raspberry Pi 1 Model B/B+](https://www.raspberrypi.com/products/raspberry-pi-1-model-b-plus/) |[`seedsigner_os.0.8.7.pi0.img`](https://github.com/SeedSigner/seedsigner/releases/download/0.8.7/seedsigner_os.0.8.7.pi0.img) | +|[Raspberry Pi 2 Model B](https://www.raspberrypi.com/products/raspberry-pi-2-model-b/) |[`seedsigner_os.0.8.7.pi2.img`](https://github.com/SeedSigner/seedsigner/releases/download/0.8.7/seedsigner_os.0.8.7.pi2.img) | +|[Raspberry Pi 3 Model B](https://www.raspberrypi.com/products/raspberry-pi-3-model-b/) |[`seedsigner_os.0.8.7.pi02w.img`](https://github.com/SeedSigner/seedsigner/releases/download/0.8.7/seedsigner_os.0.8.7.pi02w.img) | +|[Raspberry Pi 4 Model B](https://www.raspberrypi.com/products/raspberry-pi-4-model-b/) |[`seedsigner_os.0.8.7.pi4.img`](https://github.com/SeedSigner/seedsigner/releases/download/0.8.7/seedsigner_os.0.8.7.pi4.img) | +|[Raspberry Pi 400](https://www.raspberrypi.com/products/raspberry-pi-400-unit/) |[`seedsigner_os.0.8.7.pi4.img`](https://github.com/SeedSigner/seedsigner/releases/download/0.8.7/seedsigner_os.0.8.7.pi4.img) | -Note: If you have physically removed the WiFi component from your board, you will still use the image file of the original(un-modified) hardware. (Our files are compiled/based on the *processor* architecture). Although it is better to spend a few minutes upfront to determine which specific Pi hardware/model you have, if you are still unsure which hardware you have, you can try using the pi0.img file. Making an incorrect choice here will not ruin your board, because this is software, not firmware. +Note: If you have physically removed the WiFi component from your board, you will still use the image file of the original (un-modified) hardware. (Our files are compiled/based on the *processor* architecture). Although it is better to spend a few minutes upfront to determine which specific Pi hardware/model you have, if you are still unsure which hardware you have, you can try using the pi0.img file. Making an incorrect choice here will not ruin your board, because this is software, not firmware. + +**Also download** these 2 signature verification files to the same folder +[The Plaintext manifest file](https://github.com/SeedSigner/seedsigner/releases/download/0.8.7/seedsigner.0.8.7.sha256.txt) +[The Signature of the manifest file](https://github.com/SeedSigner/seedsigner/releases/download/0.8.7/seedsigner.0.8.7.sha256.txt.sig) -**also download** these 2 signature verification files to the same folder -[The Plaintext manifest file](https://github.com/SeedSigner/seedsigner/releases/download/0.8.5/seedsigner.0.8.5.sha256.txt) -[The Signature of the manifest file](https://github.com/SeedSigner/seedsigner/releases/download/0.8.5/seedsigner.0.8.5.sha256.txt.sig) Users familiar with older versions of the SeedSigner software might be surprised with how fast their software downloads now are, because since version 0.6.0 the software image files are now 100x smaller! Each image file is now under 42 Megabytes so your downloads and verifications will be very quick now (and might even seem *too* quick)! @@ -147,7 +148,7 @@ We assume you are running the commands from a computer where both [GPG](https:// ### Step 1. Verify that the signature (.sig) file is genuine: -Run GPG's *fetch-keys* command to import the SeedSigner projects public key from the popular online keyserver called *Keybase.io*, into your computers *keychain*. +Run GPG's *fetch-keys* command to import the SeedSigner project's public key from the popular online keyserver called *Keybase.io*, into your computer's *keychain*. ``` @@ -159,7 +160,7 @@ The result should confirm that 1 key was *either* imported or updated. *Ignore* Next, you will run the *verify* command on the signature (.sig) file. (*Verify* must be run from inside the same folder that you downloaded the files into earlier.) ``` -gpg --verify seedsigner.0.8.5.sha256.txt.sig +gpg --verify seedsigner.0.8.7.sha256.txt.sig ``` When the verify command completes successfully, it should display output like this: @@ -169,7 +170,7 @@ The result must display "**Good signature**". Ignore any email addresses - *onl
On the *last* output line, look at your *rightmost* 16 characters (the 4 blocks of 4). -**Crucially, we must now check WHO that Primary key fingerprint /ID belongs to.** We will start by looking at Keybase.io to see if it is the *SeedSigner project* 's public key or not. +**Crucially, we must now check WHO that Primary key fingerprint /ID belongs to.** We will start by looking at Keybase.io to see if it is the *SeedSigner project*'s public key or not.
About the warning message:

Since you are about to match the outputted fingerprint/ID against the proofs at Keybase.io/SeedSigner, and thereby confirm who the pubkey really belongs to-, you can safely ignore this warning message: @@ -184,16 +185,16 @@ On the *last* output line, look at your *rightmost* 16 characters (the 4 blocks

More about how the verify command works:

-The verify command will attempt to decrypt the signature file (sha256.sig) by trying each public key already imported into your computer. If the public key we just imported (via fetch-keys), manages to: (a) successfully decrypt the .sig file , and (b), that result matches exactly to the clear-text equivalent (.sha256) of the .sig file, then its "a good signature"! +The verify command will attempt to decrypt the signature file (sha256.sig) by trying each public key already imported into your computer. If the public key we just imported (via fetch-keys), manages to: (a) successfully decrypt the .sig file , and (b), that result matches exactly to the clear-text equivalent (.sha256) of the .sig file, then it's "a good signature"! -Crucially, we must still manually check who *exactly* owns the Key ID which gave us that "Good signature". Thats what the warning message means- Who does the matching key really belong to? We will start by looking at keybase.io to see if it is "The SeedSigner project"'s public Key or not. +Crucially, we must still manually check who *exactly* owns the Key ID which gave us that "Good signature". That's what the warning message means- Who does the matching key really belong to? We will start by looking at keybase.io to see if it is "The SeedSigner project"'s public Key or not. Note that it is the file hashes of .sig and .sha256 that *verify* compares, not their raw contents.


-Now to determine ***who*** the Public key ID belongs to: Goto [Keybase.io/SeedSigner](https://keybase.io/seedsigner) +Now to determine ***who*** the Public key ID belongs to: Go to [Keybase.io/SeedSigner](https://keybase.io/seedsigner)
![SS - Keybase Website PubKey visual matching1_Cropped-80pct](https://user-images.githubusercontent.com/91296549/215326193-97c84e35-5570-4e52-bf3f-e86d367c8908.jpg) @@ -207,13 +208,13 @@ Now to determine ***who*** the Public key ID belongs to: Goto [Keybase.io/SeedSi
Learn more about how keybase.io helps you check that someone (online) is who they say they are:

Keybase.io allows you to independently verify that the public key saved on Keybase.io, is both authentic and that it belongs to the organization it claims to represent. - Keybase has already checked the three pubkey file locations cryptographically when they were saved there. You can further verify the key publications if you would like: + Keybase has already checked the three pubkey file locations cryptographically when they were saved there. You can further verify the key publications if you would like: - *via Keybase*: By clicking on any of the three blue badges to see that the "proof" was published at that location. (The blue badge marked as tweet, is in the most human-readable form and it is also a bi-directional link on Twitter) or, - *without keybase (out-of-band)*: By using these 3 links directly: [Twitter](https://twitter.com/SeedSigner/status/1530555252373704707), [Github](https://gist.github.com/SeedSigner/5936fa1219b07e28a3672385b605b5d2) and [SeedSigner.com](https://seedsigner.com/keybase.txt). This method can be used if you would like to make an even deeper, independent inspection without relying on Keybase at all, or if the Keybase.io site is no longer valid or it is removed entirely. -Once you have used one of these methods, you will know if the Public Key stored on Keybase, is genuinely from the SeedSinger Project or not. +Once you have used one of these methods, you will know if the Public Key stored on Keybase, is genuinely from the SeedSigner Project or not.


@@ -224,29 +225,30 @@ If the two ID's do *not* match, then you must stop here immediately. Do not cont ### Step 2. Verifying that the *software images/binaries* are genuine -Now that you have confirmed that you do have the real SeedSigner Project's Public Key (ie the 16 characters match) - you can return to your terminal window. Running the *shasum* command, is the final verification step and will confirm (via file hashing) that the software code/image files, were also not altered since publication, or even during your download process. -(Prior to version 0.6.0 , your verify command will check the .zip file which contains the binary files.) +Now that you have confirmed that you do have the real SeedSigner Project's Public Key (ie the 16 characters match) - you can return to your terminal window. Running the *shasum* command, is the final verification step and will confirm (via file hashing) that the software code/image files, were also not altered since publication, or even during your download process. +(Prior to version 0.6.0, your verify command will check the .zip file which contains the binary files.) **On Linux or OSX:** Run this command ``` -shasum -a 256 --ignore-missing --check seedsigner.0.8.5.sha256.txt +shasum -a 256 --ignore-missing --check seedsigner.0.8.7.sha256.txt ``` +Note: macOS versions earlier than v11 (Big Sur) do not support the `--ignore-missing` flag. You can omit it and disregard any missing file warnings. **On Windows (inside Powershell):** Run this command ``` -CertUtil -hashfile seedsigner_os.0.8.5.Insert_Your_Pi_Models_binary_here_For_Example_pi02w.img SHA256 +CertUtil -hashfile seedsigner_os.0.8.7.Insert_Your_Pi_Models_binary_here_For_Example_pi02w.img SHA256 ``` On Windows, you must then manually compare the resulting file hash value to the corresponding hash value shown inside the .SHA256 cleartext file.
Wait up to 30 seconds for the command to complete, and it should display: ``` -seedsigner_os.0.8.5.[Your_Pi_Model_For_Example:pi02w].img: OK +seedsigner_os.0.8.7.[Your_Pi_Model_For_Example:pi02w].img: OK ``` -**If you receive the "OK" message** for your **seedsigner_os.0.8.5.[Your_Pi_Model_For_Example:pi02w].img file**, as shown above, then your verification is fully complete! +**If you receive the "OK" message** for your **seedsigner_os.0.8.7.[Your_Pi_Model_For_Example:pi02w].img file**, as shown above, then your verification is fully complete! **All of your downloaded files have now been confirmed as both authentic and unaltered!** You can proceed to create/write your MicroSD card😄😄 !! -If your file result shows "FAILED", then you must stop here immediately. Do not continue. Contact us for assistance at the Telegram group address above. +If your file result shows "FAILED", then you must stop here immediately. Do not continue. Contact us for assistance at the Telegram group address above.
@@ -265,19 +267,19 @@ To write the SeedSigner software onto your MicroSD card, there are a few options | DD Command Line Utility | Built-in to Linux and MacOS, the DD (Data Duplicator) is a tool for advanced users. If not used carefully it can accidentally format the incorrect disk! | Built-in to Linux and MacOS | Be sure to download the software from the genuine publisher. -Either of the Etcher or Pi Imager software is recommended. Some SeedSigner users have reported a better experience with one or the other. So, if the one application doesn’t work well for your particular machine, then please try the other one. +Either of the Etcher or Pi Imager software is recommended. Some SeedSigner users have reported a better experience with one or the other. So, if the one application doesn't work well for your particular machine, then please try the other one.
### **General Considerations:** The writing and verify steps are very quick from version 0.6.0 upwards, so please pay close attention to your screen. Make sure to set any write-protection physical slider on the MicroSD Card Adapter to UN-locked. -You also don’t need to pre-format the MicroSD beforehand. You *dont* need to unzip any .zip file beforehand. -Current Etcher and Pi Imager software will perform a verify action (by default) to make sure the card was written successfully! Watching for that verify step to complete successfully, can save you a lot of headaches if you later need to troubleshoot issues where your SeedSigner device doesn’t boot up at power on. -Writing the MicroSd card is also known as flashing. +You also don't need to pre-format the MicroSD beforehand. You *don't* need to unzip any .zip file beforehand. +Current Etcher and Pi Imager software will perform a verify action (by default) to make sure the card was written successfully! Watching for that verify step to complete successfully, can save you a lot of headaches if you later need to troubleshoot issues where your SeedSigner device doesn't boot up at power on. +Writing the MicroSD card is also known as flashing. It will overwrite everything on the MicroSD card. If the one application fails for you, then please try again using our other recommended application. -Advanced users may want to try the Linux/MacOS *DD* command instead of using Etcher or Pi Imager, however, a reminder is given that DD can overwrite the wrong disk if you are not careful ! +Advanced users may want to try the Linux/MacOS *DD* command instead of using Etcher or Pi Imager, however, a reminder is given that DD can overwrite the wrong disk if you are not careful! #### **Specific considerations for Windows users:** -Use the Pi imager software as your first choice on Windows. Windows can sometimes flag the writing of a MicroSD as risky behaviour and hence it may prevent this activity. If this happens, your writing/flashing will fail, hang or wont even begin, in which case you should to try to run the Etcher/Pi-Imager app "As administrator", (right-click and choose that option). It can also be blocked by windows security in some cases, so If you have the (non-default) *Controlled Folder Access* option set to active, try turning that *off* temporarily. +Use the Pi imager software as your first choice on Windows. Windows can sometimes flag the writing of a MicroSD as risky behaviour and hence it may prevent this activity. If this happens, your writing/flashing will fail, hang or won't even begin, in which case you should try to run the Etcher/Pi-Imager app "As administrator", (right-click and choose that option). It can also be blocked by windows security in some cases, so If you have the (non-default) *Controlled Folder Access* option set to active, try turning that *off* temporarily. @@ -288,7 +290,7 @@ Use the Pi imager software as your first choice on Windows. Windows can sometime ### Open Pill -The Open Pill enclosure design is all about quick, simple and inexpensive depoloyment of a SeedSigner device. The design does not require any additional hardware and can be printed using a standard FDM 3D printer in about 2 hours, no supports necessary. A video demonstrating the assembly process can be found [here](https://youtu.be/gXPFJygZobEa). To access the design file and printable model, click [here](https://github.com/SeedSigner/seedsigner/tree/main/enclosures/open_pill). +The Open Pill enclosure design is all about quick, simple and inexpensive deployment of a SeedSigner device. The design does not require any additional hardware and can be printed using a standard FDM 3D printer in about 2 hours, no supports necessary. A video demonstrating the assembly process can be found [here](https://youtu.be/gXPFJygZobEa). To access the design file and printable model, click [here](https://github.com/SeedSigner/seedsigner/tree/main/enclosures/open_pill). ### Orange Pill diff --git a/docs/code_structure.md b/docs/code_structure.md index 50b7d315..5a0f0276 100644 --- a/docs/code_structure.md +++ b/docs/code_structure.md @@ -1,21 +1,17 @@ # 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. +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.screens`: Reusable 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 ``, `