mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-07-09 05:57:23 +00:00
connect to substrate using ws (#417)
This commit is contained in:
committed by
Bastian Köcher
parent
ede0ff8656
commit
55d22a0d1e
@@ -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();
|
||||
|
||||
|
||||
@@ -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(),
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user