diff --git a/.github/workflows/tests-rs-workspace.yml b/.github/workflows/tests-rs-workspace.yml index 622cd5ab76d..5e803c3e074 100644 --- a/.github/workflows/tests-rs-workspace.yml +++ b/.github/workflows/tests-rs-workspace.yml @@ -278,15 +278,35 @@ jobs: ' } + # A derive list is not part of a structure's wire layout: adding or + # reordering a derive cannot change how the existing fields or + # variants serialize, while the fields, the variants and the + # attributes that do shape the encoding (serde, repr, + # platform_serialize) are still compared verbatim. Drop + # `#[derive(...)]` attributes, single- or multi-line, before diffing. + strip_derives() { + awk ' + skipping { + if (index($0, ")]")) { skipping=0 } + next + } + /^[[:space:]]*#\[derive\(/ { + if (!index($0, ")]")) { skipping=1 } + next + } + { print } + ' + } + for file in $CHANGED_RS; do if [ ! -f "$file" ]; then continue; fi BASE_CONTENT=$(git show "$BASE_PARENT":"$file" 2>/dev/null || true) if [ -z "$BASE_CONTENT" ]; then continue; fi - BASE_APPEND=$(echo "$BASE_CONTENT" | extract_tagged_block "@append_only") - PR_APPEND=$(extract_tagged_block "@append_only" < "$file") - BASE_IMMUTABLE=$(echo "$BASE_CONTENT" | extract_tagged_block "@immutable") - PR_IMMUTABLE=$(extract_tagged_block "@immutable" < "$file") + BASE_APPEND=$(echo "$BASE_CONTENT" | extract_tagged_block "@append_only" | strip_derives) + PR_APPEND=$(extract_tagged_block "@append_only" < "$file" | strip_derives) + BASE_IMMUTABLE=$(echo "$BASE_CONTENT" | extract_tagged_block "@immutable" | strip_derives) + PR_IMMUTABLE=$(extract_tagged_block "@immutable" < "$file" | strip_derives) if [ -n "$BASE_APPEND" ]; then # Check for deletions, ignoring comment-only lines and the tag itself diff --git a/packages/rs-dpp/src/address_funds/fee_strategy/mod.rs b/packages/rs-dpp/src/address_funds/fee_strategy/mod.rs index 61db79a241c..b8d165086fe 100644 --- a/packages/rs-dpp/src/address_funds/fee_strategy/mod.rs +++ b/packages/rs-dpp/src/address_funds/fee_strategy/mod.rs @@ -2,11 +2,11 @@ pub mod deduct_fee_from_inputs_and_outputs; pub use deduct_fee_from_inputs_and_outputs::FeeDeductionResult; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; -#[derive(Debug, Clone, Encode, Decode, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, Encode, Decode, PartialEq, Eq, Hash, DecodeUntrusted)] pub enum AddressFundsFeeStrategyStep { /// Deduct fee from a specific input address by index. /// The input must have remaining balance after its contribution to outputs. diff --git a/packages/rs-dpp/src/address_funds/platform_address.rs b/packages/rs-dpp/src/address_funds/platform_address.rs index 4d7641e71f5..f4bbd05a9a3 100644 --- a/packages/rs-dpp/src/address_funds/platform_address.rs +++ b/packages/rs-dpp/src/address_funds/platform_address.rs @@ -3,7 +3,7 @@ use crate::address_funds::AddressWitnessVerificationOperations; use crate::prelude::AddressNonce; use crate::ProtocolError; use bech32::{Bech32m, Hrp}; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use dashcore::address::Payload; use dashcore::blockdata::script::ScriptBuf; use dashcore::hashes::{sha256d, Hash}; @@ -34,6 +34,7 @@ pub const ADDRESS_HASH_SIZE: usize = 20; Decode, PlatformSerialize, PlatformDeserialize, + DecodeUntrusted, )] #[platform_serialize(unversioned)] pub enum PlatformAddress { @@ -428,9 +429,9 @@ impl PlatformAddress { /// Uses bincode deserialization which expects: 0x00 for P2pkh, 0x01 for P2sh. pub fn from_bytes(bytes: &[u8]) -> Result { let (address, _): (Self, usize) = - bincode::decode_from_slice(bytes, bincode::config::standard()).map_err(|e| { - ProtocolError::DecodingError(format!("cannot decode PlatformAddress: {}", e)) - })?; + bincode::decode_from_slice_untrusted(bytes, bincode::config::standard()).map_err( + |e| ProtocolError::DecodingError(format!("cannot decode PlatformAddress: {}", e)), + )?; Ok(address) } diff --git a/packages/rs-dpp/src/address_funds/witness.rs b/packages/rs-dpp/src/address_funds/witness.rs index 16efe7de0fd..a6f69d9933b 100644 --- a/packages/rs-dpp/src/address_funds/witness.rs +++ b/packages/rs-dpp/src/address_funds/witness.rs @@ -1,9 +1,9 @@ #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; -use bincode::de::{BorrowDecoder, Decoder}; +use bincode::de::BorrowDecoder; use bincode::enc::Encoder; use bincode::error::{DecodeError, EncodeError}; -use bincode::{Decode, Encode}; +use bincode::Encode; use platform_value::BinaryData; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; @@ -77,36 +77,46 @@ impl Encode for AddressWitness { } } -impl Decode for AddressWitness { - fn decode>(decoder: &mut D) -> Result { - let discriminant = u8::decode(decoder)?; - match discriminant { - 0 => { - let signature = BinaryData::decode(decoder)?; - Ok(AddressWitness::P2pkh { signature }) - } - 1 => { - let signatures = Vec::::decode(decoder)?; - if signatures.len() > MAX_P2SH_SIGNATURES { - return Err(DecodeError::OtherString(format!( - "P2SH signatures count {} exceeds maximum {}", - signatures.len(), - MAX_P2SH_SIGNATURES, - ))); +// Share the wire schema and domain checks across both decoding APIs. +macro_rules! impl_address_witness_decode { + ($decode:ident, $decoder:ident, $method:ident, $untrusted:expr) => { + impl bincode::$decode for AddressWitness { + fn $method>( + decoder: &mut D, + ) -> Result { + let discriminant = u8::$method(decoder)?; + match discriminant { + 0 => { + let signature = BinaryData::$method(decoder)?; + Ok(AddressWitness::P2pkh { signature }) + } + 1 => { + let signatures = Vec::::$method(decoder)?; + if signatures.len() > MAX_P2SH_SIGNATURES { + return Err(DecodeError::OtherString(format!( + "P2SH signatures count {} exceeds maximum {}", + signatures.len(), + MAX_P2SH_SIGNATURES, + ))); + } + let redeem_script = BinaryData::$method(decoder)?; + Ok(AddressWitness::P2sh { + signatures, + redeem_script, + }) + } + _ => Err(DecodeError::OtherString(format!( + "Invalid AddressWitness discriminant: {}", + discriminant + ))), } - let redeem_script = BinaryData::decode(decoder)?; - Ok(AddressWitness::P2sh { - signatures, - redeem_script, - }) } - _ => Err(DecodeError::OtherString(format!( - "Invalid AddressWitness discriminant: {}", - discriminant - ))), } - } + }; } +impl_address_witness_decode!(Decode, Decoder, decode, false); +impl_address_witness_decode!(DecodeUntrusted, UntrustedDecoder, decode_untrusted, true); +bincode::impl_borrow_decode_untrusted!(AddressWitness); impl<'de, C> bincode::BorrowDecode<'de, C> for AddressWitness { fn borrow_decode>( diff --git a/packages/rs-dpp/src/asset_lock/reduced_asset_lock_value/mod.rs b/packages/rs-dpp/src/asset_lock/reduced_asset_lock_value/mod.rs index 2983bd18973..6756c7f1d82 100644 --- a/packages/rs-dpp/src/asset_lock/reduced_asset_lock_value/mod.rs +++ b/packages/rs-dpp/src/asset_lock/reduced_asset_lock_value/mod.rs @@ -1,7 +1,7 @@ use crate::asset_lock::reduced_asset_lock_value::v0::AssetLockValueV0; use crate::fee::Credits; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Bytes32; @@ -22,6 +22,7 @@ pub use v0::{AssetLockValueGettersV0, AssetLockValueSettersV0}; PartialEq, serde::Serialize, serde::Deserialize, + DecodeUntrusted, )] // Stored asset-lock values are decoded from GroveDB proof elements on the // client before the quorum signature is checked, so the byte budget must be diff --git a/packages/rs-dpp/src/asset_lock/reduced_asset_lock_value/v0/mod.rs b/packages/rs-dpp/src/asset_lock/reduced_asset_lock_value/v0/mod.rs index a855bafb542..125f23612fe 100644 --- a/packages/rs-dpp/src/asset_lock/reduced_asset_lock_value/v0/mod.rs +++ b/packages/rs-dpp/src/asset_lock/reduced_asset_lock_value/v0/mod.rs @@ -1,14 +1,16 @@ use crate::fee::Credits; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_value::Bytes32; // `initial_credit_value` / `remaining_credit_value` are `Credits` (u64) and can // exceed JS's `MAX_SAFE_INTEGER`; `#[json_safe_fields]` serializes them as // strings in human-readable JSON to avoid precision loss when crossing to JS. #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, Encode, Decode, PartialEq, serde::Serialize, serde::Deserialize)] +#[derive( + Debug, Clone, Encode, Decode, PartialEq, serde::Serialize, serde::Deserialize, DecodeUntrusted, +)] pub struct AssetLockValueV0 { pub(super) initial_credit_value: Credits, pub(super) tx_out_script: Vec, diff --git a/packages/rs-dpp/src/balances/credits.rs b/packages/rs-dpp/src/balances/credits.rs index 9f9b4720551..9bbd5a42c65 100644 --- a/packages/rs-dpp/src/balances/credits.rs +++ b/packages/rs-dpp/src/balances/credits.rs @@ -10,6 +10,7 @@ use crate::prelude::BlockHeight; use crate::ProtocolError; +use bincode::{Decode, DecodeUntrusted, Encode}; use integer_encoding::VarInt; use std::collections::BTreeMap; use std::convert::TryFrom; @@ -42,7 +43,7 @@ pub const MAX_CREDITS: Credits = 9223372036854775807 as Credits; //i64 Max pub const CREDITS_PER_DUFF: Credits = 1000; /// An enum for credit operations -#[derive(Debug, Clone, Copy, PartialEq, Eq, bincode::Encode, bincode::Decode)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Encode, Decode, DecodeUntrusted)] pub enum CreditOperation { /// We are setting credit amounts SetCredits(Credits), @@ -51,7 +52,7 @@ pub enum CreditOperation { } /// An enum for credit operations in compacted address blobs -#[derive(Debug, Clone, PartialEq, Eq, bincode::Encode, bincode::Decode)] +#[derive(Debug, Clone, PartialEq, Eq, Encode, Decode, DecodeUntrusted)] pub enum BlockAwareCreditOperation { /// We are setting credit amounts - the final value after all operations SetCredits(Credits), diff --git a/packages/rs-dpp/src/balances/total_single_token_balance/mod.rs b/packages/rs-dpp/src/balances/total_single_token_balance/mod.rs index e9654758545..c446bb3b5a5 100644 --- a/packages/rs-dpp/src/balances/total_single_token_balance/mod.rs +++ b/packages/rs-dpp/src/balances/total_single_token_balance/mod.rs @@ -1,14 +1,17 @@ use crate::balances::credits::SignedTokenAmount; use crate::ProtocolError; #[cfg(feature = "fixtures-and-mocks")] -use bincode::Encode; +use bincode::{DecodeUntrusted, Encode}; #[cfg(feature = "fixtures-and-mocks")] use platform_serialization::de::Decode; use std::fmt; /// A structure where the token supply and the aggregated token account balances should always be equal #[derive(Copy, Clone, Debug)] -#[cfg_attr(feature = "fixtures-and-mocks", derive(Encode, Decode))] +#[cfg_attr( + feature = "fixtures-and-mocks", + derive(Encode, Decode, DecodeUntrusted) +)] pub struct TotalSingleTokenBalance { /// the token supply pub token_supply: SignedTokenAmount, diff --git a/packages/rs-dpp/src/block/block_info/mod.rs b/packages/rs-dpp/src/block/block_info/mod.rs index e9685f5d8e3..a6d65f18f54 100644 --- a/packages/rs-dpp/src/block/block_info/mod.rs +++ b/packages/rs-dpp/src/block/block_info/mod.rs @@ -6,7 +6,7 @@ use crate::serialization::json_safe_fields; use crate::serialization::JsonConvertible; #[cfg(feature = "value-conversion")] use crate::serialization::ValueConvertible; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use serde::{Deserialize, Serialize}; use std::fmt; @@ -23,7 +23,19 @@ pub const DEFAULT_BLOCK_INFO: BlockInfo = BlockInfo { /// Block information #[cfg_attr(feature = "json-conversion", json_safe_fields)] #[cfg_attr(feature = "json-conversion", derive(JsonConvertible))] -#[derive(Clone, Copy, Default, Debug, PartialEq, Eq, Encode, Decode, Serialize, Deserialize)] +#[derive( + Clone, + Copy, + Default, + Debug, + PartialEq, + Eq, + Encode, + Decode, + Serialize, + Deserialize, + DecodeUntrusted, +)] #[cfg_attr(feature = "value-conversion", derive(ValueConvertible))] #[serde(rename_all = "camelCase")] pub struct BlockInfo { diff --git a/packages/rs-dpp/src/block/epoch/mod.rs b/packages/rs-dpp/src/block/epoch/mod.rs index 17852a9f1a6..e1ea6b7f222 100644 --- a/packages/rs-dpp/src/block/epoch/mod.rs +++ b/packages/rs-dpp/src/block/epoch/mod.rs @@ -1,5 +1,5 @@ use crate::{InvalidVectorSizeError, ProtocolError}; -use bincode::{BorrowDecode, Decode, Encode}; +use bincode::{BorrowDecode, Encode}; use serde::{Deserialize, Serialize}; /// Epoch key offset @@ -100,14 +100,23 @@ impl<'de> Deserialize<'de> for Epoch { } } -impl Decode for Epoch { - fn decode>( - decoder: &mut D, - ) -> Result { - let index = EpochIndex::decode(decoder)?; - Epoch::new(index).map_err(|e| bincode::error::DecodeError::OtherString(e.to_string())) - } +// Share the wire schema and domain checks across both decoding APIs. +macro_rules! impl_epoch_decode { + ($decode:ident, $decoder:ident, $method:ident, $untrusted:expr) => { + impl bincode::$decode for Epoch { + fn $method>( + decoder: &mut D, + ) -> Result { + let index = EpochIndex::$method(decoder)?; + Epoch::new(index) + .map_err(|e| bincode::error::DecodeError::OtherString(e.to_string())) + } + } + }; } +impl_epoch_decode!(Decode, Decoder, decode, false); +impl_epoch_decode!(DecodeUntrusted, UntrustedDecoder, decode_untrusted, true); +bincode::impl_borrow_decode_untrusted!(Epoch); impl<'de, C> BorrowDecode<'de, C> for Epoch { fn borrow_decode>( diff --git a/packages/rs-dpp/src/block/extended_block_info/mod.rs b/packages/rs-dpp/src/block/extended_block_info/mod.rs index 99cb4bb1ea7..639f4c9dd10 100644 --- a/packages/rs-dpp/src/block/extended_block_info/mod.rs +++ b/packages/rs-dpp/src/block/extended_block_info/mod.rs @@ -8,7 +8,7 @@ use crate::serialization::JsonConvertible; #[cfg(feature = "value-conversion")] use crate::serialization::ValueConvertible; use crate::version::FeatureVersion; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use serde::{Deserialize, Serialize}; @@ -30,6 +30,7 @@ pub mod v0; PlatformSerialize, PlatformDeserialize, From, + DecodeUntrusted, )] #[platform_serialize(unversioned)] //versioned directly, no need to use platform_version #[serde(tag = "$formatVersion")] diff --git a/packages/rs-dpp/src/block/extended_block_info/v0/mod.rs b/packages/rs-dpp/src/block/extended_block_info/v0/mod.rs index 6c9cd89b658..afe058d4790 100644 --- a/packages/rs-dpp/src/block/extended_block_info/v0/mod.rs +++ b/packages/rs-dpp/src/block/extended_block_info/v0/mod.rs @@ -2,12 +2,12 @@ use crate::block::block_info::BlockInfo; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use serde::{Deserialize, Serialize}; /// Extended Block information #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Clone, Debug, PartialEq, Eq, Encode, Decode, Serialize, Deserialize)] +#[derive(Clone, Debug, PartialEq, Eq, Encode, Decode, Serialize, Deserialize, DecodeUntrusted)] #[serde(rename_all = "camelCase")] pub struct ExtendedBlockInfoV0 { /// Basic block info diff --git a/packages/rs-dpp/src/block/extended_epoch_info/mod.rs b/packages/rs-dpp/src/block/extended_epoch_info/mod.rs index 70b95c88ad7..f5b33fb3876 100644 --- a/packages/rs-dpp/src/block/extended_epoch_info/mod.rs +++ b/packages/rs-dpp/src/block/extended_epoch_info/mod.rs @@ -8,7 +8,7 @@ use crate::serialization::JsonConvertible; #[cfg(feature = "value-conversion")] use crate::serialization::ValueConvertible; use crate::util::deserializer::ProtocolVersion; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use serde::{Deserialize, Serialize}; @@ -27,6 +27,7 @@ use serde::{Deserialize, Serialize}; PlatformSerialize, PlatformDeserialize, From, + DecodeUntrusted, )] #[platform_serialize(unversioned)] //versioned directly, no need to use platform_version #[serde(tag = "$formatVersion")] diff --git a/packages/rs-dpp/src/block/extended_epoch_info/v0/mod.rs b/packages/rs-dpp/src/block/extended_epoch_info/v0/mod.rs index 7a67aac3e82..60f7f3fdbc6 100644 --- a/packages/rs-dpp/src/block/extended_epoch_info/v0/mod.rs +++ b/packages/rs-dpp/src/block/extended_epoch_info/v0/mod.rs @@ -2,12 +2,12 @@ use crate::block::epoch::EpochIndex; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; use crate::util::deserializer::ProtocolVersion; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use serde::{Deserialize, Serialize}; /// Extended Epoch information #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Clone, Debug, PartialEq, Encode, Decode, Serialize, Deserialize)] +#[derive(Clone, Debug, PartialEq, Encode, Decode, Serialize, Deserialize, DecodeUntrusted)] #[serde(rename_all = "camelCase")] pub struct ExtendedEpochInfoV0 { /// The index of the epoch diff --git a/packages/rs-dpp/src/block/finalized_epoch_info/mod.rs b/packages/rs-dpp/src/block/finalized_epoch_info/mod.rs index b759e374a72..d1529e9e796 100644 --- a/packages/rs-dpp/src/block/finalized_epoch_info/mod.rs +++ b/packages/rs-dpp/src/block/finalized_epoch_info/mod.rs @@ -7,7 +7,7 @@ use crate::protocol_error::ProtocolError; use crate::serialization::JsonConvertible; #[cfg(feature = "value-conversion")] use crate::serialization::ValueConvertible; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use serde::{Deserialize, Serialize}; @@ -26,6 +26,7 @@ use serde::{Deserialize, Serialize}; PlatformSerialize, PlatformDeserialize, From, + DecodeUntrusted, )] #[platform_serialize(unversioned)] //versioned directly, no need to use platform_version #[serde(tag = "$formatVersion")] diff --git a/packages/rs-dpp/src/block/finalized_epoch_info/v0/mod.rs b/packages/rs-dpp/src/block/finalized_epoch_info/v0/mod.rs index afd31521359..7475088a069 100644 --- a/packages/rs-dpp/src/block/finalized_epoch_info/v0/mod.rs +++ b/packages/rs-dpp/src/block/finalized_epoch_info/v0/mod.rs @@ -4,14 +4,14 @@ use crate::fee::Credits; use crate::prelude::{BlockHeight, BlockHeightInterval, CoreBlockHeight, TimestampMillis}; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_value::Identifier; use serde::{Deserialize, Serialize}; use std::collections::BTreeMap; /// Finalized Epoch information #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Clone, Debug, PartialEq, Encode, Decode, Serialize, Deserialize)] +#[derive(Clone, Debug, PartialEq, Encode, Decode, Serialize, Deserialize, DecodeUntrusted)] #[serde(rename_all = "camelCase")] pub struct FinalizedEpochInfoV0 { /// First block time diff --git a/packages/rs-dpp/src/core_types/validator/v0/mod.rs b/packages/rs-dpp/src/core_types/validator/v0/mod.rs index e8388544fee..e99533cc51e 100644 --- a/packages/rs-dpp/src/core_types/validator/v0/mod.rs +++ b/packages/rs-dpp/src/core_types/validator/v0/mod.rs @@ -5,14 +5,12 @@ use crate::bls_signatures::{Bls12381G2Impl, PublicKey as BlsPublicKey}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; -#[cfg(feature = "core-types-serialization")] -use bincode::de::Decoder; #[cfg(feature = "core-types-serialization")] use bincode::enc::Encoder; #[cfg(feature = "core-types-serialization")] use bincode::error::{DecodeError, EncodeError}; #[cfg(feature = "core-types-serialization")] -use bincode::{Decode, Encode}; +use bincode::Encode; #[cfg(feature = "core-types-serialization")] use dashcore::hashes::Hash; @@ -84,58 +82,71 @@ impl Encode for ValidatorV0 { } } -#[cfg(feature = "core-types-serialization")] -impl Decode for ValidatorV0 { - fn decode>(decoder: &mut D) -> Result { - // Decode each field in the same order as they were encoded - - // Decode ProTxHash - let pro_tx_hash_bytes = <[u8; 32]>::decode(decoder)?; - let pro_tx_hash = ProTxHash::from_slice(&pro_tx_hash_bytes) - .map_err(|_| DecodeError::OtherString("Failed to decode ProTxHash".to_string()))?; - - // Decode Option - let has_public_key = bool::decode(decoder)?; - let public_key = if has_public_key { - let public_key_bytes = <[u8; 48]>::decode(decoder)?; - - Some( - BlsPublicKey::try_from(public_key_bytes.as_slice()).map_err(|_| { - DecodeError::OtherString("Failed to decode BlsPublicKey".to_string()) - })?, - ) - } else { - None - }; - - // Decode node_ip as a string - let node_ip = String::decode(decoder)?; - - // Decode node_id - let node_id_bytes = <[u8; 20]>::decode(decoder)?; - let node_id = PubkeyHash::from_slice(&node_id_bytes) - .map_err(|_| DecodeError::OtherString("Failed to decode NodeId".to_string()))?; - - // Decode core_port, platform_http_port, and platform_p2p_port as u16 - let core_port = u16::decode(decoder)?; - let platform_http_port = u16::decode(decoder)?; - let platform_p2p_port = u16::decode(decoder)?; - - // Decode is_banned as a boolean - let is_banned = bool::decode(decoder)?; - - Ok(ValidatorV0 { - pro_tx_hash, - public_key, - node_ip, - node_id, - core_port, - platform_http_port, - platform_p2p_port, - is_banned, - }) - } +// Share the wire schema and domain checks across both decoding APIs. +macro_rules! impl_validator_v0_decode { + ($decode:ident, $decoder:ident, $method:ident, $untrusted:expr) => { + impl bincode::$decode for ValidatorV0 { + fn $method>( + decoder: &mut D, + ) -> Result { + // Decode each field in the same order as they were encoded + + // Decode ProTxHash + let pro_tx_hash_bytes = <[u8; 32]>::$method(decoder)?; + let pro_tx_hash = ProTxHash::from_slice(&pro_tx_hash_bytes).map_err(|_| { + DecodeError::OtherString("Failed to decode ProTxHash".to_string()) + })?; + + // Decode Option + let has_public_key = bool::$method(decoder)?; + let public_key = if has_public_key { + let public_key_bytes = <[u8; 48]>::$method(decoder)?; + + Some( + BlsPublicKey::try_from(public_key_bytes.as_slice()).map_err(|_| { + DecodeError::OtherString("Failed to decode BlsPublicKey".to_string()) + })?, + ) + } else { + None + }; + + // Decode node_ip as a string + let node_ip = String::$method(decoder)?; + + // Decode node_id + let node_id_bytes = <[u8; 20]>::$method(decoder)?; + let node_id = PubkeyHash::from_slice(&node_id_bytes) + .map_err(|_| DecodeError::OtherString("Failed to decode NodeId".to_string()))?; + + // Decode core_port, platform_http_port, and platform_p2p_port as u16 + let core_port = u16::$method(decoder)?; + let platform_http_port = u16::$method(decoder)?; + let platform_p2p_port = u16::$method(decoder)?; + + // Decode is_banned as a boolean + let is_banned = bool::$method(decoder)?; + + Ok(ValidatorV0 { + pro_tx_hash, + public_key, + node_ip, + node_id, + core_port, + platform_http_port, + platform_p2p_port, + is_banned, + }) + } + } + }; } +#[cfg(feature = "core-types-serialization")] +impl_validator_v0_decode!(Decode, Decoder, decode, false); +#[cfg(feature = "core-types-serialization")] +impl_validator_v0_decode!(DecodeUntrusted, UntrustedDecoder, decode_untrusted, true); +#[cfg(feature = "core-types-serialization")] +bincode::impl_borrow_decode_untrusted!(ValidatorV0); impl Debug for ValidatorV0 { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { diff --git a/packages/rs-dpp/src/core_types/validator_set/mod.rs b/packages/rs-dpp/src/core_types/validator_set/mod.rs index e032b4bc88d..14021417b30 100644 --- a/packages/rs-dpp/src/core_types/validator_set/mod.rs +++ b/packages/rs-dpp/src/core_types/validator_set/mod.rs @@ -6,7 +6,7 @@ use crate::core_types::validator_set::v0::{ #[cfg(feature = "core-types-serialization")] use crate::ProtocolError; #[cfg(feature = "core-types-serialization")] -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use dashcore::{ProTxHash, QuorumHash}; #[cfg(feature = "core-types-serialization")] use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; @@ -28,7 +28,13 @@ pub mod v0; )] #[cfg_attr( feature = "core-types-serialization", - derive(Encode, Decode, PlatformDeserialize, PlatformSerialize), + derive( + Encode, + Decode, + DecodeUntrusted, + PlatformDeserialize, + PlatformSerialize + ), platform_serialize(limit = 15000, unversioned) )] pub enum ValidatorSet { diff --git a/packages/rs-dpp/src/core_types/validator_set/v0/mod.rs b/packages/rs-dpp/src/core_types/validator_set/v0/mod.rs index f00993628f6..45a19e2224c 100644 --- a/packages/rs-dpp/src/core_types/validator_set/v0/mod.rs +++ b/packages/rs-dpp/src/core_types/validator_set/v0/mod.rs @@ -1,7 +1,7 @@ use crate::bls_signatures::PublicKey as BlsPublicKey; use crate::core_types::validator::v0::ValidatorV0; #[cfg(feature = "core-types-serialization")] -use bincode::de::{BorrowDecoder, Decoder}; +use bincode::de::BorrowDecoder; #[cfg(feature = "core-types-serialization")] use bincode::enc::Encoder; #[cfg(feature = "core-types-serialization")] @@ -98,51 +98,61 @@ impl Encode for ValidatorSetV0 { } } -#[cfg(feature = "core-types-serialization")] -impl Decode for ValidatorSetV0 { - fn decode>( - decoder: &mut D, - ) -> Result { - // Decode the quorum hash directly as a [u8; 32] array - let quorum_hash = <[u8; 32]>::decode(decoder)?; - let quorum_index = Option::::decode(decoder)?; - let core_height = u32::decode(decoder)?; - - // Decode Vec<(Vec, ValidatorV0)> and convert it back to BTreeMap - let members_as_vec = Vec::<(Vec, ValidatorV0)>::decode(decoder)?; - let members: BTreeMap = members_as_vec - .into_iter() - .map(|(key_bytes, value)| { - let key = ProTxHash::from_slice(&key_bytes).map_err(|_| { - bincode::error::DecodeError::OtherString( - "Failed to decode ProTxHash".to_string(), - ) - })?; - Ok((key, value)) - }) - .collect::>()?; - - // Decode the [u8; 48] directly - let mut public_key_bytes = [0u8; 48]; - let bytes = <[u8; 48]>::decode(decoder)?; - public_key_bytes.copy_from_slice(&bytes); - let threshold_public_key = - BlsPublicKey::try_from(public_key_bytes.as_slice()).map_err(|e| { - bincode::error::DecodeError::OtherString(format!( - "Failed to decode BlsPublicKey: {}", - e - )) - })?; - - Ok(ValidatorSetV0 { - quorum_hash: QuorumHash::from_byte_array(quorum_hash), - quorum_index, - core_height, - members, - threshold_public_key, - }) - } +// Share the wire schema and domain checks across both decoding APIs. +macro_rules! impl_validator_set_v0_decode { + ($decode:ident, $decoder:ident, $method:ident, $untrusted:expr) => { + impl bincode::$decode for ValidatorSetV0 { + fn $method>( + decoder: &mut D, + ) -> Result { + // Decode the quorum hash directly as a [u8; 32] array + let quorum_hash = <[u8; 32]>::$method(decoder)?; + let quorum_index = Option::::$method(decoder)?; + let core_height = u32::$method(decoder)?; + + // Decode Vec<(Vec, ValidatorV0)> and convert it back to BTreeMap + let members_as_vec = Vec::<(Vec, ValidatorV0)>::$method(decoder)?; + let members: BTreeMap = members_as_vec + .into_iter() + .map(|(key_bytes, value)| { + let key = ProTxHash::from_slice(&key_bytes).map_err(|_| { + bincode::error::DecodeError::OtherString( + "Failed to decode ProTxHash".to_string(), + ) + })?; + Ok((key, value)) + }) + .collect::>()?; + + // Decode the [u8; 48] directly + let mut public_key_bytes = [0u8; 48]; + let bytes = <[u8; 48]>::$method(decoder)?; + public_key_bytes.copy_from_slice(&bytes); + let threshold_public_key = BlsPublicKey::try_from(public_key_bytes.as_slice()) + .map_err(|e| { + bincode::error::DecodeError::OtherString(format!( + "Failed to decode BlsPublicKey: {}", + e + )) + })?; + + Ok(ValidatorSetV0 { + quorum_hash: QuorumHash::from_byte_array(quorum_hash), + quorum_index, + core_height, + members, + threshold_public_key, + }) + } + } + }; } +#[cfg(feature = "core-types-serialization")] +impl_validator_set_v0_decode!(Decode, Decoder, decode, false); +#[cfg(feature = "core-types-serialization")] +impl_validator_set_v0_decode!(DecodeUntrusted, UntrustedDecoder, decode_untrusted, true); +#[cfg(feature = "core-types-serialization")] +bincode::impl_borrow_decode_untrusted!(ValidatorSetV0); #[cfg(feature = "core-types-serialization")] impl<'de, C> BorrowDecode<'de, C> for ValidatorSetV0 { diff --git a/packages/rs-dpp/src/data_contract/associated_token/token_configuration/mod.rs b/packages/rs-dpp/src/data_contract/associated_token/token_configuration/mod.rs index 3e96fee2b43..8c0f076f7d1 100644 --- a/packages/rs-dpp/src/data_contract/associated_token/token_configuration/mod.rs +++ b/packages/rs-dpp/src/data_contract/associated_token/token_configuration/mod.rs @@ -3,7 +3,7 @@ use crate::data_contract::associated_token::token_configuration::v0::TokenConfig use crate::serialization::JsonConvertible; #[cfg(feature = "value-conversion")] use crate::serialization::ValueConvertible; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use serde::{Deserialize, Serialize}; use std::borrow::Cow; @@ -15,7 +15,9 @@ pub mod v0; #[cfg_attr(feature = "json-conversion", derive(JsonConvertible))] #[cfg_attr(feature = "value-conversion", derive(ValueConvertible))] -#[derive(Serialize, Deserialize, Encode, Decode, Debug, Clone, PartialEq, Eq, From)] +#[derive( + Serialize, Deserialize, Encode, Decode, Debug, Clone, PartialEq, Eq, From, DecodeUntrusted, +)] #[serde(tag = "$formatVersion")] pub enum TokenConfiguration { #[serde(rename = "0")] diff --git a/packages/rs-dpp/src/data_contract/associated_token/token_configuration/v0/mod.rs b/packages/rs-dpp/src/data_contract/associated_token/token_configuration/v0/mod.rs index 8aa6b50f751..5a7e57c97d2 100644 --- a/packages/rs-dpp/src/data_contract/associated_token/token_configuration/v0/mod.rs +++ b/packages/rs-dpp/src/data_contract/associated_token/token_configuration/v0/mod.rs @@ -19,7 +19,7 @@ use crate::data_contract::change_control_rules::ChangeControlRules; use crate::data_contract::GroupContractPosition; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use serde::{Deserialize, Serialize}; use std::fmt; @@ -33,7 +33,7 @@ use std::fmt; /// This configuration is designed to be deterministic and versioned for compatibility /// across protocol upgrades and validation environments. #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq)] +#[derive(Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq, DecodeUntrusted)] #[serde(rename_all = "camelCase")] pub struct TokenConfigurationV0 { /// Metadata conventions, including decimals and localizations. @@ -248,7 +248,19 @@ impl fmt::Display for TokenConfigurationV0 { /// /// These presets are intended to be used in conjunction with `TokenConfigurationPreset` /// to simplify token setup and enforce governance constraints consistently. -#[derive(Serialize, Deserialize, Decode, Encode, Debug, Clone, Copy, PartialEq, Eq, PartialOrd)] +#[derive( + Serialize, + Deserialize, + Decode, + Encode, + Debug, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + DecodeUntrusted, +)] pub enum TokenConfigurationPresetFeatures { /// No actions are permitted after initialization. All governance and control /// settings are immutable. @@ -292,7 +304,9 @@ pub enum TokenConfigurationPresetFeatures { /// /// This abstraction allows users to choose between common control configurations /// ranging from immutable tokens to fully administrator-controlled assets. -#[derive(Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq, PartialOrd)] +#[derive( + Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq, PartialOrd, DecodeUntrusted, +)] #[serde(rename_all = "camelCase")] pub struct TokenConfigurationPreset { /// Defines the set of capabilities enabled in this preset (e.g., whether minting, diff --git a/packages/rs-dpp/src/data_contract/associated_token/token_configuration_convention/mod.rs b/packages/rs-dpp/src/data_contract/associated_token/token_configuration_convention/mod.rs index 6c247bd5721..f4d045d3b8d 100644 --- a/packages/rs-dpp/src/data_contract/associated_token/token_configuration_convention/mod.rs +++ b/packages/rs-dpp/src/data_contract/associated_token/token_configuration_convention/mod.rs @@ -3,7 +3,7 @@ use crate::data_contract::associated_token::token_configuration_convention::v0:: use crate::serialization::JsonConvertible; #[cfg(feature = "value-conversion")] use crate::serialization::ValueConvertible; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use serde::{Deserialize, Serialize}; use std::fmt; @@ -21,7 +21,19 @@ pub mod v0; /// This enum enables evolution of the convention schema over time without breaking /// compatibility with older tokens. Each variant defines a specific format version. #[cfg_attr(feature = "json-conversion", derive(JsonConvertible))] -#[derive(Serialize, Deserialize, Encode, Decode, Debug, Clone, PartialEq, Eq, PartialOrd, From)] +#[derive( + Serialize, + Deserialize, + Encode, + Decode, + Debug, + Clone, + PartialEq, + Eq, + PartialOrd, + From, + DecodeUntrusted, +)] #[cfg_attr(feature = "value-conversion", derive(ValueConvertible))] #[serde(tag = "$formatVersion")] pub enum TokenConfigurationConvention { diff --git a/packages/rs-dpp/src/data_contract/associated_token/token_configuration_convention/v0/mod.rs b/packages/rs-dpp/src/data_contract/associated_token/token_configuration_convention/v0/mod.rs index 5c59dc52ba1..a510a0f54cf 100644 --- a/packages/rs-dpp/src/data_contract/associated_token/token_configuration_convention/v0/mod.rs +++ b/packages/rs-dpp/src/data_contract/associated_token/token_configuration_convention/v0/mod.rs @@ -5,7 +5,7 @@ use crate::data_contract::associated_token::token_configuration_localization::ac use crate::data_contract::associated_token::token_configuration_localization::TokenConfigurationLocalization; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; -use bincode::Encode; +use bincode::{DecodeUntrusted, Encode}; use platform_serialization::de::Decode; use serde::{Deserialize, Serialize}; use std::collections::BTreeMap; @@ -20,7 +20,17 @@ pub const ENGLISH_ISO_639: &str = "en"; /// and does not affect consensus-critical logic or supply calculations. #[cfg_attr(feature = "json-conversion", json_safe_fields)] #[derive( - Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq, PartialOrd, Default, + Serialize, + Deserialize, + Decode, + Encode, + Debug, + Clone, + PartialEq, + Eq, + PartialOrd, + Default, + DecodeUntrusted, )] #[serde(rename_all = "camelCase")] pub struct TokenConfigurationConventionV0 { diff --git a/packages/rs-dpp/src/data_contract/associated_token/token_configuration_item.rs b/packages/rs-dpp/src/data_contract/associated_token/token_configuration_item.rs index 8729a4567e8..32318b33ed7 100644 --- a/packages/rs-dpp/src/data_contract/associated_token/token_configuration_item.rs +++ b/packages/rs-dpp/src/data_contract/associated_token/token_configuration_item.rs @@ -5,7 +5,7 @@ use crate::data_contract::associated_token::token_perpetual_distribution::TokenP use crate::data_contract::change_control_rules::authorized_action_takers::AuthorizedActionTakers; use crate::data_contract::GroupContractPosition; use crate::ProtocolError; -use bincode::Encode; +use bincode::{DecodeUntrusted, Encode}; use platform_serialization::de::Decode; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; @@ -24,6 +24,7 @@ use std::fmt; PlatformDeserialize, PartialEq, Eq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/data_contract/associated_token/token_configuration_localization/mod.rs b/packages/rs-dpp/src/data_contract/associated_token/token_configuration_localization/mod.rs index 0ec8f738abf..567c2cc2163 100644 --- a/packages/rs-dpp/src/data_contract/associated_token/token_configuration_localization/mod.rs +++ b/packages/rs-dpp/src/data_contract/associated_token/token_configuration_localization/mod.rs @@ -3,7 +3,7 @@ use crate::data_contract::associated_token::token_configuration_localization::v0 use crate::serialization::JsonConvertible; #[cfg(feature = "value-conversion")] use crate::serialization::ValueConvertible; -use bincode::Encode; +use bincode::{DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization::de::Decode; use serde::{Deserialize, Serialize}; @@ -21,7 +21,19 @@ pub mod v0; /// This structure is used to map language codes to localized token names in a flexible, /// forward-compatible manner. #[cfg_attr(feature = "json-conversion", derive(JsonConvertible))] -#[derive(Serialize, Deserialize, Encode, Decode, Debug, Clone, PartialEq, Eq, PartialOrd, From)] +#[derive( + Serialize, + Deserialize, + Encode, + Decode, + Debug, + Clone, + PartialEq, + Eq, + PartialOrd, + From, + DecodeUntrusted, +)] #[cfg_attr(feature = "value-conversion", derive(ValueConvertible))] #[serde(tag = "$formatVersion")] pub enum TokenConfigurationLocalization { diff --git a/packages/rs-dpp/src/data_contract/associated_token/token_configuration_localization/v0/mod.rs b/packages/rs-dpp/src/data_contract/associated_token/token_configuration_localization/v0/mod.rs index 6affcc7d488..86f9f36325f 100644 --- a/packages/rs-dpp/src/data_contract/associated_token/token_configuration_localization/v0/mod.rs +++ b/packages/rs-dpp/src/data_contract/associated_token/token_configuration_localization/v0/mod.rs @@ -2,7 +2,7 @@ mod accessors; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use serde::{Deserialize, Serialize}; use std::fmt; @@ -12,7 +12,9 @@ use std::fmt; /// across different locales. This information is not used for validation or consensus /// but enhances UX by allowing consistent display in multilingual interfaces. #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq, PartialOrd)] +#[derive( + Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq, PartialOrd, DecodeUntrusted, +)] #[serde(rename_all = "camelCase")] pub struct TokenConfigurationLocalizationV0 { /// Indicates whether the token name should be capitalized when displayed. diff --git a/packages/rs-dpp/src/data_contract/associated_token/token_distribution_key.rs b/packages/rs-dpp/src/data_contract/associated_token/token_distribution_key.rs index 9261cc24dac..775a4a9bdc0 100644 --- a/packages/rs-dpp/src/data_contract/associated_token/token_distribution_key.rs +++ b/packages/rs-dpp/src/data_contract/associated_token/token_distribution_key.rs @@ -1,6 +1,6 @@ use crate::data_contract::associated_token::token_perpetual_distribution::distribution_recipient::{TokenDistributionRecipient, TokenDistributionResolvedRecipient}; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, Encode, DecodeUntrusted}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use serde::{Deserialize, Serialize}; @@ -13,7 +13,18 @@ use crate::prelude::TimestampMillis; /// - `PreProgrammed`: A scheduled distribution with predefined rules. /// - `Perpetual`: A continuous or recurring distribution. #[derive( - Serialize, Deserialize, Decode, Encode, Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Default, + Serialize, + Deserialize, + Decode, + Encode, + Debug, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Default, + DecodeUntrusted, )] pub enum TokenDistributionType { /// A pre-programmed distribution scheduled for a specific time. @@ -28,7 +39,9 @@ pub enum TokenDistributionType { /// /// - `PreProgrammed(Identifier)`: A predefined recipient for a scheduled distribution. /// - `Perpetual(TokenDistributionResolvedRecipient)`: A resolved recipient for an ongoing distribution. -#[derive(Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq, PartialOrd)] +#[derive( + Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq, PartialOrd, DecodeUntrusted, +)] #[serde( into = "TokenDistributionTypeWithResolvedRecipientRepr", from = "TokenDistributionTypeWithResolvedRecipientRepr" @@ -89,7 +102,9 @@ impl From /// - `PreProgrammed(TimestampMillis, Identifier)`: A scheduled distribution with a timestamp and recipient. /// - `Perpetual(RewardDistributionMoment, RewardDistributionMoment, TokenDistributionResolvedRecipient)`: /// A perpetual distribution with previous and next distribution moments, along with the resolved recipient. -#[derive(Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq, PartialOrd)] +#[derive( + Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq, PartialOrd, DecodeUntrusted, +)] #[serde(into = "TokenDistributionInfoRepr", from = "TokenDistributionInfoRepr")] pub enum TokenDistributionInfo { /// A pre-programmed token distribution set for a specific time. @@ -197,6 +212,7 @@ impl fmt::Display for TokenDistributionType { Clone, PartialEq, Eq, + DecodeUntrusted, )] #[platform_serialize(unversioned)] pub struct TokenDistributionKey { diff --git a/packages/rs-dpp/src/data_contract/associated_token/token_distribution_rules/mod.rs b/packages/rs-dpp/src/data_contract/associated_token/token_distribution_rules/mod.rs index 5390a106116..2d57f3870ff 100644 --- a/packages/rs-dpp/src/data_contract/associated_token/token_distribution_rules/mod.rs +++ b/packages/rs-dpp/src/data_contract/associated_token/token_distribution_rules/mod.rs @@ -2,7 +2,7 @@ use crate::serialization::JsonConvertible; #[cfg(feature = "value-conversion")] use crate::serialization::ValueConvertible; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use serde::{Deserialize, Serialize}; @@ -11,7 +11,9 @@ pub mod v0; #[cfg_attr(feature = "json-conversion", derive(JsonConvertible))] #[cfg_attr(feature = "value-conversion", derive(ValueConvertible))] -#[derive(Serialize, Deserialize, Encode, Decode, Debug, Clone, PartialEq, Eq, From)] +#[derive( + Serialize, Deserialize, Encode, Decode, Debug, Clone, PartialEq, Eq, From, DecodeUntrusted, +)] #[serde(tag = "$formatVersion")] pub enum TokenDistributionRules { #[serde(rename = "0")] diff --git a/packages/rs-dpp/src/data_contract/associated_token/token_distribution_rules/v0/mod.rs b/packages/rs-dpp/src/data_contract/associated_token/token_distribution_rules/v0/mod.rs index 75f131f3279..ef7ef45b7fe 100644 --- a/packages/rs-dpp/src/data_contract/associated_token/token_distribution_rules/v0/mod.rs +++ b/packages/rs-dpp/src/data_contract/associated_token/token_distribution_rules/v0/mod.rs @@ -7,14 +7,14 @@ use crate::data_contract::change_control_rules::v0::ChangeControlRulesV0; use crate::data_contract::change_control_rules::ChangeControlRules; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; -use bincode::Encode; +use bincode::{DecodeUntrusted, Encode}; use platform_serialization::de::Decode; use platform_value::Identifier; use serde::{Deserialize, Serialize}; use std::fmt; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq)] +#[derive(Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq, DecodeUntrusted)] #[serde(rename_all = "camelCase")] pub struct TokenDistributionRulesV0 { #[serde(default)] diff --git a/packages/rs-dpp/src/data_contract/associated_token/token_keeps_history_rules/mod.rs b/packages/rs-dpp/src/data_contract/associated_token/token_keeps_history_rules/mod.rs index 8fd9bb0e2c2..1e5798e79f9 100644 --- a/packages/rs-dpp/src/data_contract/associated_token/token_keeps_history_rules/mod.rs +++ b/packages/rs-dpp/src/data_contract/associated_token/token_keeps_history_rules/mod.rs @@ -2,7 +2,7 @@ use crate::serialization::JsonConvertible; #[cfg(feature = "value-conversion")] use crate::serialization::ValueConvertible; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use serde::{Deserialize, Serialize}; @@ -11,7 +11,9 @@ pub mod v0; #[cfg_attr(feature = "json-conversion", derive(JsonConvertible))] #[cfg_attr(feature = "value-conversion", derive(ValueConvertible))] -#[derive(Serialize, Deserialize, Encode, Decode, Debug, Clone, Copy, PartialEq, Eq, From)] +#[derive( + Serialize, Deserialize, Encode, Decode, Debug, Clone, Copy, PartialEq, Eq, From, DecodeUntrusted, +)] #[serde(tag = "$formatVersion")] pub enum TokenKeepsHistoryRules { #[serde(rename = "0")] diff --git a/packages/rs-dpp/src/data_contract/associated_token/token_keeps_history_rules/v0/mod.rs b/packages/rs-dpp/src/data_contract/associated_token/token_keeps_history_rules/v0/mod.rs index 0a47c00e4da..7baf59b5e3d 100644 --- a/packages/rs-dpp/src/data_contract/associated_token/token_keeps_history_rules/v0/mod.rs +++ b/packages/rs-dpp/src/data_contract/associated_token/token_keeps_history_rules/v0/mod.rs @@ -1,7 +1,7 @@ mod accessors; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; -use bincode::Encode; +use bincode::{DecodeUntrusted, Encode}; use platform_serialization::de::Decode; use serde::{Deserialize, Serialize}; use std::fmt; @@ -10,7 +10,9 @@ use std::fmt; /// Config update, Destroying Frozen Funds, Emergency Action, /// Pre Programmed Token Release always require an entry to the ledger #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Serialize, Deserialize, Decode, Encode, Debug, Clone, Copy, PartialEq, Eq)] +#[derive( + Serialize, Deserialize, Decode, Encode, Debug, Clone, Copy, PartialEq, Eq, DecodeUntrusted, +)] #[serde(rename_all = "camelCase")] pub struct TokenKeepsHistoryRulesV0 { /// Whether transfer history is recorded. diff --git a/packages/rs-dpp/src/data_contract/associated_token/token_marketplace_rules/mod.rs b/packages/rs-dpp/src/data_contract/associated_token/token_marketplace_rules/mod.rs index f9f99d8b8eb..f14587c6fb1 100644 --- a/packages/rs-dpp/src/data_contract/associated_token/token_marketplace_rules/mod.rs +++ b/packages/rs-dpp/src/data_contract/associated_token/token_marketplace_rules/mod.rs @@ -2,7 +2,7 @@ use crate::serialization::JsonConvertible; #[cfg(feature = "value-conversion")] use crate::serialization::ValueConvertible; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use serde::{Deserialize, Serialize}; @@ -11,7 +11,9 @@ pub mod v0; #[cfg_attr(feature = "json-conversion", derive(JsonConvertible))] #[cfg_attr(feature = "value-conversion", derive(ValueConvertible))] -#[derive(Serialize, Deserialize, Encode, Decode, Debug, Clone, PartialEq, Eq, From)] +#[derive( + Serialize, Deserialize, Encode, Decode, Debug, Clone, PartialEq, Eq, From, DecodeUntrusted, +)] #[serde(tag = "$formatVersion")] pub enum TokenMarketplaceRules { #[serde(rename = "0")] diff --git a/packages/rs-dpp/src/data_contract/associated_token/token_marketplace_rules/v0/mod.rs b/packages/rs-dpp/src/data_contract/associated_token/token_marketplace_rules/v0/mod.rs index a1716ad19bd..e4ff1d971af 100644 --- a/packages/rs-dpp/src/data_contract/associated_token/token_marketplace_rules/v0/mod.rs +++ b/packages/rs-dpp/src/data_contract/associated_token/token_marketplace_rules/v0/mod.rs @@ -5,13 +5,23 @@ use crate::data_contract::change_control_rules::v0::ChangeControlRulesV0; use crate::data_contract::change_control_rules::ChangeControlRules; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; -use bincode::Encode; +use bincode::{DecodeUntrusted, Encode}; use platform_serialization::de::Decode; use serde::{Deserialize, Serialize}; use std::fmt; #[derive( - Serialize, Deserialize, Decode, Encode, Default, Debug, Clone, PartialEq, Eq, PartialOrd, + Serialize, + Deserialize, + Decode, + Encode, + Default, + Debug, + Clone, + PartialEq, + Eq, + PartialOrd, + DecodeUntrusted, )] pub enum TokenTradeMode { #[default] @@ -28,7 +38,7 @@ impl crate::serialization::JsonConvertible for TokenTradeMode {} impl crate::serialization::ValueConvertible for TokenTradeMode {} #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq)] +#[derive(Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq, DecodeUntrusted)] #[serde(rename_all = "camelCase")] pub struct TokenMarketplaceRulesV0 { pub trade_mode: TokenTradeMode, diff --git a/packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/distribution_function/encode.rs b/packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/distribution_function/encode.rs index 002cd993366..e082117d3ac 100644 --- a/packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/distribution_function/encode.rs +++ b/packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/distribution_function/encode.rs @@ -1,6 +1,6 @@ use crate::balances::credits::TokenAmount; use crate::data_contract::associated_token::token_perpetual_distribution::distribution_function::DistributionFunction; -use bincode::{BorrowDecode, Decode, Encode}; +use bincode::{BorrowDecode, Encode}; use std::collections::BTreeMap; impl Encode for DistributionFunction { @@ -151,155 +151,163 @@ impl Encode for DistributionFunction { } } -impl Decode for DistributionFunction { - fn decode>( - decoder: &mut D, - ) -> Result { - let variant = u8::decode(decoder)?; - match variant { - 0 => { - let n = TokenAmount::decode(decoder)?; - Ok(Self::FixedAmount { amount: n }) - } - 1 => { - let min = TokenAmount::decode(decoder)?; - let max = TokenAmount::decode(decoder)?; - Ok(Self::Random { min, max }) - } - 2 => { - let step_count = u32::decode(decoder)?; - let decrease_per_interval_numerator = u16::decode(decoder)?; - let decrease_per_interval_denominator = u16::decode(decoder)?; - let s = Option::::decode(decoder)?; - let max_interval_count = Option::::decode(decoder)?; - let n = TokenAmount::decode(decoder)?; - let trailing_distribution_interval_amount = TokenAmount::decode(decoder)?; - let min_value = Option::::decode(decoder)?; - Ok(Self::StepDecreasingAmount { - start_decreasing_offset: s, - decrease_per_interval_numerator, - decrease_per_interval_denominator, - step_count, - distribution_start_amount: n, - max_interval_count, - min_value, - trailing_distribution_interval_amount, - }) - } - 3 => { - let steps = BTreeMap::::decode(decoder)?; - Ok(Self::Stepwise(steps)) +// Share the wire schema and domain checks across both decoding APIs. +macro_rules! impl_distribution_function_decode { + ($decode:ident, $decoder:ident, $method:ident, $untrusted:expr) => { + impl bincode::$decode for DistributionFunction { + fn $method>( + decoder: &mut D, + ) -> Result { + let variant = u8::$method(decoder)?; + match variant { + 0 => { + let n = TokenAmount::$method(decoder)?; + Ok(Self::FixedAmount { amount: n }) + } + 1 => { + let min = TokenAmount::$method(decoder)?; + let max = TokenAmount::$method(decoder)?; + Ok(Self::Random { min, max }) + } + 2 => { + let step_count = u32::$method(decoder)?; + let decrease_per_interval_numerator = u16::$method(decoder)?; + let decrease_per_interval_denominator = u16::$method(decoder)?; + let s = Option::::$method(decoder)?; + let max_interval_count = Option::::$method(decoder)?; + let n = TokenAmount::$method(decoder)?; + let trailing_distribution_interval_amount = TokenAmount::$method(decoder)?; + let min_value = Option::::$method(decoder)?; + Ok(Self::StepDecreasingAmount { + start_decreasing_offset: s, + decrease_per_interval_numerator, + decrease_per_interval_denominator, + step_count, + distribution_start_amount: n, + max_interval_count, + min_value, + trailing_distribution_interval_amount, + }) + } + 3 => { + let steps = BTreeMap::::$method(decoder)?; + Ok(Self::Stepwise(steps)) + } + 4 => { + let a = i64::$method(decoder)?; + let d = u64::$method(decoder)?; + let s = Option::::$method(decoder)?; + let b = TokenAmount::$method(decoder)?; + let min_value = Option::::$method(decoder)?; + let max_value = Option::::$method(decoder)?; + Ok(Self::Linear { + a, + d, + start_step: s, + starting_amount: b, + min_value, + max_value, + }) + } + 5 => { + let a = i64::$method(decoder)?; + let d = u64::$method(decoder)?; + let m = i64::$method(decoder)?; + let n = u64::$method(decoder)?; + let o = i64::$method(decoder)?; + let s = Option::::$method(decoder)?; + let b = TokenAmount::$method(decoder)?; + let min_value = Option::::$method(decoder)?; + let max_value = Option::::$method(decoder)?; + Ok(Self::Polynomial { + a, + d, + m, + n, + o, + start_moment: s, + b, + min_value, + max_value, + }) + } + 6 => { + let a = u64::$method(decoder)?; + let d = u64::$method(decoder)?; + let m = i64::$method(decoder)?; + let n = u64::$method(decoder)?; + let o = i64::$method(decoder)?; + let start_moment = Option::::$method(decoder)?; + let b = TokenAmount::$method(decoder)?; + let min_value = Option::::$method(decoder)?; + let max_value = Option::::$method(decoder)?; + Ok(Self::Exponential { + a, + d, + m, + n, + o, + start_moment, + b, + min_value, + max_value, + }) + } + 7 => { + let a = i64::$method(decoder)?; + let d = u64::$method(decoder)?; + let m = u64::$method(decoder)?; + let n = u64::$method(decoder)?; + let o = i64::$method(decoder)?; + let s = Option::::$method(decoder)?; + let b = TokenAmount::$method(decoder)?; + let min_value = Option::::$method(decoder)?; + let max_value = Option::::$method(decoder)?; + Ok(Self::Logarithmic { + a, + d, + m, + n, + o, + start_moment: s, + b, + min_value, + max_value, + }) + } + 8 => { + let a = i64::$method(decoder)?; + let d = u64::$method(decoder)?; + let m = u64::$method(decoder)?; + let n = u64::$method(decoder)?; + let o = i64::$method(decoder)?; + let s = Option::::$method(decoder)?; + let b = TokenAmount::$method(decoder)?; + let min_value = Option::::$method(decoder)?; + let max_value = Option::::$method(decoder)?; + Ok(Self::InvertedLogarithmic { + a, + d, + m, + n, + o, + start_moment: s, + b, + min_value, + max_value, + }) + } + _ => Err(bincode::error::DecodeError::OtherString( + "Invalid variant".into(), + )), + } } - 4 => { - let a = i64::decode(decoder)?; - let d = u64::decode(decoder)?; - let s = Option::::decode(decoder)?; - let b = TokenAmount::decode(decoder)?; - let min_value = Option::::decode(decoder)?; - let max_value = Option::::decode(decoder)?; - Ok(Self::Linear { - a, - d, - start_step: s, - starting_amount: b, - min_value, - max_value, - }) - } - 5 => { - let a = i64::decode(decoder)?; - let d = u64::decode(decoder)?; - let m = i64::decode(decoder)?; - let n = u64::decode(decoder)?; - let o = i64::decode(decoder)?; - let s = Option::::decode(decoder)?; - let b = TokenAmount::decode(decoder)?; - let min_value = Option::::decode(decoder)?; - let max_value = Option::::decode(decoder)?; - Ok(Self::Polynomial { - a, - d, - m, - n, - o, - start_moment: s, - b, - min_value, - max_value, - }) - } - 6 => { - let a = u64::decode(decoder)?; - let d = u64::decode(decoder)?; - let m = i64::decode(decoder)?; - let n = u64::decode(decoder)?; - let o = i64::decode(decoder)?; - let start_moment = Option::::decode(decoder)?; - let b = TokenAmount::decode(decoder)?; - let min_value = Option::::decode(decoder)?; - let max_value = Option::::decode(decoder)?; - Ok(Self::Exponential { - a, - d, - m, - n, - o, - start_moment, - b, - min_value, - max_value, - }) - } - 7 => { - let a = i64::decode(decoder)?; - let d = u64::decode(decoder)?; - let m = u64::decode(decoder)?; - let n = u64::decode(decoder)?; - let o = i64::decode(decoder)?; - let s = Option::::decode(decoder)?; - let b = TokenAmount::decode(decoder)?; - let min_value = Option::::decode(decoder)?; - let max_value = Option::::decode(decoder)?; - Ok(Self::Logarithmic { - a, - d, - m, - n, - o, - start_moment: s, - b, - min_value, - max_value, - }) - } - 8 => { - let a = i64::decode(decoder)?; - let d = u64::decode(decoder)?; - let m = u64::decode(decoder)?; - let n = u64::decode(decoder)?; - let o = i64::decode(decoder)?; - let s = Option::::decode(decoder)?; - let b = TokenAmount::decode(decoder)?; - let min_value = Option::::decode(decoder)?; - let max_value = Option::::decode(decoder)?; - Ok(Self::InvertedLogarithmic { - a, - d, - m, - n, - o, - start_moment: s, - b, - min_value, - max_value, - }) - } - _ => Err(bincode::error::DecodeError::OtherString( - "Invalid variant".into(), - )), } - } + }; } +impl_distribution_function_decode!(Decode, Decoder, decode, false); +impl_distribution_function_decode!(DecodeUntrusted, UntrustedDecoder, decode_untrusted, true); +bincode::impl_borrow_decode_untrusted!(DistributionFunction); impl<'de, C> BorrowDecode<'de, C> for DistributionFunction { fn borrow_decode>( diff --git a/packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/distribution_recipient.rs b/packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/distribution_recipient.rs index 9cb14dd2c3a..fbac19ec480 100644 --- a/packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/distribution_recipient.rs +++ b/packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/distribution_recipient.rs @@ -2,14 +2,24 @@ use crate::data_contract::associated_token::token_distribution_key::{ TokenDistributionType, TokenDistributionTypeWithResolvedRecipient, }; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::PlatformSerialize; use platform_value::Identifier; use serde::{Deserialize, Serialize}; use std::fmt; #[derive( - Decode, Encode, PlatformSerialize, Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Default, + Decode, + Encode, + PlatformSerialize, + Debug, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Default, + DecodeUntrusted, )] #[platform_serialize(unversioned)] // Custom `Serialize` / `Deserialize` below — `derive(Serialize, Deserialize)` @@ -189,7 +199,9 @@ pub type TokenDistributionWeight = u64; // pub total_blocks: u64, // } -#[derive(Decode, Encode, PlatformSerialize, Debug, Clone, PartialEq, Eq, PartialOrd)] +#[derive( + Decode, Encode, PlatformSerialize, Debug, Clone, PartialEq, Eq, PartialOrd, DecodeUntrusted, +)] #[platform_serialize(unversioned)] // Custom `Serialize` / `Deserialize` below — every variant wraps `Identifier` // (a base58 string in JSON, not a map), so serde's internal tagging can't diff --git a/packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/mod.rs b/packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/mod.rs index 8ed10179900..7c9d351f5e7 100644 --- a/packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/mod.rs +++ b/packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/mod.rs @@ -4,7 +4,7 @@ use crate::errors::ProtocolError; use crate::serialization::JsonConvertible; #[cfg(feature = "value-conversion")] use crate::serialization::ValueConvertible; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use serde::{Deserialize, Serialize}; @@ -32,6 +32,7 @@ pub mod v0; Eq, PartialOrd, From, + DecodeUntrusted, )] #[serde(tag = "$formatVersion")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/reward_distribution_moment/mod.rs b/packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/reward_distribution_moment/mod.rs index bbdc9bf342a..4cbc45bf44a 100644 --- a/packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/reward_distribution_moment/mod.rs +++ b/packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/reward_distribution_moment/mod.rs @@ -1,6 +1,6 @@ use crate::block::epoch::EpochIndex; use crate::prelude::{BlockHeight, TimestampMillis}; -use bincode::{Decode, Encode}; +use bincode::{Decode, Encode, DecodeUntrusted}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use serde::{Deserialize, Serialize}; use std::fmt; @@ -22,6 +22,7 @@ use crate::ProtocolError; PartialEq, Eq, PartialOrd, + DecodeUntrusted, )] #[platform_serialize(unversioned)] // serde routes through `RewardDistributionMomentRepr` to get internal `type` diff --git a/packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/reward_distribution_type/mod.rs b/packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/reward_distribution_type/mod.rs index 0949f96d16a..19e0bb5c793 100644 --- a/packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/reward_distribution_type/mod.rs +++ b/packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/reward_distribution_type/mod.rs @@ -4,7 +4,7 @@ mod validation; use crate::data_contract::associated_token::token_perpetual_distribution::distribution_function::{DistributionFunction, MAX_DISTRIBUTION_CYCLES_PARAM}; use crate::prelude::{BlockHeightInterval, DataContract, EpochInterval, TimestampMillisInterval}; -use bincode::{Decode, Encode}; +use bincode::{Decode, Encode, DecodeUntrusted}; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; use serde::{Deserialize, Serialize}; @@ -14,7 +14,9 @@ use crate::data_contract::associated_token::token_perpetual_distribution::reward use crate::ProtocolError; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq, PartialOrd)] +#[derive( + Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq, PartialOrd, DecodeUntrusted, +)] #[serde(tag = "$type", rename_all = "camelCase")] pub enum RewardDistributionType { /// An amount of tokens is emitted every n blocks. diff --git a/packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/v0/mod.rs b/packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/v0/mod.rs index 861b59344bc..35974b5fdd8 100644 --- a/packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/v0/mod.rs +++ b/packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/v0/mod.rs @@ -1,6 +1,6 @@ mod methods; -use bincode::{Encode, Decode}; +use bincode::{Encode, Decode, DecodeUntrusted}; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; use serde::{Deserialize, Serialize}; @@ -9,7 +9,9 @@ use crate::data_contract::associated_token::token_perpetual_distribution::distri use crate::data_contract::associated_token::token_perpetual_distribution::reward_distribution_type::RewardDistributionType; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq, PartialOrd)] +#[derive( + Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq, PartialOrd, DecodeUntrusted, +)] #[serde(rename_all = "camelCase")] pub struct TokenPerpetualDistributionV0 { /// The distribution type that the token will use diff --git a/packages/rs-dpp/src/data_contract/associated_token/token_pre_programmed_distribution/mod.rs b/packages/rs-dpp/src/data_contract/associated_token/token_pre_programmed_distribution/mod.rs index 508c3fb3ad7..4d620d7b98a 100644 --- a/packages/rs-dpp/src/data_contract/associated_token/token_pre_programmed_distribution/mod.rs +++ b/packages/rs-dpp/src/data_contract/associated_token/token_pre_programmed_distribution/mod.rs @@ -3,7 +3,7 @@ use crate::data_contract::associated_token::token_pre_programmed_distribution::v use crate::serialization::JsonConvertible; #[cfg(feature = "value-conversion")] use crate::serialization::ValueConvertible; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use serde::{Deserialize, Serialize}; use std::fmt; @@ -14,7 +14,9 @@ pub mod v0; #[cfg_attr(feature = "json-conversion", derive(JsonConvertible))] #[cfg_attr(feature = "value-conversion", derive(ValueConvertible))] -#[derive(Serialize, Deserialize, Encode, Decode, Debug, Clone, PartialEq, Eq, From)] +#[derive( + Serialize, Deserialize, Encode, Decode, Debug, Clone, PartialEq, Eq, From, DecodeUntrusted, +)] #[serde(tag = "$formatVersion")] pub enum TokenPreProgrammedDistribution { #[serde(rename = "0")] diff --git a/packages/rs-dpp/src/data_contract/associated_token/token_pre_programmed_distribution/v0/mod.rs b/packages/rs-dpp/src/data_contract/associated_token/token_pre_programmed_distribution/v0/mod.rs index 863e7b85c27..d81c35037ac 100644 --- a/packages/rs-dpp/src/data_contract/associated_token/token_pre_programmed_distribution/v0/mod.rs +++ b/packages/rs-dpp/src/data_contract/associated_token/token_pre_programmed_distribution/v0/mod.rs @@ -2,7 +2,7 @@ use crate::balances::credits::TokenAmount; use crate::prelude::TimestampMillis; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; -use bincode::Encode; +use bincode::{DecodeUntrusted, Encode}; use platform_serialization::de::Decode; use platform_value::Identifier; use serde::{Deserialize, Serialize}; @@ -10,7 +10,7 @@ use std::collections::BTreeMap; use std::fmt; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq)] +#[derive(Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq, DecodeUntrusted)] #[serde(rename_all = "camelCase")] pub struct TokenPreProgrammedDistributionV0 { #[cfg_attr( diff --git a/packages/rs-dpp/src/data_contract/change_control_rules/authorized_action_takers.rs b/packages/rs-dpp/src/data_contract/change_control_rules/authorized_action_takers.rs index 068f0180ff7..3f8f363a6f1 100644 --- a/packages/rs-dpp/src/data_contract/change_control_rules/authorized_action_takers.rs +++ b/packages/rs-dpp/src/data_contract/change_control_rules/authorized_action_takers.rs @@ -7,13 +7,15 @@ use crate::serialization::JsonConvertible; #[cfg(feature = "value-conversion")] use crate::serialization::ValueConvertible; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_value::Identifier; use serde::{Deserialize, Serialize}; use std::collections::BTreeMap; use std::fmt; -#[derive(Decode, Encode, Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Default)] +#[derive( + Decode, Encode, Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Default, DecodeUntrusted, +)] // Custom `Serialize` / `Deserialize` below — `derive(Serialize, Deserialize)` // can't produce the desired flat wire shape because the `Identity` variant // wraps `Identifier` (serializes as a base58 string, not a map) and `Group` diff --git a/packages/rs-dpp/src/data_contract/change_control_rules/mod.rs b/packages/rs-dpp/src/data_contract/change_control_rules/mod.rs index aed6523009c..7e2377a2cbd 100644 --- a/packages/rs-dpp/src/data_contract/change_control_rules/mod.rs +++ b/packages/rs-dpp/src/data_contract/change_control_rules/mod.rs @@ -10,7 +10,7 @@ use crate::group::action_taker::{ActionGoal, ActionTaker}; use crate::serialization::JsonConvertible; #[cfg(feature = "value-conversion")] use crate::serialization::ValueConvertible; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use platform_value::Identifier; use serde::{Deserialize, Serialize}; @@ -19,7 +19,9 @@ use std::fmt; #[cfg_attr(feature = "json-conversion", derive(JsonConvertible))] #[cfg_attr(feature = "value-conversion", derive(ValueConvertible))] -#[derive(Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq, From)] +#[derive( + Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq, From, DecodeUntrusted, +)] #[serde(tag = "$formatVersion")] pub enum ChangeControlRules { #[serde(rename = "0")] diff --git a/packages/rs-dpp/src/data_contract/change_control_rules/v0/mod.rs b/packages/rs-dpp/src/data_contract/change_control_rules/v0/mod.rs index f0aee23a862..6236922d89f 100644 --- a/packages/rs-dpp/src/data_contract/change_control_rules/v0/mod.rs +++ b/packages/rs-dpp/src/data_contract/change_control_rules/v0/mod.rs @@ -4,14 +4,16 @@ use crate::data_contract::GroupContractPosition; use crate::group::action_taker::{ActionGoal, ActionTaker}; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_value::Identifier; use serde::{Deserialize, Serialize}; use std::collections::BTreeMap; use std::fmt; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq, Default)] +#[derive( + Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq, Default, DecodeUntrusted, +)] #[serde(rename_all = "camelCase")] pub struct ChangeControlRulesV0 { /// This is who is authorized to make such a change diff --git a/packages/rs-dpp/src/data_contract/config/mod.rs b/packages/rs-dpp/src/data_contract/config/mod.rs index 194446c4023..e8990d450a1 100644 --- a/packages/rs-dpp/src/data_contract/config/mod.rs +++ b/packages/rs-dpp/src/data_contract/config/mod.rs @@ -13,7 +13,7 @@ use crate::serialization::JsonConvertible; use crate::serialization::ValueConvertible; use crate::version::PlatformVersion; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; pub use fields::*; use platform_value::Value; @@ -23,7 +23,9 @@ use v0::{DataContractConfigGettersV0, DataContractConfigSettersV0, DataContractC #[cfg_attr(feature = "json-conversion", derive(JsonConvertible))] #[cfg_attr(feature = "value-conversion", derive(ValueConvertible))] -#[derive(Serialize, Deserialize, Encode, Decode, Debug, Clone, Copy, PartialEq, Eq, From)] +#[derive( + Serialize, Deserialize, Encode, Decode, Debug, Clone, Copy, PartialEq, Eq, From, DecodeUntrusted, +)] #[serde(tag = "$formatVersion")] pub enum DataContractConfig { #[serde(rename = "0")] diff --git a/packages/rs-dpp/src/data_contract/config/v0/mod.rs b/packages/rs-dpp/src/data_contract/config/v0/mod.rs index f40f16912ac..0ff3851986f 100644 --- a/packages/rs-dpp/src/data_contract/config/v0/mod.rs +++ b/packages/rs-dpp/src/data_contract/config/v0/mod.rs @@ -9,14 +9,16 @@ use crate::data_contract::storage_requirements::keys_for_document_type::StorageK #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_value::btreemap_extensions::BTreeValueMapHelper; use platform_value::Value; use serde::{Deserialize, Serialize}; use std::collections::BTreeMap; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Serialize, Deserialize, Decode, Encode, Debug, Clone, Copy, PartialEq, Eq)] +#[derive( + Serialize, Deserialize, Decode, Encode, Debug, Clone, Copy, PartialEq, Eq, DecodeUntrusted, +)] #[serde(rename_all = "camelCase", default)] pub struct DataContractConfigV0 { /// Can the contract ever be deleted. If the contract is deleted, so should be all diff --git a/packages/rs-dpp/src/data_contract/config/v1/mod.rs b/packages/rs-dpp/src/data_contract/config/v1/mod.rs index f69435e6b37..c90995f0e15 100644 --- a/packages/rs-dpp/src/data_contract/config/v1/mod.rs +++ b/packages/rs-dpp/src/data_contract/config/v1/mod.rs @@ -9,14 +9,16 @@ use crate::data_contract::storage_requirements::keys_for_document_type::StorageK #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_value::btreemap_extensions::BTreeValueMapHelper; use platform_value::Value; use serde::{Deserialize, Serialize}; use std::collections::BTreeMap; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Serialize, Deserialize, Decode, Encode, Debug, Clone, Copy, PartialEq, Eq)] +#[derive( + Serialize, Deserialize, Decode, Encode, Debug, Clone, Copy, PartialEq, Eq, DecodeUntrusted, +)] #[serde(rename_all = "camelCase", default)] pub struct DataContractConfigV1 { /// Can the contract ever be deleted. If the contract is deleted, so should be all diff --git a/packages/rs-dpp/src/data_contract/created_data_contract/mod.rs b/packages/rs-dpp/src/data_contract/created_data_contract/mod.rs index 2059eb0fcae..9477b1e1ce5 100644 --- a/packages/rs-dpp/src/data_contract/created_data_contract/mod.rs +++ b/packages/rs-dpp/src/data_contract/created_data_contract/mod.rs @@ -7,7 +7,7 @@ use crate::data_contract::created_data_contract::v0::{ use crate::prelude::{DataContract, IdentityNonce}; use crate::version::PlatformVersion; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use crate::data_contract::serialized_version::DataContractInSerializationFormat; @@ -28,7 +28,7 @@ pub enum CreatedDataContract { V0(CreatedDataContractV0), } -#[derive(Clone, Debug, Encode, Decode, From)] +#[derive(Clone, Debug, Encode, Decode, From, DecodeUntrusted)] pub enum CreatedDataContractInSerializationFormat { V0(CreatedDataContractInSerializationFormatV0), } @@ -90,7 +90,7 @@ impl PlatformDeserializableWithPotentialValidationFromVersionedStructure for Cre .with_big_endian() .with_no_limit(); let created_data_contract_in_serialization_format: CreatedDataContractInSerializationFormat = - bincode::borrow_decode_from_slice(data, config) + bincode::borrow_decode_from_slice_untrusted(data, config) .map_err(|e| { PlatformDeserializationError(format!( "unable to deserialize DataContract: {}", @@ -369,7 +369,7 @@ mod tests { let config = bincode::config::standard() .with_big_endian() .with_no_limit(); - let (decoded, _consumed) = bincode::borrow_decode_from_slice::< + let (decoded, _consumed) = bincode::borrow_decode_from_slice_untrusted::< CreatedDataContractInSerializationFormat, _, >(&bytes, config) diff --git a/packages/rs-dpp/src/data_contract/created_data_contract/v0/mod.rs b/packages/rs-dpp/src/data_contract/created_data_contract/v0/mod.rs index 37495e20841..cf1c0e3760d 100644 --- a/packages/rs-dpp/src/data_contract/created_data_contract/v0/mod.rs +++ b/packages/rs-dpp/src/data_contract/created_data_contract/v0/mod.rs @@ -1,5 +1,5 @@ use crate::data_contract::DataContract; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use crate::data_contract::serialized_version::DataContractInSerializationFormat; use crate::prelude::IdentityNonce; @@ -11,7 +11,7 @@ pub struct CreatedDataContractV0 { pub identity_nonce: IdentityNonce, } -#[derive(Clone, Debug, Encode, Decode)] +#[derive(Clone, Debug, Encode, Decode, DecodeUntrusted)] pub struct CreatedDataContractInSerializationFormatV0 { pub data_contract: DataContractInSerializationFormat, pub identity_nonce: IdentityNonce, diff --git a/packages/rs-dpp/src/data_contract/document_type/property/mod.rs b/packages/rs-dpp/src/data_contract/document_type/property/mod.rs index 3a48552bf84..ddb9422bcfe 100644 --- a/packages/rs-dpp/src/data_contract/document_type/property/mod.rs +++ b/packages/rs-dpp/src/data_contract/document_type/property/mod.rs @@ -4,7 +4,7 @@ use std::convert::TryInto; use std::io::{BufReader, Cursor, Read}; use crate::data_contract::errors::DataContractError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use crate::consensus::basic::decode::DecodingError; @@ -84,7 +84,16 @@ pub struct ByteArrayPropertySizes { // This enum is embedded in consensus errors, so it is consensus-serialized. // @append_only #[derive( - Debug, PartialEq, Eq, Clone, Serialize, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Debug, + PartialEq, + Eq, + Clone, + Serialize, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[serde(rename_all = "lowercase")] pub enum DocumentPropertyReferenceTarget { diff --git a/packages/rs-dpp/src/data_contract/document_type/random_document.rs b/packages/rs-dpp/src/data_contract/document_type/random_document.rs index 7797534e8dd..e91115413e0 100644 --- a/packages/rs-dpp/src/data_contract/document_type/random_document.rs +++ b/packages/rs-dpp/src/data_contract/document_type/random_document.rs @@ -1,4 +1,4 @@ -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use std::time::{SystemTime, UNIX_EPOCH}; use crate::data_contract::document_type::accessors::DocumentTypeV0Getters; @@ -19,7 +19,7 @@ use platform_value::{Bytes32, Identifier}; use rand::prelude::StdRng; use rand::SeedableRng; -#[derive(Clone, Copy, Debug, Eq, PartialEq, Encode, Decode)] +#[derive(Clone, Copy, Debug, Eq, PartialEq, Encode, Decode, DecodeUntrusted)] pub enum DocumentFieldFillType { /// Do not fill a field if that field is not required DoNotFillIfNotRequired, @@ -27,7 +27,7 @@ pub enum DocumentFieldFillType { FillIfNotRequired, } -#[derive(Clone, Copy, Debug, Eq, PartialEq, Encode, Decode)] +#[derive(Clone, Copy, Debug, Eq, PartialEq, Encode, Decode, DecodeUntrusted)] pub enum DocumentFieldFillSize { /// Fill to the min size allowed by the contract MinDocumentFillSize, diff --git a/packages/rs-dpp/src/data_contract/document_type/restricted_creation/mod.rs b/packages/rs-dpp/src/data_contract/document_type/restricted_creation/mod.rs index e875a6fe2c4..41a072796e5 100644 --- a/packages/rs-dpp/src/data_contract/document_type/restricted_creation/mod.rs +++ b/packages/rs-dpp/src/data_contract/document_type/restricted_creation/mod.rs @@ -2,11 +2,11 @@ use crate::consensus::basic::data_contract::UnknownDocumentCreationRestrictionMo use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use std::fmt; use std::fmt::{Display, Formatter}; -#[derive(Debug, PartialEq, Clone, Copy, Eq, Encode, Decode)] +#[derive(Debug, PartialEq, Clone, Copy, Eq, Encode, Decode, DecodeUntrusted)] pub enum CreationRestrictionMode { NoRestrictions, OwnerOnly, diff --git a/packages/rs-dpp/src/data_contract/document_type/v0/random_document_type.rs b/packages/rs-dpp/src/data_contract/document_type/v0/random_document_type.rs index 26231060fd9..72164db4da9 100644 --- a/packages/rs-dpp/src/data_contract/document_type/v0/random_document_type.rs +++ b/packages/rs-dpp/src/data_contract/document_type/v0/random_document_type.rs @@ -31,7 +31,7 @@ //! //! //! -#[derive(Clone, Copy, Debug, PartialEq, Encode, Decode)] +#[derive(Clone, Copy, Debug, PartialEq, Encode, Decode, DecodeUntrusted)] pub struct FieldTypeWeights { pub string_weight: u16, pub float_weight: u16, @@ -41,7 +41,7 @@ pub struct FieldTypeWeights { pub byte_array_weight: u16, } -#[derive(Clone, Debug, PartialEq, Encode, Decode)] +#[derive(Clone, Debug, PartialEq, Encode, Decode, DecodeUntrusted)] pub struct FieldMinMaxBounds { pub string_min_len: Range, pub string_has_min_len_chance: f64, @@ -63,7 +63,7 @@ pub struct FieldMinMaxBounds { pub byte_array_has_max_len_chance: f64, } -#[derive(Clone, Debug, PartialEq, Encode, Decode)] +#[derive(Clone, Debug, PartialEq, Encode, Decode, DecodeUntrusted)] pub struct RandomDocumentTypeParameters { pub new_fields_optional_count_range: Range, pub new_fields_required_count_range: Range, @@ -112,7 +112,7 @@ use crate::identity::SecurityLevel; use crate::nft::TradeMode; use crate::version::PlatformVersion; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use indexmap::IndexMap; use itertools::Itertools; use platform_value::{platform_value, Identifier}; diff --git a/packages/rs-dpp/src/data_contract/errors/contract.rs b/packages/rs-dpp/src/data_contract/errors/contract.rs index 80dee9f226f..9d608b1fcd4 100644 --- a/packages/rs-dpp/src/data_contract/errors/contract.rs +++ b/packages/rs-dpp/src/data_contract/errors/contract.rs @@ -1,7 +1,7 @@ use crate::consensus::basic::data_contract::DocumentTypesAreMissingError; use crate::consensus::basic::decode::DecodingError; use crate::consensus::basic::BasicError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; @@ -12,7 +12,15 @@ use crate::ProtocolError; // @append_only #[derive( - Error, Debug, PartialEq, PlatformSerialize, PlatformDeserialize, Encode, Decode, Clone, + Error, + Debug, + PartialEq, + PlatformSerialize, + PlatformDeserialize, + Encode, + Decode, + Clone, + DecodeUntrusted, )] pub enum DataContractError { #[error(transparent)] diff --git a/packages/rs-dpp/src/data_contract/errors/json_schema_error.rs b/packages/rs-dpp/src/data_contract/errors/json_schema_error.rs index 6d318541080..1e66d31927a 100644 --- a/packages/rs-dpp/src/data_contract/errors/json_schema_error.rs +++ b/packages/rs-dpp/src/data_contract/errors/json_schema_error.rs @@ -1,11 +1,20 @@ use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; // @append_only #[derive( - Error, Debug, PartialEq, Eq, PlatformSerialize, PlatformDeserialize, Encode, Decode, Clone, + Error, + Debug, + PartialEq, + Eq, + PlatformSerialize, + PlatformDeserialize, + Encode, + Decode, + Clone, + DecodeUntrusted, )] pub enum JsonSchemaError { #[error("can't create json schema: {0}")] diff --git a/packages/rs-dpp/src/data_contract/group/mod.rs b/packages/rs-dpp/src/data_contract/group/mod.rs index e46c58815dd..b01fdb261ee 100644 --- a/packages/rs-dpp/src/data_contract/group/mod.rs +++ b/packages/rs-dpp/src/data_contract/group/mod.rs @@ -8,7 +8,7 @@ use crate::serialization::JsonConvertible; #[cfg(feature = "value-conversion")] use crate::serialization::ValueConvertible; use crate::validation::SimpleConsensusValidationResult; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use platform_version::version::PlatformVersion; @@ -37,6 +37,7 @@ pub type GroupRequiredPower = u32; Clone, PartialEq, Eq, + DecodeUntrusted, )] #[platform_serialize(unversioned)] #[serde(tag = "$formatVersion")] diff --git a/packages/rs-dpp/src/data_contract/group/v0/mod.rs b/packages/rs-dpp/src/data_contract/group/v0/mod.rs index 14d1282a09d..04dcb8d0bd5 100644 --- a/packages/rs-dpp/src/data_contract/group/v0/mod.rs +++ b/packages/rs-dpp/src/data_contract/group/v0/mod.rs @@ -11,7 +11,7 @@ use crate::data_contract::GroupContractPosition; use crate::serialization::json_safe_fields; use crate::validation::SimpleConsensusValidationResult; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use platform_version::version::PlatformVersion; @@ -30,6 +30,7 @@ use std::collections::BTreeMap; Clone, PartialEq, Eq, + DecodeUntrusted, )] #[serde(rename_all = "camelCase")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/data_contract/mod.rs b/packages/rs-dpp/src/data_contract/mod.rs index 1fd1a6de9a9..0c05ddeeb8c 100644 --- a/packages/rs-dpp/src/data_contract/mod.rs +++ b/packages/rs-dpp/src/data_contract/mod.rs @@ -179,7 +179,7 @@ impl PlatformDeserializableWithPotentialValidationFromVersionedStructure for Dat .with_big_endian() .with_no_limit(); let data_contract_in_serialization_format: DataContractInSerializationFormat = - bincode::borrow_decode_from_slice(data, config) + bincode::borrow_decode_from_slice_untrusted(data, config) .map_err(|e| { PlatformDeserializationError(format!( "unable to deserialize DataContract: {}", @@ -208,13 +208,14 @@ impl PlatformDeserializableWithBytesLenFromVersionedStructure for DataContract { let config = bincode::config::standard() .with_big_endian() .with_no_limit(); - let (data_contract_in_serialization_format, len) = bincode::borrow_decode_from_slice::< - DataContractInSerializationFormat, - Configuration, - >(data, config) - .map_err(|e| { - PlatformDeserializationError(format!("unable to deserialize DataContract: {}", e)) - })?; + let (data_contract_in_serialization_format, len) = + bincode::borrow_decode_from_slice_untrusted::< + DataContractInSerializationFormat, + Configuration, + >(data, config) + .map_err(|e| { + PlatformDeserializationError(format!("unable to deserialize DataContract: {}", e)) + })?; Ok(( DataContract::try_from_platform_versioned( data_contract_in_serialization_format, @@ -239,7 +240,7 @@ impl PlatformLimitDeserializableFromVersionedStructure for DataContract { .with_big_endian() .with_limit::(); let data_contract_in_serialization_format: DataContractInSerializationFormat = - bincode::borrow_decode_from_slice(data, config) + bincode::borrow_decode_from_slice_untrusted(data, config) .map_err(|e| { PlatformDeserializationError(format!( "unable to deserialize DataContract with limit: {}", diff --git a/packages/rs-dpp/src/data_contract/serialized_version/mod.rs b/packages/rs-dpp/src/data_contract/serialized_version/mod.rs index a71dd8cb0b7..d8bbad3a4b0 100644 --- a/packages/rs-dpp/src/data_contract/serialized_version/mod.rs +++ b/packages/rs-dpp/src/data_contract/serialized_version/mod.rs @@ -17,7 +17,7 @@ use crate::serialization::ValueConvertible; use crate::validation::operations::ProtocolValidationOperation; use crate::version::PlatformVersion; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use platform_value::{Identifier, Value}; use platform_version::{IntoPlatformVersioned, TryFromPlatformVersioned}; @@ -103,7 +103,7 @@ impl fmt::Display for DataContractMismatch { all(feature = "value-conversion", feature = "serde-conversion"), derive(ValueConvertible) )] -#[derive(Debug, Clone, Encode, Decode, PartialEq, PlatformVersioned, From)] +#[derive(Debug, Clone, Encode, Decode, PartialEq, PlatformVersioned, From, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/data_contract/serialized_version/v0/mod.rs b/packages/rs-dpp/src/data_contract/serialized_version/v0/mod.rs index 8dc57f607b9..04a5f732334 100644 --- a/packages/rs-dpp/src/data_contract/serialized_version/v0/mod.rs +++ b/packages/rs-dpp/src/data_contract/serialized_version/v0/mod.rs @@ -7,7 +7,7 @@ use crate::data_contract::v1::DataContractV1; use crate::data_contract::{DataContract, DefinitionName, DocumentName}; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_value::{Identifier, Value}; use platform_version::version::PlatformVersion; use platform_version::FromPlatformVersioned; @@ -15,7 +15,7 @@ use serde::{Deserialize, Serialize}; use std::collections::BTreeMap; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Encode, Decode)] +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Encode, Decode, DecodeUntrusted)] #[serde(rename_all = "camelCase")] pub struct DataContractInSerializationFormatV0 { /// A unique identifier for the data contract. diff --git a/packages/rs-dpp/src/data_contract/serialized_version/v1/mod.rs b/packages/rs-dpp/src/data_contract/serialized_version/v1/mod.rs index f6bcfe52aba..974eac8a382 100644 --- a/packages/rs-dpp/src/data_contract/serialized_version/v1/mod.rs +++ b/packages/rs-dpp/src/data_contract/serialized_version/v1/mod.rs @@ -14,7 +14,7 @@ use crate::identity::TimestampMillis; use crate::prelude::BlockHeight; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_value::{Identifier, Value}; use platform_version::version::PlatformVersion; use platform_version::FromPlatformVersioned; @@ -22,7 +22,7 @@ use serde::{Deserialize, Serialize}; use std::collections::BTreeMap; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Encode, Decode)] +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Encode, Decode, DecodeUntrusted)] #[serde(rename_all = "camelCase")] pub struct DataContractInSerializationFormatV1 { /// A unique identifier for the data contract. diff --git a/packages/rs-dpp/src/data_contract/storage_requirements/keys_for_document_type.rs b/packages/rs-dpp/src/data_contract/storage_requirements/keys_for_document_type.rs index 0b1838d4cc3..17876c17dd7 100644 --- a/packages/rs-dpp/src/data_contract/storage_requirements/keys_for_document_type.rs +++ b/packages/rs-dpp/src/data_contract/storage_requirements/keys_for_document_type.rs @@ -2,14 +2,25 @@ use crate::consensus::basic::data_contract::UnknownStorageKeyRequirementsError; use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use serde_repr::*; use std::convert::TryFrom; /// The Storage Key requirements // @append_only #[repr(u8)] -#[derive(Serialize_repr, Deserialize_repr, Debug, PartialEq, Eq, Copy, Clone, Encode, Decode)] +#[derive( + Serialize_repr, + Deserialize_repr, + Debug, + PartialEq, + Eq, + Copy, + Clone, + Encode, + Decode, + DecodeUntrusted, +)] pub enum StorageKeyRequirements { Unique = 0, Multiple = 1, diff --git a/packages/rs-dpp/src/errors/consensus/basic/basic_error.rs b/packages/rs-dpp/src/errors/consensus/basic/basic_error.rs index d1bed746659..f1ef221482f 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/basic_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/basic_error.rs @@ -1,5 +1,5 @@ use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; @@ -117,7 +117,15 @@ use crate::data_contract::errors::DataContractError; #[allow(clippy::large_enum_variant)] #[derive( - Error, Debug, PlatformSerialize, PlatformDeserialize, Encode, Decode, PartialEq, Clone, + Error, + Debug, + PlatformSerialize, + PlatformDeserialize, + Encode, + Decode, + PartialEq, + Clone, + DecodeUntrusted, )] pub enum BasicError { /* diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/contested_unique_index_on_mutable_document_type_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/contested_unique_index_on_mutable_document_type_error.rs index def757d547f..b7a81d1e091 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/contested_unique_index_on_mutable_document_type_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/contested_unique_index_on_mutable_document_type_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Document type '{document_type}' has a contested unique index '{contested_unique_index_name}' but is set as mutable which is not allowed" diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/contested_unique_index_with_unique_index_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/contested_unique_index_with_unique_index_error.rs index cfaa8b9fe12..1eb5d36cc64 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/contested_unique_index_with_unique_index_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/contested_unique_index_with_unique_index_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Document type '{document_type}' has a contested unique index '{contested_unique_index_name}' and a unique index '{unique_index_name}' as well which is not allowed" diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_have_new_unique_index_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_have_new_unique_index_error.rs index e97ccb2f0a0..1b4180b8221 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_have_new_unique_index_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_have_new_unique_index_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Document with type {document_type} has a new unique index named '{index_name}'. Adding unique indices during Data Contract update is not allowed.")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_immutable_properties_update_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_immutable_properties_update_error.rs index 2eeebfb0ce0..19ab082bd53 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_immutable_properties_update_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_immutable_properties_update_error.rs @@ -5,10 +5,18 @@ use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Value; use thiserror::Error; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("only $defs, version and documents fields are allowed to be updated. Forbidden operation '{operation}' on '{field_path}'")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_invalid_index_definition_update_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_invalid_index_definition_update_error.rs index 52f4633e2ad..3814874c301 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_invalid_index_definition_update_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_invalid_index_definition_update_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Document with type {document_type} could not add or remove '{index_path}' during data contract update as we do not allow modifications of data contract index paths")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_invalid_required_fields_update_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_invalid_required_fields_update_error.rs index db524161d38..08db62f8803 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_invalid_required_fields_update_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_invalid_required_fields_update_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Document type {document_type} required fields update is not allowed: {details}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs index dd539edc469..d16f8d8e62e 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("JSON Schema depth is greater than {max_depth:?}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_token_configuration_update_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_token_configuration_update_error.rs index a367fb8ad20..374089bf1ab 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_token_configuration_update_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_token_configuration_update_error.rs @@ -5,10 +5,18 @@ use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; use crate::data_contract::associated_token::token_configuration::TokenConfiguration; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Forbidden operation '{operation}' on '{field_path}', old config is {old_config}, new config is {new_config}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_unique_indices_changed_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_unique_indices_changed_error.rs index 31150163eb8..7995401668e 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_unique_indices_changed_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_unique_indices_changed_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Document with type {document_type} has updated unique index named '{index_name}'. Change of unique indices is not allowed")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/document_types_are_missing_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/document_types_are_missing_error.rs index 1492ee2ebe4..055ff07d1ae 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/document_types_are_missing_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/document_types_are_missing_error.rs @@ -7,10 +7,18 @@ use crate::consensus::ConsensusError; use crate::prelude::Identifier; use crate::data_contract::errors::DataContractError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Data Contract {data_contract_id} must have at least one document type or token defined.")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/duplicate_index_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/duplicate_index_error.rs index 7d56cf7876a..30955395367 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/duplicate_index_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/duplicate_index_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Duplicate '{index_name}' index definition for '{document_type}' document")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/duplicate_index_name_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/duplicate_index_name_error.rs index cbafd8e8e6b..bd322280a4f 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/duplicate_index_name_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/duplicate_index_name_error.rs @@ -5,10 +5,19 @@ use thiserror::Error; use crate::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Duplicate index name '{duplicate_index_name}' defined in '{document_type}' document")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/duplicate_keywords_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/duplicate_keywords_error.rs index c84d918cf36..21f681416db 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/duplicate_keywords_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/duplicate_keywords_error.rs @@ -1,13 +1,22 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Data contract {data_contract_id} has duplicated keyword '{keyword}'.")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_exceeds_max_members_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_exceeds_max_members_error.rs index adc124655ad..873f95af67a 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_exceeds_max_members_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_exceeds_max_members_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Group exceeds the maximum allowed number of members: {max_members}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_has_too_few_members_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_has_too_few_members_error.rs index 8fb5f1d325d..31b0056bfb2 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_has_too_few_members_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_has_too_few_members_error.rs @@ -2,13 +2,23 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::data_contract::GroupContractPosition; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use std::error::Error; use std::fmt; /// Error indicating that a group contains too few members to be valid. -#[derive(Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize)] +#[derive( + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, +)] #[platform_serialize(unversioned)] pub struct GroupHasTooFewMembersError { group_id: Option, diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_member_has_power_of_zero_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_member_has_power_of_zero_error.rs index 4d3b9c37d8f..3832f9b9a19 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_member_has_power_of_zero_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_member_has_power_of_zero_error.rs @@ -2,12 +2,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::identifier::Identifier; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Member {member_id} has a power of 0, which is not allowed")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_member_has_power_over_limit_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_member_has_power_over_limit_error.rs index 40bbd70a607..7e4ad85eddc 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_member_has_power_over_limit_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_member_has_power_over_limit_error.rs @@ -3,12 +3,21 @@ use crate::consensus::ConsensusError; use crate::data_contract::group::GroupMemberPower; use crate::errors::ProtocolError; use crate::identifier::Identifier; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Member {member_id} has a power of {power}, which exceeds the allowed limit of {max_power}" diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_non_unilateral_member_power_has_less_than_required_power_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_non_unilateral_member_power_has_less_than_required_power_error.rs index 7d8632fc533..0aa59455f44 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_non_unilateral_member_power_has_less_than_required_power_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_non_unilateral_member_power_has_less_than_required_power_error.rs @@ -2,12 +2,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::data_contract::group::GroupMemberPower; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("The collective power of non-unilateral members {total_power} is less than the required power {required_power}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_position_does_not_exist_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_position_does_not_exist_error.rs index 7f525489363..a44cf32e14d 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_position_does_not_exist_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_position_does_not_exist_error.rs @@ -2,13 +2,22 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::data_contract::GroupContractPosition; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; /// Error raised when a group position does not exist in the data contract. #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Group position {} does not exist", missing_group_position)] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_required_power_is_invalid_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_required_power_is_invalid_error.rs index b36462efd56..cce171fc598 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_required_power_is_invalid_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_required_power_is_invalid_error.rs @@ -2,12 +2,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::data_contract::group::GroupRequiredPower; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Debug, Error, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Debug, + Error, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[platform_serialize(unversioned)] #[error("The required group power {required_power} is invalid. It must be > 0 and <= {max_power}.")] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_total_power_has_less_than_required_power_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_total_power_has_less_than_required_power_error.rs index 6559f20e5c0..4a5ac08f00d 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_total_power_has_less_than_required_power_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/group_total_power_has_less_than_required_power_error.rs @@ -2,12 +2,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::data_contract::group::GroupMemberPower; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Group total power {total_power} is less than the required power {required_power}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/incompatible_data_contract_schema_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/incompatible_data_contract_schema_error.rs index 9a75c009495..efd4aae5ae5 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/incompatible_data_contract_schema_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/incompatible_data_contract_schema_error.rs @@ -6,10 +6,18 @@ use thiserror::Error; use crate::consensus::ConsensusError; use crate::prelude::Identifier; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Data Contract updated schema is not backward compatible with one defined in Data Contract with id {data_contract_id}. Field: '{field_path}', Operation: '{operation}'" )] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/incompatible_document_type_schema_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/incompatible_document_type_schema_error.rs index 2dd41eb12e4..011d2147eb2 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/incompatible_document_type_schema_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/incompatible_document_type_schema_error.rs @@ -5,10 +5,18 @@ use thiserror::Error; use crate::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Updated document type '{document_type_name}' schema is not backward compatible with previous version. Incompatible change '{operation}' of property '{property_path}'" )] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/incompatible_re2_pattern_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/incompatible_re2_pattern_error.rs index 37573de69f8..37030f096e9 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/incompatible_re2_pattern_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/incompatible_re2_pattern_error.rs @@ -5,10 +5,19 @@ use thiserror::Error; use crate::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Pattern '{pattern}' at '{path}' is not not compatible with Re2: {message}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_compound_index_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_compound_index_error.rs index 663a961e75a..3e5a8c41b26 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_compound_index_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_compound_index_error.rs @@ -5,10 +5,19 @@ use thiserror::Error; use crate::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("All or none of unique compound properties must be set for '{index_name}' index of '{document_type}' document")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_data_contract_id_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_data_contract_id_error.rs index bf98afb6836..06cf897ce94 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_data_contract_id_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_data_contract_id_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Data Contract Id must be {}, got {}", bs58::encode(expected_id).into_string(), bs58::encode(invalid_id).into_string())] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_data_contract_version_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_data_contract_version_error.rs index 02fde1a679c..8fc42a49fca 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_data_contract_version_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_data_contract_version_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Data Contract version must be {expected_version}, got {version}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_description_length_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_description_length_error.rs index 5554da1ac4e..66b6fb486d8 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_description_length_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_description_length_error.rs @@ -1,13 +1,22 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Data contract {} has description with invalid length: '{}'. Valid length is between 3 and 100 characters.", data_contract_id, description.len())] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_document_type_name_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_document_type_name_error.rs index 8b9a8bf1c76..95a8509ba26 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_document_type_name_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_document_type_name_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("document type name '{name}' is not supported. It must be from 1 to 64 alphanumeric chars, and '_' or '-'.")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_document_type_required_security_level.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_document_type_required_security_level.rs index dae65b27284..e8c75e7dd09 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_document_type_required_security_level.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_document_type_required_security_level.rs @@ -6,11 +6,20 @@ use thiserror::Error; use crate::identity::SecurityLevel; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_value::Identifier; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Invalid document type security level error security level: got {security_level:?} for {contract_id}::{document_type_name}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_index_property_type_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_index_property_type_error.rs index 49a531680d3..52e49e6a7c1 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_index_property_type_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_index_property_type_error.rs @@ -5,10 +5,19 @@ use thiserror::Error; use crate::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("'{property_name}' property of '{document_type}' document has an invalid type '{property_type}' and cannot be use as an index")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_indexed_property_constraint_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_indexed_property_constraint_error.rs index e73ea6e26c3..0a6a4e148c0 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_indexed_property_constraint_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_indexed_property_constraint_error.rs @@ -5,10 +5,19 @@ use thiserror::Error; use crate::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Indexed property '{property_name}' for '{document_type}' document has an invalid constraint '{constraint_name}', reason: '{reason}'")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_json_schema_ref_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_json_schema_ref_error.rs index 0b30d024486..79290913701 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_json_schema_ref_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_json_schema_ref_error.rs @@ -5,10 +5,19 @@ use thiserror::Error; use crate::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Invalid JSON Schema $ref: {message}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_keyword_character_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_keyword_character_error.rs index 48e02d3431c..14342b6a7b3 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_keyword_character_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_keyword_character_error.rs @@ -1,13 +1,22 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Data contract {data_contract_id} has a keyword with invalid characters. Keywords must not contain whitespace or control characters.")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_keyword_length_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_keyword_length_error.rs index 40988ef52ce..07e159f82e2 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_keyword_length_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_keyword_length_error.rs @@ -1,13 +1,22 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Data contract {data_contract_id} has keyword with invalid length: '{keyword}'. Valid length is between 3 and 50 characters.")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_base_supply_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_base_supply_error.rs index 738be8b2223..64ebb53a424 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_base_supply_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_base_supply_error.rs @@ -5,9 +5,18 @@ use thiserror::Error; use crate::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Invalid token base supply. Given base supply: {}, Max allowed base supply: {}", diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_distribution_function_divide_by_zero_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_distribution_function_divide_by_zero_error.rs index 0d61950a806..bcbfb897c02 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_distribution_function_divide_by_zero_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_distribution_function_divide_by_zero_error.rs @@ -6,10 +6,19 @@ use thiserror::Error; use crate::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Invalid token distribution function: division by zero in {}", diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_distribution_function_incoherence_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_distribution_function_incoherence_error.rs index 3224b76e8df..03475d16e0f 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_distribution_function_incoherence_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_distribution_function_incoherence_error.rs @@ -5,10 +5,19 @@ use thiserror::Error; use crate::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Incoherent parameters in token distribution function: {}", message)] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_distribution_function_invalid_parameter_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_distribution_function_invalid_parameter_error.rs index 22d269abe16..e66f5d32cbe 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_distribution_function_invalid_parameter_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_distribution_function_invalid_parameter_error.rs @@ -5,10 +5,19 @@ use thiserror::Error; use crate::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Invalid parameter `{}` in token distribution function. Expected range: {} to {}{}", diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_distribution_function_invalid_parameter_tuple_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_distribution_function_invalid_parameter_tuple_error.rs index 39d0d444a0c..15e1498a4ed 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_distribution_function_invalid_parameter_tuple_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_distribution_function_invalid_parameter_tuple_error.rs @@ -5,10 +5,19 @@ use thiserror::Error; use crate::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Invalid parameter tuple in token distribution function: `{}` must be {} `{}`", diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_language_code_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_language_code_error.rs index a5a6d0d03c9..8ffaa86d9d7 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_language_code_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_language_code_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Invalid token language code: '{language_code}'")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_name_character_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_name_character_error.rs index a15763539d1..c9efa1a832c 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_name_character_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_name_character_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Data contract has a token name {token_name} in {form} with invalid characters. Token names must not contain whitespace or control characters.")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_name_length_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_name_length_error.rs index 333ec475fd0..d3d78c5c475 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_name_length_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_name_length_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Token {form} length was {actual}, but must be between {min} and {max} characters.")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/keywords_over_limit.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/keywords_over_limit.rs index 9a0b6b20481..7e12ddee0a4 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/keywords_over_limit.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/keywords_over_limit.rs @@ -1,13 +1,22 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Data contract {data_contract_id} has too many keywords: '{keywords_len}'. The maximum is 50." diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/main_group_is_not_defined.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/main_group_is_not_defined.rs index 83fc8bd3c7f..9fdac10d11e 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/main_group_is_not_defined.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/main_group_is_not_defined.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Main group is not defined.")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/new_tokens_destination_identity_option_required_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/new_tokens_destination_identity_option_required_error.rs index cb23fc8e522..0668d0e8b33 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/new_tokens_destination_identity_option_required_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/new_tokens_destination_identity_option_required_error.rs @@ -2,13 +2,22 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::data_contract::TokenContractPosition; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("token configuration requires a new tokens destination identity if choosing destination is not allowed for contract {contract_id} at position {token_position}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/non_contiguous_contract_group_positions_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/non_contiguous_contract_group_positions_error.rs index 3409e866f8c..e024eb58090 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/non_contiguous_contract_group_positions_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/non_contiguous_contract_group_positions_error.rs @@ -2,12 +2,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::data_contract::GroupContractPosition; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Contract Group Positions are not contiguous. Missing position: {}, Followed position: {}", diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/non_contiguous_contract_token_positions_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/non_contiguous_contract_token_positions_error.rs index 2875f2bb420..fe3c7dccd9a 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/non_contiguous_contract_token_positions_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/non_contiguous_contract_token_positions_error.rs @@ -2,12 +2,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::data_contract::TokenContractPosition; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Contract Token Positions are not contiguous. Missing position: {}, Followed position: {}", diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/redundant_document_paid_for_by_token_with_contract_id.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/redundant_document_paid_for_by_token_with_contract_id.rs index 70d672829a6..b592b463906 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/redundant_document_paid_for_by_token_with_contract_id.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/redundant_document_paid_for_by_token_with_contract_id.rs @@ -1,13 +1,22 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Document paid for by a token has a contractId {contract_id} set, which is redundant because it is targeting the current contract")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/system_property_index_already_present_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/system_property_index_already_present_error.rs index 2eb3ccf7a2c..548ef74f47d 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/system_property_index_already_present_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/system_property_index_already_present_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("System property '{property_name}' is already indexed and can't be used in '{index_name}' index of '{document_type}' document")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/token_decimals_over_limit_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/token_decimals_over_limit_error.rs index 88159657f6b..f49ad603446 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/token_decimals_over_limit_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/token_decimals_over_limit_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Data contract is trying to define a token with {decimals} decimal places, which exceeds the maximum allowed: {max_decimals}.")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/token_payment_by_burning_only_allowed_on_internal_token_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/token_payment_by_burning_only_allowed_on_internal_token_error.rs index 65fcd8ed0a7..187db444220 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/token_payment_by_burning_only_allowed_on_internal_token_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/token_payment_by_burning_only_allowed_on_internal_token_error.rs @@ -3,14 +3,23 @@ use crate::consensus::ConsensusError; use crate::data_contract::TokenContractPosition; use crate::tokens::calculate_token_id; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use std::fmt; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[platform_serialize(unversioned)] pub struct TokenPaymentByBurningOnlyAllowedOnInternalTokenError { diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/undefined_index_property_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/undefined_index_property_error.rs index bf4297aaaa9..b602bb9510b 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/undefined_index_property_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/undefined_index_property_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("'{property_name}' property is not defined in the '{document_type}' document")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/unique_indices_limit_reached_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/unique_indices_limit_reached_error.rs index e136354d260..36a9d9e7efb 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/unique_indices_limit_reached_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/unique_indices_limit_reached_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("'{document_type}' document has more than '{index_limit}' unique indexes (contested is {is_contested_limit})")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_document_action_token_effect_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_document_action_token_effect_error.rs index f7820172795..2c71c85522f 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_document_action_token_effect_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_document_action_token_effect_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Unrecognized document action token effect: allowed {:?}, got {}", diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_document_creation_restriction_mode_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_document_creation_restriction_mode_error.rs index 2d55df7e397..9df766bada7 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_document_creation_restriction_mode_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_document_creation_restriction_mode_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Unrecognized document creation restriction mode: allowed {:?}, got {}", diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_gas_fees_paid_by_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_gas_fees_paid_by_error.rs index bd9dbbd4e4f..6318a1b17c8 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_gas_fees_paid_by_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_gas_fees_paid_by_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Unrecognized gas fees paid by mode: allowed {:?}, got {}", diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_security_level_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_security_level_error.rs index 325c5641106..dbcd26ff47a 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_security_level_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_security_level_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Unrecognized security level: allowed {:?}, got {}", diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_storage_key_requirements_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_storage_key_requirements_error.rs index 82d00e70371..eb4acaf3436 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_storage_key_requirements_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_storage_key_requirements_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Unrecognized storage key requirements: allowed {:?}, got {}", diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_trade_mode_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_trade_mode_error.rs index bbf57f33351..101993a8002 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_trade_mode_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_trade_mode_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Unrecognized trade mode: allowed {:?}, got {}", diff --git a/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_transferable_type_error.rs b/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_transferable_type_error.rs index 0ed1a89d4cf..1394f521022 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_transferable_type_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_transferable_type_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Unrecognized transferable type: allowed {:?}, got {}", diff --git a/packages/rs-dpp/src/errors/consensus/basic/decode/decoding_error.rs b/packages/rs-dpp/src/errors/consensus/basic/decode/decoding_error.rs index 6f3bb18e9f2..cdef9087993 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/decode/decoding_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/decode/decoding_error.rs @@ -5,10 +5,19 @@ use thiserror::Error; use crate::consensus::ConsensusError; use crate::data_contract::errors::DataContractError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Decoding error: {error}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs b/packages/rs-dpp/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs index c64e379c0ba..ec3e012dc32 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs @@ -4,10 +4,19 @@ use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; use crate::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Can't read protocol version from serialized object: {parsing_error}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/decode/serialized_object_parsing_error.rs b/packages/rs-dpp/src/errors/consensus/basic/decode/serialized_object_parsing_error.rs index c415b41e939..74e06882c59 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/decode/serialized_object_parsing_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/decode/serialized_object_parsing_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Parsing of serialized object failed due to: {parsing_error}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/decode/version_error.rs b/packages/rs-dpp/src/errors/consensus/basic/decode/version_error.rs index 013204d5ded..c29be0bd5c9 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/decode/version_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/decode/version_error.rs @@ -4,10 +4,19 @@ use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; use crate::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Can't read protocol version from serialized object: {error}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/document/contested_documents_temporarily_not_allowed_error.rs b/packages/rs-dpp/src/errors/consensus/basic/document/contested_documents_temporarily_not_allowed_error.rs index 55e01ad27a2..bba42070480 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/document/contested_documents_temporarily_not_allowed_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/document/contested_documents_temporarily_not_allowed_error.rs @@ -5,10 +5,19 @@ use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; use crate::block::epoch::EpochIndex; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Contested documents are not allowed until epoch {target_epoch}. Current epoch is {current_epoch}" diff --git a/packages/rs-dpp/src/errors/consensus/basic/document/data_contract_not_present_error.rs b/packages/rs-dpp/src/errors/consensus/basic/document/data_contract_not_present_error.rs index 7ae01a0df1a..6a940a99fd5 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/document/data_contract_not_present_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/document/data_contract_not_present_error.rs @@ -1,13 +1,22 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Data Contract {data_contract_id} is not present")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/document/document_creation_not_allowed_error.rs b/packages/rs-dpp/src/errors/consensus/basic/document/document_creation_not_allowed_error.rs index 5ad1732dddc..42f7fa91b20 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/document/document_creation_not_allowed_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/document/document_creation_not_allowed_error.rs @@ -2,13 +2,22 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::data_contract::document_type::restricted_creation::CreationRestrictionMode; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Document Creation on {data_contract_id}:{document_type_name} is not allowed because of the document type's creation restriction mode {creation_restriction_mode}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/document/document_field_max_size_exceeded_error.rs b/packages/rs-dpp/src/errors/consensus/basic/document/document_field_max_size_exceeded_error.rs index 358d7fd3987..cc9a240a87e 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/document/document_field_max_size_exceeded_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/document/document_field_max_size_exceeded_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Document field {field} size {actual_size_bytes} is more than system maximum {max_size_bytes}" diff --git a/packages/rs-dpp/src/errors/consensus/basic/document/document_transitions_are_absent_error.rs b/packages/rs-dpp/src/errors/consensus/basic/document/document_transitions_are_absent_error.rs index 854a530cb31..2ae5cb4ee57 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/document/document_transitions_are_absent_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/document/document_transitions_are_absent_error.rs @@ -1,13 +1,22 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Documents Batch Transition has no document transitions")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs b/packages/rs-dpp/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs index 45fbb67a838..9c1c02e0454 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Document transitions with duplicate IDs {:?}", references)] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs b/packages/rs-dpp/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs index 6100b5128ce..00c268be533 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Document transitions with duplicate unique properties: {:?}", diff --git a/packages/rs-dpp/src/errors/consensus/basic/document/identity_contract_nonce_out_of_bounds_error.rs b/packages/rs-dpp/src/errors/consensus/basic/document/identity_contract_nonce_out_of_bounds_error.rs index 54eee70ff2c..60b851b32c6 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/document/identity_contract_nonce_out_of_bounds_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/document/identity_contract_nonce_out_of_bounds_error.rs @@ -2,12 +2,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::prelude::IdentityNonce; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Nonce is out of bounds: {}", nonce)] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs b/packages/rs-dpp/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs index 2a2c9c8944d..2f819b1e52b 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Unique compound index properties {:?} are partially set for {document_type}", diff --git a/packages/rs-dpp/src/errors/consensus/basic/document/invalid_document_transition_action_error.rs b/packages/rs-dpp/src/errors/consensus/basic/document/invalid_document_transition_action_error.rs index 5097d8b0734..0cddef624b2 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/document/invalid_document_transition_action_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/document/invalid_document_transition_action_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Document transition action {} is not supported", action)] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/document/invalid_document_transition_id_error.rs b/packages/rs-dpp/src/errors/consensus/basic/document/invalid_document_transition_id_error.rs index 094703cfcee..198816fee8f 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/document/invalid_document_transition_id_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/document/invalid_document_transition_id_error.rs @@ -2,12 +2,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::prelude::Identifier; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Invalid document transition id {}, expected {}", diff --git a/packages/rs-dpp/src/errors/consensus/basic/document/invalid_document_type_error.rs b/packages/rs-dpp/src/errors/consensus/basic/document/invalid_document_type_error.rs index 066cc3304dd..0f4c9623280 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/document/invalid_document_type_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/document/invalid_document_type_error.rs @@ -6,10 +6,19 @@ use thiserror::Error; use crate::prelude::Identifier; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Data Contract {data_contract_id} doesn't define document with the type {document_type}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/document/max_documents_transitions_exceeded_error.rs b/packages/rs-dpp/src/errors/consensus/basic/document/max_documents_transitions_exceeded_error.rs index 549ae5d3fc6..cf730af6087 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/document/max_documents_transitions_exceeded_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/document/max_documents_transitions_exceeded_error.rs @@ -1,13 +1,22 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use crate::errors::ProtocolError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Amount of document transitions must be less or equal to {max_transitions}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/document/missing_data_contract_id_basic_error.rs b/packages/rs-dpp/src/errors/consensus/basic/document/missing_data_contract_id_basic_error.rs index 67e53ca26eb..78de48027f4 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/document/missing_data_contract_id_basic_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/document/missing_data_contract_id_basic_error.rs @@ -1,7 +1,7 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; @@ -16,6 +16,7 @@ use thiserror::Error; Decode, PlatformSerialize, PlatformDeserialize, + DecodeUntrusted, )] #[error("$dataContractId is not present")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/document/missing_document_transition_action_error.rs b/packages/rs-dpp/src/errors/consensus/basic/document/missing_document_transition_action_error.rs index 502633dbb93..f4c23b6d158 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/document/missing_document_transition_action_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/document/missing_document_transition_action_error.rs @@ -4,7 +4,7 @@ use crate::errors::ProtocolError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( Error, @@ -17,6 +17,7 @@ use bincode::{Decode, Encode}; Decode, PlatformSerialize, PlatformDeserialize, + DecodeUntrusted, )] #[error("$action is not present")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/document/missing_document_transition_type_error.rs b/packages/rs-dpp/src/errors/consensus/basic/document/missing_document_transition_type_error.rs index 65e1703c86b..b041b831da1 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/document/missing_document_transition_type_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/document/missing_document_transition_type_error.rs @@ -4,7 +4,7 @@ use crate::errors::ProtocolError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( Error, @@ -17,6 +17,7 @@ use bincode::{Decode, Encode}; Decode, PlatformSerialize, PlatformDeserialize, + DecodeUntrusted, )] #[error("$type is not present")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/document/missing_document_type_error.rs b/packages/rs-dpp/src/errors/consensus/basic/document/missing_document_type_error.rs index 3130733ef6e..cffa96ed0a8 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/document/missing_document_type_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/document/missing_document_type_error.rs @@ -4,7 +4,7 @@ use crate::errors::ProtocolError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( Error, @@ -17,6 +17,7 @@ use bincode::{Decode, Encode}; Decode, PlatformSerialize, PlatformDeserialize, + DecodeUntrusted, )] #[error("$type is not present")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/document/missing_positions_in_document_type_properties_error.rs b/packages/rs-dpp/src/errors/consensus/basic/document/missing_positions_in_document_type_properties_error.rs index ff520b8ffb6..7df1aa71bf8 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/document/missing_positions_in_document_type_properties_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/document/missing_positions_in_document_type_properties_error.rs @@ -4,7 +4,7 @@ use crate::errors::ProtocolError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_value::Identifier; #[derive( @@ -18,6 +18,7 @@ use platform_value::Identifier; Decode, PlatformSerialize, PlatformDeserialize, + DecodeUntrusted, )] #[error( "position field is not present for document type \"{}\"", diff --git a/packages/rs-dpp/src/errors/consensus/basic/group/group_action_not_allowed_on_transition_error.rs b/packages/rs-dpp/src/errors/consensus/basic/group/group_action_not_allowed_on_transition_error.rs index 8f2862fa9ab..e54a4b7d4f3 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/group/group_action_not_allowed_on_transition_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/group/group_action_not_allowed_on_transition_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Group action is not allowed during transition: {}", transition_type)] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/data_contract_bounds_not_present_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/data_contract_bounds_not_present_error.rs index c6dcfc1d4ea..b6a1a328d92 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/data_contract_bounds_not_present_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/data_contract_bounds_not_present_error.rs @@ -1,11 +1,13 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_value::Identifier; use serde::{Deserialize, Serialize}; use thiserror::Error; -#[derive(Error, Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Encode, Decode)] +#[derive( + Error, Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Encode, Decode, DecodeUntrusted, +)] #[error("Data Contract {data_contract_id} expected bounds are not present")] pub struct DataContractBoundsNotPresentError { /* diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/disabling_key_id_also_being_added_in_same_transition_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/disabling_key_id_also_being_added_in_same_transition_error.rs index 4d37c1e4e70..c4bca0ac071 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/disabling_key_id_also_being_added_in_same_transition_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/disabling_key_id_also_being_added_in_same_transition_error.rs @@ -2,12 +2,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::identity::KeyID; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Disabling a key with id {key_id:?} that is being added in same state transition")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/duplicated_identity_public_key_basic_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/duplicated_identity_public_key_basic_error.rs index 19a313d702c..418accb8d6b 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/duplicated_identity_public_key_basic_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/duplicated_identity_public_key_basic_error.rs @@ -2,12 +2,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::identity::KeyID; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Duplicated public keys {duplicated_ids:?} found")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_basic_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_basic_error.rs index cf95281b69a..f4f0f3acd2d 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_basic_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_basic_error.rs @@ -2,12 +2,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::identity::KeyID; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Duplicated public key ids {duplicated_ids:?} found")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs index 12b433973cb..b693df3b38c 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs @@ -1,7 +1,7 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use dashcore::Txid; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; @@ -46,3 +46,15 @@ impl From for ConsensusErr Self::BasicError(BasicError::IdentityAssetLockProofLockedTransactionMismatchError(err)) } } + +impl DecodeUntrusted for IdentityAssetLockProofLockedTransactionMismatchError { + fn decode_untrusted>( + decoder: &mut D, + ) -> Result { + Ok(Self { + instant_lock_transaction_id: crate::serialization::untrusted::decode_txid(decoder)?, + asset_lock_transaction_id: crate::serialization::untrusted::decode_txid(decoder)?, + }) + } +} +bincode::impl_borrow_decode_untrusted!(IdentityAssetLockProofLockedTransactionMismatchError); diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_state_transition_replay_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_state_transition_replay_error.rs index 8c1e8ab9401..1ed035a57cb 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_state_transition_replay_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_state_transition_replay_error.rs @@ -1,7 +1,7 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use dashcore::Txid; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Bytes32; @@ -54,3 +54,16 @@ impl From for ConsensusError { Self::BasicError(BasicError::IdentityAssetLockStateTransitionReplayError(err)) } } + +impl DecodeUntrusted for IdentityAssetLockStateTransitionReplayError { + fn decode_untrusted>( + decoder: &mut D, + ) -> Result { + Ok(Self { + transaction_id: crate::serialization::untrusted::decode_txid(decoder)?, + output_index: DecodeUntrusted::decode_untrusted(decoder)?, + state_transition_id: DecodeUntrusted::decode_untrusted(decoder)?, + }) + } +} +bincode::impl_borrow_decode_untrusted!(IdentityAssetLockStateTransitionReplayError); diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_is_not_found_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_is_not_found_error.rs index b4d39d261c3..441c94cf09a 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_is_not_found_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_is_not_found_error.rs @@ -1,4 +1,4 @@ -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use std::fmt::{Display, Formatter}; use crate::consensus::basic::BasicError; @@ -9,7 +9,16 @@ use thiserror::Error; use crate::consensus::ConsensusError; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[platform_serialize(unversioned)] pub struct IdentityAssetLockTransactionIsNotFoundError { diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_consumed_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_consumed_error.rs index 250d2fc72cc..26635e2bcea 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_consumed_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_consumed_error.rs @@ -1,7 +1,7 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use dashcore::Txid; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; @@ -45,3 +45,15 @@ impl From for Consensu Self::BasicError(BasicError::IdentityAssetLockTransactionOutPointAlreadyConsumedError(err)) } } + +impl DecodeUntrusted for IdentityAssetLockTransactionOutPointAlreadyConsumedError { + fn decode_untrusted>( + decoder: &mut D, + ) -> Result { + Ok(Self { + transaction_id: crate::serialization::untrusted::decode_txid(decoder)?, + output_index: DecodeUntrusted::decode_untrusted(decoder)?, + }) + } +} +bincode::impl_borrow_decode_untrusted!(IdentityAssetLockTransactionOutPointAlreadyConsumedError); diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_not_enough_balance_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_not_enough_balance_error.rs index 98db7c70539..6f97c82b169 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_not_enough_balance_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_not_enough_balance_error.rs @@ -2,7 +2,7 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::fee::Credits; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use dashcore::Txid; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; @@ -70,3 +70,18 @@ impl From for Consens Self::BasicError(BasicError::IdentityAssetLockTransactionOutPointNotEnoughBalanceError(err)) } } + +impl DecodeUntrusted for IdentityAssetLockTransactionOutPointNotEnoughBalanceError { + fn decode_untrusted>( + decoder: &mut D, + ) -> Result { + Ok(Self { + transaction_id: crate::serialization::untrusted::decode_txid(decoder)?, + output_index: DecodeUntrusted::decode_untrusted(decoder)?, + initial_asset_lock_credits: DecodeUntrusted::decode_untrusted(decoder)?, + credits_left: DecodeUntrusted::decode_untrusted(decoder)?, + credits_required: DecodeUntrusted::decode_untrusted(decoder)?, + }) + } +} +bincode::impl_borrow_decode_untrusted!(IdentityAssetLockTransactionOutPointNotEnoughBalanceError); diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_output_not_found_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_output_not_found_error.rs index 6f191742153..e33c9921395 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_output_not_found_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_output_not_found_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Asset Lock Transaction Output with index {output_index} not found")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_too_many_inputs_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_too_many_inputs_error.rs index 1047aeea1b3..91c447759da 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_too_many_inputs_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_too_many_inputs_error.rs @@ -4,10 +4,18 @@ use crate::errors::ProtocolError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, Encode, Decode, PlatformSerialize, PlatformDeserialize, PartialEq, + Error, + Debug, + Clone, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + PartialEq, + DecodeUntrusted, )] #[error("Asset lock transaction has too many inputs: {actual_inputs} (max {max_inputs}). Consolidate UTXOs before creating the asset lock.")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/identity_credit_transfer_to_self_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/identity_credit_transfer_to_self_error.rs index 5330a50619d..87e45116e24 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/identity_credit_transfer_to_self_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/identity_credit_transfer_to_self_error.rs @@ -1,7 +1,7 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; @@ -16,6 +16,7 @@ use thiserror::Error; PlatformSerialize, PlatformDeserialize, Default, + DecodeUntrusted, )] #[error("Credits transfer recipient must be another identity")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_proof_core_chain_height_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_proof_core_chain_height_error.rs index c1708fa455b..eb4ddc0732f 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_proof_core_chain_height_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_proof_core_chain_height_error.rs @@ -5,10 +5,19 @@ use thiserror::Error; use crate::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Asset Lock proof core chain height {proof_core_chain_locked_height:?} is higher than the current consensus core height {current_core_chain_locked_height:?}.")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs index 9b9cb76b123..72bea38edc0 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs @@ -5,10 +5,19 @@ use thiserror::Error; use crate::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Core chain locked height {proof_core_chain_locked_height:?} must be higher than block {transaction_height:?} with Asset Lock transaction")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_transaction_output_return_size.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_transaction_output_return_size.rs index d0967509242..87d386ab247 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_transaction_output_return_size.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_transaction_output_return_size.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Asset Lock output {output_index} has invalid public key hash. Must be 20 length bytes hash" diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_credit_withdrawal_transition_core_fee_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_credit_withdrawal_transition_core_fee_error.rs index d4cfcb5a3a8..7c28b2dfd3c 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_credit_withdrawal_transition_core_fee_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_credit_withdrawal_transition_core_fee_error.rs @@ -5,10 +5,19 @@ use thiserror::Error; use crate::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Core fee per byte {core_fee_per_byte:?} must be part of fibonacci sequence and not less than {min_core_fee_per_byte:?}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_credit_withdrawal_transition_output_script_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_credit_withdrawal_transition_output_script_error.rs index a1c816cad8f..50f2e8d212b 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_credit_withdrawal_transition_output_script_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_credit_withdrawal_transition_output_script_error.rs @@ -6,10 +6,19 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::identity::core_script::CoreScript; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Output script must be either p2pkh or p2sh")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_asset_lock_proof_chain_lock_validation_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_asset_lock_proof_chain_lock_validation_error.rs index d8ddeb3f628..703ec197d22 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_asset_lock_proof_chain_lock_validation_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_asset_lock_proof_chain_lock_validation_error.rs @@ -1,5 +1,5 @@ use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use dashcore::Txid; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; @@ -32,3 +32,15 @@ impl InvalidIdentityAssetLockProofChainLockValidationError { self.height_reported_not_locked } } + +impl DecodeUntrusted for InvalidIdentityAssetLockProofChainLockValidationError { + fn decode_untrusted>( + decoder: &mut D, + ) -> Result { + Ok(Self { + transaction_id: crate::serialization::untrusted::decode_txid(decoder)?, + height_reported_not_locked: DecodeUntrusted::decode_untrusted(decoder)?, + }) + } +} +bincode::impl_borrow_decode_untrusted!(InvalidIdentityAssetLockProofChainLockValidationError); diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_error.rs index 344a55633df..9b372288b12 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_error.rs @@ -4,10 +4,18 @@ use crate::errors::ProtocolError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, Encode, Decode, PlatformSerialize, PlatformDeserialize, PartialEq, + Error, + Debug, + Clone, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + PartialEq, + DecodeUntrusted, )] #[error("Invalid asset lock transaction: {message}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_output_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_output_error.rs index 495f8d7e494..7b29f999d2b 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_output_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_output_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Asset lock output {output_index} is not a valid standard OP_RETURN output")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_transfer_amount_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_transfer_amount_error.rs index 7099006d3aa..4e2fc81979f 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_transfer_amount_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_transfer_amount_error.rs @@ -5,10 +5,19 @@ use thiserror::Error; use crate::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Credit transfer amount {amount} must be greater or equal to {min_amount}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_amount_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_amount_error.rs index 11b91aba7e7..128bd629950 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_amount_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_amount_error.rs @@ -5,10 +5,19 @@ use thiserror::Error; use crate::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Credit withdrawal amount {amount} must be greater or equal to {min_amount} and less than {max_amount}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs index cd61cf61fdf..1ebe03b8590 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs @@ -6,10 +6,19 @@ use thiserror::Error; use crate::identity::KeyID; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Identity key {public_key_id} has invalid signature")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs index 5e051fbe5f1..8fdeee5279b 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs @@ -3,12 +3,21 @@ use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::identity::KeyID; use crate::PublicKeyValidationError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Invalid identity public key {public_key_id:?} data: {validation_error:?}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs index 0ee3d80b8d0..473cb270f43 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs @@ -6,10 +6,19 @@ use thiserror::Error; use crate::identity::{KeyID, Purpose, SecurityLevel}; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Invalid identity public key {public_key_id:?} security level: purpose {purpose:?} allows only for {allowed_security_levels:?} security levels, but got {security_level:?}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_update_transition_disable_keys_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_update_transition_disable_keys_error.rs index 81bff1d14a2..64867f631c5 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_update_transition_disable_keys_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_update_transition_disable_keys_error.rs @@ -5,10 +5,19 @@ use thiserror::Error; use crate::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Identity Update Transition must specify timestamp when disabling keys")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_update_transition_empty_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_update_transition_empty_error.rs index 03048789878..efea9c67df6 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_update_transition_empty_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_update_transition_empty_error.rs @@ -5,10 +5,19 @@ use thiserror::Error; use crate::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Identity Update Transition neither contains new public keys or key ids to disable")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_error.rs index dabe336c605..7b7d65e33d7 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Invalid instant lock proof: {message}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_signature_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_signature_error.rs index 49403c91643..bef355b7c96 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_signature_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_signature_error.rs @@ -4,7 +4,7 @@ use crate::errors::ProtocolError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( Error, @@ -17,6 +17,7 @@ use bincode::{Decode, Encode}; Decode, PlatformSerialize, PlatformDeserialize, + DecodeUntrusted, )] #[error("Instant lock proof signature is invalid or wasn't created recently. Please try chain asset lock proof instead.")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_key_purpose_for_contract_bounds_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_key_purpose_for_contract_bounds_error.rs index 6014425b53c..02b9f9863ce 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_key_purpose_for_contract_bounds_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_key_purpose_for_contract_bounds_error.rs @@ -6,10 +6,19 @@ use thiserror::Error; use crate::consensus::ConsensusError; use crate::identity::Purpose; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Key purpose {given_key_purpose} is not allowed for contract bounds. Allowed purposes: {allowed_key_purposes:?}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/missing_master_public_key_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/missing_master_public_key_error.rs index aa1b95eccc7..a2e5c6cc5d2 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/missing_master_public_key_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/missing_master_public_key_error.rs @@ -4,7 +4,7 @@ use crate::errors::ProtocolError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( Error, @@ -17,6 +17,7 @@ use bincode::{Decode, Encode}; Decode, PlatformSerialize, PlatformDeserialize, + DecodeUntrusted, )] #[error( "Identity doesn't contain any master key, thus can not be updated. Please add a master key" diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/not_implemented_credit_withdrawal_transition_pooling_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/not_implemented_credit_withdrawal_transition_pooling_error.rs index b0738aaeffc..46655dd4629 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/not_implemented_credit_withdrawal_transition_pooling_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/not_implemented_credit_withdrawal_transition_pooling_error.rs @@ -5,10 +5,19 @@ use thiserror::Error; use crate::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "pooling {pooling:?} should be equal to 0. Other pooling mechanism are not implemented yet" diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/too_many_master_public_key_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/too_many_master_public_key_error.rs index 0b8bda2d2c0..80811cdad50 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/too_many_master_public_key_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/too_many_master_public_key_error.rs @@ -4,7 +4,7 @@ use crate::errors::ProtocolError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( Error, @@ -17,6 +17,7 @@ use bincode::{Decode, Encode}; Decode, PlatformSerialize, PlatformDeserialize, + DecodeUntrusted, )] #[error( "Identity is trying to be created with more than one master key. Please only use one master key." diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/withdrawal_output_script_not_allowed_when_signing_with_owner_key.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/withdrawal_output_script_not_allowed_when_signing_with_owner_key.rs index 70f4c68b5dc..5ba7b941b5c 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/withdrawal_output_script_not_allowed_when_signing_with_owner_key.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/withdrawal_output_script_not_allowed_when_signing_with_owner_key.rs @@ -7,10 +7,19 @@ use crate::consensus::ConsensusError; use crate::identity::core_script::CoreScript; use crate::identity::KeyID; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Withdrawal output script not allowed when signing with owner key {key_id}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/incompatible_protocol_version_error.rs b/packages/rs-dpp/src/errors/consensus/basic/incompatible_protocol_version_error.rs index 19a781fc37e..41bdd378497 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/incompatible_protocol_version_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/incompatible_protocol_version_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Protocol version {parsed_protocol_version:?} is not supported. Minimal supported protocol version is {minimal_protocol_version:?}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/invalid_identifier_error.rs b/packages/rs-dpp/src/errors/consensus/basic/invalid_identifier_error.rs index 72f9562a985..ffcb18d3723 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/invalid_identifier_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/invalid_identifier_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Invalid {identifier_name}: {message}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/json_schema_compilation_error.rs b/packages/rs-dpp/src/errors/consensus/basic/json_schema_compilation_error.rs index 5b40054e7f2..faff4600d02 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/json_schema_compilation_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/json_schema_compilation_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("JsonSchema compilation error: {compilation_error}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/json_schema_error/error.rs b/packages/rs-dpp/src/errors/consensus/basic/json_schema_error/error.rs index 780998dc297..a6280f4c42c 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/json_schema_error/error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/json_schema_error/error.rs @@ -3,7 +3,7 @@ use crate::consensus::basic::json_schema_error::error_data::JsonSchemaErrorData; use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[cfg(feature = "json-schema-validation")] use jsonschema::ValidationError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; @@ -13,7 +13,15 @@ use serde_json::Value as JsonValue; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("JsonSchemaError: {error_summary}, path: {instance_path}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/overflow_error.rs b/packages/rs-dpp/src/errors/consensus/basic/overflow_error.rs index 9d478a9123b..e6ba7c3a816 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/overflow_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/overflow_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Overflow error")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/fee_strategy_duplicate_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/fee_strategy_duplicate_error.rs index ea3585efc30..56d4bb0326e 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/fee_strategy_duplicate_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/fee_strategy_duplicate_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Fee strategy contains duplicate entries")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/fee_strategy_empty_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/fee_strategy_empty_error.rs index 55df295caca..338ef020b96 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/fee_strategy_empty_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/fee_strategy_empty_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Fee strategy must have at least one step")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/fee_strategy_index_out_of_bounds_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/fee_strategy_index_out_of_bounds_error.rs index 22d851c3878..2012145c4d8 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/fee_strategy_index_out_of_bounds_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/fee_strategy_index_out_of_bounds_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Fee strategy {strategy_type} index {index} is out of bounds (count: {count})")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/fee_strategy_too_many_steps_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/fee_strategy_too_many_steps_error.rs index 8d24436f351..5c2cb1356f8 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/fee_strategy_too_many_steps_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/fee_strategy_too_many_steps_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Fee strategy has {actual_steps} steps, maximum allowed is {max_steps}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/input_below_minimum_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/input_below_minimum_error.rs index 8b463e33ec2..7279f274b2d 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/input_below_minimum_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/input_below_minimum_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Input amount {input_amount} is below minimum {minimum_amount}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/input_output_balance_mismatch_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/input_output_balance_mismatch_error.rs index bc8e1961574..ac922088e6e 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/input_output_balance_mismatch_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/input_output_balance_mismatch_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Input and output credits must be equal: inputs={input_sum}, outputs={output_sum}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/input_witness_count_mismatch_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/input_witness_count_mismatch_error.rs index cf8eb4ac6cf..d4234e37ca6 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/input_witness_count_mismatch_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/input_witness_count_mismatch_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Number of inputs ({input_count}) does not match number of witnesses ({witness_count})")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/inputs_not_less_than_outputs_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/inputs_not_less_than_outputs_error.rs index 6a9b77e74af..42a909cfb8f 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/inputs_not_less_than_outputs_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/inputs_not_less_than_outputs_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Inputs must be less than outputs for identity funding: input_sum={input_sum} but should be at least minimum_difference={minimum_difference} less than output_sum={output_sum}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/insufficient_funding_amount_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/insufficient_funding_amount_error.rs index 54d3493646b..875912fe400 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/insufficient_funding_amount_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/insufficient_funding_amount_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Insufficient funding amount: funding_amount={funding_amount} is less than minimum={minimum_funding_amount}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/invalid_remainder_output_count_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/invalid_remainder_output_count_error.rs index 9c5a4d7d4f3..de8d4e2beca 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/invalid_remainder_output_count_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/invalid_remainder_output_count_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Exactly one output must have None value (remainder recipient), found {actual_count}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs index 0059dbcb1a6..4d7379a96c5 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Invalid State Transition type {transition_type}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs index 54e6ebc6dac..8fca99424ba 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs @@ -4,7 +4,7 @@ use crate::errors::ProtocolError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( Error, @@ -17,6 +17,7 @@ use bincode::{Decode, Encode}; Decode, PlatformSerialize, PlatformDeserialize, + DecodeUntrusted, )] #[error("State transition type is not present")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/output_address_also_input_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/output_address_also_input_error.rs index 041e14a9a56..30c54bf66c1 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/output_address_also_input_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/output_address_also_input_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Output address cannot also be an input address")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/output_below_minimum_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/output_below_minimum_error.rs index 89642e9f6fa..d2a5ff00a9c 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/output_below_minimum_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/output_below_minimum_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Output amount {output_amount} is below minimum {minimum_amount}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/outputs_not_greater_than_inputs_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/outputs_not_greater_than_inputs_error.rs index f00bda92c3c..49f86093843 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/outputs_not_greater_than_inputs_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/outputs_not_greater_than_inputs_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Outputs must be greater than inputs for asset lock funding: inputs={input_sum}, outputs={output_sum}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_empty_proof_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_empty_proof_error.rs index 93204cdd3bf..7bfee5c1196 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_empty_proof_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_empty_proof_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Shielded transition proof must not be empty")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_encrypted_note_size_mismatch_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_encrypted_note_size_mismatch_error.rs index e091503a933..655c804ecdb 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_encrypted_note_size_mismatch_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_encrypted_note_size_mismatch_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Shielded action encrypted_note has invalid size: expected {expected_size} bytes, got {actual_size} bytes" diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_implicit_fee_cap_exceeded_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_implicit_fee_cap_exceeded_error.rs index 23c6b1a4180..6d5baa373d2 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_implicit_fee_cap_exceeded_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_implicit_fee_cap_exceeded_error.rs @@ -2,12 +2,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::fee::Credits; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("asset-lock surplus {surplus} exceeds the implicit fee cap {cap}; set a surplus_output address to receive the remainder")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_invalid_denomination_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_invalid_denomination_error.rs index 99122c6862b..a038b0c0eba 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_invalid_denomination_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_invalid_denomination_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Invalid shielded identity-create denomination {denomination}: must be one of the allowed exit denominations")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_invalid_value_balance_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_invalid_value_balance_error.rs index 77cc5176e88..9182e6163d0 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_invalid_value_balance_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_invalid_value_balance_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Invalid shielded value_balance: {message}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_no_actions_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_no_actions_error.rs index c1ebe75b5f7..2e66ccf69a9 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_no_actions_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_no_actions_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Shielded transition must have at least one action")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_too_many_actions_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_too_many_actions_error.rs index 7b7218a79fd..a4bd9f99165 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_too_many_actions_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_too_many_actions_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Shielded transition has {actual_actions} actions, which exceeds the maximum allowed {max_actions}" diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_zero_anchor_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_zero_anchor_error.rs index 10761119e9c..0ec0cc27d62 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_zero_anchor_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_zero_anchor_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Shielded transition anchor must not be all zeros")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/state_transition_max_size_exceeded_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/state_transition_max_size_exceeded_error.rs index 8d33a1999d1..e6da0fbfd58 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/state_transition_max_size_exceeded_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/state_transition_max_size_exceeded_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("State transition size {actual_size_bytes} is more than maximum {max_size_bytes}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/state_transition_not_active_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/state_transition_not_active_error.rs index 735eb49be62..1ae107ac0d0 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/state_transition_not_active_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/state_transition_not_active_error.rs @@ -1,13 +1,22 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_version::version::ProtocolVersion; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "State transition type {state_transition_type} is not yet active. Current protocol version is {current_protocol_version}, required protocol version is {required_protocol_version}" diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/transition_no_inputs_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/transition_no_inputs_error.rs index 98c1238a83a..fe51c10857a 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/transition_no_inputs_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/transition_no_inputs_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("State transition must have at least one input")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/transition_no_outputs_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/transition_no_outputs_error.rs index f3e0d83f0a7..34de4140c01 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/transition_no_outputs_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/transition_no_outputs_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("State transition must have at least one output")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/transition_over_max_inputs_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/transition_over_max_inputs_error.rs index 172fe89c9c3..fcf8ab67c63 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/transition_over_max_inputs_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/transition_over_max_inputs_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "State transition has {actual_inputs} inputs, which exceeds the maximum allowed {max_inputs}" diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/transition_over_max_outputs_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/transition_over_max_outputs_error.rs index fb021845adf..2e6d45c5c87 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/transition_over_max_outputs_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/transition_over_max_outputs_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("State transition has {actual_outputs} outputs, which exceeds the maximum allowed {max_outputs}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/withdrawal_balance_mismatch_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/withdrawal_balance_mismatch_error.rs index 5df80f2350b..68f6c11adb8 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/withdrawal_balance_mismatch_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/withdrawal_balance_mismatch_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Withdrawal balance mismatch: inputs={input_sum} must equal output={output_sum} + withdrawal={withdrawal_amount}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/state_transition/withdrawal_below_min_amount_error.rs b/packages/rs-dpp/src/errors/consensus/basic/state_transition/withdrawal_below_min_amount_error.rs index 7372a9f184d..2b008714469 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/state_transition/withdrawal_below_min_amount_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/state_transition/withdrawal_below_min_amount_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Withdrawal amount {withdrawal_amount} must be at least {min_amount} and at most {max_amount}" diff --git a/packages/rs-dpp/src/errors/consensus/basic/token/choosing_token_mint_recipient_not_allowed_error.rs b/packages/rs-dpp/src/errors/consensus/basic/token/choosing_token_mint_recipient_not_allowed_error.rs index 9d5f2dfc901..1fe316a5d50 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/token/choosing_token_mint_recipient_not_allowed_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/token/choosing_token_mint_recipient_not_allowed_error.rs @@ -1,13 +1,22 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Choosing token mint recipient not allowed for token {}", token_id)] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/token/contract_has_no_tokens_error.rs b/packages/rs-dpp/src/errors/consensus/basic/token/contract_has_no_tokens_error.rs index 3fc49a2600a..c95be90cde1 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/token/contract_has_no_tokens_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/token/contract_has_no_tokens_error.rs @@ -1,13 +1,22 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Contract {} has no tokens", contract_id)] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/token/destination_identity_for_token_minting_not_set_error.rs b/packages/rs-dpp/src/errors/consensus/basic/token/destination_identity_for_token_minting_not_set_error.rs index 7136a46e66f..6116ab87010 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/token/destination_identity_for_token_minting_not_set_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/token/destination_identity_for_token_minting_not_set_error.rs @@ -1,13 +1,22 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Destination identity for minting not set for token {}", token_id)] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/token/invalid_action_id_error.rs b/packages/rs-dpp/src/errors/consensus/basic/token/invalid_action_id_error.rs index 51587ab3926..9aa3acd1ac1 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/token/invalid_action_id_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/token/invalid_action_id_error.rs @@ -2,11 +2,20 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::prelude::Identifier; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Invalid action id {}, expected {}", diff --git a/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_amount_error.rs b/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_amount_error.rs index 4cb99622467..99723e5e0a4 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_amount_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_amount_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Invalid token amount {}, should be between 1 and maximum allowed {}", diff --git a/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_config_update_no_change_error.rs b/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_config_update_no_change_error.rs index cb20e90e5b1..6b0767631a2 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_config_update_no_change_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_config_update_no_change_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Invalid token configuration update: no changes were made")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_distribution_block_interval_too_short_error.rs b/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_distribution_block_interval_too_short_error.rs index 4fbf382449c..52f182b5e23 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_distribution_block_interval_too_short_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_distribution_block_interval_too_short_error.rs @@ -2,12 +2,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::prelude::BlockHeightInterval; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("BlockBasedDistribution interval is too short: {interval}. It is below the network-required minimum.")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_distribution_time_interval_not_minute_aligned_error.rs b/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_distribution_time_interval_not_minute_aligned_error.rs index e67424c3b4f..fbd61e0c990 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_distribution_time_interval_not_minute_aligned_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_distribution_time_interval_not_minute_aligned_error.rs @@ -2,12 +2,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::prelude::TimestampMillisInterval; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("TimeBasedDistribution interval {interval} is not divisible by 60,000 ms (1 minute).")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_distribution_time_interval_too_short_error.rs b/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_distribution_time_interval_too_short_error.rs index f9f2aed9ba4..dd6db81104d 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_distribution_time_interval_too_short_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_distribution_time_interval_too_short_error.rs @@ -2,12 +2,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::prelude::TimestampMillisInterval; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("TimeBasedDistribution interval is too short: {interval}. Minimum allowed is 3,600,000 ms (1 hour).")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_id_error.rs b/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_id_error.rs index 635f126158f..86e971b61e5 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_id_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_id_error.rs @@ -2,11 +2,20 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::prelude::Identifier; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Invalid token id {}, expected {}", diff --git a/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_note_too_big_error.rs b/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_note_too_big_error.rs index 30e289021c8..d6d6b1ff1f4 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_note_too_big_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_note_too_big_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Invalid token note: '{}' is too long ({} bytes), max allowed is {} bytes", diff --git a/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_position_error.rs b/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_position_error.rs index e131d553cd1..0aac59b91f3 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_position_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_position_error.rs @@ -2,12 +2,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::data_contract::TokenContractPosition; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Invalid token position: {invalid_token_position}. {max_token_message}", diff --git a/packages/rs-dpp/src/errors/consensus/basic/token/missing_default_localization.rs b/packages/rs-dpp/src/errors/consensus/basic/token/missing_default_localization.rs index 71e444a26a2..3c6ff7cf619 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/token/missing_default_localization.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/token/missing_default_localization.rs @@ -1,11 +1,20 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Missing english ('en') localization which is using by default")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/token/token_note_only_allowed_on_proposer_error.rs b/packages/rs-dpp/src/errors/consensus/basic/token/token_note_only_allowed_on_proposer_error.rs index e4fe3991767..5dfd923bd45 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/token/token_note_only_allowed_on_proposer_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/token/token_note_only_allowed_on_proposer_error.rs @@ -1,12 +1,21 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Token note is only allowed when the signer is the proposer")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/token/token_pricing_schedule_empty_error.rs b/packages/rs-dpp/src/errors/consensus/basic/token/token_pricing_schedule_empty_error.rs index 93bc0d3aa72..171e2a74401 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/token/token_pricing_schedule_empty_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/token/token_pricing_schedule_empty_error.rs @@ -1,13 +1,22 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Token {} pricing schedule cannot be set to an empty set of prices", diff --git a/packages/rs-dpp/src/errors/consensus/basic/token/token_transfer_to_ourselves_error.rs b/packages/rs-dpp/src/errors/consensus/basic/token/token_transfer_to_ourselves_error.rs index dbd1ee747c1..3a125a9d006 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/token/token_transfer_to_ourselves_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/token/token_transfer_to_ourselves_error.rs @@ -1,13 +1,22 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Token transfer to the same identity is not allowed. Token ID: {}, Identity ID: {}", diff --git a/packages/rs-dpp/src/errors/consensus/basic/unsupported_feature_error.rs b/packages/rs-dpp/src/errors/consensus/basic/unsupported_feature_error.rs index 0a0c542e2b8..d9e055b9c4f 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/unsupported_feature_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/unsupported_feature_error.rs @@ -1,13 +1,22 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("feature {feature_name} is not supported. This validation was done in protocol version {current_protocol_version}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/unsupported_protocol_version_error.rs b/packages/rs-dpp/src/errors/consensus/basic/unsupported_protocol_version_error.rs index 610cc30c49a..1352efddf03 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/unsupported_protocol_version_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/unsupported_protocol_version_error.rs @@ -1,13 +1,22 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Protocol version {parsed_protocol_version:?} is not supported. Latest supported version is {latest_version:?}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/unsupported_version_error.rs b/packages/rs-dpp/src/errors/consensus/basic/unsupported_version_error.rs index 5ec01d3bdbb..e2264a35590 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/unsupported_version_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/unsupported_version_error.rs @@ -1,13 +1,22 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("version {received_version:?} is not supported. Supported versions are {min_version:?} to {max_version:?}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/basic/value_error.rs b/packages/rs-dpp/src/errors/consensus/basic/value_error.rs index 83f1b85cdb5..57a04bf2704 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/value_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/value_error.rs @@ -1,13 +1,22 @@ use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Error as PlatformValueError; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("{value_error}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/consensus_error.rs b/packages/rs-dpp/src/errors/consensus/consensus_error.rs index 008a8592b46..8b685a06b9e 100644 --- a/packages/rs-dpp/src/errors/consensus/consensus_error.rs +++ b/packages/rs-dpp/src/errors/consensus/consensus_error.rs @@ -1,6 +1,6 @@ use crate::errors::ProtocolError; use bincode; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use crate::consensus::state::state_error::StateError; @@ -24,6 +24,7 @@ use crate::errors::consensus::basic::BasicError; PlatformDeserialize, Clone, PartialEq, + DecodeUntrusted, )] #[platform_serialize(limit = 2000)] #[error(transparent)] diff --git a/packages/rs-dpp/src/errors/consensus/fee/balance_is_not_enough_error.rs b/packages/rs-dpp/src/errors/consensus/fee/balance_is_not_enough_error.rs index ceeb12ac2d0..819e77fdde5 100644 --- a/packages/rs-dpp/src/errors/consensus/fee/balance_is_not_enough_error.rs +++ b/packages/rs-dpp/src/errors/consensus/fee/balance_is_not_enough_error.rs @@ -6,10 +6,19 @@ use thiserror::Error; use crate::errors::ProtocolError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Current credits balance {balance} is not enough to pay {fee} fee")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/fee/fee_error.rs b/packages/rs-dpp/src/errors/consensus/fee/fee_error.rs index cc19ca60f2f..95c0c547e8e 100644 --- a/packages/rs-dpp/src/errors/consensus/fee/fee_error.rs +++ b/packages/rs-dpp/src/errors/consensus/fee/fee_error.rs @@ -1,13 +1,21 @@ use crate::errors::consensus::fee::balance_is_not_enough_error::BalanceIsNotEnoughError; use crate::errors::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use thiserror::Error; use crate::errors::ProtocolError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; #[derive( - Error, Debug, PartialEq, Encode, Decode, PlatformSerialize, PlatformDeserialize, Clone, + Error, + Debug, + PartialEq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + Clone, + DecodeUntrusted, )] pub enum FeeError { /* diff --git a/packages/rs-dpp/src/errors/consensus/signature/basic_bls_error.rs b/packages/rs-dpp/src/errors/consensus/signature/basic_bls_error.rs index dead2aff6dc..9ffc640b551 100644 --- a/packages/rs-dpp/src/errors/consensus/signature/basic_bls_error.rs +++ b/packages/rs-dpp/src/errors/consensus/signature/basic_bls_error.rs @@ -4,7 +4,7 @@ use crate::errors::ProtocolError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( Error, @@ -17,6 +17,7 @@ use bincode::{Decode, Encode}; Decode, PlatformSerialize, PlatformDeserialize, + DecodeUntrusted, )] #[error("bls signing error {message}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/signature/basic_ecdsa_error.rs b/packages/rs-dpp/src/errors/consensus/signature/basic_ecdsa_error.rs index eb1ea64348e..3133ade4f74 100644 --- a/packages/rs-dpp/src/errors/consensus/signature/basic_ecdsa_error.rs +++ b/packages/rs-dpp/src/errors/consensus/signature/basic_ecdsa_error.rs @@ -4,7 +4,7 @@ use crate::errors::ProtocolError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( Error, @@ -17,6 +17,7 @@ use bincode::{Decode, Encode}; Decode, PlatformSerialize, PlatformDeserialize, + DecodeUntrusted, )] #[error("ecdsa signing error {message}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/signature/identity_not_found_error.rs b/packages/rs-dpp/src/errors/consensus/signature/identity_not_found_error.rs index daf90820bdd..9450e690b10 100644 --- a/packages/rs-dpp/src/errors/consensus/signature/identity_not_found_error.rs +++ b/packages/rs-dpp/src/errors/consensus/signature/identity_not_found_error.rs @@ -7,10 +7,19 @@ use crate::prelude::Identifier; use crate::errors::ProtocolError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Identity {identity_id} not found")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/signature/invalid_identity_public_key_type_error.rs b/packages/rs-dpp/src/errors/consensus/signature/invalid_identity_public_key_type_error.rs index b5b8365e731..e15d271bda1 100644 --- a/packages/rs-dpp/src/errors/consensus/signature/invalid_identity_public_key_type_error.rs +++ b/packages/rs-dpp/src/errors/consensus/signature/invalid_identity_public_key_type_error.rs @@ -7,10 +7,19 @@ use crate::identity::KeyType; use crate::errors::ProtocolError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Unsupported signature type {public_key_type}. Please use ECDSA (0), BLS (1) or ECDSA_HASH160 (2) keys to sign the state transition")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/signature/invalid_signature_public_key_purpose_error.rs b/packages/rs-dpp/src/errors/consensus/signature/invalid_signature_public_key_purpose_error.rs index 1477f7b1d9d..235237ad805 100644 --- a/packages/rs-dpp/src/errors/consensus/signature/invalid_signature_public_key_purpose_error.rs +++ b/packages/rs-dpp/src/errors/consensus/signature/invalid_signature_public_key_purpose_error.rs @@ -7,11 +7,20 @@ use crate::identity::Purpose; use crate::errors::ProtocolError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use itertools::Itertools; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Invalid public key purpose {public_key_purpose}. The state transition requires {}", allowed_key_purposes.iter().map(|s| s.to_string()).join(" | "))] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/signature/invalid_signature_public_key_security_level_error.rs b/packages/rs-dpp/src/errors/consensus/signature/invalid_signature_public_key_security_level_error.rs index cb295903a38..14d7620ce1c 100644 --- a/packages/rs-dpp/src/errors/consensus/signature/invalid_signature_public_key_security_level_error.rs +++ b/packages/rs-dpp/src/errors/consensus/signature/invalid_signature_public_key_security_level_error.rs @@ -8,10 +8,19 @@ use crate::identity::SecurityLevel; use crate::errors::ProtocolError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Invalid public key security level {public_key_security_level}. The state transition requires one of {}", allowed_key_security_levels.iter().map(|s| s.to_string()).join(" | "))] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/signature/invalid_state_transition_signature_error.rs b/packages/rs-dpp/src/errors/consensus/signature/invalid_state_transition_signature_error.rs index 4c179a63f3d..ba97415fd78 100644 --- a/packages/rs-dpp/src/errors/consensus/signature/invalid_state_transition_signature_error.rs +++ b/packages/rs-dpp/src/errors/consensus/signature/invalid_state_transition_signature_error.rs @@ -1,7 +1,7 @@ use crate::consensus::signature::signature_error::SignatureError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; @@ -16,6 +16,7 @@ use thiserror::Error; Decode, PlatformSerialize, PlatformDeserialize, + DecodeUntrusted, )] #[error("Invalid State Transition signature")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/signature/missing_public_key_error.rs b/packages/rs-dpp/src/errors/consensus/signature/missing_public_key_error.rs index 10775e1ea69..a6827205e16 100644 --- a/packages/rs-dpp/src/errors/consensus/signature/missing_public_key_error.rs +++ b/packages/rs-dpp/src/errors/consensus/signature/missing_public_key_error.rs @@ -7,10 +7,19 @@ use crate::identity::KeyID; use crate::errors::ProtocolError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Public key {public_key_id} doesn't exist")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/signature/public_key_is_disabled_error.rs b/packages/rs-dpp/src/errors/consensus/signature/public_key_is_disabled_error.rs index 16408ff1586..b6158ee3a33 100644 --- a/packages/rs-dpp/src/errors/consensus/signature/public_key_is_disabled_error.rs +++ b/packages/rs-dpp/src/errors/consensus/signature/public_key_is_disabled_error.rs @@ -6,10 +6,19 @@ use crate::errors::ProtocolError; use crate::identity::KeyID; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Identity key {public_key_id} is disabled")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/signature/public_key_security_level_not_met_error.rs b/packages/rs-dpp/src/errors/consensus/signature/public_key_security_level_not_met_error.rs index 96382271ef8..030709f145a 100644 --- a/packages/rs-dpp/src/errors/consensus/signature/public_key_security_level_not_met_error.rs +++ b/packages/rs-dpp/src/errors/consensus/signature/public_key_security_level_not_met_error.rs @@ -7,10 +7,19 @@ use crate::identity::SecurityLevel; use crate::errors::ProtocolError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Invalid security level {public_key_security_level}. This state transition requires at least {required_security_level}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/signature/signature_error.rs b/packages/rs-dpp/src/errors/consensus/signature/signature_error.rs index 72b0e7afb1a..7141c605797 100644 --- a/packages/rs-dpp/src/errors/consensus/signature/signature_error.rs +++ b/packages/rs-dpp/src/errors/consensus/signature/signature_error.rs @@ -6,7 +6,7 @@ use crate::consensus::signature::{ WrongPublicKeyPurposeError, }; use crate::consensus::ConsensusError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use thiserror::Error; use crate::consensus::signature::invalid_signature_public_key_purpose_error::InvalidSignaturePublicKeyPurposeError; @@ -14,7 +14,15 @@ use crate::errors::ProtocolError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; #[derive( - Error, Debug, PartialEq, Encode, Decode, PlatformSerialize, PlatformDeserialize, Clone, + Error, + Debug, + PartialEq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + Clone, + DecodeUntrusted, )] pub enum SignatureError { /* diff --git a/packages/rs-dpp/src/errors/consensus/signature/signature_should_not_be_present_error.rs b/packages/rs-dpp/src/errors/consensus/signature/signature_should_not_be_present_error.rs index f96c9d05a84..f8121cfb391 100644 --- a/packages/rs-dpp/src/errors/consensus/signature/signature_should_not_be_present_error.rs +++ b/packages/rs-dpp/src/errors/consensus/signature/signature_should_not_be_present_error.rs @@ -4,7 +4,7 @@ use crate::errors::ProtocolError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( Error, @@ -17,6 +17,7 @@ use bincode::{Decode, Encode}; Decode, PlatformSerialize, PlatformDeserialize, + DecodeUntrusted, )] #[error("signature should be empty {message}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/signature/uncompressed_public_key_not_allowed_error.rs b/packages/rs-dpp/src/errors/consensus/signature/uncompressed_public_key_not_allowed_error.rs index f4e5434a65d..6f9e5f30a50 100644 --- a/packages/rs-dpp/src/errors/consensus/signature/uncompressed_public_key_not_allowed_error.rs +++ b/packages/rs-dpp/src/errors/consensus/signature/uncompressed_public_key_not_allowed_error.rs @@ -1,12 +1,21 @@ use crate::consensus::signature::signature_error::SignatureError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Uncompressed public keys are not allowed: expected 33 bytes (compressed), got {public_key_size} bytes")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/signature/wrong_public_key_purpose_error.rs b/packages/rs-dpp/src/errors/consensus/signature/wrong_public_key_purpose_error.rs index 4ea2b0c246c..01d877a3868 100644 --- a/packages/rs-dpp/src/errors/consensus/signature/wrong_public_key_purpose_error.rs +++ b/packages/rs-dpp/src/errors/consensus/signature/wrong_public_key_purpose_error.rs @@ -7,11 +7,20 @@ use crate::identity::Purpose; use crate::errors::ProtocolError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use itertools::Itertools; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Invalid identity key purpose {public_key_purpose}. This state transition requires {}", allowed_key_purposes.iter().map(|s| s.to_string()).join(" | "))] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/address_funds/address_does_not_exist_error.rs b/packages/rs-dpp/src/errors/consensus/state/address_funds/address_does_not_exist_error.rs index 8e798206fe7..9d150bfb947 100644 --- a/packages/rs-dpp/src/errors/consensus/state/address_funds/address_does_not_exist_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/address_funds/address_does_not_exist_error.rs @@ -2,12 +2,21 @@ use crate::address_funds::PlatformAddress; use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[platform_serialize(unversioned)] #[error("Address does not exist: {address}")] diff --git a/packages/rs-dpp/src/errors/consensus/state/address_funds/address_invalid_nonce_error.rs b/packages/rs-dpp/src/errors/consensus/state/address_funds/address_invalid_nonce_error.rs index bb6eedbbac6..91cafe99bfb 100644 --- a/packages/rs-dpp/src/errors/consensus/state/address_funds/address_invalid_nonce_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/address_funds/address_invalid_nonce_error.rs @@ -3,12 +3,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::prelude::AddressNonce; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Invalid address nonce for {address}: expected {expected_nonce}, got {provided_nonce}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/address_funds/address_not_enough_funds_error.rs b/packages/rs-dpp/src/errors/consensus/state/address_funds/address_not_enough_funds_error.rs index 7d49d154eb1..8b6e2c7dde9 100644 --- a/packages/rs-dpp/src/errors/consensus/state/address_funds/address_not_enough_funds_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/address_funds/address_not_enough_funds_error.rs @@ -3,12 +3,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::fee::Credits; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Insufficient address balance for {address}: has {balance}, requires at least {required_balance}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/address_funds/addresses_not_enough_funds_error.rs b/packages/rs-dpp/src/errors/consensus/state/address_funds/addresses_not_enough_funds_error.rs index 10b2501db61..93cae4c1aaa 100644 --- a/packages/rs-dpp/src/errors/consensus/state/address_funds/addresses_not_enough_funds_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/address_funds/addresses_not_enough_funds_error.rs @@ -4,13 +4,22 @@ use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::fee::Credits; use crate::prelude::AddressNonce; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use std::collections::BTreeMap; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Insufficient combined address balances: total available is less than required {required_balance}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs b/packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs index a24ee194136..4eddcf0f5de 100644 --- a/packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Data Contract {data_contract_id} is already present")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_config_update_error.rs b/packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_config_update_error.rs index 19ad1b90754..d5c067df68d 100644 --- a/packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_config_update_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_config_update_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Can't update Data Contract {data_contract_id} config: {additional_message}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_is_readonly_error.rs b/packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_is_readonly_error.rs index fded770a5fc..24d811aefda 100644 --- a/packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_is_readonly_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_is_readonly_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Can't update document schemas in the Data Contract {data_contract_id}: Data Contract is readonly")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_not_found_error.rs b/packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_not_found_error.rs index 1f11adbf086..7d585dc4ad0 100644 --- a/packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_not_found_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_not_found_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[platform_serialize(unversioned)] #[error("Data contract not found for id: {data_contract_id}")] diff --git a/packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_update_action_not_allowed_error.rs b/packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_update_action_not_allowed_error.rs index 0064bc5923a..ee305bdca7a 100644 --- a/packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_update_action_not_allowed_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_update_action_not_allowed_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Action '{action}' is not allowed on Data Contract {data_contract_id}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_update_permission_error.rs b/packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_update_permission_error.rs index 73cafe6de32..b2e8734f8cb 100644 --- a/packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_update_permission_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_update_permission_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Identity {identity_id} doesn't have permissions to update Data Contract {data_contract_id}" diff --git a/packages/rs-dpp/src/errors/consensus/state/data_contract/document_type_update_error.rs b/packages/rs-dpp/src/errors/consensus/state/data_contract/document_type_update_error.rs index a18c21f0c71..e59f338b05a 100644 --- a/packages/rs-dpp/src/errors/consensus/state/data_contract/document_type_update_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/data_contract/document_type_update_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Can't update Document Type {data_contract_id}::{document_type_name}: {additional_message}" diff --git a/packages/rs-dpp/src/errors/consensus/state/data_trigger/data_trigger_condition_error.rs b/packages/rs-dpp/src/errors/consensus/state/data_trigger/data_trigger_condition_error.rs index 9f0c216588e..392b4b6b282 100644 --- a/packages/rs-dpp/src/errors/consensus/state/data_trigger/data_trigger_condition_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/data_trigger/data_trigger_condition_error.rs @@ -6,10 +6,19 @@ use platform_value::Identifier; use thiserror::Error; use crate::consensus::state::data_trigger::DataTriggerError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("{message}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/data_trigger/data_trigger_execution_error.rs b/packages/rs-dpp/src/errors/consensus/state/data_trigger/data_trigger_execution_error.rs index f8bc1b46cf2..a3ecae701ed 100644 --- a/packages/rs-dpp/src/errors/consensus/state/data_trigger/data_trigger_execution_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/data_trigger/data_trigger_execution_error.rs @@ -6,10 +6,19 @@ use platform_value::Identifier; use thiserror::Error; use crate::consensus::state::data_trigger::DataTriggerError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("{message}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/data_trigger/data_trigger_invalid_result_error.rs b/packages/rs-dpp/src/errors/consensus/state/data_trigger/data_trigger_invalid_result_error.rs index 35f06d3ff93..365be6ee534 100644 --- a/packages/rs-dpp/src/errors/consensus/state/data_trigger/data_trigger_invalid_result_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/data_trigger/data_trigger_invalid_result_error.rs @@ -6,10 +6,19 @@ use platform_value::Identifier; use thiserror::Error; use crate::consensus::state::data_trigger::DataTriggerError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Data trigger have not returned any result")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/data_trigger/mod.rs b/packages/rs-dpp/src/errors/consensus/state/data_trigger/mod.rs index e43de444588..ea0b9890cc8 100644 --- a/packages/rs-dpp/src/errors/consensus/state/data_trigger/mod.rs +++ b/packages/rs-dpp/src/errors/consensus/state/data_trigger/mod.rs @@ -4,7 +4,7 @@ use crate::consensus::state::data_trigger::data_trigger_invalid_result_error::Da use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; @@ -13,7 +13,15 @@ pub mod data_trigger_execution_error; pub mod data_trigger_invalid_result_error; #[derive( - Error, Debug, PartialEq, Encode, Decode, PlatformSerialize, PlatformDeserialize, Clone, + Error, + Debug, + PartialEq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + Clone, + DecodeUntrusted, )] pub enum DataTriggerError { /* diff --git a/packages/rs-dpp/src/errors/consensus/state/document/document_already_present_error.rs b/packages/rs-dpp/src/errors/consensus/state/document/document_already_present_error.rs index 05a91fd4e4c..590d71283cc 100644 --- a/packages/rs-dpp/src/errors/consensus/state/document/document_already_present_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/document/document_already_present_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Document {document_id} is already present")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/document/document_contest_currently_locked_error.rs b/packages/rs-dpp/src/errors/consensus/state/document/document_contest_currently_locked_error.rs index 289d21a357a..e9ebe774ec3 100644 --- a/packages/rs-dpp/src/errors/consensus/state/document/document_contest_currently_locked_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/document/document_contest_currently_locked_error.rs @@ -3,12 +3,20 @@ use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::voting::vote_info_storage::contested_document_vote_poll_stored_info::ContestedDocumentVotePollStoredInfo; use crate::voting::vote_polls::contested_document_resource_vote_poll::ContestedDocumentResourceVotePoll; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Document Contest for vote_poll {vote_poll} is currently already locked {stored_info}, unlocking is possible by paying {unlock_cost} credits")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/document/document_contest_document_with_same_id_already_present_error.rs b/packages/rs-dpp/src/errors/consensus/state/document/document_contest_document_with_same_id_already_present_error.rs index 7ddd37b52f3..fcbd5e41e05 100644 --- a/packages/rs-dpp/src/errors/consensus/state/document/document_contest_document_with_same_id_already_present_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/document/document_contest_document_with_same_id_already_present_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Document {document_id} is already present in a contest, entropy might be being reused")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/document/document_contest_identity_already_contestant.rs b/packages/rs-dpp/src/errors/consensus/state/document/document_contest_identity_already_contestant.rs index 1f2cf0a14dc..37f8084affd 100644 --- a/packages/rs-dpp/src/errors/consensus/state/document/document_contest_identity_already_contestant.rs +++ b/packages/rs-dpp/src/errors/consensus/state/document/document_contest_identity_already_contestant.rs @@ -2,13 +2,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::voting::vote_polls::contested_document_resource_vote_poll::ContestedDocumentResourceVotePoll; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "An Identity with the id {identity_id} is already a contestant for the vote_poll {vote_poll}" diff --git a/packages/rs-dpp/src/errors/consensus/state/document/document_contest_index_mismatch_error.rs b/packages/rs-dpp/src/errors/consensus/state/document/document_contest_index_mismatch_error.rs index 87861b5bf1b..a9735da4a26 100644 --- a/packages/rs-dpp/src/errors/consensus/state/document/document_contest_index_mismatch_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/document/document_contest_index_mismatch_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Contest for document {document_id} prefunded the voting balance of index {provided_index_name}, but the contested index resolved for this document is {expected_index_name}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/document/document_contest_not_joinable_error.rs b/packages/rs-dpp/src/errors/consensus/state/document/document_contest_not_joinable_error.rs index 01abd52d675..a57d77d5514 100644 --- a/packages/rs-dpp/src/errors/consensus/state/document/document_contest_not_joinable_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/document/document_contest_not_joinable_error.rs @@ -4,12 +4,20 @@ use crate::errors::ProtocolError; use crate::prelude::TimestampMillis; use crate::voting::vote_info_storage::contested_document_vote_poll_stored_info::ContestedDocumentVotePollStoredInfo; use crate::voting::vote_polls::contested_document_resource_vote_poll::ContestedDocumentResourceVotePoll; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Document Contest for vote_poll {vote_poll} is not joinable {stored_info}, it started {start_time} and it is now {current_time}, and you can only join for {joinable_time}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/document/document_contest_not_paid_for_error.rs b/packages/rs-dpp/src/errors/consensus/state/document/document_contest_not_paid_for_error.rs index 9e6138c7a5d..d85ea65d42c 100644 --- a/packages/rs-dpp/src/errors/consensus/state/document/document_contest_not_paid_for_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/document/document_contest_not_paid_for_error.rs @@ -2,13 +2,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::fee::Credits; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Contest for document {document_id} was not paid for, needs payment of {expected_amount} Credits")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/document/document_contest_not_required_error.rs b/packages/rs-dpp/src/errors/consensus/state/document/document_contest_not_required_error.rs index bb5346b58e0..1c1e0b261d8 100644 --- a/packages/rs-dpp/src/errors/consensus/state/document/document_contest_not_required_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/document/document_contest_not_required_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Document {document_id} prefunded the voting balance of index {provided_index_name}, but this document does not resolve to a contested index")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/document/document_incorrect_purchase_price_error.rs b/packages/rs-dpp/src/errors/consensus/state/document/document_incorrect_purchase_price_error.rs index 5e726c5cbef..58272d07924 100644 --- a/packages/rs-dpp/src/errors/consensus/state/document/document_incorrect_purchase_price_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/document/document_incorrect_purchase_price_error.rs @@ -2,13 +2,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::fee::Credits; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("{document_id} document can not be purchased for {trying_to_purchase_at_price}, it's sale price is {actual_price} (in credits)")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/document/document_not_for_sale_error.rs b/packages/rs-dpp/src/errors/consensus/state/document/document_not_for_sale_error.rs index 1304477355f..1398a7752ed 100644 --- a/packages/rs-dpp/src/errors/consensus/state/document/document_not_for_sale_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/document/document_not_for_sale_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("{document_id} document not for sale")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/document/document_not_found_error.rs b/packages/rs-dpp/src/errors/consensus/state/document/document_not_found_error.rs index 81f284a70c6..799a9a2aaa7 100644 --- a/packages/rs-dpp/src/errors/consensus/state/document/document_not_found_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/document/document_not_found_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("{document_id} document not found")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/document/document_owner_id_mismatch_error.rs b/packages/rs-dpp/src/errors/consensus/state/document/document_owner_id_mismatch_error.rs index ee71485e4c5..8230b8b1b29 100644 --- a/packages/rs-dpp/src/errors/consensus/state/document/document_owner_id_mismatch_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/document/document_owner_id_mismatch_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Provided document {document_id} owner ID {document_owner_id} mismatch with existing {existing_document_owner_id}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs b/packages/rs-dpp/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs index 174bc1243d6..7dd84214f12 100644 --- a/packages/rs-dpp/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Document {document_id} {timestamp_name} timestamp {timestamp} are out of block time window from {time_window_start} and {time_window_end}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/document/document_timestamps_are_equal_error.rs b/packages/rs-dpp/src/errors/consensus/state/document/document_timestamps_are_equal_error.rs index 5ee92b503a6..fb28b626450 100644 --- a/packages/rs-dpp/src/errors/consensus/state/document/document_timestamps_are_equal_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/document/document_timestamps_are_equal_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Document {document_id} createdAt and updatedAt should not be equal")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/document/document_timestamps_mismatch_error.rs b/packages/rs-dpp/src/errors/consensus/state/document/document_timestamps_mismatch_error.rs index 5ccf950b2b5..e34f187fd50 100644 --- a/packages/rs-dpp/src/errors/consensus/state/document/document_timestamps_mismatch_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/document/document_timestamps_mismatch_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Document {document_id} createdAt and updatedAt timestamps are not equal")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/document/duplicate_unique_index_error.rs b/packages/rs-dpp/src/errors/consensus/state/document/duplicate_unique_index_error.rs index 60b704b4b2b..e72ae6de9d0 100644 --- a/packages/rs-dpp/src/errors/consensus/state/document/duplicate_unique_index_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/document/duplicate_unique_index_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Document {document_id} has duplicate unique properties {duplicating_properties:?} with other documents")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/document/invalid_document_revision_error.rs b/packages/rs-dpp/src/errors/consensus/state/document/invalid_document_revision_error.rs index ea88528c893..1dcf15b600e 100644 --- a/packages/rs-dpp/src/errors/consensus/state/document/invalid_document_revision_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/document/invalid_document_revision_error.rs @@ -2,13 +2,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::prelude::Revision; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Document {document_id} has invalid revision {previous_revision:?}. The desired revision is {desired_revision}" diff --git a/packages/rs-dpp/src/errors/consensus/state/document/referenced_document_property_agreement_invalid_error.rs b/packages/rs-dpp/src/errors/consensus/state/document/referenced_document_property_agreement_invalid_error.rs index 775e1932554..549eb778d28 100644 --- a/packages/rs-dpp/src/errors/consensus/state/document/referenced_document_property_agreement_invalid_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/document/referenced_document_property_agreement_invalid_error.rs @@ -1,12 +1,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("invalid propertyAgreement pair {referring_property} -> {referenced_property} declared at {path}: {reason}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/document/referenced_document_property_mismatch_error.rs b/packages/rs-dpp/src/errors/consensus/state/document/referenced_document_property_mismatch_error.rs index 2a5f1fae601..0222eeb2ad6 100644 --- a/packages/rs-dpp/src/errors/consensus/state/document/referenced_document_property_mismatch_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/document/referenced_document_property_mismatch_error.rs @@ -1,12 +1,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("the document's {referring_property} does not agree with the referenced document's {referenced_property} (propertyAgreement on {path})")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/document/referenced_document_type_deletable_error.rs b/packages/rs-dpp/src/errors/consensus/state/document/referenced_document_type_deletable_error.rs index c8a300dbb60..244f5f30cc0 100644 --- a/packages/rs-dpp/src/errors/consensus/state/document/referenced_document_type_deletable_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/document/referenced_document_type_deletable_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("documents of referenced document type {document_type_name} in contract {contract_id} can be deleted; a permanentDocument reference at path {path} requires a document type with canBeDeleted: false")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/document/referenced_document_type_not_found_error.rs b/packages/rs-dpp/src/errors/consensus/state/document/referenced_document_type_not_found_error.rs index 0981f9ebc3c..89b36616e03 100644 --- a/packages/rs-dpp/src/errors/consensus/state/document/referenced_document_type_not_found_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/document/referenced_document_type_not_found_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("referenced document type {document_type_name} not found in contract {contract_id} for path {path}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/document/referenced_entity_not_found_error.rs b/packages/rs-dpp/src/errors/consensus/state/document/referenced_entity_not_found_error.rs index 7628c155ae9..cb7dbe5133f 100644 --- a/packages/rs-dpp/src/errors/consensus/state/document/referenced_entity_not_found_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/document/referenced_entity_not_found_error.rs @@ -2,13 +2,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::data_contract::document_type::DocumentPropertyReferenceTarget; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("referenced {entity_type} {entity_id} not found for path {path}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/document/referenced_identity_key_disabled_error.rs b/packages/rs-dpp/src/errors/consensus/state/document/referenced_identity_key_disabled_error.rs index e006c18f7ac..2bb3fae9fd5 100644 --- a/packages/rs-dpp/src/errors/consensus/state/document/referenced_identity_key_disabled_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/document/referenced_identity_key_disabled_error.rs @@ -2,13 +2,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::identity::KeyID; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("referenced public key {key_id} of identity {identity_id} is disabled for path {path}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/document/referenced_identity_key_not_found_error.rs b/packages/rs-dpp/src/errors/consensus/state/document/referenced_identity_key_not_found_error.rs index 95726dc4493..777fc00c71a 100644 --- a/packages/rs-dpp/src/errors/consensus/state/document/referenced_identity_key_not_found_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/document/referenced_identity_key_not_found_error.rs @@ -2,13 +2,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::identity::KeyID; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("referenced public key {key_id} of identity {identity_id} not found for path {path}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/document/referenced_key_id_property_invalid_error.rs b/packages/rs-dpp/src/errors/consensus/state/document/referenced_key_id_property_invalid_error.rs index 3ea50009562..32799439f2f 100644 --- a/packages/rs-dpp/src/errors/consensus/state/document/referenced_key_id_property_invalid_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/document/referenced_key_id_property_invalid_error.rs @@ -1,12 +1,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("keyIdProperty {key_id_property} referenced at path {path} is invalid: {message}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/group/group_action_already_completed_error.rs b/packages/rs-dpp/src/errors/consensus/state/group/group_action_already_completed_error.rs index 2d700d72a3f..d4148b45c40 100644 --- a/packages/rs-dpp/src/errors/consensus/state/group/group_action_already_completed_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/group/group_action_already_completed_error.rs @@ -2,12 +2,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::data_contract::GroupContractPosition; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Group action has already been completed for data contract {} at group position {} with action ID {}", diff --git a/packages/rs-dpp/src/errors/consensus/state/group/group_action_already_signed_by_identity_error.rs b/packages/rs-dpp/src/errors/consensus/state/group/group_action_already_signed_by_identity_error.rs index 1fcdbf0419c..06ed40ddba5 100644 --- a/packages/rs-dpp/src/errors/consensus/state/group/group_action_already_signed_by_identity_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/group/group_action_already_signed_by_identity_error.rs @@ -2,13 +2,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::data_contract::GroupContractPosition; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Group action with action ID {} has already been signed by identity {} for data contract {} at group position {}", diff --git a/packages/rs-dpp/src/errors/consensus/state/group/group_action_does_not_exist_error.rs b/packages/rs-dpp/src/errors/consensus/state/group/group_action_does_not_exist_error.rs index c57af3cc4d2..18e630bcdf0 100644 --- a/packages/rs-dpp/src/errors/consensus/state/group/group_action_does_not_exist_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/group/group_action_does_not_exist_error.rs @@ -2,13 +2,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::data_contract::GroupContractPosition; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Group action does not exist for data contract {} at group position {} with action ID {}", diff --git a/packages/rs-dpp/src/errors/consensus/state/group/identity_for_group_not_found_error.rs b/packages/rs-dpp/src/errors/consensus/state/group/identity_for_group_not_found_error.rs index bbede322c3b..22af43be47b 100644 --- a/packages/rs-dpp/src/errors/consensus/state/group/identity_for_group_not_found_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/group/identity_for_group_not_found_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("identity {member_id} was not found in group at position {group_position} in contract {contract_id}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/group/identity_not_member_of_group_error.rs b/packages/rs-dpp/src/errors/consensus/state/group/identity_not_member_of_group_error.rs index afd5bf06ffb..e3767d286ba 100644 --- a/packages/rs-dpp/src/errors/consensus/state/group/identity_not_member_of_group_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/group/identity_not_member_of_group_error.rs @@ -2,13 +2,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::data_contract::GroupContractPosition; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Identity {} is not a member of the group for data contract {} at position {}", diff --git a/packages/rs-dpp/src/errors/consensus/state/group/modification_of_group_action_main_parameters_not_permitted_error.rs b/packages/rs-dpp/src/errors/consensus/state/group/modification_of_group_action_main_parameters_not_permitted_error.rs index ff710ddb376..0bf1ff6780c 100644 --- a/packages/rs-dpp/src/errors/consensus/state/group/modification_of_group_action_main_parameters_not_permitted_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/group/modification_of_group_action_main_parameters_not_permitted_error.rs @@ -1,12 +1,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Modification of group action main parameters is not permitted.\n\ diff --git a/packages/rs-dpp/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs b/packages/rs-dpp/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs index a4903455884..f4b253d1623 100644 --- a/packages/rs-dpp/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs @@ -2,12 +2,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::identity::KeyID; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Duplicated public keys ids {duplicated_ids:?} found")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs b/packages/rs-dpp/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs index f8631cb2e86..56976fe4392 100644 --- a/packages/rs-dpp/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs @@ -2,12 +2,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::identity::KeyID; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Duplicated public keys {duplicated_public_key_ids:?} found")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/identity/identity_already_exists_error.rs b/packages/rs-dpp/src/errors/consensus/state/identity/identity_already_exists_error.rs index b07f91df7a2..b3ced8e507b 100644 --- a/packages/rs-dpp/src/errors/consensus/state/identity/identity_already_exists_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/identity/identity_already_exists_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Identity {identity_id:?} already exists")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/identity/identity_for_token_configuration_not_found_error.rs b/packages/rs-dpp/src/errors/consensus/state/identity/identity_for_token_configuration_not_found_error.rs index 374a33f56b8..da66556db8c 100644 --- a/packages/rs-dpp/src/errors/consensus/state/identity/identity_for_token_configuration_not_found_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/identity/identity_for_token_configuration_not_found_error.rs @@ -1,12 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; -#[derive(Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize)] +#[derive( + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, +)] #[platform_serialize(unversioned)] pub enum TokenConfigurationIdentityContext { ChangeControlRule(String), @@ -16,7 +26,16 @@ pub enum TokenConfigurationIdentityContext { } #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Identity {identity_id} required in token position {token_position} of contract {contract_id} for {context:?} does not exist")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/identity/identity_insufficient_balance_error.rs b/packages/rs-dpp/src/errors/consensus/state/identity/identity_insufficient_balance_error.rs index 0d308f7981a..12be3a2e6a7 100644 --- a/packages/rs-dpp/src/errors/consensus/state/identity/identity_insufficient_balance_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/identity/identity_insufficient_balance_error.rs @@ -6,10 +6,19 @@ use thiserror::Error; use crate::prelude::Identifier; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Insufficient identity {identity_id} balance {balance} required {required_balance}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/identity/identity_public_key_already_exists_for_unique_contract_bounds_error.rs b/packages/rs-dpp/src/errors/consensus/state/identity/identity_public_key_already_exists_for_unique_contract_bounds_error.rs index ec206efcac6..770f1a7761c 100644 --- a/packages/rs-dpp/src/errors/consensus/state/identity/identity_public_key_already_exists_for_unique_contract_bounds_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/identity/identity_public_key_already_exists_for_unique_contract_bounds_error.rs @@ -2,13 +2,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::identity::{KeyID, Purpose}; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Identity Public Key with id {new_key_id} for identity {identity_id:?} conflicts for purpose {purpose} with key {old_key_id} in the contract bounds of {contract_id:?}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs b/packages/rs-dpp/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs index efbaff0629d..431b2cc911b 100644 --- a/packages/rs-dpp/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs @@ -2,12 +2,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::identity::KeyID; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Identity Public Key #{public_key_index} is disabled")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs b/packages/rs-dpp/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs index d60d5250b0e..fc2c1dbd56f 100644 --- a/packages/rs-dpp/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs @@ -2,12 +2,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::identity::KeyID; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Identity Public Key #{public_key_index} is read only")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/identity/identity_to_freeze_does_not_exist_error.rs b/packages/rs-dpp/src/errors/consensus/state/identity/identity_to_freeze_does_not_exist_error.rs index 6e5f1d9aedd..1d56d6b6197 100644 --- a/packages/rs-dpp/src/errors/consensus/state/identity/identity_to_freeze_does_not_exist_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/identity/identity_to_freeze_does_not_exist_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Identity to freeze {} does not exist", identity_to_freeze_id)] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/identity/invalid_identity_contract_nonce_error.rs b/packages/rs-dpp/src/errors/consensus/state/identity/invalid_identity_contract_nonce_error.rs index 39bbbfaaaf5..780fb7a6377 100644 --- a/packages/rs-dpp/src/errors/consensus/state/identity/invalid_identity_contract_nonce_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/identity/invalid_identity_contract_nonce_error.rs @@ -8,10 +8,19 @@ use thiserror::Error; use crate::prelude::{Identifier, IdentityNonce}; use crate::identity::identity_nonce::MergeIdentityNonceResult; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[platform_serialize(unversioned)] pub struct InvalidIdentityNonceError { diff --git a/packages/rs-dpp/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs b/packages/rs-dpp/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs index 8e6171579bf..17c83c19a4d 100644 --- a/packages/rs-dpp/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs @@ -2,12 +2,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::identity::KeyID; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Identity Public Key with Id {id} does not exist")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/identity/invalid_identity_revision_error.rs b/packages/rs-dpp/src/errors/consensus/state/identity/invalid_identity_revision_error.rs index 1deb1de9aca..fe26064b176 100644 --- a/packages/rs-dpp/src/errors/consensus/state/identity/invalid_identity_revision_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/identity/invalid_identity_revision_error.rs @@ -6,10 +6,19 @@ use thiserror::Error; use crate::prelude::{Identifier, Revision}; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Identity {identity_id} has invalid revision. The current revision is {current_revision}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/identity/master_public_key_update_error.rs b/packages/rs-dpp/src/errors/consensus/state/identity/master_public_key_update_error.rs index bde78547a79..78ad5644c15 100644 --- a/packages/rs-dpp/src/errors/consensus/state/identity/master_public_key_update_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/identity/master_public_key_update_error.rs @@ -4,7 +4,7 @@ use crate::errors::ProtocolError; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( Error, @@ -17,6 +17,7 @@ use bincode::{Decode, Encode}; Decode, PlatformSerialize, PlatformDeserialize, + DecodeUntrusted, )] #[error("Failed to update the master public key: {description}. Ensure the operation is valid and permissible under current system rules.")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs b/packages/rs-dpp/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs index f33d5b32c93..2b0e6bfd169 100644 --- a/packages/rs-dpp/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs @@ -1,12 +1,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Identity cannot contain more than {max_items} public keys")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/identity/missing_identity_public_key_ids_error.rs b/packages/rs-dpp/src/errors/consensus/state/identity/missing_identity_public_key_ids_error.rs index 25ac3bd2763..c184c3d44d6 100644 --- a/packages/rs-dpp/src/errors/consensus/state/identity/missing_identity_public_key_ids_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/identity/missing_identity_public_key_ids_error.rs @@ -2,12 +2,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::identity::KeyID; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Identity Public Key with Ids {} do not exist", ids.iter().map(|id| id.to_string()).collect::>().join(", "))] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/identity/missing_transfer_key_error.rs b/packages/rs-dpp/src/errors/consensus/state/identity/missing_transfer_key_error.rs index 2f14ccacbce..9e24778a886 100644 --- a/packages/rs-dpp/src/errors/consensus/state/identity/missing_transfer_key_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/identity/missing_transfer_key_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Identity {identity_id} does not have a key for transferring funds")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/identity/no_transfer_key_for_core_withdrawal_available_error.rs b/packages/rs-dpp/src/errors/consensus/state/identity/no_transfer_key_for_core_withdrawal_available_error.rs index 77f5d52305a..b90f45912f8 100644 --- a/packages/rs-dpp/src/errors/consensus/state/identity/no_transfer_key_for_core_withdrawal_available_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/identity/no_transfer_key_for_core_withdrawal_available_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("There is no transfer key that can be used for a withdrawal")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/identity/recipient_identity_does_not_exist_error.rs b/packages/rs-dpp/src/errors/consensus/state/identity/recipient_identity_does_not_exist_error.rs index dc6a838f76f..c1995238bdb 100644 --- a/packages/rs-dpp/src/errors/consensus/state/identity/recipient_identity_does_not_exist_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/identity/recipient_identity_does_not_exist_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Recipient identity {} does not exist", recipient_id)] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/prefunded_specialized_balances/prefunded_specialized_balance_insufficient_error.rs b/packages/rs-dpp/src/errors/consensus/state/prefunded_specialized_balances/prefunded_specialized_balance_insufficient_error.rs index 05bbb113249..85232fb1f6f 100644 --- a/packages/rs-dpp/src/errors/consensus/state/prefunded_specialized_balances/prefunded_specialized_balance_insufficient_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/prefunded_specialized_balances/prefunded_specialized_balance_insufficient_error.rs @@ -6,10 +6,19 @@ use thiserror::Error; use crate::prelude::Identifier; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Insufficient specialized balance {balance_id} balance {balance} required {required_balance}" diff --git a/packages/rs-dpp/src/errors/consensus/state/prefunded_specialized_balances/prefunded_specialized_balance_not_found_error.rs b/packages/rs-dpp/src/errors/consensus/state/prefunded_specialized_balances/prefunded_specialized_balance_not_found_error.rs index bf8f4bc1002..f87f35f9ec1 100644 --- a/packages/rs-dpp/src/errors/consensus/state/prefunded_specialized_balances/prefunded_specialized_balance_not_found_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/prefunded_specialized_balances/prefunded_specialized_balance_not_found_error.rs @@ -6,10 +6,19 @@ use thiserror::Error; use crate::prelude::Identifier; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Did not find a specialized balance with id: {balance_id}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/shielded/insufficient_pool_notes_error.rs b/packages/rs-dpp/src/errors/consensus/state/shielded/insufficient_pool_notes_error.rs index 3358017ab95..0c9761eccae 100644 --- a/packages/rs-dpp/src/errors/consensus/state/shielded/insufficient_pool_notes_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/shielded/insufficient_pool_notes_error.rs @@ -1,12 +1,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[platform_serialize(unversioned)] #[error( diff --git a/packages/rs-dpp/src/errors/consensus/state/shielded/insufficient_shielded_fee_error.rs b/packages/rs-dpp/src/errors/consensus/state/shielded/insufficient_shielded_fee_error.rs index 4bfcd288404..67ebb46519e 100644 --- a/packages/rs-dpp/src/errors/consensus/state/shielded/insufficient_shielded_fee_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/shielded/insufficient_shielded_fee_error.rs @@ -1,12 +1,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[platform_serialize(unversioned)] #[error("Insufficient shielded transaction fee: {message}")] diff --git a/packages/rs-dpp/src/errors/consensus/state/shielded/invalid_anchor_error.rs b/packages/rs-dpp/src/errors/consensus/state/shielded/invalid_anchor_error.rs index f0839902d57..48a6f036753 100644 --- a/packages/rs-dpp/src/errors/consensus/state/shielded/invalid_anchor_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/shielded/invalid_anchor_error.rs @@ -1,12 +1,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[platform_serialize(unversioned)] #[error( diff --git a/packages/rs-dpp/src/errors/consensus/state/shielded/invalid_shielded_proof_error.rs b/packages/rs-dpp/src/errors/consensus/state/shielded/invalid_shielded_proof_error.rs index b18b8c30f58..08764aacc1b 100644 --- a/packages/rs-dpp/src/errors/consensus/state/shielded/invalid_shielded_proof_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/shielded/invalid_shielded_proof_error.rs @@ -1,12 +1,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[platform_serialize(unversioned)] #[error("Invalid shielded transaction proof: {message}")] diff --git a/packages/rs-dpp/src/errors/consensus/state/shielded/nullifier_already_spent_error.rs b/packages/rs-dpp/src/errors/consensus/state/shielded/nullifier_already_spent_error.rs index a82430c6d0f..ab97a474e53 100644 --- a/packages/rs-dpp/src/errors/consensus/state/shielded/nullifier_already_spent_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/shielded/nullifier_already_spent_error.rs @@ -1,12 +1,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[platform_serialize(unversioned)] #[error("Nullifier has already been spent: {}", hex::encode(nullifier))] diff --git a/packages/rs-dpp/src/errors/consensus/state/state_error.rs b/packages/rs-dpp/src/errors/consensus/state/state_error.rs index b9ad50cdaf1..0d6bc908df7 100644 --- a/packages/rs-dpp/src/errors/consensus/state/state_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/state_error.rs @@ -1,5 +1,5 @@ use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; @@ -72,7 +72,15 @@ use crate::consensus::state::voting::vote_poll_not_found_error::VotePollNotFound use super::document::document_timestamps_are_equal_error::DocumentTimestampsAreEqualError; #[derive( - Error, Debug, PartialEq, Encode, Decode, PlatformSerialize, PlatformDeserialize, Clone, + Error, + Debug, + PartialEq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + Clone, + DecodeUntrusted, )] pub enum StateError { /* diff --git a/packages/rs-dpp/src/errors/consensus/state/token/identity_does_not_have_enough_token_balance_error.rs b/packages/rs-dpp/src/errors/consensus/state/token/identity_does_not_have_enough_token_balance_error.rs index ba1c5b7fd61..16c8b682e71 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/identity_does_not_have_enough_token_balance_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/identity_does_not_have_enough_token_balance_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Identity {} does not have enough balance for token {}: required {}, actual {}, action: {}", diff --git a/packages/rs-dpp/src/errors/consensus/state/token/identity_has_not_agreed_to_pay_required_token_amount_error.rs b/packages/rs-dpp/src/errors/consensus/state/token/identity_has_not_agreed_to_pay_required_token_amount_error.rs index 1096cbf929e..b2d4aebbb9f 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/identity_has_not_agreed_to_pay_required_token_amount_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/identity_has_not_agreed_to_pay_required_token_amount_error.rs @@ -2,13 +2,22 @@ use crate::balances::credits::TokenAmount; use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Identity has not agreed to pay the required token amount for token {}: required {}, min offer {:?}, max offer {:?}, action: {}", diff --git a/packages/rs-dpp/src/errors/consensus/state/token/identity_token_account_already_frozen_error.rs b/packages/rs-dpp/src/errors/consensus/state/token/identity_token_account_already_frozen_error.rs index c894e465b70..63fc185cd6b 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/identity_token_account_already_frozen_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/identity_token_account_already_frozen_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Identity {} account is already frozen for token {}. Action attempted: {}", diff --git a/packages/rs-dpp/src/errors/consensus/state/token/identity_token_account_frozen_error.rs b/packages/rs-dpp/src/errors/consensus/state/token/identity_token_account_frozen_error.rs index 6d4a55e6092..881386ed739 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/identity_token_account_frozen_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/identity_token_account_frozen_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Identity {} account is frozen for token {}. Action attempted: {}", diff --git a/packages/rs-dpp/src/errors/consensus/state/token/identity_token_account_not_frozen_error.rs b/packages/rs-dpp/src/errors/consensus/state/token/identity_token_account_not_frozen_error.rs index 479fcc1a500..424fd376cb5 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/identity_token_account_not_frozen_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/identity_token_account_not_frozen_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Identity {} account is not frozen for token {}. Action attempted: {}", diff --git a/packages/rs-dpp/src/errors/consensus/state/token/identity_trying_to_pay_with_wrong_token_error.rs b/packages/rs-dpp/src/errors/consensus/state/token/identity_trying_to_pay_with_wrong_token_error.rs index 89e2e730562..02d3539ab89 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/identity_trying_to_pay_with_wrong_token_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/identity_trying_to_pay_with_wrong_token_error.rs @@ -2,11 +2,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::data_contract::TokenContractPosition; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; -#[derive(Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize)] +#[derive( + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, +)] #[platform_serialize(unversioned)] pub struct IdentityTryingToPayWithWrongTokenError { expected_contract_id: Option, diff --git a/packages/rs-dpp/src/errors/consensus/state/token/invalid_group_position_error.rs b/packages/rs-dpp/src/errors/consensus/state/token/invalid_group_position_error.rs index e93459d0365..9a6be939bc2 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/invalid_group_position_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/invalid_group_position_error.rs @@ -2,12 +2,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::data_contract::GroupContractPosition; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Invalid group position: {invalid_group_position}. {max_group_message}", diff --git a/packages/rs-dpp/src/errors/consensus/state/token/invalid_token_claim_no_current_rewards.rs b/packages/rs-dpp/src/errors/consensus/state/token/invalid_token_claim_no_current_rewards.rs index 19e133903c0..d6627111a78 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/invalid_token_claim_no_current_rewards.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/invalid_token_claim_no_current_rewards.rs @@ -3,12 +3,21 @@ use crate::data_contract::associated_token::token_perpetual_distribution::reward use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, Encode, DecodeUntrusted}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "No current rewards available for recipient '{}' on token ID '{}' at moment '{}'. Last claimed moment: '{}'", diff --git a/packages/rs-dpp/src/errors/consensus/state/token/invalid_token_claim_property_mismatch.rs b/packages/rs-dpp/src/errors/consensus/state/token/invalid_token_claim_property_mismatch.rs index f6261f1e549..905678b9790 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/invalid_token_claim_property_mismatch.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/invalid_token_claim_property_mismatch.rs @@ -2,12 +2,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::prelude::Identifier; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Invalid token release property mismatch for '{}', token ID: {}", diff --git a/packages/rs-dpp/src/errors/consensus/state/token/invalid_token_claim_wrong_claimant.rs b/packages/rs-dpp/src/errors/consensus/state/token/invalid_token_claim_wrong_claimant.rs index 57e48ed141d..0df224a9b3c 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/invalid_token_claim_wrong_claimant.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/invalid_token_claim_wrong_claimant.rs @@ -2,12 +2,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::prelude::Identifier; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Token claim error: Identity '{}' is not a valid claimant for this distribution type of token '{}'. The valid claimaint is '{}'.", diff --git a/packages/rs-dpp/src/errors/consensus/state/token/invalid_token_position_error.rs b/packages/rs-dpp/src/errors/consensus/state/token/invalid_token_position_error.rs index faac2df3c1c..62c709a6e09 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/invalid_token_position_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/invalid_token_position_error.rs @@ -2,12 +2,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::data_contract::TokenContractPosition; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Invalid token position: {invalid_token_position}. {max_token_message}", diff --git a/packages/rs-dpp/src/errors/consensus/state/token/new_authorized_action_taker_group_does_not_exist_error.rs b/packages/rs-dpp/src/errors/consensus/state/token/new_authorized_action_taker_group_does_not_exist_error.rs index 2ea523ddbbf..dbb97594f20 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/new_authorized_action_taker_group_does_not_exist_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/new_authorized_action_taker_group_does_not_exist_error.rs @@ -2,12 +2,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::data_contract::GroupContractPosition; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("The specified new authorized action taker group {group_contract_position} does not exist")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/token/new_authorized_action_taker_identity_does_not_exist_error.rs b/packages/rs-dpp/src/errors/consensus/state/token/new_authorized_action_taker_identity_does_not_exist_error.rs index 9f02bc0117c..63480e7472c 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/new_authorized_action_taker_identity_does_not_exist_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/new_authorized_action_taker_identity_does_not_exist_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("The specified new authorized action taker identity {identity_id} does not exist")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/token/new_authorized_action_taker_main_group_not_set_error.rs b/packages/rs-dpp/src/errors/consensus/state/token/new_authorized_action_taker_main_group_not_set_error.rs index db4e45c0af3..ffbd705b647 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/new_authorized_action_taker_main_group_not_set_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/new_authorized_action_taker_main_group_not_set_error.rs @@ -1,12 +1,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "The specified new authorized action taker main group is not set in the token configuration" diff --git a/packages/rs-dpp/src/errors/consensus/state/token/new_tokens_destination_identity_does_not_exist_error.rs b/packages/rs-dpp/src/errors/consensus/state/token/new_tokens_destination_identity_does_not_exist_error.rs index ae18548891a..62adff37caf 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/new_tokens_destination_identity_does_not_exist_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/new_tokens_destination_identity_does_not_exist_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("The specified new tokens destination identity {identity_id} does not exist")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/token/pre_programmed_distribution_timestamp_in_past_error.rs b/packages/rs-dpp/src/errors/consensus/state/token/pre_programmed_distribution_timestamp_in_past_error.rs index 9b13ea8df43..d53841bcc75 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/pre_programmed_distribution_timestamp_in_past_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/pre_programmed_distribution_timestamp_in_past_error.rs @@ -3,13 +3,22 @@ use crate::consensus::ConsensusError; use crate::data_contract::TokenContractPosition; use crate::identity::TimestampMillis; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Pre-programmed token distribution time {pre_programmed_timestamp}ms is in the past for token {token_position} in data contract {data_contract_id}. Current block time is {current_timestamp}.", diff --git a/packages/rs-dpp/src/errors/consensus/state/token/required_token_payment_info_not_set_error.rs b/packages/rs-dpp/src/errors/consensus/state/token/required_token_payment_info_not_set_error.rs index f1a76fe8ab1..0997c9f0286 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/required_token_payment_info_not_set_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/required_token_payment_info_not_set_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Required token payment info not set on token {} (action: {})", diff --git a/packages/rs-dpp/src/errors/consensus/state/token/token_already_paused_error.rs b/packages/rs-dpp/src/errors/consensus/state/token/token_already_paused_error.rs index 4560e3fc4de..4eae4cfc36c 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/token_already_paused_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/token_already_paused_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Token {} is already paused. Action attempted: {}", token_id, action)] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/token/token_amount_under_minimum_sale_amount.rs b/packages/rs-dpp/src/errors/consensus/state/token/token_amount_under_minimum_sale_amount.rs index 921050fff49..c148a520f12 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/token_amount_under_minimum_sale_amount.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/token_amount_under_minimum_sale_amount.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Requested token amount {desired_amount} is below the minimum sale amount {minimum_amount} for token {token_id}." diff --git a/packages/rs-dpp/src/errors/consensus/state/token/token_direct_purchase_user_price_too_low.rs b/packages/rs-dpp/src/errors/consensus/state/token/token_direct_purchase_user_price_too_low.rs index 4824eeb5b9a..936a1fe15fb 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/token_direct_purchase_user_price_too_low.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/token_direct_purchase_user_price_too_low.rs @@ -2,13 +2,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::fee::Credits; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Provided direct purchase price {user_price} is below the required price {required_price} for token {token_id}." diff --git a/packages/rs-dpp/src/errors/consensus/state/token/token_is_paused_error.rs b/packages/rs-dpp/src/errors/consensus/state/token/token_is_paused_error.rs index 5681940847f..2b98981213c 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/token_is_paused_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/token_is_paused_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Token {} is paused.", token_id)] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/token/token_mint_past_max_supply_error.rs b/packages/rs-dpp/src/errors/consensus/state/token/token_mint_past_max_supply_error.rs index c97a2d0830e..7dc4a0bc9a1 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/token_mint_past_max_supply_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/token_mint_past_max_supply_error.rs @@ -2,13 +2,22 @@ use crate::balances::credits::TokenAmount; use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Token {token_id} attempted to mint {amount}, which exceeds the max supply {max_supply}, current supply is {current_supply}" diff --git a/packages/rs-dpp/src/errors/consensus/state/token/token_not_for_direct_sale.rs b/packages/rs-dpp/src/errors/consensus/state/token/token_not_for_direct_sale.rs index 7eb0921798b..aa8c277e408 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/token_not_for_direct_sale.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/token_not_for_direct_sale.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Token {token_id} is not available for direct sale.")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/token/token_not_paused_error.rs b/packages/rs-dpp/src/errors/consensus/state/token/token_not_paused_error.rs index 63cf71d4f10..10c251aadac 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/token_not_paused_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/token_not_paused_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Token {} is not paused. Action attempted: {}", token_id, action)] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/token/token_setting_max_supply_to_less_than_current_supply_error.rs b/packages/rs-dpp/src/errors/consensus/state/token/token_setting_max_supply_to_less_than_current_supply_error.rs index 511263c695f..9a3fc132c79 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/token_setting_max_supply_to_less_than_current_supply_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/token_setting_max_supply_to_less_than_current_supply_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Token {token_id} attempted to set max supply to {max_supply}, which is less than the current supply {current_supply}" diff --git a/packages/rs-dpp/src/errors/consensus/state/token/token_transfer_recipient_identity_not_exist_error.rs b/packages/rs-dpp/src/errors/consensus/state/token/token_transfer_recipient_identity_not_exist_error.rs index d88d5695b6f..6bcfce88628 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/token_transfer_recipient_identity_not_exist_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/token_transfer_recipient_identity_not_exist_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Token transfer recipient identity {recipient_id} doesn't exist")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/token/unauthorized_token_action_error.rs b/packages/rs-dpp/src/errors/consensus/state/token/unauthorized_token_action_error.rs index 7245fee861b..32da5b4d002 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/unauthorized_token_action_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/unauthorized_token_action_error.rs @@ -2,13 +2,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::data_contract::change_control_rules::authorized_action_takers::AuthorizedActionTakers; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error( "Identity {identity_id} is not authorized to perform action: {action} on token: {token_id}. Authorized action takers: {authorized_action_takers:?}", diff --git a/packages/rs-dpp/src/errors/consensus/state/voting/masternode_incorrect_voter_identity_id_error.rs b/packages/rs-dpp/src/errors/consensus/state/voting/masternode_incorrect_voter_identity_id_error.rs index 4219e0df96c..5a18aa72b32 100644 --- a/packages/rs-dpp/src/errors/consensus/state/voting/masternode_incorrect_voter_identity_id_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/voting/masternode_incorrect_voter_identity_id_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Masternode {pro_tx_hash} voter identity id is incorrect, expected is {expected_voter_identity_id}, provided is {provided_voter_identity_id}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/voting/masternode_incorrect_voting_address_error.rs b/packages/rs-dpp/src/errors/consensus/state/voting/masternode_incorrect_voting_address_error.rs index 5953eb86d39..cda698d3de7 100644 --- a/packages/rs-dpp/src/errors/consensus/state/voting/masternode_incorrect_voting_address_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/voting/masternode_incorrect_voting_address_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::{Bytes20, Identifier}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Masternode {pro_tx_hash} voting address is incorrect, current is {current_voting_address}, given is {given_voting_address}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/voting/masternode_not_found_error.rs b/packages/rs-dpp/src/errors/consensus/state/voting/masternode_not_found_error.rs index f004cfe79d4..7bb40ae98a5 100644 --- a/packages/rs-dpp/src/errors/consensus/state/voting/masternode_not_found_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/voting/masternode_not_found_error.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Masternode {pro_tx_hash} not found")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/voting/masternode_vote_already_present_error.rs b/packages/rs-dpp/src/errors/consensus/state/voting/masternode_vote_already_present_error.rs index 7526eba2172..d3d8700bcdd 100644 --- a/packages/rs-dpp/src/errors/consensus/state/voting/masternode_vote_already_present_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/voting/masternode_vote_already_present_error.rs @@ -2,13 +2,21 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::voting::vote_polls::VotePoll; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Masternode vote is already present for masternode {pro_tx_hash} voting for {vote_poll}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/voting/masternode_voted_too_many_times.rs b/packages/rs-dpp/src/errors/consensus/state/voting/masternode_voted_too_many_times.rs index d1b167320a2..a8352f3f8be 100644 --- a/packages/rs-dpp/src/errors/consensus/state/voting/masternode_voted_too_many_times.rs +++ b/packages/rs-dpp/src/errors/consensus/state/voting/masternode_voted_too_many_times.rs @@ -1,13 +1,22 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("Masternode with id: {pro_tx_hash} already voted {times_already_voted} times and is trying to vote again, they can only vote {max_times_allowed} times")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/voting/vote_poll_not_available_for_voting_error.rs b/packages/rs-dpp/src/errors/consensus/state/voting/vote_poll_not_available_for_voting_error.rs index 26341b31d4d..97db49f1ec9 100644 --- a/packages/rs-dpp/src/errors/consensus/state/voting/vote_poll_not_available_for_voting_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/voting/vote_poll_not_available_for_voting_error.rs @@ -3,12 +3,20 @@ use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::voting::vote_info_storage::contested_document_vote_poll_stored_info::ContestedDocumentVotePollStatus; use crate::voting::vote_polls::VotePoll; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("VotePoll {vote_poll} not available for voting: {status}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/state/voting/vote_poll_not_found_error.rs b/packages/rs-dpp/src/errors/consensus/state/voting/vote_poll_not_found_error.rs index 77a6c62bdde..85e3497a191 100644 --- a/packages/rs-dpp/src/errors/consensus/state/voting/vote_poll_not_found_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/voting/vote_poll_not_found_error.rs @@ -2,12 +2,20 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::errors::ProtocolError; use crate::voting::vote_polls::VotePoll; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("VotePoll {vote_poll} not found")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/errors/consensus/test_consensus_error.rs b/packages/rs-dpp/src/errors/consensus/test_consensus_error.rs index cfc240f21dc..cdc210b848b 100644 --- a/packages/rs-dpp/src/errors/consensus/test_consensus_error.rs +++ b/packages/rs-dpp/src/errors/consensus/test_consensus_error.rs @@ -1,10 +1,19 @@ use crate::errors::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use thiserror::Error; #[derive( - Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Error, + Debug, + Clone, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[error("{message:?}")] #[platform_serialize(unversioned)] diff --git a/packages/rs-dpp/src/fee/fee_result/refunds.rs b/packages/rs-dpp/src/fee/fee_result/refunds.rs index 65c453dab37..95142a4f82d 100644 --- a/packages/rs-dpp/src/fee/fee_result/refunds.rs +++ b/packages/rs-dpp/src/fee/fee_result/refunds.rs @@ -10,7 +10,7 @@ use crate::fee::epoch::distribution::calculate_storage_fee_refund_amount_and_lef use crate::fee::epoch::{BytesPerEpoch, CreditsPerEpoch}; use crate::fee::Credits; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_value::Identifier; use serde::{Deserialize, Serialize}; @@ -29,7 +29,9 @@ pub type CreditsPerEpochByIdentifier = BTreeMap<[u8; 32], CreditsPerEpoch>; pub type BytesPerEpochByIdentifier = BTreeMap<[u8; 32], BytesPerEpoch>; /// Fee refunds to identities based on removed data from specific epochs -#[derive(Debug, Clone, Eq, PartialEq, Default, Serialize, Deserialize, Encode, Decode)] +#[derive( + Debug, Clone, Eq, PartialEq, Default, Serialize, Deserialize, Encode, Decode, DecodeUntrusted, +)] pub struct FeeRefunds(pub CreditsPerEpochByIdentifier); impl FeeRefunds { diff --git a/packages/rs-dpp/src/group/action_event.rs b/packages/rs-dpp/src/group/action_event.rs index 24e7240142c..c95d85d5325 100644 --- a/packages/rs-dpp/src/group/action_event.rs +++ b/packages/rs-dpp/src/group/action_event.rs @@ -4,13 +4,22 @@ use crate::serialization::JsonConvertible; use crate::serialization::ValueConvertible; use crate::tokens::token_event::TokenEvent; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; #[derive( - Debug, PartialEq, PartialOrd, Clone, Eq, Encode, Decode, PlatformDeserialize, PlatformSerialize, + Debug, + PartialEq, + PartialOrd, + Clone, + Eq, + Encode, + Decode, + PlatformDeserialize, + PlatformSerialize, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/group/group_action/mod.rs b/packages/rs-dpp/src/group/group_action/mod.rs index d449f10cf32..d37728ddf1a 100644 --- a/packages/rs-dpp/src/group/group_action/mod.rs +++ b/packages/rs-dpp/src/group/group_action/mod.rs @@ -8,7 +8,7 @@ use crate::serialization::JsonConvertible; #[cfg(feature = "value-conversion")] use crate::serialization::ValueConvertible; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; #[cfg(feature = "serde-conversion")] @@ -19,7 +19,16 @@ use serde::{Deserialize, Serialize}; derive(JsonConvertible) )] #[derive( - Debug, PartialEq, PartialOrd, Clone, Eq, Encode, Decode, PlatformDeserialize, PlatformSerialize, + Debug, + PartialEq, + PartialOrd, + Clone, + Eq, + Encode, + Decode, + PlatformDeserialize, + PlatformSerialize, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/group/group_action/v0/mod.rs b/packages/rs-dpp/src/group/group_action/v0/mod.rs index 2daae2aba41..74df25f681a 100644 --- a/packages/rs-dpp/src/group/group_action/v0/mod.rs +++ b/packages/rs-dpp/src/group/group_action/v0/mod.rs @@ -4,7 +4,7 @@ use crate::group::group_action::GroupActionAccessors; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; #[cfg(feature = "serde-conversion")] @@ -12,7 +12,16 @@ use serde::{Deserialize, Serialize}; #[cfg_attr(feature = "json-conversion", json_safe_fields)] #[derive( - Debug, PartialEq, PartialOrd, Clone, Eq, Encode, Decode, PlatformDeserialize, PlatformSerialize, + Debug, + PartialEq, + PartialOrd, + Clone, + Eq, + Encode, + Decode, + PlatformDeserialize, + PlatformSerialize, + DecodeUntrusted, )] #[cfg_attr(feature = "serde-conversion", derive(Serialize, Deserialize))] #[platform_serialize(unversioned)] //versioned directly, no need to use platform_version diff --git a/packages/rs-dpp/src/group/mod.rs b/packages/rs-dpp/src/group/mod.rs index 1c033923c2d..6ca13ac8c23 100644 --- a/packages/rs-dpp/src/group/mod.rs +++ b/packages/rs-dpp/src/group/mod.rs @@ -2,7 +2,7 @@ use crate::data_contract::group::{Group, GroupMemberPower}; use crate::data_contract::GroupContractPosition; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::Display; use platform_value::Identifier; #[cfg(feature = "serde-conversion")] @@ -13,7 +13,7 @@ pub mod action_taker; pub mod group_action; pub mod group_action_status; -#[derive(Debug, Clone, Copy, Encode, Decode, PartialEq)] +#[derive(Debug, Clone, Copy, Encode, Decode, PartialEq, DecodeUntrusted)] pub enum GroupStateTransitionInfoStatus { GroupStateTransitionInfoProposer(GroupContractPosition), GroupStateTransitionInfoOtherSigner(GroupStateTransitionInfo), @@ -35,7 +35,7 @@ impl From for GroupStateTransitionInfo { } #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, Copy, Encode, Decode, Default, PartialEq, Display)] +#[derive(Debug, Clone, Copy, Encode, Decode, Default, PartialEq, Display, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/identity/core_script.rs b/packages/rs-dpp/src/identity/core_script.rs index e9cc9848c7e..57c0af37b8d 100644 --- a/packages/rs-dpp/src/identity/core_script.rs +++ b/packages/rs-dpp/src/identity/core_script.rs @@ -1,7 +1,7 @@ -use bincode::de::{BorrowDecoder, Decoder}; +use bincode::de::BorrowDecoder; use bincode::enc::Encoder; use bincode::error::{DecodeError, EncodeError}; -use bincode::{BorrowDecode, Decode, Encode}; +use bincode::{BorrowDecode, Encode}; use dashcore::blockdata::opcodes; use std::fmt; use std::ops::Deref; @@ -92,13 +92,23 @@ impl Encode for CoreScript { } // Implement the bincode::Decode trait for CoreScript -impl Decode for CoreScript { - fn decode>(decoder: &mut D) -> Result { - let bytes = Vec::::decode(decoder)?; - // Create a CoreScript instance using the decoded DashCoreScript - Ok(CoreScript(ScriptBuf(bytes))) - } +// Share the wire schema and domain checks across both decoding APIs. +macro_rules! impl_core_script_decode { + ($decode:ident, $decoder:ident, $method:ident, $untrusted:expr) => { + impl bincode::$decode for CoreScript { + fn $method>( + decoder: &mut D, + ) -> Result { + let bytes = Vec::::$method(decoder)?; + // Create a CoreScript instance using the decoded DashCoreScript + Ok(CoreScript(ScriptBuf(bytes))) + } + } + }; } +impl_core_script_decode!(Decode, Decoder, decode, false); +impl_core_script_decode!(DecodeUntrusted, UntrustedDecoder, decode_untrusted, true); +bincode::impl_borrow_decode_untrusted!(CoreScript); impl<'de, C> BorrowDecode<'de, C> for CoreScript { fn borrow_decode>( diff --git a/packages/rs-dpp/src/identity/identity.rs b/packages/rs-dpp/src/identity/identity.rs index 86aee2c2d14..3e81f0acffd 100644 --- a/packages/rs-dpp/src/identity/identity.rs +++ b/packages/rs-dpp/src/identity/identity.rs @@ -17,7 +17,7 @@ use crate::version::PlatformVersion; use crate::ProtocolError; #[cfg(feature = "identity-serialization")] -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; #[cfg(feature = "identity-serialization")] use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; @@ -38,7 +38,13 @@ use std::collections::{BTreeMap, BTreeSet}; )] #[cfg_attr( feature = "identity-serialization", - derive(Encode, Decode, PlatformDeserialize, PlatformSerialize), + derive( + Encode, + Decode, + DecodeUntrusted, + PlatformDeserialize, + PlatformSerialize + ), platform_serialize(limit = 15000, unversioned) )] #[cfg_attr(feature = "value-conversion", derive(ValueConvertible))] diff --git a/packages/rs-dpp/src/identity/identity_nonce.rs b/packages/rs-dpp/src/identity/identity_nonce.rs index 2e8ea96edb6..646d382d59e 100644 --- a/packages/rs-dpp/src/identity/identity_nonce.rs +++ b/packages/rs-dpp/src/identity/identity_nonce.rs @@ -7,7 +7,7 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; use crate::prelude::IdentityNonce; use crate::validation::SimpleConsensusValidationResult; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_value::Identifier; pub const IDENTITY_NONCE_VALUE_FILTER: u64 = 0xFFFFFFFFFF; @@ -17,7 +17,16 @@ pub const MISSING_IDENTITY_REVISIONS_MAX_BYTES: u64 = MAX_MISSING_IDENTITY_REVIS pub const IDENTITY_NONCE_VALUE_FILTER_MAX_BYTES: u64 = 40; #[derive( - Debug, Clone, Copy, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Debug, + Clone, + Copy, + PartialEq, + Eq, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] /// The result of the merge of the identity contract nonce pub enum MergeIdentityNonceResult { diff --git a/packages/rs-dpp/src/identity/identity_public_key/contract_bounds/mod.rs b/packages/rs-dpp/src/identity/identity_public_key/contract_bounds/mod.rs index 7052fea0813..898dbb7310d 100644 --- a/packages/rs-dpp/src/identity/identity_public_key/contract_bounds/mod.rs +++ b/packages/rs-dpp/src/identity/identity_public_key/contract_bounds/mod.rs @@ -7,7 +7,7 @@ use crate::serialization::JsonConvertible; #[cfg(feature = "value-conversion")] use crate::serialization::ValueConvertible; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use serde::{Deserialize, Serialize}; pub type ContractBoundsType = u8; @@ -21,7 +21,18 @@ pub type ContractBoundsType = u8; #[cfg_attr(feature = "json-conversion", derive(JsonConvertible))] #[repr(u8)] #[derive( - Debug, PartialEq, Eq, Clone, Serialize, Deserialize, Encode, Decode, Ord, PartialOrd, Hash, + Debug, + PartialEq, + Eq, + Clone, + Serialize, + Deserialize, + Encode, + Decode, + Ord, + PartialOrd, + Hash, + DecodeUntrusted, )] #[cfg_attr(feature = "value-conversion", derive(ValueConvertible))] #[serde(tag = "$type", rename_all = "camelCase")] diff --git a/packages/rs-dpp/src/identity/identity_public_key/key_type.rs b/packages/rs-dpp/src/identity/identity_public_key/key_type.rs index 3f5ddae640a..0914d245a04 100644 --- a/packages/rs-dpp/src/identity/identity_public_key/key_type.rs +++ b/packages/rs-dpp/src/identity/identity_public_key/key_type.rs @@ -1,6 +1,6 @@ use crate::util::hash::ripemd160_sha256; use anyhow::bail; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[cfg(feature = "cbor")] use ciborium::value::Value as CborValue; #[cfg(feature = "random-public-keys")] @@ -42,6 +42,7 @@ use std::convert::TryFrom; Decode, Default, strum::EnumIter, + DecodeUntrusted, )] pub enum KeyType { #[default] diff --git a/packages/rs-dpp/src/identity/identity_public_key/mod.rs b/packages/rs-dpp/src/identity/identity_public_key/mod.rs index c76091ccddc..275bf87ef5f 100644 --- a/packages/rs-dpp/src/identity/identity_public_key/mod.rs +++ b/packages/rs-dpp/src/identity/identity_public_key/mod.rs @@ -6,7 +6,7 @@ use crate::identity::identity_public_key::v0::IdentityPublicKeyV0; use crate::serialization::JsonConvertible; #[cfg(feature = "value-conversion")] use crate::serialization::ValueConvertible; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use serde::{Deserialize, Serialize}; @@ -50,6 +50,7 @@ pub type TimestampMillis = u64; Hash, Ord, PartialOrd, + DecodeUntrusted, )] #[platform_serialize(limit = 2000, unversioned)] //This is not platform versioned automatically #[cfg_attr(feature = "value-conversion", derive(ValueConvertible))] diff --git a/packages/rs-dpp/src/identity/identity_public_key/purpose.rs b/packages/rs-dpp/src/identity/identity_public_key/purpose.rs index 61cb212f096..18f0b6e20c0 100644 --- a/packages/rs-dpp/src/identity/identity_public_key/purpose.rs +++ b/packages/rs-dpp/src/identity/identity_public_key/purpose.rs @@ -2,7 +2,7 @@ use crate::identity::Purpose::{ AUTHENTICATION, DECRYPTION, ENCRYPTION, OWNER, SYSTEM, TRANSFER, VOTING, }; use anyhow::bail; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[cfg(feature = "cbor")] use ciborium::value::Value as CborValue; use serde_repr::{Deserialize_repr, Serialize_repr}; @@ -24,6 +24,7 @@ use std::convert::TryFrom; Decode, Default, strum::EnumIter, + DecodeUntrusted, )] pub enum Purpose { /// at least one authentication key must be registered for all security levels diff --git a/packages/rs-dpp/src/identity/identity_public_key/security_level.rs b/packages/rs-dpp/src/identity/identity_public_key/security_level.rs index a907fd28104..eacf4c4f2e8 100644 --- a/packages/rs-dpp/src/identity/identity_public_key/security_level.rs +++ b/packages/rs-dpp/src/identity/identity_public_key/security_level.rs @@ -1,4 +1,4 @@ -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[cfg(feature = "cbor")] use ciborium::value::Value as CborValue; @@ -26,6 +26,7 @@ use std::convert::TryFrom; Decode, Default, strum::EnumIter, + DecodeUntrusted, )] pub enum SecurityLevel { MASTER = 0, diff --git a/packages/rs-dpp/src/identity/identity_public_key/v0/mod.rs b/packages/rs-dpp/src/identity/identity_public_key/v0/mod.rs index d03356ab7db..b0e2a3041f0 100644 --- a/packages/rs-dpp/src/identity/identity_public_key/v0/mod.rs +++ b/packages/rs-dpp/src/identity/identity_public_key/v0/mod.rs @@ -8,7 +8,7 @@ pub use crate::identity::KeyType; pub use crate::identity::Purpose; pub use crate::identity::SecurityLevel; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; @@ -37,6 +37,7 @@ use crate::state_transition::public_key_in_creation::v0::IdentityPublicKeyInCrea Ord, PartialOrd, Hash, + DecodeUntrusted, )] #[serde(rename_all = "camelCase")] pub struct IdentityPublicKeyV0 { diff --git a/packages/rs-dpp/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof.rs b/packages/rs-dpp/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof.rs index 247561ffec8..c369f8ec16a 100644 --- a/packages/rs-dpp/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof.rs +++ b/packages/rs-dpp/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof.rs @@ -192,3 +192,7 @@ mod json_convertible_tests { assert_eq!(txid_from_str.as_byte_array(), &raw); } } + +// This graph decodes raw proof fields through Serde before validating the +// consensus bytes. The untrusted adapter suppresses allocation hints. +impl<'de> bincode::serde::DeserializeUntrusted<'de> for ChainAssetLockProof {} diff --git a/packages/rs-dpp/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs b/packages/rs-dpp/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs index da051ae7bd8..32a0680c169 100644 --- a/packages/rs-dpp/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs +++ b/packages/rs-dpp/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs @@ -489,3 +489,7 @@ mod json_convertible_tests_instantassetlockproof { assert_eq!(original, recovered); } } + +// This graph decodes raw proof fields through Serde before validating the +// consensus bytes. The untrusted adapter suppresses allocation hints. +impl<'de> bincode::serde::DeserializeUntrusted<'de> for InstantAssetLockProof {} diff --git a/packages/rs-dpp/src/identity/state_transition/asset_lock_proof/mod.rs b/packages/rs-dpp/src/identity/state_transition/asset_lock_proof/mod.rs index 3c6b8684490..1b18ace5388 100644 --- a/packages/rs-dpp/src/identity/state_transition/asset_lock_proof/mod.rs +++ b/packages/rs-dpp/src/identity/state_transition/asset_lock_proof/mod.rs @@ -4,7 +4,7 @@ use dashcore::{OutPoint, Transaction}; use serde::{Deserialize, Deserializer, Serialize}; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; pub use instant::*; use platform_value::Value; @@ -34,7 +34,7 @@ pub mod validate_asset_lock_transaction_structure; // unions exposed to JS (see `AddressWitness`, `AddressFundsFeeStrategyStep`). // Bincode `Encode`/`Decode` derives are independent of serde, so consensus // binary format is unaffected. -#[derive(Clone, Debug, Eq, PartialEq, Serialize, Encode, Decode)] +#[derive(Clone, Debug, Eq, PartialEq, Serialize, Encode, Decode, DecodeUntrusted)] #[serde(tag = "$type", rename_all = "camelCase")] #[allow(clippy::large_enum_variant)] pub enum AssetLockProof { diff --git a/packages/rs-dpp/src/identity/v0/mod.rs b/packages/rs-dpp/src/identity/v0/mod.rs index a730aca3187..fd106792577 100644 --- a/packages/rs-dpp/src/identity/v0/mod.rs +++ b/packages/rs-dpp/src/identity/v0/mod.rs @@ -22,13 +22,16 @@ use platform_value::Value; use crate::errors::ProtocolError; use crate::identifier::Identifier; #[cfg(feature = "identity-serialization")] -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; /// Implement the Identity. Identity is a low-level construct that provides the foundation /// for user-facing functionality on the platform #[cfg_attr(feature = "json-conversion", json_safe_fields)] #[derive(Default, Debug, Clone, Eq, PartialEq)] -#[cfg_attr(feature = "identity-serialization", derive(Encode, Decode))] +#[cfg_attr( + feature = "identity-serialization", + derive(Encode, Decode, DecodeUntrusted) +)] #[cfg_attr( feature = "serde-conversion", derive(serde::Serialize, serde::Deserialize), diff --git a/packages/rs-dpp/src/metadata.rs b/packages/rs-dpp/src/metadata.rs index 6dccb0de2df..e750321e4f2 100644 --- a/packages/rs-dpp/src/metadata.rs +++ b/packages/rs-dpp/src/metadata.rs @@ -1,4 +1,4 @@ -use bincode::Encode; +use bincode::{DecodeUntrusted, Encode}; use platform_serialization::de::Decode; use serde::{Deserialize, Serialize}; @@ -8,7 +8,18 @@ use crate::{errors::ProtocolError, prelude::TimestampMillis, util::deserializer: #[cfg_attr(feature = "json-conversion", json_safe_fields)] #[derive( - Serialize, Deserialize, Encode, Decode, Debug, Default, Clone, Copy, PartialEq, PartialOrd, Eq, + Serialize, + Deserialize, + Encode, + Decode, + Debug, + Default, + Clone, + Copy, + PartialEq, + PartialOrd, + Eq, + DecodeUntrusted, )] #[serde(rename_all = "camelCase")] pub struct Metadata { diff --git a/packages/rs-dpp/src/serialization/mod.rs b/packages/rs-dpp/src/serialization/mod.rs index b609b2aa0a1..b50bf581cb3 100644 --- a/packages/rs-dpp/src/serialization/mod.rs +++ b/packages/rs-dpp/src/serialization/mod.rs @@ -25,3 +25,5 @@ pub use json::safe_integer::{ #[cfg(feature = "json-conversion")] pub use json::JsonSafeFields; pub use serialization_traits::*; + +pub(crate) mod untrusted; diff --git a/packages/rs-dpp/src/serialization/untrusted.rs b/packages/rs-dpp/src/serialization/untrusted.rs new file mode 100644 index 00000000000..74b9b8b0afb --- /dev/null +++ b/packages/rs-dpp/src/serialization/untrusted.rs @@ -0,0 +1,18 @@ +//! Explicit adapters for foreign Serde types in Platform's binary wire format. + +/// Txid's binary Serde visitor accepts exactly 32 bytes. The transparent wrapper +/// preserves its length-prefixed wire encoding while opting this specific graph +/// into the guarded Serde adapter; it does not opt in arbitrary Dash Core types. +#[derive(serde::Deserialize)] +#[serde(transparent)] +struct UntrustedTxid(dashcore::Txid); + +impl<'de> bincode::serde::DeserializeUntrusted<'de> for UntrustedTxid {} + +pub(crate) fn decode_txid( + decoder: &mut D, +) -> Result { + let bincode::serde::Compat(UntrustedTxid(txid)) = + bincode::DecodeUntrusted::decode_untrusted(decoder)?; + Ok(txid) +} diff --git a/packages/rs-dpp/src/shielded/mod.rs b/packages/rs-dpp/src/shielded/mod.rs index edf4a0a7de2..b6a1f70f9fa 100644 --- a/packages/rs-dpp/src/shielded/mod.rs +++ b/packages/rs-dpp/src/shielded/mod.rs @@ -7,7 +7,7 @@ mod sighash; pub use memo::{ShieldedMemo, MEMO_PAYLOAD_SIZE, MEMO_SIZE}; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; @@ -116,7 +116,7 @@ pub struct OrchardBundleParams { /// Keeps the wire shape (Uint8Array in binary, base64 string in JSON) without /// per-field annotations. #[cfg_attr(feature = "json-conversion", crate::serialization::json_safe_fields)] -#[derive(Debug, Clone, Encode, Decode, PartialEq)] +#[derive(Debug, Clone, Encode, Decode, PartialEq, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/mod.rs b/packages/rs-dpp/src/state_transition/mod.rs index 5c048ae84ef..55f0ac75309 100644 --- a/packages/rs-dpp/src/state_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/mod.rs @@ -8,7 +8,7 @@ use std::ops::RangeInclusive; use platform_value::{BinaryData, Identifier}; pub use state_transition_types::*; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[cfg(any( feature = "state-transition-signing", feature = "state-transition-validation" @@ -432,6 +432,7 @@ macro_rules! call_errorable_method_identity_signed { PlatformSignable, From, PartialEq, + DecodeUntrusted, )] // `tag = "$type"` matches the system-field convention: every serde-injected // discriminator key in this crate carries a `$` prefix so it never collides diff --git a/packages/rs-dpp/src/state_transition/state_transition_types.rs b/packages/rs-dpp/src/state_transition/state_transition_types.rs index 8dbe3883029..456e25b310f 100644 --- a/packages/rs-dpp/src/state_transition/state_transition_types.rs +++ b/packages/rs-dpp/src/state_transition/state_transition_types.rs @@ -1,4 +1,4 @@ -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use num_enum::{IntoPrimitive, TryFromPrimitive}; use serde_repr::{Deserialize_repr, Serialize_repr}; @@ -17,6 +17,7 @@ use serde_repr::{Deserialize_repr, Serialize_repr}; Encode, Decode, Default, + DecodeUntrusted, )] pub enum StateTransitionType { #[default] diff --git a/packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_credit_withdrawal_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_credit_withdrawal_transition/mod.rs index dea5bac2b39..a071be05ef8 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_credit_withdrawal_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_credit_withdrawal_transition/mod.rs @@ -19,7 +19,7 @@ use crate::state_transition::StateTransitionFieldTypes; use crate::balances::credits::CREDITS_PER_DUFF; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use dashcore::transaction::special_transaction::asset_unlock::qualified_asset_unlock::ASSET_UNLOCK_TX_SIZE; use derive_more::From; use fields::*; @@ -59,6 +59,7 @@ const _: () = assert!( PlatformVersioned, From, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_credit_withdrawal_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_credit_withdrawal_transition/v0/mod.rs index f3e3be8a864..4d3b76c9f4f 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_credit_withdrawal_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_credit_withdrawal_transition/v0/mod.rs @@ -4,7 +4,7 @@ mod types; pub(super) mod v0_methods; mod version; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::PlatformSignable; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; @@ -18,7 +18,7 @@ use crate::serialization::json_safe_fields; use crate::{identity::core_script::CoreScript, withdrawal::Pooling, ProtocolError}; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, Encode, Decode, PlatformSignable, PartialEq)] +#[derive(Debug, Clone, Encode, Decode, PlatformSignable, PartialEq, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_funding_from_asset_lock_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_funding_from_asset_lock_transition/mod.rs index 24da90075ff..2d68a3b4f80 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_funding_from_asset_lock_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_funding_from_asset_lock_transition/mod.rs @@ -22,7 +22,7 @@ use crate::state_transition::address_funding_from_asset_lock_transition::v0::Add use crate::state_transition::StateTransitionFieldTypes; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use fields::*; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; @@ -44,6 +44,7 @@ pub type AddressFundingFromAssetLockTransitionLatest = AddressFundingFromAssetLo PlatformVersioned, From, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_funding_from_asset_lock_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_funding_from_asset_lock_transition/v0/mod.rs index 07977f737af..c6c569bb18d 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_funding_from_asset_lock_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_funding_from_asset_lock_transition/v0/mod.rs @@ -7,7 +7,7 @@ mod version; use std::collections::BTreeMap; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::PlatformSignable; use crate::ProtocolError; @@ -33,7 +33,7 @@ mod property_names { } #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, PartialEq, Encode, Decode, PlatformSignable)] +#[derive(Debug, Clone, PartialEq, Encode, Decode, PlatformSignable, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_funds_transfer_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_funds_transfer_transition/mod.rs index ff14bdc6473..50eb83056e0 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_funds_transfer_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_funds_transfer_transition/mod.rs @@ -19,7 +19,7 @@ use crate::state_transition::StateTransitionFieldTypes; use crate::identity::state_transition::OptionallyAssetLockProved; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; use platform_version::version::PlatformVersion; @@ -40,6 +40,7 @@ pub type UTXOTransferTransitionLatest = AddressFundsTransferTransitionV0; PlatformVersioned, From, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_funds_transfer_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_funds_transfer_transition/v0/mod.rs index 061053823b3..708992cb7c6 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_funds_transfer_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_funds_transfer_transition/v0/mod.rs @@ -12,7 +12,7 @@ use crate::prelude::{AddressNonce, UserFeeIncrease}; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; @@ -27,6 +27,7 @@ use serde::{Deserialize, Serialize}; PlatformDeserialize, PlatformSignable, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/contract/data_contract_create_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/contract/data_contract_create_transition/mod.rs index e42cc3bde14..e835cc339c0 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/contract/data_contract_create_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/contract/data_contract_create_transition/mod.rs @@ -17,7 +17,7 @@ use crate::data_contract::DataContract; use crate::state_transition::{StateTransition, StateTransitionFieldTypes}; use crate::version::PlatformVersion; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; @@ -48,6 +48,7 @@ pub type DataContractCreateTransitionLatest = DataContractCreateTransitionV0; PlatformVersioned, From, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/contract/data_contract_create_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/contract/data_contract_create_transition/v0/mod.rs index c2ab6fd448a..63fb5a94ff1 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/contract/data_contract_create_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/contract/data_contract_create_transition/v0/mod.rs @@ -18,7 +18,7 @@ use crate::data_contract::created_data_contract::CreatedDataContract; use crate::data_contract::serialized_version::DataContractInSerializationFormat; use crate::prelude::{IdentityNonce, UserFeeIncrease}; use crate::state_transition::data_contract_create_transition::DataContractCreateTransition; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_version::{TryFromPlatformVersioned, TryIntoPlatformVersioned}; use crate::state_transition::StateTransition; @@ -27,7 +27,7 @@ use crate::version::PlatformVersion; ///DataContractCreateTransitionV0 has the same encoding structure #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, Encode, Decode, PartialEq, PlatformSignable)] +#[derive(Debug, Clone, Encode, Decode, PartialEq, PlatformSignable, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/contract/data_contract_update_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/contract/data_contract_update_transition/mod.rs index 9299113b8e0..7749fb15d54 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/contract/data_contract_update_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/contract/data_contract_update_transition/mod.rs @@ -4,7 +4,7 @@ use crate::serialization::JsonConvertible; use crate::serialization::ValueConvertible; use crate::state_transition::StateTransitionFieldTypes; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; @@ -50,6 +50,7 @@ pub type DataContractUpdateTransitionLatest = DataContractUpdateTransitionV0; PlatformVersioned, From, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/contract/data_contract_update_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/contract/data_contract_update_transition/v0/mod.rs index 88be0127bf8..f839a419b71 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/contract/data_contract_update_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/contract/data_contract_update_transition/v0/mod.rs @@ -10,7 +10,7 @@ use platform_value::BinaryData; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::PlatformSignable; use platform_version::version::PlatformVersion; use platform_version::{TryFromPlatformVersioned, TryIntoPlatformVersioned}; @@ -22,7 +22,7 @@ use crate::state_transition::StateTransition; use crate::{data_contract::DataContract, identity::KeyID, ProtocolError}; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, Encode, Decode, PartialEq, PlatformSignable)] +#[derive(Debug, Clone, Encode, Decode, PartialEq, PlatformSignable, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_base_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_base_transition/mod.rs index eddb5f55dd7..b9bce475893 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_base_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_base_transition/mod.rs @@ -14,7 +14,7 @@ use crate::state_transition::batch_transition::document_base_transition::v0::{ use crate::state_transition::batch_transition::document_base_transition::v1::DocumentBaseTransitionV1; #[cfg(any(feature = "value-conversion", feature = "json-conversion"))] use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::{Display, From}; pub use fields::*; #[cfg(any(feature = "value-conversion", feature = "json-conversion"))] @@ -42,7 +42,7 @@ use std::collections::BTreeMap; // routes `$baseFormatVersion` + the known base struct fields to `base` // before letting the catchall claim what's left. See comments on // those impls for detail. -#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From)] +#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_base_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_base_transition/v0/mod.rs index cbbd2d40cc4..4ff7ef41343 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_base_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_base_transition/v0/mod.rs @@ -4,7 +4,7 @@ pub mod v0_methods; #[cfg(feature = "value-conversion")] use std::collections::BTreeMap; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::Display; #[cfg(feature = "value-conversion")] @@ -25,7 +25,7 @@ use crate::state_transition::batch_transition::document_base_transition::propert #[cfg(any(feature = "json-conversion", feature = "value-conversion"))] use crate::{data_contract::DataContract, errors::ProtocolError}; -#[derive(Debug, Clone, Encode, Decode, Default, PartialEq, Display)] +#[derive(Debug, Clone, Encode, Decode, Default, PartialEq, Display, DecodeUntrusted)] // `json_safe_fields` auto-injects `crate::serialization::json_safe_u64` on // `identity_contract_nonce: IdentityNonce` (= u64). Large nonces serialize // as JSON strings to avoid JS Number precision loss; native u64 in non-HR. diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_base_transition/v1/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_base_transition/v1/mod.rs index b3ddc865150..0d662755e61 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_base_transition/v1/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_base_transition/v1/mod.rs @@ -4,7 +4,7 @@ pub mod v1_methods; #[cfg(feature = "value-conversion")] use std::collections::BTreeMap; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::Display; #[cfg(feature = "value-conversion")] @@ -23,7 +23,7 @@ use platform_value::Value; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; -#[derive(Debug, Clone, Encode, Decode, Default, PartialEq, Display)] +#[derive(Debug, Clone, Encode, Decode, Default, PartialEq, Display, DecodeUntrusted)] // See `DocumentBaseTransitionV0` for json_safe_fields rationale. #[cfg_attr(feature = "json-conversion", crate::serialization::json_safe_fields)] #[cfg_attr( diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_create_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_create_transition/mod.rs index 50007d098d0..cffd79d53e1 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_create_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_create_transition/mod.rs @@ -9,7 +9,7 @@ use crate::document::Document; use crate::prelude::DataContract; use crate::state_transition::batch_transition::document_create_transition::v0::DocumentFromCreateTransitionV0; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::{Display, From}; use platform_value::Identifier; use platform_version::version::PlatformVersion; @@ -17,7 +17,7 @@ use platform_version::version::PlatformVersion; use serde::{Deserialize, Serialize}; pub use v0::DocumentCreateTransitionV0; -#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From)] +#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_create_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_create_transition/v0/mod.rs index 876fc29bc10..0b6cf04c165 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_create_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_create_transition/v0/mod.rs @@ -1,7 +1,7 @@ mod from_document; pub mod v0_methods; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[cfg(feature = "value-conversion")] use platform_value::btreemap_extensions::BTreeValueRemoveFromMapHelper; @@ -47,7 +47,7 @@ pub const BINARY_FIELDS: [&str; 1] = ["$entropy"]; /// The Identifier fields in [`DocumentCreateTransition`] pub use super::super::document_base_transition::IDENTIFIER_FIELDS; -#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, Display)] +#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, Display, DecodeUntrusted)] // `json_safe_fields`: // - Auto-injects `crate::serialization::serde_bytes` on `entropy: [u8; 32]` // → base64 string in JSON HR, raw bytes in non-HR. diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_delete_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_delete_transition/mod.rs index 24ceccaded5..b90230cd14f 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_delete_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_delete_transition/mod.rs @@ -2,13 +2,13 @@ mod from_document; pub mod v0; pub mod v0_methods; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::{Display, From}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; pub use v0::*; -#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From)] +#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_delete_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_delete_transition/v0/mod.rs index b6c760bf28a..cee03e5f46b 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_delete_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_delete_transition/v0/mod.rs @@ -3,7 +3,7 @@ pub mod v0_methods; use crate::state_transition::batch_transition::document_base_transition::DocumentBaseTransition; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::Display; #[cfg(feature = "json-conversion")] @@ -14,7 +14,7 @@ use serde::{Deserialize, Serialize}; pub use super::super::document_base_transition::IDENTIFIER_FIELDS; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, Display)] +#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, Display, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_index_only_delete_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_index_only_delete_transition/mod.rs index c68a990a2ab..2c3ac83cfea 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_index_only_delete_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_index_only_delete_transition/mod.rs @@ -2,7 +2,7 @@ mod from_document; pub mod v0; pub mod v0_methods; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::{Display, From}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; @@ -19,7 +19,7 @@ pub use v0::*; /// self-authorizing values) and validation pipeline, which is exactly the /// distinction the repo models as separate `DocumentTransition` kinds. /// The ABCI structure gates pair each kind with its storage mode. -#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From)] +#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_index_only_delete_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_index_only_delete_transition/v0/mod.rs index 453a4093786..3360fa0e89c 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_index_only_delete_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_index_only_delete_transition/v0/mod.rs @@ -4,7 +4,7 @@ pub mod v0_methods; use crate::state_transition::batch_transition::document_base_transition::DocumentBaseTransition; use std::collections::BTreeMap; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::Display; use platform_value::Value; @@ -27,7 +27,7 @@ pub use super::super::document_base_transition::IDENTIFIER_FIELDS; // `Deserialize` is implemented manually below — same reason as // `DocumentCreateTransitionV0`: two `#[serde(flatten)]` fields, one of // which is a catchall map that would otherwise swallow the base's keys. -#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, Display)] +#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, Display, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_purchase_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_purchase_transition/mod.rs index b63157bba34..0b3fceabb0d 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_purchase_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_purchase_transition/mod.rs @@ -2,13 +2,13 @@ mod from_document; pub mod v0; pub mod v0_methods; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::{Display, From}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; pub use v0::*; -#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From)] +#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_purchase_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_purchase_transition/v0/mod.rs index d18bd1a9206..b1281112c65 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_purchase_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_purchase_transition/v0/mod.rs @@ -3,7 +3,7 @@ pub mod v0_methods; use crate::state_transition::batch_transition::document_base_transition::DocumentBaseTransition; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::Display; use crate::fee::Credits; @@ -13,7 +13,7 @@ use serde::{Deserialize, Serialize}; pub use super::super::document_base_transition::IDENTIFIER_FIELDS; -#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, Display)] +#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, Display, DecodeUntrusted)] #[cfg_attr(feature = "json-conversion", crate::serialization::json_safe_fields)] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_replace_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_replace_transition/mod.rs index b3af3e56b0a..03d3fa08797 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_replace_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_replace_transition/mod.rs @@ -7,7 +7,7 @@ use crate::data_contract::document_type::DocumentTypeRef; use crate::document::Document; use crate::prelude::{BlockHeight, CoreBlockHeight, TimestampMillis}; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::{Display, From}; use platform_value::Identifier; use platform_version::version::PlatformVersion; @@ -15,7 +15,7 @@ use platform_version::version::PlatformVersion; use serde::{Deserialize, Serialize}; pub use v0::*; -#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From)] +#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_replace_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_replace_transition/v0/mod.rs index b501324e98d..ecdd1d6c47e 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_replace_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_replace_transition/v0/mod.rs @@ -2,7 +2,7 @@ mod from_document; pub mod v0_methods; use crate::prelude::{BlockHeight, CoreBlockHeight, Revision, TimestampMillis}; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::Display; use platform_value::{Identifier, Value}; @@ -25,7 +25,7 @@ mod property_names { pub const REVISION: &str = "$revision"; } -#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, Display)] +#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, Display, DecodeUntrusted)] // Auto-injects `json_safe_u64` on `revision: Revision` (= u64). #[cfg_attr(feature = "json-conversion", crate::serialization::json_safe_fields)] // `Deserialize` is implemented manually below — see comments. Same diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_transfer_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_transfer_transition/mod.rs index c48178ab83e..2dc61cdb993 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_transfer_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_transfer_transition/mod.rs @@ -2,13 +2,13 @@ mod from_document; pub mod v0; pub mod v0_methods; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::{Display, From}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; pub use v0::*; -#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From)] +#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_transfer_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_transfer_transition/v0/mod.rs index 488291f2f56..3858382360b 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_transfer_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_transfer_transition/v0/mod.rs @@ -2,7 +2,7 @@ mod from_document; pub mod v0_methods; use crate::prelude::Revision; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::Display; use platform_value::Identifier; @@ -18,7 +18,7 @@ mod property_names { pub const RECIPIENT_OWNER_ID: &str = "recipientOwnerId"; } -#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, Display)] +#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, Display, DecodeUntrusted)] #[cfg_attr(feature = "json-conversion", crate::serialization::json_safe_fields)] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_transition.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_transition.rs index ab0b9721dc8..1b9c13ddea9 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_transition.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_transition.rs @@ -3,7 +3,7 @@ use std::collections::BTreeMap; use derive_more::{Display, From}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; -use bincode::{Encode, Decode}; +use bincode::{Encode, Decode, DecodeUntrusted}; use crate::prelude::{IdentityNonce, Revision}; use crate::state_transition::batch_transition::{DocumentCreateTransition, DocumentDeleteTransition, DocumentReplaceTransition, TokenBurnTransition, TokenConfigUpdateTransition, TokenDestroyFrozenFundsTransition, TokenEmergencyActionTransition, TokenFreezeTransition, TokenMintTransition, TokenClaimTransition, TokenTransferTransition, TokenUnfreezeTransition, TokenDirectPurchaseTransition, TokenSetPriceForDirectPurchaseTransition}; use crate::state_transition::batch_transition::batched_transition::{DocumentIndexOnlyDeleteTransition, DocumentPurchaseTransition, DocumentTransferTransition, DocumentUpdatePriceTransition}; @@ -18,7 +18,7 @@ use crate::state_transition::batch_transition::document_create_transition::v0::v use crate::state_transition::batch_transition::document_replace_transition::v0::v0_methods::DocumentReplaceTransitionV0Methods; use crate::state_transition::batch_transition::resolvers::v0::BatchTransitionResolversV0; -#[derive(Debug, Clone, Encode, Decode, From, PartialEq, Display)] +#[derive(Debug, Clone, Encode, Decode, From, PartialEq, Display, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_update_price_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_update_price_transition/mod.rs index 7847b3fcc44..41cf0ba73ca 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_update_price_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_update_price_transition/mod.rs @@ -2,13 +2,13 @@ mod from_document; pub mod v0; pub mod v0_methods; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::{Display, From}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; pub use v0::*; -#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From)] +#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_update_price_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_update_price_transition/v0/mod.rs index fe5ca2a4c26..432541f781c 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_update_price_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_update_price_transition/v0/mod.rs @@ -2,7 +2,7 @@ mod from_document; pub mod v0_methods; use crate::prelude::Revision; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::Display; #[cfg(feature = "serde-conversion")] @@ -17,7 +17,7 @@ mod property_names { pub const REVISION: &str = "$revision"; } -#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, Display)] +#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, Display, DecodeUntrusted)] #[cfg_attr(feature = "json-conversion", crate::serialization::json_safe_fields)] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/mod.rs index b2913834070..a71a4271563 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/mod.rs @@ -1,4 +1,4 @@ -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; @@ -47,7 +47,7 @@ pub use token_transition::TokenTransition; pub const PROPERTY_ACTION: &str = "$action"; -#[derive(Debug, Clone, Encode, Decode, From, PartialEq, Display)] +#[derive(Debug, Clone, Encode, Decode, From, PartialEq, Display, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_base_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_base_transition/mod.rs index 6fe2cd1549c..0591c28720f 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_base_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_base_transition/mod.rs @@ -9,7 +9,7 @@ use crate::state_transition::batch_transition::document_base_transition::v0::Doc use crate::state_transition::batch_transition::token_base_transition::v0::TokenBaseTransitionV0; #[cfg(any(feature = "value-conversion", feature = "json-conversion"))] use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::{Display, From}; pub use fields::*; #[cfg(any(feature = "value-conversion", feature = "json-conversion"))] @@ -30,7 +30,7 @@ use std::collections::BTreeMap; // the flattened base) keeps the entire transition wire shape flat — // matching the convention every consumer reads (`tx["$id"]`, // `tx["$identity-contract-nonce"]`, etc.). -#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From)] +#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_base_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_base_transition/v0/mod.rs index 5930e5c2957..0bf14deada3 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_base_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_base_transition/v0/mod.rs @@ -3,7 +3,7 @@ pub mod v0_methods; #[cfg(feature = "value-conversion")] use std::collections::BTreeMap; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::Display; #[cfg(feature = "value-conversion")] @@ -27,7 +27,7 @@ use crate::tokens::errors::TokenError; #[cfg(any(feature = "json-conversion", feature = "value-conversion"))] use crate::{data_contract::DataContract, errors::ProtocolError}; -#[derive(Debug, Clone, Encode, Decode, Default, PartialEq, Display)] +#[derive(Debug, Clone, Encode, Decode, Default, PartialEq, Display, DecodeUntrusted)] // Auto-injects `json_safe_u64` on `identity_contract_nonce: IdentityNonce` // (= u64) so JSON HR stringifies large values (JS Number precision safety). #[cfg_attr(feature = "json-conversion", crate::serialization::json_safe_fields)] diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_burn_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_burn_transition/mod.rs index bd0d92f7bdc..7a4016c28f0 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_burn_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_burn_transition/mod.rs @@ -2,13 +2,13 @@ pub mod v0; mod v0_methods; pub mod validate_structure; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::{Display, From}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; pub use v0::TokenBurnTransitionV0; -#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From)] +#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_burn_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_burn_transition/v0/mod.rs index 3296b4fef8a..a28cbeb51d8 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_burn_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_burn_transition/v0/mod.rs @@ -1,7 +1,7 @@ pub mod v0_methods; use crate::state_transition::batch_transition::token_base_transition::TokenBaseTransition; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::Display; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; @@ -12,7 +12,7 @@ mod property_names { /// The Identifier fields in [`TokenBurnTransition`] pub use super::super::document_base_transition::IDENTIFIER_FIELDS; -#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, Display)] +#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, Display, DecodeUntrusted)] #[cfg_attr(feature = "json-conversion", crate::serialization::json_safe_fields)] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_claim_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_claim_transition/mod.rs index 1f623cc249b..9391d9a90a0 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_claim_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_claim_transition/mod.rs @@ -2,13 +2,13 @@ pub mod v0; mod v0_methods; pub mod validate_structure; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::{Display, From}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; pub use v0::TokenClaimTransitionV0; -#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From)] +#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_claim_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_claim_transition/v0/mod.rs index 11831c506af..b6e2cedd5b0 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_claim_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_claim_transition/v0/mod.rs @@ -6,13 +6,13 @@ use crate::data_contract::associated_token::token_distribution_key::TokenDistrib #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; use crate::state_transition::batch_transition::token_base_transition::TokenBaseTransition; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; use std::fmt; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, Default, Encode, Decode, PartialEq)] +#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_config_update_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_config_update_transition/mod.rs index 004a7d50f38..7c82fec25e1 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_config_update_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_config_update_transition/mod.rs @@ -2,13 +2,13 @@ pub mod v0; mod v0_methods; pub mod validate_structure; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::{Display, From}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; pub use v0::TokenConfigUpdateTransitionV0; -#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From)] +#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_config_update_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_config_update_transition/v0/mod.rs index 9091ee88562..6813e869c85 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_config_update_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_config_update_transition/v0/mod.rs @@ -6,13 +6,13 @@ use crate::data_contract::associated_token::token_configuration_item::TokenConfi #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; use crate::state_transition::batch_transition::token_base_transition::TokenBaseTransition; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::Display; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, Display)] +#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, Display, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_destroy_frozen_funds_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_destroy_frozen_funds_transition/mod.rs index 7b731be892f..b4db76f1426 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_destroy_frozen_funds_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_destroy_frozen_funds_transition/mod.rs @@ -2,13 +2,13 @@ pub mod v0; mod v0_methods; pub mod validate_structure; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::{Display, From}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; pub use v0::TokenDestroyFrozenFundsTransitionV0; -#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From)] +#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_destroy_frozen_funds_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_destroy_frozen_funds_transition/v0/mod.rs index b33f2e5f0bf..e61824c3246 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_destroy_frozen_funds_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_destroy_frozen_funds_transition/v0/mod.rs @@ -3,14 +3,14 @@ pub mod v0_methods; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; use crate::state_transition::batch_transition::token_base_transition::TokenBaseTransition; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::Display; use platform_value::Identifier; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, Display)] +#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, Display, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_direct_purchase_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_direct_purchase_transition/mod.rs index 1583ba5370b..ae1e96cef72 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_direct_purchase_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_direct_purchase_transition/mod.rs @@ -2,7 +2,7 @@ pub mod v0; mod v0_methods; pub mod validate_structure; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::{Display, From}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; @@ -16,7 +16,7 @@ pub use v0::TokenDirectPurchaseTransitionV0; /// /// This transition type is used when a user intends to directly purchase tokens /// by specifying the desired amount and the maximum total price they are willing to pay. -#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From)] +#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_direct_purchase_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_direct_purchase_transition/v0/mod.rs index dbaa2fffa47..34e30a10a48 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_direct_purchase_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_direct_purchase_transition/v0/mod.rs @@ -3,7 +3,7 @@ pub mod v0_methods; use crate::balances::credits::TokenAmount; use crate::fee::Credits; use crate::state_transition::batch_transition::token_base_transition::TokenBaseTransition; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; use std::fmt; @@ -11,7 +11,7 @@ use std::fmt; /// The Identifier fields in [`TokenDirectPurchaseTransition`] pub use super::super::document_base_transition::IDENTIFIER_FIELDS; -#[derive(Debug, Clone, Default, Encode, Decode, PartialEq)] +#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, DecodeUntrusted)] // Auto-injects `json_safe_u64` on `token_count: TokenAmount` and // `total_agreed_price: Credits` (both u64). #[cfg_attr(feature = "json-conversion", crate::serialization::json_safe_fields)] diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_emergency_action_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_emergency_action_transition/mod.rs index 529a19443d1..0c062ff60a0 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_emergency_action_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_emergency_action_transition/mod.rs @@ -2,13 +2,13 @@ pub mod v0; mod v0_methods; pub mod validate_structure; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::{Display, From}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; pub use v0::TokenEmergencyActionTransitionV0; -#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From)] +#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_emergency_action_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_emergency_action_transition/v0/mod.rs index 58ced445bb9..e12fa256e23 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_emergency_action_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_emergency_action_transition/v0/mod.rs @@ -4,13 +4,13 @@ pub mod v0_methods; use crate::serialization::json_safe_fields; use crate::state_transition::batch_transition::token_base_transition::TokenBaseTransition; use crate::tokens::emergency_action::TokenEmergencyAction; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; use std::fmt; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, Default, Encode, Decode, PartialEq)] +#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_freeze_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_freeze_transition/mod.rs index 26b68dca2a7..dbdfa720d57 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_freeze_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_freeze_transition/mod.rs @@ -2,13 +2,13 @@ pub mod v0; mod v0_methods; pub mod validate_structure; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::{Display, From}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; pub use v0::TokenFreezeTransitionV0; -#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From)] +#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_freeze_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_freeze_transition/v0/mod.rs index 3bae77be515..7fc5f64dcc5 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_freeze_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_freeze_transition/v0/mod.rs @@ -3,7 +3,7 @@ pub mod v0_methods; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; use crate::state_transition::batch_transition::token_base_transition::TokenBaseTransition; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_value::Identifier; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; @@ -13,7 +13,7 @@ use std::fmt; pub use super::super::document_base_transition::IDENTIFIER_FIELDS; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, Default, Encode, Decode, PartialEq)] +#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_mint_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_mint_transition/mod.rs index 488a5f46d58..b82c7c3a0e0 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_mint_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_mint_transition/mod.rs @@ -2,13 +2,13 @@ pub mod v0; mod v0_methods; pub mod validate_structure; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::{Display, From}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; pub use v0::TokenMintTransitionV0; -#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From)] +#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_mint_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_mint_transition/v0/mod.rs index 360a59d3454..583efb56e4a 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_mint_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_mint_transition/v0/mod.rs @@ -1,7 +1,7 @@ pub mod v0_methods; use crate::state_transition::batch_transition::token_base_transition::TokenBaseTransition; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_value::string_encoding::Encoding; use platform_value::Identifier; #[cfg(feature = "serde-conversion")] @@ -14,7 +14,7 @@ mod property_names { /// The Identifier fields in [`TokenMintTransition`] pub use super::super::document_base_transition::IDENTIFIER_FIELDS; -#[derive(Debug, Clone, Default, Encode, Decode, PartialEq)] +#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, DecodeUntrusted)] // Auto-injects `json_safe_u64` on `amount: u64`. #[cfg_attr(feature = "json-conversion", crate::serialization::json_safe_fields)] #[cfg_attr( diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_set_price_for_direct_purchase_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_set_price_for_direct_purchase_transition/mod.rs index 2404380b2dc..5bd86aa8b16 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_set_price_for_direct_purchase_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_set_price_for_direct_purchase_transition/mod.rs @@ -2,7 +2,7 @@ pub mod v0; mod v0_methods; pub mod validate_structure; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::{Display, From}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; @@ -21,7 +21,7 @@ pub use v0::TokenSetPriceForDirectPurchaseTransitionV0; /// /// Versioning enables forward compatibility by allowing future enhancements or changes /// without breaking existing clients. -#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From)] +#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_set_price_for_direct_purchase_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_set_price_for_direct_purchase_transition/v0/mod.rs index b04050ef21f..56e8a04f18e 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_set_price_for_direct_purchase_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_set_price_for_direct_purchase_transition/v0/mod.rs @@ -6,13 +6,13 @@ pub use super::super::document_base_transition::IDENTIFIER_FIELDS; use crate::serialization::json_safe_fields; use crate::state_transition::batch_transition::token_base_transition::TokenBaseTransition; use crate::tokens::token_pricing_schedule::TokenPricingSchedule; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; use std::fmt; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, Default, Encode, Decode, PartialEq)] +#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_transfer_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_transfer_transition/mod.rs index bf71e260ad6..c33844251cf 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_transfer_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_transfer_transition/mod.rs @@ -2,13 +2,13 @@ pub mod v0; pub mod v0_methods; pub mod validate_structure; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::{Display, From}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; pub use v0::*; -#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From)] +#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_transfer_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_transfer_transition/v0/mod.rs index 27d783aed9a..06244a32556 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_transfer_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_transfer_transition/v0/mod.rs @@ -1,6 +1,6 @@ pub mod v0_methods; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::Display; pub use super::super::token_base_transition::IDENTIFIER_FIELDS; @@ -15,7 +15,7 @@ mod property_names { pub const RECIPIENT_OWNER_ID: &str = "recipientOwnerId"; } -#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, Display)] +#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, Display, DecodeUntrusted)] // `json_safe_fields` auto-injects: // - `json_safe_u64` on `amount: u64` (JS-safe stringification when large) // - `json_safe_option_encrypted_note` on `shared_encrypted_note` and diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_transition.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_transition.rs index 0c6ab3152f9..0269ea0b610 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_transition.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_transition.rs @@ -2,7 +2,7 @@ use derive_more::{Display, From}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; use platform_value::Identifier; -use bincode::{Encode, Decode}; +use bincode::{Encode, Decode, DecodeUntrusted}; use platform_version::version::PlatformVersion; use crate::balances::credits::TokenAmount; use crate::block::block_info::BlockInfo; @@ -45,7 +45,7 @@ pub const TOKEN_HISTORY_ID_BYTES: [u8; 32] = [ 187, 110, 233, 128, 63, 48, 172, 29, 210, 108, ]; -#[derive(Debug, Clone, Encode, Decode, From, PartialEq, Display)] +#[derive(Debug, Clone, Encode, Decode, From, PartialEq, Display, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_unfreeze_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_unfreeze_transition/mod.rs index ca16df71ced..557936417e8 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_unfreeze_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_unfreeze_transition/mod.rs @@ -2,13 +2,13 @@ pub mod v0; mod v0_methods; pub mod validate_structure; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::{Display, From}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; pub use v0::TokenUnfreezeTransitionV0; -#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From)] +#[derive(Debug, Clone, Encode, Decode, PartialEq, Display, From, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_unfreeze_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_unfreeze_transition/v0/mod.rs index 2c6a3d1c90b..717eef9fb70 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_unfreeze_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_unfreeze_transition/v0/mod.rs @@ -3,7 +3,7 @@ pub mod v0_methods; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; use crate::state_transition::batch_transition::token_base_transition::TokenBaseTransition; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_value::Identifier; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; @@ -13,7 +13,7 @@ use std::fmt; pub use super::super::document_base_transition::IDENTIFIER_FIELDS; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, Default, Encode, Decode, PartialEq)] +#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/mod.rs index 4be86b2b0e9..964a8d2e1ec 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/mod.rs @@ -1,4 +1,4 @@ -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use std::convert::TryInto; @@ -71,6 +71,7 @@ pub use v1::*; PlatformSignable, PlatformVersioned, From, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/v0/mod.rs index bb0ba1533c9..6d96d6ab424 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/v0/mod.rs @@ -8,7 +8,7 @@ use crate::identity::KeyID; use crate::state_transition::state_transitions::document::batch_transition::batched_transition::document_transition::DocumentTransition; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, Encode, DecodeUntrusted}; use platform_serialization_derive::PlatformSignable; use crate::prelude::UserFeeIncrease; @@ -19,7 +19,7 @@ use platform_value::{BinaryData, Identifier}; use serde::{Deserialize, Serialize}; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, PartialEq, Encode, Decode, PlatformSignable)] +#[derive(Debug, Clone, PartialEq, Encode, Decode, PlatformSignable, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/v1/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/v1/mod.rs index fbda254cfe0..0c90da22cd4 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/v1/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/v1/mod.rs @@ -9,7 +9,7 @@ use crate::identity::KeyID; use crate::state_transition::batch_transition::batched_transition::BatchedTransition; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::PlatformSignable; use crate::prelude::UserFeeIncrease; @@ -20,7 +20,7 @@ use platform_value::{BinaryData, Identifier}; use serde::{Deserialize, Serialize}; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, PartialEq, Encode, Decode, PlatformSignable)] +#[derive(Debug, Clone, PartialEq, Encode, Decode, PlatformSignable, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_create_from_addresses_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_create_from_addresses_transition/mod.rs index aa427159896..b96f0f6bd5f 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_create_from_addresses_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_create_from_addresses_transition/mod.rs @@ -18,7 +18,7 @@ use crate::state_transition::StateTransitionFieldTypes; use crate::identity::state_transition::OptionallyAssetLockProved; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use fields::*; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; @@ -40,6 +40,7 @@ pub type IdentityCreateFromAddressesTransitionLatest = IdentityCreateFromAddress PlatformVersioned, From, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_create_from_addresses_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_create_from_addresses_transition/v0/mod.rs index a023e9aae62..3c1f9f2bbd4 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_create_from_addresses_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_create_from_addresses_transition/v0/mod.rs @@ -6,7 +6,7 @@ mod version; use std::collections::BTreeMap; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::PlatformSignable; use crate::address_funds::{AddressFundsFeeStrategy, AddressWitness, PlatformAddress}; @@ -21,7 +21,7 @@ use crate::ProtocolError; use serde::{Deserialize, Serialize}; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, PartialEq, Encode, Decode, PlatformSignable)] +#[derive(Debug, Clone, PartialEq, Encode, Decode, PlatformSignable, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_create_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_create_transition/mod.rs index 50f1ae9938f..7c1b618011f 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_create_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_create_transition/mod.rs @@ -16,7 +16,7 @@ use crate::state_transition::identity_create_transition::v0::IdentityCreateTrans use crate::state_transition::StateTransitionFieldTypes; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use fields::*; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; @@ -42,6 +42,7 @@ pub type IdentityCreateTransitionLatest = IdentityCreateTransitionV0; PlatformVersioned, From, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_create_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_create_transition/v0/mod.rs index 11b90ce3c09..6371d8db1a7 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_create_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_create_transition/v0/mod.rs @@ -8,7 +8,7 @@ mod version; use crate::serialization::json_safe_fields; use std::convert::TryFrom; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::PlatformSignable; use platform_value::BinaryData; @@ -28,7 +28,7 @@ use crate::version::PlatformVersion; use crate::ProtocolError; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, PartialEq, Encode, Decode, PlatformSignable)] +#[derive(Debug, Clone, PartialEq, Encode, Decode, PlatformSignable, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_transfer_to_addresses_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_transfer_to_addresses_transition/mod.rs index 714db181a71..9b74266a87f 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_transfer_to_addresses_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_transfer_to_addresses_transition/mod.rs @@ -19,7 +19,7 @@ use crate::state_transition::StateTransitionFieldTypes; use crate::identity::state_transition::OptionallyAssetLockProved; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use fields::*; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; @@ -42,6 +42,7 @@ pub type IdentityCreditTransferToAddressesTransitionLatest = PlatformVersioned, From, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_transfer_to_addresses_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_transfer_to_addresses_transition/v0/mod.rs index 9f25c87f49e..b76a2859bb3 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_transfer_to_addresses_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_transfer_to_addresses_transition/v0/mod.rs @@ -15,7 +15,7 @@ use crate::fee::Credits; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; use platform_value::BinaryData; #[cfg(feature = "serde-conversion")] @@ -30,6 +30,7 @@ use serde::{Deserialize, Serialize}; PlatformDeserialize, PlatformSignable, PartialEq, + DecodeUntrusted, )] #[cfg_attr(feature = "json-conversion", json_safe_fields)] #[cfg_attr( diff --git a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_transfer_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_transfer_transition/mod.rs index ccb686e8aa6..ff88f29df0c 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_transfer_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_transfer_transition/mod.rs @@ -18,7 +18,7 @@ use crate::state_transition::StateTransitionFieldTypes; use crate::identity::state_transition::OptionallyAssetLockProved; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use fields::*; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; @@ -44,6 +44,7 @@ pub type IdentityCreditTransferTransitionLatest = IdentityCreditTransferTransiti PlatformVersioned, From, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_transfer_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_transfer_transition/v0/mod.rs index 7e12c7d0d42..b95f2723797 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_transfer_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_transfer_transition/v0/mod.rs @@ -11,7 +11,7 @@ use crate::serialization::json_safe_fields; use crate::prelude::{Identifier, IdentityNonce, UserFeeIncrease}; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; use platform_value::BinaryData; #[cfg(feature = "serde-conversion")] @@ -27,6 +27,7 @@ use serde::{Deserialize, Serialize}; PlatformDeserialize, PlatformSignable, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_withdrawal_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_withdrawal_transition/mod.rs index 2bfe6acc69d..c08ff01e284 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_withdrawal_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_withdrawal_transition/mod.rs @@ -23,7 +23,7 @@ use crate::state_transition::identity_credit_withdrawal_transition::v1::{ IdentityCreditWithdrawalTransitionV1, IdentityCreditWithdrawalTransitionV1Signable, }; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use dashcore::transaction::special_transaction::asset_unlock::qualified_asset_unlock::ASSET_UNLOCK_TX_SIZE; use derive_more::From; use fields::*; @@ -69,6 +69,7 @@ pub type IdentityCreditWithdrawalTransitionLatest = IdentityCreditWithdrawalTran PlatformVersioned, From, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_withdrawal_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_withdrawal_transition/v0/mod.rs index fb9a519c6da..bf580a3ca75 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_withdrawal_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_withdrawal_transition/v0/mod.rs @@ -5,7 +5,7 @@ mod version; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::PlatformSignable; use platform_value::BinaryData; #[cfg(feature = "serde-conversion")] @@ -20,7 +20,7 @@ use crate::{ }; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, Encode, Decode, PlatformSignable, PartialEq)] +#[derive(Debug, Clone, Encode, Decode, PlatformSignable, PartialEq, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), @@ -53,21 +53,39 @@ mod test { use crate::serialization::{PlatformDeserializable, PlatformSerializable}; use crate::state_transition::identity_credit_withdrawal_transition::v0::Pooling; use crate::ProtocolError; - use bincode::{Decode, Encode}; + use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::{BinaryData, Identifier}; use rand::Rng; use std::fmt::Debug; // Structure with 1 property - #[derive(Debug, Clone, Encode, Decode, PlatformDeserialize, PlatformSerialize, PartialEq)] + #[derive( + Debug, + Clone, + Encode, + Decode, + PlatformDeserialize, + PlatformSerialize, + PartialEq, + DecodeUntrusted, + )] #[platform_serialize(unversioned)] struct IdentityCreditWithdrawalTransitionV01 { pub identity_id: Identifier, } // Structure with 2 properties - #[derive(Debug, Clone, Encode, Decode, PlatformDeserialize, PlatformSerialize, PartialEq)] + #[derive( + Debug, + Clone, + Encode, + Decode, + PlatformDeserialize, + PlatformSerialize, + PartialEq, + DecodeUntrusted, + )] #[platform_serialize(unversioned)] struct IdentityCreditWithdrawalTransitionV02 { pub identity_id: Identifier, @@ -75,7 +93,16 @@ mod test { } // Structure with 3 properties - #[derive(Debug, Clone, Encode, Decode, PlatformDeserialize, PlatformSerialize, PartialEq)] + #[derive( + Debug, + Clone, + Encode, + Decode, + PlatformDeserialize, + PlatformSerialize, + PartialEq, + DecodeUntrusted, + )] #[platform_serialize(unversioned)] struct IdentityCreditWithdrawalTransitionV03 { pub identity_id: Identifier, @@ -84,7 +111,16 @@ mod test { } // Structure with 4 properties - #[derive(Debug, Clone, Encode, Decode, PlatformDeserialize, PlatformSerialize, PartialEq)] + #[derive( + Debug, + Clone, + Encode, + Decode, + PlatformDeserialize, + PlatformSerialize, + PartialEq, + DecodeUntrusted, + )] #[platform_serialize(unversioned)] struct IdentityCreditWithdrawalTransitionV04 { pub identity_id: Identifier, @@ -94,7 +130,16 @@ mod test { } // Structure with 5 properties - #[derive(Debug, Clone, Encode, Decode, PlatformDeserialize, PlatformSerialize, PartialEq)] + #[derive( + Debug, + Clone, + Encode, + Decode, + PlatformDeserialize, + PlatformSerialize, + PartialEq, + DecodeUntrusted, + )] #[platform_serialize(unversioned)] struct IdentityCreditWithdrawalTransitionV05 { pub identity_id: Identifier, @@ -105,7 +150,16 @@ mod test { } // Structure with 6 properties - #[derive(Debug, Clone, Encode, Decode, PlatformDeserialize, PlatformSerialize, PartialEq)] + #[derive( + Debug, + Clone, + Encode, + Decode, + PlatformDeserialize, + PlatformSerialize, + PartialEq, + DecodeUntrusted, + )] #[platform_serialize(unversioned)] struct IdentityCreditWithdrawalTransitionV06 { pub identity_id: Identifier, @@ -117,7 +171,16 @@ mod test { } // Structure with 7 properties - #[derive(Debug, Clone, Encode, Decode, PlatformDeserialize, PlatformSerialize, PartialEq)] + #[derive( + Debug, + Clone, + Encode, + Decode, + PlatformDeserialize, + PlatformSerialize, + PartialEq, + DecodeUntrusted, + )] #[platform_serialize(unversioned)] struct IdentityCreditWithdrawalTransitionV07 { pub identity_id: Identifier, @@ -130,7 +193,16 @@ mod test { } // Structure with 8 properties - #[derive(Debug, Clone, Encode, Decode, PlatformDeserialize, PlatformSerialize, PartialEq)] + #[derive( + Debug, + Clone, + Encode, + Decode, + PlatformDeserialize, + PlatformSerialize, + PartialEq, + DecodeUntrusted, + )] #[platform_serialize(unversioned)] struct IdentityCreditWithdrawalTransitionV08 { pub identity_id: Identifier, @@ -144,7 +216,16 @@ mod test { } // Structure with 9 properties - #[derive(Debug, Clone, Encode, Decode, PlatformDeserialize, PlatformSerialize, PartialEq)] + #[derive( + Debug, + Clone, + Encode, + Decode, + PlatformDeserialize, + PlatformSerialize, + PartialEq, + DecodeUntrusted, + )] #[platform_serialize(unversioned)] struct IdentityCreditWithdrawalTransitionV09 { pub identity_id: Identifier, diff --git a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_withdrawal_transition/v1/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_withdrawal_transition/v1/mod.rs index b445d14700c..02a8adb5fca 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_withdrawal_transition/v1/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_withdrawal_transition/v1/mod.rs @@ -6,7 +6,7 @@ mod version; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::PlatformSignable; use platform_value::BinaryData; #[cfg(feature = "serde-conversion")] @@ -21,7 +21,7 @@ use crate::{ }; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, Encode, Decode, PlatformSignable, PartialEq)] +#[derive(Debug, Clone, Encode, Decode, PlatformSignable, PartialEq, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_topup_from_addresses_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_topup_from_addresses_transition/mod.rs index 92380ff61be..2c6ebb91844 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_topup_from_addresses_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_topup_from_addresses_transition/mod.rs @@ -19,7 +19,7 @@ use crate::state_transition::identity_topup_from_addresses_transition::v0::Ident use crate::state_transition::StateTransitionFieldTypes; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; use platform_version::version::PlatformVersion; @@ -38,6 +38,7 @@ use serde::{Deserialize, Serialize}; PlatformVersioned, From, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_topup_from_addresses_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_topup_from_addresses_transition/v0/mod.rs index a25069be018..3a2d26347c3 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_topup_from_addresses_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_topup_from_addresses_transition/v0/mod.rs @@ -4,7 +4,7 @@ mod types; pub(super) mod v0_methods; mod version; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::PlatformSignable; use std::collections::BTreeMap; @@ -19,7 +19,7 @@ use serde::{Deserialize, Serialize}; use crate::ProtocolError; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, Encode, Decode, PlatformSignable, PartialEq)] +#[derive(Debug, Clone, Encode, Decode, PlatformSignable, PartialEq, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_topup_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_topup_transition/mod.rs index 74da8481583..573e291fe6c 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_topup_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_topup_transition/mod.rs @@ -18,7 +18,7 @@ use crate::state_transition::identity_topup_transition::v0::IdentityTopUpTransit use crate::state_transition::StateTransitionFieldTypes; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; use platform_version::version::PlatformVersion; @@ -41,6 +41,7 @@ use serde::{Deserialize, Serialize}; PlatformVersioned, From, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_topup_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_topup_transition/v0/mod.rs index b01df1d247a..939d39de74e 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_topup_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_topup_transition/v0/mod.rs @@ -6,7 +6,7 @@ mod version; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::PlatformSignable; use platform_value::BinaryData; @@ -29,7 +29,7 @@ mod property_names { } #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, Encode, Decode, PlatformSignable, PartialEq)] +#[derive(Debug, Clone, Encode, Decode, PlatformSignable, PartialEq, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_update_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_update_transition/mod.rs index 26321a944e2..31f0ff62da6 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_update_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_update_transition/mod.rs @@ -20,7 +20,7 @@ use fields::*; use crate::identity::state_transition::OptionallyAssetLockProved; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; use platform_version::version::PlatformVersion; @@ -43,6 +43,7 @@ use serde::{Deserialize, Serialize}; PlatformVersioned, From, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_update_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_update_transition/v0/mod.rs index fdf350d6ea3..c4baf5e7905 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_update_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/identity/identity_update_transition/v0/mod.rs @@ -6,7 +6,7 @@ mod version; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::PlatformSignable; use platform_value::{BinaryData, Value}; #[cfg(feature = "serde-conversion")] @@ -25,7 +25,7 @@ use crate::{ }; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Encode, Decode, PlatformSignable, Debug, Clone, PartialEq)] +#[derive(Encode, Decode, PlatformSignable, Debug, Clone, PartialEq, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/identity/masternode_vote_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/identity/masternode_vote_transition/mod.rs index 573a45ce0c6..4de28b04124 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/identity/masternode_vote_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/identity/masternode_vote_transition/mod.rs @@ -18,7 +18,7 @@ use crate::state_transition::StateTransitionFieldTypes; use crate::identity::state_transition::OptionallyAssetLockProved; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use fields::*; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; @@ -44,6 +44,7 @@ pub type MasternodeVoteTransitionLatest = MasternodeVoteTransitionV0; PlatformVersioned, From, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/identity/masternode_vote_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/identity/masternode_vote_transition/v0/mod.rs index 80bf2bae25d..10c13676501 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/identity/masternode_vote_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/identity/masternode_vote_transition/v0/mod.rs @@ -12,7 +12,7 @@ use crate::prelude::{Identifier, IdentityNonce}; use crate::protocol_error::ProtocolError; use crate::voting::votes::Vote; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; use platform_value::BinaryData; #[cfg(feature = "serde-conversion")] @@ -28,6 +28,7 @@ use serde::{Deserialize, Serialize}; PlatformDeserialize, PlatformSignable, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/identity/public_key_in_creation/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/identity/public_key_in_creation/mod.rs index 98ac687de63..05113aa9cff 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/identity/public_key_in_creation/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/identity/public_key_in_creation/mod.rs @@ -6,7 +6,7 @@ use crate::serialization::ValueConvertible; use crate::state_transition::public_key_in_creation::v0::IdentityPublicKeyInCreationV0; use crate::state_transition::public_key_in_creation::v0::IdentityPublicKeyInCreationV0Signable; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization_derive::PlatformSignable; @@ -25,7 +25,7 @@ mod version; all(feature = "json-conversion", feature = "serde-conversion"), derive(JsonConvertible) )] -#[derive(Debug, Encode, Decode, PlatformSignable, Clone, PartialEq, Eq, From)] +#[derive(Debug, Encode, Decode, PlatformSignable, Clone, PartialEq, Eq, From, DecodeUntrusted)] //here we want to indicate that IdentityPublicKeyInCreation can be transformed into IdentityPublicKeyInCreationSignable #[platform_signable(derive_into)] #[cfg_attr( diff --git a/packages/rs-dpp/src/state_transition/state_transitions/identity/public_key_in_creation/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/identity/public_key_in_creation/v0/mod.rs index 35d406cffe5..fff252baef4 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/identity/public_key_in_creation/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/identity/public_key_in_creation/v0/mod.rs @@ -7,7 +7,7 @@ use crate::serialization::json_safe_fields; use std::convert::TryFrom; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use serde::{Deserialize, Serialize}; use platform_value::{BinaryData, Value}; @@ -30,7 +30,17 @@ pub const BINARY_DATA_FIELDS: [&str; 2] = ["data", "signature"]; #[cfg_attr(feature = "json-conversion", json_safe_fields)] #[derive( - Default, Debug, Serialize, Deserialize, Encode, Decode, PlatformSignable, Clone, PartialEq, Eq, + Default, + Debug, + Serialize, + Deserialize, + Encode, + Decode, + PlatformSignable, + Clone, + PartialEq, + Eq, + DecodeUntrusted, )] #[serde(rename_all = "camelCase")] pub struct IdentityPublicKeyInCreationV0 { diff --git a/packages/rs-dpp/src/state_transition/state_transitions/shielded/identity_create_from_shielded_pool_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/shielded/identity_create_from_shielded_pool_transition/mod.rs index 0e11c927edb..5c87302f379 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/shielded/identity_create_from_shielded_pool_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/shielded/identity_create_from_shielded_pool_transition/mod.rs @@ -21,7 +21,7 @@ use crate::serialization::ValueConvertible; use crate::shielded::SerializedAction; use crate::util::hash::hash_double; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; use platform_value::Identifier; @@ -40,6 +40,7 @@ use serde::{Deserialize, Serialize}; PlatformVersioned, From, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/shielded/identity_create_from_shielded_pool_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/shielded/identity_create_from_shielded_pool_transition/v0/mod.rs index 59df7169e2c..626f67c544e 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/shielded/identity_create_from_shielded_pool_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/shielded/identity_create_from_shielded_pool_transition/v0/mod.rs @@ -11,14 +11,14 @@ use crate::shielded::SerializedAction; use crate::state_transition::public_key_in_creation::IdentityPublicKeyInCreation; use crate::state_transition::public_key_in_creation::IdentityPublicKeyInCreationSignable; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::PlatformSignable; use platform_value::Identifier; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, PartialEq, Encode, Decode, PlatformSignable)] +#[derive(Debug, Clone, PartialEq, Encode, Decode, PlatformSignable, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/mod.rs index 541deac47fa..b41a30e140b 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/mod.rs @@ -27,7 +27,7 @@ use crate::serialization::JsonConvertible; #[cfg(feature = "value-conversion")] use crate::serialization::ValueConvertible; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; use platform_versioning::PlatformVersioned; @@ -45,6 +45,7 @@ use serde::{Deserialize, Serialize}; PlatformVersioned, From, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/v0/mod.rs index 7a4e185b618..5a7883d55d6 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/v0/mod.rs @@ -9,7 +9,7 @@ use crate::address_funds::PlatformAddress; use crate::identity::state_transition::asset_lock_proof::AssetLockProof; use crate::shielded::SerializedAction; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; use platform_value::BinaryData; #[cfg(feature = "serde-conversion")] @@ -25,6 +25,7 @@ use serde::{Deserialize, Serialize}; PlatformDeserialize, PlatformSignable, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_transition/mod.rs index d81ad112d31..b24de014372 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_transition/mod.rs @@ -18,7 +18,7 @@ use crate::serialization::JsonConvertible; #[cfg(feature = "value-conversion")] use crate::serialization::ValueConvertible; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; use platform_versioning::PlatformVersioned; @@ -36,6 +36,7 @@ use serde::{Deserialize, Serialize}; PlatformVersioned, From, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_transition/v0/mod.rs index 597e4372b48..72dd739775b 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_transition/v0/mod.rs @@ -12,7 +12,7 @@ use crate::fee::Credits; use crate::prelude::{AddressNonce, UserFeeIncrease}; use crate::shielded::SerializedAction; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; @@ -27,6 +27,7 @@ use serde::{Deserialize, Serialize}; PlatformDeserialize, PlatformSignable, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_transfer_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_transfer_transition/mod.rs index 1b4943406d6..d36a507785d 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_transfer_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_transfer_transition/mod.rs @@ -18,7 +18,7 @@ use crate::serialization::JsonConvertible; #[cfg(feature = "value-conversion")] use crate::serialization::ValueConvertible; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; use platform_versioning::PlatformVersioned; @@ -36,6 +36,7 @@ use serde::{Deserialize, Serialize}; PlatformVersioned, From, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_transfer_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_transfer_transition/v0/mod.rs index 2c0cb8406be..68ce4e116a9 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_transfer_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_transfer_transition/v0/mod.rs @@ -6,7 +6,7 @@ mod version; use crate::shielded::SerializedAction; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; @@ -21,6 +21,7 @@ use serde::{Deserialize, Serialize}; PlatformDeserialize, PlatformSignable, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_withdrawal_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_withdrawal_transition/mod.rs index 4cb092e86a5..74776a6692d 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_withdrawal_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_withdrawal_transition/mod.rs @@ -18,7 +18,7 @@ use crate::serialization::JsonConvertible; #[cfg(feature = "value-conversion")] use crate::serialization::ValueConvertible; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; use platform_versioning::PlatformVersioned; @@ -36,6 +36,7 @@ use serde::{Deserialize, Serialize}; PlatformVersioned, From, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_withdrawal_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_withdrawal_transition/v0/mod.rs index 1bc9f395e81..f2e0678bb97 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_withdrawal_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_withdrawal_transition/v0/mod.rs @@ -8,7 +8,7 @@ use crate::identity::core_script::CoreScript; use crate::shielded::SerializedAction; use crate::withdrawal::Pooling; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; @@ -23,6 +23,7 @@ use serde::{Deserialize, Serialize}; PlatformDeserialize, PlatformSignable, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/shielded/unshield_transition/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/shielded/unshield_transition/mod.rs index 1a8f8c8085a..99161a67084 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/shielded/unshield_transition/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/shielded/unshield_transition/mod.rs @@ -18,7 +18,7 @@ use crate::serialization::JsonConvertible; #[cfg(feature = "value-conversion")] use crate::serialization::ValueConvertible; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; use platform_versioning::PlatformVersioned; @@ -36,6 +36,7 @@ use serde::{Deserialize, Serialize}; PlatformVersioned, From, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/state_transition/state_transitions/shielded/unshield_transition/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/shielded/unshield_transition/v0/mod.rs index 0ee73864934..dcc7726a176 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/shielded/unshield_transition/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/shielded/unshield_transition/v0/mod.rs @@ -7,7 +7,7 @@ mod version; use crate::address_funds::PlatformAddress; use crate::shielded::SerializedAction; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; @@ -22,6 +22,7 @@ use serde::{Deserialize, Serialize}; PlatformDeserialize, PlatformSignable, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/tokens/contract_info/mod.rs b/packages/rs-dpp/src/tokens/contract_info/mod.rs index ba96a52d24e..fc715cbdce2 100644 --- a/packages/rs-dpp/src/tokens/contract_info/mod.rs +++ b/packages/rs-dpp/src/tokens/contract_info/mod.rs @@ -1,7 +1,7 @@ use crate::data_contract::TokenContractPosition; use crate::tokens::contract_info::v0::TokenContractInfoV0; use crate::ProtocolError; -use bincode::Encode; +use bincode::{DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization::de::Decode; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; @@ -22,6 +22,7 @@ pub mod v0; PlatformVersioned, From, PartialEq, + DecodeUntrusted, )] #[platform_serialize(unversioned)] //versioned directly, no need to use platform_version #[cfg_attr( diff --git a/packages/rs-dpp/src/tokens/contract_info/v0/mod.rs b/packages/rs-dpp/src/tokens/contract_info/v0/mod.rs index f8590d7250f..74523fd96bd 100644 --- a/packages/rs-dpp/src/tokens/contract_info/v0/mod.rs +++ b/packages/rs-dpp/src/tokens/contract_info/v0/mod.rs @@ -1,9 +1,9 @@ use crate::data_contract::TokenContractPosition; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use platform_value::Identifier; -#[derive(Debug, Clone, Encode, Decode, From, PartialEq)] +#[derive(Debug, Clone, Encode, Decode, From, PartialEq, DecodeUntrusted)] #[cfg_attr( any(feature = "fixtures-and-mocks", feature = "serde-conversion"), derive(serde::Serialize, serde::Deserialize), diff --git a/packages/rs-dpp/src/tokens/emergency_action.rs b/packages/rs-dpp/src/tokens/emergency_action.rs index 89e03f8a1b4..d7cfa758edf 100644 --- a/packages/rs-dpp/src/tokens/emergency_action.rs +++ b/packages/rs-dpp/src/tokens/emergency_action.rs @@ -1,11 +1,13 @@ use crate::tokens::status::TokenStatus; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_version::version::PlatformVersion; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; -#[derive(Debug, Clone, Copy, Default, Encode, Decode, PartialOrd, PartialEq, Eq)] +#[derive( + Debug, Clone, Copy, Default, Encode, Decode, PartialOrd, PartialEq, Eq, DecodeUntrusted, +)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/tokens/gas_fees_paid_by.rs b/packages/rs-dpp/src/tokens/gas_fees_paid_by.rs index e7987805a14..06087f96ae5 100644 --- a/packages/rs-dpp/src/tokens/gas_fees_paid_by.rs +++ b/packages/rs-dpp/src/tokens/gas_fees_paid_by.rs @@ -2,12 +2,12 @@ use crate::consensus::basic::data_contract::UnknownGasFeesPaidByError; use crate::consensus::basic::BasicError; use crate::consensus::ConsensusError; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::Display; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; -#[derive(Debug, Clone, Copy, Encode, Decode, Default, PartialEq, Display)] +#[derive(Debug, Clone, Copy, Encode, Decode, Default, PartialEq, Display, DecodeUntrusted)] #[cfg_attr(feature = "serde-conversion", derive(Serialize, Deserialize))] pub enum GasFeesPaidBy { /// The user pays the gas fees diff --git a/packages/rs-dpp/src/tokens/info/mod.rs b/packages/rs-dpp/src/tokens/info/mod.rs index f4bf7a61528..9042839d6da 100644 --- a/packages/rs-dpp/src/tokens/info/mod.rs +++ b/packages/rs-dpp/src/tokens/info/mod.rs @@ -7,7 +7,7 @@ use crate::serialization::JsonConvertible; use crate::serialization::ValueConvertible; use crate::tokens::info::v0::IdentityTokenInfoV0; use crate::ProtocolError; -use bincode::Encode; +use bincode::{DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization::de::Decode; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; @@ -33,6 +33,7 @@ pub mod v0; PlatformVersioned, From, PartialEq, + DecodeUntrusted, )] #[platform_serialize(unversioned)] //versioned directly, no need to use platform_version #[cfg_attr( diff --git a/packages/rs-dpp/src/tokens/info/v0/mod.rs b/packages/rs-dpp/src/tokens/info/v0/mod.rs index 28df747105c..3443fe7694d 100644 --- a/packages/rs-dpp/src/tokens/info/v0/mod.rs +++ b/packages/rs-dpp/src/tokens/info/v0/mod.rs @@ -1,10 +1,10 @@ #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, Encode, Decode, From, PartialEq)] +#[derive(Debug, Clone, Encode, Decode, From, PartialEq, DecodeUntrusted)] #[cfg_attr( any(feature = "fixtures-and-mocks", feature = "serde-conversion"), derive(serde::Serialize, serde::Deserialize) diff --git a/packages/rs-dpp/src/tokens/status/mod.rs b/packages/rs-dpp/src/tokens/status/mod.rs index 627352683be..8ed89df3b94 100644 --- a/packages/rs-dpp/src/tokens/status/mod.rs +++ b/packages/rs-dpp/src/tokens/status/mod.rs @@ -4,7 +4,7 @@ use crate::serialization::JsonConvertible; use crate::serialization::ValueConvertible; use crate::tokens::status::v0::TokenStatusV0; use crate::ProtocolError; -use bincode::Encode; +use bincode::{DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization::de::Decode; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; @@ -27,6 +27,7 @@ pub mod v0; PlatformVersioned, From, PartialEq, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/tokens/status/v0/mod.rs b/packages/rs-dpp/src/tokens/status/v0/mod.rs index db76fa5e56e..2fdd46fd6d4 100644 --- a/packages/rs-dpp/src/tokens/status/v0/mod.rs +++ b/packages/rs-dpp/src/tokens/status/v0/mod.rs @@ -1,10 +1,10 @@ #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, Encode, Decode, From, PartialEq)] +#[derive(Debug, Clone, Encode, Decode, From, PartialEq, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(serde::Serialize, serde::Deserialize), diff --git a/packages/rs-dpp/src/tokens/token_event.rs b/packages/rs-dpp/src/tokens/token_event.rs index 5066b0f0479..b26203e2ffd 100644 --- a/packages/rs-dpp/src/tokens/token_event.rs +++ b/packages/rs-dpp/src/tokens/token_event.rs @@ -14,7 +14,7 @@ use crate::prelude::{ use crate::serialization::JsonConvertible; #[cfg(feature = "value-conversion")] use crate::serialization::ValueConvertible; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; use platform_version::version::PlatformVersion; @@ -58,7 +58,16 @@ pub type FrozenIdentifier = Identifier; /// involved identities, and amounts. It is **externally versioned** and marked as `unversioned` in platform serialization, /// meaning each variant is self-contained without requiring version dispatching logic. #[derive( - Debug, PartialEq, PartialOrd, Clone, Eq, Encode, Decode, PlatformDeserialize, PlatformSerialize, + Debug, + PartialEq, + PartialOrd, + Clone, + Eq, + Encode, + Decode, + PlatformDeserialize, + PlatformSerialize, + DecodeUntrusted, )] // Custom `Serialize` / `Deserialize` below — `TokenEvent` is a flat enum // with all-tuple variants. Internal tagging requires struct variants or diff --git a/packages/rs-dpp/src/tokens/token_payment_info/mod.rs b/packages/rs-dpp/src/tokens/token_payment_info/mod.rs index 9a37abb3777..1d289681612 100644 --- a/packages/rs-dpp/src/tokens/token_payment_info/mod.rs +++ b/packages/rs-dpp/src/tokens/token_payment_info/mod.rs @@ -49,7 +49,7 @@ use crate::tokens::token_payment_info::methods::v0::TokenPaymentInfoMethodsV0; use crate::tokens::token_payment_info::v0::v0_accessors::TokenPaymentInfoAccessorsV0; use crate::tokens::token_payment_info::v0::TokenPaymentInfoV0; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::{Display, From}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::btreemap_extensions::BTreeValueMapHelper; @@ -74,6 +74,7 @@ pub mod v0; PartialEq, Display, From, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/tokens/token_payment_info/v0/mod.rs b/packages/rs-dpp/src/tokens/token_payment_info/v0/mod.rs index b180bbbf9b0..8934aed3097 100644 --- a/packages/rs-dpp/src/tokens/token_payment_info/v0/mod.rs +++ b/packages/rs-dpp/src/tokens/token_payment_info/v0/mod.rs @@ -5,7 +5,7 @@ use crate::data_contract::TokenContractPosition; use crate::tokens::gas_fees_paid_by::GasFeesPaidBy; use crate::tokens::token_payment_info::v0::v0_accessors::TokenPaymentInfoAccessorsV0; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::Display; use platform_value::btreemap_extensions::BTreeValueRemoveFromMapHelper; use platform_value::{Identifier, Value}; @@ -13,7 +13,7 @@ use platform_value::{Identifier, Value}; use serde::{Deserialize, Serialize}; use std::collections::BTreeMap; -#[derive(Debug, Clone, Copy, Encode, Decode, Default, PartialEq, Display)] +#[derive(Debug, Clone, Copy, Encode, Decode, Default, PartialEq, Display, DecodeUntrusted)] // `json_safe_fields` auto-injects `json_safe_option_u64` on // `Option` (= `Option`) fields so JSON encodes large // values as strings — same convention as the rest of the wire shape. diff --git a/packages/rs-dpp/src/tokens/token_pricing_schedule.rs b/packages/rs-dpp/src/tokens/token_pricing_schedule.rs index b73b0ab5251..79572402e50 100644 --- a/packages/rs-dpp/src/tokens/token_pricing_schedule.rs +++ b/packages/rs-dpp/src/tokens/token_pricing_schedule.rs @@ -1,7 +1,7 @@ use crate::balances::credits::TokenAmount; use crate::errors::ProtocolError; use crate::fee::Credits; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; @@ -24,6 +24,7 @@ use std::fmt::{self, Display, Formatter}; PartialOrd, PlatformSerialize, PlatformDeserialize, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/voting/contender_structs/contender/mod.rs b/packages/rs-dpp/src/voting/contender_structs/contender/mod.rs index a8e4e9c42d7..fd0b3bd7d48 100644 --- a/packages/rs-dpp/src/voting/contender_structs/contender/mod.rs +++ b/packages/rs-dpp/src/voting/contender_structs/contender/mod.rs @@ -11,7 +11,7 @@ use crate::serialization::{PlatformDeserializable, PlatformSerializable}; use crate::voting::contender_structs::contender::v0::ContenderV0; use crate::voting::contender_structs::ContenderWithSerializedDocumentV0; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; @@ -37,7 +37,16 @@ pub enum Contender { derive(JsonConvertible) )] #[derive( - Debug, PartialEq, Eq, Clone, From, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Debug, + PartialEq, + Eq, + Clone, + From, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[cfg_attr( feature = "serde-conversion", diff --git a/packages/rs-dpp/src/voting/contender_structs/contender/v0/mod.rs b/packages/rs-dpp/src/voting/contender_structs/contender/v0/mod.rs index bc218d18085..b265e9f392f 100644 --- a/packages/rs-dpp/src/voting/contender_structs/contender/v0/mod.rs +++ b/packages/rs-dpp/src/voting/contender_structs/contender/v0/mod.rs @@ -5,7 +5,7 @@ use crate::document::Document; #[cfg(feature = "json-conversion")] use crate::serialization::json_safe_fields; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_value::Identifier; use platform_version::version::PlatformVersion; @@ -29,7 +29,7 @@ pub struct ContenderV0 { /// This struct holds the identity ID of the contender, the serialized document, /// and the vote tally. #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, PartialEq, Eq, Clone, Default, Encode, Decode)] +#[derive(Debug, PartialEq, Eq, Clone, Default, Encode, Decode, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(serde::Serialize, serde::Deserialize), diff --git a/packages/rs-dpp/src/voting/contender_structs/mod.rs b/packages/rs-dpp/src/voting/contender_structs/mod.rs index bab08840e1a..5e25b9d4163 100644 --- a/packages/rs-dpp/src/voting/contender_structs/mod.rs +++ b/packages/rs-dpp/src/voting/contender_structs/mod.rs @@ -5,7 +5,7 @@ use crate::document::serialization_traits::DocumentPlatformConversionMethodsV0; use crate::document::Document; use crate::voting::vote_choices::resource_vote_choice::ResourceVoteChoice; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_value::Identifier; use platform_version::version::PlatformVersion; use std::fmt; @@ -33,7 +33,7 @@ pub struct FinalizedContenderWithSerializedDocument { /// /// This struct holds the identity ID of the contender, the serialized document, /// and the vote tally. -#[derive(Debug, PartialEq, Eq, Clone, Default, Encode, Decode)] +#[derive(Debug, PartialEq, Eq, Clone, Default, Encode, Decode, DecodeUntrusted)] pub struct FinalizedResourceVoteChoicesWithVoterInfo { /// The resource vote choice. pub resource_vote_choice: ResourceVoteChoice, diff --git a/packages/rs-dpp/src/voting/vote_choices/resource_vote_choice/mod.rs b/packages/rs-dpp/src/voting/vote_choices/resource_vote_choice/mod.rs index 9373a007d76..82184dec4e4 100644 --- a/packages/rs-dpp/src/voting/vote_choices/resource_vote_choice/mod.rs +++ b/packages/rs-dpp/src/voting/vote_choices/resource_vote_choice/mod.rs @@ -6,7 +6,7 @@ use crate::voting::vote_choices::resource_vote_choice::ResourceVoteChoice::{ Abstain, Lock, TowardsIdentity, }; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_value::Identifier; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; @@ -21,7 +21,9 @@ use std::fmt; /// In this case Malaka might have a bad connotation in Greek, hence some might votes to Lock /// the name. /// -#[derive(Debug, Clone, Copy, Encode, Decode, Ord, Eq, PartialOrd, PartialEq, Default)] +#[derive( + Debug, Clone, Copy, Encode, Decode, Ord, Eq, PartialOrd, PartialEq, Default, DecodeUntrusted, +)] // Custom `Serialize` / `Deserialize` below — `derive(Serialize, Deserialize)` // can't produce the desired flat wire shape because the `TowardsIdentity` // variant wraps `Identifier` (a tuple struct that serializes as a base58 diff --git a/packages/rs-dpp/src/voting/vote_choices/yes_no_abstain_vote_choice/mod.rs b/packages/rs-dpp/src/voting/vote_choices/yes_no_abstain_vote_choice/mod.rs index 03bcdf65786..78af1ddccee 100644 --- a/packages/rs-dpp/src/voting/vote_choices/yes_no_abstain_vote_choice/mod.rs +++ b/packages/rs-dpp/src/voting/vote_choices/yes_no_abstain_vote_choice/mod.rs @@ -1,8 +1,8 @@ -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; -#[derive(Debug, Clone, Copy, Encode, Decode, PartialEq, Default)] +#[derive(Debug, Clone, Copy, Encode, Decode, PartialEq, Default, DecodeUntrusted)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/voting/vote_info_storage/contested_document_vote_poll_stored_info/mod.rs b/packages/rs-dpp/src/voting/vote_info_storage/contested_document_vote_poll_stored_info/mod.rs index 8ccd89cac11..9300251b162 100644 --- a/packages/rs-dpp/src/voting/vote_info_storage/contested_document_vote_poll_stored_info/mod.rs +++ b/packages/rs-dpp/src/voting/vote_info_storage/contested_document_vote_poll_stored_info/mod.rs @@ -7,7 +7,7 @@ use crate::voting::contender_structs::{ use crate::voting::vote_info_storage::contested_document_vote_poll_stored_info::v0::ContestedDocumentVotePollStoredInfoV0; use crate::voting::vote_info_storage::contested_document_vote_poll_winner_info::ContestedDocumentVotePollWinnerInfo; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; @@ -17,7 +17,7 @@ pub use v0::ContestedDocumentVotePollStoredInfoV0Getters; pub type LockedVotePollCounter = u16; -#[derive(Debug, PartialEq, Eq, Clone, Copy, Default, Encode, Decode)] +#[derive(Debug, PartialEq, Eq, Clone, Copy, Default, Encode, Decode, DecodeUntrusted)] pub enum ContestedDocumentVotePollStatus { #[default] NotStarted, @@ -54,7 +54,16 @@ impl ContestedDocumentVotePollStatus { /// /// This struct holds the list of contenders, the abstaining vote tally. #[derive( - Debug, PartialEq, Eq, Clone, From, Encode, Decode, PlatformSerialize, PlatformDeserialize, + Debug, + PartialEq, + Eq, + Clone, + From, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + DecodeUntrusted, )] #[platform_serialize(unversioned)] pub enum ContestedDocumentVotePollStoredInfo { diff --git a/packages/rs-dpp/src/voting/vote_info_storage/contested_document_vote_poll_stored_info/v0/mod.rs b/packages/rs-dpp/src/voting/vote_info_storage/contested_document_vote_poll_stored_info/v0/mod.rs index 960d1ca15a1..d890f2781bf 100644 --- a/packages/rs-dpp/src/voting/vote_info_storage/contested_document_vote_poll_stored_info/v0/mod.rs +++ b/packages/rs-dpp/src/voting/vote_info_storage/contested_document_vote_poll_stored_info/v0/mod.rs @@ -7,12 +7,12 @@ use crate::voting::vote_choices::resource_vote_choice::ResourceVoteChoice; use crate::voting::vote_info_storage::contested_document_vote_poll_stored_info::ContestedDocumentVotePollStatus; use crate::voting::vote_info_storage::contested_document_vote_poll_winner_info::ContestedDocumentVotePollWinnerInfo; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_value::Identifier; use std::fmt; // We can have multiple rounds of voting, after an unlock for example -#[derive(Debug, PartialEq, Eq, Clone, Default, Encode, Decode)] +#[derive(Debug, PartialEq, Eq, Clone, Default, Encode, Decode, DecodeUntrusted)] pub struct ContestedDocumentVotePollStoredInfoVoteEventV0 { /// The list of contenders returned by the query. pub resource_vote_choices: Vec, @@ -42,7 +42,7 @@ impl fmt::Display for ContestedDocumentVotePollStoredInfoVoteEventV0 { } } -#[derive(Debug, PartialEq, Eq, Clone, Default, Encode, Decode)] +#[derive(Debug, PartialEq, Eq, Clone, Default, Encode, Decode, DecodeUntrusted)] pub struct ContestedDocumentVotePollStoredInfoV0 { /// The list of contenders returned by the query. pub finalized_events: Vec, diff --git a/packages/rs-dpp/src/voting/vote_info_storage/contested_document_vote_poll_winner_info/mod.rs b/packages/rs-dpp/src/voting/vote_info_storage/contested_document_vote_poll_winner_info/mod.rs index 79825f00e0a..ca9f59fdc2d 100644 --- a/packages/rs-dpp/src/voting/vote_info_storage/contested_document_vote_poll_winner_info/mod.rs +++ b/packages/rs-dpp/src/voting/vote_info_storage/contested_document_vote_poll_winner_info/mod.rs @@ -2,12 +2,12 @@ use crate::serialization::JsonConvertible; #[cfg(feature = "value-conversion")] use crate::serialization::ValueConvertible; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_value::Identifier; use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Debug, PartialEq, Eq, Clone, Copy, Default, Encode, Decode)] +#[derive(Debug, PartialEq, Eq, Clone, Copy, Default, Encode, Decode, DecodeUntrusted)] // Custom `Serialize` / `Deserialize` below — same pattern as // `ResourceVoteChoice`. The `WonByIdentity` variant wraps `Identifier` // (a tuple struct that serializes as a base58 string, not a map), so diff --git a/packages/rs-dpp/src/voting/vote_polls/contested_document_resource_vote_poll/mod.rs b/packages/rs-dpp/src/voting/vote_polls/contested_document_resource_vote_poll/mod.rs index 7047493cd93..8b88bf22945 100644 --- a/packages/rs-dpp/src/voting/vote_polls/contested_document_resource_vote_poll/mod.rs +++ b/packages/rs-dpp/src/voting/vote_polls/contested_document_resource_vote_poll/mod.rs @@ -7,7 +7,7 @@ use crate::serialization::PlatformSerializable; use crate::serialization::ValueConvertible; use crate::util::hash::hash_double; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::{Identifier, Value}; #[cfg(feature = "serde-conversion")] @@ -19,7 +19,9 @@ use std::fmt; all(feature = "json-conversion", feature = "serde-conversion"), derive(JsonConvertible) )] -#[derive(Debug, Clone, Encode, Decode, PlatformSerialize, PlatformDeserialize, PartialEq)] +#[derive( + Debug, Clone, Encode, Decode, PlatformSerialize, PlatformDeserialize, PartialEq, DecodeUntrusted, +)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/voting/vote_polls/mod.rs b/packages/rs-dpp/src/voting/vote_polls/mod.rs index 467a283e749..66f820dec8b 100644 --- a/packages/rs-dpp/src/voting/vote_polls/mod.rs +++ b/packages/rs-dpp/src/voting/vote_polls/mod.rs @@ -4,7 +4,7 @@ use crate::serialization::JsonConvertible; use crate::serialization::ValueConvertible; use crate::voting::vote_polls::contested_document_resource_vote_poll::ContestedDocumentResourceVotePoll; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; @@ -18,7 +18,17 @@ pub mod contested_document_resource_vote_poll; all(feature = "json-conversion", feature = "serde-conversion"), derive(JsonConvertible) )] -#[derive(Debug, Clone, Encode, Decode, PlatformSerialize, PlatformDeserialize, PartialEq, From)] +#[derive( + Debug, + Clone, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + PartialEq, + From, + DecodeUntrusted, +)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/voting/votes/mod.rs b/packages/rs-dpp/src/voting/votes/mod.rs index 9e4d42327be..76d6cc3ebb4 100644 --- a/packages/rs-dpp/src/voting/votes/mod.rs +++ b/packages/rs-dpp/src/voting/votes/mod.rs @@ -7,14 +7,24 @@ use crate::serialization::ValueConvertible; use crate::voting::votes::resource_vote::accessors::v0::ResourceVoteGettersV0; use crate::voting::votes::resource_vote::ResourceVote; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use derive_more::From; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; -#[derive(Debug, Clone, Encode, Decode, PlatformSerialize, PlatformDeserialize, PartialEq, From)] +#[derive( + Debug, + Clone, + Encode, + Decode, + PlatformSerialize, + PlatformDeserialize, + PartialEq, + From, + DecodeUntrusted, +)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/voting/votes/resource_vote/mod.rs b/packages/rs-dpp/src/voting/votes/resource_vote/mod.rs index ff57370eb67..5c467fed0fc 100644 --- a/packages/rs-dpp/src/voting/votes/resource_vote/mod.rs +++ b/packages/rs-dpp/src/voting/votes/resource_vote/mod.rs @@ -4,7 +4,7 @@ use crate::serialization::JsonConvertible; use crate::serialization::ValueConvertible; use crate::voting::votes::resource_vote::v0::ResourceVoteV0; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; @@ -16,7 +16,9 @@ pub mod v0; all(feature = "json-conversion", feature = "serde-conversion"), derive(JsonConvertible) )] -#[derive(Debug, Clone, Encode, Decode, PlatformSerialize, PlatformDeserialize, PartialEq)] +#[derive( + Debug, Clone, Encode, Decode, PlatformSerialize, PlatformDeserialize, PartialEq, DecodeUntrusted, +)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/voting/votes/resource_vote/v0/mod.rs b/packages/rs-dpp/src/voting/votes/resource_vote/v0/mod.rs index 7321ef5fb4a..54afd587740 100644 --- a/packages/rs-dpp/src/voting/votes/resource_vote/v0/mod.rs +++ b/packages/rs-dpp/src/voting/votes/resource_vote/v0/mod.rs @@ -3,14 +3,16 @@ use crate::serialization::json_safe_fields; use crate::voting::vote_choices::resource_vote_choice::ResourceVoteChoice; use crate::voting::vote_polls::VotePoll; use crate::ProtocolError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; use platform_value::Identifier; #[cfg(feature = "serde-conversion")] use serde::{Deserialize, Serialize}; #[cfg_attr(feature = "json-conversion", json_safe_fields)] -#[derive(Debug, Clone, Encode, Decode, PlatformDeserialize, PlatformSerialize, PartialEq)] +#[derive( + Debug, Clone, Encode, Decode, PlatformDeserialize, PlatformSerialize, PartialEq, DecodeUntrusted, +)] #[cfg_attr( feature = "serde-conversion", derive(Serialize, Deserialize), diff --git a/packages/rs-dpp/src/withdrawal/mod.rs b/packages/rs-dpp/src/withdrawal/mod.rs index 2c64ff1cbed..7ecd533d241 100644 --- a/packages/rs-dpp/src/withdrawal/mod.rs +++ b/packages/rs-dpp/src/withdrawal/mod.rs @@ -2,7 +2,7 @@ pub mod daily_withdrawal_limit; #[cfg(all(feature = "withdrawals-contract", feature = "system_contracts"))] mod document_try_into_asset_unlock_base_transaction_info; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use serde_repr::{Deserialize_repr, Serialize_repr}; #[cfg(feature = "json-conversion")] @@ -12,7 +12,17 @@ use crate::serialization::ValueConvertible; #[repr(u8)] #[derive( - Serialize_repr, Deserialize_repr, PartialEq, Eq, Clone, Copy, Debug, Encode, Decode, Default, + Serialize_repr, + Deserialize_repr, + PartialEq, + Eq, + Clone, + Copy, + Debug, + Encode, + Decode, + Default, + DecodeUntrusted, )] pub enum Pooling { #[default] diff --git a/packages/rs-dpp/tests/untrusted_decode.rs b/packages/rs-dpp/tests/untrusted_decode.rs new file mode 100644 index 00000000000..cf27ba9feb2 --- /dev/null +++ b/packages/rs-dpp/tests/untrusted_decode.rs @@ -0,0 +1,124 @@ +use bincode::config; +use dpp::address_funds::AddressWitness; +use dpp::identity::core_script::CoreScript; +use dpp::identity::state_transition::asset_lock_proof::chain::ChainAssetLockProof; +use dpp::prelude::AssetLockProof; +use dpp::serialization::PlatformDeserializable; +use dpp::state_transition::StateTransition; + +// The derive's default crate path mirrors its in-crate DPP use. +mod serialization { + pub use dpp::serialization::PlatformDeserializable; +} +use dpp::ProtocolError; + +#[derive(bincode::Encode, bincode::Decode, platform_serialization_derive::PlatformDeserialize)] +#[platform_serialize(unversioned, trusted)] +struct LocalFixture(Vec); + +#[test] +fn should_allow_explicitly_trusted_fixtures_without_untrusted_traits() { + let bytes = bincode::encode_to_vec( + LocalFixture(vec![1, 2, 3]), + config::standard().with_big_endian(), + ) + .unwrap(); + assert_eq!( + LocalFixture::deserialize_from_bytes(&bytes).unwrap().0, + [1, 2, 3] + ); +} + +#[test] +fn should_reject_missing_script_in_unlimited_state_transition_decoder() { + let config = config::standard().with_big_endian(); + // IdentityCreditWithdrawal V0, through the first allocating field. + let mut bytes = + bincode::encode_to_vec((5u32, 0u32, [0u8; 32], 1_000u64, 1u32, 0u32), config).unwrap(); + bytes.extend(bincode::encode_to_vec(u64::MAX, config).unwrap()); + assert!(StateTransition::deserialize_from_bytes_no_limit(&bytes).is_err()); + assert!(StateTransition::deserialize_from_bytes(&bytes).is_err()); +} + +#[test] +fn should_decode_binary_scripts_with_owned_and_borrowed_untrusted_apis() { + // Include embedded NULs and cross the old custom borrowed decoder's chunk + // size. Both untrusted APIs must preserve the length-prefixed wire format. + let script = CoreScript::from_bytes(vec![0; 1_025]); + let config = config::standard().with_big_endian(); + let bytes = bincode::encode_to_vec(&script, config).unwrap(); + let ordinary = bincode::decode_from_slice::(&bytes, config).unwrap(); + let guarded = bincode::decode_from_slice_untrusted::(&bytes, config).unwrap(); + let borrowed = + bincode::borrow_decode_from_slice_untrusted::(&bytes, config).unwrap(); + assert_eq!(ordinary, (script, bytes.len())); + assert_eq!(guarded, ordinary); + assert_eq!(borrowed, ordinary); +} + +#[test] +fn should_preserve_witness_wire_format_and_signature_count_validation() { + let config = config::standard(); + let witness = AddressWitness::P2sh { + signatures: vec![vec![1; 65].into()], + redeem_script: vec![0, 1, 0, 2].into(), + }; + let bytes = bincode::encode_to_vec(&witness, config).unwrap(); + let decoded = + bincode::decode_from_slice_untrusted::(&bytes, config).unwrap(); + assert_eq!(decoded, (witness, bytes.len())); + + let witness = AddressWitness::P2sh { + signatures: vec![vec![1; 65].into(); 100], + redeem_script: vec![0].into(), + }; + let bytes = bincode::encode_to_vec(&witness, config).unwrap(); + let ordinary = bincode::decode_from_slice::(&bytes, config).unwrap_err(); + let guarded = + bincode::decode_from_slice_untrusted::(&bytes, config).unwrap_err(); + assert_eq!(ordinary.to_string(), guarded.to_string()); +} + +#[test] +fn should_preserve_asset_lock_serde_wire_format_and_reject_missing_payloads() { + let proof = AssetLockProof::Chain(ChainAssetLockProof { + core_chain_locked_height: 42, + out_point: dpp::dashcore::OutPoint::null(), + }); + let config = config::standard().with_big_endian(); + let bytes = bincode::encode_to_vec(&proof, config).unwrap(); + let ordinary = bincode::decode_from_slice::(&bytes, config).unwrap(); + let guarded = + bincode::decode_from_slice_untrusted::(&bytes, config).unwrap(); + assert_eq!(ordinary, (proof, bytes.len())); + assert_eq!(guarded, ordinary); + + // Instant proof, whose first raw Serde field is length-prefixed bytes. + let mut bytes = bincode::encode_to_vec(0u32, config).unwrap(); + bytes.extend(bincode::encode_to_vec(u64::MAX, config).unwrap()); + assert!(bincode::decode_from_slice_untrusted::(&bytes, config).is_err()); +} + +#[test] +fn should_preserve_foreign_txid_serde_encoding_in_consensus_errors() { + use dpp::consensus::basic::identity::IdentityAssetLockProofLockedTransactionMismatchError; + use dpp::dashcore::hashes::Hash; + use dpp::dashcore::Txid; + + let value = IdentityAssetLockProofLockedTransactionMismatchError::new( + Txid::from_byte_array([1; 32]), + Txid::from_byte_array([2; 32]), + ); + let config = config::standard().with_big_endian(); + let bytes = bincode::encode_to_vec(&value, config).unwrap(); + let decoded = + IdentityAssetLockProofLockedTransactionMismatchError::deserialize_from_bytes(&bytes) + .unwrap(); + assert_eq!(decoded, value); + let ordinary = bincode::decode_from_slice::< + IdentityAssetLockProofLockedTransactionMismatchError, + _, + >(&bytes, config) + .unwrap(); + assert_eq!(ordinary, (value, bytes.len())); +} diff --git a/packages/rs-drive-abci/src/query/voting/decode_index_value.rs b/packages/rs-drive-abci/src/query/voting/decode_index_value.rs index 1eb03e56568..23007e05531 100644 --- a/packages/rs-drive-abci/src/query/voting/decode_index_value.rs +++ b/packages/rs-drive-abci/src/query/voting/decode_index_value.rs @@ -1,5 +1,5 @@ use crate::error::query::QueryError; -use bincode::de::{Decode, Decoder}; +use bincode::de::{DecodeUntrusted, UntrustedDecoder}; use bincode::error::DecodeError; use dpp::platform_value::Value; @@ -41,13 +41,15 @@ const MAX_INDEX_VALUE_NESTING_DEPTH: usize = 64; struct DepthLimitedValue(Value); -impl Decode<()> for DepthLimitedValue { - fn decode>(decoder: &mut D) -> Result { +impl DecodeUntrusted<()> for DepthLimitedValue { + fn decode_untrusted>( + decoder: &mut D, + ) -> Result { decode_value_at_depth(decoder, 0).map(Self) } } -fn decode_value_at_depth>( +fn decode_value_at_depth>( decoder: &mut D, depth: usize, ) -> Result { @@ -57,27 +59,27 @@ fn decode_value_at_depth>( )); } - Ok(match u32::decode(decoder)? { - 0 => Value::U128(u128::decode(decoder)?), - 1 => Value::I128(i128::decode(decoder)?), - 2 => Value::U64(u64::decode(decoder)?), - 3 => Value::I64(i64::decode(decoder)?), - 4 => Value::U32(u32::decode(decoder)?), - 5 => Value::I32(i32::decode(decoder)?), - 6 => Value::U16(u16::decode(decoder)?), - 7 => Value::I16(i16::decode(decoder)?), - 8 => Value::U8(u8::decode(decoder)?), - 9 => Value::I8(i8::decode(decoder)?), - 10 => Value::Bytes(Vec::::decode(decoder)?), - 11 => Value::Bytes20(<[u8; 20]>::decode(decoder)?), - 12 => Value::Bytes32(<[u8; 32]>::decode(decoder)?), - 13 => Value::Bytes36(<[u8; 36]>::decode(decoder)?), - 14 => Value::EnumU8(Vec::::decode(decoder)?), - 15 => Value::EnumString(Vec::::decode(decoder)?), - 16 => Value::Identifier(<[u8; 32]>::decode(decoder)?), - 17 => Value::Float(f64::decode(decoder)?), - 18 => Value::Text(String::decode(decoder)?), - 19 => Value::Bool(bool::decode(decoder)?), + Ok(match u32::decode_untrusted(decoder)? { + 0 => Value::U128(u128::decode_untrusted(decoder)?), + 1 => Value::I128(i128::decode_untrusted(decoder)?), + 2 => Value::U64(u64::decode_untrusted(decoder)?), + 3 => Value::I64(i64::decode_untrusted(decoder)?), + 4 => Value::U32(u32::decode_untrusted(decoder)?), + 5 => Value::I32(i32::decode_untrusted(decoder)?), + 6 => Value::U16(u16::decode_untrusted(decoder)?), + 7 => Value::I16(i16::decode_untrusted(decoder)?), + 8 => Value::U8(u8::decode_untrusted(decoder)?), + 9 => Value::I8(i8::decode_untrusted(decoder)?), + 10 => Value::Bytes(Vec::::decode_untrusted(decoder)?), + 11 => Value::Bytes20(<[u8; 20]>::decode_untrusted(decoder)?), + 12 => Value::Bytes32(<[u8; 32]>::decode_untrusted(decoder)?), + 13 => Value::Bytes36(<[u8; 36]>::decode_untrusted(decoder)?), + 14 => Value::EnumU8(Vec::::decode_untrusted(decoder)?), + 15 => Value::EnumString(Vec::::decode_untrusted(decoder)?), + 16 => Value::Identifier(<[u8; 32]>::decode_untrusted(decoder)?), + 17 => Value::Float(f64::decode_untrusted(decoder)?), + 18 => Value::Text(String::decode_untrusted(decoder)?), + 19 => Value::Bool(bool::decode_untrusted(decoder)?), 20 => Value::Null, 21 => Value::Array(decode_array_at_depth(decoder, depth)?), 22 => Value::Map(decode_map_at_depth(decoder, depth)?), @@ -85,35 +87,43 @@ fn decode_value_at_depth>( }) } -fn decode_array_at_depth>( +fn decode_array_at_depth>( decoder: &mut D, depth: usize, ) -> Result, DecodeError> { - let len = usize::decode(decoder)?; + let len = usize::decode_untrusted(decoder)?; decoder.claim_container_read::(len)?; - let mut values = Vec::with_capacity(len); + let mut values = Vec::new(); for _ in 0..len { decoder.unclaim_bytes_read(std::mem::size_of::()); - values.push(decode_value_at_depth(decoder, depth + 1)?); + let value = decode_value_at_depth(decoder, depth + 1)?; + values + .try_reserve(1) + .map_err(|_| DecodeError::LimitExceeded)?; + values.push(value); } Ok(values) } -fn decode_map_at_depth>( +fn decode_map_at_depth>( decoder: &mut D, depth: usize, ) -> Result, DecodeError> { - let len = usize::decode(decoder)?; + let len = usize::decode_untrusted(decoder)?; decoder.claim_container_read::<(Value, Value)>(len)?; - let mut values = Vec::with_capacity(len); + let mut values = Vec::new(); for _ in 0..len { decoder.unclaim_bytes_read(std::mem::size_of::<(Value, Value)>()); - values.push(( + let pair = ( decode_value_at_depth(decoder, depth + 1)?, decode_value_at_depth(decoder, depth + 1)?, - )); + ); + values + .try_reserve(1) + .map_err(|_| DecodeError::LimitExceeded)?; + values.push(pair); } Ok(values) } @@ -176,7 +186,8 @@ where .with_limit::(); let (DepthLimitedValue(value), consumed) = - bincode::decode_from_slice::(serialized_value, config).ok()?; + bincode::decode_from_slice_untrusted::(serialized_value, config) + .ok()?; // Reject trailing bytes so each encoded cursor value is canonical. if consumed != serialized_value.len() { diff --git a/packages/rs-drive-proof-verifier/src/from_request.rs b/packages/rs-drive-proof-verifier/src/from_request.rs index 06b07344031..30904905277 100644 --- a/packages/rs-drive-proof-verifier/src/from_request.rs +++ b/packages/rs-drive-proof-verifier/src/from_request.rs @@ -324,11 +324,10 @@ impl TryFromRequest for VotePollsByDocumentTypeQue .start_at_value_info .map(|i| { let (value, _): (Value, _) = - bincode::decode_from_slice(&i.start_value, BINCODE_CONFIG).map_err( - |e| Error::RequestError { + bincode::decode_from_slice_untrusted(&i.start_value, BINCODE_CONFIG) + .map_err(|e| Error::RequestError { error: format!("cannot decode start value: {}", e), - }, - )?; + })?; Ok::<_, Error>((value, i.start_value_included)) }) .transpose()?, @@ -454,7 +453,7 @@ fn bincode_decode_values, T: IntoIterator>( values .into_iter() .map(|v| { - dpp::bincode::decode_from_slice(v.as_ref(), BINCODE_CONFIG) + dpp::bincode::decode_from_slice_untrusted(v.as_ref(), BINCODE_CONFIG) .map_err(|e| Error::RequestError { error: format!("cannot decode value: {}", e), }) diff --git a/packages/rs-drive-proof-verifier/src/types.rs b/packages/rs-drive-proof-verifier/src/types.rs index c043fb674b8..27ecb199485 100644 --- a/packages/rs-drive-proof-verifier/src/types.rs +++ b/packages/rs-drive-proof-verifier/src/types.rs @@ -4,6 +4,10 @@ //! like [GetIdentityBalanceRequest](dapi_grpc::platform::v0::GetIdentityBalanceRequest) which returns [`u64`]. //! In this case, the [FromProof](crate::FromProof) trait is implemented for dedicated object type //! defined in this module. +//! +//! Binary serialization under `mocks` is for locally generated fixtures. Those +//! formats explicitly retain ordinary decoding for foreign Core types; network +//! responses go through the proof verification and request conversion paths. /// Evonode status pub mod evonode_status; @@ -121,7 +125,7 @@ pub type DataContracts = RetrievedObjects; #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize,), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] pub struct AddressInfo { /// Address that owns the balance. @@ -144,7 +148,7 @@ pub type AddressInfos = RetrievedObjects; #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize,), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] pub struct Contenders { /// The winner if the contest is finished @@ -198,7 +202,7 @@ impl FromIterator<(Identifier, Option)> for Con #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize,), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] pub struct Voter(pub Identifier); @@ -207,7 +211,7 @@ pub struct Voter(pub Identifier); #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize,), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] pub struct Voters(pub BTreeSet); @@ -249,7 +253,7 @@ pub struct KeysInPath { #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] pub struct TotalCreditsInPlatform(pub Credits); @@ -258,7 +262,7 @@ pub struct TotalCreditsInPlatform(pub Credits); #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] pub struct NoParamQuery; @@ -267,7 +271,7 @@ pub struct NoParamQuery; #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] pub struct ElementFetchRequestItem(pub Element); @@ -365,7 +369,7 @@ impl FromIterator for ContestedResources { #[cfg_attr( feature = "mocks", derive(PlatformSerialize, PlatformDeserialize, Encode, Decode), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] pub struct ContestedVote( pub ContestedDocumentResourceVotePoll, @@ -416,7 +420,7 @@ pub type ResourceVotesByIdentity = RetrievedObjects; /// serialization format. /// - `PlatformDeserialize`: Enables deserialization of the struct using the platform-specific /// deserialization format. -/// - `platform_serialize(unversioned)`: Specifies that the struct should be serialized +/// - `platform_serialize(unversioned, trusted)`: Specifies that the struct should be serialized /// without including a version field in the serialized data. /// /// This structure is typically used in scenarios where the state of the current quorums @@ -426,7 +430,7 @@ pub type ResourceVotesByIdentity = RetrievedObjects; #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] pub struct CurrentQuorumsInfo { /// A list of 32-byte hashes representing the active quorums. @@ -448,7 +452,7 @@ pub struct CurrentQuorumsInfo { #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] pub struct PrefundedSpecializedBalance(pub Credits); impl PrefundedSpecializedBalance { @@ -469,7 +473,7 @@ impl From<&PrefundedSpecializedBalance> for Credits { #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] pub struct VotePollsGroupedByTimestamp(pub Vec<(TimestampMillis, Vec)>); impl VotePollsGroupedByTimestamp { @@ -677,7 +681,7 @@ pub type TokenDirectPurchasePrices = RetrievedObjects>, @@ -705,7 +709,7 @@ impl FromIterator<(TimestampMillis, BTreeMap)> #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] pub struct BlockAddressBalanceChanges { /// The block height @@ -719,7 +723,7 @@ pub struct BlockAddressBalanceChanges { #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] pub struct RecentAddressBalanceChanges(pub Vec); @@ -735,7 +739,7 @@ impl RecentAddressBalanceChanges { #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] pub struct CompactedBlockAddressBalanceChanges { /// The start block height of the compacted range @@ -751,7 +755,7 @@ pub struct CompactedBlockAddressBalanceChanges { #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] pub struct RecentCompactedAddressBalanceChanges(pub Vec); @@ -802,7 +806,7 @@ impl std::ops::DerefMut for PlatformAddressTrunkState { #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] pub struct ShieldedPoolState(pub u64); @@ -817,7 +821,7 @@ pub struct ShieldedPoolState(pub u64); #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] pub struct ShieldedNotesCount(pub u64); @@ -826,7 +830,7 @@ pub struct ShieldedNotesCount(pub u64); #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] pub struct ShieldedEncryptedNote { /// The note commitment (cmx), 32 bytes @@ -851,7 +855,7 @@ pub struct ShieldedEncryptedNote { #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] pub struct ShieldedEncryptedNotes { /// The encrypted notes for the requested chunk, in tree order. @@ -866,7 +870,7 @@ pub struct ShieldedEncryptedNotes { #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] pub struct ShieldedAnchors(pub Vec<[u8; 32]>); @@ -875,7 +879,7 @@ pub struct ShieldedAnchors(pub Vec<[u8; 32]>); #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] pub struct MostRecentShieldedAnchor(pub [u8; 32]); @@ -884,7 +888,7 @@ pub struct MostRecentShieldedAnchor(pub [u8; 32]); #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] pub struct ShieldedNullifierStatus { /// The nullifier bytes (32 bytes) @@ -898,7 +902,7 @@ pub struct ShieldedNullifierStatus { #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] pub struct ShieldedNullifierStatuses(pub Vec); @@ -907,7 +911,7 @@ pub struct ShieldedNullifierStatuses(pub Vec); #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] pub struct ShieldedEncryptedNotesQuery { /// Starting index in the encrypted notes count tree (inclusive, 0 = from beginning) @@ -921,6 +925,6 @@ pub struct ShieldedEncryptedNotesQuery { #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] pub struct ShieldedNullifiersQuery(pub Vec<[u8; 32]>); diff --git a/packages/rs-drive-proof-verifier/src/types/evonode_status.rs b/packages/rs-drive-proof-verifier/src/types/evonode_status.rs index b8519170b43..b9e0181b7e1 100644 --- a/packages/rs-drive-proof-verifier/src/types/evonode_status.rs +++ b/packages/rs-drive-proof-verifier/src/types/evonode_status.rs @@ -1,4 +1,8 @@ //! Status details of EvoNode, like version, current height, etc. +//! +//! Binary serialization under `mocks` is for locally generated fixtures. Those +//! formats explicitly retain ordinary decoding for foreign Core types; network +//! responses go through the proof verification and request conversion paths. use crate::Error; use dapi_grpc::platform::v0::{ @@ -17,7 +21,7 @@ use { #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] /// The status of an EvoNode. pub struct EvoNodeStatus { @@ -38,7 +42,7 @@ pub struct EvoNodeStatus { #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] /// Information about protocol and software components versions. pub struct Version { @@ -51,7 +55,7 @@ pub struct Version { #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] /// Information about software components versions. pub struct Software { @@ -66,7 +70,7 @@ pub struct Software { #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] /// Information about protocol-level versions used by the node pub struct Protocol { @@ -79,7 +83,7 @@ pub struct Protocol { #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] /// Tenderdash protocol versions. pub struct TenderdashProtocol { @@ -93,7 +97,7 @@ pub struct TenderdashProtocol { #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] /// Drive protocol versions. pub struct DriveProtocol { @@ -108,7 +112,7 @@ pub struct DriveProtocol { #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] /// Information about current time used by the node. pub struct Time { @@ -126,7 +130,7 @@ pub struct Time { #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] /// Evo node identification information. pub struct Node { @@ -139,7 +143,7 @@ pub struct Node { #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] /// Layer 2 blockchain information pub struct Chain { @@ -166,7 +170,7 @@ pub struct Chain { #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] /// Node networking information. pub struct Network { @@ -182,7 +186,7 @@ pub struct Network { #[cfg_attr( feature = "mocks", derive(Encode, Decode, PlatformSerialize, PlatformDeserialize), - platform_serialize(unversioned) + platform_serialize(unversioned, trusted) )] /// Information about state synchronization progress. pub struct StateSync { diff --git a/packages/rs-drive/src/drive/votes/storage_form/contested_document_resource_reference_storage_form/mod.rs b/packages/rs-drive/src/drive/votes/storage_form/contested_document_resource_reference_storage_form/mod.rs index 468c2f71126..fc59c445a9c 100644 --- a/packages/rs-drive/src/drive/votes/storage_form/contested_document_resource_reference_storage_form/mod.rs +++ b/packages/rs-drive/src/drive/votes/storage_form/contested_document_resource_reference_storage_form/mod.rs @@ -1,8 +1,8 @@ -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use grovedb::element::reference_path::ReferencePathType; /// Represents the storage form of a reference. -#[derive(Debug, Clone, PartialEq, Encode, Decode)] +#[derive(Debug, Clone, PartialEq, Encode, Decode, DecodeUntrusted)] pub struct ContestedDocumentResourceVoteReferenceStorageForm { /// The reference pub reference_path_type: ReferencePathType, diff --git a/packages/rs-drive/src/query/vote_polls_by_end_date_query.rs b/packages/rs-drive/src/query/vote_polls_by_end_date_query.rs index ba138b0fac5..ddd1b701e10 100644 --- a/packages/rs-drive/src/query/vote_polls_by_end_date_query.rs +++ b/packages/rs-drive/src/query/vote_polls_by_end_date_query.rs @@ -13,7 +13,7 @@ use crate::query::Query; #[cfg(feature = "server")] use crate::util::common::encode::decode_u64; use crate::util::common::encode::encode_u64; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; #[cfg(feature = "server")] use dpp::block::block_info::BlockInfo; #[cfg(feature = "server")] @@ -34,7 +34,7 @@ use platform_version::version::PlatformVersion; use std::collections::BTreeMap; /// Vote Poll Drive Query struct -#[derive(Debug, PartialEq, Clone, Encode, Decode)] +#[derive(Debug, PartialEq, Clone, Encode, Decode, DecodeUntrusted)] pub struct VotePollsByEndDateDriveQuery { /// What is the start time we are asking for pub start_time: Option<(TimestampMillis, TimestampIncluded)>, diff --git a/packages/rs-drive/src/verify/address_funds/verify_compacted_address_balance_changes/mod.rs b/packages/rs-drive/src/verify/address_funds/verify_compacted_address_balance_changes/mod.rs index 6d54d4b8c33..23ccd9be7b0 100644 --- a/packages/rs-drive/src/verify/address_funds/verify_compacted_address_balance_changes/mod.rs +++ b/packages/rs-drive/src/verify/address_funds/verify_compacted_address_balance_changes/mod.rs @@ -5,6 +5,7 @@ use crate::drive::Drive; use crate::error::drive::DriveError; use crate::error::Error; use crate::verify::RootHash; +use bincode::{Decode, DecodeUntrusted, Encode}; use dpp::address_funds::PlatformAddress; use dpp::balances::credits::BlockAwareCreditOperation; use dpp::version::PlatformVersion; @@ -23,7 +24,7 @@ pub type VerifiedCompactedAddressBalanceChanges = Vec<( /// The predecessor proof independently authenticates which range, if any, /// contains the requested height. The forward proof can then be verified /// against a query derived only from that authenticated result. -#[derive(Debug, bincode::Encode, bincode::Decode)] +#[derive(Debug, Encode, Decode, DecodeUntrusted)] pub(crate) struct CompactedAddressBalanceProof { pub(crate) predecessor_proof: Vec, pub(crate) forward_proof: Vec, diff --git a/packages/rs-drive/src/verify/address_funds/verify_compacted_address_balance_changes/v0/mod.rs b/packages/rs-drive/src/verify/address_funds/verify_compacted_address_balance_changes/v0/mod.rs index 70d7e9fa305..ded9ecc5511 100644 --- a/packages/rs-drive/src/verify/address_funds/verify_compacted_address_balance_changes/v0/mod.rs +++ b/packages/rs-drive/src/verify/address_funds/verify_compacted_address_balance_changes/v0/mod.rs @@ -87,14 +87,15 @@ impl Drive { .with_limit::(); // Decode the GroveDBProof to navigate its structure - let grovedb_proof: GroveDBProof = bincode::decode_from_slice(proof, bincode_config) - .map(|(p, _)| p) - .map_err(|e| { - Error::Proof(ProofError::CorruptedProof(format!( - "cannot decode GroveDBProof: {}", - e - ))) - })?; + let grovedb_proof: GroveDBProof = + bincode::decode_from_slice_untrusted(proof, bincode_config) + .map(|(p, _)| p) + .map_err(|e| { + Error::Proof(ProofError::CorruptedProof(format!( + "cannot decode GroveDBProof: {}", + e + ))) + })?; // Navigate to the compacted address balances layer // Path: SavedBlockTransactions ('$' = 0x24) -> CompactedAddressBalances ('c' = 0x63) @@ -215,12 +216,14 @@ impl Drive { let (address_balances, consumed): ( BTreeMap, usize, - ) = bincode::decode_from_slice(&serialized_data, row_decode_config).map_err(|e| { - Error::Proof(ProofError::CorruptedProof(format!( - "cannot decode compacted address balances: {}", - e - ))) - })?; + ) = bincode::decode_from_slice_untrusted(&serialized_data, row_decode_config).map_err( + |e| { + Error::Proof(ProofError::CorruptedProof(format!( + "cannot decode compacted address balances: {}", + e + ))) + }, + )?; // Wire-safe tightening (parity with v1): honest encoders emit // rows with no trailing bytes, so rejecting them cannot break // legacy peers. diff --git a/packages/rs-drive/src/verify/address_funds/verify_compacted_address_balance_changes/v1/mod.rs b/packages/rs-drive/src/verify/address_funds/verify_compacted_address_balance_changes/v1/mod.rs index c9a823cbfac..6337671fbc2 100644 --- a/packages/rs-drive/src/verify/address_funds/verify_compacted_address_balance_changes/v1/mod.rs +++ b/packages/rs-drive/src/verify/address_funds/verify_compacted_address_balance_changes/v1/mod.rs @@ -46,7 +46,7 @@ impl Drive { .with_limit::(); let (proof_envelope, consumed): (CompactedAddressBalanceProof, usize) = - bincode::decode_from_slice(proof, proof_decode_config).map_err(|e| { + bincode::decode_from_slice_untrusted(proof, proof_decode_config).map_err(|e| { Error::Proof(ProofError::CorruptedProof(format!( "cannot decode compacted address balance proof: {}", e @@ -168,12 +168,14 @@ impl Drive { let (address_balances, consumed): ( BTreeMap, usize, - ) = bincode::decode_from_slice(&serialized_data, row_decode_config).map_err(|e| { - Error::Proof(ProofError::CorruptedProof(format!( - "cannot decode compacted address balances: {}", - e - ))) - })?; + ) = bincode::decode_from_slice_untrusted(&serialized_data, row_decode_config).map_err( + |e| { + Error::Proof(ProofError::CorruptedProof(format!( + "cannot decode compacted address balances: {}", + e + ))) + }, + )?; if consumed != serialized_data.len() { return Err(Error::Proof(ProofError::CorruptedProof( "compacted address balance row contains trailing bytes".to_string(), @@ -603,10 +605,10 @@ mod tests { let envelope_config = bincode::config::standard().with_big_endian(); let (before_envelope, _): (CompactedAddressBalanceProof, usize) = - bincode::decode_from_slice(&proof_before, envelope_config) + bincode::decode_from_slice_untrusted(&proof_before, envelope_config) .expect("decode earlier envelope"); let (after_envelope, _): (CompactedAddressBalanceProof, usize) = - bincode::decode_from_slice(&proof_after, envelope_config) + bincode::decode_from_slice_untrusted(&proof_after, envelope_config) .expect("decode later envelope"); let spliced = bincode::encode_to_vec( diff --git a/packages/rs-drive/src/verify/address_funds/verify_recent_address_balance_changes/v0/mod.rs b/packages/rs-drive/src/verify/address_funds/verify_recent_address_balance_changes/v0/mod.rs index 63eae115b29..2bda9434f1b 100644 --- a/packages/rs-drive/src/verify/address_funds/verify_recent_address_balance_changes/v0/mod.rs +++ b/packages/rs-drive/src/verify/address_funds/verify_recent_address_balance_changes/v0/mod.rs @@ -33,7 +33,7 @@ fn decode_address_balance_row( .with_big_endian() .with_limit::(); let (address_balances, consumed): (BTreeMap, usize) = - bincode::decode_from_slice(serialized_data, config).map_err(|e| { + bincode::decode_from_slice_untrusted(serialized_data, config).map_err(|e| { Error::Proof(ProofError::CorruptedProof(format!( "cannot decode address balances: {}", e diff --git a/packages/rs-drive/src/verify/bounded_decode.rs b/packages/rs-drive/src/verify/bounded_decode.rs index c886bd0ab7b..7b324a89904 100644 --- a/packages/rs-drive/src/verify/bounded_decode.rs +++ b/packages/rs-drive/src/verify/bounded_decode.rs @@ -38,7 +38,7 @@ pub(super) fn decode_proof_data_contract( let config = bincode::config::standard() .with_big_endian() .with_limit::(); - let (serialized_format, consumed) = bincode::borrow_decode_from_slice::< + let (serialized_format, consumed) = bincode::borrow_decode_from_slice_untrusted::< DataContractInSerializationFormat, _, >(serialized_contract, config) @@ -78,8 +78,8 @@ pub(super) fn decode_vote_reference( let config = bincode::config::standard() .with_big_endian() .with_limit::(); - let (reference, consumed) = - bincode::decode_from_slice(serialized_reference, config).map_err(|e| { + let (reference, consumed) = bincode::decode_from_slice_untrusted(serialized_reference, config) + .map_err(|e| { Error::Drive(DriveError::CorruptedSerialization(format!( "serialized vote reference is invalid: {e}" ))) diff --git a/packages/rs-platform-serialization-derive/src/attribute.rs b/packages/rs-platform-serialization-derive/src/attribute.rs index 3b873607cd2..88a034c4660 100644 --- a/packages/rs-platform-serialization-derive/src/attribute.rs +++ b/packages/rs-platform-serialization-derive/src/attribute.rs @@ -87,8 +87,8 @@ impl FromAttribute for ContainerAttributes { } ParsedAttribute::Property(key, _) if ["limit"].contains(&key.to_string().as_str()) => {} - ParsedAttribute::Tag(i) if ["derive_bincode"].contains(&i.to_string().as_str()) => { - } + ParsedAttribute::Tag(i) + if ["derive_bincode", "trusted"].contains(&i.to_string().as_str()) => {} ParsedAttribute::Tag(i) => { return Err(Error::custom_at( "Unknown field attribute for tag", diff --git a/packages/rs-platform-serialization-derive/src/deserialize_enum.rs b/packages/rs-platform-serialization-derive/src/deserialize_enum.rs index 28fa18dcd29..47439690747 100644 --- a/packages/rs-platform-serialization-derive/src/deserialize_enum.rs +++ b/packages/rs-platform-serialization-derive/src/deserialize_enum.rs @@ -15,6 +15,7 @@ pub(super) fn derive_platform_deserialize_enum( let VersionAttributes { passthrough, unversioned, + trusted, platform_version_path, platform_serialize_limit, untagged, @@ -22,6 +23,13 @@ pub(super) fn derive_platform_deserialize_enum( .. } = version_attributes; + // Ordinary decoding is an explicit opt-in for locally generated fixtures. + let decode_from_slice = if trusted { + quote! { bincode::decode_from_slice } + } else { + quote! { bincode::decode_from_slice_untrusted } + }; + let generics = &input.generics; let (impl_generics, ty_generics, where_clause) = generics.split_for_impl(); @@ -112,7 +120,7 @@ pub(super) fn derive_platform_deserialize_enum( quote! { #index => { let config = bincode::config::standard().with_big_endian().with_no_limit(); - let deserialized : #versioned_variant_name = bincode::decode_from_slice(&data, config)#map_err?; + let deserialized : #versioned_variant_name = #decode_from_slice(&data, config)#map_err?; deserialized.into() }, } @@ -156,7 +164,7 @@ pub(super) fn derive_platform_deserialize_enum( quote! { #index => { let config = bincode::config::standard().with_big_endian().with_big_endian().with_limit::<{ #limit }>(); - let deserialized : #versioned_variant_name = bincode::decode_from_slice(&data, config)#map_err?; + let deserialized : #versioned_variant_name = #decode_from_slice(&data, config)#map_err?; deserialized.into() }, } @@ -220,7 +228,7 @@ pub(super) fn derive_platform_deserialize_enum( where Self: Sized { let config = bincode::config::standard().with_big_endian().with_limit::<{ #limit }>(); - bincode::decode_from_slice(&data, config).map(|(a,_)| a)#limit_map_err + #decode_from_slice(&data, config).map(|(a,_)| a)#limit_map_err } fn deserialize_from_bytes_no_limit( @@ -229,7 +237,7 @@ pub(super) fn derive_platform_deserialize_enum( where Self: Sized { let config = bincode::config::standard().with_big_endian().with_no_limit(); - bincode::decode_from_slice(&data, config).map(|(a,_)| a)#map_err + #decode_from_slice(&data, config).map(|(a,_)| a)#map_err } } } @@ -242,7 +250,7 @@ pub(super) fn derive_platform_deserialize_enum( where Self: Sized { let config = bincode::config::standard().with_big_endian().with_no_limit(); - bincode::decode_from_slice(&data, config).map(|(a,_)| a)#map_err + #decode_from_slice(&data, config).map(|(a,_)| a)#map_err } fn deserialize_from_bytes_no_limit( @@ -251,7 +259,7 @@ pub(super) fn derive_platform_deserialize_enum( where Self: Sized { let config = bincode::config::standard().with_big_endian().with_no_limit(); - bincode::decode_from_slice(&data, config).map(|(a,_)| a)#map_err + #decode_from_slice(&data, config).map(|(a,_)| a)#map_err } } } diff --git a/packages/rs-platform-serialization-derive/src/deserialize_struct.rs b/packages/rs-platform-serialization-derive/src/deserialize_struct.rs index bfac190dbe5..64436dde773 100644 --- a/packages/rs-platform-serialization-derive/src/deserialize_struct.rs +++ b/packages/rs-platform-serialization-derive/src/deserialize_struct.rs @@ -15,11 +15,19 @@ pub(super) fn derive_platform_deserialize_struct( let VersionAttributes { crate_name, unversioned, + trusted, platform_serialize_limit, platform_serialize_into, .. } = version_attributes; + // Ordinary decoding is an explicit opt-in for locally generated fixtures. + let decode_from_slice = if trusted { + quote! { bincode::decode_from_slice } + } else { + quote! { bincode::decode_from_slice_untrusted } + }; + // Extract the generics. let generics = &input.generics; let (impl_generics, ty_generics, where_clause) = generics.split_for_impl(); @@ -54,7 +62,7 @@ pub(super) fn derive_platform_deserialize_struct( let deserialize_into = match platform_serialize_into { Some(inner) => quote! { #config - let inner: #inner = bincode::decode_from_slice(bytes, config).map(|(a, _)| a)?; + let inner: #inner = #decode_from_slice(bytes, config).map(|(a, _)| a)?; Ok(inner.into()) }, None => { @@ -66,7 +74,7 @@ pub(super) fn derive_platform_deserialize_struct( } else { quote! { #config - bincode::decode_from_slice(bytes, config).map(|(a,_)| a) + #decode_from_slice(bytes, config).map(|(a,_)| a) #limit_err } } diff --git a/packages/rs-platform-serialization-derive/src/lib.rs b/packages/rs-platform-serialization-derive/src/lib.rs index 601d891abb5..856590149d6 100644 --- a/packages/rs-platform-serialization-derive/src/lib.rs +++ b/packages/rs-platform-serialization-derive/src/lib.rs @@ -24,6 +24,7 @@ struct VersionAttributes { platform_serialize_limit: Option, untagged: bool, unversioned: bool, + trusted: bool, platform_serialize_into: Option, platform_version_path: Option, #[allow(dead_code)] // TODO this is never read @@ -112,6 +113,7 @@ pub fn derive_platform_serialize(input: TokenStream) -> TokenStream { let mut platform_serialize_limit = None; let mut untagged = false; let mut unversioned = false; + let mut trusted = false; let mut platform_serialize_into = None; let mut platform_version_path = None; let mut crate_name: Ident = Ident::new("crate", Span::call_site()); // default value is "crate" @@ -131,6 +133,8 @@ pub fn derive_platform_serialize(input: TokenStream) -> TokenStream { crate_name = syn::parse_str(&crate_name_str.value()).unwrap(); } else if meta.path.is_ident("passthrough") { passthrough = true; + } else if meta.path.is_ident("trusted") { + trusted = true; } else if meta.path.is_ident("unversioned") { unversioned = true; } else if meta.path.is_ident("allow_prepend_version") { @@ -184,6 +188,7 @@ pub fn derive_platform_serialize(input: TokenStream) -> TokenStream { platform_serialize_limit, untagged, unversioned, + trusted, platform_serialize_into, platform_version_path, allow_prepend_version, @@ -219,6 +224,15 @@ pub fn derive_platform_serialize(input: TokenStream) -> TokenStream { } } +/// Derive Platform deserialization using bincode's untrusted native decoder. +/// +/// Serialized types and their fields need `DecodeUntrusted`, including when +/// decoding through the no-limit entry point. Existing configured budgets and +/// domain validation still apply; untrusted decoding adds no universal budget. +/// Local mock formats containing ordinary-only foreign types may explicitly use +/// `#[platform_serialize(unversioned, trusted)]`. Do not use that exception for +/// network input or imported data. The separate `PlatformVersionedDecode` APIs +/// retain their ordinary decoding contract for existing internal and mock callers. #[proc_macro_derive( PlatformDeserialize, attributes(platform_error_type, platform_serialize) @@ -247,6 +261,7 @@ pub fn derive_platform_deserialize(input: TokenStream) -> TokenStream { let mut passthrough = false; let mut unversioned = false; + let mut trusted = false; let mut platform_serialize_limit = None; let mut untagged = false; let mut platform_serialize_into = None; @@ -268,6 +283,8 @@ pub fn derive_platform_deserialize(input: TokenStream) -> TokenStream { crate_name = syn::parse_str(&crate_name_str.value()).unwrap(); } else if meta.path.is_ident("passthrough") { passthrough = true; + } else if meta.path.is_ident("trusted") { + trusted = true; } else if meta.path.is_ident("unversioned") { unversioned = true; } else if meta.path.is_ident("allow_prepend_version") { @@ -321,6 +338,7 @@ pub fn derive_platform_deserialize(input: TokenStream) -> TokenStream { platform_serialize_limit, untagged, unversioned, + trusted, platform_serialize_into, platform_version_path, allow_prepend_version, diff --git a/packages/rs-platform-value/src/lib.rs b/packages/rs-platform-value/src/lib.rs index d4ecf0ae08e..8239d58dbbb 100644 --- a/packages/rs-platform-value/src/lib.rs +++ b/packages/rs-platform-value/src/lib.rs @@ -181,131 +181,155 @@ fn validate_value_decode_depth(depth: usize) -> Result<(), DecodeError> { }) } -impl Decode for Value { - fn decode>(decoder: &mut D) -> Result { - let mut frames = Vec::::new(); - let mut completed_value = None; - - loop { - if let Some(value) = completed_value.take() { - let Some(frame) = frames.last_mut() else { - return Ok(value); - }; - - match frame { - ValueDecodeFrame::Array { values, remaining } => { - values.push(value); - *remaining -= 1; - - if *remaining == 0 { - let ValueDecodeFrame::Array { values, .. } = - frames.pop().expect("the array frame was just observed") - else { - unreachable!("the observed frame changed") - }; - completed_value = Some(Value::Array(values)); - } else { - decoder.unclaim_bytes_read(std::mem::size_of::()); +// Share the wire schema and domain checks across both decoding APIs. +macro_rules! impl_value_decode { + ($decode:ident, $decoder:ident, $method:ident, $untrusted:expr) => { + impl bincode::$decode for Value { + fn $method>( + decoder: &mut D, + ) -> Result { + let mut frames = Vec::::new(); + let mut completed_value = None; + + loop { + if let Some(value) = completed_value.take() { + let Some(frame) = frames.last_mut() else { + return Ok(value); + }; + + match frame { + ValueDecodeFrame::Array { values, remaining } => { + if $untrusted { + values + .try_reserve(1) + .map_err(|_| DecodeError::LimitExceeded)?; + } + values.push(value); + *remaining -= 1; + + if *remaining == 0 { + let ValueDecodeFrame::Array { values, .. } = + frames.pop().expect("the array frame was just observed") + else { + unreachable!("the observed frame changed") + }; + completed_value = Some(Value::Array(values)); + } else { + decoder.unclaim_bytes_read(std::mem::size_of::()); + } + } + ValueDecodeFrame::Map { + entries, + remaining, + pending_key, + } => { + if pending_key.is_none() { + *pending_key = Some(value); + } else { + let key = pending_key + .take() + .expect("the map frame was expecting a value"); + if $untrusted { + entries + .try_reserve(1) + .map_err(|_| DecodeError::LimitExceeded)?; + } + entries.push((key, value)); + *remaining -= 1; + + if *remaining == 0 { + let ValueDecodeFrame::Map { entries, .. } = + frames.pop().expect("the map frame was just observed") + else { + unreachable!("the observed frame changed") + }; + completed_value = Some(Value::Map(entries)); + } else { + decoder.unclaim_bytes_read(std::mem::size_of::<( + Value, + Value, + )>( + )); + } + } + } } + + continue; } - ValueDecodeFrame::Map { - entries, - remaining, - pending_key, - } => { - if pending_key.is_none() { - *pending_key = Some(value); - } else { - let key = pending_key - .take() - .expect("the map frame was expecting a value"); - entries.push((key, value)); - *remaining -= 1; - - if *remaining == 0 { - let ValueDecodeFrame::Map { entries, .. } = - frames.pop().expect("the map frame was just observed") - else { - unreachable!("the observed frame changed") - }; - completed_value = Some(Value::Map(entries)); + + let variant_index = >::$method(decoder)?; + completed_value = Some(match variant_index { + 0 => Value::U128(bincode::$decode::$method(decoder)?), + 1 => Value::I128(bincode::$decode::$method(decoder)?), + 2 => Value::U64(bincode::$decode::$method(decoder)?), + 3 => Value::I64(bincode::$decode::$method(decoder)?), + 4 => Value::U32(bincode::$decode::$method(decoder)?), + 5 => Value::I32(bincode::$decode::$method(decoder)?), + 6 => Value::U16(bincode::$decode::$method(decoder)?), + 7 => Value::I16(bincode::$decode::$method(decoder)?), + 8 => Value::U8(bincode::$decode::$method(decoder)?), + 9 => Value::I8(bincode::$decode::$method(decoder)?), + 10 => Value::Bytes(bincode::$decode::$method(decoder)?), + 11 => Value::Bytes20(bincode::$decode::$method(decoder)?), + 12 => Value::Bytes32(bincode::$decode::$method(decoder)?), + 13 => Value::Bytes36(bincode::$decode::$method(decoder)?), + 14 => Value::EnumU8(bincode::$decode::$method(decoder)?), + 15 => Value::EnumString(bincode::$decode::$method(decoder)?), + 16 => Value::Identifier(bincode::$decode::$method(decoder)?), + 17 => Value::Float(bincode::$decode::$method(decoder)?), + 18 => Value::Text(bincode::$decode::$method(decoder)?), + 19 => Value::Bool(bincode::$decode::$method(decoder)?), + 20 => Value::Null, + 21 => { + validate_value_decode_depth(frames.len() + 1)?; + let len = decode_value_container_len(decoder)?; + decoder.claim_container_read::(len)?; + + if len == 0 { + Value::Array(Vec::new()) } else { - decoder.unclaim_bytes_read(std::mem::size_of::<(Value, Value)>()); + frames.push(ValueDecodeFrame::Array { + values: Vec::with_capacity(if $untrusted { 0 } else { len }), + remaining: len, + }); + decoder.unclaim_bytes_read(std::mem::size_of::()); + continue; } } - } - } - - continue; - } + 22 => { + validate_value_decode_depth(frames.len() + 1)?; + let len = decode_value_container_len(decoder)?; + decoder.claim_container_read::<(Value, Value)>(len)?; - let variant_index = >::decode(decoder)?; - completed_value = Some(match variant_index { - 0 => Value::U128(Decode::decode(decoder)?), - 1 => Value::I128(Decode::decode(decoder)?), - 2 => Value::U64(Decode::decode(decoder)?), - 3 => Value::I64(Decode::decode(decoder)?), - 4 => Value::U32(Decode::decode(decoder)?), - 5 => Value::I32(Decode::decode(decoder)?), - 6 => Value::U16(Decode::decode(decoder)?), - 7 => Value::I16(Decode::decode(decoder)?), - 8 => Value::U8(Decode::decode(decoder)?), - 9 => Value::I8(Decode::decode(decoder)?), - 10 => Value::Bytes(Decode::decode(decoder)?), - 11 => Value::Bytes20(Decode::decode(decoder)?), - 12 => Value::Bytes32(Decode::decode(decoder)?), - 13 => Value::Bytes36(Decode::decode(decoder)?), - 14 => Value::EnumU8(Decode::decode(decoder)?), - 15 => Value::EnumString(Decode::decode(decoder)?), - 16 => Value::Identifier(Decode::decode(decoder)?), - 17 => Value::Float(Decode::decode(decoder)?), - 18 => Value::Text(Decode::decode(decoder)?), - 19 => Value::Bool(Decode::decode(decoder)?), - 20 => Value::Null, - 21 => { - validate_value_decode_depth(frames.len() + 1)?; - let len = decode_value_container_len(decoder)?; - decoder.claim_container_read::(len)?; - - if len == 0 { - Value::Array(Vec::new()) - } else { - frames.push(ValueDecodeFrame::Array { - values: Vec::with_capacity(len), - remaining: len, - }); - decoder.unclaim_bytes_read(std::mem::size_of::()); - continue; - } - } - 22 => { - validate_value_decode_depth(frames.len() + 1)?; - let len = decode_value_container_len(decoder)?; - decoder.claim_container_read::<(Value, Value)>(len)?; - - if len == 0 { - Value::Map(Vec::new()) - } else { - frames.push(ValueDecodeFrame::Map { - entries: Vec::with_capacity(len), - remaining: len, - pending_key: None, - }); - decoder.unclaim_bytes_read(std::mem::size_of::<(Value, Value)>()); - continue; - } - } - found => { - return Err(DecodeError::UnexpectedVariant { - type_name: std::any::type_name::(), - allowed: &AllowedEnumVariants::Range { min: 0, max: 22 }, - found, + if len == 0 { + Value::Map(Vec::new()) + } else { + frames.push(ValueDecodeFrame::Map { + entries: Vec::with_capacity(if $untrusted { 0 } else { len }), + remaining: len, + pending_key: None, + }); + decoder.unclaim_bytes_read(std::mem::size_of::<(Value, Value)>()); + continue; + } + } + found => { + return Err(DecodeError::UnexpectedVariant { + type_name: std::any::type_name::(), + allowed: &AllowedEnumVariants::Range { min: 0, max: 22 }, + found, + }); + } }); } - }); + } } - } + }; } +impl_value_decode!(Decode, Decoder, decode, false); +impl_value_decode!(DecodeUntrusted, UntrustedDecoder, decode_untrusted, true); +bincode::impl_borrow_decode_untrusted!(Value); bincode::impl_borrow_decode!(Value); diff --git a/packages/rs-platform-value/src/types/binary_data.rs b/packages/rs-platform-value/src/types/binary_data.rs index 92e79397e31..0d07ea5faff 100644 --- a/packages/rs-platform-value/src/types/binary_data.rs +++ b/packages/rs-platform-value/src/types/binary_data.rs @@ -3,12 +3,12 @@ use crate::types::encoding_string_to_encoding; use crate::{string_encoding, Error, Value}; use base64::prelude::BASE64_STANDARD; use base64::Engine; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use serde::de::Visitor; use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Default, Clone, PartialEq, Eq, Ord, PartialOrd, Hash, Encode, Decode)] +#[derive(Default, Clone, PartialEq, Eq, Ord, PartialOrd, Hash, Encode, Decode, DecodeUntrusted)] pub struct BinaryData(pub Vec); impl fmt::Debug for BinaryData { diff --git a/packages/rs-platform-value/src/types/bytes_20.rs b/packages/rs-platform-value/src/types/bytes_20.rs index ce9d109cfc8..928fd3a6f33 100644 --- a/packages/rs-platform-value/src/types/bytes_20.rs +++ b/packages/rs-platform-value/src/types/bytes_20.rs @@ -3,12 +3,25 @@ use crate::types::encoding_string_to_encoding; use crate::{string_encoding, Error, Value}; use base64::prelude::BASE64_STANDARD; use base64::Engine; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use serde::de::Visitor; use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Default, Debug, Clone, PartialEq, Eq, Ord, PartialOrd, Hash, Copy, Encode, Decode)] +#[derive( + Default, + Debug, + Clone, + PartialEq, + Eq, + Ord, + PartialOrd, + Hash, + Copy, + Encode, + Decode, + DecodeUntrusted, +)] pub struct Bytes20(pub [u8; 20]); impl AsRef<[u8]> for Bytes20 { diff --git a/packages/rs-platform-value/src/types/bytes_32.rs b/packages/rs-platform-value/src/types/bytes_32.rs index 3e9a1f63aa6..33d36bd84ff 100644 --- a/packages/rs-platform-value/src/types/bytes_32.rs +++ b/packages/rs-platform-value/src/types/bytes_32.rs @@ -3,14 +3,27 @@ use crate::types::encoding_string_to_encoding; use crate::{string_encoding, Error, Value}; use base64::prelude::BASE64_STANDARD; use base64::Engine; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use rand::rngs::StdRng; use rand::Rng; use serde::de::Visitor; use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Default, Debug, Clone, PartialEq, Eq, Ord, PartialOrd, Hash, Copy, Encode, Decode)] +#[derive( + Default, + Debug, + Clone, + PartialEq, + Eq, + Ord, + PartialOrd, + Hash, + Copy, + Encode, + Decode, + DecodeUntrusted, +)] pub struct Bytes32(pub [u8; 32]); impl AsRef<[u8]> for Bytes32 { diff --git a/packages/rs-platform-value/src/types/bytes_36.rs b/packages/rs-platform-value/src/types/bytes_36.rs index 00193c52a39..f56c49fece2 100644 --- a/packages/rs-platform-value/src/types/bytes_36.rs +++ b/packages/rs-platform-value/src/types/bytes_36.rs @@ -3,12 +3,14 @@ use crate::types::encoding_string_to_encoding; use crate::{string_encoding, Error, Value}; use base64::prelude::BASE64_STANDARD; use base64::Engine; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use serde::de::Visitor; use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Debug, Clone, PartialEq, Eq, Ord, PartialOrd, Hash, Copy, Encode, Decode)] +#[derive( + Debug, Clone, PartialEq, Eq, Ord, PartialOrd, Hash, Copy, Encode, Decode, DecodeUntrusted, +)] pub struct Bytes36(pub [u8; 36]); impl Bytes36 { diff --git a/packages/rs-platform-value/src/types/identifier.rs b/packages/rs-platform-value/src/types/identifier.rs index 5335e069576..1e37e578ca9 100644 --- a/packages/rs-platform-value/src/types/identifier.rs +++ b/packages/rs-platform-value/src/types/identifier.rs @@ -1,6 +1,6 @@ use bincode::enc::Encoder; use bincode::error::EncodeError; -use bincode::{Decode, Encode}; +use bincode::{Decode, DecodeUntrusted, Encode}; use rand::distributions::Standard; use rand::prelude::Distribution; use rand::rngs::StdRng; @@ -18,7 +18,20 @@ use crate::{string_encoding, Error, Value}; pub const IDENTIFIER_MEDIA_TYPE: &str = "application/x.dash.dpp.identifier"; -#[derive(Default, Debug, Clone, PartialEq, Eq, Hash, Ord, PartialOrd, Copy, Encode, Decode)] +#[derive( + Default, + Debug, + Clone, + PartialEq, + Eq, + Hash, + Ord, + PartialOrd, + Copy, + Encode, + Decode, + DecodeUntrusted, +)] pub struct IdentifierBytes32(pub [u8; 32]); #[derive( @@ -35,6 +48,7 @@ pub struct IdentifierBytes32(pub [u8; 32]); Deserialize, Encode, Decode, + DecodeUntrusted, )] pub struct Identifier(pub IdentifierBytes32); diff --git a/packages/rs-platform-value/tests/untrusted_decode.rs b/packages/rs-platform-value/tests/untrusted_decode.rs new file mode 100644 index 00000000000..91ce1c0601b --- /dev/null +++ b/packages/rs-platform-value/tests/untrusted_decode.rs @@ -0,0 +1,116 @@ +use bincode::config; +use platform_value::Value; +use std::alloc::{GlobalAlloc, Layout, System}; +use std::cell::Cell; + +struct ObservedAllocator; + +thread_local! { + static OBSERVING: Cell = const { Cell::new(false) }; + static LARGEST_REQUEST: Cell = const { Cell::new(0) }; +} + +fn observe(size: usize) { + let _ = OBSERVING.try_with(|enabled| { + if enabled.get() { + LARGEST_REQUEST.with(|largest| largest.set(largest.get().max(size))); + } + }); +} + +unsafe impl GlobalAlloc for ObservedAllocator { + unsafe fn alloc(&self, layout: Layout) -> *mut u8 { + observe(layout.size()); + unsafe { System.alloc(layout) } + } + + unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8 { + observe(layout.size()); + unsafe { System.alloc_zeroed(layout) } + } + + unsafe fn realloc(&self, ptr: *mut u8, layout: Layout, size: usize) -> *mut u8 { + observe(size); + unsafe { System.realloc(ptr, layout, size) } + } + + unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) { + unsafe { System.dealloc(ptr, layout) } + } +} + +#[global_allocator] +static ALLOCATOR: ObservedAllocator = ObservedAllocator; + +#[test] +fn should_reject_missing_value_payload_without_reserving_declared_lengths() { + let config = config::standard().with_big_endian().with_no_limit(); + // Bytes, enum bytes/strings, text, arrays and maps all allocate. Include + // arrays/maps with one complete entry before the missing remainder. + for variant in [10u32, 14, 15, 18, 21, 22] { + let mut bytes = bincode::encode_to_vec(variant, config).unwrap(); + bytes.extend(bincode::encode_to_vec(262_144u64, config).unwrap()); + if variant == 21 { + bytes.extend(bincode::encode_to_vec(Value::Null, config).unwrap()); + } else if variant == 22 { + bytes.extend(bincode::encode_to_vec((Value::Null, Value::Null), config).unwrap()); + } + + LARGEST_REQUEST.with(|largest| largest.set(0)); + OBSERVING.with(|enabled| enabled.set(true)); + let owned = bincode::decode_from_slice_untrusted::(&bytes, config); + let borrowed = bincode::borrow_decode_from_slice_untrusted::(&bytes, config); + OBSERVING.with(|enabled| enabled.set(false)); + let largest = LARGEST_REQUEST.with(Cell::get); + + assert!(owned.is_err() && borrowed.is_err(), "variant {variant}"); + assert!( + largest < 16_384, + "variant {variant} reserved {largest} bytes" + ); + } +} + +#[test] +fn should_preserve_value_wire_format_and_consumed_bytes() { + let value = Value::Map(vec![ + (Value::Text("key".into()), Value::Bytes(vec![0, 1, 255])), + ( + Value::U64(u64::MAX), + Value::Array(vec![Value::Null, Value::EnumString(vec!["choice".into()])]), + ), + ]); + macro_rules! check { + ($config:expr) => {{ + let mut bytes = bincode::encode_to_vec(&value, $config).unwrap(); + let consumed = bytes.len(); + bytes.push(42); + let ordinary = bincode::decode_from_slice::(&bytes, $config).unwrap(); + let guarded = + bincode::decode_from_slice_untrusted::(&bytes, $config).unwrap(); + let borrowed = + bincode::borrow_decode_from_slice_untrusted::(&bytes, $config).unwrap(); + assert_eq!(ordinary, (value.clone(), consumed)); + assert_eq!(guarded, ordinary); + assert_eq!(borrowed, ordinary); + }}; + } + check!(config::standard()); + check!(config::standard().with_big_endian()); + check!(config::standard().with_fixed_int_encoding()); + check!(config::standard() + .with_big_endian() + .with_fixed_int_encoding()); +} + +#[test] +fn should_preserve_value_depth_and_budget_checks() { + let config = config::standard().with_big_endian(); + let mut bytes = [21, 1].repeat(1_000); + bytes.push(20); // Null at the bottom of the nested arrays. + assert!(bincode::decode_from_slice_untrusted::(&bytes, config).is_err()); + let bytes = bincode::encode_to_vec(Value::Bytes(vec![1; 32]), config).unwrap(); + assert!( + bincode::decode_from_slice_untrusted::(&bytes, config.with_limit::<8>()).is_err() + ); +} diff --git a/packages/rs-platform-wallet-ffi/src/asset_lock/sync.rs b/packages/rs-platform-wallet-ffi/src/asset_lock/sync.rs index 585d7c7858b..7fa8a7022d3 100644 --- a/packages/rs-platform-wallet-ffi/src/asset_lock/sync.rs +++ b/packages/rs-platform-wallet-ffi/src/asset_lock/sync.rs @@ -348,7 +348,7 @@ pub unsafe extern "C" fn asset_lock_manager_recover( // Parse optional proof let proof = if !proof_bytes.is_null() && proof_len > 0 { let data = std::slice::from_raw_parts(proof_bytes, proof_len); - let (p, _) = unwrap_result_or_return!(dpp::bincode::decode_from_slice( + let (p, _) = unwrap_result_or_return!(dpp::bincode::decode_from_slice_untrusted( data, dpp::bincode::config::standard() )); diff --git a/packages/rs-platform-wallet-ffi/src/core_wallet/transaction_builder.rs b/packages/rs-platform-wallet-ffi/src/core_wallet/transaction_builder.rs index 08e876f896d..bb3f8f3d6dc 100644 --- a/packages/rs-platform-wallet-ffi/src/core_wallet/transaction_builder.rs +++ b/packages/rs-platform-wallet-ffi/src/core_wallet/transaction_builder.rs @@ -891,26 +891,30 @@ pub unsafe extern "C" fn core_wallet_tx_builder_set_special_payload( check_ptr!(payload_bytes); let bytes = std::slice::from_raw_parts(payload_bytes, payload_len); - let payload: TransactionPayload = - match bincode::decode_from_slice(bytes, bincode::config::standard()) { - Ok((p, consumed)) => { - if consumed != payload_len { - return PlatformWalletFFIResult::err( - PlatformWalletFFIResultCode::ErrorDeserialization, - format!( - "trailing bytes after payload: decoded {consumed} of {payload_len} bytes" - ), - ); - } - p - } - Err(e) => { + // Upstream TransactionPayload does not implement DecodeUntrusted yet. + // Its derived decoders can reserve collections from their length headers, + // so use Core's existing decode limit until those decoders opt in. + let config = + bincode::config::standard().with_limit::<{ dashcore::consensus::encode::MAX_VEC_SIZE }>(); + let payload: TransactionPayload = match bincode::decode_from_slice(bytes, config) { + Ok((p, consumed)) => { + if consumed != payload_len { return PlatformWalletFFIResult::err( PlatformWalletFFIResultCode::ErrorDeserialization, - format!("invalid special payload: {e}"), + format!( + "trailing bytes after payload: decoded {consumed} of {payload_len} bytes" + ), ); } - }; + p + } + Err(e) => { + return PlatformWalletFFIResult::err( + PlatformWalletFFIResultCode::ErrorDeserialization, + format!("invalid special payload: {e}"), + ); + } + }; let b = (*builder).take_builder(); let b = b.set_special_payload(payload); @@ -1041,6 +1045,50 @@ pub unsafe extern "C" fn core_wallet_transaction_free(tx: *mut FFICoreTransactio tx.tx_len = 0; } +#[cfg(test)] +mod payload_decode_tests { + use super::*; + use dashcore::blockdata::transaction::special_transaction::asset_lock::AssetLockPayload; + use std::ffi::CStr; + + #[test] + fn should_reject_unbounded_payload_collection_and_keep_builder_usable() { + let payload = TransactionPayload::AssetLockPayloadType(AssetLockPayload::new(vec![])); + let valid = bincode::encode_to_vec(payload, bincode::config::standard()) + .expect("encode an asset lock payload"); + let mut malformed = valid.clone(); + // Replace the empty credit_outputs count with an oversized declaration, + // without supplying any output bytes. + assert_eq!(malformed.pop(), Some(0)); + malformed.extend( + bincode::encode_to_vec(u64::MAX, bincode::config::standard()) + .expect("encode a collection length"), + ); + + unsafe { + let builder = core_wallet_tx_builder_new(FFINetwork::Testnet); + let rejected = core_wallet_tx_builder_set_special_payload( + builder, + malformed.as_ptr(), + malformed.len(), + ); + let accepted = + core_wallet_tx_builder_set_special_payload(builder, valid.as_ptr(), valid.len()); + core_wallet_tx_builder_destroy(builder); + + assert_eq!( + rejected.code, + PlatformWalletFFIResultCode::ErrorDeserialization + ); + assert!(CStr::from_ptr(rejected.message) + .to_str() + .expect("UTF-8 error message") + .contains("LimitExceeded")); + assert_eq!(accepted.code, PlatformWalletFFIResultCode::Success); + } + } +} + #[cfg(test)] mod pooled_balance_handle_tests { //! The two pooled-balance entry points are exposed on the *core* wallet diff --git a/packages/rs-platform-wallet-ffi/src/persistence.rs b/packages/rs-platform-wallet-ffi/src/persistence.rs index 06096c1aa96..a6c252ad559 100644 --- a/packages/rs-platform-wallet-ffi/src/persistence.rs +++ b/packages/rs-platform-wallet-ffi/src/persistence.rs @@ -5007,13 +5007,17 @@ fn build_wallet_start_state( // the `flush` decode boundary already defers. match account_type { AccountType::ProviderOperatorKeys => { + // Upstream BLS keys do not implement DecodeUntrusted yet. Their + // decoder reads a Vec before validating the public key, so + // bound its allocation; a complete BLS xpub is under 200 bytes. let (bls_pubkey, _): (ExtendedBLSPubKey, usize) = - bincode::decode_from_slice(xpub_bytes, config::standard()).map_err(|e| { - PersistenceError::backend(format!( - "failed to decode provider BLS xpub: {}", - e - )) - })?; + bincode::decode_from_slice(xpub_bytes, config::standard().with_limit::<1024>()) + .map_err(|e| { + PersistenceError::backend(format!( + "failed to decode provider BLS xpub: {}", + e + )) + })?; let bls_account = BLSAccount::new( Some(entry.wallet_id.to_vec()), account_type, @@ -5655,30 +5659,25 @@ fn build_unused_asset_locks( })?; // Decode the optional bincode-encoded proof. - let proof: Option = if spec.proof_bytes.is_null() - || spec.proof_bytes_len == 0 - { - None - } else { - // SAFETY: Same lifetime contract as `transaction_bytes`. - let proof_bytes = - unsafe { slice::from_raw_parts(spec.proof_bytes, spec.proof_bytes_len) }; - // INTENTIONAL(unmaintained-bincode-decoder): host-supplied bytes - // through bincode 2.0.1 (RUSTSEC-2025-0141, unmaintained). Same - // accepted risk as the account-xpub decodes in - // `build_wallet_start_state`. - let (proof, _) = dpp::bincode::decode_from_slice::( - proof_bytes, - config::standard(), - ) - .map_err(|e| { - PersistenceError::backend(format!( - "tracked asset lock: failed to decode proof: {}", - e - )) - })?; - Some(proof) - }; + let proof: Option = + if spec.proof_bytes.is_null() || spec.proof_bytes_len == 0 { + None + } else { + // SAFETY: Same lifetime contract as `transaction_bytes`. + let proof_bytes = + unsafe { slice::from_raw_parts(spec.proof_bytes, spec.proof_bytes_len) }; + let (proof, _) = dpp::bincode::decode_from_slice_untrusted::< + dpp::prelude::AssetLockProof, + _, + >(proof_bytes, config::standard()) + .map_err(|e| { + PersistenceError::backend(format!( + "tracked asset lock: failed to decode proof: {}", + e + )) + })?; + Some(proof) + }; let funding_type = funding_type_from_u8(spec.funding_type)?; let status = status_from_u8(spec.status)?; diff --git a/packages/rs-platform-wallet-storage/src/sqlite/migrations/legacy_v008.rs b/packages/rs-platform-wallet-storage/src/sqlite/migrations/legacy_v008.rs index b1d7d208feb..da8b033e0de 100644 --- a/packages/rs-platform-wallet-storage/src/sqlite/migrations/legacy_v008.rs +++ b/packages/rs-platform-wallet-storage/src/sqlite/migrations/legacy_v008.rs @@ -13,6 +13,10 @@ use rusqlite::{params, Transaction}; use crate::sqlite::error::WalletStorageError; use crate::sqlite::schema::{accounts, blob, core_pool, id32, wallets}; +// Legacy v8 rows only: read here once during migration, never written again, +// so the shape is admitted to `blob::decode` without becoming persistable. +blob::impl_blob_decode!(AccountAddressPoolEntry); + fn invalid(reason: &'static str) -> WalletStorageError { WalletStorageError::blob_decode(reason) } diff --git a/packages/rs-platform-wallet-storage/src/sqlite/schema/asset_locks.rs b/packages/rs-platform-wallet-storage/src/sqlite/schema/asset_locks.rs index f437755606a..b6f86c9b297 100644 --- a/packages/rs-platform-wallet-storage/src/sqlite/schema/asset_locks.rs +++ b/packages/rs-platform-wallet-storage/src/sqlite/schema/asset_locks.rs @@ -87,14 +87,15 @@ impl AssetLockEntryWire { }) } - /// Reconstruct the [`AssetLockEntry`], natively decoding the proof. + /// Reconstruct the [`AssetLockEntry`], natively decoding the proof through + /// the untrusted decoder so its declared lengths are never pre-allocated. /// Rejects trailing bytes past the typed proof length, mirroring /// `IdentityKeyWire::into_entry` and the outer `blob::decode` guard. fn into_entry(self) -> Result { let proof = match self.proof { Some(bytes) => { let (proof, consumed): (AssetLockProof, usize) = - bincode::decode_from_slice(&bytes, blob::bounded_config())?; + bincode::decode_from_slice_untrusted(&bytes, blob::bounded_config())?; if consumed != bytes.len() { return Err(WalletStorageError::blob_decode( "unexpected trailing bytes in asset_locks proof bincode", diff --git a/packages/rs-platform-wallet-storage/src/sqlite/schema/blob.rs b/packages/rs-platform-wallet-storage/src/sqlite/schema/blob.rs index c53f2584be2..d74910c66c0 100644 --- a/packages/rs-platform-wallet-storage/src/sqlite/schema/blob.rs +++ b/packages/rs-platform-wallet-storage/src/sqlite/schema/blob.rs @@ -28,17 +28,44 @@ pub(crate) mod sealed { /// `T: Serialize` slip. pub trait PersistableBlob: Serialize + sealed::Sealed {} -/// Seal-and-mark a type for [`blob::encode`](encode). +/// Explicit opt-in for the persisted Serde graphs [`decode`] accepts. +/// Implementations must review custom visitors and nested binary decoders: +/// the guarded adapter withholds sequence and map allocation hints, and the +/// row budget plus each graph's own domain checks still apply. Every +/// [`PersistableBlob`] is admitted by [`impl_persistable_blob!`]; shapes an +/// older schema wrote that only a migration still reads opt in through +/// [`impl_blob_decode!`] alone, without also reaching [`encode`]. +pub trait BlobDecode: DeserializeOwned {} + +/// Admit decode-only shapes to [`decode`]. +macro_rules! impl_blob_decode { + ($($t:ty),+ $(,)?) => { + $( + impl $crate::sqlite::schema::blob::BlobDecode for $t {} + )+ + }; +} +pub(crate) use impl_blob_decode; + +/// Seal-and-mark a type for [`blob::encode`](encode) and admit it to +/// [`blob::decode`](decode). macro_rules! impl_persistable_blob { ($($t:ty),+ $(,)?) => { $( impl $crate::sqlite::schema::blob::sealed::Sealed for $t {} impl $crate::sqlite::schema::blob::PersistableBlob for $t {} + impl $crate::sqlite::schema::blob::BlobDecode for $t {} )+ }; } pub(crate) use impl_persistable_blob; +#[derive(serde::Deserialize)] +#[serde(transparent)] +struct UntrustedBlob(T); + +impl<'de, T: BlobDecode> bincode::serde::DeserializeUntrusted<'de> for UntrustedBlob {} + /// Hard cap on bincode-serde allocations, applied symmetrically to encode + /// decode so a crafted length prefix can't OOM the host. Shares the crate-root /// [`SIZE_LIMIT_BYTES`](crate::SIZE_LIMIT_BYTES) with the KV value cap. @@ -115,24 +142,26 @@ pub fn encode(value: &T) -> Result, WalletStorageErr /// trailing bytes so a corrupt or forward-incompatible payload fails /// loudly instead of decoding a stale prefix. Also caps in-decode /// allocations at [`BLOB_SIZE_LIMIT_BYTES`] so a crafted length prefix -/// can't OOM the host. -pub fn decode(blob: &[u8]) -> Result { +/// can't OOM the host, and decodes through bincode's untrusted Serde adapter so +/// a collection's declared length is never turned into capacity up front. +pub fn decode(blob: &[u8]) -> Result { if blob.len() > BLOB_SIZE_LIMIT_BYTES { return Err(WalletStorageError::BlobTooLarge { len_bytes: blob.len(), limit_bytes: BLOB_SIZE_LIMIT_BYTES, }); } - let (value, consumed) = match bincode::serde::decode_from_slice(blob, bounded_config()) { - Ok(v) => v, - Err(bincode::error::DecodeError::LimitExceeded) => { - return Err(WalletStorageError::BlobTooLarge { - len_bytes: blob.len(), - limit_bytes: BLOB_SIZE_LIMIT_BYTES, - }); - } - Err(other) => return Err(WalletStorageError::from(other)), - }; + let (UntrustedBlob(value), consumed) = + match bincode::serde::decode_from_slice_untrusted(blob, bounded_config()) { + Ok(v) => v, + Err(bincode::error::DecodeError::LimitExceeded) => { + return Err(WalletStorageError::BlobTooLarge { + len_bytes: blob.len(), + limit_bytes: BLOB_SIZE_LIMIT_BYTES, + }); + } + Err(other) => return Err(WalletStorageError::from(other)), + }; if consumed != blob.len() { return Err(WalletStorageError::blob_decode( "unexpected trailing bytes in blob payload", @@ -201,7 +230,7 @@ mod tests { #[test] fn decode_rejects_oversize_blob_with_blob_too_large() { let oversize = vec![0u8; BLOB_SIZE_LIMIT_BYTES + 1]; - let res: Result, _> = decode(&oversize); + let res: Result = decode(&oversize); match res { Err(WalletStorageError::BlobTooLarge { len_bytes, diff --git a/packages/rs-platform-wallet-storage/src/sqlite/schema/identity_keys.rs b/packages/rs-platform-wallet-storage/src/sqlite/schema/identity_keys.rs index e985717c40b..f14c02b60a9 100644 --- a/packages/rs-platform-wallet-storage/src/sqlite/schema/identity_keys.rs +++ b/packages/rs-platform-wallet-storage/src/sqlite/schema/identity_keys.rs @@ -35,7 +35,9 @@ struct IdentityKeyWire { } // PUBLIC material only reaching `entry_blob`: the wire shape carries -// bincode-encoded public keys + public-key hashes. No private bytes. +// bincode-encoded public keys + public-key hashes. No private bytes. The wire +// graph uses Serde collections; the nested public key bytes are decoded +// separately through DPP's untrusted native implementation below. crate::sqlite::schema::blob::impl_persistable_blob!(IdentityKeyWire); impl IdentityKeyWire { @@ -53,7 +55,7 @@ impl IdentityKeyWire { fn into_entry(self) -> Result { let (public_key, consumed): (IdentityPublicKey, usize) = - bincode::decode_from_slice(&self.public_key_bincode, blob::bounded_config())?; + bincode::decode_from_slice_untrusted(&self.public_key_bincode, blob::bounded_config())?; // Reject a valid-prefix + trailing-garbage payload (bincode stops // after the typed length); mirrors the outer blob::decode guard. if consumed != self.public_key_bincode.len() { diff --git a/packages/rs-platform-wallet-storage/tests/sqlite_blob_untrusted_allocation.rs b/packages/rs-platform-wallet-storage/tests/sqlite_blob_untrusted_allocation.rs new file mode 100644 index 00000000000..81af3820ff1 --- /dev/null +++ b/packages/rs-platform-wallet-storage/tests/sqlite_blob_untrusted_allocation.rs @@ -0,0 +1,172 @@ +//! Allocation-observation regression for the wallet BLOB codec. +//! +//! `blob::decode` runs bincode-serde in untrusted mode, which withholds the +//! collection length hints that Serde's `Vec` visitor would otherwise turn +//! into an up-front `Vec::with_capacity`. A blob whose length prefix claims +//! megabytes but whose payload ends after one element must therefore fail +//! without reserving the claimed capacity first. A regression to ordinary +//! Serde decoding would still return an error, but only after allocating +//! (up to Serde's own 1 MiB preallocation cap), which the observing allocator +//! below reports as a large request. Each test first runs the ordinary +//! decoder on the same bytes as a control, proving the ceiling can tell the +//! two apart. + +use std::alloc::{GlobalAlloc, Layout, System}; +use std::cell::Cell; + +use bincode::config::{Configuration, Limit, LittleEndian, Varint}; +use platform_wallet_storage::sqlite::schema::blob::{self, BlobDecode, BLOB_SIZE_LIMIT_BYTES}; +use platform_wallet_storage::WalletStorageError; + +struct ObservedAllocator; + +/// A byte sequence decoded through Serde's `Vec` visitor. Local so the +/// test can admit it to the codec without registering a production shape. +#[derive(Debug, serde::Deserialize)] +#[serde(transparent)] +struct Bytes(#[allow(dead_code)] Vec); // only ever rejected, never read + +impl BlobDecode for Bytes {} + +thread_local! { + static OBSERVING: Cell = const { Cell::new(false) }; + static LARGEST_REQUEST: Cell = const { Cell::new(0) }; +} + +fn observe(size: usize) { + let _ = OBSERVING.try_with(|enabled| { + if enabled.get() { + LARGEST_REQUEST.with(|largest| largest.set(largest.get().max(size))); + } + }); +} + +unsafe impl GlobalAlloc for ObservedAllocator { + unsafe fn alloc(&self, layout: Layout) -> *mut u8 { + observe(layout.size()); + unsafe { System.alloc(layout) } + } + + unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8 { + observe(layout.size()); + unsafe { System.alloc_zeroed(layout) } + } + + unsafe fn realloc(&self, ptr: *mut u8, layout: Layout, size: usize) -> *mut u8 { + observe(size); + unsafe { System.realloc(ptr, layout, size) } + } + + unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) { + unsafe { System.dealloc(ptr, layout) } + } +} + +#[global_allocator] +static ALLOCATOR: ObservedAllocator = ObservedAllocator; + +/// Largest single allocation tolerated while a truncated blob is rejected. +/// Serde's preallocation cap is 1 MiB, so an ordinary decode of the blobs +/// below requests at least that much and trips this ceiling. +const ALLOCATION_CEILING_BYTES: usize = 16 * 1024; + +/// The codec's own configuration: little-endian varint with the row budget. +fn codec_config() -> Configuration> { + bincode::config::standard().with_limit::() +} + +/// A collection blob whose length prefix claims `claimed_len` entries but +/// which carries only the already-encoded `present` entries. +fn truncated_collection(claimed_len: u64, present: &[u8]) -> Vec { + let mut bytes = + bincode::encode_to_vec(claimed_len, codec_config()).expect("encode the length prefix"); + bytes.extend_from_slice(present); + bytes +} + +/// Runs `f` with allocation observation on and returns its result with the +/// largest allocation request made while it ran. +fn observing(f: impl FnOnce() -> R) -> (R, usize) { + LARGEST_REQUEST.with(|largest| largest.set(0)); + OBSERVING.with(|enabled| enabled.set(true)); + let result = f(); + OBSERVING.with(|enabled| enabled.set(false)); + (result, LARGEST_REQUEST.with(Cell::get)) +} + +/// Control: the same bytes through ordinary bincode-serde decoding, which +/// honours the length prefix as a capacity hint. This is the behaviour a +/// regression would reintroduce, and it has to allocate enough for +/// [`ALLOCATION_CEILING_BYTES`] to tell the two decoders apart. +fn assert_ordinary_decoding_reserves_capacity( + what: &str, + bytes: &[u8], +) { + let (result, largest) = observing(|| { + bincode::serde::decode_from_slice::(bytes, codec_config()).map(|(value, _)| value) + }); + assert!( + result.is_err(), + "{what}: the control decode must fail on the truncated payload" + ); + assert!( + largest >= ALLOCATION_CEILING_BYTES, + "{what}: ordinary decoding reserved only {largest} bytes, so this test could not \ + detect a regression to it" + ); +} + +/// The codec under test: `blob::decode` must fail without reserving the +/// claimed capacity, and must fail as truncated rather than as oversized. +fn assert_codec_rejects_within_budget( + what: &str, + bytes: &[u8], +) { + let (result, largest) = observing(|| blob::decode::(bytes)); + let Err(error) = result else { + panic!("{what}: a truncated collection must not decode"); + }; + assert!( + !matches!(error, WalletStorageError::BlobTooLarge { .. }), + "{what}: the payload is physically small, so it must fail as truncated, not as \ + oversized: {error:?}" + ); + assert!( + largest < ALLOCATION_CEILING_BYTES, + "{what}: decoding reserved {largest} bytes before failing; the claimed length must \ + not be turned into capacity" + ); +} + +#[test] +fn should_reject_truncated_u32_sequence_without_reserving_declared_capacity() { + // One million u32s is a 4 MiB reservation, well under the 16 MiB row + // budget, so only the untrusted decoder stands between the claimed length + // and the allocator. + let one_entry = bincode::encode_to_vec(7u32, codec_config()).expect("encode one entry"); + let blob = truncated_collection(1_000_000, &one_entry); + + assert_ordinary_decoding_reserves_capacity::>("Vec", &blob); + assert_codec_rejects_within_budget::>("Vec", &blob); +} + +#[test] +fn should_reject_truncated_byte_sequence_without_reserving_declared_capacity() { + // Eight million bytes claimed, one present, again under the row budget. + let blob = truncated_collection(8_000_000, &[0xAB]); + + assert_ordinary_decoding_reserves_capacity::>("Vec", &blob); + assert_codec_rejects_within_budget::("Vec", &blob); +} + +#[test] +fn should_still_decode_complete_collections() { + // The observing allocator must not interfere with the happy path, and a + // complete payload proves the truncated ones fail for the right reason. + let values: Vec = (0..64).collect(); + let blob = blob::encode(&values).expect("encode a complete collection"); + + let (result, _) = observing(|| blob::decode::>(&blob)); + + assert_eq!(result.expect("a complete blob decodes"), values); +} diff --git a/packages/rs-platform-wallet/src/changeset/serde_adapters.rs b/packages/rs-platform-wallet/src/changeset/serde_adapters.rs index a4dddbd2092..a1fcca467b7 100644 --- a/packages/rs-platform-wallet/src/changeset/serde_adapters.rs +++ b/packages/rs-platform-wallet/src/changeset/serde_adapters.rs @@ -135,7 +135,7 @@ pub mod optional_asset_lock_proof { bytes .map(|b| { let (proof, consumed) = - dpp::bincode::decode_from_slice(&b, dpp::bincode::config::standard()) + dpp::bincode::decode_from_slice_untrusted(&b, dpp::bincode::config::standard()) .map_err(serde::de::Error::custom)?; // `decode_from_slice` stops at the value's end without // rejecting trailing bytes — but this blob holds exactly diff --git a/packages/rs-sdk-ffi/src/address/mod.rs b/packages/rs-sdk-ffi/src/address/mod.rs index ed96a5fed21..978e58d0b0f 100644 --- a/packages/rs-sdk-ffi/src/address/mod.rs +++ b/packages/rs-sdk-ffi/src/address/mod.rs @@ -174,7 +174,8 @@ pub unsafe extern "C" fn dash_sdk_format_grovedb_proof( .with_big_endian() .with_limit::<{ 256 * 1024 * 1024 }>(); - let grovedb_proof: GroveDBProof = match bincode::decode_from_slice(bytes, config) { + let grovedb_proof: GroveDBProof = match bincode::decode_from_slice_untrusted(bytes, config) + { Ok((proof, _)) => proof, Err(e) => { return DashSDKResult::error(DashSDKError::new( diff --git a/packages/rs-sdk/src/platform/address_sync/mod.rs b/packages/rs-sdk/src/platform/address_sync/mod.rs index faac4648773..e8a323ffc4b 100644 --- a/packages/rs-sdk/src/platform/address_sync/mod.rs +++ b/packages/rs-sdk/src/platform/address_sync/mod.rs @@ -1181,7 +1181,7 @@ fn get_last_recent_block_from_proof(proof: &Proof) -> Result, Error> .with_limit::<{ 256 * 1024 * 1024 }>(); let (grovedb_proof, _): (drive::grovedb::operations::proof::GroveDBProof, usize) = - dpp::bincode::decode_from_slice(&proof.grovedb_proof, config).map_err(|e| { + dpp::bincode::decode_from_slice_untrusted(&proof.grovedb_proof, config).map_err(|e| { Error::Protocol(dpp::ProtocolError::DecodingError(format!( "Failed to decode GroveDB proof: {}", e diff --git a/packages/rs-sdk/src/sdk.rs b/packages/rs-sdk/src/sdk.rs index 43d833e7cad..c37e0ffb326 100644 --- a/packages/rs-sdk/src/sdk.rs +++ b/packages/rs-sdk/src/sdk.rs @@ -1307,7 +1307,7 @@ pub fn prettify_proof(proof: &Proof) -> String { .with_big_endian() .with_no_limit(); let grovedb_proof: Result = - bincode::decode_from_slice(&proof.grovedb_proof, config).map(|(a, _)| a); + bincode::decode_from_slice_untrusted(&proof.grovedb_proof, config).map(|(a, _)| a); let grovedb_proof_string = match grovedb_proof { Ok(proof) => format!("{}", proof), diff --git a/packages/wasm-dpp2/src/asset_lock_proof/chain.rs b/packages/wasm-dpp2/src/asset_lock_proof/chain.rs index d320c99c5ec..ff0a8d7b113 100644 --- a/packages/wasm-dpp2/src/asset_lock_proof/chain.rs +++ b/packages/wasm-dpp2/src/asset_lock_proof/chain.rs @@ -3,7 +3,7 @@ use crate::error::{WasmDppError, WasmDppResult}; use crate::identifier::IdentifierWasm; use crate::impl_wasm_conversions_inner; use crate::impl_wasm_type_info; -use bincode::serde::{decode_from_slice, encode_to_vec}; +use bincode::serde::{decode_from_slice_untrusted, encode_to_vec}; use dpp::identity::state_transition::asset_lock_proof::chain::ChainAssetLockProof; use serde::{Deserialize, Serialize}; use wasm_bindgen::prelude::wasm_bindgen; @@ -104,9 +104,10 @@ impl ChainAssetLockProofWasm { #[wasm_bindgen(js_name = "fromBytes")] pub fn from_bytes(bytes: Vec) -> WasmDppResult { - let proof: ChainAssetLockProof = decode_from_slice(&bytes, bincode::config::standard()) - .map_err(|e| WasmDppError::serialization(e.to_string()))? - .0; + let proof: ChainAssetLockProof = + decode_from_slice_untrusted(&bytes, bincode::config::standard()) + .map_err(|e| WasmDppError::serialization(e.to_string()))? + .0; Ok(ChainAssetLockProofWasm(proof)) } } diff --git a/packages/wasm-dpp2/src/asset_lock_proof/proof.rs b/packages/wasm-dpp2/src/asset_lock_proof/proof.rs index 2b735d48b87..e752e778c63 100644 --- a/packages/wasm-dpp2/src/asset_lock_proof/proof.rs +++ b/packages/wasm-dpp2/src/asset_lock_proof/proof.rs @@ -211,9 +211,10 @@ impl AssetLockProofWasm { ) -> WasmDppResult { let bytes = hex::decode(asset_lock_proof) .map_err(|e| WasmDppError::serialization(e.to_string()))?; - let proof: AssetLockProof = bincode::decode_from_slice(&bytes, bincode::config::standard()) - .map_err(|e| WasmDppError::serialization(e.to_string()))? - .0; + let proof: AssetLockProof = + bincode::decode_from_slice_untrusted(&bytes, bincode::config::standard()) + .map_err(|e| WasmDppError::serialization(e.to_string()))? + .0; Ok(AssetLockProofWasm(proof)) } @@ -225,9 +226,10 @@ impl AssetLockProofWasm { #[wasm_bindgen(js_name = "fromBytes")] pub fn from_bytes(bytes: Vec) -> WasmDppResult { - let proof: AssetLockProof = bincode::decode_from_slice(&bytes, bincode::config::standard()) - .map_err(|e| WasmDppError::serialization(e.to_string()))? - .0; + let proof: AssetLockProof = + bincode::decode_from_slice_untrusted(&bytes, bincode::config::standard()) + .map_err(|e| WasmDppError::serialization(e.to_string()))? + .0; Ok(AssetLockProofWasm(proof)) } } diff --git a/packages/wasm-drive-verify/src/voting/verify_vote_polls_end_date_query.rs b/packages/wasm-drive-verify/src/voting/verify_vote_polls_end_date_query.rs index 4b394ec4ffe..5023fbbcc89 100644 --- a/packages/wasm-drive-verify/src/voting/verify_vote_polls_end_date_query.rs +++ b/packages/wasm-drive-verify/src/voting/verify_vote_polls_end_date_query.rs @@ -39,7 +39,7 @@ pub fn verify_vote_polls_end_date_query_vec( // Deserialize the query using bincode let query: VotePollsByEndDateDriveQuery = - bincode::decode_from_slice(&query_cbor.to_vec(), bincode::config::standard()) + bincode::decode_from_slice_untrusted(&query_cbor.to_vec(), bincode::config::standard()) .map_err(|e| JsValue::from_str(&format!("Failed to deserialize query: {:?}", e)))? .0; @@ -90,7 +90,7 @@ pub fn verify_vote_polls_end_date_query_map( // Deserialize the query using bincode let query: VotePollsByEndDateDriveQuery = - bincode::decode_from_slice(&query_cbor.to_vec(), bincode::config::standard()) + bincode::decode_from_slice_untrusted(&query_cbor.to_vec(), bincode::config::standard()) .map_err(|e| JsValue::from_str(&format!("Failed to deserialize query: {:?}", e)))? .0;