Parity-PubSub as a separate API. (#5676)
* Parity-PubSub as a separate API. * Fix tests. * Fixes after merge.
This commit is contained in:
parent
dd004aba9f
commit
00cdc52323
@ -16,4 +16,4 @@ native-contract-generator = { path = "generator" }
|
|||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = []
|
default = []
|
||||||
test_contracts = []
|
test_contracts = []
|
||||||
|
@ -172,7 +172,7 @@ usage! {
|
|||||||
or |c: &Config| otry!(c.rpc).interface.clone(),
|
or |c: &Config| otry!(c.rpc).interface.clone(),
|
||||||
flag_jsonrpc_cors: Option<String> = None,
|
flag_jsonrpc_cors: Option<String> = None,
|
||||||
or |c: &Config| otry!(c.rpc).cors.clone().map(Some),
|
or |c: &Config| otry!(c.rpc).cors.clone().map(Some),
|
||||||
flag_jsonrpc_apis: String = "web3,eth,pubsub,net,parity,traces,rpc,secretstore",
|
flag_jsonrpc_apis: String = "web3,eth,pubsub,net,parity,parity_pubsub,traces,rpc,secretstore",
|
||||||
or |c: &Config| otry!(c.rpc).apis.as_ref().map(|vec| vec.join(",")),
|
or |c: &Config| otry!(c.rpc).apis.as_ref().map(|vec| vec.join(",")),
|
||||||
flag_jsonrpc_hosts: String = "none",
|
flag_jsonrpc_hosts: String = "none",
|
||||||
or |c: &Config| otry!(c.rpc).hosts.as_ref().map(|vec| vec.join(",")),
|
or |c: &Config| otry!(c.rpc).hosts.as_ref().map(|vec| vec.join(",")),
|
||||||
@ -186,7 +186,7 @@ usage! {
|
|||||||
or |c: &Config| otry!(c.websockets).port.clone(),
|
or |c: &Config| otry!(c.websockets).port.clone(),
|
||||||
flag_ws_interface: String = "local",
|
flag_ws_interface: String = "local",
|
||||||
or |c: &Config| otry!(c.websockets).interface.clone(),
|
or |c: &Config| otry!(c.websockets).interface.clone(),
|
||||||
flag_ws_apis: String = "web3,eth,pubsub,net,parity,traces,rpc,secretstore",
|
flag_ws_apis: String = "web3,eth,pubsub,net,parity,parity_pubsub,traces,rpc,secretstore",
|
||||||
or |c: &Config| otry!(c.websockets).apis.as_ref().map(|vec| vec.join(",")),
|
or |c: &Config| otry!(c.websockets).apis.as_ref().map(|vec| vec.join(",")),
|
||||||
flag_ws_origins: String = "none",
|
flag_ws_origins: String = "none",
|
||||||
or |c: &Config| otry!(c.websockets).origins.as_ref().map(|vec| vec.join(",")),
|
or |c: &Config| otry!(c.websockets).origins.as_ref().map(|vec| vec.join(",")),
|
||||||
@ -198,7 +198,7 @@ usage! {
|
|||||||
or |c: &Config| otry!(c.ipc).disable.clone(),
|
or |c: &Config| otry!(c.ipc).disable.clone(),
|
||||||
flag_ipc_path: String = if cfg!(windows) { r"\\.\pipe\jsonrpc.ipc" } else { "$BASE/jsonrpc.ipc" },
|
flag_ipc_path: String = if cfg!(windows) { r"\\.\pipe\jsonrpc.ipc" } else { "$BASE/jsonrpc.ipc" },
|
||||||
or |c: &Config| otry!(c.ipc).path.clone(),
|
or |c: &Config| otry!(c.ipc).path.clone(),
|
||||||
flag_ipc_apis: String = "web3,eth,pubsub,net,parity,parity_accounts,traces,rpc,secretstore",
|
flag_ipc_apis: String = "web3,eth,pubsub,net,parity,parity_pubsub,parity_accounts,traces,rpc,secretstore",
|
||||||
or |c: &Config| otry!(c.ipc).apis.as_ref().map(|vec| vec.join(",")),
|
or |c: &Config| otry!(c.ipc).apis.as_ref().map(|vec| vec.join(",")),
|
||||||
|
|
||||||
// DAPPS
|
// DAPPS
|
||||||
|
@ -104,11 +104,11 @@ impl ContractClient for LightRegistrar {
|
|||||||
value: 0.into(),
|
value: 0.into(),
|
||||||
data: data,
|
data: data,
|
||||||
}.fake_sign(Address::default()),
|
}.fake_sign(Address::default()),
|
||||||
header: on_demand::request::HeaderRef::Stored(header),
|
header: header.into(),
|
||||||
env_info: env_info,
|
env_info: env_info,
|
||||||
engine: self.client.engine().clone(),
|
engine: self.client.engine().clone(),
|
||||||
})
|
})
|
||||||
.expect("todo: handle error")
|
.expect("No back-references; therefore all back-refs valid; qed")
|
||||||
.then(|res| match res {
|
.then(|res| match res {
|
||||||
Ok(Ok(executed)) => Ok(executed.output),
|
Ok(Ok(executed)) => Ok(executed.output),
|
||||||
Ok(Err(e)) => Err(format!("Failed to execute transaction: {}", e)),
|
Ok(Err(e)) => Err(format!("Failed to execute transaction: {}", e)),
|
||||||
|
@ -54,6 +54,8 @@ pub enum Api {
|
|||||||
Signer,
|
Signer,
|
||||||
/// Parity - Custom extensions (Safe)
|
/// Parity - Custom extensions (Safe)
|
||||||
Parity,
|
Parity,
|
||||||
|
/// Parity PubSub - Generic Publish-Subscriber (Safety depends on other APIs exposed).
|
||||||
|
ParityPubSub,
|
||||||
/// Parity Accounts extensions (UNSAFE: Passwords, Side Effects (new account))
|
/// Parity Accounts extensions (UNSAFE: Passwords, Side Effects (new account))
|
||||||
ParityAccounts,
|
ParityAccounts,
|
||||||
/// Parity - Set methods (UNSAFE: Side Effects affecting node operation)
|
/// Parity - Set methods (UNSAFE: Side Effects affecting node operation)
|
||||||
@ -80,6 +82,7 @@ impl FromStr for Api {
|
|||||||
"personal" => Ok(Personal),
|
"personal" => Ok(Personal),
|
||||||
"signer" => Ok(Signer),
|
"signer" => Ok(Signer),
|
||||||
"parity" => Ok(Parity),
|
"parity" => Ok(Parity),
|
||||||
|
"parity_pubsub" => Ok(ParityPubSub),
|
||||||
"parity_accounts" => Ok(ParityAccounts),
|
"parity_accounts" => Ok(ParityAccounts),
|
||||||
"parity_set" => Ok(ParitySet),
|
"parity_set" => Ok(ParitySet),
|
||||||
"traces" => Ok(Traces),
|
"traces" => Ok(Traces),
|
||||||
@ -161,6 +164,7 @@ fn to_modules(apis: &[Api]) -> BTreeMap<String, String> {
|
|||||||
Api::Signer => ("signer", "1.0"),
|
Api::Signer => ("signer", "1.0"),
|
||||||
Api::Parity => ("parity", "1.0"),
|
Api::Parity => ("parity", "1.0"),
|
||||||
Api::ParityAccounts => ("parity_accounts", "1.0"),
|
Api::ParityAccounts => ("parity_accounts", "1.0"),
|
||||||
|
Api::ParityPubSub => ("parity_pubsub", "1.0"),
|
||||||
Api::ParitySet => ("parity_set", "1.0"),
|
Api::ParitySet => ("parity_set", "1.0"),
|
||||||
Api::Traces => ("traces", "1.0"),
|
Api::Traces => ("traces", "1.0"),
|
||||||
Api::Rpc => ("rpc", "1.0"),
|
Api::Rpc => ("rpc", "1.0"),
|
||||||
@ -288,13 +292,15 @@ impl FullDependencies {
|
|||||||
self.dapps_port,
|
self.dapps_port,
|
||||||
).to_delegate());
|
).to_delegate());
|
||||||
|
|
||||||
|
if !for_generic_pubsub {
|
||||||
|
add_signing_methods!(ParitySigning, handler, self);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Api::ParityPubSub => {
|
||||||
if !for_generic_pubsub {
|
if !for_generic_pubsub {
|
||||||
let mut rpc = MetaIoHandler::default();
|
let mut rpc = MetaIoHandler::default();
|
||||||
self.extend_api(&mut rpc, apis, true);
|
self.extend_api(&mut rpc, apis, true);
|
||||||
handler.extend_with(PubSubClient::new(rpc, self.remote.clone()).to_delegate());
|
handler.extend_with(PubSubClient::new(rpc, self.remote.clone()).to_delegate());
|
||||||
|
|
||||||
add_signing_methods!(EthSigning, handler, self);
|
|
||||||
add_signing_methods!(ParitySigning, handler, self);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Api::ParityAccounts => {
|
Api::ParityAccounts => {
|
||||||
@ -364,11 +370,13 @@ pub struct LightDependencies {
|
|||||||
pub remote: parity_reactor::Remote,
|
pub remote: parity_reactor::Remote,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Dependencies for LightDependencies {
|
impl LightDependencies {
|
||||||
type Notifier = LightClientNotifier;
|
fn extend_api<T: core::Middleware<Metadata>>(
|
||||||
|
&self,
|
||||||
fn activity_notifier(&self) -> Self::Notifier { LightClientNotifier }
|
handler: &mut MetaIoHandler<Metadata, T>,
|
||||||
fn extend_with_set(&self, handler: &mut MetaIoHandler<Metadata, Middleware<Self::Notifier>>, apis: &[Api]) {
|
apis: &[Api],
|
||||||
|
for_generic_pubsub: bool,
|
||||||
|
) {
|
||||||
use parity_rpc::v1::*;
|
use parity_rpc::v1::*;
|
||||||
|
|
||||||
let dispatcher = LightDispatcher::new(
|
let dispatcher = LightDispatcher::new(
|
||||||
@ -416,8 +424,11 @@ impl Dependencies for LightDependencies {
|
|||||||
self.cache.clone(),
|
self.cache.clone(),
|
||||||
);
|
);
|
||||||
handler.extend_with(Eth::to_delegate(client.clone()));
|
handler.extend_with(Eth::to_delegate(client.clone()));
|
||||||
handler.extend_with(EthFilter::to_delegate(client));
|
|
||||||
add_signing_methods!(EthSigning, handler, self);
|
if !for_generic_pubsub {
|
||||||
|
handler.extend_with(EthFilter::to_delegate(client));
|
||||||
|
add_signing_methods!(EthSigning, handler, self);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
Api::EthPubSub => {
|
Api::EthPubSub => {
|
||||||
let client = EthPubSubClient::new(self.client.clone(), self.remote.clone());
|
let client = EthPubSubClient::new(self.client.clone(), self.remote.clone());
|
||||||
@ -450,8 +461,16 @@ impl Dependencies for LightDependencies {
|
|||||||
self.dapps_port,
|
self.dapps_port,
|
||||||
).to_delegate());
|
).to_delegate());
|
||||||
|
|
||||||
add_signing_methods!(EthSigning, handler, self);
|
if !for_generic_pubsub {
|
||||||
add_signing_methods!(ParitySigning, handler, self);
|
add_signing_methods!(ParitySigning, handler, self);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Api::ParityPubSub => {
|
||||||
|
if !for_generic_pubsub {
|
||||||
|
let mut rpc = MetaIoHandler::default();
|
||||||
|
self.extend_api(&mut rpc, apis, true);
|
||||||
|
handler.extend_with(PubSubClient::new(rpc, self.remote.clone()).to_delegate());
|
||||||
|
}
|
||||||
},
|
},
|
||||||
Api::ParityAccounts => {
|
Api::ParityAccounts => {
|
||||||
let secret_store = Some(self.secret_store.clone());
|
let secret_store = Some(self.secret_store.clone());
|
||||||
@ -479,6 +498,15 @@ impl Dependencies for LightDependencies {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Dependencies for LightDependencies {
|
||||||
|
type Notifier = LightClientNotifier;
|
||||||
|
|
||||||
|
fn activity_notifier(&self) -> Self::Notifier { LightClientNotifier }
|
||||||
|
fn extend_with_set(&self, handler: &mut MetaIoHandler<Metadata, Middleware<Self::Notifier>>, apis: &[Api]) {
|
||||||
|
self.extend_api(handler, apis, false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl ApiSet {
|
impl ApiSet {
|
||||||
/// Retains only APIs in given set.
|
/// Retains only APIs in given set.
|
||||||
pub fn retain(self, set: Self) -> Self {
|
pub fn retain(self, set: Self) -> Self {
|
||||||
@ -494,15 +522,18 @@ impl ApiSet {
|
|||||||
ApiSet::PublicContext => public_list,
|
ApiSet::PublicContext => public_list,
|
||||||
ApiSet::UnsafeContext => {
|
ApiSet::UnsafeContext => {
|
||||||
public_list.insert(Api::Traces);
|
public_list.insert(Api::Traces);
|
||||||
|
public_list.insert(Api::ParityPubSub);
|
||||||
public_list
|
public_list
|
||||||
},
|
},
|
||||||
ApiSet::IpcContext => {
|
ApiSet::IpcContext => {
|
||||||
public_list.insert(Api::Traces);
|
public_list.insert(Api::Traces);
|
||||||
|
public_list.insert(Api::ParityPubSub);
|
||||||
public_list.insert(Api::ParityAccounts);
|
public_list.insert(Api::ParityAccounts);
|
||||||
public_list
|
public_list
|
||||||
},
|
},
|
||||||
ApiSet::SafeContext => {
|
ApiSet::SafeContext => {
|
||||||
public_list.insert(Api::Traces);
|
public_list.insert(Api::Traces);
|
||||||
|
public_list.insert(Api::ParityPubSub);
|
||||||
public_list.insert(Api::ParityAccounts);
|
public_list.insert(Api::ParityAccounts);
|
||||||
public_list.insert(Api::ParitySet);
|
public_list.insert(Api::ParitySet);
|
||||||
public_list.insert(Api::Signer);
|
public_list.insert(Api::Signer);
|
||||||
@ -510,6 +541,7 @@ impl ApiSet {
|
|||||||
},
|
},
|
||||||
ApiSet::All => {
|
ApiSet::All => {
|
||||||
public_list.insert(Api::Traces);
|
public_list.insert(Api::Traces);
|
||||||
|
public_list.insert(Api::ParityPubSub);
|
||||||
public_list.insert(Api::ParityAccounts);
|
public_list.insert(Api::ParityAccounts);
|
||||||
public_list.insert(Api::ParitySet);
|
public_list.insert(Api::ParitySet);
|
||||||
public_list.insert(Api::Signer);
|
public_list.insert(Api::Signer);
|
||||||
@ -564,7 +596,7 @@ mod test {
|
|||||||
fn test_api_set_unsafe_context() {
|
fn test_api_set_unsafe_context() {
|
||||||
let expected = vec![
|
let expected = vec![
|
||||||
// make sure this list contains only SAFE methods
|
// make sure this list contains only SAFE methods
|
||||||
Api::Web3, Api::Net, Api::Eth, Api::EthPubSub, Api::Parity, Api::Traces, Api::Rpc, Api::SecretStore
|
Api::Web3, Api::Net, Api::Eth, Api::EthPubSub, Api::Parity, Api::ParityPubSub, Api::Traces, Api::Rpc, Api::SecretStore
|
||||||
].into_iter().collect();
|
].into_iter().collect();
|
||||||
assert_eq!(ApiSet::UnsafeContext.list_apis(), expected);
|
assert_eq!(ApiSet::UnsafeContext.list_apis(), expected);
|
||||||
}
|
}
|
||||||
@ -573,7 +605,7 @@ mod test {
|
|||||||
fn test_api_set_ipc_context() {
|
fn test_api_set_ipc_context() {
|
||||||
let expected = vec![
|
let expected = vec![
|
||||||
// safe
|
// safe
|
||||||
Api::Web3, Api::Net, Api::Eth, Api::EthPubSub, Api::Parity, Api::Traces, Api::Rpc, Api::SecretStore,
|
Api::Web3, Api::Net, Api::Eth, Api::EthPubSub, Api::Parity, Api::ParityPubSub, Api::Traces, Api::Rpc, Api::SecretStore,
|
||||||
// semi-safe
|
// semi-safe
|
||||||
Api::ParityAccounts
|
Api::ParityAccounts
|
||||||
].into_iter().collect();
|
].into_iter().collect();
|
||||||
@ -584,7 +616,7 @@ mod test {
|
|||||||
fn test_api_set_safe_context() {
|
fn test_api_set_safe_context() {
|
||||||
let expected = vec![
|
let expected = vec![
|
||||||
// safe
|
// safe
|
||||||
Api::Web3, Api::Net, Api::Eth, Api::EthPubSub, Api::Parity, Api::Traces, Api::Rpc, Api::SecretStore,
|
Api::Web3, Api::Net, Api::Eth, Api::EthPubSub, Api::Parity, Api::ParityPubSub, Api::Traces, Api::Rpc, Api::SecretStore,
|
||||||
// semi-safe
|
// semi-safe
|
||||||
Api::ParityAccounts,
|
Api::ParityAccounts,
|
||||||
// Unsafe
|
// Unsafe
|
||||||
@ -596,7 +628,7 @@ mod test {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_all_apis() {
|
fn test_all_apis() {
|
||||||
assert_eq!("all".parse::<ApiSet>().unwrap(), ApiSet::List(vec![
|
assert_eq!("all".parse::<ApiSet>().unwrap(), ApiSet::List(vec![
|
||||||
Api::Web3, Api::Net, Api::Eth, Api::EthPubSub, Api::Parity, Api::Traces, Api::Rpc, Api::SecretStore,
|
Api::Web3, Api::Net, Api::Eth, Api::EthPubSub, Api::Parity, Api::ParityPubSub, Api::Traces, Api::Rpc, Api::SecretStore,
|
||||||
Api::ParityAccounts,
|
Api::ParityAccounts,
|
||||||
Api::ParitySet, Api::Signer,
|
Api::ParitySet, Api::Signer,
|
||||||
Api::Personal
|
Api::Personal
|
||||||
@ -606,7 +638,7 @@ mod test {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_all_without_personal_apis() {
|
fn test_all_without_personal_apis() {
|
||||||
assert_eq!("personal,all,-personal".parse::<ApiSet>().unwrap(), ApiSet::List(vec![
|
assert_eq!("personal,all,-personal".parse::<ApiSet>().unwrap(), ApiSet::List(vec![
|
||||||
Api::Web3, Api::Net, Api::Eth, Api::EthPubSub, Api::Parity, Api::Traces, Api::Rpc, Api::SecretStore,
|
Api::Web3, Api::Net, Api::Eth, Api::EthPubSub, Api::Parity, Api::ParityPubSub, Api::Traces, Api::Rpc, Api::SecretStore,
|
||||||
Api::ParityAccounts,
|
Api::ParityAccounts,
|
||||||
Api::ParitySet, Api::Signer,
|
Api::ParitySet, Api::Signer,
|
||||||
].into_iter().collect()));
|
].into_iter().collect()));
|
||||||
@ -615,7 +647,7 @@ mod test {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_safe_parsing() {
|
fn test_safe_parsing() {
|
||||||
assert_eq!("safe".parse::<ApiSet>().unwrap(), ApiSet::List(vec![
|
assert_eq!("safe".parse::<ApiSet>().unwrap(), ApiSet::List(vec![
|
||||||
Api::Web3, Api::Net, Api::Eth, Api::EthPubSub, Api::EthPubSub, Api::Parity, Api::Traces, Api::Rpc, Api::SecretStore,
|
Api::Web3, Api::Net, Api::Eth, Api::EthPubSub, Api::Parity, Api::ParityPubSub, Api::Traces, Api::Rpc, Api::SecretStore,
|
||||||
].into_iter().collect()));
|
].into_iter().collect()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user