Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,25 @@ All notable changes to Cyze are recorded here. Versions follow
[semantic versioning](https://semver.org); pre-1.0 minor bumps may include
breaking changes. Cyze is beta, unaudited software (see the README).

## [Unreleased]

### Added
- **Local devnet (regtest) network.** Point the wallet at a local
[thus-spoke-zakura](https://github.com/zcashlabs/thus-spoke-zakura) regtest
devnet for Zcash development. **Detect local devnet** finds its randomly
assigned lightwalletd port; the chain's network upgrade is read from the node
automatically (or forced in settings). Devnet wallets use `uregtest1…`
addresses, an `rZEC` ticker, their own wallet data, and scan the whole devnet
chain so faucet funds show up right away. On a devnet below NU6.2 (the stock
launcher runs NU6), syncing and receiving work but sends will likely be
rejected: Cyze can only build Orchard proofs with the NU6.2+ circuit.

### Fixed
- The approver's Inbox showed amounts as "ZEC" on every network; it now uses the
request's ticker (ZEC / TAZ / rZEC).
- The group page encoded addresses for testnet when no network had been saved,
while the wallet used mainnet; both now resolve the network the same way.

## [0.2.0-rc.1] — 2026-08-16

First release candidate for the **Ironwood (NU6.3)** feature wave. Still targets
Expand Down
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ authorize any spend.
active wallet at a time** — selecting a group makes it the sole wallet the app
syncs and acts on. Includes on-chain and local transaction/message history, and
an in-app diagnostics log for troubleshooting.
- **Local devnet for development** — besides mainnet and testnet, the wallet can
run against a local regtest devnet
([thus-spoke-zakura](https://github.com/zcashlabs/thus-spoke-zakura)), found
with one click, for Zcash protocol and app development with throwaway funds.
- **Coinholder voting** — cast a Zcash coinholder-poll vote from a group: paste
the poll's published ballot, answer, and the vote is delivered as a shielded
memo (Vote Cast Memo v1) to the poll's reception address through the same FROST
Expand Down
52 changes: 48 additions & 4 deletions docs/USER_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -251,10 +251,11 @@ balance and history update (use **Sync Now** on the Wallet page if needed).
Network and light-client endpoint are set on the **Wallet Settings** page.

**Network.** Cyze defaults to **Mainnet**. The active network is shown as a small
**Mainnet / Testnet** label on the wallet page, and a real mainnet send asks for
one confirmation before it broadcasts. Switch to **Testnet** to test with faucet
funds, and back to Mainnet when ready. Balances, addresses, and history are kept
entirely separate per network.
**Mainnet / Testnet / Devnet** label on the wallet page, and a real mainnet send
asks for one confirmation before it broadcasts. Switch to **Testnet** to test with
faucet funds, and back to Mainnet when ready. **Local devnet** is for development
(see below). Balances, addresses, and history are kept entirely separate per
network.

**lightwalletd endpoint.** Each network offers a **preset** public endpoint
(`zec.rocks` on mainnet, `testnet.zec.rocks` on testnet). To use your own node,
Expand All @@ -271,6 +272,49 @@ time**. Use **Zcash → Wallets** to switch between groups; selecting one makes
the active wallet, and the app stops syncing the previous one so all processing
stays focused on your choice.

### Local devnet (regtest)

For Zcash development, Cyze can run against a private regtest chain on your own
machine, using
[thus-spoke-zakura](https://github.com/zcashlabs/thus-spoke-zakura). Nothing on
a devnet is real money: addresses start with `uregtest1…` and amounts show as
**rZEC**.

1. **Install and start the devnet** (Linux or macOS, needs Docker):
```sh
curl --proto '=https' --tlsv1.2 -fsSL https://raw.githubusercontent.com/zcashlabs/thus-spoke-zakura/main/install.sh | sh
thus-spoke-zakura # keep it running; Ctrl-C deletes the devnet
```
2. In **Wallet Settings**, choose **Local devnet** and click **Detect local
devnet**. Cyze asks the `thus-spoke-zakura` CLI where lightwalletd is
listening (it picks a random port) and checks that it answers. Then click
**Save**. If Cyze can't find the CLI, run `thus-spoke-zakura endpoints` and
paste the `lightwalletd` URL (`http://127.0.0.1:<port>`) into the endpoint
field. Plain `http://` is allowed only for local addresses. On Windows, run
the devnet in WSL2 and enter the URL by hand.
3. **Network upgrade.** A devnet picks its own upgrades, and the wallet must
match the node. **Auto** reads the upgrade from the node when you click
Detect or Test connection. You can also force NU6 through NU6.3 (Ironwood).
4. **Fund the group.** Open the group's wallet, copy its `uregtest1…` address,
and use the faucet on the devnet dashboard (the link appears after Detect).
Mine a few blocks there so the funds confirm. Devnet wallets scan the whole
chain, so funds sent before you opened the wallet still show up.

**Limitations:**
- **Sends need NU6.2 or later.** The stock devnet runs **NU6**. Cyze can only
build Orchard proofs with the NU6.2+ circuit, so a NU6 node will most likely
reject a send, and the settings page warns you about this. Syncing, receiving,
and balances work. To test sends, use a devnet that activates NU6.2 or NU6.3.
- **Before Ironwood, the balance is the Orchard pool.** Until the devnet
activates NU6.3, the balance shows the Orchard pool, because that's where
devnet funds land.
- ZcashNames don't resolve on a devnet.
- **Resetting the devnet starts a brand-new chain.** A group's devnet wallet
still holds the old chain, so after `thus-spoke-zakura reset` (or recreating
it), delete that wallet's data: the `wallets/<group id>/regtest/` folder in
Cyze's data directory. It is rebuilt on the next sync. This only affects
devnet data. Testnet and mainnet wallets are stored separately.

**Diagnostics log.** Wallet Settings has a **Diagnostics log** card that captures
what the app logs while running (sync steps, errors). Use **Copy all** to grab it
for troubleshooting; it's in memory only and clears on restart.
Expand Down
9 changes: 8 additions & 1 deletion src-tauri/core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,9 @@ zcash_client_backend = { version = "=0.24.0-rc.7", optional = true, default-feat
zcash_client_sqlite = { version = "=0.22.0-rc.8", optional = true, features = ["orchard", "transparent-inputs", "unstable", "serde"] }
pczt = { version = "0.9.1", optional = true, features = ["signer"] }
zcash_keys = { version = "0.16.1", optional = true, features = ["orchard"] }
zcash_protocol = { version = "0.10.3", optional = true }
# `local-consensus` exposes `LocalNetwork`, the regtest parameters used for a
# local devnet (see `WalletNetwork::Regtest`).
zcash_protocol = { version = "0.10.3", optional = true, features = ["local-consensus"] }
tonic = { version = "0.14", optional = true, default-features = false, features = ["transport", "tls-webpki-roots"] }
# SQLCipher (bundled amalgamation) so the per-group wallet database is encrypted
# at rest. Feature-unifies with zcash_client_sqlite's `bundled` rusqlite: the
Expand Down Expand Up @@ -95,3 +97,8 @@ wallet = [

[dev-dependencies]
tempfile = "3"

[lints.rust]
# `zcash_unstable = "nu7"` is the zcash crates' opt-in for the next upgrade; the
# regtest `LocalNetwork` literal in wallet.rs must follow it to stay buildable.
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(zcash_unstable, values("nu7", "nutachyon"))'] }
Loading
Loading