Skip to content

KasSigner v1.0.3 (esp32-s3: M5Stack Lite, Waveshare Touch LCD2)

Latest

Choose a tag to compare

@InKasWeRust InKasWeRust released this 28 Apr 00:06

KasSigner v1.0.3

Reproducible Build Hashes

App-only images (firmware verification, developer builds):

Waveshare: 8cf7087123d046df86658201cc326d10ef00466ba3fd23b1903d9243931fd8cb
M5Stack:   0bea58b92d6a9bbd715ff4efc25efd1e0d0e225da363b15e73d4c018bdce341d

Full-flash images (bootloader + partition table + app — ready to flash):

Waveshare: 5583dec5f9c2d848d1b25d28a3897c2a22a1e3c7ae2fa0a1fa0edebb25d9914d
M5Stack:   1b8ccfa84759d427a64bc4f02bd695bda7d8736404bb86256d2d35fec374e397

Anyone can reproduce all four hashes:

git clone https://github.com/InKasWeRust/KasSigner.git && cd KasSigner
git checkout v1.0.3
docker build --platform linux/amd64 -f Dockerfile.base -t kassigner-toolchain:v2 .
docker build --platform linux/amd64 -t kassigner-build .
docker run --rm kassigner-build

The developer's Schnorr signature lives inside the binary but does not change the build hash. The device verifies it at boot against DEV_PUBKEY in the source code. The signing key is held offline.

Verify Code Segments

To confirm a downloaded .bin runs the same code as your own build:

cargo run --manifest-path tools/Cargo.toml --bin kassigner-verify -- downloaded.bin my-docker-build.bin

If the code segments match, both binaries execute identical instructions.

Flashing Pre-built Binaries

Option A — Full-flash image (recommended for new users)

No Rust toolchain needed. Download kassigner-waveshare-full.bin or kassigner-m5stack-full.bin from the assets below. Install esptool and flash:

pip3 install esptool

# Waveshare
python3 -m esptool --port <waveshare-port> --baud 460800 write_flash 0x0 kassigner-waveshare-full.bin

# M5Stack
python3 -m esptool --port <m5stack-port> --baud 460800 write_flash 0x0 kassigner-m5stack-full.bin

The full-flash images include the ESP-IDF bootloader, partition table (16MB flash, ~15.6MB app partition), and the signed firmware — everything needed to boot from a blank chip.

Option B — App-only image (for developers)

If you already have a bootloader and partition table on the device (from a previous cargo run source build), you can flash just the app image at offset 0x10000:

# Waveshare
python3 -m esptool --port <waveshare-port> --baud 460800 write_flash 0x10000 kassigner-waveshare.bin

# M5Stack
python3 -m esptool --port <m5stack-port> --baud 460800 write_flash 0x10000 kassigner-m5stack.bin

Replace the port with your device's serial port (ls /dev/cu.usb* on macOS, ls /dev/ttyACM* /dev/ttyUSB* on Linux). Requires esptool (pip install esptool).

What's New

Firmware

  • ReviewTx page rendering fix — tapping to advance TX review pages now correctly triggers a screen redraw (previously pages stayed stuck on the summary)
  • TX parse error screen — when a scanned transaction exceeds MAX_INPUTS (8), the signer now shows "Too many UTXOs / Consolidate first" with an error beep; tap to dismiss and return to main menu (previously failed silently)
  • TX-too-large pre-check — the signing step's size estimator now shows "Too many inputs! / Consolidate UTXOs first" with an error beep and tap-to-dismiss (previously the message was overwritten immediately)
  • draw_tx_error_screen() — new two-line error display method with "Tap to continue" hint and back button

KasSee Web

  • Address reuse prevention — funded addresses show an orange "funded" badge, session-tracked spent addresses show a gray "used" badge; showReceive auto-skips funded and used addresses to present the first clean address
  • Explorer links — every address in the address list and verify screen has a ↗ link to the Kaspa block explorer
  • Address history toggle — optional detection of historically used addresses via a self-hosted kaspa-rest-server (off by default; public APIs do not support this)
  • UTXO consolidation with selection — UTXO screen now shows selectable checkboxes (max 8 per batch); "Consolidate N Selected" button builds a transaction merging only the chosen UTXOs into one output
  • Send UTXO selection limit — manual UTXO selection for sends now enforces a max-8 limit matching the signer's MAX_INPUTS
  • KRC-20 / KRC-721 display cleanup — removed token icons and NFT thumbnails (which caused CSP violations via inline onerror handlers and 404s for missing PNGs); tokens now show name + balance only
  • KNS domains — reverse lookup from a hardcoded table; matching domains displayed in the Tokens screen under a "KNS Domains" section
  • QR cycle pause fix — stale setInterval timer cleared at the start of displayKsptQr, preventing overlapping intervals that made the pause button ineffective
  • CSP updateconnect-src https: added to support user-provided custom REST server URLs

Code Quality

  • Clippy zero warnings for both bootloader and KasSee WASM

Full changelog: CHANGELOG.md

KasSee Web: kassigner.org