zcli

zcash wallet CLI — ssh keys as wallet seed

deterministic zcash wallet derived from ed25519 ssh keys. built for agents — any process with ssh access already has a wallet. no key ceremony, no mnemonic management, no interactive setup. same key, same wallet, same addresses, every time.

why agents

agents authenticate with ssh keys. zcli derives a zcash spending key from the same ed25519 seed — one key for both identity and money. no new secrets to provision, no seed phrases to store, no interactive prompts. a headless process can sync, check balance, and send transactions with a single binary and the key it already has.

ZCLI_IDENTITY=~/.ssh/id_agent zcli balance --script
{"transparent":0,"shielded":50000,"total":50000,"total_zec":"0.00050000"}

every agent gets a unique wallet from its ssh key. deterministic derivation means no state to back up beyond the key itself.

install

cargo install --git https://github.com/rotkonetworks/zcli

or build from source:

git clone https://github.com/rotkonetworks/zcli
cd zcli && cargo build --release
cp target/release/zcli ~/.local/bin/

usage

zcli -i ~/.ssh/id_ed25519 address          # show addresses
zcli sync                                   # scan chain
zcli balance                                # check funds
zcli send 0.01 u1...                        # send shielded
zcli shield                                 # t-addr → shielded
zcli receive                                # QR code
zcli notes --script                         # list received notes
zcli export                                 # export viewing key
zcli board --port 3333                      # sync loop + JSON API

all commands accept --script for machine-readable JSON output. set ZCLI_IDENTITY, ZCLI_ENDPOINT as env vars for headless operation.

architecture

zcli

the wallet. derives orchard spending keys and transparent keys from an ssh ed25519 seed via BLAKE2b-512("ZcliWalletSeed" || ed25519_seed). syncs by trial-decrypting compact blocks locally — the server never learns which addresses belong to you. builds and proves orchard transactions with halo2 locally.

zidecar

the backend. serves compact blocks with lightwalletd header proofs over gRPC-web. zcli trusts nothing from the server except what's provable against the zcash chain. default endpoint: zcash.rotko.net.

zync

the scanner library. shared trial-decryption logic for compact block scanning, used by both zcli and narsil. handles orchard note decryption, nullifier tracking, and witness construction.

narsil — threshold multisig

narsil brings threshold multisig to zcash via OSST (one-step schnorr threshold) signatures. a group of agents or humans split a spending key into shares — t-of-n threshold authorization for any transaction.

on-chain it looks like a normal wallet. validators cannot tell which members signed, how many there are, or whether anyone dissented. internal governance stays private. 100 shares, flexible allocation, weighted voting.

# formation: 3 agents, 2-of-3 threshold
narsil form --threshold 2 --members 3
# each agent holds shares, contributes to signing rounds
narsil sign --proposal "send 1.0 ZEC to u1..."
# aggregated OSST signature = indistinguishable from solo spend

narsil uses the pallas curve for orchard compatibility. relay-based coordination with pseudonymous mailboxes and e2e encryption. DKG ceremony for key generation, VSS backup for recovery.

donate

send shielded ZEC to the board wallet. amounts appear below.

donation QR code — scan with zashi
u153khs43zxz6hcnlwnut77knyqmursnutmungxjxd7khruunhj77ea6tmpzxct9wzlgen66jxwc93ea053j22afkktu7hrs9rmsz003h3

scan with zashi or paste the unified address.

board

received donations. synced every 5 minutes. memo text pending zidecar full ciphertext support.

loading...