sui_indexer_alt_schema/
checkpoints.rsuse anyhow::{anyhow, Result};
use diesel::prelude::*;
use sui_field_count::FieldCount;
use sui_protocol_config::{Chain, ProtocolVersion};
use sui_types::digests::{ChainIdentifier, CheckpointDigest};
use crate::schema::{kv_checkpoints, kv_genesis};
#[derive(Insertable, Debug, Clone, FieldCount, Queryable)]
#[diesel(table_name = kv_checkpoints)]
pub struct StoredCheckpoint {
pub sequence_number: i64,
pub checkpoint_contents: Vec<u8>,
pub checkpoint_summary: Vec<u8>,
pub validator_signatures: Vec<u8>,
}
#[derive(Insertable, Selectable, Queryable, Debug, Clone)]
#[diesel(table_name = kv_genesis)]
pub struct StoredGenesis {
pub genesis_digest: Vec<u8>,
pub initial_protocol_version: i64,
}
impl StoredGenesis {
pub fn chain(&self) -> Result<Chain> {
let bytes: [u8; 32] = self
.genesis_digest
.clone()
.try_into()
.map_err(|_| anyhow!("Bad genesis digest"))?;
let digest = CheckpointDigest::new(bytes);
let identifier = ChainIdentifier::from(digest);
Ok(identifier.chain())
}
pub fn initial_protocol_version(&self) -> ProtocolVersion {
ProtocolVersion::new(self.initial_protocol_version as u64)
}
}