chore: Move time logic out of primitives (#173)
This commit is contained in:
parent
4128d2d70a
commit
9caa176785
4 changed files with 16 additions and 21 deletions
|
|
@ -2,6 +2,5 @@
|
||||||
|
|
||||||
mod fees;
|
mod fees;
|
||||||
mod model;
|
mod model;
|
||||||
mod time;
|
|
||||||
|
|
||||||
pub use model::*;
|
pub use model::*;
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ use pallas_crypto::hash::{Hash, Hasher};
|
||||||
use pallas_primitives::{alonzo, babbage, byron};
|
use pallas_primitives::{alonzo, babbage, byron};
|
||||||
|
|
||||||
use crate::hashes::ToHash;
|
use crate::hashes::ToHash;
|
||||||
|
use crate::time;
|
||||||
use crate::{Era, Error, MultiEraHeader};
|
use crate::{Era, Error, MultiEraHeader};
|
||||||
|
|
||||||
impl<'b> MultiEraHeader<'b> {
|
impl<'b> MultiEraHeader<'b> {
|
||||||
|
|
@ -57,10 +58,15 @@ impl<'b> MultiEraHeader<'b> {
|
||||||
|
|
||||||
pub fn slot(&self) -> u64 {
|
pub fn slot(&self) -> u64 {
|
||||||
match self {
|
match self {
|
||||||
MultiEraHeader::EpochBoundary(x) => x.to_abs_slot(),
|
MultiEraHeader::EpochBoundary(x) => {
|
||||||
|
time::byron_epoch_slot_to_absolute(x.consensus_data.epoch_id, 0)
|
||||||
|
}
|
||||||
MultiEraHeader::AlonzoCompatible(x) => x.header_body.slot,
|
MultiEraHeader::AlonzoCompatible(x) => x.header_body.slot,
|
||||||
MultiEraHeader::Babbage(x) => x.header_body.slot,
|
MultiEraHeader::Babbage(x) => x.header_body.slot,
|
||||||
MultiEraHeader::Byron(x) => x.consensus_data.0.to_abs_slot(),
|
MultiEraHeader::Byron(x) => time::byron_epoch_slot_to_absolute(
|
||||||
|
x.consensus_data.0.epoch,
|
||||||
|
x.consensus_data.0.slot,
|
||||||
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ pub mod output;
|
||||||
pub mod probe;
|
pub mod probe;
|
||||||
pub mod signers;
|
pub mod signers;
|
||||||
mod support;
|
mod support;
|
||||||
|
pub mod time;
|
||||||
pub mod tx;
|
pub mod tx;
|
||||||
pub mod withdrawals;
|
pub mod withdrawals;
|
||||||
pub mod witnesses;
|
pub mod witnesses;
|
||||||
|
|
|
||||||
|
|
@ -1,30 +1,16 @@
|
||||||
use super::{EbbHead, SlotId};
|
|
||||||
|
|
||||||
// TODO: is it safe to hardcode these values?
|
// TODO: is it safe to hardcode these values?
|
||||||
const WELLKNOWN_SLOT_LENGTH: u64 = 20; // 20 secs
|
const WELLKNOWN_SLOT_LENGTH: u64 = 20; // 20 secs
|
||||||
const WELLKNOWN_EPOCH_LENGTH: u64 = 5 * 24 * 60 * 60; // 5 days
|
const WELLKNOWN_EPOCH_LENGTH: u64 = 5 * 24 * 60 * 60; // 5 days
|
||||||
|
|
||||||
fn epoch_slot_to_absolute(epoch: u64, sub_epoch_slot: u64) -> u64 {
|
pub fn byron_epoch_slot_to_absolute(epoch: u64, sub_epoch_slot: u64) -> u64 {
|
||||||
((epoch * WELLKNOWN_EPOCH_LENGTH) / WELLKNOWN_SLOT_LENGTH) + sub_epoch_slot
|
((epoch * WELLKNOWN_EPOCH_LENGTH) / WELLKNOWN_SLOT_LENGTH) + sub_epoch_slot
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SlotId {
|
|
||||||
pub fn to_abs_slot(&self) -> u64 {
|
|
||||||
epoch_slot_to_absolute(self.epoch, self.slot)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl EbbHead {
|
|
||||||
pub fn to_abs_slot(&self) -> u64 {
|
|
||||||
epoch_slot_to_absolute(self.consensus_data.epoch_id, 0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use pallas_codec::minicbor;
|
use pallas_codec::minicbor;
|
||||||
|
|
||||||
use crate::byron::Block;
|
use crate::{byron::Block, time::byron_epoch_slot_to_absolute};
|
||||||
|
|
||||||
type BlockWrapper = (u16, Block);
|
type BlockWrapper = (u16, Block);
|
||||||
|
|
||||||
|
|
@ -32,13 +18,16 @@ mod tests {
|
||||||
fn knwon_slot_matches() {
|
fn knwon_slot_matches() {
|
||||||
// TODO: expand this test to include more test blocks
|
// TODO: expand this test to include more test blocks
|
||||||
let block_idx = 1;
|
let block_idx = 1;
|
||||||
let block_str = include_str!("../../../test_data/byron1.block");
|
let block_str = include_str!("../../test_data/byron1.block");
|
||||||
|
|
||||||
let block_bytes = hex::decode(block_str).expect(&format!("bad block file {}", block_idx));
|
let block_bytes = hex::decode(block_str).expect(&format!("bad block file {}", block_idx));
|
||||||
let (_, block): BlockWrapper = minicbor::decode(&block_bytes[..])
|
let (_, block): BlockWrapper = minicbor::decode(&block_bytes[..])
|
||||||
.expect(&format!("error decoding cbor for file {}", block_idx));
|
.expect(&format!("error decoding cbor for file {}", block_idx));
|
||||||
|
|
||||||
let computed_slot = block.header.consensus_data.0.to_abs_slot();
|
let computed_slot = byron_epoch_slot_to_absolute(
|
||||||
|
block.header.consensus_data.0.epoch,
|
||||||
|
block.header.consensus_data.0.slot,
|
||||||
|
);
|
||||||
|
|
||||||
assert_eq!(computed_slot, 4492794);
|
assert_eq!(computed_slot, 4492794);
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue