2022-02-16 18:44:20 -08:00
|
|
|
// Copyright (c) 2019-2021 The Zcash developers
|
|
|
|
// Distributed under the MIT software license, see the accompanying
|
|
|
|
// file COPYING or https://www.opensource.org/licenses/mit-license.php .
|
|
|
|
|
2018-10-12 10:22:58 -07:00
|
|
|
syntax = "proto3";
|
|
|
|
package cash.z.wallet.sdk.rpc;
|
|
|
|
option go_package = "walletrpc";
|
2022-02-16 18:44:20 -08:00
|
|
|
option swift_prefix = "";
|
2018-10-12 10:22:58 -07:00
|
|
|
|
|
|
|
// 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.
|
|
|
|
|
2024-01-03 12:15:26 -08:00
|
|
|
// Information about the state of the chain as of a given block.
|
2023-07-03 15:19:13 -07:00
|
|
|
message ChainMetadata {
|
2023-06-29 13:28:12 -07:00
|
|
|
uint32 saplingCommitmentTreeSize = 1; // the size of the Sapling note commitment tree as of the end of this block
|
|
|
|
uint32 orchardCommitmentTreeSize = 2; // the size of the Orchard note commitment tree as of the end of this block
|
|
|
|
}
|
|
|
|
|
2024-01-03 12:15:26 -08:00
|
|
|
// A compact representation of the shielded data in a Zcash block.
|
|
|
|
//
|
2018-10-12 10:22:58 -07:00
|
|
|
// 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 {
|
2023-06-29 13:28:12 -07:00
|
|
|
uint32 protoVersion = 1; // the version of this wire format, for storage
|
|
|
|
uint64 height = 2; // the height of this block
|
|
|
|
bytes hash = 3; // the ID (hash) of this block, same as in block explorers
|
|
|
|
bytes prevHash = 4; // the ID (hash) of this block's predecessor
|
|
|
|
uint32 time = 5; // Unix epoch time when the block was mined
|
|
|
|
bytes header = 6; // (hash, prevHash, and time) OR (full header)
|
|
|
|
repeated CompactTx vtx = 7; // zero or more compact transactions from this block
|
2023-07-03 15:19:13 -07:00
|
|
|
ChainMetadata chainMetadata = 8; // information about the state of the chain as of this block
|
2018-10-12 10:22:58 -07:00
|
|
|
}
|
|
|
|
|
2024-01-03 12:15:26 -08:00
|
|
|
// A compact representation of the shielded data in a Zcash transaction.
|
|
|
|
//
|
2022-02-16 18:44:20 -08:00
|
|
|
// CompactTx contains the minimum information for a wallet to know if this transaction
|
|
|
|
// is relevant to it (either pays to it or spends from it) via shielded elements
|
|
|
|
// only. This message will not encode a transparent-to-transparent transaction.
|
2018-10-12 10:22:58 -07:00
|
|
|
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.
|
2022-02-16 18:44:20 -08:00
|
|
|
uint64 index = 1; // the index within the full block
|
|
|
|
bytes hash = 2; // the ID (hash) of this transaction, same as in block explorers
|
2018-10-12 10:22:58 -07:00
|
|
|
|
|
|
|
// 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.
|
2022-02-17 15:58:20 -08:00
|
|
|
// If there are no transparent inputs, the fee will be calculable as:
|
|
|
|
// valueBalanceSapling + valueBalanceOrchard + sum(vPubNew) - sum(vPubOld) - sum(tOut)
|
2018-10-12 10:22:58 -07:00
|
|
|
uint32 fee = 3;
|
|
|
|
|
2022-02-16 18:44:20 -08:00
|
|
|
repeated CompactSaplingSpend spends = 4;
|
|
|
|
repeated CompactSaplingOutput outputs = 5;
|
|
|
|
repeated CompactOrchardAction actions = 6;
|
|
|
|
}
|
|
|
|
|
2024-01-03 12:15:26 -08:00
|
|
|
// A compact representation of a [Sapling Spend](https://zips.z.cash/protocol/protocol.pdf#spendencodingandconsensus).
|
|
|
|
//
|
2022-02-16 18:44:20 -08:00
|
|
|
// CompactSaplingSpend is a Sapling Spend Description as described in 7.3 of the Zcash
|
|
|
|
// protocol specification.
|
|
|
|
message CompactSaplingSpend {
|
2024-01-03 12:15:26 -08:00
|
|
|
bytes nf = 1; // Nullifier (see the Zcash protocol specification)
|
2018-10-12 10:22:58 -07:00
|
|
|
}
|
|
|
|
|
2024-01-03 12:15:26 -08:00
|
|
|
// A compact representation of a [Sapling Output](https://zips.z.cash/protocol/protocol.pdf#outputencodingandconsensus).
|
|
|
|
//
|
|
|
|
// It encodes the `cmu` field, `ephemeralKey` field, and a 52-byte prefix of the
|
|
|
|
// `encCiphertext` field of a Sapling Output Description. Total size is 116 bytes.
|
2022-02-16 18:44:20 -08:00
|
|
|
message CompactSaplingOutput {
|
2024-01-03 12:15:26 -08:00
|
|
|
bytes cmu = 1; // Note commitment u-coordinate.
|
|
|
|
bytes ephemeralKey = 2; // Ephemeral public key.
|
|
|
|
bytes ciphertext = 3; // First 52 bytes of ciphertext.
|
2018-10-12 10:22:58 -07:00
|
|
|
}
|
|
|
|
|
2024-01-03 12:15:26 -08:00
|
|
|
// A compact representation of an [Orchard Action](https://zips.z.cash/protocol/protocol.pdf#actionencodingandconsensus).
|
2022-02-16 18:44:20 -08:00
|
|
|
message CompactOrchardAction {
|
|
|
|
bytes nullifier = 1; // [32] The nullifier of the input note
|
|
|
|
bytes cmx = 2; // [32] The x-coordinate of the note commitment for the output note
|
|
|
|
bytes ephemeralKey = 3; // [32] An encoding of an ephemeral Pallas public key
|
2022-02-17 15:58:20 -08:00
|
|
|
bytes ciphertext = 4; // [52] The first 52 bytes of the encCiphertext field
|
2018-10-12 10:22:58 -07:00
|
|
|
}
|