1use layer_climb_address::{CosmosAddr, EvmAddr};
2use serde::{Deserialize, Serialize};
3use utoipa::ToSchema;
4
5use crate::{ChainKey, Duration, EventId, Submission};
6
7#[derive(
8 Hash, Serialize, Deserialize, Clone, Debug, PartialEq, Eq, bincode::Encode, bincode::Decode,
9)]
10pub struct QuorumQueueId {
11 pub event_id: EventId,
12 pub action: SubmitAction,
13}
14
15impl QuorumQueueId {
16 pub fn to_bytes(&self) -> Result<Vec<u8>, bincode::error::EncodeError> {
17 bincode::encode_to_vec(self, bincode::config::standard())
18 }
19
20 pub fn from_bytes(bytes: &[u8]) -> Result<Self, bincode::error::DecodeError> {
21 Ok(bincode::borrow_decode_from_slice(bytes, bincode::config::standard())?.0)
22 }
23}
24
25#[derive(Serialize, Deserialize, Clone, Debug)]
26#[serde(rename_all = "snake_case")]
27pub enum QuorumQueue {
28 Burned(u64),
31 Active(Vec<Submission>),
32}
33
34impl Default for QuorumQueue {
35 fn default() -> Self {
36 QuorumQueue::Active(Vec::new())
37 }
38}
39
40#[derive(
41 Serialize,
42 Deserialize,
43 Clone,
44 Debug,
45 PartialEq,
46 Eq,
47 Hash,
48 PartialOrd,
49 Ord,
50 bincode::Encode,
51 bincode::Decode,
52 ToSchema,
53)]
54pub enum SubmitAction {
55 Evm(EvmSubmitAction),
56 Cosmos(CosmosSubmitAction),
57}
58
59impl SubmitAction {
60 pub fn chain(&self) -> &ChainKey {
61 match self {
62 SubmitAction::Evm(action) => &action.chain,
63 SubmitAction::Cosmos(action) => &action.chain,
64 }
65 }
66}
67
68#[derive(
69 Serialize,
70 Deserialize,
71 Clone,
72 Debug,
73 PartialEq,
74 Eq,
75 Hash,
76 PartialOrd,
77 Ord,
78 bincode::Encode,
79 bincode::Decode,
80 ToSchema,
81)]
82pub struct EvmSubmitAction {
83 pub chain: ChainKey,
84 pub address: EvmAddr,
86 pub gas_price: Option<u128>,
87}
88
89#[derive(
90 Serialize,
91 Deserialize,
92 Clone,
93 Debug,
94 PartialEq,
95 Eq,
96 Hash,
97 PartialOrd,
98 Ord,
99 bincode::Encode,
100 bincode::Decode,
101 ToSchema,
102)]
103pub struct CosmosSubmitAction {
104 pub chain: ChainKey,
105 pub address: CosmosAddr,
106 pub gas_price: Option<u128>,
107}
108
109#[derive(
110 Serialize,
111 Deserialize,
112 Clone,
113 Debug,
114 PartialEq,
115 Eq,
116 Hash,
117 bincode::Encode,
118 bincode::Decode,
119 ToSchema,
120)]
121pub struct TimerAction {
122 pub delay: Duration,
123}
124
125#[derive(
126 Serialize,
127 Deserialize,
128 Clone,
129 Debug,
130 PartialEq,
131 Eq,
132 Hash,
133 bincode::Encode,
134 bincode::Decode,
135 ToSchema,
136)]
137pub enum AggregatorAction {
138 Submit(SubmitAction),
139 Timer(TimerAction),
140}