From 1897df1e94631ecee037c2c3fa6132e9c7be3934 Mon Sep 17 00:00:00 2001 From: tanishkaa08 <162544044+tanishkaa08@users.noreply.github.com> Date: Sat, 22 Aug 2026 22:12:24 +0530 Subject: [PATCH] Add Android CoinSwap taker final report for SoB 2026 --- _config.yml | 6 + ...taker-my-summer-of-bitcoin-final-report.md | 161 ++++++++++++++++++ ...22-android-coinswap-taker-final-report.jpg | Bin 0 -> 51854 bytes 3 files changed, 167 insertions(+) create mode 100644 _posts/2026-08-22-building-an-android-coinswap-taker-my-summer-of-bitcoin-final-report.md create mode 100644 assets/images/blog_content/2026-08-22-android-coinswap-taker-final-report.jpg diff --git a/_config.yml b/_config.yml index 192cf88be6..62ab9a0d8b 100644 --- a/_config.yml +++ b/_config.yml @@ -1081,6 +1081,12 @@ authors: twitter: "https://x.com/0xSuryanshHere" description: "Summer of Bitcoin Batch of 2026, worked on Infrastructure Automation & Monitoring Dashboard (Bitcoin-Fuzz)" + Tanishka Nibariya: + name: "Tanishka Nibariya" + display_name: "Tanishka Nibariya" + avatar: "assets/images/female.png" + description: "Summer of Bitcoin Batch of 2026, worked on the Android CoinSwap Taker app at Citadel Tech" + # Plugins plugins: - jekyll-paginate diff --git a/_posts/2026-08-22-building-an-android-coinswap-taker-my-summer-of-bitcoin-final-report.md b/_posts/2026-08-22-building-an-android-coinswap-taker-my-summer-of-bitcoin-final-report.md new file mode 100644 index 0000000000..87e2030d58 --- /dev/null +++ b/_posts/2026-08-22-building-an-android-coinswap-taker-my-summer-of-bitcoin-final-report.md @@ -0,0 +1,161 @@ +--- +layout: post +title: "Building an Android CoinSwap Taker: My Summer of Bitcoin Final Report" +date: 2026-08-22 +author: Tanishka Nibariya +categories: [Wallets, Privacy, Development, Open-Source, Stories] +image: ../assets/images/blog_content/2026-08-22-android-coinswap-taker-final-report.jpg +--- + +Running a multi-maker coinswap from a phone sounds simple until Tor, UniFFI, and Android lifecycle all show up at once. This is my Summer of Bitcoin 2026 final report for [Citadel Tech](https://github.com/citadel-tech) / [Citadel FOSS](https://github.com/citadel-foss): how I built a Jetpack Compose **CoinSwap taker** that talks to the official Rust stack, discovers makers over Orbot, and completes real swaps on a physical device. + +If you care about Bitcoin privacy tooling on mobile, or about wiring Rust protocol code into Android without rewriting it, this post walks through what I set out to do, what shipped, what is still open, and what I would do differently next time. + +**Pull request (submission):** [citadel-foss/coinswap-kotlin#2](https://github.com/citadel-foss/coinswap-kotlin/pull/2) +**Branch / fork:** [tanishkaa08/coinswap-kotlin (`ffi-rpc`)](https://github.com/tanishkaa08/coinswap-kotlin/tree/ffi-rpc) + +--- + +## What I set out to do + +CoinSwap already had a working desktop taker flow. The gap was mobile: there was no first-class Android client that could: + +- restore / unlock a taker wallet on-device +- sync balances and UTXOs +- discover makers over Tor +- prepare and execute Taproot or Legacy coinswaps +- recover from interrupted swaps +- match the mental model of the desktop taker without reimplementing protocol logic in Kotlin + +My goal was not a demo UI on top of stubs. I wanted a phone app that uses the **same Rust taker** via generated UniFFI bindings (`libcoinswap_ffi.so`), so protocol correctness stays in core-lib while Android owns UX, lifecycle, Tor plumbing, and local testing tooling. + +--- + +## What I built + +I shipped a full Compose taker app with this stack: + +```text +Compose UI + → ViewModels + → CoinswapRepository + → Generated UniFFI Kotlin (org.coinswap) + → libcoinswap_ffi.so + → Rust Taker + → Electrum (electrs) + Tor (Orbot SOCKS) +``` + +### App surfaces + +- **Login / setup** — wallet passcode and session restore; Electrum backend for Citadel signet or local regtest +- **Home** — balances, sync, Tor status, UTXO list with privacy cues +- **Receive / send** — ordinary wallet spends and QR receive +- **Markets** — offerbook sync and live maker list over Tor +- **Swap** — Taproot or Legacy, amount, maker count, onion filtering, coin control (auto by default, manual opt-in) +- **Swap progress** — foreground service + notification while a swap runs; phase text from `swap_tracker.cbor` +- **Recovery** — path for interrupted / failed taker swaps +- **History / reports** — wallet transactions and local coinswap reports +- **Settings** — Tor / Orbot helpers, reconnect, wallet data reset + +### Backend glue + +- `CoinswapRepository` wraps UniFFI `Taker` (init, sync, offers, prepare/start/recover, reports, sends) +- `TakerHolder` owns the live native instance with lease-aware close and FFI mutexes +- Activity-scoped swap ViewModel + `SwapForegroundService` so an in-flight swap survives tab switches and backgrounding +- Config / Tor helpers aligned with the desktop taker model (Orbot on `127.0.0.1:9050`) + +### Regtest / phone tooling + +Under `scripts/` I added helpers for local phone testing: WSL maker bring-up, Tor SOCKS/control portproxy on Windows, `adb reverse` for connectivity, and quick probes. I exercised multi-maker coinswaps on a physical phone against Docker makers on regtest. + +--- + +## Major technical / design decisions + +### 1. UniFFI over rewriting the protocol + +The important boundary: **wallet and swap logic stay in Rust**. Kotlin is an adapter. That kept the Android app honest to upstream coinswap behavior and avoided a second, divergent protocol implementation. + +### 2. Electrum backend instead of Bitcoin Core RPC on the phone + +Early drafts mirrored a Core RPC + ZMQ desktop setup. For a real mobile path we moved to **Electrum (`electrs`)** via `BackendConfig`. Clearnet Electrum connects directly; maker discovery and swaps still go through Orbot. That matches how a phone should talk to the chain without running bitcoind on-device. + +### 3. Orbot-only Tor — remove in-app Tor + +I initially explored embedded Tor. In practice it dropped proof-of-funding mid-swap (`UnexpectedEof` / SOCKS timeouts) and fought Orbot for port `9050`. The durable choice: **no in-app Tor daemon**. Probe Orbot’s SOCKS on `127.0.0.1:9050`, optionally auth on the control port, and fail clearly when Orbot is not ready. + +### 4. Lease-safe native lifecycle + +`Taker` is a scarce native resource. Concurrent ViewModels (wallet sync, markets, swap) can race init/close. `TakerHolder` uses: + +- `withLeased` so logout / reconnect cannot `close()` a Taker still in use +- `initMutex` / `ffiMutex` / `longOpMutex` so init, short reads, and long Tor/swap ops do not interleave unsafely + +### 5. Foreground service for swap execution + +Coinswaps are long-running. Keeping execution only in a Compose-scoped coroutine was fragile. A foreground service runs `startCoinswap`, publishes progress on `SwapExecutionBus`, and polls the core-lib tracker file so the UI and notification stay in sync when the user leaves the Swap tab. + +### 6. Honest Tor / estimate UI + +Configurable SOCKS fields that the native stack ignored were removed or fixed. Offerbook sync failures gate swap prep. Maker estimates reject empty / ineligible selections instead of inventing fake fees. On a money app, that honesty matters more than polish. + +--- + +## What shipped + +Delivered in [PR #2](https://github.com/citadel-foss/coinswap-kotlin/pull/2): + +| Area | Status | +| --- | --- | +| Compose taker UI (login → home → markets → swap → history → settings) | Shipped | +| UniFFI `Taker` integration (Electrum + Orbot) | Shipped | +| Multi-maker coinswaps on physical phone + regtest makers | Tested end-to-end | +| Wallet sync, receive, send, recovery paths | Exercised in the same setup | +| Swap foreground service + progress tracking | Shipped | +| Local scripts for makers / Tor / adb reverse | Shipped | +| Security and correctness hardening from review (leases, path validation, cancellation, session clearing, backup excludes) | Iterated across review rounds | + +The PR title and description summarize the first cut; later commits simplified the UI, removed in-app Tor, and hardened FFI concurrency and swap gates. + +--- + +## What remains + +Still open or intentionally deferred: + +- **Merge + polish** — the PR is still open; remaining review nits (fee display edge cases, packaging) can land after maintainer feedback +- **Keystore-backed secrets** — move remaining sensitive prefs fully onto Android Keystore +- **Product packaging** — branded package name, release signing, clearer first-run Orbot onboarding +- **Mainnet readiness** — more soak testing outside regtest/signet, fee-rate wiring where the native API supports it, tighter recovery heuristics +- **CI** — automated instrumented / contract tests beyond the unit contracts added during review + +--- + +## What I learned + +- **FFI is a product surface.** Binding generation, ABIs, JNA load paths, and native close semantics are as much of the app as Compose screens. +- **Mobile Bitcoin is mostly systems work.** Tor readiness, foreground services, coroutine cancellation, and device networking matter as much as the swap form. +- **Upstream alignment beats clever rewrites.** Mirroring the desktop taker’s Electrum + Orbot model removed entire classes of failure. +- **Review is part of the build.** Iterating on mentor and automated review feedback forced leases, honest Tor probes, and safer session handling I would have deferred. +- **Privacy UX is concrete.** Coin control defaults, UTXO privacy cues, and not claiming Tor when Orbot is not up are user-trust features, not cosmetics. + +--- + +## What happens next + +1. Address remaining review comments and work toward merging [PR #2](https://github.com/citadel-foss/coinswap-kotlin/pull/2) into `citadel-foss/coinswap-kotlin`. +2. Keep the Android taker in sync as [coinswap-ffi](https://github.com/citadel-tech/coinswap-ffi) (Electrum branch) evolves. +3. Continue contributing to Citadel’s coinswap mobile / FFI stack after SoB — especially release hardening, recovery UX, and test coverage. +4. Document a shorter “phone + Orbot + electrs” contributor path so others can reproduce the regtest setup without reverse-engineering my scripts. + +--- + +## Conclusion + +Summer of Bitcoin let me turn a desktop-only CoinSwap taker story into something you can hold: an Android client that keeps protocol logic in Rust, privacy routing in Orbot, and UX in Compose. The hardest parts were not the screens — they were lifecycle, Tor honesty, and making UniFFI safe under concurrent ViewModels. + +If you want to try the work, follow [PR #2](https://github.com/citadel-foss/coinswap-kotlin/pull/2), skim the README on the `ffi-rpc` branch, and ping me with review notes or repro steps. Contributions, questions, and tough bug reports are all welcome. + +**Share / tags:** `#SummerOfBitcoin` `#Bitcoin` `#OpenSource` + +Thanks to my mentors and the Citadel / CoinSwap community for the reviews, regtest war stories, and patience while Tor and UniFFI fought me on a real phone. diff --git a/assets/images/blog_content/2026-08-22-android-coinswap-taker-final-report.jpg b/assets/images/blog_content/2026-08-22-android-coinswap-taker-final-report.jpg new file mode 100644 index 0000000000000000000000000000000000000000..23d61eb73599786c04723f03414bf5025bdf2208 GIT binary patch literal 51854 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≦̸pI4 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≀cj(zNfEe}%r`1k=X0Hu(tg2iMtuOSF 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 H^Zx$<)tpkN literal 0 HcmV?d00001