diff --git a/substrate/core/client/src/client.rs b/substrate/core/client/src/client.rs index 9182ab0a78..fcf917584e 100644 --- a/substrate/core/client/src/client.rs +++ b/substrate/core/client/src/client.rs @@ -346,11 +346,6 @@ impl Client where &self.executor } - /// Returns the runtime metadata. - pub fn metadata(&self, id: &BlockId) -> error::Result> { - self.executor.call(id, "metadata",&[]).map(|v| v.return_data) - } - /// Reads storage value at a given block + key, returning read proof. pub fn read_proof(&self, id: &BlockId, key: &[u8]) -> error::Result>> { self.state_at(id) @@ -1074,7 +1069,7 @@ impl api::Core for Client where } } -impl api::Metadata for Client where +impl api::Metadata> for Client where B: backend::Backend, E: CallExecutor, Block: BlockT, @@ -1082,7 +1077,7 @@ impl api::Metadata for Client where type Error = Error; fn metadata(&self, at: &BlockId) -> Result, Self::Error> { - self.call_api_at(at, "metadata", &()) + self.executor.call(at, "metadata",&[]).map(|v| v.return_data) } } diff --git a/substrate/core/rpc/src/state/mod.rs b/substrate/core/rpc/src/state/mod.rs index 4c3110f8e1..3fda746dcb 100644 --- a/substrate/core/rpc/src/state/mod.rs +++ b/substrate/core/rpc/src/state/mod.rs @@ -21,7 +21,7 @@ use std::{ sync::Arc, }; -use client::{self, Client, CallExecutor, BlockchainEvents}; +use client::{self, Client, CallExecutor, BlockchainEvents, runtime_api::Metadata}; use jsonrpc_macros::Trailing; use jsonrpc_macros::pubsub; use jsonrpc_pubsub::SubscriptionId; diff --git a/substrate/core/sr-api/src/lib.rs b/substrate/core/sr-api/src/lib.rs index 2021e2f2a0..b610606d02 100644 --- a/substrate/core/sr-api/src/lib.rs +++ b/substrate/core/sr-api/src/lib.rs @@ -436,8 +436,8 @@ decl_apis! { } /// The `Metadata` api trait that returns metadata for the runtime. - pub trait Metadata { - fn metadata() -> Vec; + pub trait Metadata { + fn metadata() -> Data; } /// The `OldTxQueue` api trait for interfering with the old transaction queue. diff --git a/substrate/node/runtime/src/lib.rs b/substrate/node/runtime/src/lib.rs index 36dcd347b9..1f4a44bb29 100644 --- a/substrate/node/runtime/src/lib.rs +++ b/substrate/node/runtime/src/lib.rs @@ -81,7 +81,7 @@ pub use timestamp::Call as TimestampCall; pub use balances::Call as BalancesCall; pub use runtime_primitives::{Permill, Perbill}; pub use timestamp::BlockPeriod; -pub use srml_support::StorageValue; +pub use srml_support::{StorageValue, RuntimeMetadata}; const TIMESTAMP_SET_POSITION: u32 = 0; const NOTE_OFFLINE_POSITION: u32 = 1; @@ -246,8 +246,8 @@ impl_apis! { } } - impl Metadata for Runtime { - fn metadata() -> Vec { + impl Metadata for Runtime { + fn metadata() -> RuntimeMetadata { Runtime::metadata() } } diff --git a/substrate/srml/support/src/lib.rs b/substrate/srml/support/src/lib.rs index 02747b199a..a8b1fa88a4 100644 --- a/substrate/srml/support/src/lib.rs +++ b/substrate/srml/support/src/lib.rs @@ -65,6 +65,7 @@ pub mod inherent; pub use self::storage::{StorageVec, StorageList, StorageValue, StorageMap}; pub use self::hashable::Hashable; pub use self::dispatch::{Parameter, Dispatchable, Callable, IsSubType}; +pub use self::metadata::RuntimeMetadata; pub use runtime_io::print; #[macro_export] diff --git a/substrate/srml/support/src/metadata.rs b/substrate/srml/support/src/metadata.rs index 79df4815bb..2a6b05bde2 100644 --- a/substrate/srml/support/src/metadata.rs +++ b/substrate/srml/support/src/metadata.rs @@ -33,14 +33,12 @@ macro_rules! impl_runtime_metadata { $( $rest:tt )* ) => { impl $runtime { - pub fn metadata() -> Vec { - $crate::codec::Encode::encode( - &$crate::metadata::RuntimeMetadata { - outer_event: Self::outer_event_metadata(), - modules: __runtime_modules_to_metadata!($runtime;; $( $rest )*), - outer_dispatch: Self::outer_dispatch_metadata(), - } - ) + pub fn metadata() -> $crate::metadata::RuntimeMetadata { + $crate::metadata::RuntimeMetadata { + outer_event: Self::outer_event_metadata(), + modules: __runtime_modules_to_metadata!($runtime;; $( $rest )*), + outer_dispatch: Self::outer_dispatch_metadata(), + } } } } @@ -105,7 +103,7 @@ mod tests { StorageFunctionModifier, StorageFunctionType, FunctionMetadata, StorageMetadata, StorageFunctionMetadata, OuterDispatchMetadata, OuterDispatchCall }; - use codec::Decode; + use codec::{Decode, Encode}; mod system { pub trait Trait { @@ -352,7 +350,7 @@ mod tests { #[test] fn runtime_metadata() { - let metadata_encoded = TestRuntime::metadata(); + let metadata_encoded = TestRuntime::metadata().encode(); let metadata_decoded = RuntimeMetadata::decode(&mut &metadata_encoded[..]); assert_eq!(EXPECTED_METADATA, metadata_decoded.unwrap());