use serde::{Deserialize, Serialize};
use crate::Address;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[repr(u8)]
pub enum NodeRole {
Validator = 0,
ArchiveNode = 1,
}
impl NodeRole {
pub fn from_byte(b: u8) -> Option<Self> {
match b {
0 => Some(NodeRole::Validator),
1 => Some(NodeRole::ArchiveNode),
_ => None,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[repr(u8)]
pub enum NodeStatus {
Active = 0,
Slashed = 1,
}
impl NodeStatus {
pub fn from_byte(b: u8) -> Option<Self> {
match b {
0 => Some(NodeStatus::Active),
1 => Some(NodeStatus::Slashed),
_ => None,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct NodeRecord {
pub address: Address,
pub role: NodeRole,
pub staked_balance: u64,
pub status: NodeStatus,
pub registered_at: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum NodeRegistryOperation {
Register {
role: NodeRole,
stake: u64,
},
UpdateStatus {
target: Address,
new_status: NodeStatus,
},
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct NodeRegistryTxData {
pub operation: NodeRegistryOperation,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum NodeRegistryOperationV2 {
RegisterEncryptionKey {
encryption_pubkey: [u8; 32],
},
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct NodeRegistryV2TxData {
pub operation: NodeRegistryOperationV2,
}