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.
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.
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.
