catbuffer_rust/
block_header_builder.rs1use super::address_dto::*;
23use super::block_fee_multiplier_dto::*;
24use super::difficulty_dto::*;
25use super::entity_type_dto::*;
26use super::generator_utils::*;
27use super::hash256_dto::*;
28use super::height_dto::*;
29use super::key_dto::*;
30use super::network_type_dto::*;
31use super::signature_dto::*;
32use super::timestamp_dto::*;
33use super::vrf_proof_builder::*;
34
35#[derive(Debug, Clone)]
37pub struct BlockHeaderBuilder {
38 signature: SignatureDto,
40 signer_public_key: KeyDto,
42 version: u8,
44 network: NetworkTypeDto,
46 _type: EntityTypeDto,
48 height: HeightDto,
50 timestamp: TimestampDto,
52 difficulty: DifficultyDto,
54 generation_hash_proof: VrfProofBuilder,
56 previous_block_hash: Hash256Dto,
58 transactions_hash: Hash256Dto,
60 receipts_hash: Hash256Dto,
62 state_hash: Hash256Dto,
64 beneficiary_address: AddressDto,
66 fee_multiplier: BlockFeeMultiplierDto,
68}
69
70
71impl BlockHeaderBuilder {
72 pub fn from_binary(_bytes: &[u8]) -> Self {
77 let signature = SignatureDto::from_binary(&_bytes); let mut _bytes = _bytes[signature.get_size()..].to_vec();
79 let signer_public_key = KeyDto::from_binary(&_bytes); let mut _bytes = _bytes[signer_public_key.get_size()..].to_vec();
81 let buf = fixed_bytes::<1>(&_bytes);
82 let version = u8::from_le_bytes(buf); let _bytes = (&_bytes[1..]).to_vec();
84 let network = NetworkTypeDto::from_binary(&_bytes); let mut _bytes = _bytes[network.get_size()..].to_vec();
86 let _type = EntityTypeDto::from_binary(&_bytes); let _bytes = (&_bytes[_type.get_size()..]).to_vec();
88 let height = HeightDto::from_binary(&_bytes); let mut _bytes = _bytes[height.get_size()..].to_vec();
90 let timestamp = TimestampDto::from_binary(&_bytes); let mut _bytes = _bytes[timestamp.get_size()..].to_vec();
92 let difficulty = DifficultyDto::from_binary(&_bytes); let mut _bytes = _bytes[difficulty.get_size()..].to_vec();
94 let generation_hash_proof = VrfProofBuilder::from_binary(&_bytes); let mut _bytes = _bytes[generation_hash_proof.get_size()..].to_vec();
96 let previous_block_hash = Hash256Dto::from_binary(&_bytes); let mut _bytes = _bytes[previous_block_hash.get_size()..].to_vec();
98 let transactions_hash = Hash256Dto::from_binary(&_bytes); let mut _bytes = _bytes[transactions_hash.get_size()..].to_vec();
100 let receipts_hash = Hash256Dto::from_binary(&_bytes); let mut _bytes = _bytes[receipts_hash.get_size()..].to_vec();
102 let state_hash = Hash256Dto::from_binary(&_bytes); let mut _bytes = _bytes[state_hash.get_size()..].to_vec();
104 let beneficiary_address = AddressDto::from_binary(&_bytes); let mut _bytes = _bytes[beneficiary_address.get_size()..].to_vec();
106 let fee_multiplier = BlockFeeMultiplierDto::from_binary(&_bytes); let mut _bytes = _bytes[fee_multiplier.get_size()..].to_vec();
108 BlockHeaderBuilder { signature, signer_public_key, version, network, _type, height, timestamp, difficulty, generation_hash_proof, previous_block_hash, transactions_hash, receipts_hash, state_hash, beneficiary_address, fee_multiplier }
109 }
110
111 pub fn get_signature(&self) -> SignatureDto {
116 self.signature.clone()
117 }
118
119 pub fn get_signer_public_key(&self) -> KeyDto {
124 self.signer_public_key.clone()
125 }
126
127 pub fn get_version(&self) -> u8 {
132 self.version.clone()
133 }
134
135 pub fn get_network(&self) -> NetworkTypeDto {
140 self.network.clone()
141 }
142
143 pub fn get_type(&self) -> EntityTypeDto {
148 self._type
149 }
150
151 pub fn get_height(&self) -> HeightDto {
156 self.height.clone()
157 }
158
159 pub fn get_timestamp(&self) -> TimestampDto {
164 self.timestamp.clone()
165 }
166
167 pub fn get_difficulty(&self) -> DifficultyDto {
172 self.difficulty.clone()
173 }
174
175 pub fn get_generation_hash_proof(&self) -> VrfProofBuilder {
180 self.generation_hash_proof.clone()
181 }
182
183 pub fn get_previous_block_hash(&self) -> Hash256Dto {
188 self.previous_block_hash.clone()
189 }
190
191 pub fn get_transactions_hash(&self) -> Hash256Dto {
196 self.transactions_hash.clone()
197 }
198
199 pub fn get_receipts_hash(&self) -> Hash256Dto {
204 self.receipts_hash.clone()
205 }
206
207 pub fn get_state_hash(&self) -> Hash256Dto {
212 self.state_hash.clone()
213 }
214
215 pub fn get_beneficiary_address(&self) -> AddressDto {
220 self.beneficiary_address.clone()
221 }
222
223 pub fn get_fee_multiplier(&self) -> BlockFeeMultiplierDto {
228 self.fee_multiplier.clone()
229 }
230
231 pub fn get_size(&self) -> usize {
236 let mut size = 0;
237 size += 4; size += 4; size += self.signature.get_size(); size += self.signer_public_key.get_size(); size += 4; size += 1; size += self.network.get_size(); size += self._type.get_size(); size += self.height.get_size(); size += self.timestamp.get_size(); size += self.difficulty.get_size(); size += self.generation_hash_proof.get_size(); size += self.previous_block_hash.get_size(); size += self.transactions_hash.get_size(); size += self.receipts_hash.get_size(); size += self.state_hash.get_size(); size += self.beneficiary_address.get_size(); size += self.fee_multiplier.get_size(); size
256 }
257
258 pub fn serializer(&self) -> Vec<u8> {
263 let mut buf: Vec<u8> = vec![];
264 buf.append(&mut self.get_size().to_le_bytes().to_vec()); buf.append(&mut 4u16.to_le_bytes().to_vec());
266 buf.append(&mut self.signature.serializer()); buf.append(&mut self.signer_public_key.serializer()); buf.append(&mut 4u16.to_le_bytes().to_vec());
269 buf.append(&mut self.get_version().to_le_bytes().to_vec()); buf.append(&mut self.network.serializer()); buf.append(&mut self._type.serializer()); buf.append(&mut self.height.serializer()); buf.append(&mut self.timestamp.serializer()); buf.append(&mut self.difficulty.serializer()); buf.append(&mut self.generation_hash_proof.serializer()); buf.append(&mut self.previous_block_hash.serializer()); buf.append(&mut self.transactions_hash.serializer()); buf.append(&mut self.receipts_hash.serializer()); buf.append(&mut self.state_hash.serializer()); buf.append(&mut self.beneficiary_address.serializer()); buf.append(&mut self.fee_multiplier.serializer()); buf
283 }
284}
285