Add BLOCK_MAINNET_415000_BYTES test vector and a test to deserialize it

And println! it, for human eyeballs checking.

Resolves #218

Also changes the header constant to use _BYTES.
This commit is contained in:
Deirdre Connolly 2020-02-07 14:48:50 -06:00 committed by Henry de Valence
parent d6c2b7ac32
commit 866acde6e8
4 changed files with 36 additions and 5 deletions

1
Cargo.lock generated
View File

@ -1719,6 +1719,7 @@ dependencies = [
"ed25519-zebra",
"futures",
"hex",
"lazy_static",
"proptest",
"proptest-derive",
"redjubjub",

View File

@ -8,12 +8,13 @@ edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
thiserror = "1"
byteorder = "1.3"
chrono = "0.4"
hex = "0.4"
sha2 = "0.8"
futures = "0.3"
hex = "0.4"
lazy_static = "1.4.0"
sha2 = "0.8"
thiserror = "1"
# ZF deps
redjubjub = "0.1"
ed25519-zebra = "0.2"

View File

@ -1,7 +1,13 @@
use std::fmt;
use hex::FromHex;
use lazy_static::lazy_static;
// Copied from librustzcash
// From mainnet block 415000.
// https://explorer.zcha.in/blocks/415000
pub const HEADER_MAINNET_415000: [u8; 1487] = [
pub const HEADER_MAINNET_415000_BYTES: [u8; 1487] = [
0x04, 0x00, 0x00, 0x00, 0x52, 0x74, 0xb4, 0x3b, 0x9e, 0x4a, 0xd8, 0xf4, 0x3e, 0x93, 0xf7, 0x84,
0x63, 0xd2, 0x4d, 0xcf, 0xe5, 0x31, 0xae, 0xb4, 0x71, 0x98, 0x19, 0xf4, 0xf9, 0x7f, 0x7e, 0x03,
0x00, 0x00, 0x00, 0x00, 0x66, 0x30, 0x73, 0xbc, 0x4b, 0xfa, 0x95, 0xc9, 0xbe, 0xc3, 0x6a, 0xad,
@ -96,3 +102,17 @@ pub const HEADER_MAINNET_415000: [u8; 1487] = [
0x2c, 0xab, 0x3f, 0xf4, 0x52, 0x21, 0x90, 0x99, 0x68, 0xe5, 0x1e, 0x6b, 0xc2, 0x54, 0xd5, 0x09,
0xad, 0xeb, 0x75, 0xcb, 0xa7, 0x6d, 0x48, 0xfe, 0x02, 0x4e, 0x3e, 0x66, 0xd8, 0xdf, 0x5e,
];
struct BlockTestVector(pub [u8; 3280]);
impl fmt::Debug for BlockTestVector {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_tuple("BlockTestVector")
.field(&hex::encode(&self.0[..]))
.finish()
}
}
lazy_static! {
pub static ref BLOCK_MAINNET_415000_BYTES: Vec<u8> = <Vec<u8>>::from_hex("040000005274b43b9e4ad8f43e93f78463d24dcfe531aeb4719819f4f97f7e0300000000663073bc4bfa95c9bec36aad7268a573049797bdfc5aa4c743fbe4820aa393ce0000000000000000000000000000000000000000000000000000000000000000a8becc5be1ab031cc2fd607c776a7a0000000000000000000000000000000000000000003eb21819fd400500949d55de0cc633e0cce41e4649ef4aa3349f0100290ffe281b947b3b53fbd2f35b1ce292649b96ac6e0883af3a6844b95592e74556da344b4701961cd4130c68219cfa1341d5afb5049eb0e8be4a2d92d678c40785e33705548b5f3a54f0a4c39a2f58ee784a24163cd86f54812327df55e1d55ca84b6e7b887a7cbfb9091a585bdb8ea4759307c56c1b3dafc669245a6f654b6f730052266a01ad4f9c0b59ed4e17712b3e72df0498aa8de4888f993531c60acded1d4b66e89de0b6482cccd4a712f5cf9d4ca83be0f922de2c1dbb3a1407480dbe8795993d8be640988abfe7a8a1b33a12131c451e1abc0d83fb851862c637ce724d5fe97aa9a806cf34bab509f4554b0cd10a7ddfd5821b091ad2c90c1aa1d81eb3d72db41993b648f41e2138ff9531a30ff73b22140e4ebd7baa33848e512d99300c5c131c6e75f5714a5c6dcb178b4a4978dac83ad412fbd692019250c553049aad457984bedfc96ae701c659bc7007a97d0a9002b945bdec45a945ef6285b2cd553b4c09d907c627863f0399e8725b4ff7fc5979e3cff22814508448ef8b9831c285959333396aa362a51cf205097afabec15e41fb6e30b622374bf58b37ef9d1b241ead5a682b98b65749a57568e238d50afd417e1e960e7b5a064fd9f694d783a2cbcd58552dedbb9e5e1123674ef73a524196cf05d3e524660549ffe7bd6568057135ffd5afd943f6da11cbb597e8ccecd77ecbe909de0631bfa29cd3e3d5544671ba80256153d6e9990b88ad8e0cf4989bef4be457f9c7b0f1aacd6e0ef320605c29ed0cd2eb6cfce216c52a317580201cad7a0943d24b7b06d5bf758761dd96e11970b5ded697222b2c77e7f256a605ac755549c1651f25adfc9d53d9117e3a0bb409eee4a600120472949c7dda1c2edb3c330c7f96179982916457d331e96309dd24df74eedd00e7db497ee130f77de666eb557fb316e87adaf1813ce426a458a6eee3a85b2ab88f6553aadae8de652e211a1d9f334d596b5eb6173407efcc2e8154bb9ca1212aa9a1a1121d2f5a7712cf25cc8148b8052e0d2e09f20e5ba2a98277e975b0eed9a89206966337163f215c9d04a6598b0958d333d846773c69e5abfd0a0427f3660614dd82b79adb851a0d58b62df5f0b3ac836e6e25f3a51f49a99ade57796fe9fcc26f0a1f94ff0819fe52b75087edbed3a81626eb5416c66557f11c0fcedff223d6aa8cd5c35386e5b4b95a0f0392ca301a38b3687d094493b9e9d264d07a190ce57d116804382a3fabe15af4df4fa043f0287aa1ed5568d9ef5d12510d010ccdab4eb616f6df13bb3126ef43d9d65735e4e4c04b576348d040b535055a3d5ae191b75f0612f3b24066a05245f27fe57bda66bd6dec7e4fc9cb236802062adde3cd0e313482c92a0c721102b1f38b015ab8d01559cbcb40f674e9efad5ee9c2fe133faa55ca1dd0ff26710f9da819cc1459cb7ed260dad3db0596258d47c74c32a8b852b671c5a0caa2001603d90c91a7df2e2d4ee9ae9bf1a6b1ec88151c62360d03024d2e2d0114084f6b88c5bba24aa7cecfac16e91e0baf3d8653e218093e81d2a63c32eff1d9030f9e1414ece420daa24e0dd5b845b3274bb839ca1c53bcc0194242d74b2631b9495a654fbbdcbfad779f7322b60736249880604821d96924e3fa397f354a5ecca34f614da5456f9b36338c37d8f6fbf626be983477766022872746da10a1771ceb02dd8aac01ba186bf1488630479e1284da0190fce8b59ac6b0fd416bee56b72f0a5845153557ff0f4950a0dc5be65ce942d22e18534c4e0efabb2d1525dc4858b9b0f77d474a125ebc250e08fedbfaa66f453d90932cab3ff45221909968e51e6bc254d509adeb75cba76d48fe024e3e66d8df5e01030000807082c403010000000000000000000000000000000000000000000000000000000000000000ffffffff1a03185506152f5669614254432f48656c6c6f20776f726c64212fffffffff0200ca9a3b000000001976a914fb8a6a4c11cb216ce21f9f371dfc9271a469bd6d88ac80b2e60e0000000017a914e0a5ea1340cc6b1d6a82c06c0a9c60b9898b6ae987000000000000000000").expect("Block bytes are in valid hex representation");
}

View File

@ -100,10 +100,19 @@ fn blockheaderhash_from_blockheader() {
#[test]
fn deserialize_blockheader() {
// https://explorer.zcha.in/blocks/415000
let _header = BlockHeader::zcash_deserialize(&test_vectors::HEADER_MAINNET_415000[..])
let _header = BlockHeader::zcash_deserialize(&test_vectors::HEADER_MAINNET_415000_BYTES[..])
.expect("blockheader test vector should deserialize");
}
#[test]
fn deserialize_block() {
// https://explorer.zcha.in/blocks/415000
let block = Block::zcash_deserialize(&test_vectors::BLOCK_MAINNET_415000_BYTES[..])
.expect("block test vector should deserialize");
println!("{:#?}", block);
}
proptest! {
#[test]