chainhook-types 1.3.8

Bitcoin and Stacks data schemas, based on the Rosetta specification
Documentation
use crate::StacksTransactionData;

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct NakamotoBlockHeaderData {
    pub version: u8,
    pub chain_length: u64,
    pub burn_spent: u64,
    pub consensus_hash: String,
    pub parent_block_id: String,
    pub tx_merkle_root: String,
    pub state_index_root: String,
    pub timestamp: u64,
    pub miner_signature: String,
    pub signer_signature: Vec<String>,
    pub pox_treatment: String,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct NakamotoBlockData {
    pub header: NakamotoBlockHeaderData,
    pub block_hash: String,
    pub index_block_hash: String,
    pub transactions: Vec<StacksTransactionData>,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct BlockProposalData {
    pub block: NakamotoBlockData,
    pub burn_height: u64,
    pub reward_cycle: u64,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct BlockAcceptedResponse {
    pub signer_signature_hash: String,
    pub signature: String,
    pub metadata: SignerMessageMetadata,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct SignerMessageMetadata {
    pub server_version: String,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum BlockValidationFailedCode {
    BadBlockHash,
    BadTransaction,
    InvalidBlock,
    ChainstateError,
    UnknownParent,
    NonCanonicalTenure,
    NoSuchTenure,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum BlockRejectReasonCode {
    #[serde(rename_all = "SCREAMING_SNAKE_CASE")] 
    ValidationFailed {
        #[serde(rename = "VALIDATION_FAILED")]
        validation_failed: BlockValidationFailedCode,
    },
    ConnectivityIssues,
    RejectedInPriorRound,
    NoSortitionView,
    SortitionViewMismatch,
    TestingDirective,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct BlockRejectedResponse {
    pub reason: String,
    pub reason_code: BlockRejectReasonCode,
    pub signer_signature_hash: String,
    pub chain_id: u32,
    pub signature: String,
    pub metadata: SignerMessageMetadata,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(tag = "type", content = "data")]
pub enum BlockResponseData {
    Accepted(BlockAcceptedResponse),
    Rejected(BlockRejectedResponse),
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct BlockPushedData {
    pub block: NakamotoBlockData,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct PeerInfoData {
    pub burn_block_height: u64,
    pub stacks_tip_consensus_hash: String,
    pub stacks_tip: String,
    pub stacks_tip_height: u64,
    pub pox_consensus: String,
    pub server_version: String,
    pub network_id: u32,
    pub index_block_hash: String,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct MockProposalData {
    pub peer_info: PeerInfoData,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct MockSignatureData {
    pub mock_proposal: MockProposalData,
    pub metadata: SignerMessageMetadata,
    pub signature: String,
    pub pubkey: String,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct MockBlockData {
    pub mock_proposal: MockProposalData,
    pub mock_signatures: Vec<MockSignatureData>
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(tag = "type", content = "data")]
pub enum StacksSignerMessage {
    BlockProposal(BlockProposalData),
    BlockResponse(BlockResponseData),
    BlockPushed(BlockPushedData),
    MockSignature(MockSignatureData),
    MockProposal(PeerInfoData),
    MockBlock(MockBlockData),
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct StacksStackerDbChunk {
    pub contract: String,
    pub sig: String,
    pub pubkey: String,
    pub message: StacksSignerMessage,
}