jwinterm 53bc6d3e3e wallet: auto-reply over Tor when scanning an Invoice1 slatepack
Mirrors the existing Standard1 + Send-task flow for the invoice
direction. When a customer scans an Invoice1 slatepack QR with an
embedded sender address (now standard for slatepacks produced by
grin-wallet's issue_invoice_tx), the patched pay() forwards the
sender address through create_slatepack_message, and the
OpenMessage handler — if the wallet's Tor service is running or
starting — pushes the signed Invoice2 to the sender's foreign-api
finalize_tx over Tor. The merchant's wallet finalizes + posts on
their side, so no local finalize/post is needed (cf. the existing
send_tor closure for Standard1 which does need that).

Backward-compatible: if the slatepack has no embedded sender
address (older clients) or the Tor service isn't up, the existing
write-slatepack-to-disk-for-paste-back fallback runs unchanged.
No protocol change, no new dependencies, no new failure modes —
the response slatepack file is always written before the Tor send
is attempted, so a Tor failure mid-flight is recoverable.

Closes the mobile-UX gap that required the customer to manually
copy the response slatepack from the wallet and paste it back to
the merchant's web/storefront interface. With this patch and a
foreign-api listener on the merchant side, scanning a Grin invoice
QR is now a single tap: scan → confirm → done.

send_tor() gains a `finalize: bool` parameter that selects between
the existing receive_tx body (for Standard1 sends) and a new
finalize_tx body (for the invoice-flow case). The same Tor SOCKS
plumbing handles both.

Real-world validation: end-to-end working today on a production
BTCPay deployment (Such Software's btcpayserver-plugin-grin v1.3.5)
— invoice QR scan with a patched build settles a merchant invoice
in ~1 confirmation window with zero customer interaction beyond
the scan.
2026-06-22 11:29:48 -04:00
2026-03-10 02:02:15 +03:00
2026-05-03 10:05:03 +03:00
2026-05-21 00:56:28 +03:00
2026-03-19 10:37:45 +03:00
2026-05-21 00:56:28 +03:00
2026-02-18 13:38:11 +00:00
2026-05-21 00:56:28 +03:00
2026-02-18 13:38:11 +00:00
2026-05-21 00:04:22 +03:00
2024-04-14 14:04:34 +03:00
2026-01-09 23:54:39 +00:00

Grim

Cross-platform GUI for GRiN ツ in Rust for maximum compatibility with original Mimblewimble implementation. Initially supported platforms are Linux, Mac, Windows, limited Android and possible web support with help of egui - immediate mode GUI library in pure Rust.

Named by the character Grim - the shape of a large, black, menacing, spectral giant dog.

image

Build instructions

Install Rust

Follow instructions on Windows.

curl https://sh.rustup.rs -sSf | sh

Desktop

To build and run application go to project directory and run:

git submodule update --init --recursive
cargo build --release
./target/release/grim

Android

Set up the environment

Install Android SDK / NDK / Platform Tools for your OS according to this FAQ.

Build the project

Run Android emulator or connect a real device. Command adb devices should show at least one device. In the root of the repo run ./scripts/android.sh build|release v7|v8|x86, where is v7, v8, x86 - device CPU architecture for build type, for release specify version number in format major.minor.patch.

License

Apache License v2.0.

S
Description
No description provided
Readme Apache-2.0 16 MiB
Languages
Rust 94.8%
Java 3.7%
Shell 1.3%
Batchfile 0.2%