diff --git a/solana/modules/nft_bridge/program/src/accounts.rs b/solana/modules/nft_bridge/program/src/accounts.rs index 9077e58fd..4b1b3de51 100644 --- a/solana/modules/nft_bridge/program/src/accounts.rs +++ b/solana/modules/nft_bridge/program/src/accounts.rs @@ -2,10 +2,6 @@ use crate::types::*; use bridge::{ accounts::BridgeData, api::ForeignAddress, - vaa::{ - DeserializePayload, - PayloadMessage, - }, }; use primitive_types::U256; use solana_program::pubkey::Pubkey; @@ -18,28 +14,28 @@ pub type AuthoritySigner<'b> = Derive, "authority_signer">; pub type CustodySigner<'b> = Derive, "custody_signer">; pub type MintSigner<'b> = Derive, "mint_signer">; -pub type CoreBridge<'a, const State: AccountState> = Data<'a, BridgeData, { State }>; +pub type CoreBridge<'a, const STATE: AccountState> = Data<'a, BridgeData, { STATE }>; pub type EmitterAccount<'b> = Derive, "emitter">; -pub type ConfigAccount<'b, const State: AccountState> = - Derive, "config">; +pub type ConfigAccount<'b, const STATE: AccountState> = + Derive, "config">; -pub type CustodyAccount<'b, const State: AccountState> = Data<'b, SplAccount, { State }>; +pub type CustodyAccount<'b, const STATE: AccountState> = Data<'b, SplAccount, { STATE }>; pub struct CustodyAccountDerivationData { pub mint: Pubkey, } -impl<'b, const State: AccountState> Seeded<&CustodyAccountDerivationData> - for CustodyAccount<'b, { State }> +impl<'b, const STATE: AccountState> Seeded<&CustodyAccountDerivationData> + for CustodyAccount<'b, { STATE }> { fn seeds(accs: &CustodyAccountDerivationData) -> Vec> { vec![accs.mint.to_bytes().to_vec()] } } -pub type WrappedMint<'b, const State: AccountState> = Data<'b, SplMint, { State }>; +pub type WrappedMint<'b, const STATE: AccountState> = Data<'b, SplMint, { STATE }>; pub struct WrappedDerivationData { pub token_chain: ChainID, @@ -47,7 +43,7 @@ pub struct WrappedDerivationData { pub token_id: U256, } -impl<'b, const State: AccountState> Seeded<&WrappedDerivationData> for WrappedMint<'b, { State }> { +impl<'b, const STATE: AccountState> Seeded<&WrappedDerivationData> for WrappedMint<'b, { STATE }> { fn seeds(data: &WrappedDerivationData) -> Vec> { let mut token_id = vec![0u8; 32]; data.token_id.to_big_endian(&mut token_id); @@ -60,14 +56,14 @@ impl<'b, const State: AccountState> Seeded<&WrappedDerivationData> for WrappedMi } } -pub type WrappedTokenMeta<'b, const State: AccountState> = Data<'b, WrappedMeta, { State }>; +pub type WrappedTokenMeta<'b, const STATE: AccountState> = Data<'b, WrappedMeta, { STATE }>; pub struct WrappedMetaDerivationData { pub mint_key: Pubkey, } -impl<'b, const State: AccountState> Seeded<&WrappedMetaDerivationData> - for WrappedTokenMeta<'b, { State }> +impl<'b, const STATE: AccountState> Seeded<&WrappedMetaDerivationData> + for WrappedTokenMeta<'b, { STATE }> { fn seeds(data: &WrappedMetaDerivationData) -> Vec> { vec![ @@ -78,7 +74,7 @@ impl<'b, const State: AccountState> Seeded<&WrappedMetaDerivationData> } /// Registered chain endpoint -pub type Endpoint<'b, const State: AccountState> = Data<'b, EndpointRegistration, { State }>; +pub type Endpoint<'b, const STATE: AccountState> = Data<'b, EndpointRegistration, { STATE }>; pub struct EndpointDerivationData { pub emitter_chain: u16, @@ -86,7 +82,7 @@ pub struct EndpointDerivationData { } /// Seeded implementation based on an incoming VAA -impl<'b, const State: AccountState> Seeded<&EndpointDerivationData> for Endpoint<'b, { State }> { +impl<'b, const STATE: AccountState> Seeded<&EndpointDerivationData> for Endpoint<'b, { STATE }> { fn seeds(data: &EndpointDerivationData) -> Vec> { vec![ data.emitter_chain.to_be_bytes().to_vec(), diff --git a/solana/modules/nft_bridge/program/src/api/complete_transfer.rs b/solana/modules/nft_bridge/program/src/api/complete_transfer.rs index 6a66bafff..576012c28 100644 --- a/solana/modules/nft_bridge/program/src/api/complete_transfer.rs +++ b/solana/modules/nft_bridge/program/src/api/complete_transfer.rs @@ -28,8 +28,6 @@ use solana_program::{ invoke, invoke_signed, }, - program_error::ProgramError, - pubkey::Pubkey, }; use solitaire::{ processors::seeded::{ @@ -39,14 +37,6 @@ use solitaire::{ CreationLamports::Exempt, *, }; -use spl_token::state::{ - Account, - Mint, -}; -use std::ops::{ - Deref, - DerefMut, -}; #[derive(FromAccounts)] pub struct CompleteNative<'b> { @@ -81,7 +71,8 @@ impl<'a> From<&CompleteNative<'a>> for CustodyAccountDerivationData { } } -impl<'b> InstructionContext<'b> for CompleteNative<'b> {} +impl<'b> InstructionContext<'b> for CompleteNative<'b> { +} #[derive(BorshDeserialize, BorshSerialize, Default)] pub struct CompleteNativeData {} @@ -89,7 +80,7 @@ pub struct CompleteNativeData {} pub fn complete_native( ctx: &ExecutionContext, accs: &mut CompleteNative, - data: CompleteNativeData, + _data: CompleteNativeData, ) -> Result<()> { // Verify the chain registration let derivation_data: EndpointDerivationData = (&*accs).into(); @@ -205,7 +196,8 @@ impl<'a> From<&CompleteWrapped<'a>> for WrappedMetaDerivationData { } } -impl<'b> InstructionContext<'b> for CompleteWrapped<'b> {} +impl<'b> InstructionContext<'b> for CompleteWrapped<'b> { +} #[derive(BorshDeserialize, BorshSerialize, Default)] pub struct CompleteWrappedData {} @@ -213,7 +205,7 @@ pub struct CompleteWrappedData {} pub fn complete_wrapped( ctx: &ExecutionContext, accs: &mut CompleteWrapped, - data: CompleteWrappedData, + _data: CompleteWrappedData, ) -> Result<()> { use bstr::ByteSlice; @@ -239,7 +231,7 @@ pub fn complete_wrapped( if !accs.meta.is_initialized() { // Create mint account accs.mint - .create(&((&*accs).into()), ctx, accs.payer.key, Exempt); + .create(&((&*accs).into()), ctx, accs.payer.key, Exempt)?; // Initialize mint let init_ix = spl_token::instruction::initialize_mint( @@ -253,7 +245,7 @@ pub fn complete_wrapped( // Create meta account accs.meta - .create(&((&*accs).into()), ctx, accs.payer.key, Exempt); + .create(&((&*accs).into()), ctx, accs.payer.key, Exempt)?; // Initialize spl meta accs.spl_metadata.verify_derivation( diff --git a/solana/modules/nft_bridge/program/src/api/governance.rs b/solana/modules/nft_bridge/program/src/api/governance.rs index a03cbae34..45325b54f 100644 --- a/solana/modules/nft_bridge/program/src/api/governance.rs +++ b/solana/modules/nft_bridge/program/src/api/governance.rs @@ -8,7 +8,6 @@ use crate::{ GovernancePayloadUpgrade, PayloadGovernanceRegisterChain, }, - types::*, TokenBridgeError::{ InvalidChain, InvalidGovernanceKey, @@ -18,14 +17,12 @@ use bridge::{ vaa::{ ClaimableVAA, DeserializePayload, - PayloadMessage, }, CHAIN_ID_SOLANA, }; use solana_program::{ account_info::AccountInfo, program::invoke_signed, - program_error::ProgramError, pubkey::Pubkey, sysvar::{ clock::Clock, @@ -37,10 +34,6 @@ use solitaire::{ CreationLamports::Exempt, *, }; -use std::ops::{ - Deref, - DerefMut, -}; // Confirm that a ClaimableVAA came from the correct chain, signed by the right emitter. fn verify_governance<'a, T>(vaa: &ClaimableVAA<'a, T>) -> Result<()> @@ -151,7 +144,7 @@ pub struct RegisterChainData {} pub fn register_chain( ctx: &ExecutionContext, accs: &mut RegisterChain, - data: RegisterChainData, + _data: RegisterChainData, ) -> Result<()> { let derivation_data: EndpointDerivationData = (&*accs).into(); accs.endpoint @@ -168,7 +161,7 @@ pub fn register_chain( // Create endpoint accs.endpoint - .create(&((&*accs).into()), ctx, accs.payer.key, Exempt); + .create(&((&*accs).into()), ctx, accs.payer.key, Exempt)?; accs.endpoint.chain = accs.vaa.chain; accs.endpoint.contract = accs.vaa.endpoint_address; diff --git a/solana/modules/nft_bridge/program/src/api/initialize.rs b/solana/modules/nft_bridge/program/src/api/initialize.rs index 3ceff82d4..3ae0d89e5 100644 --- a/solana/modules/nft_bridge/program/src/api/initialize.rs +++ b/solana/modules/nft_bridge/program/src/api/initialize.rs @@ -1,21 +1,12 @@ -use crate::{ - accounts::ConfigAccount, - types::*, -}; +use crate::accounts::ConfigAccount; use solana_program::{ account_info::AccountInfo, - msg, - program_error::ProgramError, pubkey::Pubkey, }; use solitaire::{ CreationLamports::Exempt, *, }; -use std::ops::{ - Deref, - DerefMut, -}; #[derive(FromAccounts)] pub struct Initialize<'b> { diff --git a/solana/modules/nft_bridge/program/src/api/transfer.rs b/solana/modules/nft_bridge/program/src/api/transfer.rs index e9a5ee409..7bef27578 100644 --- a/solana/modules/nft_bridge/program/src/api/transfer.rs +++ b/solana/modules/nft_bridge/program/src/api/transfer.rs @@ -10,7 +10,6 @@ use crate::{ MintSigner, SplTokenMeta, SplTokenMetaDerivationData, - WrappedDerivationData, WrappedMetaDerivationData, WrappedMint, WrappedTokenMeta, @@ -25,11 +24,7 @@ use crate::{ }, }; use bridge::{ - accounts::Bridge, - api::{ - PostMessage, - PostMessageData, - }, + api::PostMessageData, types::ConsistencyLevel, vaa::SerializePayload, }; @@ -44,9 +39,7 @@ use solana_program::{ invoke, invoke_signed, }, - program_error::ProgramError, program_option::COption, - pubkey::Pubkey, sysvar::clock::Clock, }; use solitaire::{ @@ -57,18 +50,7 @@ use solitaire::{ CreationLamports::Exempt, *, }; -use spl_token::{ - error::TokenError::OwnerMismatch, - state::{ - Account, - Mint, - }, -}; use spl_token_metadata::state::Metadata; -use std::ops::{ - Deref, - DerefMut, -}; #[derive(FromAccounts)] pub struct TransferNative<'b> { diff --git a/solana/modules/nft_bridge/program/src/lib.rs b/solana/modules/nft_bridge/program/src/lib.rs index c1111656f..25cf35807 100644 --- a/solana/modules/nft_bridge/program/src/lib.rs +++ b/solana/modules/nft_bridge/program/src/lib.rs @@ -1,6 +1,6 @@ #![feature(const_generics)] -#![allow(warnings)] - +#![allow(incomplete_features)] +#![deny(unused_must_use)] // #![cfg(all(target_arch = "bpf", not(feature = "no-entrypoint")))] #[cfg(feature = "no-entrypoint")] @@ -44,7 +44,6 @@ pub use api::{ }; use solitaire::*; -use std::error::Error; pub enum TokenBridgeError { AlreadyExecuted, diff --git a/solana/modules/nft_bridge/program/src/messages.rs b/solana/modules/nft_bridge/program/src/messages.rs index fe6290964..4138e97f9 100644 --- a/solana/modules/nft_bridge/program/src/messages.rs +++ b/solana/modules/nft_bridge/program/src/messages.rs @@ -1,13 +1,6 @@ -use crate::{ - types::{ - Address, - ChainID, - }, - TokenBridgeError, -}; -use borsh::{ - BorshDeserialize, - BorshSerialize, +use crate::types::{ + Address, + ChainID, }; use bridge::{ vaa::{ @@ -24,23 +17,14 @@ use byteorder::{ }; use primitive_types::U256; use solana_program::{ - native_token::Sol, - program_error::{ - ProgramError, - ProgramError::InvalidAccountData, - }, + program_error::ProgramError::InvalidAccountData, pubkey::Pubkey, }; use solitaire::SolitaireError; -use std::{ - error::Error, - io::{ - Cursor, - Read, - Write, - }, - str::Utf8Error, - string::FromUtf8Error, +use std::io::{ + Cursor, + Read, + Write, }; pub const MODULE: &str = "NFTBridge"; @@ -140,13 +124,13 @@ impl SerializePayload for PayloadTransfer { for i in 0..self.symbol.len() { symbol[i] = self.symbol.as_bytes()[i]; } - writer.write(&symbol); + writer.write(&symbol)?; let mut name: [u8; 32] = [0; 32]; for i in 0..self.name.len() { name[i] = self.name.as_bytes()[i]; } - writer.write(&name); + writer.write(&name)?; let mut id_data: [u8; 32] = [0; 32]; self.token_id.to_big_endian(&mut id_data); @@ -206,7 +190,7 @@ where Self: SerializeGovernancePayload, { fn serialize(&self, writer: &mut W) -> Result<(), SolitaireError> { - self.write_governance_header(writer); + self.write_governance_header(writer)?; // Payload ID writer.write_u16::(self.chain)?; writer.write(&self.endpoint_address[..])?; @@ -223,7 +207,7 @@ pub struct GovernancePayloadUpgrade { impl SerializePayload for GovernancePayloadUpgrade { fn serialize(&self, v: &mut W) -> std::result::Result<(), SolitaireError> { - self.write_governance_header(v); + self.write_governance_header(v)?; v.write(&self.new_contract.to_bytes())?; Ok(()) } diff --git a/solana/modules/nft_bridge/program/src/types.rs b/solana/modules/nft_bridge/program/src/types.rs index d63a59ef1..7cd80087a 100644 --- a/solana/modules/nft_bridge/program/src/types.rs +++ b/solana/modules/nft_bridge/program/src/types.rs @@ -2,7 +2,6 @@ use borsh::{ BorshDeserialize, BorshSerialize, }; -use primitive_types::U256; use serde::{ Deserialize, Serialize, @@ -19,7 +18,6 @@ use spl_token::state::{ Account, Mint, }; -use spl_token_metadata::state::Metadata; pub type Address = [u8; 32]; pub type ChainID = u16;