Struct TxClient

Source
pub struct TxClient<T, S> { /* private fields */ }
Expand description

A client for submitting messages and transactions to celestia.

Client handles management of the accounts sequence (nonce), thus it should be the only party submitting transactions signed with given account. Using e.g. two distinct clients with the same account will make them invalidate each others nonces.

Implementations§

Source§

impl<T, S> TxClient<T, S>

Source

pub async fn new( transport: T, account_address: &Address, account_pubkey: VerifyingKey<Secp256k1>, signer: S, ) -> Result<TxClient<T, S>, Error>

Create a new transaction client.

Source

pub async fn submit_message<M>( &self, message: M, cfg: TxConfig, ) -> Result<TxInfo, Error>
where M: IntoAny,

Submit given message to celestia network.

When no gas price is specified through config, it will automatically handle updating client’s gas price when consensus updates minimal gas price.

§Example
use celestia_grpc::{TxClient, TxConfig};
use celestia_proto::cosmos::bank::v1beta1::MsgSend;
use celestia_types::state::{AccAddress, Coin};
use tendermint::crypto::default::ecdsa_secp256k1::SigningKey;

let signing_key = SigningKey::random(&mut rand_core::OsRng);
let public_key = *signing_key.verifying_key();
let address = AccAddress::new(public_key.into()).into();
let grpc_url = "public-celestia-mocha4-consensus.numia.xyz:9090";

let tx_client = TxClient::with_url(grpc_url, &address, public_key, signing_key)
    .await
    .unwrap();

let msg = MsgSend {
    from_address: address.to_string(),
    to_address: "celestia169s50psyj2f4la9a2235329xz7rk6c53zhw9mm".to_string(),
    amount: vec![Coin::utia(12345).into()],
};

tx_client
    .submit_message(msg.clone(), TxConfig::default())
    .await
    .unwrap();
Source

pub async fn submit_blobs( &self, blobs: &[Blob], cfg: TxConfig, ) -> Result<TxInfo, Error>

Submit given blobs to celestia network.

When no gas price is specified through config, it will automatically handle updating client’s gas price when consensus updates minimal gas price.

§Example
use celestia_grpc::{TxClient, TxConfig};
use celestia_types::state::{AccAddress, Coin};
use celestia_types::{AppVersion, Blob};
use celestia_types::nmt::Namespace;
use tendermint::crypto::default::ecdsa_secp256k1::SigningKey;

let signing_key = SigningKey::random(&mut rand_core::OsRng);
let public_key = *signing_key.verifying_key();
let address = AccAddress::new(public_key.into()).into();
let grpc_url = "public-celestia-mocha4-consensus.numia.xyz:9090";

let tx_client = TxClient::with_url(grpc_url, &address, public_key, signing_key)
    .await
    .unwrap();

let ns = Namespace::new_v0(b"abcd").unwrap();
let blob = Blob::new(ns, "some data".into(), AppVersion::V3).unwrap();

tx_client
    .submit_blobs(&[blob], TxConfig::default())
    .await
    .unwrap();
Source

pub fn last_seen_gas_price(&self) -> f64

Get most recent minimal gas price seen by the client

Source

pub fn chain_id(&self) -> &Id

Get client’s chain id

Source

pub fn app_version(&self) -> AppVersion

Get client’s app version

Source§

impl<S> TxClient<Client, S>
where S: DocSigner,

Source

pub async fn with_grpcweb_url( url: impl Into<String>, account_address: &Address, account_pubkey: VerifyingKey<Secp256k1>, signer: S, ) -> Result<TxClient<Client, S>, Error>

Create a new client connected to the given url with default settings of tonic_web_wasm_client::Client.

Methods from Deref<Target = GrpcClient<T>>§

Source

pub async fn get_auth_params(&self) -> Result<Params, Error>

Get auth params

Source

pub async fn get_account(&self, account: &Address) -> Result<Account, Error>

Get account

Source

pub async fn get_accounts(&self) -> Result<Vec<Account>, Error>

Get accounts

Source

pub async fn get_balance( &self, address: &Address, denom: impl Into<String>, ) -> Result<Coin, Error>

Get balance of coins with given denom

Source

pub async fn get_all_balances( &self, address: &Address, ) -> Result<Vec<Coin>, Error>

Get balance of all coins

Source

pub async fn get_spendable_balances( &self, address: &Address, ) -> Result<Vec<Coin>, Error>

Get balance of all spendable coins

Source

pub async fn get_total_supply(&self) -> Result<Vec<Coin>, Error>

Get total supply

Source

pub async fn get_min_gas_price(&self) -> Result<f64, Error>

Get Minimum Gas price

Source

pub async fn get_latest_block(&self) -> Result<Block, Error>

Get latest block

Source

pub async fn get_block_by_height(&self, height: i64) -> Result<Block, Error>

Get block by height

Source

pub async fn broadcast_tx( &self, tx_bytes: Vec<u8>, mode: BroadcastMode, ) -> Result<TxResponse, Error>

Broadcast prepared and serialised transaction

Source

pub async fn get_tx(&self, hash: Hash) -> Result<GetTxResponse, Error>

Get Tx

Source

pub async fn simulate(&self, tx_bytes: Vec<u8>) -> Result<GasInfo, Error>

Broadcast prepared and serialised transaction

Source

pub async fn get_blob_params(&self) -> Result<BlobParams, Error>

Get blob params

Source

pub async fn tx_status(&self, hash: Hash) -> Result<TxStatusResponse, Error>

Get status of the transaction

Trait Implementations§

Source§

impl<T, S> Debug for TxClient<T, S>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl<T, S> Deref for TxClient<T, S>

Source§

type Target = GrpcClient<T>

The resulting type after dereferencing.
Source§

fn deref(&self) -> &<TxClient<T, S> as Deref>::Target

Dereferences the value.

Auto Trait Implementations§

§

impl<T, S> !Freeze for TxClient<T, S>

§

impl<T, S> !RefUnwindSafe for TxClient<T, S>

§

impl<T, S> Send for TxClient<T, S>
where S: Send, T: Send,

§

impl<T, S> Sync for TxClient<T, S>
where S: Sync, T: Sync,

§

impl<T, S> Unpin for TxClient<T, S>
where S: Unpin, T: Unpin,

§

impl<T, S> UnwindSafe for TxClient<T, S>
where S: UnwindSafe, T: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<S> CondSend for S

Source§

impl<S> CondSync for S

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> MaybeSendSync for T