causeway-sapling
Off-chain helpers for Zcash Sapling shielded payment addresses.
This crate ships pure address parse/encode. The actual Sapling spend pipeline (PCZT building, Groth16 prove, FROST-RedJubjub round, binding signature) lives in the Causeway coordinator daemon; SDK consumers hand the coordinator a recipient z-address and the coordinator returns a broadcast-ready transaction.
What's here
decode_sapling_address(s)— parse azs1…/ztestsapling1…/zregtestsapling1…bech32 string into a network tag + raw 43-byte payload (diversifier(11) ‖ pk_d(32)).encode_sapling_address(network, raw43)— reverse direction.Network—Mainnet/Testnet/Regtest.from_hrp(...)for validating arbitrary input strings.
Why no PCZT / Groth16 surface
Building a Sapling spend requires the vault's nsk (spend authority
secret) for the SNARK witness. In Causeway's threshold model that
material lives only in the coordinator process and is never exposed
to dApps or tenant programs. SDK callers therefore never run Groth16
themselves; they ask the coordinator for a signed raw_tx and
broadcast it.
Pairing with the rest of the SDK
causeway-types::AssetId::Sapling— single-byte asset id used in PDA seeds and the Causeway tweak.causeway-types::SighashKind::SaplingSpendAuth— sighash kind the on-chainrequest_signingflow expects for shielded sends.causeway-types::SignatureFormat::RedJubjub64— wire format of the 64-byte aggregate spend-auth signature returned by the FROST round.
License
Apache-2.0.