sui_indexer_alt_schema/
checkpoints.rs1use anyhow::Result;
5use anyhow::anyhow;
6use diesel::prelude::*;
7use sui_field_count::FieldCount;
8use sui_protocol_config::Chain;
9use sui_protocol_config::ProtocolVersion;
10use sui_types::digests::ChainIdentifier;
11use sui_types::digests::CheckpointDigest;
12
13use crate::schema::kv_checkpoints;
14use crate::schema::kv_genesis;
15
16#[derive(Insertable, Debug, Clone, FieldCount, Queryable)]
17#[diesel(table_name = kv_checkpoints)]
18pub struct StoredCheckpoint {
19 pub sequence_number: i64,
20 pub checkpoint_contents: Vec<u8>,
22 pub checkpoint_summary: Vec<u8>,
24 pub validator_signatures: Vec<u8>,
26}
27
28#[derive(Insertable, Selectable, Queryable, Debug, Clone)]
29#[diesel(table_name = kv_genesis)]
30pub struct StoredGenesis {
31 pub genesis_digest: Vec<u8>,
32 pub initial_protocol_version: i64,
33}
34
35impl StoredGenesis {
36 pub fn chain(&self) -> Result<Chain> {
39 let bytes: [u8; 32] = self
40 .genesis_digest
41 .clone()
42 .try_into()
43 .map_err(|_| anyhow!("Bad genesis digest"))?;
44
45 let digest = CheckpointDigest::new(bytes);
46 let identifier = ChainIdentifier::from(digest);
47
48 Ok(identifier.chain())
49 }
50
51 pub fn initial_protocol_version(&self) -> ProtocolVersion {
53 ProtocolVersion::new(self.initial_protocol_version as u64)
54 }
55}