diff --git a/substrate/Cargo.lock b/substrate/Cargo.lock index fb01990ee6..35e22875a9 100644 --- a/substrate/Cargo.lock +++ b/substrate/Cargo.lock @@ -3809,6 +3809,7 @@ version = "2.0.0" dependencies = [ "parity-scale-codec 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", "sr-api 2.0.0", "sr-primitives 2.0.0", "sr-std 2.0.0", diff --git a/substrate/client/rpc/Cargo.toml b/substrate/client/rpc/Cargo.toml index 4bd0f84b5f..a76d95fb14 100644 --- a/substrate/client/rpc/Cargo.toml +++ b/substrate/client/rpc/Cargo.toml @@ -16,7 +16,7 @@ log = "0.4.8" primitives = { package = "substrate-primitives", path = "../../primitives/core" } rpc = { package = "jsonrpc-core", version = "14.0.3" } runtime_version = { package = "sr-version", path = "../../primitives/sr-version" } -serde_json = "1.0.41" +serde_json = { version = "1.0.41", features = ["arbitrary_precision"] } session = { package = "substrate-session", path = "../../primitives/session" } sr-primitives = { path = "../../primitives/sr-primitives" } rpc-primitives = { package = "substrate-rpc-primitives", path = "../../primitives/rpc" } diff --git a/substrate/paint/transaction-payment/rpc/runtime-api/Cargo.toml b/substrate/paint/transaction-payment/rpc/runtime-api/Cargo.toml index 05ba940d67..e6eac75de8 100644 --- a/substrate/paint/transaction-payment/rpc/runtime-api/Cargo.toml +++ b/substrate/paint/transaction-payment/rpc/runtime-api/Cargo.toml @@ -11,6 +11,9 @@ codec = { package = "parity-scale-codec", version = "1.0.6", default-features = rstd = { package = "sr-std", path = "../../../../primitives/sr-std", default-features = false } sr-primitives = { path = "../../../../primitives/sr-primitives", default-features = false } +[dev-dependencies] +serde_json = { version = "1.0.41", features = ["arbitrary_precision"] } + [features] default = ["std"] std = [ diff --git a/substrate/paint/transaction-payment/rpc/runtime-api/src/lib.rs b/substrate/paint/transaction-payment/rpc/runtime-api/src/lib.rs index 1254d5acb9..4b20ba0c12 100644 --- a/substrate/paint/transaction-payment/rpc/runtime-api/src/lib.rs +++ b/substrate/paint/transaction-payment/rpc/runtime-api/src/lib.rs @@ -27,6 +27,7 @@ use serde::{Serialize, Deserialize}; /// Some information related to a dispatchable that can be queried from the runtime. #[derive(Eq, PartialEq, Encode, Decode, Default)] #[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] +#[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] pub struct RuntimeDispatchInfo { /// Weight of this dispatch. pub weight: Weight, @@ -45,3 +46,25 @@ sr_api::decl_runtime_apis! { fn query_info(uxt: Extrinsic, len: u32) -> RuntimeDispatchInfo; } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn should_serialize_properly_with_u128() { + let info = RuntimeDispatchInfo { + weight: 5, + class: DispatchClass::Normal, + partial_fee: 1_000_000_u128, + }; + + assert_eq!( + serde_json::to_string(&info).unwrap(), + r#"{"weight":5,"class":"normal","partialFee":1000000}"#, + ); + + // should not panic + serde_json::to_value(&info).unwrap(); + } +} diff --git a/substrate/primitives/sr-primitives/src/weights.rs b/substrate/primitives/sr-primitives/src/weights.rs index 6f2a867679..09ebe35913 100644 --- a/substrate/primitives/sr-primitives/src/weights.rs +++ b/substrate/primitives/sr-primitives/src/weights.rs @@ -95,6 +95,7 @@ impl WeighBlock for SingleModule { /// A generalized group of dispatch types. This is only distinguishing normal, user-triggered transactions /// (`Normal`) and anything beyond which serves a higher purpose to the system (`Operational`). #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] #[derive(PartialEq, Eq, Clone, Copy, Encode, Decode, RuntimeDebug)] pub enum DispatchClass { /// A normal dispatch.