From 3bc31a81339f3e70bb58553f3e1e62fd089bf8b5 Mon Sep 17 00:00:00 2001 From: kevinheavey Date: Thu, 31 Oct 2024 17:12:32 +0400 Subject: [PATCH 1/4] remove solana-program from spl-pod --- Cargo.lock | 9 ++++++- libraries/pod/Cargo.toml | 11 ++++++-- libraries/pod/src/bytemuck.rs | 2 +- libraries/pod/src/error.rs | 40 ++++++++++++++++++++++++++++-- libraries/pod/src/lib.rs | 2 +- libraries/pod/src/option.rs | 8 +++--- libraries/pod/src/optional_keys.rs | 6 +++-- libraries/pod/src/slice.rs | 2 +- 8 files changed, 65 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9dc064bbd7c..8d77b5d1cce 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8200,11 +8200,18 @@ dependencies = [ "borsh 1.5.1", "bytemuck", "bytemuck_derive", + "num-derive", + "num-traits", "serde", "serde_json", + "solana-decode-error", + "solana-msg", "solana-program", + "solana-program-error", + "solana-program-option", + "solana-pubkey", "solana-zk-sdk", - "spl-program-error 0.5.0", + "thiserror", ] [[package]] diff --git a/libraries/pod/Cargo.toml b/libraries/pod/Cargo.toml index 44ef1bab273..23a7f2c7963 100644 --- a/libraries/pod/Cargo.toml +++ b/libraries/pod/Cargo.toml @@ -15,13 +15,20 @@ borsh = ["dep:borsh"] borsh = { version = "1.5.1", optional = true } bytemuck = { version = "1.19.0" } bytemuck_derive = { version = "1.8.0" } +num-derive = "0.4" +num-traits = "0.2" serde = { version = "1.0.214", optional = true } -solana-program = "2.1.0" +solana-decode-error = "2.1.0" +solana-msg = "2.1.0" +solana-program-error = "2.1.0" +solana-program-option = "2.1.0" +solana-pubkey = "2.1.0" solana-zk-sdk = "2.1.0" -spl-program-error = { version = "0.5.0", path = "../program-error" } +thiserror = "1.0" [dev-dependencies] serde_json = "1.0.132" +solana-program = "2.1.0" base64 = { version = "0.22.1" } [lib] diff --git a/libraries/pod/src/bytemuck.rs b/libraries/pod/src/bytemuck.rs index f12cee5da6e..f0039e351ed 100644 --- a/libraries/pod/src/bytemuck.rs +++ b/libraries/pod/src/bytemuck.rs @@ -1,6 +1,6 @@ //! wrappers for bytemuck functions -use {bytemuck::Pod, solana_program::program_error::ProgramError}; +use {bytemuck::Pod, solana_program_error::ProgramError}; /// On-chain size of a `Pod` type pub const fn pod_get_packed_len() -> usize { diff --git a/libraries/pod/src/error.rs b/libraries/pod/src/error.rs index 35740a43c2a..f993f273071 100644 --- a/libraries/pod/src/error.rs +++ b/libraries/pod/src/error.rs @@ -1,8 +1,10 @@ //! Error types -use spl_program_error::*; +use solana_decode_error::DecodeError; +use solana_msg::msg; +use solana_program_error::{PrintProgramError, ProgramError}; /// Errors that may be returned by the spl-pod library. -#[spl_program_error] +#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error, num_derive::FromPrimitive)] pub enum PodSliceError { /// Error in checked math operation #[error("Error in checked math operation")] @@ -14,3 +16,37 @@ pub enum PodSliceError { #[error("Provided byte buffer too large for expected type")] BufferTooLarge, } + +impl From for ProgramError { + fn from(e: PodSliceError) -> Self { + ProgramError::Custom(e as u32) + } +} + +impl solana_decode_error::DecodeError for PodSliceError { + fn type_of() -> &'static str { + "PodSliceError" + } +} + +impl PrintProgramError for PodSliceError { + fn print(&self) + where + E: 'static + std::error::Error + + DecodeError + + PrintProgramError + + num_traits::FromPrimitive, + { + match self { + PodSliceError::CalculationFailure => { + msg!("Error in checked math operation") + } + PodSliceError::BufferTooSmall => { + msg!("Provided byte buffer too small for expected type") + } + PodSliceError::BufferTooLarge => { + msg!("Provided byte buffer too large for expected type") + } + } + } +} \ No newline at end of file diff --git a/libraries/pod/src/lib.rs b/libraries/pod/src/lib.rs index 309fe755261..8b637bf6959 100644 --- a/libraries/pod/src/lib.rs +++ b/libraries/pod/src/lib.rs @@ -9,4 +9,4 @@ pub mod slice; // Export current sdk types for downstream users building with a different sdk // version -pub use solana_program; +pub use {solana_decode_error, solana_msg, solana_program_error, solana_program_option, solana_pubkey}; diff --git a/libraries/pod/src/option.rs b/libraries/pod/src/option.rs index 0ebad18608a..07f58be4fa2 100644 --- a/libraries/pod/src/option.rs +++ b/libraries/pod/src/option.rs @@ -8,11 +8,9 @@ use { bytemuck::{Pod, Zeroable}, - solana_program::{ - program_error::ProgramError, - program_option::COption, - pubkey::{Pubkey, PUBKEY_BYTES}, - }, + solana_program_error::ProgramError, + solana_program_option::COption, + solana_pubkey::{Pubkey, PUBKEY_BYTES}, }; /// Trait for types that can be `None`. diff --git a/libraries/pod/src/optional_keys.rs b/libraries/pod/src/optional_keys.rs index 1bfc28fd113..501287f9992 100644 --- a/libraries/pod/src/optional_keys.rs +++ b/libraries/pod/src/optional_keys.rs @@ -3,7 +3,9 @@ use borsh::{BorshDeserialize, BorshSchema, BorshSerialize}; use { bytemuck_derive::{Pod, Zeroable}, - solana_program::{program_error::ProgramError, program_option::COption, pubkey::Pubkey}, + solana_program_error::ProgramError, + solana_program_option::COption, + solana_pubkey::Pubkey, solana_zk_sdk::encryption::pod::elgamal::PodElGamalPubkey, }; #[cfg(feature = "serde-traits")] @@ -220,7 +222,7 @@ mod tests { super::*, crate::bytemuck::pod_from_bytes, base64::{prelude::BASE64_STANDARD, Engine}, - solana_program::pubkey::PUBKEY_BYTES, + solana_pubkey::PUBKEY_BYTES, }; #[test] diff --git a/libraries/pod/src/slice.rs b/libraries/pod/src/slice.rs index 4b4ea2b116f..043f408d1f7 100644 --- a/libraries/pod/src/slice.rs +++ b/libraries/pod/src/slice.rs @@ -9,7 +9,7 @@ use { primitives::PodU32, }, bytemuck::Pod, - solana_program::program_error::ProgramError, + solana_program_error::ProgramError, }; const LENGTH_SIZE: usize = std::mem::size_of::(); From d7d4ece36c281a25459b339d4c62eaa5263b678a Mon Sep 17 00:00:00 2001 From: kevinheavey Date: Thu, 31 Oct 2024 17:12:52 +0400 Subject: [PATCH 2/4] fmt --- libraries/pod/src/error.rs | 13 ++++++++----- libraries/pod/src/lib.rs | 4 +++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/libraries/pod/src/error.rs b/libraries/pod/src/error.rs index f993f273071..97334633cd9 100644 --- a/libraries/pod/src/error.rs +++ b/libraries/pod/src/error.rs @@ -1,7 +1,9 @@ //! Error types -use solana_decode_error::DecodeError; -use solana_msg::msg; -use solana_program_error::{PrintProgramError, ProgramError}; +use { + solana_decode_error::DecodeError, + solana_msg::msg, + solana_program_error::{PrintProgramError, ProgramError}, +}; /// Errors that may be returned by the spl-pod library. #[derive(Debug, Clone, PartialEq, Eq, thiserror::Error, num_derive::FromPrimitive)] @@ -32,7 +34,8 @@ impl solana_decode_error::DecodeError for PodSliceError { impl PrintProgramError for PodSliceError { fn print(&self) where - E: 'static + std::error::Error + E: 'static + + std::error::Error + DecodeError + PrintProgramError + num_traits::FromPrimitive, @@ -49,4 +52,4 @@ impl PrintProgramError for PodSliceError { } } } -} \ No newline at end of file +} diff --git a/libraries/pod/src/lib.rs b/libraries/pod/src/lib.rs index 8b637bf6959..5be44e71571 100644 --- a/libraries/pod/src/lib.rs +++ b/libraries/pod/src/lib.rs @@ -9,4 +9,6 @@ pub mod slice; // Export current sdk types for downstream users building with a different sdk // version -pub use {solana_decode_error, solana_msg, solana_program_error, solana_program_option, solana_pubkey}; +pub use { + solana_decode_error, solana_msg, solana_program_error, solana_program_option, solana_pubkey, +}; From 719200db05a87146b85210fed5828c6e1ac61cd7 Mon Sep 17 00:00:00 2001 From: kevinheavey Date: Thu, 31 Oct 2024 18:21:04 +0400 Subject: [PATCH 3/4] add back repr(32) --- libraries/pod/src/error.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/pod/src/error.rs b/libraries/pod/src/error.rs index 97334633cd9..0b6bb2c62dc 100644 --- a/libraries/pod/src/error.rs +++ b/libraries/pod/src/error.rs @@ -6,6 +6,7 @@ use { }; /// Errors that may be returned by the spl-pod library. +#[repr(32)] #[derive(Debug, Clone, PartialEq, Eq, thiserror::Error, num_derive::FromPrimitive)] pub enum PodSliceError { /// Error in checked math operation From 4f68ced6daf84119af4463f305642acfd31c3e1c Mon Sep 17 00:00:00 2001 From: kevinheavey Date: Thu, 31 Oct 2024 18:35:38 +0400 Subject: [PATCH 4/4] typo --- libraries/pod/src/error.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/pod/src/error.rs b/libraries/pod/src/error.rs index 0b6bb2c62dc..f67f4eabccf 100644 --- a/libraries/pod/src/error.rs +++ b/libraries/pod/src/error.rs @@ -6,7 +6,7 @@ use { }; /// Errors that may be returned by the spl-pod library. -#[repr(32)] +#[repr(u32)] #[derive(Debug, Clone, PartialEq, Eq, thiserror::Error, num_derive::FromPrimitive)] pub enum PodSliceError { /// Error in checked math operation