Expand description

Consensus-critical serialization.

This module contains four traits: ZcashSerialize and ZcashDeserialize, analogs of the Serde Serialize and Deserialize traits but intended for consensus-critical Zcash serialization formats, and WriteZcashExt and ReadZcashExt, extension traits for io::Read and io::Write with utility functions for reading and writing data (e.g., the Bitcoin variable-integer format).


Arbitrary data generation for serialization proptests
SHA256d, a.k.a., double SHA2, a.k.a., 2 SHA 2 Furious


A Vec<T> wrapper that ensures there is at least one T in the vector.
An arbitrary CompactSize-encoded field. Used for flags, arbitrary counts, and sizes that span multiple blocks.
A CompactSize-encoded field that is limited to MAX_PROTOCOL_MESSAGE_LEN. Used for sizes or counts of objects that are sent in network messages.
A date and time, represented by a 32-bit number of seconds since the UNIX epoch.
An unsigned time duration, represented by a 32-bit number of seconds.
A fake writer helper used to get object lengths without allocating RAM.


A serialization error.


The maximum length of a Zcash message, in bytes.


Extends Read with methods for writing Zcash/Bitcoin types.
Blind preallocation of a Vec<T: TrustedPreallocate> is based on a bounded length. This is in contrast to blind preallocation of a generic Vec, which is a DOS vector.
Extends Write with methods for writing Zcash/Bitcoin types.
Consensus-critical deserialization for Zcash.
Helper for deserializing more succinctly via type inference
Consensus-critical serialization for Zcash.


zcash_deserialize_external_count, specialised for raw bytes.
Deserialize a Vec containing external_count items.
Serialize a byte vector as a CompactSize number of items, then the items.
Serialize a raw byte Vec without writing the number of items as a CompactSize.
Serialize an empty list of items, by writing a zero CompactSize length. (And no items.)
Serialize a typed Vec without writing the number of items as a CompactSize.