From 64c1d86e4d4e8ccc5cb8f93ae098f73b6807342a Mon Sep 17 00:00:00 2001 From: Reisen Date: Fri, 23 Jul 2021 14:13:47 +0000 Subject: [PATCH] Change serialize hierarchy for Governance Change-Id: Id5581f84e9d325e1546f1690ba977b7470915491 --- solana/bridge/program/src/instructions.rs | 2 +- solana/bridge/program/src/lib.rs | 2 ++ solana/bridge/program/src/types.rs | 21 +++++++++++++---- solana/bridge/program/src/vaa.rs | 27 ++++++++++++++-------- solana/bridge/program/tests/integration.rs | 2 +- 5 files changed, 39 insertions(+), 15 deletions(-) diff --git a/solana/bridge/program/src/instructions.rs b/solana/bridge/program/src/instructions.rs index 7cb76938..6e21b2d4 100644 --- a/solana/bridge/program/src/instructions.rs +++ b/solana/bridge/program/src/instructions.rs @@ -151,7 +151,7 @@ pub fn verify_signatures( ); let signature_set = SignatureSet::<'_, { AccountState::Uninitialized }>::key( - &SignatureSetDerivationData { hash: hash }, + &SignatureSetDerivationData { hash }, &program_id, ); diff --git a/solana/bridge/program/src/lib.rs b/solana/bridge/program/src/lib.rs index d06b3730..6e2327c9 100644 --- a/solana/bridge/program/src/lib.rs +++ b/solana/bridge/program/src/lib.rs @@ -43,8 +43,10 @@ pub use api::{ }; pub use vaa::{ + DeserializeGovernancePayload, DeserializePayload, PayloadMessage, + SerializeGovernancePayload, SerializePayload, }; diff --git a/solana/bridge/program/src/types.rs b/solana/bridge/program/src/types.rs index a086bab5..b22fd526 100644 --- a/solana/bridge/program/src/types.rs +++ b/solana/bridge/program/src/types.rs @@ -1,6 +1,7 @@ use crate::{ api::ForeignAddress, vaa::{ + SerializeGovernancePayload, DeserializeGovernancePayload, DeserializePayload, SerializePayload, @@ -248,11 +249,14 @@ where } } -impl DeserializeGovernancePayload for GovernancePayloadUpgrade { +impl SerializeGovernancePayload for GovernancePayloadUpgrade { const MODULE: &'static str = "Core"; const ACTION: u8 = 1; } +impl DeserializeGovernancePayload for GovernancePayloadUpgrade { +} + pub struct GovernancePayloadGuardianSetChange { // New GuardianSetIndex 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 ACTION: u8 = 2; } +impl DeserializeGovernancePayload for GovernancePayloadGuardianSetChange { +} + pub struct GovernancePayloadSetMessageFee { // New fee in lamports pub fee: U256, @@ -334,11 +341,14 @@ where } } -impl DeserializeGovernancePayload for GovernancePayloadSetMessageFee { +impl SerializeGovernancePayload for GovernancePayloadSetMessageFee { const MODULE: &'static str = "Core"; const ACTION: u8 = 3; } +impl DeserializeGovernancePayload for GovernancePayloadSetMessageFee { +} + pub struct GovernancePayloadTransferFees { // Amount to be transferred pub amount: U256, @@ -376,11 +386,14 @@ where } } -impl DeserializeGovernancePayload for GovernancePayloadTransferFees { +impl SerializeGovernancePayload for GovernancePayloadTransferFees { const MODULE: &'static str = "Core"; const ACTION: u8 = 4; } +impl DeserializeGovernancePayload for GovernancePayloadTransferFees { +} + #[repr(u8)] #[derive(BorshSerialize, BorshDeserialize, Clone)] pub enum ConsistencyLevel { diff --git a/solana/bridge/program/src/vaa.rs b/solana/bridge/program/src/vaa.rs index faebdb71..d8676a19 100644 --- a/solana/bridge/program/src/vaa.rs +++ b/solana/bridge/program/src/vaa.rs @@ -39,8 +39,24 @@ use std::{ ops::Deref, }; -pub trait SerializePayload: Sized + DeserializeGovernancePayload { +pub trait SerializePayload: Sized { fn serialize(&self, writer: &mut W) -> std::result::Result<(), SolitaireError>; + + fn try_to_vec(&self) -> std::result::Result, 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; +} + +pub trait SerializeGovernancePayload: SerializePayload { + const MODULE: &'static str; + const ACTION: u8; + fn try_to_vec(&self) -> std::result::Result, SolitaireError> { let mut result = Vec::with_capacity(256); self.write_governance_header(&mut result)?; @@ -62,14 +78,7 @@ pub trait SerializePayload: Sized + DeserializeGovernancePayload { } } -pub trait DeserializePayload: Sized { - fn deserialize(buf: &mut &[u8]) -> std::result::Result; -} - -pub trait DeserializeGovernancePayload { - const MODULE: &'static str; - const ACTION: u8; - +pub trait DeserializeGovernancePayload: DeserializePayload + SerializeGovernancePayload { fn check_governance_header( c: &mut Cursor<&mut &[u8]>, ) -> std::result::Result<(), SolitaireError> { diff --git a/solana/bridge/program/tests/integration.rs b/solana/bridge/program/tests/integration.rs index a34224ff..64b61fc0 100644 --- a/solana/bridge/program/tests/integration.rs +++ b/solana/bridge/program/tests/integration.rs @@ -83,7 +83,7 @@ use bridge::{ Initialize, PostVAA, PostVAAData, - SerializePayload, + SerializeGovernancePayload, Signature, }; use primitive_types::U256;