feat(core): add block conversion helpers (#1186)
* feat: add full to sparse block conversion * feat: add sparse to full block conversion
This commit is contained in:
parent
5de7086ba7
commit
19f7a93243
|
@ -1,5 +1,5 @@
|
||||||
// Taken from <https://github.com/tomusdrw/rust-web3/blob/master/src/types/block.rs>
|
// Taken from <https://github.com/tomusdrw/rust-web3/blob/master/src/types/block.rs>
|
||||||
use crate::types::{Address, Bloom, Bytes, H256, U256, U64};
|
use crate::types::{Address, Bloom, Bytes, Transaction, TxHash, H256, U256, U64};
|
||||||
#[cfg(not(feature = "celo"))]
|
#[cfg(not(feature = "celo"))]
|
||||||
use core::cmp::Ordering;
|
use core::cmp::Ordering;
|
||||||
use serde::{ser::SerializeStruct, Deserialize, Deserializer, Serialize, Serializer};
|
use serde::{ser::SerializeStruct, Deserialize, Deserializer, Serialize, Serializer};
|
||||||
|
@ -137,6 +137,209 @@ impl<TX> Block<TX> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Block<TxHash> {
|
||||||
|
/// Converts this block that only holds transaction hashes into a full block with `Transaction`
|
||||||
|
pub fn into_full_block(self, transactions: Vec<Transaction>) -> Block<Transaction> {
|
||||||
|
#[cfg(not(feature = "celo"))]
|
||||||
|
{
|
||||||
|
let Block {
|
||||||
|
hash,
|
||||||
|
parent_hash,
|
||||||
|
uncles_hash,
|
||||||
|
author,
|
||||||
|
state_root,
|
||||||
|
transactions_root,
|
||||||
|
receipts_root,
|
||||||
|
number,
|
||||||
|
gas_used,
|
||||||
|
gas_limit,
|
||||||
|
extra_data,
|
||||||
|
logs_bloom,
|
||||||
|
timestamp,
|
||||||
|
difficulty,
|
||||||
|
total_difficulty,
|
||||||
|
seal_fields,
|
||||||
|
uncles,
|
||||||
|
size,
|
||||||
|
mix_hash,
|
||||||
|
nonce,
|
||||||
|
base_fee_per_gas,
|
||||||
|
..
|
||||||
|
} = self;
|
||||||
|
Block {
|
||||||
|
hash,
|
||||||
|
parent_hash,
|
||||||
|
uncles_hash,
|
||||||
|
author,
|
||||||
|
state_root,
|
||||||
|
transactions_root,
|
||||||
|
receipts_root,
|
||||||
|
number,
|
||||||
|
gas_used,
|
||||||
|
gas_limit,
|
||||||
|
extra_data,
|
||||||
|
logs_bloom,
|
||||||
|
timestamp,
|
||||||
|
difficulty,
|
||||||
|
total_difficulty,
|
||||||
|
seal_fields,
|
||||||
|
uncles,
|
||||||
|
size,
|
||||||
|
mix_hash,
|
||||||
|
nonce,
|
||||||
|
base_fee_per_gas,
|
||||||
|
transactions,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "celo")]
|
||||||
|
{
|
||||||
|
let Block {
|
||||||
|
hash,
|
||||||
|
parent_hash,
|
||||||
|
author,
|
||||||
|
state_root,
|
||||||
|
transactions_root,
|
||||||
|
receipts_root,
|
||||||
|
number,
|
||||||
|
gas_used,
|
||||||
|
extra_data,
|
||||||
|
logs_bloom,
|
||||||
|
timestamp,
|
||||||
|
total_difficulty,
|
||||||
|
seal_fields,
|
||||||
|
size,
|
||||||
|
base_fee_per_gas,
|
||||||
|
randomness,
|
||||||
|
epoch_snark_data,
|
||||||
|
..
|
||||||
|
} = self;
|
||||||
|
|
||||||
|
Block {
|
||||||
|
hash,
|
||||||
|
parent_hash,
|
||||||
|
author,
|
||||||
|
state_root,
|
||||||
|
transactions_root,
|
||||||
|
receipts_root,
|
||||||
|
number,
|
||||||
|
gas_used,
|
||||||
|
extra_data,
|
||||||
|
logs_bloom,
|
||||||
|
timestamp,
|
||||||
|
total_difficulty,
|
||||||
|
seal_fields,
|
||||||
|
size,
|
||||||
|
base_fee_per_gas,
|
||||||
|
randomness,
|
||||||
|
epoch_snark_data,
|
||||||
|
transactions,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<Block<Transaction>> for Block<TxHash> {
|
||||||
|
fn from(full: Block<Transaction>) -> Self {
|
||||||
|
#[cfg(not(feature = "celo"))]
|
||||||
|
{
|
||||||
|
let Block {
|
||||||
|
hash,
|
||||||
|
parent_hash,
|
||||||
|
uncles_hash,
|
||||||
|
author,
|
||||||
|
state_root,
|
||||||
|
transactions_root,
|
||||||
|
receipts_root,
|
||||||
|
number,
|
||||||
|
gas_used,
|
||||||
|
gas_limit,
|
||||||
|
extra_data,
|
||||||
|
logs_bloom,
|
||||||
|
timestamp,
|
||||||
|
difficulty,
|
||||||
|
total_difficulty,
|
||||||
|
seal_fields,
|
||||||
|
uncles,
|
||||||
|
transactions,
|
||||||
|
size,
|
||||||
|
mix_hash,
|
||||||
|
nonce,
|
||||||
|
base_fee_per_gas,
|
||||||
|
} = full;
|
||||||
|
Block {
|
||||||
|
hash,
|
||||||
|
parent_hash,
|
||||||
|
uncles_hash,
|
||||||
|
author,
|
||||||
|
state_root,
|
||||||
|
transactions_root,
|
||||||
|
receipts_root,
|
||||||
|
number,
|
||||||
|
gas_used,
|
||||||
|
gas_limit,
|
||||||
|
extra_data,
|
||||||
|
logs_bloom,
|
||||||
|
timestamp,
|
||||||
|
difficulty,
|
||||||
|
total_difficulty,
|
||||||
|
seal_fields,
|
||||||
|
uncles,
|
||||||
|
size,
|
||||||
|
mix_hash,
|
||||||
|
nonce,
|
||||||
|
base_fee_per_gas,
|
||||||
|
transactions: transactions.iter().map(|tx| tx.hash).collect(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "celo")]
|
||||||
|
{
|
||||||
|
let Block {
|
||||||
|
hash,
|
||||||
|
parent_hash,
|
||||||
|
author,
|
||||||
|
state_root,
|
||||||
|
transactions_root,
|
||||||
|
receipts_root,
|
||||||
|
number,
|
||||||
|
gas_used,
|
||||||
|
extra_data,
|
||||||
|
logs_bloom,
|
||||||
|
timestamp,
|
||||||
|
total_difficulty,
|
||||||
|
seal_fields,
|
||||||
|
transactions,
|
||||||
|
size,
|
||||||
|
base_fee_per_gas,
|
||||||
|
randomness,
|
||||||
|
epoch_snark_data,
|
||||||
|
} = full;
|
||||||
|
|
||||||
|
Block {
|
||||||
|
hash,
|
||||||
|
parent_hash,
|
||||||
|
author,
|
||||||
|
state_root,
|
||||||
|
transactions_root,
|
||||||
|
receipts_root,
|
||||||
|
number,
|
||||||
|
gas_used,
|
||||||
|
extra_data,
|
||||||
|
logs_bloom,
|
||||||
|
timestamp,
|
||||||
|
total_difficulty,
|
||||||
|
seal_fields,
|
||||||
|
size,
|
||||||
|
base_fee_per_gas,
|
||||||
|
randomness,
|
||||||
|
epoch_snark_data,
|
||||||
|
transactions: transactions.iter().map(|tx| tx.hash).collect(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, Clone, PartialEq, Deserialize, Serialize)]
|
#[derive(Debug, Default, Clone, PartialEq, Deserialize, Serialize)]
|
||||||
#[cfg(feature = "celo")]
|
#[cfg(feature = "celo")]
|
||||||
/// Commit-reveal data for generating randomness in the
|
/// Commit-reveal data for generating randomness in the
|
||||||
|
|
Loading…
Reference in New Issue