Change serialize hierarchy for Governance

Change-Id: Id5581f84e9d325e1546f1690ba977b7470915491
This commit is contained in:
Reisen 2021-07-23 14:13:47 +00:00 committed by Hendrik Hofstadt
parent 5e37afdb82
commit 64c1d86e4d
5 changed files with 39 additions and 15 deletions

View File

@ -151,7 +151,7 @@ pub fn verify_signatures(
); );
let signature_set = SignatureSet::<'_, { AccountState::Uninitialized }>::key( let signature_set = SignatureSet::<'_, { AccountState::Uninitialized }>::key(
&SignatureSetDerivationData { hash: hash }, &SignatureSetDerivationData { hash },
&program_id, &program_id,
); );

View File

@ -43,8 +43,10 @@ pub use api::{
}; };
pub use vaa::{ pub use vaa::{
DeserializeGovernancePayload,
DeserializePayload, DeserializePayload,
PayloadMessage, PayloadMessage,
SerializeGovernancePayload,
SerializePayload, SerializePayload,
}; };

View File

@ -1,6 +1,7 @@
use crate::{ use crate::{
api::ForeignAddress, api::ForeignAddress,
vaa::{ vaa::{
SerializeGovernancePayload,
DeserializeGovernancePayload, DeserializeGovernancePayload,
DeserializePayload, DeserializePayload,
SerializePayload, SerializePayload,
@ -248,11 +249,14 @@ where
} }
} }
impl DeserializeGovernancePayload for GovernancePayloadUpgrade { impl SerializeGovernancePayload for GovernancePayloadUpgrade {
const MODULE: &'static str = "Core"; const MODULE: &'static str = "Core";
const ACTION: u8 = 1; const ACTION: u8 = 1;
} }
impl DeserializeGovernancePayload for GovernancePayloadUpgrade {
}
pub struct GovernancePayloadGuardianSetChange { pub struct GovernancePayloadGuardianSetChange {
// New GuardianSetIndex // New GuardianSetIndex
pub new_guardian_set_index: u32, pub new_guardian_set_index: u32,
@ -298,11 +302,14 @@ where
} }
} }
impl DeserializeGovernancePayload for GovernancePayloadGuardianSetChange { impl SerializeGovernancePayload for GovernancePayloadGuardianSetChange {
const MODULE: &'static str = "Core"; const MODULE: &'static str = "Core";
const ACTION: u8 = 2; const ACTION: u8 = 2;
} }
impl DeserializeGovernancePayload for GovernancePayloadGuardianSetChange {
}
pub struct GovernancePayloadSetMessageFee { pub struct GovernancePayloadSetMessageFee {
// New fee in lamports // New fee in lamports
pub fee: U256, pub fee: U256,
@ -334,11 +341,14 @@ where
} }
} }
impl DeserializeGovernancePayload for GovernancePayloadSetMessageFee { impl SerializeGovernancePayload for GovernancePayloadSetMessageFee {
const MODULE: &'static str = "Core"; const MODULE: &'static str = "Core";
const ACTION: u8 = 3; const ACTION: u8 = 3;
} }
impl DeserializeGovernancePayload for GovernancePayloadSetMessageFee {
}
pub struct GovernancePayloadTransferFees { pub struct GovernancePayloadTransferFees {
// Amount to be transferred // Amount to be transferred
pub amount: U256, pub amount: U256,
@ -376,11 +386,14 @@ where
} }
} }
impl DeserializeGovernancePayload for GovernancePayloadTransferFees { impl SerializeGovernancePayload for GovernancePayloadTransferFees {
const MODULE: &'static str = "Core"; const MODULE: &'static str = "Core";
const ACTION: u8 = 4; const ACTION: u8 = 4;
} }
impl DeserializeGovernancePayload for GovernancePayloadTransferFees {
}
#[repr(u8)] #[repr(u8)]
#[derive(BorshSerialize, BorshDeserialize, Clone)] #[derive(BorshSerialize, BorshDeserialize, Clone)]
pub enum ConsistencyLevel { pub enum ConsistencyLevel {

View File

@ -39,8 +39,24 @@ use std::{
ops::Deref, ops::Deref,
}; };
pub trait SerializePayload: Sized + DeserializeGovernancePayload { pub trait SerializePayload: Sized {
fn serialize<W: Write>(&self, writer: &mut W) -> std::result::Result<(), SolitaireError>; fn serialize<W: Write>(&self, writer: &mut W) -> std::result::Result<(), SolitaireError>;
fn try_to_vec(&self) -> std::result::Result<Vec<u8>, SolitaireError> {
let mut result = Vec::with_capacity(256);
self.serialize(&mut result)?;
Ok(result)
}
}
pub trait DeserializePayload: Sized {
fn deserialize(buf: &mut &[u8]) -> std::result::Result<Self, SolitaireError>;
}
pub trait SerializeGovernancePayload: SerializePayload {
const MODULE: &'static str;
const ACTION: u8;
fn try_to_vec(&self) -> std::result::Result<Vec<u8>, SolitaireError> { fn try_to_vec(&self) -> std::result::Result<Vec<u8>, SolitaireError> {
let mut result = Vec::with_capacity(256); let mut result = Vec::with_capacity(256);
self.write_governance_header(&mut result)?; self.write_governance_header(&mut result)?;
@ -62,14 +78,7 @@ pub trait SerializePayload: Sized + DeserializeGovernancePayload {
} }
} }
pub trait DeserializePayload: Sized { pub trait DeserializeGovernancePayload: DeserializePayload + SerializeGovernancePayload {
fn deserialize(buf: &mut &[u8]) -> std::result::Result<Self, SolitaireError>;
}
pub trait DeserializeGovernancePayload {
const MODULE: &'static str;
const ACTION: u8;
fn check_governance_header( fn check_governance_header(
c: &mut Cursor<&mut &[u8]>, c: &mut Cursor<&mut &[u8]>,
) -> std::result::Result<(), SolitaireError> { ) -> std::result::Result<(), SolitaireError> {

View File

@ -83,7 +83,7 @@ use bridge::{
Initialize, Initialize,
PostVAA, PostVAA,
PostVAAData, PostVAAData,
SerializePayload, SerializeGovernancePayload,
Signature, Signature,
}; };
use primitive_types::U256; use primitive_types::U256;