syntax = "proto3"; package cash.z.wallet.sdk.rpc; option go_package = "walletrpc"; // Remember that proto3 fields are all optional. A field that is not present will be set to its zero value. // bytes fields of hashes are in canonical little-endian format. // CompactBlock is a packaging of ONLY the data from a block that's needed to: // 1. Detect a payment to your shielded Sapling address // 2. Detect a spend of your shielded Sapling notes // 3. Update your witnesses to generate new Sapling spend proofs. message CompactBlock { uint32 protoVersion = 1; // the version of this wire format, for storage uint64 height = 2; // the height of this block bytes hash = 3; bytes prevHash = 4; uint32 time = 5; bytes header = 6; // (hash, prevHash, and time) OR (full header) repeated CompactTx vtx = 7; // compact transactions from this block } message CompactTx { // Index and hash will allow the receiver to call out to chain // explorers or other data structures to retrieve more information // about this transaction. uint64 index = 1; bytes hash = 2; // The transaction fee: present if server can provide. In the case of a // stateless server and a transaction with transparent inputs, this will be // unset because the calculation requires reference to prior transactions. // in a pure-Sapling context, the fee will be calculable as: // valueBalance + (sum(vPubNew) - sum(vPubOld) - sum(tOut)) uint32 fee = 3; repeated CompactSpend spends = 4; repeated CompactOutput outputs = 5; } message CompactSpend { bytes nf = 1; } message CompactOutput { bytes cmu = 1; bytes epk = 2; bytes ciphertext = 3; }