Clear out old v2.0 objects
This commit is contained in:
parent
123c6d7088
commit
c36e00a1f6
@ -17,6 +17,7 @@ rlp = { git = "https://github.com/paritytech/parity-common" }
|
|||||||
slog = "^2.2.3"
|
slog = "^2.2.3"
|
||||||
slog-term = "^2.4.0"
|
slog-term = "^2.4.0"
|
||||||
slog-async = "^2.3.0"
|
slog-async = "^2.3.0"
|
||||||
|
ssz = { path = "ssz" }
|
||||||
tokio = "0.1"
|
tokio = "0.1"
|
||||||
|
|
||||||
[dependencies.pairing]
|
[dependencies.pairing]
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
use super::utils::types::Hash256;
|
use super::utils::types::Hash256;
|
||||||
use super::attestation_record::AttestationRecord;
|
use super::attestation_record::AttestationRecord;
|
||||||
|
|
||||||
#[derive(Clone)]
|
|
||||||
pub struct ActiveState {
|
pub struct ActiveState {
|
||||||
pub pending_attestations: Vec<AttestationRecord>,
|
pub pending_attestations: Vec<AttestationRecord>,
|
||||||
pub recent_block_hashes: Vec<Hash256>,
|
pub recent_block_hashes: Vec<Hash256>,
|
||||||
|
@ -1,71 +0,0 @@
|
|||||||
use super::utils::types::*;
|
|
||||||
use super::utils::bls::AggregateSignature;
|
|
||||||
use super::rlp::{ RlpStream, Encodable };
|
|
||||||
use super::bytes::{ BytesMut, BufMut };
|
|
||||||
|
|
||||||
pub struct AggregateVote {
|
|
||||||
pub shard_id: u16,
|
|
||||||
pub shard_block_hash: Sha256Digest,
|
|
||||||
pub notary_bitfield: Bitfield,
|
|
||||||
pub aggregate_sig: AggregateSignature,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl AggregateVote {
|
|
||||||
pub fn zero() -> Self {
|
|
||||||
Self {
|
|
||||||
shard_id: 0,
|
|
||||||
shard_block_hash: Sha256Digest::zero(),
|
|
||||||
notary_bitfield: Bitfield::new(),
|
|
||||||
aggregate_sig: AggregateSignature::new()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn vote_key(&self) -> Vec<u8> {
|
|
||||||
let mut buf = BytesMut::with_capacity(34);
|
|
||||||
buf.extend_from_slice(&self.shard_block_hash.to_vec());
|
|
||||||
buf.put_u16_be(self.shard_id);
|
|
||||||
buf.to_vec()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* RLP Encoding
|
|
||||||
*/
|
|
||||||
impl Encodable for AggregateVote {
|
|
||||||
fn rlp_append(&self, s: &mut RlpStream) {
|
|
||||||
s.append(&self.shard_id);
|
|
||||||
s.append(&self.shard_block_hash);
|
|
||||||
s.append(&self.notary_bitfield);
|
|
||||||
// s.append(&self.aggregate_sig); // TODO: represent this in RLP
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use super::super::rlp;
|
|
||||||
use super::*;
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_zero_fn() {
|
|
||||||
let v = AggregateVote::zero();
|
|
||||||
// TODO: test this better
|
|
||||||
assert_eq!(v.shard_id, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_rlp_serialization() {
|
|
||||||
let a = AggregateVote {
|
|
||||||
shard_id: 100,
|
|
||||||
shard_block_hash: Sha256Digest::zero(),
|
|
||||||
notary_bitfield: Bitfield::new(),
|
|
||||||
aggregate_sig: AggregateSignature::new()
|
|
||||||
};
|
|
||||||
let e = rlp::encode(&a);
|
|
||||||
assert_eq!(e.len(), 35);
|
|
||||||
assert_eq!(e[0], 100);
|
|
||||||
assert_eq!(e[1], 160);
|
|
||||||
assert_eq!(e[2..34], [0; 32]);
|
|
||||||
assert_eq!(e[34], 128);
|
|
||||||
}
|
|
||||||
}
|
|
@ -2,14 +2,13 @@ use super::utils::types::{ Hash256, Bitfield };
|
|||||||
use super::utils::bls::{ AggregateSignature };
|
use super::utils::bls::{ AggregateSignature };
|
||||||
|
|
||||||
|
|
||||||
#[derive(Clone)]
|
|
||||||
pub struct AttestationRecord {
|
pub struct AttestationRecord {
|
||||||
slot: u64,
|
pub slot: u64,
|
||||||
shard_id: u16,
|
pub shard_id: u16,
|
||||||
oblique_parent_hashes: Vec<Hash256>,
|
pub oblique_parent_hashes: Vec<Hash256>,
|
||||||
shard_block_hash: Hash256,
|
pub shard_block_hash: Hash256,
|
||||||
attester_bitfield: Bitfield,
|
pub attester_bitfield: Bitfield,
|
||||||
aggregate_sig: Option<AggregateSignature>,
|
pub aggregate_sig: Option<AggregateSignature>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AttestationRecord {
|
impl AttestationRecord {
|
||||||
|
@ -1,10 +1,7 @@
|
|||||||
use super::utils::types::Hash256;
|
use super::utils::types::Hash256;
|
||||||
use super::utils::bls::{ Signature, AggregateSignature, Keypair, PublicKey };
|
|
||||||
use super::attestation_record::AttestationRecord;
|
use super::attestation_record::AttestationRecord;
|
||||||
use super::ssz;
|
use super::ssz;
|
||||||
|
|
||||||
use std::hash::{ Hash, Hasher };
|
|
||||||
|
|
||||||
const SSZ_BLOCK_LENGTH: usize = 192;
|
const SSZ_BLOCK_LENGTH: usize = 192;
|
||||||
|
|
||||||
pub struct Block {
|
pub struct Block {
|
||||||
@ -30,7 +27,8 @@ impl Block {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns a Vec<u8>
|
// Not sure if this will be useful, leaving it here for the
|
||||||
|
// time being.
|
||||||
pub fn ssz_encode_without_attestations(&self)
|
pub fn ssz_encode_without_attestations(&self)
|
||||||
-> [u8; SSZ_BLOCK_LENGTH]
|
-> [u8; SSZ_BLOCK_LENGTH]
|
||||||
{
|
{
|
||||||
@ -47,89 +45,20 @@ impl Block {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Hash for Block {
|
|
||||||
fn hash<H: Hasher>(&self, state: &mut H) {
|
|
||||||
let bytes = self.ssz_encode_without_attestations();
|
|
||||||
bytes.hash(state);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::super::rlp;
|
|
||||||
extern crate rand;
|
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
use self::rand::{ SeedableRng, XorShiftRng };
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_signable_message_encoding() {
|
|
||||||
let parent_hash = Sha256Digest::from([0; 32]);
|
|
||||||
let randao_reveal = Sha256Digest::from([1; 32]);
|
|
||||||
let main_chain_ref = Sha256Digest::from([2; 32]);
|
|
||||||
let state_hash = StateHash::zero();
|
|
||||||
let mut b = Block::new(parent_hash,
|
|
||||||
randao_reveal,
|
|
||||||
main_chain_ref,
|
|
||||||
state_hash);
|
|
||||||
b.skip_count = 2;
|
|
||||||
let output = b.encode_to_signable_message();
|
|
||||||
// TODO: test this better
|
|
||||||
assert_eq!(output[0], 160);
|
|
||||||
assert_eq!(output[1..21], [0; 20]);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_sign_and_verify() {
|
fn test_block_zero() {
|
||||||
let mut rng = XorShiftRng::from_seed([0xbc4f6d44, 0xd62f276c, 0xb963afd0, 0x5455863d]);
|
let b = Block::zero();
|
||||||
let alice_keypair = Keypair::generate(&mut rng);
|
assert!(b.parent_hash.is_zero());
|
||||||
let bob_keypair = Keypair::generate(&mut rng);
|
assert_eq!(b.slot_number, 0);
|
||||||
let mut b = Block::new(Sha256Digest::random(),
|
assert!(b.randao_reveal.is_zero());
|
||||||
Sha256Digest::random(),
|
assert_eq!(b.attestations.len(), 0);
|
||||||
Sha256Digest::random(),
|
assert!(b.pow_chain_ref.is_zero());
|
||||||
StateHash::zero());
|
assert!(b.active_state_root.is_zero());
|
||||||
|
assert!(b.crystallized_state_root.is_zero());
|
||||||
// Both signatures fail before signing
|
|
||||||
assert_eq!(b.sig_verify(&alice_keypair.public), false);
|
|
||||||
assert_eq!(b.sig_verify(&bob_keypair.public), false);
|
|
||||||
|
|
||||||
// Sign as Alice
|
|
||||||
b.sig_sign(&alice_keypair);
|
|
||||||
|
|
||||||
// Alice signature passes, bobs fails
|
|
||||||
assert_eq!(b.sig_verify(&alice_keypair.public), true);
|
|
||||||
assert_eq!(b.sig_verify(&bob_keypair.public), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_ssz_serialization() {
|
|
||||||
let b = Block {
|
|
||||||
parent_hash: Sha256Digest::zero(),
|
|
||||||
skip_count: 100,
|
|
||||||
randao_reveal: Sha256Digest::zero(),
|
|
||||||
attestation_bitfield: Bitfield::new(),
|
|
||||||
attestation_aggregate_sig: AggregateSignature::new(),
|
|
||||||
shard_aggregate_votes: Vec::new(),
|
|
||||||
main_chain_ref: Sha256Digest::zero(),
|
|
||||||
state_hash: StateHash::zero(),
|
|
||||||
sig: None
|
|
||||||
};
|
|
||||||
let e = rlp::encode(&b);
|
|
||||||
assert_eq!(e.len(), 168);
|
|
||||||
assert_eq!(e[0], 160);
|
|
||||||
assert_eq!(e[1..33], [0; 32]);
|
|
||||||
assert_eq!(e[33], 100);
|
|
||||||
assert_eq!(e[34], 160);
|
|
||||||
assert_eq!(e[35..67], [0; 32]);
|
|
||||||
assert_eq!(e[67], 128);
|
|
||||||
assert_eq!(e[69], 160);
|
|
||||||
assert_eq!(e[70..102], [0; 32]);
|
|
||||||
/*
|
|
||||||
assert_eq!(e[102], 248);
|
|
||||||
assert_eq!(e[103], 64);
|
|
||||||
assert_eq!(e[104..136], [128; 32]);
|
|
||||||
assert_eq!(e[136..168], [128; 32]);
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,6 @@ impl CrosslinkRecord {
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::super::rlp;
|
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -5,7 +5,6 @@ use super::ethereum_types::U256;
|
|||||||
use super::utils::types::{ Hash256 };
|
use super::utils::types::{ Hash256 };
|
||||||
|
|
||||||
|
|
||||||
#[derive(Clone)]
|
|
||||||
pub struct CrystallizedState {
|
pub struct CrystallizedState {
|
||||||
pub validators: Vec<ValidatorRecord>,
|
pub validators: Vec<ValidatorRecord>,
|
||||||
pub epoch_number: u64,
|
pub epoch_number: u64,
|
||||||
|
@ -5,17 +5,12 @@ extern crate bytes;
|
|||||||
extern crate ssz;
|
extern crate ssz;
|
||||||
|
|
||||||
use super::utils;
|
use super::utils;
|
||||||
// use super::pubkeystore;
|
|
||||||
|
|
||||||
pub mod active_state;
|
pub mod active_state;
|
||||||
pub mod attestation_record;
|
pub mod attestation_record;
|
||||||
pub mod crystallized_state;
|
pub mod crystallized_state;
|
||||||
pub mod config;
|
pub mod config;
|
||||||
// pub mod aggregate_vote;
|
|
||||||
pub mod block;
|
pub mod block;
|
||||||
pub mod crosslink_record;
|
pub mod crosslink_record;
|
||||||
// pub mod partial_crosslink_record;
|
|
||||||
// pub mod recent_proposer_record;
|
|
||||||
// pub mod transition;
|
|
||||||
pub mod shard_and_committee;
|
pub mod shard_and_committee;
|
||||||
pub mod validator_record;
|
pub mod validator_record;
|
||||||
|
@ -1,122 +0,0 @@
|
|||||||
use std::io::Cursor;
|
|
||||||
use super::utils::types::{ Sha256Digest, Bitfield };
|
|
||||||
use super::rlp::{ RlpStream, Encodable };
|
|
||||||
use super::bytes::{ BytesMut, BufMut, Buf };
|
|
||||||
|
|
||||||
#[derive(Eq, Clone)]
|
|
||||||
pub struct PartialCrosslinkRecord {
|
|
||||||
pub shard_id: u16,
|
|
||||||
pub shard_block_hash: Sha256Digest,
|
|
||||||
pub voter_bitfield: Bitfield
|
|
||||||
}
|
|
||||||
|
|
||||||
impl PartialCrosslinkRecord {
|
|
||||||
pub fn zero() -> Self {
|
|
||||||
Self {
|
|
||||||
shard_id: 0,
|
|
||||||
shard_block_hash: Sha256Digest::zero(),
|
|
||||||
voter_bitfield: Bitfield::new()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn new_from_vote_key(vote_key: &Vec<u8>, voter_bitfield: Bitfield)
|
|
||||||
-> Self
|
|
||||||
{
|
|
||||||
let mut buf = Cursor::new(vote_key);
|
|
||||||
let mut hash_bytes = [0_u8; 32];
|
|
||||||
buf.copy_to_slice(&mut hash_bytes);
|
|
||||||
let shard_id: u16 = buf.get_u16_be();
|
|
||||||
let shard_block_hash = Sha256Digest::from_slice(&hash_bytes);
|
|
||||||
Self {
|
|
||||||
shard_id,
|
|
||||||
shard_block_hash,
|
|
||||||
voter_bitfield
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn vote_key(&self) -> Vec<u8> {
|
|
||||||
let mut buf = BytesMut::with_capacity(34);
|
|
||||||
buf.extend_from_slice(&self.shard_block_hash.to_vec());
|
|
||||||
buf.put_u16_be(self.shard_id);
|
|
||||||
buf.to_vec()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl PartialEq for PartialCrosslinkRecord {
|
|
||||||
fn eq(&self, other: &PartialCrosslinkRecord)
|
|
||||||
-> bool
|
|
||||||
{
|
|
||||||
(self.shard_id == other.shard_id) &
|
|
||||||
(self.shard_block_hash == other.shard_block_hash)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* RLP Encoding
|
|
||||||
*/
|
|
||||||
impl Encodable for PartialCrosslinkRecord {
|
|
||||||
fn rlp_append(&self, s: &mut RlpStream) {
|
|
||||||
s.append(&self.shard_id);
|
|
||||||
s.append(&self.shard_block_hash);
|
|
||||||
s.append(&self.voter_bitfield);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use super::super::rlp;
|
|
||||||
use super::*;
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_zero() {
|
|
||||||
let p = PartialCrosslinkRecord::zero();
|
|
||||||
assert_eq!(p.shard_id, 0);
|
|
||||||
assert_eq!(p.shard_block_hash.is_zero(), true);
|
|
||||||
assert_eq!(p.voter_bitfield.num_true_bits(), 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_new_from_vote_key() {
|
|
||||||
let mut p = PartialCrosslinkRecord::zero();
|
|
||||||
p.shard_id = 223;
|
|
||||||
p.shard_block_hash = Sha256Digest::random();
|
|
||||||
|
|
||||||
let mut bitfield = Bitfield::new();
|
|
||||||
bitfield.set_bit(&42, &true);
|
|
||||||
|
|
||||||
let vk = p.vote_key();
|
|
||||||
let np = PartialCrosslinkRecord::new_from_vote_key(
|
|
||||||
&vk, bitfield.clone());
|
|
||||||
|
|
||||||
assert_eq!(np.shard_id, p.shard_id);
|
|
||||||
assert_eq!(np.shard_block_hash, p.shard_block_hash);
|
|
||||||
assert!(np.voter_bitfield == bitfield);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_vote_key_formatting() {
|
|
||||||
let mut p = PartialCrosslinkRecord::zero();
|
|
||||||
let vk = p.vote_key();
|
|
||||||
assert_eq!(vk.len(), 34);
|
|
||||||
assert_eq!(vk, vec![0; 34]);
|
|
||||||
|
|
||||||
p.shard_id = 1;
|
|
||||||
let vk = p.vote_key();
|
|
||||||
assert_eq!(vk.len(), 34);
|
|
||||||
assert_eq!(vk[0..33].to_vec(), vec![0; 33]);
|
|
||||||
assert_eq!(vk[33], 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_rlp_serialization() {
|
|
||||||
let mut p = PartialCrosslinkRecord::zero();
|
|
||||||
p.shard_id = 1;
|
|
||||||
let e = rlp::encode(&p);
|
|
||||||
assert_eq!(e.len(), 35);
|
|
||||||
assert_eq!(e[0], 1);
|
|
||||||
assert_eq!(e[1], 160);
|
|
||||||
assert_eq!(e[2..34], [0; 32]);
|
|
||||||
assert_eq!(e[34], 128);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,56 +0,0 @@
|
|||||||
use super::rlp::{ RlpStream, Encodable };
|
|
||||||
use super::utils::types::*;
|
|
||||||
|
|
||||||
#[derive(Clone)]
|
|
||||||
pub struct RecentPropserRecord {
|
|
||||||
pub index: usize, // TODO: make u24
|
|
||||||
pub randao_commitment: Sha256Digest,
|
|
||||||
pub balance_delta: i64, // TODO: make u24
|
|
||||||
}
|
|
||||||
|
|
||||||
impl RecentPropserRecord {
|
|
||||||
pub fn new(index: usize,
|
|
||||||
randao_commitment: Sha256Digest,
|
|
||||||
balance_delta: i64) -> RecentPropserRecord {
|
|
||||||
RecentPropserRecord {
|
|
||||||
index: index,
|
|
||||||
randao_commitment: randao_commitment,
|
|
||||||
balance_delta: balance_delta
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* RLP Encoding
|
|
||||||
*/
|
|
||||||
impl Encodable for RecentPropserRecord {
|
|
||||||
fn rlp_append(&self, s: &mut RlpStream) {
|
|
||||||
s.append(&self.index);
|
|
||||||
s.append(&self.randao_commitment);
|
|
||||||
// TODO: serialize this if needed.
|
|
||||||
// s.append(&self.balance_delta);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use super::super::rlp;
|
|
||||||
use super::*;
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_rlp_serialization() {
|
|
||||||
let index = 1;
|
|
||||||
let randao_commitment = Sha256Digest::zero();
|
|
||||||
let balance_delta = 99;
|
|
||||||
let r = RecentPropserRecord::new(index, randao_commitment, balance_delta);
|
|
||||||
let e = rlp::encode(&r);
|
|
||||||
assert_eq!(e.len(), 34);
|
|
||||||
assert_eq!(e[0], 1);
|
|
||||||
assert_eq!(e[1], 160);
|
|
||||||
assert_eq!(e[2..34], [0; 32]);
|
|
||||||
/*
|
|
||||||
assert_eq!(e[34], 99);
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,4 +1,3 @@
|
|||||||
#[derive(Clone)]
|
|
||||||
pub struct ShardAndCommittee {
|
pub struct ShardAndCommittee {
|
||||||
shard_id: u16,
|
shard_id: u16,
|
||||||
committee: Vec<u32>
|
committee: Vec<u32>
|
||||||
@ -21,7 +20,7 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_shard_and_committee_zero() {
|
fn test_shard_and_committee_zero() {
|
||||||
let s = CrystallizedState::zero();
|
let s = ShardAndCommittee::zero();
|
||||||
assert_eq!(s.shard_id, 0);
|
assert_eq!(s.shard_id, 0);
|
||||||
assert_eq!(s.committee.len(), 0);
|
assert_eq!(s.committee.len(), 0);
|
||||||
}
|
}
|
||||||
|
@ -49,16 +49,11 @@ impl Clone for ValidatorRecord {
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::super::rlp;
|
|
||||||
extern crate rand;
|
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
use super::super::
|
|
||||||
utils::test_helpers::get_dangerous_test_keypair;
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_validator_record_zero_rand_keypair() {
|
fn test_validator_record_zero_rand_keypair() {
|
||||||
let (v, kp) = ValidatorRecord::zero_with_thread_rand_keypair();
|
let (v, _kp) = ValidatorRecord::zero_with_thread_rand_keypair();
|
||||||
// TODO: check keys
|
// TODO: check keys
|
||||||
assert_eq!(v.withdrawal_shard, 0);
|
assert_eq!(v.withdrawal_shard, 0);
|
||||||
assert!(v.withdrawal_address.is_zero());
|
assert!(v.withdrawal_address.is_zero());
|
||||||
|
@ -2,9 +2,6 @@ extern crate ethereum_types;
|
|||||||
extern crate blake2;
|
extern crate blake2;
|
||||||
extern crate crypto_mac;
|
extern crate crypto_mac;
|
||||||
|
|
||||||
use super::state::active_state;
|
|
||||||
use super::state::crystallized_state;
|
|
||||||
|
|
||||||
pub mod types;
|
pub mod types;
|
||||||
pub mod bls;
|
pub mod bls;
|
||||||
pub mod test_helpers;
|
pub mod test_helpers;
|
||||||
|
@ -1,39 +1,11 @@
|
|||||||
use super::ethereum_types::{ H256, H160 };
|
use super::ethereum_types::{ H256, H160 };
|
||||||
use super::active_state::ActiveState;
|
|
||||||
use super::crystallized_state::CrystallizedState;
|
|
||||||
use super::boolean_bitfield::BooleanBitfield;
|
use super::boolean_bitfield::BooleanBitfield;
|
||||||
|
|
||||||
pub use super::blake2::Blake2s;
|
pub use super::blake2::Blake2s;
|
||||||
pub use super::ethereum_types::U256;
|
pub use super::ethereum_types::U256;
|
||||||
|
|
||||||
// TODO: presently the compiler accepts these two types
|
|
||||||
// as interchangable. This is somewhat loose typing,
|
|
||||||
// which is bad. Make the compiler think they're incompatible.
|
|
||||||
pub type Sha256Digest = H256;
|
|
||||||
pub type Blake2sDigest = H256;
|
|
||||||
pub type Hash256 = H256;
|
pub type Hash256 = H256;
|
||||||
|
|
||||||
pub type Address = H160;
|
pub type Address = H160;
|
||||||
|
|
||||||
pub struct StateHash {
|
|
||||||
pub active_state: Blake2sDigest,
|
|
||||||
pub crystallized_state: Blake2sDigest
|
|
||||||
}
|
|
||||||
|
|
||||||
impl StateHash {
|
|
||||||
pub fn zero() -> Self {
|
|
||||||
Self {
|
|
||||||
active_state: Blake2sDigest::zero(),
|
|
||||||
crystallized_state: Blake2sDigest::zero()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn from_states(active: &ActiveState, crystal: &CrystallizedState) -> Self {
|
|
||||||
Self {
|
|
||||||
active_state: active.blake2s_hash(),
|
|
||||||
crystallized_state: crystal.blake2s_hash()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub type Bitfield = BooleanBitfield;
|
pub type Bitfield = BooleanBitfield;
|
||||||
|
Loading…
Reference in New Issue
Block a user