Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
3006727
French translation adjust by Jeanne and Jean Do
odudex Oct 27, 2025
fadf12c
add TZT to and remove bit from action build and release script
odudex Oct 27, 2025
cae75bb
add TZT to action build II
odudex Oct 27, 2025
a8873c6
Merge branch 'main' into develop
odudex Oct 27, 2025
142fd28
re-add WonderK to changelog
odudex Oct 27, 2025
c6b4e27
Merge branch 'main' into develop
odudex Oct 27, 2025
05bbb0c
docs: adjust deviced images
odudex Oct 28, 2025
e1cf1c2
Merge branch 'main' into develop
odudex Oct 30, 2025
dd36f47
New Device: Embed Fire (#738)
odudex Oct 30, 2025
9eb4ebe
Embed Fire - update Maixpy
odudex Oct 30, 2025
e6b895e
Embed Fire - update krux build script
odudex Oct 30, 2025
8df6ac2
Add backtick to NUM_SPECIAL_2 (#766)
tadeubas Nov 13, 2025
135ff2d
screensaver bugfix: fix trigger condition (#761)
odudex Nov 13, 2025
6806a79
Embit update: Improved BIP39 mnemonic validation (#759)
odudex Nov 13, 2025
15e4f26
update CHANGELOG
odudex Nov 13, 2025
07d9b2c
Docs: add new cam to embed fire (#762)
tadeubas Nov 17, 2025
23dd732
Datum better menu btn offset (#770)
tadeubas Nov 17, 2025
fad4a0b
Give warning for non-ASCII BIP39-passphrase (#769)
tadeubas Nov 17, 2025
7848702
Add info about missing CH341 driver for Mac OS (#774)
tadeubas Nov 17, 2025
d885de6
docs: update Mac driver troubleshooting
odudex Nov 18, 2025
66e8ea1
docs: update Mac driver troubleshooting II
odudex Nov 18, 2025
d73c689
docs refactor parts add info about PPI (#775)
tadeubas Nov 19, 2025
df07d2e
Docs: info about embed fire loose touchscreen (#779)
tadeubas Nov 22, 2025
37085e3
Kboot: Disable "interactive mode" (Embed Fire issue) (#778)
odudex Nov 22, 2025
fd46e8d
True Binary QR codes (#777)
odudex Nov 22, 2025
8e6e580
UR QR codes: reduce density using upper case (#776)
odudex Nov 22, 2025
3ddefc5
bump version to 25.11.beta1
odudex Nov 22, 2025
f11b9e1
Extend USB list port macOS command with more possible outputs (#773)
newtonick Nov 17, 2025
30efd63
Minor UI change: Add line break for "bits/px" Shannon's entropy text …
kdmukai Nov 24, 2025
f091ec7
Refactor capture entropy test to be less fragile, more DRY (#781)
kdmukai Nov 25, 2025
f15e198
fix: pMofN QRs now deal with bytes data
odudex Nov 25, 2025
1d6113f
Fix mnemonic index number display for replacement words (#785)
kdmukai Nov 26, 2025
34f03e5
UI tweak: Adjust mnemonic list alignment (#786)
kdmukai Nov 26, 2025
8767792
docs: update installer info (#782)
qlrd Nov 30, 2025
53fa4d2
docs: update installer info - fix typo
odudex Nov 30, 2025
6fa9e2d
fix: Krux script wrong baudrate for dock (#792)
tadeubas Dec 1, 2025
38325dc
fix: Compact SeedQR broken by commit f15e198 (#794)
odudex Dec 1, 2025
53ebb44
Merge branch 'main' into develop
odudex Dec 2, 2025
0f0bb13
Small change on Touch Threshold, Buttons Debounce and Swipe Threshold…
tadeubas Dec 2, 2025
499a163
True binary QRs: Deal with binary encoded UR QR code (#798)
odudex Dec 4, 2025
9a06ae7
Datum crypto-bip39: join list so Datum can load and display it (#799)
odudex Dec 4, 2025
573de43
Inverted Color QR Code Decoding (#795)
odudex Dec 4, 2025
268f3f7
chore: require urllib3 >2.6
odudex Dec 8, 2025
ab08d5f
ci: add convetional commits to krux (#787)
qlrd Dec 8, 2025
57fbf1a
Merge branch 'main' into develop
odudex Dec 9, 2025
1179108
fix: adjust fingerprint warning message for rare case (#801)
tadeubas Dec 10, 2025
b748413
docs: add lavarand (#764)
tadeubas Dec 10, 2025
86340f3
feat: Loading a Descriptor Sets Wallet Attributes (#802)
odudex Dec 17, 2025
97d1fb3
docs: update telegram group link
odudex Jan 13, 2026
eab445b
fix: build process (#823)
tadeubas Jan 22, 2026
acf84c9
chore: update black
odudex Jan 22, 2026
6695d32
chore: update black follow-up
odudex Jan 22, 2026
5dcab5f
Simplify internal key validation for taproot (#820)
rafaelpac Jan 22, 2026
97d37c4
fix: printer not changing TX/RX pin (#810)
tadeubas Jan 22, 2026
7644f96
refactor: black following up #820
odudex Jan 22, 2026
5ae4ff5
docs: update changelog following up #820
odudex Jan 22, 2026
5897828
docs: change TZT link to find other sellers (#824)
tadeubas Mar 19, 2026
1b3f30a
refactor: optimization on usage of foundation-ur and urtypes libs (#825)
tadeubas Mar 19, 2026
def984e
chore: Update python environment dependencies (#835)
odudex Mar 19, 2026
274b2bc
chore: fetch Embit from master branch
odudex Mar 20, 2026
0befce2
chore: add Embed Fire and WonderK to sign_release script
odudex Mar 20, 2026
3646137
chore: enable mkdocs livereload for poe docs task (restore hot reload…
tadeubas Mar 24, 2026
a7f117f
fix: long addresses having cropped final letters at addresses page (#…
odudex Mar 24, 2026
94760c5
docs: update CHANGELOG
odudex Mar 24, 2026
bf72db2
chore: Add Embed Fire and WonderK to Actions build script
odudex Mar 24, 2026
941c4df
chore: bump release version
odudex Mar 24, 2026
76feb7b
Merge pull request #840 from selfcustody/release-26.03.0
odudex Mar 26, 2026
c14d14d
Add Catalan (ca-ES) translation
bitcoisas Apr 24, 2026
9ccc244
Merge branch 'main' into help-xavier-831
xavierb1777 Apr 24, 2026
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
50 changes: 49 additions & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
build:
strategy:
matrix:
device: [maixpy_m5stickv, maixpy_amigo, maixpy_dock, maixpy_yahboom, maixpy_cube, maixpy_wonder_mv, maixpy_tzt]
device: [maixpy_m5stickv, maixpy_amigo, maixpy_dock, maixpy_yahboom, maixpy_cube, maixpy_wonder_mv, maixpy_tzt, maixpy_embed_fire, maixpy_wonder_k]
runs-on: ubuntu-latest
services:
registry:
Expand Down Expand Up @@ -209,6 +209,54 @@ jobs:
path: ${{ steps.extract-tzt.outputs.destination }}
name: build-tzt

- name: Build for Embed Fire
if: matrix.device == 'maixpy_embed_fire'
uses: docker/build-push-action@v6
with:
context: .
build-args: DEVICE=maixpy_embed_fire
push: true
tags: localhost:5000/selfcustody/krux-builder-embed-fire:latest
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max
- name: Extract firmware for Embed Fire
id: extract-embed-fire
if: matrix.device == 'maixpy_embed_fire'
uses: shrink/actions-docker-extract@v3
with:
image: localhost:5000/selfcustody/krux-builder-embed-fire:latest
path: /src/firmware/Kboot/build/.
- name: Upload firmware for Embed Fire
if: matrix.device == 'maixpy_embed_fire'
uses: actions/upload-artifact@v4
with:
path: ${{ steps.extract-embed-fire.outputs.destination }}
name: build-embed-fire

- name: Build for WonderK
if: matrix.device == 'maixpy_wonder_k'
uses: docker/build-push-action@v6
with:
context: .
build-args: DEVICE=maixpy_wonder_k
push: true
tags: localhost:5000/selfcustody/krux-builder-wonder-k:latest
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max
- name: Extract firmware for WonderK
id: extract-wonder-k
if: matrix.device == 'maixpy_wonder_k'
uses: shrink/actions-docker-extract@v3
with:
image: localhost:5000/selfcustody/krux-builder-wonder-k:latest
path: /src/firmware/Kboot/build/.
- name: Upload firmware for WonderK
if: matrix.device == 'maixpy_wonder_k'
uses: actions/upload-artifact@v4
with:
path: ${{ steps.extract-wonder-k.outputs.destination }}
name: build-wonder-k

- name: Move cache
run: |
rm -rf /tmp/.buildx-cache
Expand Down
13 changes: 13 additions & 0 deletions .github/workflows/conventional-commits.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
name: Conventional Commits

on:
pull_request: # We only need to check commit messages in PRs

jobs:
conventional-commits:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: webiny/action-conventional-commits@v1.3.0
with:
allowed-commit-types: "feat,fix,docs,style,refactor,test,i18n,ci,chore,git"
2 changes: 1 addition & 1 deletion .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,6 @@ jobs:
- name: Build coverage file
run: poetry run pytest --cache-clear --cov src/krux --cov-report xml tests
- name: Upload coverage reports to Codecov with GitHub Action
uses: codecov/codecov-action@v4
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
32 changes: 32 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,32 @@
# Changelog 26.03.0 - March 2025

### New Device Support: Embed Fire
This device shares similarities with the WonderMV but stands out with its larger 2.4" touchscreen.

### New Device Support: WonderK PRO
From the wonderful land of Korea, a new creation arrives: the WonderK PRO. Created by an entrepreneur who loves the Krux project, the WonderK follows in the footsteps of the WonderMV, but boasts a larger 2.8" display! Computer simulator for the WonderK device is also included.

### Loading a Descriptor Sets Wallet Attributes
Loading a descriptor is now a quick way to set wallet attributes, as all necessary information is extracted automatically. This eliminates the need for manual configuration and ensures consistency with your coordinator wallet.

### Changed BIP39 Passphrase Validation
Krux now displays a warning instead of blocking QR-encoded passphrases that contain non-ASCII characters. Users are encouraged to use QR codes containing only ASCII passphrases or non-ASCII that have already been normalized to NFKD.

### Easier to Scan UR QR Codes
Exported Uniform Resource (UR) QR codes, a widely adopted standard for exchanging PSBTs, now use uppercase data to reduce QR density, improving scan reliability without increasing the number of frames.

### Other Bug Fixes and Improvements
- Settings: Reduced default _Buttons Debounce_ value (with an even lower default on _M5StickV_)
- Settings: Expanded value ranges for _Touch Threshold_ and _Buttons Debounce_
- Swipe handling: Detection threshold has been slightly reduced
- Keypad: Added backtick **`**
- Bugfix: Screensaver not activating in menu pages without statusbar
- Embit: Improved BIP39 mnemonic validation
- Bug Fix: Corrected handling of certain binary-encoded QR codes
- Fix fingerprint unset warn message for rare case
- Improved QR code decoding performance and added inverted color QR code detection
- Allow non deterministic chaincodes to be used with Taproot provably unspendable keys

# Changelog 25.10.1 - October 2025

### Bugfix: Krux encrypted mnemonic as a passphrase is invalid, but no error was raised
Expand Down Expand Up @@ -28,6 +57,9 @@ The Maix Bit device has long been discouraged due to its poor-quality camera. St
- Optimized Datum show: total pages are no longer visible, and navigation no longer wraps from the first page to the last or vice versa; better memory management and handling for large (~100K) files
- Enabled swipe up/down gestures on keypads, menus, and QR transcribe
- Fix mnemonic thermal printing when long words span multiple lines
- Tools -> Check SD card is now in Tools -> Device Tests
- All devices scan TinySeed and other binary grids in grayscale mode for better speed.
- Button functionality reestablished on some pages for Yahboom with v1.1 hardware

# Changelog 25.09.0 - September 2025

Expand Down
11 changes: 10 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,16 @@ RUN apt-get update -y && \
python3-setuptools

RUN mkdir -p /opt && \
git clone --depth 1 --recurse-submodules --shallow-submodules --branch v8.2.0-20190409 https://github.com/kendryte/kendryte-gnu-toolchain
GIT_TERMINAL_PROMPT=0 \
git clone --depth 1 --branch v8.2.0-20190409 https://github.com/kendryte/kendryte-gnu-toolchain

RUN cd kendryte-gnu-toolchain && \
sed -i 's|https://github.com/bminor/binutils-gdb.git|https://github.com/riscvarchive/riscv-binutils-gdb.git|' .gitmodules && \
git submodule sync && \
git submodule update \
--init \
--recursive \
--depth 1

RUN cd kendryte-gnu-toolchain && \
export PATH=$PATH:/opt/kendryte-toolchain/bin && \
Expand Down
2 changes: 1 addition & 1 deletion docs/getting-started/features/tools.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ A suite of automated tests to verify important features on your device.

<div style="clear: both"></div>

#### Touchscreen (Maix Amigo, Yahboom, WonderMV and TZT only)
#### Touchscreen (Maix Amigo, Yahboom, WonderMV, TZT or Embed Fire only)
<img src="../../../img/maixpy_amigo/touch-test-300.png" align="right" class="amigo">

Confirm that touch input is accurately detected across the entire display surface.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ Connect the device to your computer via USB (for Maix Amigo, make sure you’re
./ktool -B goE -b 1500000 maixpy_DEVICE/kboot.kfpkg
```

For `dock`, `wonder_mv` or `tzt` use the `-B dan` parameter:
For `dock`, `wonder_mv`, `tzt` or `embed_fire` use the `-B dan` parameter:
```bash
./ktool -B dan -b 1500000 maixpy_DEVICE/kboot.kfpkg
```
Expand Down
2 changes: 1 addition & 1 deletion docs/getting-started/installing/from-source.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ unzip kboot.kfpkg -d ./kboot/
```

### Flash the firmware onto the device
Connect the device to your computer via USB (for Maix Amigo, make sure you’re using bottom port), power it on, and run the following, replacing `DEVICE` with either `m5stickv`, `amigo`, `cube`, `dock`, `yahboom`, `wonder_mv` or `tzt`:
Connect the device to your computer via USB (for Maix Amigo, make sure you’re using bottom port), power it on, and run the following, replacing `DEVICE` with either `m5stickv`, `amigo`, `cube`, `dock`, `yahboom`, `wonder_mv`, `tzt` or `embed_fire`:
```bash
# flash firmware to DEVICE
./krux flash maixpy_DEVICE
Expand Down
18 changes: 18 additions & 0 deletions docs/getting-started/installing/from-test-release.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,3 +142,21 @@ To Flash TZT you need to pass the `-B dan` parameter.
```pwsh
.\ktool-win.exe -B dan -b 1500000 maixpy_tzt\kboot.kfpkg
```

#### Embed Fire
To Flash Embed Fire you need to pass the `-B dan` parameter and `-b 400000` (maximum supported baud rate).

##### Linux
```bash
./ktool-linux -B dan -b 400000 maixpy_embed_fire/kboot.kfpkg
```

##### Mac
```bash
./ktool-mac -B dan -b 400000 maixpy_embed_fire/kboot.kfpkg
```

##### Windows
```pwsh
.\ktool-win.exe -B dan -b 400000 maixpy_embed_fire\kboot.kfpkg
```
2 changes: 1 addition & 1 deletion docs/getting-started/settings.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ Here you choose between `thermal/adafruit`, `cnc/file`, `cnc/grbl` or `none` (de

<div style="clear: both"></div>

#### Touchscreen (Maix Amigo, Yahboom, WonderMV and TZT only)
#### Touchscreen (Maix Amigo, Yahboom, WonderMV, TZT or Embed Fire only)
<img src="../../img/maixpy_amigo/touchscreen-300.png" align="right" class="amigo">

If your device has touchscreen you can change the touch detection threshold. If it is being too sensitive or detecting false or ghost touches, you should increase the threshold value, making it less sensitive. The other way is also valid, reduce the threshold to make the screen more sensitive to touches.
Expand Down
10 changes: 7 additions & 3 deletions docs/getting-started/usage/generating-a-mnemonic.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ At the start screen, select **New Mnemonic**, and choose between camera, words,
<img src="../../../img/maixpy_m5stickv/new-mnemonic-options-250.png" class="m5stickv">

## Camera
(Experimental!) Choose between 12, 24 words or double mnemonic, then take a random picture and Krux will generate a mnemonic from the hash of the image bytes.
(Experimental!) Choose between 12, 24 words or double mnemonic, then take a random picture and Krux will generate a mnemonic from the hash of the image's raw bytes.<i style="font-size: 85%">[:material-numeric-1-circle:{ title="Conceptually similar to Lavarand" }](#lavarand)</i>

<img src="../../../img/maixpy_amigo/new-mnemonic-via-snapshot-prompt-300.png" class="amigo">
<img src="../../../img/maixpy_amigo/new-mnemonic-via-snapshot-capturing-300.png" class="amigo">
Expand All @@ -17,9 +17,13 @@ At the start screen, select **New Mnemonic**, and choose between camera, words,
<img src="../../../img/maixpy_m5stickv/new-mnemonic-via-snapshot-entropy-estimation-250.png" align="right" class="m5stickv">
<img src="../../../img/maixpy_amigo/new-mnemonic-via-snapshot-entropy-estimation-300.png" align="right" class="amigo">

During image capture, entropy quality estimation is displayed to assist you in obtaining a quality image source for your key. After the snapshot is taken, [Shannon's entropy](https://en.wikipedia.org/wiki/Entropy_(information_theory)) and pixel deviation indices are presented. Minimum thresholds are established to prevent the use of poor-quality images with low entropy for key generation.
During image capture, a real-time entropy quality indicator is displayed to help you select a suitable image. After the photo is taken, [Shannon's entropy](https://en.wikipedia.org/wiki/Entropy_(information_theory)) and pixel deviation metrics are shown. Minimum thresholds are enforced to prevent using images with insufficient entropy quality.

**Note**: These values ​​serve only as indicators or estimations of the quality of entropy, but are not absolute values ​​of entropy in a cryptographic context.
**Note**: These metrics are *approximations* intended to guide image selection. They do **not** represent absolute cryptographic entropy values.

<i style="font-size: 85%">:material-numeric-1-circle:{id="lavarand"}:
This approach is conceptually similar to [Lavarand](https://en.wikipedia.org/wiki/Lavarand), which used chaotic visual phenomena as source of entropy for cryptographic random number generators. Likewise, Krux leverages the unpredictable structure of captured images as entropy.
</i>

<div style="clear: both"></div>

Expand Down
6 changes: 5 additions & 1 deletion docs/getting-started/usage/loading-a-mnemonic.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,11 @@ It is possible to change any of the **wallet's attributes** (it will be possible
<img src="../../../img/maixpy_m5stickv/passphrase-load-options-250.png" align="right" class="m5stickv">
<img src="../../../img/maixpy_amigo/passphrase-load-options-300.png" align="right" class="amigo">

You can type or scan a BIP39 passphrase. When typing, swipe left :material-gesture-swipe-left: or right :material-gesture-swipe-right: to change keypads if your device has a touchscreen. You can also hold the button `PAGE` or `PREVIOUS` when navigating among letters while typing text to fast forward or backward. For scanning, you can also create a QR code from your offline passphrase using the [Datum tool](../features/tools.md/#datum-tool).
You can type or scan a BIP39 passphrase. When typing, swipe left :material-gesture-swipe-left: or right :material-gesture-swipe-right: to change keypads if your device has a touchscreen. Hold `PAGE` or `PREVIOUS` to move quickly through letters, and hold `ENTER` to jump to the next keypad.

For scanning, you can generate an offline passphrase QR code using the [Datum tool](../features/tools.md/#datum-tool).

**Note**: [BIP39](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki#from-mnemonic-to-seed) requires passphrases to be NFKD-normalized. Due to firmware size constraints, Krux cannot perform normalization internally. We therefore recommend using only ASCII QR codes or ensuring any non-ASCII are already normalized to NFKD.

<div style="clear: both"></div>

Expand Down
7 changes: 7 additions & 0 deletions docs/getting-started/usage/navigating-the-main-menu.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,13 @@ For multisig and miniscript, loading a wallet descriptor is essential to verify

When you select the `Wallet Descriptor` option for the first time, you will be prompted to load via QR code or SD card. After loading, a preview of the descriptor attributes will be displayed for confirmation. We shown each key’s fingerprint, derivation path, and abbreviated XPUB highlighted with a different color.

Loading a descriptor is also a quick way to set wallet attributes, as all necessary information is extracted automatically:
- Network (Mainnet or Testnet)
- Policy type (single-sig, multisig or miniscript)
- Script type (Native Segwit, Taproot, Nested Segwit, Legacy)

This eliminates the need for manual configuration and ensures consistency with your coordinator wallet.

<div style="clear: both"></div>

**Miniscript Descriptors** present an indented view of the miniscript after the keys. When Taproot is used, Krux checks if the internal key is "provably unspendable", meaning funds can only be moved via Tap tree scripts, in which case the internal key is displayed in a disabled color.
Expand Down
Binary file added docs/img/maixpy_embed_fire/about-303.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/img/maixpy_embed_fire/logo-303.en.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion docs/index.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ hide:

Krux is an open-source firmware that transforms off-the-shelf Kendryte K210 devices, such as the Maix Amigo, M5StickV and [more](parts.md), into versatile bitcoin transaction signers. Beyond its core functionality, Krux is a flexible platform that can adapt to devices with different form factors, providing a suite of tools to assist with the creation and recovery of mnemonic backups, some of which include encryption options for enhanced security.

Devices like the Maix Amigo, Yahboom, WonderMV or TZT come ready to use, with large touchscreens that make it easy and user-friendly to operate. These devices are ideal for those looking for a plug-and-play solution. On the other hand, Krux also supports development board kits, which are perfect for DIY enthusiasts who enjoy customizing and building their own hardware setups.
Devices like the Maix Amigo, Yahboom, WonderMV, TZT or Embed Fire come ready to use, with large touchscreens that make it easy and user-friendly to operate. These devices are ideal for those looking for a plug-and-play solution. On the other hand, Krux also supports development board kits, which are perfect for DIY enthusiasts who enjoy customizing and building their own hardware setups.

Interacting seamlessly with leading coordinator wallets through QR codes, SD cards, and even thermal printers, the user-friendly firmware offers unique features to support transactions and mnemonic backups in an offline environment.

Expand Down
Loading