Skip to content

Commit

Permalink
connect to substrate using ws (paritytech#417)
Browse files Browse the repository at this point in the history
  • Loading branch information
svyatonik authored and serban300 committed Apr 10, 2024
1 parent e96975d commit f383b16
Show file tree
Hide file tree
Showing 6 changed files with 23 additions and 13 deletions.
2 changes: 1 addition & 1 deletion bridges/relays/ethereum/src/cli.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion bridges/relays/substrate-client/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down
8 changes: 4 additions & 4 deletions bridges/relays/substrate-client/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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();

Expand Down
14 changes: 12 additions & 2 deletions bridges/relays/substrate-client/src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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)
Expand All @@ -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(),
}
Expand Down
8 changes: 4 additions & 4 deletions bridges/relays/substrate-client/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,20 +30,20 @@ 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,
}

impl Default for ConnectionParams {
fn default() -> Self {
ConnectionParams {
host: "localhost".into(),
port: 9933,
port: 9944,
}
}
}
2 changes: 1 addition & 1 deletion bridges/relays/substrate/src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}
Expand Down

0 comments on commit f383b16

Please sign in to comment.