Replace smart quotes with ascii quotes
Some tools don't deal well with unicode text. And we're not using it consistently in Zebra anyway.
This commit is contained in:
parent
b618f5b522
commit
873127aac1
|
@ -30,13 +30,13 @@
|
||||||
//! Sapling-on-Groth16). A single transaction can have multiple proofs or
|
//! Sapling-on-Groth16). A single transaction can have multiple proofs or
|
||||||
//! signatures of different kinds, depending on the transaction version and its
|
//! signatures of different kinds, depending on the transaction version and its
|
||||||
//! structure. Verification of a transaction conventionally proceeds
|
//! structure. Verification of a transaction conventionally proceeds
|
||||||
//! “depth-first”, checking that the structure is appropriate and then that all
|
//! "depth-first", checking that the structure is appropriate and then that all
|
||||||
//! the component signatures and proofs are valid.
|
//! the component signatures and proofs are valid.
|
||||||
//!
|
//!
|
||||||
//! Now consider the problem of implementing batch verification in this context,
|
//! Now consider the problem of implementing batch verification in this context,
|
||||||
//! using conventional batch verification APIs that require passing a list of
|
//! using conventional batch verification APIs that require passing a list of
|
||||||
//! signatures or proofs. This is quite complicated, requiring implementing a
|
//! signatures or proofs. This is quite complicated, requiring implementing a
|
||||||
//! second transposed set of validation logic that proceeds “breadth-first”,
|
//! second transposed set of validation logic that proceeds "breadth-first",
|
||||||
//! checking that the structure of each transaction is appropriate while
|
//! checking that the structure of each transaction is appropriate while
|
||||||
//! assembling collections of signatures and proofs to verify. This transposed
|
//! assembling collections of signatures and proofs to verify. This transposed
|
||||||
//! validation logic must match the untransposed logic, but there is another
|
//! validation logic must match the untransposed logic, but there is another
|
||||||
|
|
|
@ -27,7 +27,7 @@ pub struct Header {
|
||||||
/// the genesis block.
|
/// the genesis block.
|
||||||
///
|
///
|
||||||
/// This ensures no previous block can be changed without also changing this
|
/// This ensures no previous block can be changed without also changing this
|
||||||
/// block’s header.
|
/// block's header.
|
||||||
pub previous_block_hash: Hash,
|
pub previous_block_hash: Hash,
|
||||||
|
|
||||||
/// The root of the Bitcoin-inherited transaction Merkle tree, binding the
|
/// The root of the Bitcoin-inherited transaction Merkle tree, binding the
|
||||||
|
@ -52,7 +52,7 @@ pub struct Header {
|
||||||
/// started hashing the header (according to the miner).
|
/// started hashing the header (according to the miner).
|
||||||
pub time: DateTime<Utc>,
|
pub time: DateTime<Utc>,
|
||||||
|
|
||||||
/// An encoded version of the target threshold this block’s header
|
/// An encoded version of the target threshold this block's header
|
||||||
/// hash must be less than or equal to, in the same nBits format
|
/// hash must be less than or equal to, in the same nBits format
|
||||||
/// used by Bitcoin.
|
/// used by Bitcoin.
|
||||||
///
|
///
|
||||||
|
|
|
@ -63,9 +63,9 @@ fn M_i(segment: &BitSlice<Lsb0, u8>) -> jubjub::Fr {
|
||||||
/// the Jubjub curve."
|
/// the Jubjub curve."
|
||||||
///
|
///
|
||||||
/// PedersenHash is used in the definitions of Pedersen commitments (§
|
/// PedersenHash is used in the definitions of Pedersen commitments (§
|
||||||
/// 5.4.7.2 ‘Windowed Pedersen commitments’), and of the Pedersen hash for the
|
/// 5.4.7.2 'Windowed Pedersen commitments'), and of the Pedersen hash for the
|
||||||
/// Sapling incremental Merkle tree (§ 5.4.1.3 ‘MerkleCRH^Sapling Hash
|
/// Sapling incremental Merkle tree (§ 5.4.1.3 'MerkleCRH^Sapling Hash
|
||||||
/// Function’).
|
/// Function').
|
||||||
///
|
///
|
||||||
/// https://zips.z.cash/protocol/protocol.pdf#concretepedersenhash
|
/// https://zips.z.cash/protocol/protocol.pdf#concretepedersenhash
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
|
@ -105,7 +105,7 @@ pub fn pedersen_hash(domain: [u8; 8], M: &BitVec<Lsb0, u8>) -> jubjub::Fq {
|
||||||
/// commitment tree. It takes as input a Pedersen commitment P, and hashes it
|
/// commitment tree. It takes as input a Pedersen commitment P, and hashes it
|
||||||
/// with another input x.
|
/// with another input x.
|
||||||
///
|
///
|
||||||
/// MixingPedersenHash(P, x) := P + [x]FindGroupHash^J^(r)(“Zcash_J_”, “”)
|
/// MixingPedersenHash(P, x) := P + [x]FindGroupHash^J^(r)("Zcash_J_", "")
|
||||||
///
|
///
|
||||||
/// https://zips.z.cash/protocol/protocol.pdf#concretemixinghash
|
/// https://zips.z.cash/protocol/protocol.pdf#concretemixinghash
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
|
@ -119,7 +119,7 @@ pub fn mixing_pedersen_hash(P: jubjub::ExtendedPoint, x: jubjub::Fr) -> jubjub::
|
||||||
/// construction, and adding a randomized point on the Jubjub curve.
|
/// construction, and adding a randomized point on the Jubjub curve.
|
||||||
///
|
///
|
||||||
/// WindowedPedersenCommit_r (s) := \
|
/// WindowedPedersenCommit_r (s) := \
|
||||||
/// PedersenHashToPoint(“Zcash_PH”, s) + [r]FindGroupHash^J^(r)(“Zcash_PH”, “r”)
|
/// PedersenHashToPoint("Zcash_PH", s) + [r]FindGroupHash^J^(r)("Zcash_PH", "r")
|
||||||
///
|
///
|
||||||
/// https://zips.z.cash/protocol/protocol.pdf#concretewindowedcommit
|
/// https://zips.z.cash/protocol/protocol.pdf#concretewindowedcommit
|
||||||
pub fn windowed_pedersen_commitment(r: jubjub::Fr, s: &BitVec<Lsb0, u8>) -> jubjub::ExtendedPoint {
|
pub fn windowed_pedersen_commitment(r: jubjub::Fr, s: &BitVec<Lsb0, u8>) -> jubjub::ExtendedPoint {
|
||||||
|
|
|
@ -666,7 +666,7 @@ impl From<SpendingKey> for Diversifier {
|
||||||
/// Derives a [_default diversifier_][4.2.2] from a SpendingKey.
|
/// Derives a [_default diversifier_][4.2.2] from a SpendingKey.
|
||||||
///
|
///
|
||||||
/// 'For each spending key, there is also a default diversified
|
/// 'For each spending key, there is also a default diversified
|
||||||
/// payment address with a “random-looking” diversifier. This
|
/// payment address with a "random-looking" diversifier. This
|
||||||
/// allows an implementation that does not expose diversified
|
/// allows an implementation that does not expose diversified
|
||||||
/// addresses as a user-visible feature, to use a default address
|
/// addresses as a user-visible feature, to use a default address
|
||||||
/// that cannot be distinguished (without knowledge of the
|
/// that cannot be distinguished (without knowledge of the
|
||||||
|
@ -795,8 +795,8 @@ mod fvk_hrp {
|
||||||
/// spend authority.
|
/// spend authority.
|
||||||
///
|
///
|
||||||
/// For incoming viewing keys on the production network, the
|
/// For incoming viewing keys on the production network, the
|
||||||
/// Human-Readable Part is “zviews”. For incoming viewing keys on the
|
/// Human-Readable Part is "zviews". For incoming viewing keys on the
|
||||||
/// test network, the Human-Readable Part is “zviewtestsapling”.
|
/// test network, the Human-Readable Part is "zviewtestsapling".
|
||||||
///
|
///
|
||||||
/// https://zips.z.cash/protocol/protocol.pdf#saplingfullviewingkeyencoding
|
/// https://zips.z.cash/protocol/protocol.pdf#saplingfullviewingkeyencoding
|
||||||
#[derive(Copy, Clone, Eq, PartialEq)]
|
#[derive(Copy, Clone, Eq, PartialEq)]
|
||||||
|
|
|
@ -28,9 +28,9 @@ pub use nullifiers::Nullifier;
|
||||||
/// address.
|
/// address.
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct Note {
|
pub struct Note {
|
||||||
/// The diversifer of the recipient’s shielded payment address.
|
/// The diversifer of the recipient's shielded payment address.
|
||||||
pub diversifier: Diversifier,
|
pub diversifier: Diversifier,
|
||||||
/// The diversified transmission key of the recipient’s shielded
|
/// The diversified transmission key of the recipient's shielded
|
||||||
/// payment address.
|
/// payment address.
|
||||||
pub transmission_key: TransmissionKey,
|
pub transmission_key: TransmissionKey,
|
||||||
/// An integer representing the value of the note in zatoshi.
|
/// An integer representing the value of the note in zatoshi.
|
||||||
|
|
|
@ -28,7 +28,7 @@ const MERKLE_DEPTH: usize = 32;
|
||||||
///
|
///
|
||||||
/// Used to hash incremental Merkle tree hash values for Sapling.
|
/// Used to hash incremental Merkle tree hash values for Sapling.
|
||||||
///
|
///
|
||||||
/// MerkleCRH^Sapling(layer, left, right) := PedersenHash(“Zcash_PH”, l || left || right)
|
/// MerkleCRH^Sapling(layer, left, right) := PedersenHash("Zcash_PH", l || left || right)
|
||||||
/// where l = I2LEBSP_6(MerkleDepth^Sapling − 1 − layer) and
|
/// where l = I2LEBSP_6(MerkleDepth^Sapling − 1 − layer) and
|
||||||
/// left, right, and the output are all technically 255 bits (l_MerkleSapling), not 256.
|
/// left, right, and the output are all technically 255 bits (l_MerkleSapling), not 256.
|
||||||
///
|
///
|
||||||
|
@ -62,7 +62,7 @@ lazy_static! {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The index of a note’s commitment at the leafmost layer of its Note
|
/// The index of a note's commitment at the leafmost layer of its Note
|
||||||
/// Commitment Tree.
|
/// Commitment Tree.
|
||||||
///
|
///
|
||||||
/// https://zips.z.cash/protocol/protocol.pdf#merkletree
|
/// https://zips.z.cash/protocol/protocol.pdf#merkletree
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//!
|
//!
|
||||||
//! "The receiving key sk_enc, the incoming viewing key ivk = (apk,
|
//! "The receiving key sk_enc, the incoming viewing key ivk = (apk,
|
||||||
//! sk_enc), and the shielded payment address addr_pk = (a_pk, pk_enc) are
|
//! sk_enc), and the shielded payment address addr_pk = (a_pk, pk_enc) are
|
||||||
//! derived from a_sk, as described in [‘Sprout Key Components’][ps]
|
//! derived from a_sk, as described in ['Sprout Key Components'][ps]
|
||||||
//!
|
//!
|
||||||
//! [ps]: https://zips.z.cash/protocol/protocol.pdf#sproutkeycomponents
|
//! [ps]: https://zips.z.cash/protocol/protocol.pdf#sproutkeycomponents
|
||||||
#![allow(clippy::unit_arg)]
|
#![allow(clippy::unit_arg)]
|
||||||
|
@ -223,7 +223,7 @@ mod ivk_magics {
|
||||||
pub const TESTNET: [u8; 3] = [0xA8, 0xAC, 0x0C];
|
pub const TESTNET: [u8; 3] = [0xA8, 0xAC, 0x0C];
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The recipient’s possession of the associated incoming viewing key
|
/// The recipient's possession of the associated incoming viewing key
|
||||||
/// is used to reconstruct the original note and memo field.
|
/// is used to reconstruct the original note and memo field.
|
||||||
pub struct IncomingViewingKey {
|
pub struct IncomingViewingKey {
|
||||||
network: Network,
|
network: Network,
|
||||||
|
|
|
@ -33,7 +33,7 @@ pub use nullifiers::{Nullifier, NullifierSeed};
|
||||||
derive(proptest_derive::Arbitrary)
|
derive(proptest_derive::Arbitrary)
|
||||||
)]
|
)]
|
||||||
pub struct Note {
|
pub struct Note {
|
||||||
/// The paying key of the recipient’s shielded payment address
|
/// The paying key of the recipient's shielded payment address
|
||||||
pub paying_key: PayingKey,
|
pub paying_key: PayingKey,
|
||||||
/// An integer representing the value of the note in zatoshi (1 ZEC
|
/// An integer representing the value of the note in zatoshi (1 ZEC
|
||||||
/// = 10^8 zatoshi)
|
/// = 10^8 zatoshi)
|
||||||
|
|
|
@ -4,7 +4,7 @@ use std::io::{self, Read};
|
||||||
/// A sequence of message authentication tags ...
|
/// A sequence of message authentication tags ...
|
||||||
///
|
///
|
||||||
/// binding h_sig to each a_sk of the JoinSplit description, computed as
|
/// binding h_sig to each a_sk of the JoinSplit description, computed as
|
||||||
/// described in § 4.10 ‘Non-malleability (Sprout)’ on p. 37
|
/// described in § 4.10 'Non-malleability (Sprout)' on p. 37
|
||||||
#[derive(PartialEq, Eq, Clone, Debug, Serialize, Deserialize)]
|
#[derive(PartialEq, Eq, Clone, Debug, Serialize, Deserialize)]
|
||||||
#[cfg_attr(
|
#[cfg_attr(
|
||||||
any(test, feature = "proptest-impl"),
|
any(test, feature = "proptest-impl"),
|
||||||
|
|
|
@ -70,7 +70,7 @@ lazy_static! {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The index of a note’s commitment at the leafmost layer of its Note
|
/// The index of a note's commitment at the leafmost layer of its Note
|
||||||
/// Commitment Tree.
|
/// Commitment Tree.
|
||||||
///
|
///
|
||||||
/// https://zips.z.cash/protocol/protocol.pdf#merkletree
|
/// https://zips.z.cash/protocol/protocol.pdf#merkletree
|
||||||
|
|
|
@ -35,10 +35,10 @@ mod magics {
|
||||||
/// In Bitcoin a single byte is used for the version field identifying
|
/// In Bitcoin a single byte is used for the version field identifying
|
||||||
/// the address type. In Zcash two bytes are used. For addresses on
|
/// the address type. In Zcash two bytes are used. For addresses on
|
||||||
/// the production network, this and the encoded length cause the first
|
/// the production network, this and the encoded length cause the first
|
||||||
/// two characters of the Base58Check encoding to be fixed as “t3” for
|
/// two characters of the Base58Check encoding to be fixed as "t3" for
|
||||||
/// P2SH addresses, and as “t1” for P2PKH addresses. (This does not
|
/// P2SH addresses, and as "t1" for P2PKH addresses. (This does not
|
||||||
/// imply that a transparent Zcash address can be parsed identically
|
/// imply that a transparent Zcash address can be parsed identically
|
||||||
/// to a Bitcoin address just by removing the “t”.)
|
/// to a Bitcoin address just by removing the "t".)
|
||||||
///
|
///
|
||||||
/// https://zips.z.cash/protocol/protocol.pdf#transparentaddrencoding
|
/// https://zips.z.cash/protocol/protocol.pdf#transparentaddrencoding
|
||||||
#[derive(Copy, Clone, Eq, PartialEq)]
|
#[derive(Copy, Clone, Eq, PartialEq)]
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//!
|
//!
|
||||||
//! [7.7]: https://zips.z.cash/protocol/protocol.pdf#subsidies
|
//! [7.7]: https://zips.z.cash/protocol/protocol.pdf#subsidies
|
||||||
|
|
||||||
/// Founders’ Reward functions apply for blocks before Canopy.
|
/// Founders' Reward functions apply for blocks before Canopy.
|
||||||
pub mod founders_reward;
|
pub mod founders_reward;
|
||||||
/// General subsidy functions apply for blocks after slow-start mining.
|
/// General subsidy functions apply for blocks after slow-start mining.
|
||||||
pub mod general;
|
pub mod general;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
//! Founders’ Reward calculations. - [§7.7][7.7]
|
//! Founders' Reward calculations. - [§7.7][7.7]
|
||||||
//!
|
//!
|
||||||
//! [7.7]: https://zips.z.cash/protocol/protocol.pdf#subsidies
|
//! [7.7]: https://zips.z.cash/protocol/protocol.pdf#subsidies
|
||||||
|
|
||||||
|
|
|
@ -121,7 +121,7 @@ mod test {
|
||||||
let blossom_height = Blossom.activation_height(network).unwrap();
|
let blossom_height = Blossom.activation_height(network).unwrap();
|
||||||
let first_halving_height = match network {
|
let first_halving_height = match network {
|
||||||
Network::Mainnet => Canopy.activation_height(network).unwrap(),
|
Network::Mainnet => Canopy.activation_height(network).unwrap(),
|
||||||
// Based on "7.7 Calculation of Block Subsidy and Founders’ Reward"
|
// Based on "7.7 Calculation of Block Subsidy and Founders' Reward"
|
||||||
Network::Testnet => Height(1_116_000),
|
Network::Testnet => Height(1_116_000),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -208,7 +208,7 @@ mod test {
|
||||||
let blossom_height = Blossom.activation_height(network).unwrap();
|
let blossom_height = Blossom.activation_height(network).unwrap();
|
||||||
let first_halving_height = match network {
|
let first_halving_height = match network {
|
||||||
Network::Mainnet => Canopy.activation_height(network).unwrap(),
|
Network::Mainnet => Canopy.activation_height(network).unwrap(),
|
||||||
// Based on "7.7 Calculation of Block Subsidy and Founders’ Reward"
|
// Based on "7.7 Calculation of Block Subsidy and Founders' Reward"
|
||||||
Network::Testnet => Height(1_116_000),
|
Network::Testnet => Height(1_116_000),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -234,7 +234,7 @@ mod test {
|
||||||
);
|
);
|
||||||
|
|
||||||
// After the 2nd halving, the block subsidy is reduced to 1.5625 ZEC
|
// After the 2nd halving, the block subsidy is reduced to 1.5625 ZEC
|
||||||
// See "7.7 Calculation of Block Subsidy and Founders’ Reward"
|
// See "7.7 Calculation of Block Subsidy and Founders' Reward"
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
Amount::try_from(156_250_000),
|
Amount::try_from(156_250_000),
|
||||||
block_subsidy(
|
block_subsidy(
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
//! Constants for Block Subsidy, Funding Streams, and Founders’ Reward
|
//! Constants for Block Subsidy, Funding Streams, and Founders' Reward
|
||||||
|
|
||||||
use zebra_chain::{amount::COIN, block::Height};
|
use zebra_chain::{amount::COIN, block::Height};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue