cronos_network/state/
node.rs1use {
2 crate::pda::PDA,
3 anchor_lang::{prelude::*, AnchorDeserialize},
4 anchor_spl::token::TokenAccount,
5 std::convert::TryFrom,
6};
7
8pub const SEED_NODE: &[u8] = b"node";
9
10#[account]
15#[derive(Debug)]
16pub struct Node {
17 pub delegate: Pubkey, pub id: u64,
19 pub owner: Pubkey, pub stake: Pubkey, }
22
23impl Node {
24 pub fn pda(delegate: Pubkey) -> PDA {
25 Pubkey::find_program_address(&[SEED_NODE, delegate.as_ref()], &crate::ID)
26 }
27}
28
29impl TryFrom<Vec<u8>> for Node {
30 type Error = Error;
31 fn try_from(data: Vec<u8>) -> std::result::Result<Self, Self::Error> {
32 Node::try_deserialize(&mut data.as_slice())
33 }
34}
35
36pub trait NodeAccount {
41 fn new(
42 &mut self,
43 delegate: &Signer,
44 id: u64,
45 owner: &mut Signer,
46 stake: &mut Account<TokenAccount>,
47 ) -> Result<()>;
48}
49
50impl NodeAccount for Account<'_, Node> {
51 fn new(
52 &mut self,
53 delegate: &Signer,
54 id: u64,
55 owner: &mut Signer,
56 stake: &mut Account<TokenAccount>,
57 ) -> Result<()> {
58 self.delegate = delegate.key();
59 self.id = id;
60 self.owner = owner.key();
61 self.stake = stake.key();
62 Ok(())
63 }
64}