essential-node-types 0.3.0

Core types used within this implementation of the Essential protocol.
Documentation
use super::*;
use essential_types::{ContentAddress, PredicateAddress, Solution};

#[test]
fn test_block_addr() {
    let solution_sets = vec![
        SolutionSet {
            solutions: vec![Solution {
                predicate_to_solve: PredicateAddress {
                    contract: ContentAddress([1; 32]),
                    predicate: ContentAddress([1; 32]),
                },
                predicate_data: Default::default(),
                state_mutations: Default::default(),
            }],
        },
        SolutionSet {
            solutions: vec![Solution {
                predicate_to_solve: PredicateAddress {
                    contract: ContentAddress([2; 32]),
                    predicate: ContentAddress([2; 32]),
                },
                predicate_data: Default::default(),
                state_mutations: Default::default(),
            }],
        },
    ];
    let block = Block {
        header: Header {
            number: 0,
            timestamp: Duration::from_secs(0),
        },
        solution_sets: solution_sets.clone(),
    };
    let addr = addr::from_block(&block);
    let content_addr = essential_hash::content_addr(&block);
    assert_eq!(content_addr, addr);

    let set_addrs = solution_sets.iter().rev().map(essential_hash::content_addr);
    let addr = addr::from_header_and_solution_set_addrs(&block.header, set_addrs);
    assert_ne!(content_addr, addr);
}