Browse Source

Extract decode-error from solana-program (#1813)

* extract decode-error crate

* update decode_error dependents and re-export in sdk and program

* fmt

* fix bad import after rebase
Kevin Heavey 1 year ago
parent
commit
31012e3790

+ 11 - 0
Cargo.lock

@@ -5847,6 +5847,7 @@ dependencies = [
  "solana-compute-budget",
  "solana-config-program",
  "solana-connection-cache",
+ "solana-decode-error",
  "solana-faucet",
  "solana-loader-v4-program",
  "solana-logger",
@@ -6163,6 +6164,14 @@ dependencies = [
  "thiserror",
 ]
 
+[[package]]
+name = "solana-decode-error"
+version = "2.1.0"
+dependencies = [
+ "num-derive",
+ "num-traits",
+]
+
 [[package]]
 name = "solana-define-syscall"
 version = "2.1.0"
@@ -6831,6 +6840,7 @@ dependencies = [
  "sha2 0.10.8",
  "sha3 0.10.8",
  "solana-atomic-u64",
+ "solana-decode-error",
  "solana-define-syscall",
  "solana-frozen-abi",
  "solana-frozen-abi-macro",
@@ -7302,6 +7312,7 @@ dependencies = [
  "sha2 0.10.8",
  "sha3 0.10.8",
  "siphasher",
+ "solana-decode-error",
  "solana-frozen-abi",
  "solana-frozen-abi-macro",
  "solana-logger",

+ 2 - 0
Cargo.toml

@@ -100,6 +100,7 @@ members = [
     "sdk/atomic-u64",
     "sdk/cargo-build-sbf",
     "sdk/cargo-test-sbf",
+    "sdk/decode-error",
     "sdk/gen-headers",
     "sdk/macro",
     "sdk/package-metadata-macro",
@@ -351,6 +352,7 @@ solana-connection-cache = { path = "connection-cache", version = "=2.1.0", defau
 solana-core = { path = "core", version = "=2.1.0" }
 solana-cost-model = { path = "cost-model", version = "=2.1.0" }
 solana-curve25519 = { path = "curves/curve25519", version = "=2.1.0" }
+solana-decode-error = { path = "sdk/decode-error", version = "=2.1.0" }
 solana-define-syscall = { path = "define-syscall", version = "=2.1.0" }
 solana-download-utils = { path = "download-utils", version = "=2.1.0" }
 solana-entry = { path = "entry", version = "=2.1.0" }

+ 1 - 0
cli/Cargo.toml

@@ -37,6 +37,7 @@ solana-client = { workspace = true }
 solana-compute-budget = { workspace = true }
 solana-config-program = { workspace = true }
 solana-connection-cache = { workspace = true }
+solana-decode-error = { workspace = true }
 solana-loader-v4-program = { workspace = true }
 solana-logger = { workspace = true }
 solana-program-runtime = { workspace = true }

+ 1 - 1
cli/src/cli.rs

@@ -13,6 +13,7 @@ use {
         display::println_name_value, CliSignature, CliValidatorsSortOrder, OutputFormat,
     },
     solana_client::connection_cache::ConnectionCache,
+    solana_decode_error::DecodeError,
     solana_remote_wallet::remote_wallet::RemoteWalletManager,
     solana_rpc_client::rpc_client::RpcClient,
     solana_rpc_client_api::{
@@ -23,7 +24,6 @@ use {
     solana_sdk::{
         clock::{Epoch, Slot},
         commitment_config::CommitmentConfig,
-        decode_error::DecodeError,
         hash::Hash,
         instruction::InstructionError,
         offchain_message::OffchainMessage,

+ 10 - 0
programs/sbf/Cargo.lock

@@ -4919,6 +4919,13 @@ dependencies = [
  "thiserror",
 ]
 
+[[package]]
+name = "solana-decode-error"
+version = "2.1.0"
+dependencies = [
+ "num-traits",
+]
+
 [[package]]
 name = "solana-define-syscall"
 version = "2.1.0"
@@ -5313,6 +5320,7 @@ dependencies = [
  "sha2 0.10.8",
  "sha3 0.10.8",
  "solana-atomic-u64",
+ "solana-decode-error",
  "solana-define-syscall",
  "solana-sanitize",
  "solana-sdk-macro",
@@ -5797,6 +5805,7 @@ version = "2.1.0"
 dependencies = [
  "num-derive",
  "num-traits",
+ "solana-decode-error",
  "solana-program",
  "thiserror",
 ]
@@ -6154,6 +6163,7 @@ dependencies = [
  "sha2 0.10.8",
  "sha3 0.10.8",
  "siphasher",
+ "solana-decode-error",
  "solana-program",
  "solana-sanitize",
  "solana-sdk-macro",

+ 1 - 0
programs/sbf/Cargo.toml

@@ -31,6 +31,7 @@ solana-bpf-loader-program = { path = "../bpf_loader", version = "=2.1.0" }
 solana-cli-output = { path = "../../cli-output", version = "=2.1.0" }
 solana-compute-budget = { path = "../../compute-budget", version = "=2.1.0" }
 solana-curve25519 = { path = "../../curves/curve25519", version = "=2.1.0" }
+solana-decode-error = { path = "../../sdk/decode-error", version = "=2.1.0" }
 solana-ledger = { path = "../../ledger", version = "=2.1.0" }
 solana-log-collector = { path = "../../log-collector", version = "=2.1.0" }
 solana-logger = { path = "../../logger", version = "=2.1.0" }

+ 1 - 0
programs/sbf/rust/error_handling/Cargo.toml

@@ -11,6 +11,7 @@ edition = { workspace = true }
 [dependencies]
 num-derive = { workspace = true }
 num-traits = { workspace = true }
+solana-decode-error = { workspace = true }
 solana-program = { workspace = true }
 thiserror = { workspace = true }
 

+ 1 - 1
programs/sbf/rust/error_handling/src/lib.rs

@@ -4,9 +4,9 @@ extern crate solana_program;
 use {
     num_derive::FromPrimitive,
     num_traits::FromPrimitive,
+    solana_decode_error::DecodeError,
     solana_program::{
         account_info::AccountInfo,
-        decode_error::DecodeError,
         entrypoint::ProgramResult,
         msg,
         program_error::{PrintProgramError, ProgramError},

+ 1 - 0
sdk/Cargo.toml

@@ -80,6 +80,7 @@ serde_with = { workspace = true, features = ["macros"] }
 sha2 = { workspace = true }
 sha3 = { workspace = true, optional = true }
 siphasher = { workspace = true }
+solana-decode-error = { workspace = true }
 solana-frozen-abi = { workspace = true, optional = true }
 solana-frozen-abi-macro = { workspace = true, optional = true }
 solana-program = { workspace = true }

+ 16 - 0
sdk/decode-error/Cargo.toml

@@ -0,0 +1,16 @@
+[package]
+name = "solana-decode-error"
+description = "Solana DecodeError Trait"
+documentation = "https://docs.rs/solana-decode-error"
+version = { workspace = true }
+authors = { workspace = true }
+repository = { workspace = true }
+homepage = { workspace = true }
+license = { workspace = true }
+edition = { workspace = true }
+
+[dependencies]
+num-traits = { workspace = true }
+
+[dev-dependencies]
+num-derive = { workspace = true }

+ 0 - 0
sdk/program/src/decode_error.rs → sdk/decode-error/src/lib.rs


+ 1 - 0
sdk/program/Cargo.toml

@@ -32,6 +32,7 @@ serde_derive = { workspace = true }
 sha2 = { workspace = true }
 sha3 = { workspace = true }
 solana-atomic-u64 = { workspace = true }
+solana-decode-error = { workspace = true }
 solana-frozen-abi = { workspace = true, optional = true }
 solana-frozen-abi-macro = { workspace = true, optional = true }
 solana-sanitize = { workspace = true }

+ 2 - 1
sdk/program/src/lib.rs

@@ -486,7 +486,6 @@ pub mod bpf_loader_upgradeable;
 pub mod clock;
 pub mod compute_units;
 pub mod debug_account_data;
-pub mod decode_error;
 pub mod ed25519_program;
 pub mod entrypoint;
 pub mod entrypoint_deprecated;
@@ -593,6 +592,8 @@ pub mod sdk_ids {
     }
 }
 
+#[deprecated(since = "2.1.0", note = "Use `solana-decode-error` crate instead")]
+pub use solana_decode_error as decode_error;
 /// Same as [`declare_id`] except that it reports that this ID has been deprecated.
 pub use solana_sdk_macro::program_declare_deprecated_id as declare_deprecated_id;
 /// Convenience macro to declare a static public key and functions to interact with it.

+ 2 - 1
sdk/program/src/program_error.rs

@@ -4,8 +4,9 @@
 #[cfg(feature = "borsh")]
 use borsh::io::Error as BorshIoError;
 use {
-    crate::{decode_error::DecodeError, instruction::InstructionError, msg, pubkey::PubkeyError},
+    crate::{instruction::InstructionError, msg, pubkey::PubkeyError},
     num_traits::{FromPrimitive, ToPrimitive},
+    solana_decode_error::DecodeError,
     std::convert::TryFrom,
     thiserror::Error,
 };

+ 2 - 1
sdk/program/src/pubkey.rs

@@ -9,9 +9,10 @@ use arbitrary::Arbitrary;
 #[cfg(feature = "borsh")]
 use borsh::{BorshDeserialize, BorshSchema, BorshSerialize};
 use {
-    crate::{decode_error::DecodeError, hash::hashv},
+    crate::hash::hashv,
     bytemuck_derive::{Pod, Zeroable},
     num_derive::{FromPrimitive, ToPrimitive},
+    solana_decode_error::DecodeError,
     std::{
         convert::{Infallible, TryFrom},
         fmt, mem,

+ 1 - 1
sdk/program/src/stake/instruction.rs

@@ -3,7 +3,6 @@ use crate::stake::config;
 use {
     crate::{
         clock::{Epoch, UnixTimestamp},
-        decode_error::DecodeError,
         instruction::{AccountMeta, Instruction},
         program_error::ProgramError,
         pubkey::Pubkey,
@@ -16,6 +15,7 @@ use {
     log::*,
     num_derive::{FromPrimitive, ToPrimitive},
     serde_derive::{Deserialize, Serialize},
+    solana_decode_error::DecodeError,
     thiserror::Error,
 };
 

+ 1 - 1
sdk/program/src/system_instruction.rs

@@ -42,7 +42,6 @@
 #[allow(deprecated)]
 use {
     crate::{
-        decode_error::DecodeError,
         instruction::{AccountMeta, Instruction},
         nonce,
         pubkey::Pubkey,
@@ -50,6 +49,7 @@ use {
         sysvar::{recent_blockhashes, rent},
     },
     num_derive::{FromPrimitive, ToPrimitive},
+    solana_decode_error::DecodeError,
     thiserror::Error,
 };
 

+ 1 - 1
sdk/program/src/vote/error.rs

@@ -1,8 +1,8 @@
 //! Vote program errors
 
 use {
-    crate::decode_error::DecodeError,
     num_derive::{FromPrimitive, ToPrimitive},
+    solana_decode_error::DecodeError,
     thiserror::Error,
 };
 

+ 5 - 4
sdk/src/lib.rs

@@ -49,16 +49,15 @@ pub use solana_program::{
     account_info, address_lookup_table, alt_bn128, big_mod_exp, blake3, bpf_loader,
     bpf_loader_deprecated, bpf_loader_upgradeable, clock, config, custom_heap_default,
     custom_panic_default, debug_account_data, declare_deprecated_sysvar_id, declare_sysvar_id,
-    decode_error, ed25519_program, epoch_rewards, epoch_schedule, fee_calculator, impl_sysvar_get,
-    incinerator, instruction, keccak, lamports, loader_instruction, loader_upgradeable_instruction,
-    loader_v4, loader_v4_instruction, message, msg, native_token, nonce, program, program_error,
+    ed25519_program, epoch_rewards, epoch_schedule, fee_calculator, impl_sysvar_get, incinerator,
+    instruction, keccak, lamports, loader_instruction, loader_upgradeable_instruction, loader_v4,
+    loader_v4_instruction, message, msg, native_token, nonce, program, program_error,
     program_memory, program_option, program_pack, rent, secp256k1_program, serde_varint,
     serialize_utils, slot_hashes, slot_history, stable_layout, stake, stake_history, syscalls,
     system_instruction, system_program, sysvar, unchecked_div_by_const, vote,
 };
 #[cfg(feature = "borsh")]
 pub use solana_program::{borsh, borsh0_10, borsh1};
-
 pub mod account;
 pub mod account_utils;
 pub mod client;
@@ -110,6 +109,8 @@ pub mod transaction_context;
 pub mod transport;
 pub mod wasm;
 
+#[deprecated(since = "2.1.0", note = "Use `solana-decode-error` crate instead")]
+pub use solana_decode_error as decode_error;
 #[deprecated(since = "2.1.0", note = "Use `solana-sanitize` crate instead")]
 pub use solana_sanitize as sanitize;
 /// Same as `declare_id` except report that this id has been deprecated.

+ 2 - 4
sdk/src/precompiles.rs

@@ -3,11 +3,9 @@
 #![cfg(feature = "full")]
 
 use {
-    crate::{
-        decode_error::DecodeError, feature_set::FeatureSet, instruction::CompiledInstruction,
-        pubkey::Pubkey,
-    },
+    crate::{feature_set::FeatureSet, instruction::CompiledInstruction, pubkey::Pubkey},
     lazy_static::lazy_static,
+    solana_decode_error::DecodeError,
     thiserror::Error,
 };