connect to substrate using ws (#417)

This commit is contained in:
Svyatoslav Nikolsky
2020-10-14 08:19:39 +03:00
committed by Bastian Köcher
parent ede0ff8656
commit 55d22a0d1e
6 changed files with 23 additions and 13 deletions
+1 -1
View File
@@ -24,7 +24,7 @@ subcommands:
- sub-port: &sub-port
long: sub-port
value_name: SUB_PORT
help: Connect to Substrate node at given port.
help: Connect to Substrate node websocket server at given port.
takes_value: true
- sub-tx-mode:
long: sub-tx-mode
+1 -1
View File
@@ -8,7 +8,7 @@ license = "GPL-3.0-or-later WITH Classpath-exception-2.0"
[dependencies]
async-trait = "0.1.40"
codec = { package = "parity-scale-codec", version = "1.3.4" }
jsonrpsee = { git = "https://github.com/svyatonik/jsonrpsee.git", branch = "shared-client-in-rpc-api", default-features = false, features = ["http"] }
jsonrpsee = { git = "https://github.com/svyatonik/jsonrpsee.git", branch = "shared-client-in-rpc-api", default-features = false, features = ["ws"] }
log = "0.4.11"
num-traits = "0.2"
@@ -22,7 +22,7 @@ use crate::{ConnectionParams, Result};
use jsonrpsee::common::DeserializeOwned;
use jsonrpsee::raw::RawClient;
use jsonrpsee::transport::http::HttpTransportClient;
use jsonrpsee::transport::ws::WsTransportClient;
use jsonrpsee::Client as RpcClient;
use num_traits::Zero;
use sp_core::Bytes;
@@ -49,10 +49,10 @@ impl<C: Chain> std::fmt::Debug for Client<C> {
}
impl<C: Chain> Client<C> {
/// Returns client that is able to call RPCs on Substrate node.
/// Returns client that is able to call RPCs on Substrate node over websocket connection.
pub async fn new(params: ConnectionParams) -> Result<Self> {
let uri = format!("http://{}:{}", params.host, params.port);
let transport = HttpTransportClient::new(&uri);
let uri = format!("ws://{}:{}", params.host, params.port);
let transport = WsTransportClient::new(&uri).await?;
let raw_client = RawClient::new(transport);
let client: RpcClient = raw_client.into();
+12 -2
View File
@@ -17,6 +17,7 @@
//! Substrate node RPC errors.
use jsonrpsee::client::RequestError;
use jsonrpsee::transport::ws::WsNewDnsError;
use relay_utils::MaybeConnectionError;
/// Result type used by Substrate client.
@@ -26,13 +27,21 @@ pub type Result<T> = std::result::Result<T, Error>;
/// a Substrate node through RPC.
#[derive(Debug)]
pub enum Error {
/// Web socket connection error.
WsConnectionError(WsNewDnsError),
/// An error that can occur when making an HTTP request to
/// an JSON-RPC client.
/// an JSON-RPC server.
Request(RequestError),
/// The response from the client could not be SCALE decoded.
/// The response from the server could not be SCALE decoded.
ResponseParseFailed(codec::Error),
}
impl From<WsNewDnsError> for Error {
fn from(error: WsNewDnsError) -> Self {
Error::WsConnectionError(error)
}
}
impl From<RequestError> for Error {
fn from(error: RequestError) -> Self {
Error::Request(error)
@@ -54,6 +63,7 @@ impl From<Error> for String {
impl ToString for Error {
fn to_string(&self) -> String {
match self {
Self::WsConnectionError(e) => e.to_string(),
Self::Request(e) => e.to_string(),
Self::ResponseParseFailed(e) => e.what().to_string(),
}
+4 -4
View File
@@ -30,12 +30,12 @@ pub use crate::client::{Client, OpaqueGrandpaAuthoritiesSet};
pub use crate::error::{Error, Result};
pub use bp_runtime::{BlockNumberOf, Chain as ChainBase, HashOf, HeaderOf};
/// Substrate connection params.
/// Substrate-over-websocket connection params.
#[derive(Debug, Clone)]
pub struct ConnectionParams {
/// Substrate RPC host.
/// Websocket server hostname.
pub host: String,
/// Substrate RPC port.
/// Websocket server TCP port.
pub port: u16,
}
@@ -43,7 +43,7 @@ impl Default for ConnectionParams {
fn default() -> Self {
ConnectionParams {
host: "localhost".into(),
port: 9933,
port: 9944,
}
}
}
+1 -1
View File
@@ -76,7 +76,7 @@ macro_rules! declare_chain_options {
#[doc = "Connect to " $chain " node at given host."]
#[structopt(long)]
pub [<$chain_prefix _host>]: String,
#[doc = "Connect to " $chain " node at given port."]
#[doc = "Connect to " $chain " node websocket server at given port."]
#[structopt(long)]
pub [<$chain_prefix _port>]: u16,
}