Update slot clock to use genesis slot
This commit is contained in:
parent
0768d24ffc
commit
00b546e6b8
@ -35,8 +35,12 @@ pub fn initialise_beacon_chain(
|
|||||||
genesis_block.state_root = Hash256::from_slice(&genesis_state.hash_tree_root());
|
genesis_block.state_root = Hash256::from_slice(&genesis_state.hash_tree_root());
|
||||||
|
|
||||||
// Slot clock
|
// Slot clock
|
||||||
let slot_clock = SystemTimeSlotClock::new(genesis_state.genesis_time, spec.seconds_per_slot)
|
let slot_clock = SystemTimeSlotClock::new(
|
||||||
.expect("Unable to load SystemTimeSlotClock");
|
spec.genesis_slot,
|
||||||
|
genesis_state.genesis_time,
|
||||||
|
spec.seconds_per_slot,
|
||||||
|
)
|
||||||
|
.expect("Unable to load SystemTimeSlotClock");
|
||||||
// Choose the fork choice
|
// Choose the fork choice
|
||||||
let fork_choice = BitwiseLMDGhost::new(block_store.clone(), state_store.clone());
|
let fork_choice = BitwiseLMDGhost::new(block_store.clone(), state_store.clone());
|
||||||
|
|
||||||
@ -72,8 +76,12 @@ pub fn initialise_test_beacon_chain(
|
|||||||
genesis_block.state_root = Hash256::from_slice(&genesis_state.hash_tree_root());
|
genesis_block.state_root = Hash256::from_slice(&genesis_state.hash_tree_root());
|
||||||
|
|
||||||
// Slot clock
|
// Slot clock
|
||||||
let slot_clock = SystemTimeSlotClock::new(genesis_state.genesis_time, spec.seconds_per_slot)
|
let slot_clock = SystemTimeSlotClock::new(
|
||||||
.expect("Unable to load SystemTimeSlotClock");
|
spec.genesis_slot,
|
||||||
|
genesis_state.genesis_time,
|
||||||
|
spec.seconds_per_slot,
|
||||||
|
)
|
||||||
|
.expect("Unable to load SystemTimeSlotClock");
|
||||||
// Choose the fork choice
|
// Choose the fork choice
|
||||||
let fork_choice = BitwiseLMDGhost::new(block_store.clone(), state_store.clone());
|
let fork_choice = BitwiseLMDGhost::new(block_store.clone(), state_store.clone());
|
||||||
|
|
||||||
|
@ -34,6 +34,7 @@ impl BeaconNodeService for BeaconNodeServiceInstance {
|
|||||||
|
|
||||||
node_info.set_fork(fork);
|
node_info.set_fork(fork);
|
||||||
node_info.set_genesis_time(genesis_time);
|
node_info.set_genesis_time(genesis_time);
|
||||||
|
node_info.set_genesis_slot(self.chain.get_spec().genesis_slot.as_u64());
|
||||||
node_info.set_chain_id(self.chain.get_spec().chain_id as u32);
|
node_info.set_chain_id(self.chain.get_spec().chain_id as u32);
|
||||||
|
|
||||||
// send the node_info the requester
|
// send the node_info the requester
|
||||||
|
@ -13,6 +13,7 @@ pub enum Error {
|
|||||||
/// Determines the present slot based upon the present system time.
|
/// Determines the present slot based upon the present system time.
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct SystemTimeSlotClock {
|
pub struct SystemTimeSlotClock {
|
||||||
|
genesis_slot: Slot,
|
||||||
genesis_seconds: u64,
|
genesis_seconds: u64,
|
||||||
slot_duration_seconds: u64,
|
slot_duration_seconds: u64,
|
||||||
}
|
}
|
||||||
@ -22,6 +23,7 @@ impl SystemTimeSlotClock {
|
|||||||
///
|
///
|
||||||
/// Returns an Error if `slot_duration_seconds == 0`.
|
/// Returns an Error if `slot_duration_seconds == 0`.
|
||||||
pub fn new(
|
pub fn new(
|
||||||
|
genesis_slot: Slot,
|
||||||
genesis_seconds: u64,
|
genesis_seconds: u64,
|
||||||
slot_duration_seconds: u64,
|
slot_duration_seconds: u64,
|
||||||
) -> Result<SystemTimeSlotClock, Error> {
|
) -> Result<SystemTimeSlotClock, Error> {
|
||||||
@ -29,6 +31,7 @@ impl SystemTimeSlotClock {
|
|||||||
Err(Error::SlotDurationIsZero)
|
Err(Error::SlotDurationIsZero)
|
||||||
} else {
|
} else {
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
|
genesis_slot,
|
||||||
genesis_seconds,
|
genesis_seconds,
|
||||||
slot_duration_seconds,
|
slot_duration_seconds,
|
||||||
})
|
})
|
||||||
@ -44,9 +47,11 @@ impl SlotClock for SystemTimeSlotClock {
|
|||||||
let duration_since_epoch = syslot_time.duration_since(SystemTime::UNIX_EPOCH)?;
|
let duration_since_epoch = syslot_time.duration_since(SystemTime::UNIX_EPOCH)?;
|
||||||
let duration_since_genesis =
|
let duration_since_genesis =
|
||||||
duration_since_epoch.checked_sub(Duration::from_secs(self.genesis_seconds));
|
duration_since_epoch.checked_sub(Duration::from_secs(self.genesis_seconds));
|
||||||
|
|
||||||
match duration_since_genesis {
|
match duration_since_genesis {
|
||||||
None => Ok(None),
|
None => Ok(None),
|
||||||
Some(d) => Ok(slot_from_duration(self.slot_duration_seconds, d)),
|
Some(d) => Ok(slot_from_duration(self.slot_duration_seconds, d)
|
||||||
|
.and_then(|s| Some(s + self.genesis_slot))),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -74,6 +79,7 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_slot_now() {
|
fn test_slot_now() {
|
||||||
let slot_time = 100;
|
let slot_time = 100;
|
||||||
|
let genesis_slot = Slot::new(0);
|
||||||
|
|
||||||
let now = SystemTime::now();
|
let now = SystemTime::now();
|
||||||
let since_epoch = now.duration_since(SystemTime::UNIX_EPOCH).unwrap();
|
let since_epoch = now.duration_since(SystemTime::UNIX_EPOCH).unwrap();
|
||||||
@ -81,18 +87,21 @@ mod tests {
|
|||||||
let genesis = since_epoch.as_secs() - slot_time * 89;
|
let genesis = since_epoch.as_secs() - slot_time * 89;
|
||||||
|
|
||||||
let clock = SystemTimeSlotClock {
|
let clock = SystemTimeSlotClock {
|
||||||
|
genesis_slot,
|
||||||
genesis_seconds: genesis,
|
genesis_seconds: genesis,
|
||||||
slot_duration_seconds: slot_time,
|
slot_duration_seconds: slot_time,
|
||||||
};
|
};
|
||||||
assert_eq!(clock.present_slot().unwrap(), Some(Slot::new(89)));
|
assert_eq!(clock.present_slot().unwrap(), Some(Slot::new(89)));
|
||||||
|
|
||||||
let clock = SystemTimeSlotClock {
|
let clock = SystemTimeSlotClock {
|
||||||
|
genesis_slot,
|
||||||
genesis_seconds: since_epoch.as_secs(),
|
genesis_seconds: since_epoch.as_secs(),
|
||||||
slot_duration_seconds: slot_time,
|
slot_duration_seconds: slot_time,
|
||||||
};
|
};
|
||||||
assert_eq!(clock.present_slot().unwrap(), Some(Slot::new(0)));
|
assert_eq!(clock.present_slot().unwrap(), Some(Slot::new(0)));
|
||||||
|
|
||||||
let clock = SystemTimeSlotClock {
|
let clock = SystemTimeSlotClock {
|
||||||
|
genesis_slot,
|
||||||
genesis_seconds: since_epoch.as_secs() - slot_time * 42 - 5,
|
genesis_seconds: since_epoch.as_secs() - slot_time * 42 - 5,
|
||||||
slot_duration_seconds: slot_time,
|
slot_duration_seconds: slot_time,
|
||||||
};
|
};
|
||||||
|
@ -45,6 +45,7 @@ message NodeInfoResponse {
|
|||||||
Fork fork = 2;
|
Fork fork = 2;
|
||||||
uint32 chain_id = 3;
|
uint32 chain_id = 3;
|
||||||
uint64 genesis_time = 4;
|
uint64 genesis_time = 4;
|
||||||
|
uint64 genesis_slot = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Fork {
|
message Fork {
|
||||||
|
@ -101,6 +101,7 @@ impl Service {
|
|||||||
|
|
||||||
// build requisite objects to form Self
|
// build requisite objects to form Self
|
||||||
let genesis_time = node_info.get_genesis_time();
|
let genesis_time = node_info.get_genesis_time();
|
||||||
|
let genesis_slot = Slot::from(node_info.get_genesis_slot());
|
||||||
|
|
||||||
info!(log,"Beacon node connected"; "Node Version" => node_info.version.clone(), "Chain ID" => node_info.chain_id, "Genesis time" => genesis_time);
|
info!(log,"Beacon node connected"; "Node Version" => node_info.version.clone(), "Chain ID" => node_info.chain_id, "Genesis time" => genesis_time);
|
||||||
|
|
||||||
@ -117,8 +118,9 @@ impl Service {
|
|||||||
|
|
||||||
// build the validator slot clock
|
// build the validator slot clock
|
||||||
let slot_clock = {
|
let slot_clock = {
|
||||||
let clock = SystemTimeSlotClock::new(genesis_time, config.spec.seconds_per_slot)
|
let clock =
|
||||||
.expect("Unable to instantiate SystemTimeSlotClock.");
|
SystemTimeSlotClock::new(genesis_slot, genesis_time, config.spec.seconds_per_slot)
|
||||||
|
.expect("Unable to instantiate SystemTimeSlotClock.");
|
||||||
Arc::new(clock)
|
Arc::new(clock)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user