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}