near_jsonrpc_client/methods/experimental/tx_status.rs
1//! Queries the status of a transaction.
2//!
3//! ## Example
4//!
5//! Returns the final transaction result for
6//! <https://explorer.near.org/transactions/B9aypWiMuiWR5kqzewL9eC96uZWA3qCMhLe67eBMWacq>
7//!
8//! ```
9//! use near_jsonrpc_client::{methods, JsonRpcClient};
10//! use near_primitives::views::TxExecutionStatus;
11//!
12//! # #[tokio::main]
13//! # async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
14//! let client = JsonRpcClient::connect("https://archival-rpc.mainnet.fastnear.com");
15//! let tx_hash = "B9aypWiMuiWR5kqzewL9eC96uZWA3qCMhLe67eBMWacq".parse()?;
16//!
17//! let request = methods::EXPERIMENTAL_tx_status::RpcTransactionStatusRequest {
18//! transaction_info: methods::EXPERIMENTAL_tx_status::TransactionInfo::TransactionId {
19//! tx_hash,
20//! sender_account_id: "itranscend.near".parse()?,
21//! },
22//! wait_until: TxExecutionStatus::Executed,
23//! };
24//!
25//! let response = client.call(request).await?;
26//!
27//! assert!(matches!(
28//! response,
29//! near_jsonrpc_primitives::types::transactions::RpcTransactionResponse { .. }
30//! ));
31//! # Ok(())
32//! # }
33//! ```
34use super::*;
35
36pub use near_jsonrpc_primitives::types::transactions::RpcTransactionError;
37pub use near_jsonrpc_primitives::types::transactions::RpcTransactionResponse;
38pub use near_jsonrpc_primitives::types::transactions::TransactionInfo;
39
40#[derive(Debug)]
41pub struct RpcTransactionStatusRequest {
42 pub transaction_info: TransactionInfo,
43 pub wait_until: near_primitives::views::TxExecutionStatus,
44}
45
46impl From<RpcTransactionStatusRequest>
47 for near_jsonrpc_primitives::types::transactions::RpcTransactionStatusRequest
48{
49 fn from(this: RpcTransactionStatusRequest) -> Self {
50 Self {
51 transaction_info: this.transaction_info,
52 wait_until: this.wait_until,
53 }
54 }
55}
56impl RpcMethod for RpcTransactionStatusRequest {
57 type Response = RpcTransactionResponse;
58 type Error = RpcTransactionError;
59
60 fn method_name(&self) -> &str {
61 "EXPERIMENTAL_tx_status"
62 }
63
64 fn params(&self) -> Result<serde_json::Value, io::Error> {
65 Ok(match &self.transaction_info {
66 TransactionInfo::Transaction { signed_tx } => {
67 json!({
68 "signed_tx_base64": common::serialize_signed_transaction(signed_tx)?,
69 "wait_until": self.wait_until
70 })
71 }
72 TransactionInfo::TransactionId {
73 tx_hash,
74 sender_account_id,
75 } => {
76 json!({
77 "tx_hash": tx_hash,
78 "sender_account_id": sender_account_id,
79 "wait_until": self.wait_until
80 })
81 }
82 })
83 }
84}
85
86impl private::Sealed for RpcTransactionStatusRequest {}