Skip to main content

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 iota_sdk_types::{CheckpointDigest, checkpoint::CheckpointSummary};
6
7use crate::{base_types::EpochId, messages_checkpoint::CheckpointTimestamp};
8
9/// The static epoch information that is accessible to move smart contracts
10#[derive(Default)]
11pub struct EpochData {
12    epoch_id: EpochId,
13    epoch_start_timestamp: CheckpointTimestamp,
14    epoch_digest: CheckpointDigest,
15}
16
17impl EpochData {
18    pub fn new(
19        epoch_id: EpochId,
20        epoch_start_timestamp: CheckpointTimestamp,
21        epoch_digest: CheckpointDigest,
22    ) -> Self {
23        Self {
24            epoch_id,
25            epoch_start_timestamp,
26            epoch_digest,
27        }
28    }
29
30    pub fn new_genesis(epoch_start_timestamp: CheckpointTimestamp) -> Self {
31        Self {
32            epoch_id: 0,
33            epoch_start_timestamp,
34            epoch_digest: Default::default(),
35        }
36    }
37
38    pub fn new_from_epoch_checkpoint(
39        epoch_id: EpochId,
40        epoch_checkpoint: &CheckpointSummary,
41    ) -> Self {
42        Self {
43            epoch_id,
44            epoch_start_timestamp: epoch_checkpoint.timestamp_ms,
45            epoch_digest: epoch_checkpoint.digest(),
46        }
47    }
48
49    pub fn new_test() -> Self {
50        Default::default()
51    }
52
53    pub fn epoch_id(&self) -> EpochId {
54        self.epoch_id
55    }
56
57    pub fn epoch_start_timestamp(&self) -> CheckpointTimestamp {
58        self.epoch_start_timestamp
59    }
60
61    pub fn epoch_digest(&self) -> CheckpointDigest {
62        self.epoch_digest
63    }
64}