Skip to main content

sui_indexer_alt_schema/
checkpoints.rs

1// Copyright (c) Mysten Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4use 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    /// BCS serialized CheckpointContents
22    pub checkpoint_contents: Vec<u8>,
23    /// BCS serialized CheckpointSummary
24    pub checkpoint_summary: Vec<u8>,
25    /// BCS serialized AuthorityQuorumSignInfo
26    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    /// Try and identify the chain that this indexer is indexing based on its genesis checkpoint
45    /// digest.
46    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    /// The protocol version that the chain was started at.
60    pub fn initial_protocol_version(&self) -> ProtocolVersion {
61        ProtocolVersion::new(self.initial_protocol_version as u64)
62    }
63}