use crate::B256;
use crate::client::records::{Block, Receipt, Transaction};
use crate::client::rpc::query::{json, tag, word};
use crate::client::rpc::{BlockTag, Query};
use crate::utils::{Json, hex};
#[must_use]
pub fn receipt(hash: B256) -> Query<Option<Receipt>> {
Query::new("eth_getTransactionReceipt", vec![word(hash)], json)
}
#[must_use]
pub fn transaction(hash: B256) -> Query<Option<Transaction>> {
Query::new("eth_getTransactionByHash", vec![word(hash)], json)
}
#[must_use]
pub fn block(block: BlockTag, full: bool) -> Query<Option<Block>> {
Query::new("eth_getBlockByNumber", vec![tag(block), Json::Bool(full)], json)
}
#[must_use]
pub fn block_by_hash(hash: B256, full: bool) -> Query<Option<Block>> {
Query::new("eth_getBlockByHash", vec![word(hash), Json::Bool(full)], json)
}
#[must_use]
pub fn block_receipts(block: BlockTag) -> Query<Option<Vec<Receipt>>> {
Query::new("eth_getBlockReceipts", vec![tag(block)], json)
}
#[must_use]
pub fn send_raw_transaction_sync(raw: &[u8], timeout_ms: Option<u64>) -> Query<Receipt> {
let mut params = vec![Json::String(hex::encode_prefixed(raw))];
if let Some(timeout) = timeout_ms {
params.push(Json::Number(timeout.to_string()));
}
Query::new("eth_sendRawTransactionSync", params, json)
}
#[must_use]
pub fn client_version() -> Query<String> {
Query::new("web3_clientVersion", Vec::new(), json)
}
#[must_use]
pub fn net_version() -> Query<String> {
Query::new("net_version", Vec::new(), json)
}