Add serde feature flag to primitives (#13027)

* add serde_full feature flag

add serde_full to sp_runtime

add space to toml

add serde_full to application-crypto

add serde_full to arithmetic

fix arithmetic

add serde full to beefy

add serde full to consensus

add serde_full to core

add serdefull to finality grandpa

add serde_full to several primitives crates

make rpc no_std compatible

add scale info to runtime

make serializer no_std compatible

add serde full to storage

add full serde to version

add serde full to weights

add all serde_full features

add . to comment

add missing impl-serde

fix no-std build

fix build

add full_crypto to serde_full

serde_full also implements crypto

full_serde does not work with full_crytpo. needs std

no no_std serde impl possible

also for crypto std is necessary

no serde full for application crypto

fix arithmetic

fix tomls

fix some things

impl fmt for Signature

add serialize to Public

add impl_maybe_marker_serde_full

fix sp-application-crypto toml

add serde feature flag

fix clippy

fix toml grandpa

fix grandpa

rename if_std to if_serde

keystore is not no_std compatible

make keystore vrf no_std compatible

fix nopos-elections

fix rpc

fix serializer

fix test-primitives

fix version

add comment

add serde full only import for format string

remove all(serde_full and full_crypot) as serde_full enforces full_crypto

make comment better readable

even better comment

clean up rpc toml

clean up toml

clean up serializer toml

clean up storage toml

fix std build

update .lock

fix sp-version

move sp_std import

test extern crate alloc

replace sp_std with core

add missing core

sp_core: serde feature do not enforce full crypto

application-crypto: serde feature do not enforce full crypto

rename serde_full to serde

add dep:serde and alloc to default feature

add full_crypto and remove unnecessary debu/fmt impls for serde

update comment

remove obolsete change in display AccountId32

remove extra changes

minimize diff

revert keystore changes

remove std from keystore

remove full-crypto feature

fix serde import

fix comment

fix feature = serde

* rename serde_full to serde

* move #[doc(hidden)] back

* remove feature = full crypto require frm MultiSigner

* reorder serde and scale_info import

* fix bs58 missing alloc import in serde feature

* add `from_string` to serde feature and add unimplemented

* remove serde feature from fixed_point display

* Remove serde/alloc

Co-authored-by: Davide Galassi <davxy@datawok.net>

* Update primitives/consensus/babe/Cargo.toml

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update primitives/arithmetic/src/fixed_point.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* revert `from_string`fixed impl back to std only

* remove duplicate runtime string impl

* use sp_std::alloc

* remove no_std compatible rpc

* remove no_std compatibility from serializer

* rename mpl_maybe_marker_serde to std_or_serde

* update .lock

* add sp-std to executor

* fix sp-std import

* fix sp_std::format import

* use crate import

* add serde feature

* Update primitives/core/src/lib.rs

---------

Co-authored-by: Davide Galassi <davxy@datawok.net>
Co-authored-by: Bastian Köcher <git@kchr.de>
This commit is contained in:
Bigna Härdi
2023-05-17 13:31:12 +02:00
committed by GitHub
parent e17680fde7
commit 0e49ed72aa
47 changed files with 406 additions and 206 deletions
+1
View File
@@ -11311,6 +11311,7 @@ dependencies = [
"sp-application-crypto",
"sp-core",
"sp-runtime",
"sp-std",
]
[[package]]
@@ -18,7 +18,7 @@ targets = ["x86_64-unknown-linux-gnu"]
sp-core = { version = "7.0.0", default-features = false, path = "../core" }
codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false, features = ["derive"] }
scale-info = { version = "2.5.0", default-features = false, features = ["derive"] }
serde = { version = "1.0.136", optional = true, features = ["derive"] }
serde = { version = "1.0.136", default-features = false, optional = true, features = ["derive", "alloc"] }
sp-std = { version = "5.0.0", default-features = false, path = "../std" }
sp-io = { version = "7.0.0", default-features = false, path = "../io" }
@@ -29,11 +29,18 @@ std = [
"sp-core/std",
"codec/std",
"scale-info/std",
"serde",
"serde/std",
"sp-std/std",
"sp-io/std",
]
# Serde support without relying on std features.
serde = [
"dep:serde",
"sp-core/serde",
"scale-info/serde",
]
# This feature enables all crypto primitives for `no_std` builds like microcontrollers
# or Intel SGX.
# For the regular wasm runtime builds this should not be used.
@@ -23,20 +23,25 @@
pub use sp_core::crypto::{key_types, CryptoTypeId, KeyTypeId};
#[doc(hidden)]
#[cfg(feature = "full_crypto")]
pub use sp_core::crypto::{DeriveError, DeriveJunction, Pair, SecretStringError, Ss58Codec};
pub use sp_core::crypto::{DeriveError, Pair, SecretStringError};
#[cfg(any(feature = "full_crypto", feature = "serde"))]
pub use sp_core::crypto::{DeriveJunction, Ss58Codec};
#[doc(hidden)]
pub use sp_core::{
self,
crypto::{ByteArray, CryptoType, Derive, IsWrappedBy, Public, UncheckedFrom, Wraps},
RuntimeDebug,
};
#[doc(hidden)]
#[cfg(all(not(feature = "std"), feature = "serde"))]
pub use sp_std::alloc::{format, string::String};
#[doc(hidden)]
pub use codec;
#[doc(hidden)]
pub use scale_info;
#[doc(hidden)]
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
pub use serde;
#[doc(hidden)]
pub use sp_std::{ops::Deref, vec::Vec};
@@ -282,7 +287,7 @@ macro_rules! app_crypto_public_not_full_crypto {
#[macro_export]
macro_rules! app_crypto_public_common {
($public:ty, $sig:ty, $key_type:expr, $crypto_type:expr) => {
$crate::app_crypto_public_common_if_std!();
$crate::app_crypto_public_common_if_serde!();
impl AsRef<[u8]> for Public {
fn as_ref(&self) -> &[u8] {
@@ -323,11 +328,11 @@ macro_rules! app_crypto_public_common {
};
}
/// Implements traits for the public key type if `feature = "std"` is enabled.
#[cfg(feature = "std")]
/// Implements traits for the public key type if `feature = "serde"` is enabled.
#[cfg(feature = "serde")]
#[doc(hidden)]
#[macro_export]
macro_rules! app_crypto_public_common_if_std {
macro_rules! app_crypto_public_common_if_serde {
() => {
impl $crate::Derive for Public {
fn derive<Iter: Iterator<Item = $crate::DeriveJunction>>(
@@ -338,15 +343,15 @@ macro_rules! app_crypto_public_common_if_std {
}
}
impl std::fmt::Display for Public {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
impl core::fmt::Display for Public {
fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
use $crate::Ss58Codec;
write!(f, "{}", self.0.to_ss58check())
}
}
impl $crate::serde::Serialize for Public {
fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
fn serialize<S>(&self, serializer: S) -> core::result::Result<S::Ok, S::Error>
where
S: $crate::serde::Serializer,
{
@@ -356,11 +361,14 @@ macro_rules! app_crypto_public_common_if_std {
}
impl<'de> $crate::serde::Deserialize<'de> for Public {
fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
fn deserialize<D>(deserializer: D) -> core::result::Result<Self, D::Error>
where
D: $crate::serde::Deserializer<'de>,
{
use $crate::Ss58Codec;
#[cfg(all(not(feature = "std"), feature = "serde"))]
use $crate::{format, String};
Public::from_ss58check(&String::deserialize(deserializer)?)
.map_err(|e| $crate::serde::de::Error::custom(format!("{:?}", e)))
}
@@ -368,10 +376,10 @@ macro_rules! app_crypto_public_common_if_std {
};
}
#[cfg(not(feature = "std"))]
#[cfg(not(feature = "serde"))]
#[doc(hidden)]
#[macro_export]
macro_rules! app_crypto_public_common_if_std {
macro_rules! app_crypto_public_common_if_serde {
() => {
impl $crate::Derive for Public {}
};
+7 -2
View File
@@ -21,7 +21,7 @@ codec = { package = "parity-scale-codec", version = "3.2.2", default-features =
integer-sqrt = "0.1.2"
num-traits = { version = "0.2.8", default-features = false }
scale-info = { version = "2.5.0", default-features = false, features = ["derive"] }
serde = { version = "1.0.136", features = ["derive"], optional = true }
serde = { version = "1.0.136", default-features = false, features = ["derive", "alloc"], optional = true }
static_assertions = "1.1.0"
sp-std = { version = "5.0.0", default-features = false, path = "../std" }
@@ -37,9 +37,14 @@ std = [
"codec/std",
"num-traits/std",
"scale-info/std",
"serde",
"serde/std",
"sp-std/std",
]
# Serde support without relying on std features.
serde = [
"dep:serde",
"scale-info/serde",
]
[[bench]]
name = "bench"
@@ -32,9 +32,12 @@ use sp_std::{
prelude::*,
};
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
use serde::{de, Deserialize, Deserializer, Serialize, Serializer};
#[cfg(all(not(feature = "std"), feature = "serde"))]
use sp_std::alloc::string::{String, ToString};
/// Integer types that can be used to interact with `FixedPointNumber` implementations.
pub trait FixedPointOperand:
Copy
@@ -928,14 +931,12 @@ macro_rules! implement_fixed {
}
}
#[cfg(feature = "std")]
impl sp_std::fmt::Display for $name {
fn fmt(&self, f: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result {
write!(f, "{}", self.0)
}
}
#[cfg(feature = "std")]
impl sp_std::str::FromStr for $name {
type Err = &'static str;
@@ -948,7 +949,7 @@ macro_rules! implement_fixed {
// Manual impl `Serialize` as serde_json does not support i128.
// TODO: remove impl if issue https://github.com/serde-rs/json/issues/548 fixed.
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl Serialize for $name {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
@@ -960,7 +961,7 @@ macro_rules! implement_fixed {
// Manual impl `Deserialize` as serde_json does not support i128.
// TODO: remove impl if issue https://github.com/serde-rs/json/issues/548 fixed.
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl<'de> Deserialize<'de> for $name {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
+2 -2
View File
@@ -53,12 +53,12 @@ use traits::{BaseArithmetic, One, SaturatedConversion, Unsigned, Zero};
use codec::{Decode, Encode, MaxEncodedLen};
use scale_info::TypeInfo;
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
/// Arithmetic errors.
#[derive(Eq, PartialEq, Clone, Copy, Encode, Decode, Debug, TypeInfo, MaxEncodedLen)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub enum ArithmeticError {
/// Underflow.
Underflow,
@@ -15,7 +15,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use crate::traits::{
@@ -556,7 +556,7 @@ macro_rules! implement_per_thing {
/// A fixed point representation of a number in the range [0, 1].
///
#[doc = $title]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[derive(Encode, Copy, Clone, PartialEq, Eq, codec::MaxEncodedLen, PartialOrd, Ord, scale_info::TypeInfo)]
pub struct $name($type);
+12 -2
View File
@@ -16,7 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"]
async-trait = { version = "0.1.57", optional = true }
codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false }
scale-info = { version = "2.5.0", default-features = false, features = ["derive"] }
serde = { version = "1.0.136", features = ["derive"], optional = true }
serde = { version = "1.0.136", default-features = false, features = ["derive", "alloc"], optional = true }
sp-api = { version = "4.0.0-dev", default-features = false, path = "../../api" }
sp-application-crypto = { version = "7.0.0", default-features = false, path = "../../application-crypto" }
sp-consensus = { version = "0.10.0-dev", optional = true, path = "../common" }
@@ -34,7 +34,7 @@ std = [
"async-trait",
"codec/std",
"scale-info/std",
"serde",
"serde/std",
"sp-api/std",
"sp-application-crypto/std",
"sp-consensus",
@@ -46,3 +46,13 @@ std = [
"sp-std/std",
"sp-timestamp",
]
# Serde support without relying on std features.
serde = [
"dep:serde",
"scale-info/serde",
"sp-application-crypto/serde",
"sp-consensus-slots/serde",
"sp-core/serde",
"sp-runtime/serde",
]
@@ -25,7 +25,7 @@ pub mod inherents;
use codec::{Decode, Encode, MaxEncodedLen};
use scale_info::TypeInfo;
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use sp_runtime::{traits::Header, ConsensusEngineId, RuntimeDebug};
use sp_std::vec::Vec;
@@ -217,7 +217,7 @@ impl BabeConfiguration {
/// Types of allowed slots.
#[derive(Clone, Copy, PartialEq, Eq, Encode, Decode, RuntimeDebug, MaxEncodedLen, TypeInfo)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub enum AllowedSlots {
/// Only allow primary slots.
PrimarySlots,
@@ -241,7 +241,7 @@ impl AllowedSlots {
/// Configuration data used by the BABE consensus engine that may change with epochs.
#[derive(Clone, PartialEq, Eq, Encode, Decode, RuntimeDebug, MaxEncodedLen, TypeInfo)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct BabeEpochConfiguration {
/// A constant value that is used in the threshold calculation formula.
/// Expressed as a rational where the first member of the tuple is the
@@ -13,8 +13,8 @@ targets = ["x86_64-unknown-linux-gnu"]
[dependencies]
codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false, features = ["derive"] }
serde = { version = "1.0.136", optional = true, features = ["derive"] }
scale-info = { version = "2.5.0", default-features = false, features = ["derive"] }
serde = { version = "1.0.136", default-features = false, optional = true, features = ["derive", "alloc"] }
sp-api = { version = "4.0.0-dev", default-features = false, path = "../../api" }
sp-application-crypto = { version = "7.0.0", default-features = false, path = "../../application-crypto" }
sp-core = { version = "7.0.0", default-features = false, path = "../../core" }
@@ -34,7 +34,7 @@ default = ["std"]
std = [
"codec/std",
"scale-info/std",
"serde",
"serde/std",
"sp-api/std",
"sp-application-crypto/std",
"sp-core/std",
@@ -43,3 +43,12 @@ std = [
"sp-runtime/std",
"sp-std/std",
]
# Serde support without relying on std features.
serde = [
"dep:serde",
"scale-info/serde",
"sp-application-crypto/serde",
"sp-core/serde",
"sp-runtime/serde",
]
@@ -101,7 +101,7 @@ impl MmrLeafVersion {
/// Details of a BEEFY authority set.
#[derive(Debug, Default, PartialEq, Eq, Clone, Encode, Decode, TypeInfo, MaxEncodedLen)]
#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct BeefyAuthoritySet<MerkleRoot> {
/// Id of the set.
///
@@ -18,7 +18,7 @@ codec = { package = "parity-scale-codec", version = "3.2.2", default-features =
grandpa = { package = "finality-grandpa", version = "0.16.2", default-features = false, features = ["derive-codec"] }
log = { version = "0.4.17", default-features = false }
scale-info = { version = "2.5.0", default-features = false, features = ["derive"] }
serde = { version = "1.0.136", features = ["derive"], optional = true }
serde = { version = "1.0.136", features = ["derive", "alloc"], default-features = false, optional = true }
sp-api = { version = "4.0.0-dev", default-features = false, path = "../../api" }
sp-application-crypto = { version = "7.0.0", default-features = false, path = "../../application-crypto" }
sp-core = { version = "7.0.0", default-features = false, path = "../../core" }
@@ -33,7 +33,7 @@ std = [
"grandpa/std",
"log/std",
"scale-info/std",
"serde",
"serde/std",
"sp-api/std",
"sp-application-crypto/std",
"sp-core/std",
@@ -41,3 +41,12 @@ std = [
"sp-runtime/std",
"sp-std/std",
]
# Serde support without relying on std features.
serde = [
"dep:serde",
"scale-info/serde",
"sp-application-crypto/serde",
"sp-core/serde",
"sp-runtime/serde",
]
@@ -22,7 +22,7 @@
#[cfg(not(feature = "std"))]
extern crate alloc;
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
use serde::Serialize;
use codec::{Codec, Decode, Encode, Input};
@@ -140,8 +140,8 @@ pub struct GrandpaJustification<Header: HeaderT> {
}
/// A scheduled change of authority set.
#[cfg_attr(feature = "std", derive(Serialize))]
#[derive(Clone, Eq, PartialEq, Encode, Decode, RuntimeDebug, TypeInfo)]
#[cfg_attr(feature = "serde", derive(Serialize))]
pub struct ScheduledChange<N> {
/// The new authorities after the change, along with their respective weights.
pub next_authorities: AuthorityList,
@@ -150,8 +150,8 @@ pub struct ScheduledChange<N> {
}
/// An consensus log item for GRANDPA.
#[cfg_attr(feature = "std", derive(Serialize))]
#[derive(Decode, Encode, PartialEq, Eq, Clone, RuntimeDebug)]
#[cfg_attr(feature = "serde", derive(Serialize))]
pub enum ConsensusLog<N: Codec> {
/// Schedule an authority set change.
///
@@ -15,7 +15,7 @@ targets = ["x86_64-unknown-linux-gnu"]
[dependencies]
codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false, features = ["derive", "max-encoded-len"] }
scale-info = { version = "2.0.0", default-features = false, features = ["derive"] }
serde = { version = "1.0", features = ["derive"], optional = true }
serde = { version = "1.0", default-features = false, features = ["derive", "alloc"], optional = true }
sp-std = { version = "5.0.0", default-features = false, path = "../../std" }
sp-timestamp = { version = "4.0.0-dev", default-features = false, path = "../../timestamp" }
@@ -24,7 +24,13 @@ default = ["std"]
std = [
"codec/std",
"scale-info/std",
"serde",
"serde/std",
"sp-std/std",
"sp-timestamp/std",
]
# Serde support without relying on std features.
serde = [
"dep:serde",
"scale-info/serde",
]
@@ -25,7 +25,7 @@ use sp_timestamp::Timestamp;
/// Unit type wrapper that represents a slot.
#[derive(Debug, Encode, MaxEncodedLen, Decode, Eq, Clone, Copy, Default, Ord, TypeInfo)]
#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Slot(u64);
impl core::ops::Deref for Slot {
+19 -5
View File
@@ -16,10 +16,10 @@ targets = ["x86_64-unknown-linux-gnu"]
codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false, features = ["derive","max-encoded-len"] }
scale-info = { version = "2.5.0", default-features = false, features = ["derive"] }
log = { version = "0.4.17", default-features = false }
serde = { version = "1.0.136", optional = true, features = ["derive"] }
serde = { version = "1.0.136", optional = true, default-features = false, features = ["derive", "alloc"] }
bounded-collections = { version = "0.1.4", default-features = false }
primitive-types = { version = "0.12.0", default-features = false, features = ["codec", "scale-info"] }
impl-serde = { version = "0.4.0", optional = true }
impl-serde = { version = "0.4.0", default-features = false, optional = true }
hash-db = { version = "0.16.0", default-features = false }
hash256-std-hasher = { version = "0.15.2", default-features = false }
bs58 = { version = "0.4.0", default-features = false, optional = true }
@@ -31,6 +31,7 @@ zeroize = { version = "1.4.3", default-features = false }
secrecy = { version = "0.8.0", default-features = false }
lazy_static = { version = "1.4.0", default-features = false, optional = true }
parking_lot = { version = "0.12.1", optional = true }
ss58-registry = { version = "1.34.0", default-features = false }
sp-std = { version = "5.0.0", default-features = false, path = "../std" }
sp-debug-derive = { version = "5.0.0", default-features = false, path = "../debug-derive" }
sp-storage = { version = "7.0.0", default-features = false, path = "../storage" }
@@ -49,7 +50,6 @@ libsecp256k1 = { version = "0.7", default-features = false, features = ["static-
schnorrkel = { version = "0.9.1", features = ["preaudit_deprecated", "u64_backend"], default-features = false }
merlin = { version = "2.0", default-features = false }
secp256k1 = { version = "0.24.0", default-features = false, features = ["recovery", "alloc"], optional = true }
ss58-registry = { version = "1.34.0", default-features = false }
sp-core-hashing = { version = "5.0.0", path = "./hashing", default-features = false, optional = true }
sp-runtime-interface = { version = "7.0.0", default-features = false, path = "../runtime-interface" }
# bls crypto
@@ -83,13 +83,13 @@ std = [
"primitive-types/serde",
"primitive-types/byteorder",
"primitive-types/rustc-hex",
"impl-serde",
"impl-serde/std",
"codec/std",
"scale-info/std",
"hash256-std-hasher/std",
"hash-db/std",
"sp-std/std",
"serde",
"serde/std",
"blake2/std",
"array-bytes",
"ed25519-zebra/std",
@@ -115,6 +115,20 @@ std = [
"dyn-clonable",
]
# Serde support without relying on std features.
serde = [
"dep:serde",
"array-bytes",
"blake2",
"bs58/alloc",
"scale-info/serde",
"secrecy/alloc",
"impl-serde",
"primitive-types/serde_no_std",
"sp-storage/serde",
"sp-core-hashing",
]
# This feature enables all crypto primitives for `no_std` builds like microcontrollers
# or Intel SGX.
# For the regular wasm runtime builds this should not be used.
+34 -28
View File
@@ -33,13 +33,16 @@ pub use secrecy::{ExposeSecret, SecretString};
use sp_runtime_interface::pass_by::PassByInner;
#[doc(hidden)]
pub use sp_std::ops::Deref;
#[cfg(all(not(feature = "std"), feature = "serde"))]
use sp_std::{
alloc::{format, string::String},
vec,
};
use sp_std::{hash::Hash, str, vec::Vec};
pub use ss58_registry::{from_known_address_format, Ss58AddressFormat, Ss58AddressFormatRegistry};
/// Trait to zeroize a memory buffer.
pub use zeroize::Zeroize;
#[cfg(feature = "full_crypto")]
pub use ss58_registry::{from_known_address_format, Ss58AddressFormat, Ss58AddressFormatRegistry};
/// The root phrase for our publicly known keys.
pub const DEV_PHRASE: &str =
"bottom drive obey lake curtain smoke basket hold race lonely fit walk";
@@ -49,7 +52,6 @@ pub const DEV_ADDRESS: &str = "5DfhGyQdFobKM8NsWvEeAKk5EQQgYe9AydgJ7rMB6E1EqRzV"
/// The length of the junction identifier. Note that this is also referred to as the
/// `CHAIN_CODE_LENGTH` in the context of Schnorrkel.
#[cfg(feature = "full_crypto")]
pub const JUNCTION_ID_LEN: usize = 32;
/// Similar to `From`, except that the onus is on the part of the caller to ensure
@@ -113,7 +115,7 @@ pub enum DeriveError {
/// a new secret key from an existing secret key and, in the case of `SoftRaw` and `SoftIndex`
/// a new public key from an existing public key.
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug, Encode, Decode)]
#[cfg(feature = "full_crypto")]
#[cfg(any(feature = "full_crypto", feature = "serde"))]
pub enum DeriveJunction {
/// Soft (vanilla) derivation. Public keys have a correspondent derivation.
Soft([u8; JUNCTION_ID_LEN]),
@@ -121,7 +123,7 @@ pub enum DeriveJunction {
Hard([u8; JUNCTION_ID_LEN]),
}
#[cfg(feature = "full_crypto")]
#[cfg(any(feature = "full_crypto", feature = "serde"))]
impl DeriveJunction {
/// Consume self to return a soft derive junction with the same chain code.
pub fn soften(self) -> Self {
@@ -180,7 +182,7 @@ impl DeriveJunction {
}
}
#[cfg(feature = "full_crypto")]
#[cfg(any(feature = "full_crypto", feature = "serde"))]
impl<T: AsRef<str>> From<T> for DeriveJunction {
fn from(j: T) -> DeriveJunction {
let j = j.as_ref();
@@ -208,7 +210,7 @@ impl<T: AsRef<str>> From<T> for DeriveJunction {
#[cfg_attr(not(feature = "std"), derive(Debug))]
#[derive(Clone, Copy, Eq, PartialEq)]
#[allow(missing_docs)]
#[cfg(feature = "full_crypto")]
#[cfg(any(feature = "full_crypto", feature = "serde"))]
pub enum PublicError {
#[cfg_attr(feature = "std", error("Base 58 requirement is violated"))]
BadBase58,
@@ -247,7 +249,6 @@ impl sp_std::fmt::Debug for PublicError {
///
/// See <https://docs.substrate.io/v3/advanced/ss58/>
/// for information on the codec.
#[cfg(feature = "full_crypto")]
pub trait Ss58Codec: Sized + AsMut<[u8]> + AsRef<[u8]> + ByteArray {
/// A format filterer, can be used to ensure that `from_ss58check` family only decode for
/// allowed identifiers. By default just refuses the two reserved identifiers.
@@ -256,7 +257,7 @@ pub trait Ss58Codec: Sized + AsMut<[u8]> + AsRef<[u8]> + ByteArray {
}
/// Some if the string is a properly encoded SS58Check address.
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
fn from_ss58check(s: &str) -> Result<Self, PublicError> {
Self::from_ss58check_with_version(s).and_then(|(r, v)| match v {
v if !v.is_custom() => Ok(r),
@@ -266,7 +267,7 @@ pub trait Ss58Codec: Sized + AsMut<[u8]> + AsRef<[u8]> + ByteArray {
}
/// Some if the string is a properly encoded SS58Check address.
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
fn from_ss58check_with_version(s: &str) -> Result<(Self, Ss58AddressFormat), PublicError> {
const CHECKSUM_LEN: usize = 2;
let body_len = Self::LEN;
@@ -321,7 +322,7 @@ pub trait Ss58Codec: Sized + AsMut<[u8]> + AsRef<[u8]> + ByteArray {
}
/// Return the ss58-check string for this key.
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
fn to_ss58check_with_version(&self, version: Ss58AddressFormat) -> String {
// We mask out the upper two bits of the ident - SS58 Prefix currently only supports 14-bits
let ident: u16 = u16::from(version) & 0b0011_1111_1111_1111;
@@ -344,7 +345,7 @@ pub trait Ss58Codec: Sized + AsMut<[u8]> + AsRef<[u8]> + ByteArray {
}
/// Return the ss58-check string for this key.
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
fn to_ss58check(&self) -> String {
self.to_ss58check_with_version(default_ss58_version())
}
@@ -362,16 +363,16 @@ pub trait Derive: Sized {
/// Derive a child key from a series of given junctions.
///
/// Will be `None` for public keys if there are any hard junctions in there.
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
fn derive<Iter: Iterator<Item = DeriveJunction>>(&self, _path: Iter) -> Option<Self> {
None
}
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
const PREFIX: &[u8] = b"SS58PRE";
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
fn ss58hash(data: &[u8]) -> Vec<u8> {
use blake2::{Blake2b512, Digest};
@@ -382,19 +383,19 @@ fn ss58hash(data: &[u8]) -> Vec<u8> {
}
/// Default prefix number
#[cfg(feature = "std")]
static DEFAULT_VERSION: core::sync::atomic::AtomicU16 = std::sync::atomic::AtomicU16::new(
#[cfg(feature = "serde")]
static DEFAULT_VERSION: core::sync::atomic::AtomicU16 = core::sync::atomic::AtomicU16::new(
from_known_address_format(Ss58AddressFormatRegistry::SubstrateAccount),
);
/// Returns default SS58 format used by the current active process.
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
pub fn default_ss58_version() -> Ss58AddressFormat {
DEFAULT_VERSION.load(std::sync::atomic::Ordering::Relaxed).into()
DEFAULT_VERSION.load(core::sync::atomic::Ordering::Relaxed).into()
}
/// Returns either the input address format or the default.
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
pub fn unwrap_or_default_ss58_version(network: Option<Ss58AddressFormat>) -> Ss58AddressFormat {
network.unwrap_or_else(default_ss58_version)
}
@@ -408,9 +409,9 @@ pub fn unwrap_or_default_ss58_version(network: Option<Ss58AddressFormat>) -> Ss5
/// This will enable the node to decode ss58 addresses with this prefix.
///
/// This SS58 version/format is also only used by the node and not by the runtime.
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
pub fn set_default_ss58_version(new_default: Ss58AddressFormat) {
DEFAULT_VERSION.store(new_default.into(), std::sync::atomic::Ordering::Relaxed);
DEFAULT_VERSION.store(new_default.into(), core::sync::atomic::Ordering::Relaxed);
}
#[cfg(feature = "std")]
@@ -458,6 +459,11 @@ impl<T: Sized + AsMut<[u8]> + AsRef<[u8]> + Public + Derive> Ss58Codec for T {
}
}
// Use the default implementations of the trait in serde feature.
// The std implementation is not available because of std only crate Regex.
#[cfg(all(not(feature = "std"), feature = "serde"))]
impl<T: Sized + AsMut<[u8]> + AsRef<[u8]> + Public + Derive> Ss58Codec for T {}
/// Trait used for types that are really just a fixed-length array.
pub trait ByteArray: AsRef<[u8]> + AsMut<[u8]> + for<'a> TryFrom<&'a [u8], Error = ()> {
/// The "length" of the values of this type, which is always the same.
@@ -507,7 +513,7 @@ impl ByteArray for AccountId32 {
const LEN: usize = 32;
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl Ss58Codec for AccountId32 {}
impl AsRef<[u8]> for AccountId32 {
@@ -591,7 +597,7 @@ impl sp_std::fmt::Debug for AccountId32 {
}
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl serde::Serialize for AccountId32 {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
@@ -601,7 +607,7 @@ impl serde::Serialize for AccountId32 {
}
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl<'de> serde::Deserialize<'de> for AccountId32 {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
@@ -1063,7 +1069,7 @@ pub trait CryptoType {
crate::RuntimeDebug,
TypeInfo,
)]
#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct KeyTypeId(pub [u8; 4]);
impl From<u32> for KeyTypeId {
@@ -1121,7 +1127,7 @@ pub trait VrfPublic: VrfCrypto {
/// An identifier for a specific cryptographic algorithm used by a key pair
#[derive(Debug, Copy, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Encode, Decode)]
#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CryptoTypeId(pub [u8; 4]);
/// Known key types; this also functions as a global registry of key types for projects wishing to
+8 -6
View File
@@ -21,7 +21,7 @@ use codec::{Decode, Encode, MaxEncodedLen};
use scale_info::TypeInfo;
use sp_runtime_interface::pass_by::PassByInner;
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
use crate::crypto::Ss58Codec;
use crate::crypto::{
ByteArray, CryptoType, CryptoTypeId, Derive, Public as TraitPublic, UncheckedFrom,
@@ -40,8 +40,10 @@ use secp256k1::{
ecdsa::{RecoverableSignature, RecoveryId},
Message, PublicKey, SecretKey,
};
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
use serde::{de, Deserialize, Deserializer, Serialize, Serializer};
#[cfg(all(not(feature = "std"), feature = "serde"))]
use sp_std::alloc::{format, string::String};
#[cfg(feature = "full_crypto")]
use sp_std::vec::Vec;
@@ -164,7 +166,7 @@ impl sp_std::fmt::Debug for Public {
}
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl Serialize for Public {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
@@ -174,7 +176,7 @@ impl Serialize for Public {
}
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl<'de> Deserialize<'de> for Public {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
@@ -204,7 +206,7 @@ impl TryFrom<&[u8]> for Signature {
}
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl Serialize for Signature {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
@@ -214,7 +216,7 @@ impl Serialize for Signature {
}
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl<'de> Deserialize<'de> for Signature {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
+8 -6
View File
@@ -29,7 +29,7 @@ use crate::{
use codec::{Decode, Encode, MaxEncodedLen};
use scale_info::TypeInfo;
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
use crate::crypto::Ss58Codec;
use crate::crypto::{CryptoType, CryptoTypeId, Derive, Public as TraitPublic, UncheckedFrom};
#[cfg(feature = "full_crypto")]
@@ -38,9 +38,11 @@ use crate::crypto::{DeriveError, DeriveJunction, Pair as TraitPair, SecretString
use core::convert::TryFrom;
#[cfg(feature = "full_crypto")]
use ed25519_zebra::{SigningKey, VerificationKey};
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
use serde::{de, Deserialize, Deserializer, Serialize, Serializer};
use sp_runtime_interface::pass_by::PassByInner;
#[cfg(all(not(feature = "std"), feature = "serde"))]
use sp_std::alloc::{format, string::String};
use sp_std::ops::Deref;
/// An identifier used to match public keys against ed25519 keys
@@ -176,7 +178,7 @@ impl sp_std::fmt::Debug for Public {
}
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl Serialize for Public {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
@@ -186,7 +188,7 @@ impl Serialize for Public {
}
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl<'de> Deserialize<'de> for Public {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
@@ -216,7 +218,7 @@ impl TryFrom<&[u8]> for Signature {
}
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl Serialize for Signature {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
@@ -226,7 +228,7 @@ impl Serialize for Signature {
}
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl<'de> Deserialize<'de> for Signature {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
+46 -7
View File
@@ -34,16 +34,16 @@ macro_rules! map {
#[doc(hidden)]
pub use codec::{Decode, Encode, MaxEncodedLen};
use scale_info::TypeInfo;
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
pub use serde;
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use sp_runtime_interface::pass_by::{PassByEnum, PassByInner};
use sp_std::{ops::Deref, prelude::*};
pub use sp_debug_derive::RuntimeDebug;
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
pub use impl_serde::serialize as bytes;
#[cfg(feature = "full_crypto")]
@@ -139,8 +139,8 @@ impl ExecutionContext {
/// Hex-serialized shim for `Vec<u8>`.
#[derive(PartialEq, Eq, Clone, RuntimeDebug)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Hash, PartialOrd, Ord))]
pub struct Bytes(#[cfg_attr(feature = "std", serde(with = "bytes"))] pub Vec<u8>);
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize, Hash, PartialOrd, Ord))]
pub struct Bytes(#[cfg_attr(feature = "serde", serde(with = "bytes"))] pub Vec<u8>);
impl From<Vec<u8>> for Bytes {
fn from(s: Vec<u8>) -> Self {
@@ -209,7 +209,7 @@ impl sp_std::ops::Deref for OpaqueMetadata {
PassByInner,
TypeInfo,
)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct OpaquePeerId(pub Vec<u8>);
impl OpaquePeerId {
@@ -394,6 +394,45 @@ macro_rules! impl_maybe_marker {
}
}
/// Macro for creating `Maybe*` marker traits.
///
/// Such a maybe-marker trait requires the given bound when either `feature = std` or `feature =
/// serde` is activated.
///
/// # Example
///
/// ```
/// sp_core::impl_maybe_marker_std_or_serde! {
/// /// A marker for a type that implements `Debug` when `feature = serde` or `feature = std`.
/// trait MaybeDebug: std::fmt::Debug;
/// /// A marker for a type that implements `Debug + Display` when `feature = serde` or `feature = std`.
/// trait MaybeDebugDisplay: std::fmt::Debug, std::fmt::Display;
/// }
/// ```
#[macro_export]
macro_rules! impl_maybe_marker_std_or_serde {
(
$(
$(#[$doc:meta] )+
trait $trait_name:ident: $( $trait_bound:path ),+;
)+
) => {
$(
$(#[$doc])+
#[cfg(any(feature = "serde", feature = "std"))]
pub trait $trait_name: $( $trait_bound + )+ {}
#[cfg(any(feature = "serde", feature = "std"))]
impl<T: $( $trait_bound + )+> $trait_name for T {}
$(#[$doc])+
#[cfg(not(any(feature = "serde", feature = "std")))]
pub trait $trait_name {}
#[cfg(not(any(feature = "serde", feature = "std")))]
impl<T> $trait_name for T {}
)+
}
}
/// The maximum number of bytes that can be allocated at one time.
// The maximum possible allocation size was chosen rather arbitrary, 32 MiB should be enough for
// everybody.
@@ -445,7 +484,7 @@ macro_rules! generate_feature_enabled_macro {
}
// Work around for: <https://github.com/rust-lang/rust/pull/52234>
#[doc(hidden)]
#[doc(hidden)]
pub use [<_ $macro_name>] as $macro_name;
}
};
@@ -58,7 +58,7 @@ pub trait OffchainStorage: Clone + Send + Sync {
/// A type of supported crypto.
#[derive(Clone, Copy, PartialEq, Eq, Encode, Decode, RuntimeDebug, PassByEnum)]
#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(C)]
pub enum StorageKind {
/// Persistent storage is non-revertible and not fork-aware. It means that any value
@@ -208,14 +208,14 @@ impl OpaqueMultiaddr {
#[derive(
Clone, Copy, PartialEq, Eq, Ord, PartialOrd, Default, RuntimeDebug, PassByInner, Encode, Decode,
)]
#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Timestamp(u64);
/// Duration type
#[derive(
Clone, Copy, PartialEq, Eq, Ord, PartialOrd, Default, RuntimeDebug, PassByInner, Encode, Decode,
)]
#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Duration(u64);
impl Duration {
+18 -11
View File
@@ -19,15 +19,20 @@
//!
//! Note: `CHAIN_CODE_LENGTH` must be equal to `crate::crypto::JUNCTION_ID_LEN`
//! for this to work.
#[cfg(feature = "std")]
#[cfg(any(feature = "full_crypto", feature = "serde"))]
use crate::crypto::DeriveJunction;
#[cfg(feature = "serde")]
use crate::crypto::Ss58Codec;
#[cfg(feature = "full_crypto")]
use crate::crypto::{DeriveError, DeriveJunction, Pair as TraitPair, SecretStringError};
use crate::crypto::{DeriveError, Pair as TraitPair, SecretStringError};
#[cfg(feature = "full_crypto")]
use schnorrkel::{
derive::{ChainCode, Derivation, CHAIN_CODE_LENGTH},
signing_context, ExpansionMode, Keypair, MiniSecretKey, PublicKey, SecretKey,
derive::CHAIN_CODE_LENGTH, signing_context, ExpansionMode, Keypair, MiniSecretKey, SecretKey,
};
#[cfg(any(feature = "full_crypto", feature = "serde"))]
use schnorrkel::{
derive::{ChainCode, Derivation},
PublicKey,
};
use sp_std::vec::Vec;
@@ -41,9 +46,11 @@ use sp_std::ops::Deref;
#[cfg(feature = "full_crypto")]
use schnorrkel::keys::{MINI_SECRET_KEY_LENGTH, SECRET_KEY_LENGTH};
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
use serde::{de, Deserialize, Deserializer, Serialize, Serializer};
use sp_runtime_interface::pass_by::PassByInner;
#[cfg(all(not(feature = "std"), feature = "serde"))]
use sp_std::alloc::{format, string::String};
// signing context
#[cfg(feature = "full_crypto")]
@@ -176,7 +183,7 @@ impl sp_std::fmt::Debug for Public {
}
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl Serialize for Public {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
@@ -186,7 +193,7 @@ impl Serialize for Public {
}
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl<'de> Deserialize<'de> for Public {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
@@ -216,7 +223,7 @@ impl TryFrom<&[u8]> for Signature {
}
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl Serialize for Signature {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
@@ -226,7 +233,7 @@ impl Serialize for Signature {
}
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl<'de> Deserialize<'de> for Signature {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
@@ -339,7 +346,7 @@ impl Derive for Public {
/// Derive a child key from a series of given junctions.
///
/// `None` if there are any hard junctions in there.
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
fn derive<Iter: Iterator<Item = DeriveJunction>>(&self, path: Iter) -> Option<Public> {
let mut acc = PublicKey::from_bytes(self.as_ref()).ok()?;
for j in path {
@@ -16,7 +16,7 @@ codec = { package = "parity-scale-codec", version = "3.2.2", default-features =
scale-info = { version = "2.5.0", default-features = false, features = ["derive"] }
log = { version = "0.4.17", default-features = false }
mmr-lib = { package = "ckb-merkle-mountain-range", version = "0.5.2", default-features = false }
serde = { version = "1.0.136", features = ["derive"], optional = true }
serde = { version = "1.0.136", features = ["derive", "alloc"], default-features = false, optional = true }
sp-api = { version = "4.0.0-dev", default-features = false, path = "../api" }
sp-core = { version = "7.0.0", default-features = false, path = "../core" }
sp-debug-derive = { version = "5.0.0", default-features = false, path = "../debug-derive" }
@@ -33,10 +33,18 @@ std = [
"codec/std",
"log/std",
"mmr-lib/std",
"serde",
"serde/std",
"sp-api/std",
"sp-core/std",
"sp-debug-derive/std",
"sp-runtime/std",
"sp-std/std",
]
# Serde support without relying on std features.
serde = [
"dep:serde",
"scale-info/serde",
"sp-core/serde",
"sp-runtime/serde",
]
@@ -101,13 +101,13 @@ impl<T: codec::Encode + codec::Decode + Clone + PartialEq + fmt::Debug> FullLeaf
/// This type does not implement SCALE encoding/decoding on purpose to avoid confusion,
/// it would have to be SCALE-compatible with the concrete leaf type, but due to SCALE limitations
/// it's not possible to know how many bytes the encoding of concrete leaf type uses.
#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(RuntimeDebug, Clone, PartialEq)]
pub struct OpaqueLeaf(
/// Raw bytes of the leaf type encoded in its compact form.
///
/// NOTE it DOES NOT include length prefix (like `Vec<u8>` encoding would).
#[cfg_attr(feature = "std", serde(with = "sp_core::bytes"))]
#[cfg_attr(feature = "serde", serde(with = "sp_core::bytes"))]
pub Vec<u8>,
);
+11 -2
View File
@@ -15,7 +15,7 @@ targets = ["x86_64-unknown-linux-gnu"]
[dependencies]
codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false, features = ["derive"] }
scale-info = { version = "2.5.0", default-features = false, features = ["derive"] }
serde = { version = "1.0.136", features = ["derive"], optional = true }
serde = { version = "1.0.136", default-features = false, features = ["derive", "alloc"], optional = true }
sp-arithmetic = { version = "6.0.0", default-features = false, path = "../arithmetic" }
sp-core = { version = "7.0.0", default-features = false, path = "../core" }
sp-runtime = { version = "7.0.0", default-features = false, path = "../runtime" }
@@ -31,9 +31,18 @@ bench = []
std = [
"codec/std",
"scale-info/std",
"serde",
"serde/std",
"sp-arithmetic/std",
"sp-core/std",
"sp-runtime/std",
"sp-std/std",
]
# Serde support without relying on std features.
serde = [
"dep:serde",
"scale-info/serde",
"sp-arithmetic/serde",
"sp-core/serde",
"sp-runtime/serde",
]
@@ -18,7 +18,7 @@
//! Structs and helpers for distributing a voter's stake among various winners.
use crate::{ExtendedBalance, IdentifierT, PerThing128};
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
use codec::{Decode, Encode};
use sp_arithmetic::{
traits::{Bounded, Zero},
@@ -29,7 +29,7 @@ use sp_std::vec::Vec;
/// A voter's stake assignment among a set of targets, represented as ratios.
#[derive(RuntimeDebug, Clone, Default)]
#[cfg_attr(feature = "std", derive(PartialEq, Eq, Encode, Decode))]
#[cfg_attr(feature = "serde", derive(PartialEq, Eq, Encode, Decode))]
pub struct Assignment<AccountId, P: PerThing> {
/// Voter's identifier.
pub who: AccountId,
@@ -97,7 +97,7 @@ impl<AccountId: IdentifierT, P: PerThing128> Assignment<AccountId, P> {
/// A voter's stake assignment among a set of targets, represented as absolute values in the scale
/// of [`ExtendedBalance`].
#[derive(RuntimeDebug, Clone, Default)]
#[cfg_attr(feature = "std", derive(PartialEq, Eq, Encode, Decode))]
#[cfg_attr(feature = "serde", derive(PartialEq, Eq, Encode, Decode))]
pub struct StakedAssignment<AccountId> {
/// Voter's identifier
pub who: AccountId,
@@ -77,7 +77,7 @@
use codec::{Decode, Encode, MaxEncodedLen};
use scale_info::TypeInfo;
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use sp_arithmetic::{traits::Zero, Normalizable, PerThing, Rational128, ThresholdOrd};
use sp_core::{bounded::BoundedVec, RuntimeDebug};
@@ -144,7 +144,7 @@ pub type ExtendedBalance = u128;
/// 2. `sum_stake`.
/// 3. `sum_stake_squared`.
#[derive(Clone, Copy, PartialEq, Eq, Encode, Decode, MaxEncodedLen, TypeInfo, Debug, Default)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct ElectionScore {
/// The minimal winner, in terms of total backing stake.
///
@@ -430,7 +430,7 @@ pub struct ElectionResult<AccountId, P: PerThing> {
/// This, at the current version, resembles the `Exposure` defined in the Staking pallet, yet they
/// do not necessarily have to be the same.
#[derive(RuntimeDebug, Encode, Decode, Clone, Eq, PartialEq, TypeInfo)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct Support<AccountId> {
/// Total support.
pub total: ExtendedBalance,
+12 -2
View File
@@ -22,7 +22,7 @@ log = { version = "0.4.17", default-features = false }
paste = "1.0"
rand = { version = "0.8.5", optional = true }
scale-info = { version = "2.5.0", default-features = false, features = ["derive"] }
serde = { version = "1.0.136", features = ["derive"], optional = true }
serde = { version = "1.0.136", default-features = false, features = ["derive", "alloc"], optional = true }
sp-application-crypto = { version = "7.0.0", default-features = false, path = "../application-crypto" }
sp-arithmetic = { version = "6.0.0", default-features = false, path = "../arithmetic" }
sp-core = { version = "7.0.0", default-features = false, path = "../core" }
@@ -50,7 +50,7 @@ std = [
"log/std",
"rand",
"scale-info/std",
"serde",
"serde/std",
"sp-application-crypto/std",
"sp-arithmetic/std",
"sp-core/std",
@@ -58,3 +58,13 @@ std = [
"sp-std/std",
"sp-weights/std",
]
# Serde support without relying on std features.
serde = [
"dep:serde",
"scale-info/serde",
"sp-application-crypto/serde",
"sp-arithmetic/serde",
"sp-core/serde",
"sp-weights/serde",
]
@@ -20,7 +20,7 @@
#[cfg(feature = "std")]
use std::fmt;
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use crate::{
@@ -76,9 +76,9 @@ impl<Block: BlockT> fmt::Display for BlockId<Block> {
/// Abstraction over a substrate block.
#[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug, scale_info::TypeInfo)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "std", serde(rename_all = "camelCase"))]
#[cfg_attr(feature = "std", serde(deny_unknown_fields))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
pub struct Block<Header, Extrinsic: MaybeSerialize> {
/// The block header.
pub header: Header,
@@ -114,9 +114,9 @@ where
/// Abstraction over a substrate block and justification.
#[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "std", serde(rename_all = "camelCase"))]
#[cfg_attr(feature = "std", serde(deny_unknown_fields))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
pub struct SignedBlock<Block> {
/// Full block.
pub block: Block,
@@ -17,8 +17,10 @@
//! Generic implementation of a digest.
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[cfg(all(not(feature = "std"), feature = "serde"))]
use sp_std::alloc::format;
use sp_std::prelude::*;
@@ -34,7 +36,7 @@ use sp_core::RuntimeDebug;
/// Generic header digest.
#[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug, TypeInfo, Default)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct Digest {
/// A list of logs in the digest.
pub logs: Vec<DigestItem>,
@@ -106,7 +108,7 @@ pub enum DigestItem {
RuntimeEnvironmentUpdated,
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl serde::Serialize for DigestItem {
fn serialize<S>(&self, seq: S) -> Result<S::Ok, S::Error>
where
@@ -116,7 +118,7 @@ impl serde::Serialize for DigestItem {
}
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl<'a> serde::Deserialize<'a> for DigestItem {
fn deserialize<D>(de: D) -> Result<Self, D::Error>
where
@@ -17,7 +17,7 @@
//! Generic implementation of an unchecked (pre-verification) extrinsic.
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use crate::codec::{Decode, Encode, Error, Input, Output};
@@ -30,7 +30,7 @@ pub type Phase = u64;
/// An era to describe the longevity of a transaction.
#[derive(PartialEq, Eq, Clone, Copy, sp_core::RuntimeDebug)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub enum Era {
/// The transaction is valid forever. The genesis hash must be present in the signed content.
Immortal,
@@ -26,22 +26,22 @@ use crate::{
MaybeSerializeDeserialize, Member, SimpleBitOps,
},
};
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use sp_core::U256;
use sp_std::fmt::Debug;
/// Abstraction over a block header for a substrate chain.
#[derive(Encode, Decode, PartialEq, Eq, Clone, sp_core::RuntimeDebug, TypeInfo)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "std", serde(rename_all = "camelCase"))]
#[cfg_attr(feature = "std", serde(deny_unknown_fields))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
pub struct Header<Number: Copy + Into<U256> + TryFrom<U256>, Hash: HashT> {
/// The parent hash.
pub parent_hash: Hash::Output,
/// The block number.
#[cfg_attr(
feature = "std",
feature = "serde",
serde(serialize_with = "serialize_number", deserialize_with = "deserialize_number")
)]
#[codec(compact)]
@@ -54,7 +54,7 @@ pub struct Header<Number: Copy + Into<U256> + TryFrom<U256>, Hash: HashT> {
pub digest: Digest,
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
pub fn serialize_number<S, T: Copy + Into<U256> + TryFrom<U256>>(
val: &T,
s: S,
@@ -66,7 +66,7 @@ where
serde::Serialize::serialize(&u256, s)
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
pub fn deserialize_number<'a, D, T: Copy + Into<U256> + TryFrom<U256>>(d: D) -> Result<T, D::Error>
where
D: serde::Deserializer<'a>,
@@ -29,6 +29,8 @@ use crate::{
use codec::{Compact, Decode, Encode, EncodeLike, Error, Input};
use scale_info::{build::Fields, meta_type, Path, StaticTypeInfo, Type, TypeInfo, TypeParameter};
use sp_io::hashing::blake2_256;
#[cfg(all(not(feature = "std"), feature = "serde"))]
use sp_std::alloc::format;
use sp_std::{fmt, prelude::*};
/// Current version of the [`UncheckedExtrinsic`] encoded format.
@@ -317,7 +319,7 @@ where
{
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl<Address: Encode, Signature: Encode, Call: Encode, Extra: SignedExtension> serde::Serialize
for UncheckedExtrinsic<Address, Call, Signature, Extra>
{
@@ -329,7 +331,7 @@ impl<Address: Encode, Signature: Encode, Call: Encode, Extra: SignedExtension> s
}
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl<'a, Address: Decode, Signature: Decode, Call: Decode, Extra: SignedExtension>
serde::Deserialize<'a> for UncheckedExtrinsic<Address, Call, Signature, Extra>
{
@@ -20,12 +20,12 @@
use crate::{ArithmeticError, TokenError};
use codec::{Decode, Encode};
use scale_info::TypeInfo;
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
/// [`ModuleError`] type definition before BlockBuilder API version 6.
#[derive(Eq, Clone, Copy, Encode, Decode, Debug, TypeInfo)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct ModuleError {
/// Module index, matching the metadata module index.
pub index: u8,
@@ -33,7 +33,7 @@ pub struct ModuleError {
pub error: u8,
/// Optional error message.
#[codec(skip)]
#[cfg_attr(feature = "std", serde(skip_deserializing))]
#[cfg_attr(feature = "serde", serde(skip_deserializing))]
pub message: Option<&'static str>,
}
@@ -45,12 +45,12 @@ impl PartialEq for ModuleError {
/// [`DispatchError`] type definition before BlockBuilder API version 6.
#[derive(Eq, Clone, Copy, Encode, Decode, Debug, TypeInfo, PartialEq)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub enum DispatchError {
/// Some error occurred.
Other(
#[codec(skip)]
#[cfg_attr(feature = "std", serde(skip_deserializing))]
#[cfg_attr(feature = "serde", serde(skip_deserializing))]
&'static str,
),
/// Failed to lookup some data.
+16 -14
View File
@@ -24,7 +24,7 @@
pub use codec;
#[doc(hidden)]
pub use scale_info;
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
#[doc(hidden)]
pub use serde;
#[doc(hidden)]
@@ -52,6 +52,8 @@ use sp_std::prelude::*;
use codec::{Decode, Encode, MaxEncodedLen};
use scale_info::TypeInfo;
#[cfg(all(not(feature = "std"), feature = "serde"))]
use sp_std::alloc::format;
pub mod curve;
pub mod generic;
@@ -122,7 +124,7 @@ pub type EncodedJustification = Vec<u8>;
/// Collection of justifications for a given block, multiple justifications may
/// be provided by different consensus engines for the same block.
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, PartialEq, Eq, Encode, Decode)]
pub struct Justifications(Vec<Justification>);
@@ -179,7 +181,7 @@ impl From<Justification> for Justifications {
use traits::{Lazy, Verify};
use crate::traits::IdentifyAccount;
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
pub use serde::{de::DeserializeOwned, Deserialize, Serialize};
/// Complex storage builder stuff.
@@ -235,7 +237,7 @@ impl BuildStorage for () {
pub type ConsensusEngineId = [u8; 4];
/// Signature verify that can work with any known signature types.
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[derive(Eq, PartialEq, Clone, Encode, Decode, MaxEncodedLen, RuntimeDebug, TypeInfo)]
pub enum MultiSignature {
/// An Ed25519 signature.
@@ -299,7 +301,7 @@ impl TryFrom<MultiSignature> for ecdsa::Signature {
/// Public key for any known crypto algorithm.
#[derive(Eq, PartialEq, Ord, PartialOrd, Clone, Encode, Decode, RuntimeDebug, TypeInfo)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub enum MultiSigner {
/// An Ed25519 identity.
Ed25519(ed25519::Public),
@@ -427,7 +429,7 @@ impl Verify for MultiSignature {
/// Signature verify that can work with any known signature types..
#[derive(Eq, PartialEq, Clone, Default, Encode, Decode, RuntimeDebug)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct AnySignature(H512);
impl Verify for AnySignature {
@@ -475,7 +477,7 @@ pub type DispatchResultWithInfo<T> = sp_std::result::Result<T, DispatchErrorWith
/// Reason why a pallet call failed.
#[derive(Eq, Clone, Copy, Encode, Decode, Debug, TypeInfo, MaxEncodedLen)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct ModuleError {
/// Module index, matching the metadata module index.
pub index: u8,
@@ -483,7 +485,7 @@ pub struct ModuleError {
pub error: [u8; MAX_MODULE_ERROR_ENCODED_SIZE],
/// Optional error message.
#[codec(skip)]
#[cfg_attr(feature = "std", serde(skip_deserializing))]
#[cfg_attr(feature = "serde", serde(skip_deserializing))]
pub message: Option<&'static str>,
}
@@ -495,7 +497,7 @@ impl PartialEq for ModuleError {
/// Errors related to transactional storage layers.
#[derive(Eq, PartialEq, Clone, Copy, Encode, Decode, Debug, TypeInfo, MaxEncodedLen)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub enum TransactionalError {
/// Too many transactional layers have been spawned.
LimitReached,
@@ -520,12 +522,12 @@ impl From<TransactionalError> for DispatchError {
/// Reason why a dispatch call failed.
#[derive(Eq, Clone, Copy, Encode, Decode, Debug, TypeInfo, PartialEq, MaxEncodedLen)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub enum DispatchError {
/// Some error occurred.
Other(
#[codec(skip)]
#[cfg_attr(feature = "std", serde(skip_deserializing))]
#[cfg_attr(feature = "serde", serde(skip_deserializing))]
&'static str,
),
/// Failed to lookup some data.
@@ -605,7 +607,7 @@ impl From<crate::traits::BadOrigin> for DispatchError {
/// Description of what went wrong when trying to complete an operation on a token.
#[derive(Eq, PartialEq, Clone, Copy, Encode, Decode, Debug, TypeInfo, MaxEncodedLen)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub enum TokenError {
/// Funds are unavailable.
FundsUnavailable,
@@ -879,7 +881,7 @@ impl sp_std::fmt::Debug for OpaqueExtrinsic {
}
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl ::serde::Serialize for OpaqueExtrinsic {
fn serialize<S>(&self, seq: S) -> Result<S::Ok, S::Error>
where
@@ -889,7 +891,7 @@ impl ::serde::Serialize for OpaqueExtrinsic {
}
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl<'a> ::serde::Deserialize<'a> for OpaqueExtrinsic {
fn deserialize<D>(de: D) -> Result<Self, D::Error>
where
@@ -129,7 +129,7 @@ impl std::fmt::Display for RuntimeString {
}
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl serde::Serialize for RuntimeString {
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
match self {
@@ -139,10 +139,10 @@ impl serde::Serialize for RuntimeString {
}
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl<'de> serde::Deserialize<'de> for RuntimeString {
fn deserialize<D: serde::Deserializer<'de>>(de: D) -> Result<Self, D::Error> {
String::deserialize(de).map(Self::Owned)
Ok(Self::Owned(serde::Deserialize::deserialize(de)?))
}
}
+7 -5
View File
@@ -28,7 +28,7 @@ use crate::{
DispatchResult,
};
use impl_trait_for_tuples::impl_for_tuples;
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
use serde::{de::DeserializeOwned, Deserialize, Serialize};
use sp_application_crypto::AppCrypto;
pub use sp_arithmetic::traits::{
@@ -716,7 +716,7 @@ pub trait Hash:
/// Blake2-256 Hash implementation.
#[derive(PartialEq, Eq, Clone, RuntimeDebug, TypeInfo)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct BlakeTwo256;
impl Hasher for BlakeTwo256 {
@@ -743,7 +743,7 @@ impl Hash for BlakeTwo256 {
/// Keccak-256 Hash implementation.
#[derive(PartialEq, Eq, Clone, RuntimeDebug, TypeInfo)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct Keccak256;
impl Hasher for Keccak256 {
@@ -824,11 +824,13 @@ sp_core::impl_maybe_marker!(
/// A type that implements Hash when in std environment.
trait MaybeHash: sp_std::hash::Hash;
);
/// A type that implements Serialize when in std environment.
sp_core::impl_maybe_marker_std_or_serde!(
/// A type that implements Serialize when in std environment or serde feature is activated.
trait MaybeSerialize: Serialize;
/// A type that implements Serialize, DeserializeOwned and Debug when in std environment.
/// A type that implements Serialize, DeserializeOwned and Debug when in std environment or serde feature is activated.
trait MaybeSerializeDeserialize: DeserializeOwned, Serialize;
);
@@ -36,7 +36,7 @@ pub type TransactionTag = Vec<u8>;
/// An invalid transaction validity.
#[derive(Clone, PartialEq, Eq, Encode, Decode, Copy, RuntimeDebug, TypeInfo)]
#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum InvalidTransaction {
/// The call of the transaction is not expected.
Call,
@@ -119,7 +119,7 @@ impl From<InvalidTransaction> for &'static str {
/// An unknown transaction validity.
#[derive(Clone, PartialEq, Eq, Encode, Decode, Copy, RuntimeDebug, TypeInfo)]
#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum UnknownTransaction {
/// Could not lookup some information that is required to validate the transaction.
CannotLookup,
@@ -143,7 +143,7 @@ impl From<UnknownTransaction> for &'static str {
/// Errors that can occur while checking the validity of a transaction.
#[derive(Clone, PartialEq, Eq, Encode, Decode, Copy, RuntimeDebug, TypeInfo)]
#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum TransactionValidityError {
/// The transaction is invalid.
Invalid(InvalidTransaction),
+15 -3
View File
@@ -15,12 +15,24 @@ targets = ["x86_64-unknown-linux-gnu"]
[dependencies]
codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false, features = ["derive"] }
impl-serde = { version = "0.4.0", optional = true }
impl-serde = { version = "0.4.0", optional = true, default-features = false }
ref-cast = "1.0.0"
serde = { version = "1.0.136", features = ["derive"], optional = true }
serde = { version = "1.0.136", default-features = false, features = ["derive", "alloc"], optional = true }
sp-debug-derive = { version = "5.0.0", default-features = false, path = "../debug-derive" }
sp-std = { version = "5.0.0", default-features = false, path = "../std" }
[features]
default = [ "std" ]
std = [ "codec/std", "impl-serde", "serde", "sp-debug-derive/std", "sp-std/std" ]
std = [
"codec/std",
"impl-serde/std",
"serde/std",
"sp-debug-derive/std",
"sp-std/std",
]
# Serde support without relying on std features.
serde = [
"dep:serde",
"impl-serde",
]
+11 -11
View File
@@ -21,7 +21,7 @@
use core::fmt::Display;
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use sp_debug_derive::RuntimeDebug;
@@ -35,11 +35,11 @@ use sp_std::{
/// Storage key.
#[derive(PartialEq, Eq, RuntimeDebug)]
#[cfg_attr(
feature = "std",
feature = "serde",
derive(Serialize, Deserialize, Hash, PartialOrd, Ord, Clone, Encode, Decode)
)]
pub struct StorageKey(
#[cfg_attr(feature = "std", serde(with = "impl_serde::serialize"))] pub Vec<u8>,
#[cfg_attr(feature = "serde", serde(with = "impl_serde::serialize"))] pub Vec<u8>,
);
impl AsRef<[u8]> for StorageKey {
@@ -100,11 +100,11 @@ impl From<Vec<u8>> for TrackedStorageKey {
/// Storage key of a child trie, it contains the prefix to the key.
#[derive(PartialEq, Eq, RuntimeDebug)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Hash, PartialOrd, Ord, Clone))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize, Hash, PartialOrd, Ord, Clone))]
#[repr(transparent)]
#[derive(RefCast)]
pub struct PrefixedStorageKey(
#[cfg_attr(feature = "std", serde(with = "impl_serde::serialize"))] Vec<u8>,
#[cfg_attr(feature = "serde", serde(with = "impl_serde::serialize"))] Vec<u8>,
);
impl Deref for PrefixedStorageKey {
@@ -142,11 +142,11 @@ impl PrefixedStorageKey {
/// Storage data associated to a [`StorageKey`].
#[derive(PartialEq, Eq, RuntimeDebug)]
#[cfg_attr(
feature = "std",
feature = "serde",
derive(Serialize, Deserialize, Hash, PartialOrd, Ord, Clone, Encode, Decode, Default)
)]
pub struct StorageData(
#[cfg_attr(feature = "std", serde(with = "impl_serde::serialize"))] pub Vec<u8>,
#[cfg_attr(feature = "serde", serde(with = "impl_serde::serialize"))] pub Vec<u8>,
);
/// Map of data to use in a storage, it is a collection of
@@ -178,8 +178,8 @@ pub struct Storage {
/// Storage change set
#[derive(RuntimeDebug)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize, PartialEq, Eq))]
#[cfg_attr(feature = "std", serde(rename_all = "camelCase"))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize, PartialEq, Eq))]
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
pub struct StorageChangeSet<Hash> {
/// Block hash
pub block: Hash,
@@ -245,7 +245,7 @@ pub const TRIE_VALUE_NODE_THRESHOLD: u32 = 33;
/// Information related to a child state.
#[derive(Debug, Clone)]
#[cfg_attr(feature = "std", derive(PartialEq, Eq, Hash, PartialOrd, Ord, Encode, Decode))]
#[cfg_attr(feature = "serde", derive(PartialEq, Eq, Hash, PartialOrd, Ord, Encode, Decode))]
pub enum ChildInfo {
/// This is the one used by default.
ParentKeyId(ChildTrieParentKeyId),
@@ -392,7 +392,7 @@ impl ChildType {
/// to be a unique id that will be use only once. Those unique id also required to be long enough to
/// avoid any unique id to be prefixed by an other unique id.
#[derive(Debug, Clone)]
#[cfg_attr(feature = "std", derive(PartialEq, Eq, Hash, PartialOrd, Ord, Encode, Decode))]
#[cfg_attr(feature = "serde", derive(PartialEq, Eq, Hash, PartialOrd, Ord, Encode, Decode))]
pub struct ChildTrieParentKeyId {
/// Data is the storage key without prefix.
data: Vec<u8>,
@@ -14,10 +14,11 @@ targets = ["x86_64-unknown-linux-gnu"]
[dependencies]
codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false, features = ["derive"] }
scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
serde = { version = "1.0.136", features = ["derive"], optional = true }
serde = { version = "1.0.136", default-features = false, features = ["derive"], optional = true }
sp-application-crypto = { version = "7.0.0", default-features = false, path = "../application-crypto" }
sp-core = { version = "7.0.0", default-features = false, path = "../core" }
sp-runtime = { version = "7.0.0", default-features = false, path = "../runtime" }
sp-std = { version = "5.0.0", default-features = false, path = "../std" }
[features]
default = [
@@ -25,9 +26,18 @@ default = [
]
std = [
"codec/std",
"serde",
"serde/std",
"sp-application-crypto/std",
"sp-core/std",
"sp-runtime/std",
"sp-std/std",
"scale-info/std",
]
# Serde support without relying on std features.
serde = [
"dep:serde",
"sp-application-crypto/serde",
"sp-core/serde",
"sp-runtime/serde",
]
@@ -26,6 +26,7 @@ use sp_application_crypto::sr25519;
pub use sp_core::{hash::H256, RuntimeDebug};
use sp_runtime::traits::{BlakeTwo256, Extrinsic as ExtrinsicT, Verify};
use sp_std::vec::Vec;
/// Extrinsic for test-runtime.
#[derive(Clone, PartialEq, Eq, Encode, Decode, RuntimeDebug, scale_info::TypeInfo)]
@@ -34,7 +35,7 @@ pub enum Extrinsic {
StorageChange(Vec<u8>, Option<Vec<u8>>),
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
impl serde::Serialize for Extrinsic {
fn serialize<S>(&self, seq: S) -> Result<S::Ok, S::Error>
where
+11 -4
View File
@@ -15,10 +15,10 @@ targets = ["x86_64-unknown-linux-gnu"]
[dependencies]
codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false, features = ["derive"] }
impl-serde = { version = "0.4.0", optional = true }
impl-serde = { version = "0.4.0", default-features = false, optional = true }
parity-wasm = { version = "0.45", optional = true }
scale-info = { version = "2.5.0", default-features = false, features = ["derive"] }
serde = { version = "1.0.136", features = ["derive"], optional = true }
serde = { version = "1.0.136", default-features = false, features = ["derive", "alloc"], optional = true }
thiserror = { version = "1.0.30", optional = true }
sp-core-hashing-proc-macro = { version = "5.0.0", path = "../core/hashing/proc-macro" }
sp-runtime = { version = "7.0.0", default-features = false, path = "../runtime" }
@@ -29,11 +29,18 @@ sp-version-proc-macro = { version = "4.0.0-dev", default-features = false, path
default = ["std"]
std = [
"codec/std",
"impl-serde",
"impl-serde/std",
"parity-wasm",
"scale-info/std",
"serde",
"serde/std",
"sp-runtime/std",
"sp-std/std",
"thiserror",
]
# Serde support without relying on std features.
serde = [
"dep:serde",
"impl-serde",
"sp-runtime/serde",
]
+7 -6
View File
@@ -33,7 +33,7 @@
#![cfg_attr(not(feature = "std"), no_std)]
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[cfg(feature = "std")]
use std::collections::HashSet;
@@ -156,8 +156,8 @@ macro_rules! create_apis_vec {
/// `authoring_version`, absolutely not `impl_version` since they change the semantics of the
/// runtime.
#[derive(Clone, PartialEq, Eq, Encode, Default, sp_runtime::RuntimeDebug, TypeInfo)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "std", serde(rename_all = "camelCase"))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
pub struct RuntimeVersion {
/// Identifies the different Substrate runtimes. There'll be at least polkadot and node.
/// A different on-chain spec_name to that of the native runtime would normally result
@@ -190,7 +190,7 @@ pub struct RuntimeVersion {
/// List of supported API "features" along with their versions.
#[cfg_attr(
feature = "std",
feature = "serde",
serde(
serialize_with = "apis_serialize::serialize",
deserialize_with = "apis_serialize::deserialize",
@@ -389,11 +389,12 @@ impl<T: GetNativeVersion> GetNativeVersion for std::sync::Arc<T> {
}
}
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
mod apis_serialize {
use super::*;
use impl_serde::serialize as bytes;
use serde::{de, ser::SerializeTuple, Serializer};
use sp_std::vec::Vec;
#[derive(Serialize)]
struct ApiId<'a>(#[serde(serialize_with = "serialize_bytesref")] &'a super::ApiId, &'a u32);
@@ -428,7 +429,7 @@ mod apis_serialize {
impl<'de> de::Visitor<'de> for Visitor {
type Value = ApisVec;
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
fn expecting(&self, formatter: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result {
formatter.write_str("a sequence of api id and version tuples")
}
+10 -2
View File
@@ -15,7 +15,7 @@ targets = ["x86_64-unknown-linux-gnu"]
[dependencies]
codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false, features = ["derive"] }
scale-info = { version = "2.5.0", default-features = false, features = ["derive"] }
serde = { version = "1.0.136", optional = true, features = ["derive"] }
serde = { version = "1.0.136", default-features = false, optional = true, features = ["derive", "alloc"] }
smallvec = "1.8.0"
sp-arithmetic = { version = "6.0.0", default-features = false, path = "../arithmetic" }
sp-core = { version = "7.0.0", default-features = false, path = "../core" }
@@ -27,7 +27,7 @@ default = [ "std" ]
std = [
"codec/std",
"scale-info/std",
"serde",
"serde/std",
"sp-arithmetic/std",
"sp-core/std",
"sp-debug-derive/std",
@@ -36,3 +36,11 @@ std = [
# By default some types have documentation, `full-metadata-docs` allows to add documentation to
# more types in the metadata.
full-metadata-docs = ["scale-info/docs"]
# Serde support without relying on std features.
serde = [
"dep:serde",
"scale-info/serde",
"sp-arithmetic/serde",
"sp-core/serde",
]
+3 -3
View File
@@ -29,7 +29,7 @@ mod weight_v2;
use codec::{CompactAs, Decode, Encode, MaxEncodedLen};
use scale_info::TypeInfo;
#[cfg(feature = "std")]
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use smallvec::SmallVec;
use sp_arithmetic::{
@@ -69,8 +69,8 @@ pub mod constants {
MaxEncodedLen,
TypeInfo,
)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "std", serde(transparent))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(transparent))]
#[deprecated(note = "Will be removed soon; use `Weight` instead.")]
pub struct OldWeight(pub u64);
@@ -25,7 +25,7 @@ use super::*;
#[derive(
Encode, Decode, MaxEncodedLen, TypeInfo, Eq, PartialEq, Copy, Clone, RuntimeDebug, Default,
)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct Weight {
#[codec(compact)]
/// The weight of computational time used based on some reference hardware.