Dev Update, 1 July 2025

Last week by the numbers

neptune-core

twenty-first

triton-vm

triton-tui

tasm-lib

Neptune Happenings

Alan at Monero Konferenco

Our very own @aszepieniec attended Monero Konferenco 5 and gave a talk about the post-quantum zero-knowledge cryptography used in neptune-cash. The talk appeared to be well received by the monero community in attendance.

We are still trying to track down a video of the talk, and will post it in a future dev update when we do so.

New Release of Supporting Crates

Each of these crates was bumped to version 0.50 and published to crates.io:

twenty-first, triton-vm, triton-tui, triton-cli, tasm-lib

Code Nearly Complete For Proposed Hard Fork

The code is mostly ready, although some unit tests need attention. The hard fork requires versioned consensus rules, and implementing those complicated the task. Further information about the hard fork will be forthcoming so community members can be informed and engage with the process.

Emoji’s for Forum Posts

We installed a discourse emoji plugin that makes it easy to react to forum posts. Only a small number are presently enabled. If you have any requests for your favorite emoji, let us know in the comments below.

Wasm Support for Wallets

@danda has begun work on a new crate that aims to provide a subset of the types in neptune-core for use by wallet software, including wallets that run in a web-browser via web-assembly (wasm).

As part of this effort a PR was merged into the twenty-first crate so that it now builds for target wasm32-unknown-unknown.

QR Code Challenges for Generation Addresses

It was discovered that Generation Addresses exceed the maximum length of a QR code. In particular the QR code standard allows up to 2953 bytes but a bech32m encoded Generation Address is around 3482 bytes – a difference of 529 bytes. This will be an issue for most any neptune wallet software.

Neptune’s Generation Addresses are so long because they are 192 bit quantum resistant public keys. Some options are:

  1. Reduce them to 128 bit security level. This should fit in a QR code, but has some potential to reduce privacy. (Because privacy now takes “only” 128 bits worth of effort to break, whereas everything else in Neptune Cash offers at least 160 bits of security.)

  2. Use animated QR codes. This is an emerging standard in the cryptocurrency industry for larger offlne data transfers and is already in use by some hardware wallets. Downsides vs a standard QR code is that a phone’s camera app cannot read them (though a Neptune wallet app still could) and also printed usage may be problematic.

  3. Use JabCode or some other QR alternative. JabCode can handle more data because it uses colored squares. That also makes it more susceptible to errors while reading than a standard QR code and they cannot be read if printed on a b/w printer such as a standard laser printer.

We invite the neptune community to comment on on this topic. In particular:

  • have you had experience with animated QR codes?
  • what do you think about lowering the Generation Address to 128 bits?
  • what do you think about animated QR vs JabCode?
  • other suggestions?

Contributor Updates

@jfs

  • integrate vectorized version of Tip5 into twenty-first (PR #268)
  • discuss testing of twenty-first on wasm32 target (PR #265)
  • speed up Triton VM proving, in particular, hashing (1, 2)
  • release twenty-first, triton-vm, triton-tui, triton-cli, tasm-lib, and raise version bump PR on neptune-core

@danda:

  • twenty-first PR was merged and released. (thx @jfs)
  • added additional types to neptune-types:
    • address → addressable_key, base_key, encrypted_utxo_notification, generation_address, hash_lock_key, receiving_address, symmetric_key
    • utxo, utxo_notification, utxo_notification_payload, timestamp, time_lock, public_announcement, native_currency, lock_script, incoming_utxo
  • integrated new types in neptune-wallet-gui

@aszepieniec:

  • prepare presentation + attend MoneroKon5
  • hard fork 2

@sword-smith:

  • hard fork 2
  • mempool:
    • Remove incentive for composer to run with small/empty mempool by no longer automatically updating out-of-date single-proof backed transactions
    • Remove option of limiting mempool size by number of transactions
    • fix bug where max size in number of bytes was not respected.
  • Support external developers
2 Likes

Yes, I do they are well supported in the bitcoin industry. for example https://seedhammer.com/ uses them, https://seedsigner.com/ , https://coldcard.com/ , GitHub - cryptoadvance/specter-diy: DIY airgapped hardware wallet that uses QR codes for communication with the host , … On the software side https://sparrowwallet.com/ and many others including GitHub - cryptoadvance/specter-desktop: A desktop GUI for Bitcoin Core optimised to work with hardware wallets

They are supported by many hardware qr-code readers such as Grow Gm65s High Quality Usb Uart 1d 2d Raspberry Pi Barcode Scanner Module Reader - Buy Raspberry Pi Barcode Scanner barcode Scanner 2d Raspberry Pi Barcode Scanner Product on Alibaba.com used in Specter-DIY

the main use case for animated QR-Codes in the bitcoin space is for PSBT and for complex wallet descriptors such as multisig wallets Output script descriptors | Bitcoin Optech

2 Likes