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::cp_digests;
14use crate::schema::kv_checkpoints;
15use crate::schema::kv_genesis;
16
17#[derive(Insertable, Debug, Clone, FieldCount, Queryable)]
18#[diesel(table_name = kv_checkpoints)]
19pub struct StoredCheckpoint {
20 pub sequence_number: i64,
21 pub checkpoint_contents: Vec<u8>,
23 pub checkpoint_summary: Vec<u8>,
25 pub validator_signatures: Vec<u8>,
27}
28
29#[derive(Insertable, Debug, Clone, FieldCount, Queryable, Selectable)]
30#[diesel(table_name = cp_digests)]
31pub struct StoredCpDigest {
32 pub cp_sequence_number: i64,
33 pub cp_digest: Vec<u8>,
34}
35
36#[derive(Insertable, Selectable, Queryable, Debug, Clone)]
37#[diesel(table_name = kv_genesis)]
38pub struct StoredGenesis {
39 pub genesis_digest: Vec<u8>,
40 pub initial_protocol_version: i64,
41}
42
43impl StoredGenesis {
44 pub fn chain(&self) -> Result<Chain> {
47 let bytes: [u8; 32] = self
48 .genesis_digest
49 .clone()
50 .try_into()
51 .map_err(|_| anyhow!("Bad genesis digest"))?;
52
53 let digest = CheckpointDigest::new(bytes);
54 let identifier = ChainIdentifier::from(digest);
55
56 Ok(identifier.chain())
57 }
58
59 pub fn initial_protocol_version(&self) -> ProtocolVersion {
61 ProtocolVersion::new(self.initial_protocol_version as u64)
62 }
63}