iota_types/
epoch_data.rs

1// Copyright (c) Mysten Labs, Inc.
2// Modifications Copyright (c) 2024 IOTA Stiftung
3// SPDX-License-Identifier: Apache-2.0
4
5use crate::{
6    base_types::EpochId,
7    message_envelope::Message,
8    messages_checkpoint::{CheckpointDigest, CheckpointSummary, CheckpointTimestamp},
9};
10
11/// The static epoch information that is accessible to move smart contracts
12#[derive(Default)]
13pub struct EpochData {
14    epoch_id: EpochId,
15    epoch_start_timestamp: CheckpointTimestamp,
16    epoch_digest: CheckpointDigest,
17}
18
19impl EpochData {
20    pub fn new(
21        epoch_id: EpochId,
22        epoch_start_timestamp: CheckpointTimestamp,
23        epoch_digest: CheckpointDigest,
24    ) -> Self {
25        Self {
26            epoch_id,
27            epoch_start_timestamp,
28            epoch_digest,
29        }
30    }
31
32    pub fn new_genesis(epoch_start_timestamp: CheckpointTimestamp) -> Self {
33        Self {
34            epoch_id: 0,
35            epoch_start_timestamp,
36            epoch_digest: Default::default(),
37        }
38    }
39
40    pub fn new_from_epoch_checkpoint(
41        epoch_id: EpochId,
42        epoch_checkpoint: &CheckpointSummary,
43    ) -> Self {
44        Self {
45            epoch_id,
46            epoch_start_timestamp: epoch_checkpoint.timestamp_ms,
47            epoch_digest: epoch_checkpoint.digest(),
48        }
49    }
50
51    pub fn new_test() -> Self {
52        Default::default()
53    }
54
55    pub fn epoch_id(&self) -> EpochId {
56        self.epoch_id
57    }
58
59    pub fn epoch_start_timestamp(&self) -> CheckpointTimestamp {
60        self.epoch_start_timestamp
61    }
62
63    pub fn epoch_digest(&self) -> CheckpointDigest {
64        self.epoch_digest
65    }
66}