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