Moved consensus related constants to their own core module.

This commit is contained in:
Ignotus Peverell 2016-11-09 15:51:24 -08:00
parent ba5479841e
commit 4ade3ec1b8
No known key found for this signature in database
GPG key ID: 99CD25F39F8F8211
8 changed files with 31 additions and 53 deletions

View file

@ -23,9 +23,8 @@ use std::collections::HashSet;
use core::Committed; use core::Committed;
use core::{Input, Output, Proof, TxProof, Transaction}; use core::{Input, Output, Proof, TxProof, Transaction};
use core::transaction::merkle_inputs_outputs; use core::transaction::merkle_inputs_outputs;
use core::{PROOFSIZE, REWARD}; use consensus::{PROOFSIZE, REWARD, MAX_IN_OUT_LEN};
use core::hash::{Hash, Hashed, ZERO_HASH}; use core::hash::{Hash, Hashed, ZERO_HASH};
use core::transaction::MAX_IN_OUT_LEN;
use ser::{self, Readable, Reader, Writeable, Writer}; use ser::{self, Readable, Reader, Writeable, Writer};
/// Block header, fairly standard compared to other blockchains. /// Block header, fairly standard compared to other blockchains.

View file

@ -60,7 +60,7 @@ pub const ZERO_HASH: Hash = Hash([0; 32]);
/// Serializer that outputs a hash of the serialized object /// Serializer that outputs a hash of the serialized object
pub struct HashWriter { pub struct HashWriter {
state: Keccak state: Keccak,
} }
impl HashWriter { impl HashWriter {
@ -71,9 +71,7 @@ impl HashWriter {
impl Default for HashWriter { impl Default for HashWriter {
fn default() -> HashWriter { fn default() -> HashWriter {
HashWriter { HashWriter { state: Keccak::new_sha3_256() }
state: Keccak::new_sha3_256()
}
} }
} }
@ -90,7 +88,7 @@ impl ser::Writer for HashWriter {
/// A trait for types that have a canonical hash /// A trait for types that have a canonical hash
pub trait Hashed { pub trait Hashed {
fn hash(&self) -> Hash; fn hash(&self) -> Hash;
} }
impl<W: ser::Writeable> Hashed for W { impl<W: ser::Writeable> Hashed for W {
@ -112,4 +110,3 @@ impl Hashed for [u8] {
Hash(ret) Hash(ret)
} }
} }

View file

@ -19,25 +19,17 @@ pub mod hash;
pub mod transaction; pub mod transaction;
#[allow(dead_code)] #[allow(dead_code)]
pub use self::block::{Block, BlockHeader};
pub use self::transaction::{Transaction, Input, Output, TxProof};
use self::hash::{Hash, Hashed, ZERO_HASH};
use ser::{Writeable, Writer, Error};
use std::fmt; use std::fmt;
use std::cmp::Ordering; use std::cmp::Ordering;
use secp::{self, Secp256k1}; use secp::{self, Secp256k1};
use secp::pedersen::*; use secp::pedersen::*;
/// The block subsidy amount use consensus::PROOFSIZE;
pub const REWARD: u64 = 1_000_000_000; pub use self::block::{Block, BlockHeader};
pub use self::transaction::{Transaction, Input, Output, TxProof};
/// Block interval, in seconds use self::hash::{Hash, Hashed, ZERO_HASH};
pub const BLOCK_TIME_SEC: u8 = 15; use ser::{Writeable, Writer, Error};
/// Cuckoo-cycle proof size (cycle length)
pub const PROOFSIZE: usize = 42;
/// Implemented by types that hold inputs and outputs including Pedersen /// Implemented by types that hold inputs and outputs including Pedersen
/// commitments. Handles the collection of the commitments as well as their /// commitments. Handles the collection of the commitments as well as their
@ -156,8 +148,10 @@ impl Writeable for HPair {
} }
} }
/// An iterator over hashes in a vector that pairs them to build a row in a /// An iterator over hashes in a vector that pairs them to build a row in a
/// Merkle tree. If the vector has an odd number of hashes, it appends a zero hash /// Merkle tree. If the vector has an odd number of hashes, it appends a zero
/// See https://bitcointalk.org/index.php?topic=102395.0 CVE-2012-2459 (block merkle calculation exploit) /// hash
/// See https://bitcointalk.org/index.php?topic=102395.0 CVE-2012-2459 (block
/// merkle calculation exploit)
/// for the argument against duplication of last hash /// for the argument against duplication of last hash
struct HPairIter(Vec<Hash>); struct HPairIter(Vec<Hash>);
impl Iterator for HPairIter { impl Iterator for HPairIter {

View file

@ -14,18 +14,15 @@
//! Transactions //! Transactions
use core::Committed;
use core::MerkleRow;
use core::hash::{Hash, Hashed};
use ser::{self, Reader, Writer, Readable, Writeable};
use secp::{self, Secp256k1, Message, Signature}; use secp::{self, Secp256k1, Message, Signature};
use secp::key::SecretKey; use secp::key::SecretKey;
use secp::pedersen::{RangeProof, Commitment}; use secp::pedersen::{RangeProof, Commitment};
/// The maximum number of inputs or outputs a transaction may have use consensus::MAX_IN_OUT_LEN;
/// and be deserializable. use core::Committed;
pub const MAX_IN_OUT_LEN: u64 = 50000; use core::MerkleRow;
use core::hash::{Hash, Hashed};
use ser::{self, Reader, Writer, Readable, Writeable};
/// A proof that a transaction did not create (or remove) funds. Includes both /// A proof that a transaction did not create (or remove) funds. Includes both
/// the transaction's Pedersen commitment and the signature that guarantees /// the transaction's Pedersen commitment and the signature that guarantees

View file

@ -31,6 +31,7 @@ extern crate tiny_keccak;
#[macro_use] #[macro_use]
pub mod macros; pub mod macros;
pub mod consensus;
pub mod core; pub mod core;
pub mod genesis; pub mod genesis;
pub mod pow; pub mod pow;

View file

@ -23,7 +23,8 @@ use std::cmp;
use crypto::digest::Digest; use crypto::digest::Digest;
use crypto::sha2::Sha256; use crypto::sha2::Sha256;
use core::{Proof, PROOFSIZE}; use consensus::PROOFSIZE;
use core::Proof;
use pow::siphash::siphash24; use pow::siphash::siphash24;
const MAXPATHLEN: usize = 8192; const MAXPATHLEN: usize = 8192;

View file

@ -27,28 +27,14 @@ mod cuckoo;
use time; use time;
use core::{Block, Proof, PROOFSIZE}; use consensus::{SIZESHIFT, EASINESS};
use core::{Block, Proof};
use core::hash::{Hash, Hashed}; use core::hash::{Hash, Hashed};
use pow::cuckoo::{Cuckoo, Miner, Error}; use pow::cuckoo::{Cuckoo, Miner, Error};
use ser; use ser;
use ser::{Writeable, Writer}; use ser::{Writeable, Writer};
/// Default Cuckoo Cycle size shift used is 28. We may decide to increase it.
/// when difficuty increases.
const SIZESHIFT: u32 = 28;
/// Default Cuckoo Cycle easiness, high enough to have good likeliness to find
/// a solution.
const EASINESS: u32 = 50;
/// Max target hash, lowest difficulty
pub const MAX_TARGET: [u32; PROOFSIZE] =
[0xfff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff];
/// Subset of a block header that goes into hashing for proof of work. /// Subset of a block header that goes into hashing for proof of work.
/// Basically the whole thing minus the PoW solution itself and the total /// Basically the whole thing minus the PoW solution itself and the total
/// difficulty (yet unknown). We also add the count of every variable length /// difficulty (yet unknown). We also add the count of every variable length
@ -169,6 +155,7 @@ fn pow_size(b: &Block, target: Proof, sizeshift: u32) -> Result<(Proof, u64), Er
#[cfg(test)] #[cfg(test)]
mod test { mod test {
use super::*; use super::*;
use consensus::MAX_TARGET;
use core::Proof; use core::Proof;
use genesis; use genesis;

View file

@ -49,9 +49,11 @@ impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self { match *self {
Error::IOErr(ref e) => write!(f, "{}", e), Error::IOErr(ref e) => write!(f, "{}", e),
Error::UnexpectedData { expected: ref e, received: ref r } => write!(f, "expected {:?}, got {:?}", e, r), Error::UnexpectedData { expected: ref e, received: ref r } => {
write!(f, "expected {:?}, got {:?}", e, r)
}
Error::CorruptedData => f.write_str("corrupted data"), Error::CorruptedData => f.write_str("corrupted data"),
Error::TooLargeReadErr(ref s) => f.write_str(&s) Error::TooLargeReadErr(ref s) => f.write_str(&s),
} }
} }
} }
@ -60,7 +62,7 @@ impl error::Error for Error {
fn cause(&self) -> Option<&error::Error> { fn cause(&self) -> Option<&error::Error> {
match *self { match *self {
Error::IOErr(ref e) => Some(e), Error::IOErr(ref e) => Some(e),
_ => None _ => None,
} }
} }
@ -69,7 +71,7 @@ impl error::Error for Error {
Error::IOErr(ref e) => error::Error::description(e), Error::IOErr(ref e) => error::Error::description(e),
Error::UnexpectedData { expected: _, received: _ } => "unexpected data", Error::UnexpectedData { expected: _, received: _ } => "unexpected data",
Error::CorruptedData => "corrupted data", Error::CorruptedData => "corrupted data",
Error::TooLargeReadErr(ref s) => s Error::TooLargeReadErr(ref s) => s,
} }
} }
} }
@ -90,7 +92,7 @@ pub enum SerializationMode {
/// Serialize the data that defines the object /// Serialize the data that defines the object
Hash, Hash,
/// Serialize everything that a signer of the object should know /// Serialize everything that a signer of the object should know
SigHash SigHash,
} }
/// Implementations defined how different numbers and binary structures are /// Implementations defined how different numbers and binary structures are