diff --git a/substrate/core/client/src/client.rs b/substrate/core/client/src/client.rs index 9182ab0a7800d43d500987b105b2d97d7fed16c8..fcf917584e369c3cdbff2bf26862c0ad30837756 100644 --- a/substrate/core/client/src/client.rs +++ b/substrate/core/client/src/client.rs @@ -346,11 +346,6 @@ impl<B, E, Block> Client<B, E, Block> where &self.executor } - /// Returns the runtime metadata. - pub fn metadata(&self, id: &BlockId<Block>) -> error::Result<Vec<u8>> { - 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<Block>, key: &[u8]) -> error::Result<Vec<Vec<u8>>> { self.state_at(id) @@ -1074,7 +1069,7 @@ impl<B, E, Block> api::Core<Block, AuthorityId> for Client<B, E, Block> where } } -impl<B, E, Block> api::Metadata<Block> for Client<B, E, Block> where +impl<B, E, Block> api::Metadata<Block, Vec<u8>> for Client<B, E, Block> where B: backend::Backend<Block, Blake2Hasher>, E: CallExecutor<Block, Blake2Hasher>, Block: BlockT, @@ -1082,7 +1077,7 @@ impl<B, E, Block> api::Metadata<Block> for Client<B, E, Block> where type Error = Error; fn metadata(&self, at: &BlockId<Block>) -> Result<Vec<u8>, 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 4c3110f8e14b30a93f59b5b3b5106d3c3dc976e5..3fda746dcb08af45d450f037eacba67e42cb6d0c 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 2021e2f2a0b740b18ad1d1f707b9893022ecc9c5..b610606d02ee89dc6d2d868c2d9a34fc5439bf1f 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<u8>; + pub trait Metadata<Data> { + 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 36dcd347b9651e3e7fac819867b60321bb3ee4b9..1f4a44bb2941875ae4f5363cdb5227b21b8b03dc 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<u8> { + impl Metadata<RuntimeMetadata> for Runtime { + fn metadata() -> RuntimeMetadata { Runtime::metadata() } } diff --git a/substrate/srml/support/src/lib.rs b/substrate/srml/support/src/lib.rs index 02747b199ae1a3760b9f9f13bfc4b2819a7010c1..a8b1fa88a487890bf3b52ff78377c1eeb4ddf135 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 79df4815bb22972d9c905b082826cc92d84154cf..2a6b05bde2eadcc266707360ef5fbae0f533e8e5 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<u8> { - $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());