Skip to content

Releases: Kilombino/kilowallet

Kilowallet 1.2.2-beta1

Pre-release

Choose a tag to compare

@Kilombino Kilombino released this 20 Oct 21:37

Kilowallet 1.2.2-beta1

Spend an unlocked JoinMarket fidelity bond from the read-only JM wallet, signing it by QR on a SeedSigner with XBT (BLAKE2b) support. Beta: GitHub only, not on Zapstore.

Added

  • SPEND WITH SEEDSIGNER on every unlocked fidelity bond in the 🫙 JM wallet. Choose where the bond goes (by default a new address of your Jam wallet's first jar, Apricot) and the fee rate. Kilowallet then makes the PSBT and shows it as an animated QR (ur:crypto-psbt).
  • On the SeedSigner you check the amount, the unlock date and the destination, then approve. Scan the signed QR back into Kilowallet, or paste it as text. Kilowallet checks the signature against its own copy of the transaction, shows the review, and sends it only when you say so.
  • The PSBT carries everything a signer needs: the bond's previous transaction, its witness script, its key path m/84'/0'/0'/2/, nLockTime = the bond's date and sequence 0xfffffffe. It asks for sighash 0x21, so the spend is valid only on XBT (BLAKE2b) and cannot be replayed on the SHA-256 chain.
  • It needs a SeedSigner that signs bonds with sighash 0x21: SeedSigner XBT (BLAKE2b) (Kilombino/seedsigner, 0.8.7-xbt1), an unofficial version of SeedSigner that is not affiliated with the SeedSigner project. You can try it in the browser at https://seed.kilombino.com, which runs it by default. A standard SeedSigner does not sign bond inputs (or signs them with 0x01), and Kilowallet refuses any signature that is not 0x21, so nothing gets sent.
  • Jam exports that include the master fingerprint (field f) are read. Older exports still work: the PSBT then says 00000000, and SeedSigner fills it in from its seed.

Tested

  • On a BLAKE2b regtest node: a bond created in Jam was watched in Kilowallet and turned into a PSBT. SeedSigner XBT (BLAKE2b) in the browser simulator signed it and Kilowallet finished it. Before its date the network rejected the spend (non-final), after its date it was accepted and mined.
  • Once from the test code: 16bac416…1c84. Once from the app itself on an emulator: 1042d76c…5463.
  • The signature is byte-identical to the one Jam makes for the same bond (RFC 6979).

Translated to es, ca, fr, it, de, pt, zh.

Signed APK SHA-256: fd420c0be5f9555b765c9cfa817676350f2e9444c1baa6c592c3a6be8271153a
Unsigned (reproducible) SHA-256: 3da383b17965acceca5ca5f1b935a2d4ac98aab4f5c39873e4351ef9d07341c1
Certificate SHA-256: b8d7ad679fbfbe39f5640bce01d675347f52b27b7ae6f3731d2ad982c92ef135

Kilowallet 1.2.1

Choose a tag to compare

@Kilombino Kilombino released this 20 Oct 19:50

Kilowallet 1.2.1

A third wallet: follow your JoinMarket (Jam) wallet from your phone, read-only, with its fidelity bonds.

Added

  • JoinMarket wallet (🫙 JM), next to HOT and WATCH. In Jam, open Settings › View in Kilowallet (read-only) and scan its QR code, or paste its text. It needs JoinMarket XBT (Jam) 0.41.0-xbt2 or later: on StartOS 0.41.0:2, or the Umbrel app.
  • The five jars (Apricot, Blueberry, Cherry, Date, Elderberry), each with its balance and movements.
  • Fidelity bonds: amount, unlock date, current value and state. It shows "locked until …", "unlocked: spend or renew it from Jam", or "its value is now zero: renew it to keep being picked as a maker".
  • Bond alerts, once per bond: 7 days before it unlocks, when it unlocks, and when it stops counting. They also come from the background watcher.
  • Created a new bond? Scan Jam's QR again: the new import replaces the old one.

Read-only

  • The JM wallet has no SEND and no private key. Coins and bonds are spent from Jam.
  • Its balances and notifications are kept apart from your other two wallets.

Tested on a BLAKE2b regtest node: a bond created in Jam, watched in Kilowallet, and spent from Jam (Unlock Funds) after its date with sighash 0x21. Before its date the network rejected it.

Translated to es, ca, fr, it, de, pt, zh.

Signed APK SHA-256: 529f6a26b788200fe91ef251e42e91ab53edbbb78773e84e6e5bdb0a37030610
Unsigned (reproducible) SHA-256: fb26f550038527b01e5984dd8392b2e4f24c0f71c50d8c978cd95d6c0b517bae
Certificate SHA-256: b8d7ad679fbfbe39f5640bce01d675347f52b27b7ae6f3731d2ad982c92ef135

Kilowallet 1.2.0

Choose a tag to compare

@Kilombino Kilombino released this 20 Oct 09:11

Kilowallet 1.2.0

Kilojoin v4: a coinjoin pool can now give each person several mixed outputs.

Added

  • Mixed outputs per person (1 to 5) when opening a pool. With 2 or more, the amount is that of each output: a pool of 4 × 1 000 000 gives every person four outputs of 1 000 000 sats, each to an unused address of their own.
  • The perfect coin counts every output: for 4 × 1 000 000 at 1 sat/vB it is 4 000 198 sats, and it joins with no change.
  • Each output is signed blindly and handed in on its own, with its own fresh key, its own connection and its own random wait. Not even the pool's creator can tell which outputs belong to the same person.

Compatibility

  • A pool of one output each is announced as v3, exactly as before: every v3 wallet (Kilowallet 1.1.5+, Kilojoin 0.7+, PyBLOCK app, Redwallet, Paperclip wallet) can join it. One output is the default.
  • Pools of 2 to 5 outputs each are v4: only Kilowallet 1.2.0 and Kilojoin 0.8 or newer list them.
  • The protocol is in Kilojoin's PROTOCOL.md, section 12, with test vectors.

Tested on a BLAKE2b regtest node over relay.kilombino.com (3 people × 4 outputs, one with its perfect coin, one with two coins), and on mainnet: a 2 × 10 000 pool opened from a phone and joined from Kilojoin 0.8.0, transaction 32538ef2b5b6c252660ab4a6c18acc04cfd21067606b1531ad5428b41aafc5e7.

Signed APK SHA-256: 099dfd4156d1c72001b92d2118d3e9eb52033bd684fe97d4d5adb81820918a99
Unsigned (reproducible) SHA-256: c19260ae979cdaf121303efaabdb3469e1fec0e28f3e8cbc04442a37799294aa
Certificate SHA-256: b8d7ad679fbfbe39f5640bce01d675347f52b27b7ae6f3731d2ad982c92ef135

Kilowallet 1.1.7

Choose a tag to compare

@Kilombino Kilombino released this 19 Oct 07:47

Kilowallet 1.1.7

Tor is now Arti, the Tor Project's Tor in Rust. The app opens faster, does less while it's in the background, and is a little smaller.

Changed

  • Tor is Arti 2.7.0 instead of the C Tor from tor-android. It is built reproducibly from the pinned tag, and the release build checks its hash, as for the Ark and Lightning engines. It runs only when a connection needs it (Lightning, a node reached by .onion) and stops with the app. Its log goes into crash reports.
  • Faster start: the wallet's caches, verified headers and last balances are read from disk off the screen's thread, the language is loaded in the background as the app starts, and the check for a coinjoin round left running no longer holds up the first frame.
  • Less work in the background:
    • Opening the app no longer restarts the background watcher. A changed check interval is picked up within a minute.
    • The Lightning tab's checks, the coinjoin tab's refresh and pool list, and the update check pause while the app is not on screen.
    • The watcher reuses the addresses it already worked out.
  • Fewer round trips: the coins of all your addresses are asked for in one batch.
  • Smoother scans: the scan's progress is drawn at most every 300 ms. The Lightning tab only follows the chain height.
  • Smaller: the Tor engine has its symbols stripped and the images are WebP. The APK is 42.4 MB.

Fixed

  • RECEIVE follows the wallet: switching between HOT and WATCH with RECEIVE open now shows an unused address of the wallet you switched to, instead of keeping the other one's.

Signed APK SHA-256: dd7a197e877c0981be0207e9ace57af0a474768ce2a94b321ee3de80d03c5a6b
Unsigned (reproducible) SHA-256: 928b1c3d4d3d325fb8e4a23be9b66e55ce9f55b272e99a313ba63fa50b3af60e
Certificate SHA-256: b8d7ad679fbfbe39f5640bce01d675347f52b27b7ae6f3731d2ad982c92ef135
Tor engine: Arti 2.7.0, libarti.so SHA-256 593badad3adc2825153546757fd92e120916bd02c5c012cd6c1bcf319ba09d05

Kilowallet 1.1.7-beta2

Pre-release

Choose a tag to compare

@Kilombino Kilombino released this 19 Oct 07:13

Kilowallet 1.1.7-beta2 (beta)

Opens faster, does less while it's in the background, and is a little smaller. Everything in 1.1.7-beta1 (Tor is Arti 2.7.0) is here too.

Changed

  • Faster start: the wallet's caches, verified headers and last balances are read from disk off the screen's thread, the language is loaded in the background as the app starts, and the check for a coinjoin round left running no longer holds up the first frame. On the test emulator a cold start went from about 10 s to about 3.4 s (same wallet, debug builds; a phone is faster in both cases).
  • Less work in the background:
    • Opening the app no longer restarts the background watcher, which used to repeat all its network work at the same moment. A changed check interval is picked up within a minute.
    • The Lightning tab's node and wallet checks, the coinjoin tab's refresh and pool list, and the update check pause while the app is not on screen.
    • The watcher reuses the addresses it already worked out instead of deriving them again every cycle.
  • Fewer round trips: the coins of all your addresses are asked for in one batch instead of one request per address.
  • Smoother scans: the scan's progress is drawn at most every 300 ms instead of on every address. The Lightning tab only follows the chain height, so it doesn't redraw at every step of a scan.
  • Smaller: the Tor engine (Arti) ships with its symbols stripped (0.7 MB less to download, 3.9 MB less installed), and the images are WebP. The APK is 42.4 MB (43.2 MB in beta1).

Signed APK SHA-256: 0bfc108f9f7063cbabd0bcf96346f7d9835874651dff5718cafc079bf485140f
Unsigned (reproducible) SHA-256: a5773f449fc55260bffe4a23e5dc9c2825b46b7fb738944dcaacc39b8b776936
Certificate SHA-256: b8d7ad679fbfbe39f5640bce01d675347f52b27b7ae6f3731d2ad982c92ef135
Tor engine: Arti 2.7.0, libarti.so SHA-256 593badad3adc2825153546757fd92e120916bd02c5c012cd6c1bcf319ba09d05

1.1.7-beta1

1.1.7-beta1 Pre-release
Pre-release

Choose a tag to compare

@Kilombino Kilombino released this 19 Oct 00:59

Kilowallet 1.1.7-beta1 (pre-release)

Changed

  • Tor is now Arti 2.7.0, the Tor Project's Tor written in Rust, instead of the C Tor from tor-android. It is rebuilt reproducibly from the pinned tag (tor-engine/ENGINE, tor-engine/build.sh), and a release refuses any other build of it, like the Ark and Lightning engines. It runs only when a connection needs Tor (Lightning, a .onion node) as a local SOCKS proxy, and holds no keys. Its log goes into crash reports.

Tested on the emulator: Arti bootstraps in about 10 seconds, a .onion site answers through it, the exit is a Tor exit, and Lightning syncs. Arti stops with the app. All 137 unit tests pass. Two Arti builds from different folders give the same bytes.

Everything in 1.1.6.

Signed APK SHA-256: 7d96cd74037e371dc167bbbba7c45168e66260ce5419e54964638015b0a33057
Unsigned (reproducible) SHA-256: e5e7def0543f5fff1e3e096af4babb91b2b068397d86175b272484b1c9849b59
Certificate SHA-256: b8d7ad679fbfbe39f5640bce01d675347f52b27b7ae6f3731d2ad982c92ef135

1.1.6

Choose a tag to compare

@Kilombino Kilombino released this 19 Oct 00:21

Kilowallet 1.1.6

Changed

  • Tor 0.4.9.14 (tor-android, from 0.4.9.5): eight months of Tor fixes, security ones included. Tor's own log still goes into crash reports.
  • Built with Android Gradle Plugin 9.4.1, Gradle 9.8.1 and compileSdk 37.1 (needed by the new Tor). The app still targets Android 15 (targetSdk 35) and runs from Android 8. README-REPRODUCIBLE lists the new toolchain.

Tested on a phone (Lightning over the new Tor) and on the emulator; all 137 unit tests pass.

Everything in 1.1.5 (Kilojoin v3, splicing, SPEED UP).

Signed APK SHA-256: 20387e01aab32438d5b5f78888f973bee7488a6239f608ba0ee50a1c6f31c18b
Unsigned (reproducible) SHA-256: 3d17d99b69ba6479a9460c6386284e6c27ed9052513ec19296add7b3fca11a6a
Certificate SHA-256: b8d7ad679fbfbe39f5640bce01d675347f52b27b7ae6f3731d2ad982c92ef135

1.1.6-beta1

1.1.6-beta1 Pre-release
Pre-release

Choose a tag to compare

@Kilombino Kilombino released this 19 Oct 00:09

Kilowallet 1.1.6-beta1 (pre-release)

Changed

  • Tor 0.4.9.14 (tor-android, from 0.4.9.5): eight months of Tor fixes, security ones included. Tor's own log still goes into crash reports.
  • To ship it, the app is now built with Android Gradle Plugin 9.4.1, Gradle 9.8.1 and compileSdk 37.1. The app still targets Android 15 (targetSdk 35) and runs from Android 8, so nothing changes for phones. README-REPRODUCIBLE lists the new toolchain.

Tested on the emulator: Tor bootstraps to 100% and Lightning syncs; all 137 unit tests pass.

Everything in 1.1.5.

Signed APK SHA-256: 7481d6e8237908469b4ecaf0499be703086ac9e3dd5646f25ba6479beab24f9a
Unsigned (reproducible) SHA-256: 3e66cbaf93eef134c5b6050593370135a5f6a6495d2d6a4f315a483825ff9ef9
Certificate SHA-256: b8d7ad679fbfbe39f5640bce01d675347f52b27b7ae6f3731d2ad982c92ef135

1.1.5

Choose a tag to compare

@Kilombino Kilombino released this 18 Oct 22:55

Kilowallet 1.1.5

Added

  • Kilojoin v3: blind outputs. Every pool this version opens is v3. When a round closes, each member's mixed output is signed blindly by the pool's creator (RSA blind signatures, RFC 9474) and handed in from a fresh key over a connection of its own; the creator lists all outputs at once. Neither the relay, nor the other members, nor the creator can tell whose output is whose. Only the creator's own key runs the pool, votes and leaving are proven with a code tied to each seat, and every member checks every seat's coins against the chain. Protocol: https://github.com/Kilombino/kilojoin/blob/master/docs/PROTOCOL.md#11-kilojoin-v3-kilowallet-115-kilojoin-07
  • Splicing: RESIZE a Lightning channel without closing it. Add sats from the node's on-chain coins, or take part of your side out to any address. The node prices it exactly first, and the channel keeps working while the resize confirms.
  • SPEED UP (CPFP) for a channel opening, an on-chain payment from the node and a resize, not only a cooperative close; and in Ark, for a deposit transaction still in the mempool.

Changed

  • Lightning engine on Lightning Fork 0.21.4-blake2b.21 (neutrino upstream, splicing on).
  • A default peer that answered header requests with nothing (and stalled the first sync) is out of the list.
  • v1 and v2 coinjoin pools still join as before. Wallets on 1.1.4 or older don't list v3 pools until they update.

Tested on mainnet: a channel opened, resized +20,000 and −15,000, then closed cooperatively. Kilojoin v3 tested end to end with three wallets on a BLAKE2b regtest node over the live relay.

Signed APK SHA-256: be3f3b348835bbe5bf0bda405a9abdcee19824497d9a60abd9d8e4279e8f770c
Unsigned (reproducible) SHA-256: a631ff601b512d57742415d8bb5eaff9f08bb69c373f5aec9d23abe740d7de48
Certificate SHA-256: b8d7ad679fbfbe39f5640bce01d675347f52b27b7ae6f3731d2ad982c92ef135

1.1.5-beta2

1.1.5-beta2 Pre-release
Pre-release

Choose a tag to compare

@Kilombino Kilombino released this 18 Oct 22:32

Kilowallet 1.1.5-beta2 (pre-release)

Added

  • Splicing: RESIZE a channel without closing it. Add sats from the node's on-chain coins, or take part of your side out to any address. The node prices it exactly first (fee, new capacity, your new balance) and refuses what it can't do with the reason. The channel keeps working while the resize confirms, and the resize is shown with its confirmations until it locks in.
  • SPEED UP (CPFP) for a channel opening, an on-chain payment from the node and a resize, not only a cooperative close: a child from the node's change pays for both at the rate you choose.
  • Ark: SPEED UP a deposit transaction still in the mempool (a move into Ark, a send from the deposit, a payment to it).

Changed

  • Lightning engine on Lightning Fork 0.21.4-blake2b.21 (neutrino upstream, splicing on).
  • A default peer that answered header requests with nothing (and stalled the first sync) is out of the list.

Tested on mainnet from the emulator: a channel opened, resized +20,000 and −15,000 (sent out), then closed cooperatively.

Everything in 1.1.5-beta1 (Kilojoin v3).

Signed APK SHA-256: 4f8704a658938713ed3577c682603cd5bfce949c400c9683de449aeb69d5dc1b
Unsigned (reproducible) SHA-256: 86156553d3804be0db3d318cff23cf941bf7fd5e4bbb31b5118366523c851d3c
Certificate SHA-256: b8d7ad679fbfbe39f5640bce01d675347f52b27b7ae6f3731d2ad982c92ef135