Add custom serde deser to block_body.graffiti
This commit is contained in:
parent
519ee81c68
commit
8484cbf6ec
@ -1,4 +1,4 @@
|
|||||||
use crate::test_utils::TestRandom;
|
use crate::test_utils::{graffiti_from_hex_str, TestRandom};
|
||||||
use crate::*;
|
use crate::*;
|
||||||
|
|
||||||
use serde_derive::{Deserialize, Serialize};
|
use serde_derive::{Deserialize, Serialize};
|
||||||
@ -24,6 +24,7 @@ use tree_hash_derive::{CachedTreeHash, TreeHash};
|
|||||||
pub struct BeaconBlockBody {
|
pub struct BeaconBlockBody {
|
||||||
pub randao_reveal: Signature,
|
pub randao_reveal: Signature,
|
||||||
pub eth1_data: Eth1Data,
|
pub eth1_data: Eth1Data,
|
||||||
|
#[serde(deserialize_with = "graffiti_from_hex_str")]
|
||||||
pub graffiti: [u8; 32],
|
pub graffiti: [u8; 32],
|
||||||
pub proposer_slashings: Vec<ProposerSlashing>,
|
pub proposer_slashings: Vec<ProposerSlashing>,
|
||||||
pub attester_slashings: Vec<AttesterSlashing>,
|
pub attester_slashings: Vec<AttesterSlashing>,
|
||||||
|
@ -22,7 +22,7 @@ pub use rand::{
|
|||||||
RngCore,
|
RngCore,
|
||||||
{prng::XorShiftRng, SeedableRng},
|
{prng::XorShiftRng, SeedableRng},
|
||||||
};
|
};
|
||||||
pub use serde_utils::{fork_from_hex_str, u8_from_hex_str};
|
pub use serde_utils::{fork_from_hex_str, graffiti_from_hex_str, u8_from_hex_str};
|
||||||
pub use test_random::TestRandom;
|
pub use test_random::TestRandom;
|
||||||
pub use testing_attestation_builder::TestingAttestationBuilder;
|
pub use testing_attestation_builder::TestingAttestationBuilder;
|
||||||
pub use testing_attestation_data_builder::TestingAttestationDataBuilder;
|
pub use testing_attestation_data_builder::TestingAttestationDataBuilder;
|
||||||
|
@ -2,6 +2,7 @@ use serde::de::Error;
|
|||||||
use serde::{Deserialize, Deserializer};
|
use serde::{Deserialize, Deserializer};
|
||||||
|
|
||||||
pub const FORK_BYTES_LEN: usize = 4;
|
pub const FORK_BYTES_LEN: usize = 4;
|
||||||
|
pub const GRAFFITI_BYTES_LEN: usize = 32;
|
||||||
|
|
||||||
pub fn u8_from_hex_str<'de, D>(deserializer: D) -> Result<u8, D::Error>
|
pub fn u8_from_hex_str<'de, D>(deserializer: D) -> Result<u8, D::Error>
|
||||||
where
|
where
|
||||||
@ -32,3 +33,24 @@ where
|
|||||||
}
|
}
|
||||||
Ok(array)
|
Ok(array)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn graffiti_from_hex_str<'de, D>(deserializer: D) -> Result<[u8; GRAFFITI_BYTES_LEN], D::Error>
|
||||||
|
where
|
||||||
|
D: Deserializer<'de>,
|
||||||
|
{
|
||||||
|
let s: String = Deserialize::deserialize(deserializer)?;
|
||||||
|
let mut array = [0 as u8; GRAFFITI_BYTES_LEN];
|
||||||
|
let decoded: Vec<u8> = hex::decode(&s.as_str()[2..]).map_err(D::Error::custom)?;
|
||||||
|
|
||||||
|
if decoded.len() > GRAFFITI_BYTES_LEN {
|
||||||
|
return Err(D::Error::custom("Fork length too long"));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i, item) in array.iter_mut().enumerate() {
|
||||||
|
if i > decoded.len() {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
*item = decoded[i];
|
||||||
|
}
|
||||||
|
Ok(array)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user