mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-12 15:51:12 +00:00
bec896d91a
* add simple reconnecting rpc client * initial retryable calls * add reconnecting backend * add reconnecting example for unstable backend * add todo what isn't working * FollowStream: restart on reconn * naive fix: fetch sub_id in stream_headers * cleanup * remove resubscribe APIs * cleanup and remove many wrapper streams * remove retry backend * legacy rpc: make it retryable * unstable rpc: make it retryable * fix nits * support wasm as well * remove deadcode * address grumbles * revert rpc methods * don't create a subscription per block * get rid off retry logic in subxt rpc * Update subxt/Cargo.toml * Update subxt/src/backend/legacy/mod.rs * Update subxt/src/backend/legacy/mod.rs * remove outdated comments * fix bad merge * Fix reconnecting RPC client and update dependencies * add back retry logic and remove `finito` * fix nits * cleanup * add hack for race when reconnecting * backend: emit Stop event DisconnectWillRecoonect * merge reconnecting client examples * add fn retry_stream * cleanup * add all features from reconnecting-rpc-client * fix build * remove needless retry for fetch_storage * StorageFetchDescendantKeysStream handle disconnect err * dont retry transactions * fetch subscription ID from FollowStreamMsg * fix nits * Update subxt/src/backend/legacy/mod.rs * Update subxt/src/backend/legacy/mod.rs * add reconn to StorageItems stream * StorageFetchDescendantKeysStreamchore: retry storage call * RetryStream: emit DisconnectWillReconnect msg * runtime subscriptions ignore DisconnectWillReconn * Update subxt/examples/setup_reconnecting_rpc_client.rs * Update subxt/src/client/online_client.rs * Update subxt/src/client/online_client.rs * Add custom stream wrapper for finalized blocks * add missing retry block * clippy * clippy again * cleanup * remove duplicate logic * fix more grumbles * Update subxt/examples/setup_reconnecting_rpc_client.rs Co-authored-by: James Wilson <james@jsdw.me> * simplify the example * remove pin-project dep * remove duplicate retry logic * remove extra code * specify trait bounds for retry api * simplify the example * fix weird Poll::Pending return * fix nit in poll impl * remove needless paths * make retry_stream pub and add doc examples * Update subxt/src/backend/utils.rs --------- Co-authored-by: James Wilson <james@jsdw.me>
77 lines
2.4 KiB
Rust
77 lines
2.4 KiB
Rust
// Copyright 2019-2023 Parity Technologies (UK) Ltd.
|
|
// This file is dual-licensed as Apache-2.0 or GPL-3.0.
|
|
// see LICENSE for license details.
|
|
|
|
//! RPC types and client for interacting with a substrate node.
|
|
//!
|
|
//! These are used behind the scenes by Subxt backend implementations, for
|
|
//! example [`crate::backend::legacy::LegacyBackend`]. If you need an RPC client,
|
|
//! then you can manually instantiate one, and then hand it to Subxt if you'd like
|
|
//! to re-use it for the Subxt connection.
|
|
//!
|
|
//! - [`RpcClientT`] is the underlying dynamic RPC implementation. This provides
|
|
//! the low level [`RpcClientT::request_raw`] and [`RpcClientT::subscribe_raw`]
|
|
//! methods.
|
|
//! - [`RpcClient`] is the higher level wrapper around this, offering
|
|
//! the [`RpcClient::request`] and [`RpcClient::subscribe`] methods.
|
|
//!
|
|
//! # Example
|
|
//!
|
|
//! Fetching the genesis hash.
|
|
//!
|
|
//! ```no_run
|
|
//! # #[tokio::main]
|
|
//! # async fn main() {
|
|
//! use subxt::{
|
|
//! client::OnlineClient,
|
|
//! config::SubstrateConfig,
|
|
//! backend::rpc::RpcClient,
|
|
//! backend::legacy::LegacyRpcMethods,
|
|
//! };
|
|
//!
|
|
//! // Instantiate a default RPC client pointing at some URL.
|
|
//! let rpc_client = RpcClient::from_url("ws://localhost:9944")
|
|
//! .await
|
|
//! .unwrap();
|
|
//!
|
|
//! // Instantiate the legacy RPC interface, providing an appropriate
|
|
//! // config so that it uses the correct types for your chain.
|
|
//! let rpc_methods = LegacyRpcMethods::<SubstrateConfig>::new(rpc_client.clone());
|
|
//!
|
|
//! // Use it to make RPC calls, here using the legacy genesis_hash method.
|
|
//! let genesis_hash = rpc_methods
|
|
//! .genesis_hash()
|
|
//! .await
|
|
//! .unwrap();
|
|
//!
|
|
//! println!("{genesis_hash}");
|
|
//!
|
|
//! // Instantiate the Subxt interface using the same client and config if you
|
|
//! // want to reuse the same connection:
|
|
//! let client = OnlineClient::<SubstrateConfig>::from_rpc_client(rpc_client);
|
|
//! # }
|
|
//! ```
|
|
|
|
// Allow an `rpc.rs` file in the `rpc` folder to align better
|
|
// with other file names for their types.
|
|
#![allow(clippy::module_inception)]
|
|
|
|
crate::macros::cfg_jsonrpsee! {
|
|
mod jsonrpsee_impl;
|
|
}
|
|
|
|
crate::macros::cfg_unstable_light_client! {
|
|
mod lightclient_impl;
|
|
}
|
|
|
|
crate::macros::cfg_reconnecting_rpc_client! {
|
|
/// reconnecting rpc client.
|
|
pub mod reconnecting_rpc_client;
|
|
}
|
|
|
|
mod rpc_client;
|
|
mod rpc_client_t;
|
|
|
|
pub use rpc_client::{rpc_params, RpcClient, RpcParams, RpcSubscription};
|
|
pub use rpc_client_t::{RawRpcFuture, RawRpcSubscription, RawValue, RpcClientT};
|