chainhook_types/
signers.rs

1use crate::StacksTransactionData;
2
3#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
4pub struct NakamotoBlockHeaderData {
5    pub version: u8,
6    pub chain_length: u64,
7    pub burn_spent: u64,
8    pub consensus_hash: String,
9    pub parent_block_id: String,
10    pub tx_merkle_root: String,
11    pub state_index_root: String,
12    pub timestamp: u64,
13    pub miner_signature: String,
14    pub signer_signature: Vec<String>,
15    pub pox_treatment: String,
16}
17
18#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
19pub struct NakamotoBlockData {
20    pub header: NakamotoBlockHeaderData,
21    pub block_hash: String,
22    pub index_block_hash: String,
23    pub transactions: Vec<StacksTransactionData>,
24}
25
26#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
27pub struct BlockProposalData {
28    pub block: NakamotoBlockData,
29    pub burn_height: u64,
30    pub reward_cycle: u64,
31}
32
33#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
34pub struct BlockAcceptedResponse {
35    pub signer_signature_hash: String,
36    pub signature: String,
37    pub metadata: SignerMessageMetadata,
38}
39
40#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
41pub struct SignerMessageMetadata {
42    pub server_version: String,
43}
44
45#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
46#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
47pub enum BlockValidationFailedCode {
48    BadBlockHash,
49    BadTransaction,
50    InvalidBlock,
51    ChainstateError,
52    UnknownParent,
53    NonCanonicalTenure,
54    NoSuchTenure,
55}
56
57#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
58#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
59pub enum BlockRejectReasonCode {
60    #[serde(rename_all = "SCREAMING_SNAKE_CASE")] 
61    ValidationFailed {
62        #[serde(rename = "VALIDATION_FAILED")]
63        validation_failed: BlockValidationFailedCode,
64    },
65    ConnectivityIssues,
66    RejectedInPriorRound,
67    NoSortitionView,
68    SortitionViewMismatch,
69    TestingDirective,
70}
71
72#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
73pub struct BlockRejectedResponse {
74    pub reason: String,
75    pub reason_code: BlockRejectReasonCode,
76    pub signer_signature_hash: String,
77    pub chain_id: u32,
78    pub signature: String,
79    pub metadata: SignerMessageMetadata,
80}
81
82#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
83#[serde(tag = "type", content = "data")]
84pub enum BlockResponseData {
85    Accepted(BlockAcceptedResponse),
86    Rejected(BlockRejectedResponse),
87}
88
89#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
90pub struct BlockPushedData {
91    pub block: NakamotoBlockData,
92}
93
94#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
95pub struct PeerInfoData {
96    pub burn_block_height: u64,
97    pub stacks_tip_consensus_hash: String,
98    pub stacks_tip: String,
99    pub stacks_tip_height: u64,
100    pub pox_consensus: String,
101    pub server_version: String,
102    pub network_id: u32,
103    pub index_block_hash: String,
104}
105
106#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
107pub struct MockProposalData {
108    pub peer_info: PeerInfoData,
109}
110
111#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
112pub struct MockSignatureData {
113    pub mock_proposal: MockProposalData,
114    pub metadata: SignerMessageMetadata,
115    pub signature: String,
116    pub pubkey: String,
117}
118
119#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
120pub struct MockBlockData {
121    pub mock_proposal: MockProposalData,
122    pub mock_signatures: Vec<MockSignatureData>
123}
124
125#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
126#[serde(tag = "type", content = "data")]
127pub enum StacksSignerMessage {
128    BlockProposal(BlockProposalData),
129    BlockResponse(BlockResponseData),
130    BlockPushed(BlockPushedData),
131    MockSignature(MockSignatureData),
132    MockProposal(PeerInfoData),
133    MockBlock(MockBlockData),
134}
135
136#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
137pub struct StacksStackerDbChunk {
138    pub contract: String,
139    pub sig: String,
140    pub pubkey: String,
141    pub message: StacksSignerMessage,
142}