avail_rust_core/rpc/
runtime_api.rs1use super::Error;
2use crate::types::substrate::{FeeDetails, RuntimeDispatchInfo};
3use primitive_types::H256;
4use subxt_rpcs::RpcClient;
5
6pub async fn call_raw<T: codec::Decode>(
7 client: &RpcClient,
8 method: &str,
9 data: &[u8],
10 at: Option<H256>,
11) -> Result<T, Error> {
12 let result: String = super::state::call(client, method, data, at).await?;
13 let result = const_hex::decode(result.trim_start_matches("0x")).map_err(Error::from)?;
14 let result = T::decode(&mut result.as_slice()).map_err(|e| Error::DecodingFailed(e.to_string()))?;
15
16 Ok(result)
17}
18
19pub async fn api_transaction_payment_query_info(
20 client: &RpcClient,
21 mut extrinsic: Vec<u8>,
22 at: Option<H256>,
23) -> Result<RuntimeDispatchInfo, Error> {
24 let len = extrinsic.len() as u32;
25 let bytes = len.to_ne_bytes();
26 extrinsic.extend_from_slice(&bytes);
27
28 call_raw(client, "TransactionPaymentApi_query_info", &extrinsic, at).await
29}
30
31pub async fn api_transaction_payment_query_fee_details(
32 client: &RpcClient,
33 mut extrinsic: Vec<u8>,
34 at: Option<H256>,
35) -> Result<FeeDetails, Error> {
36 let len = extrinsic.len() as u32;
37 let bytes = len.to_ne_bytes();
38 extrinsic.extend_from_slice(&bytes);
39
40 call_raw(client, "TransactionPaymentApi_query_fee_details", &extrinsic, at).await
41}
42
43pub async fn api_transaction_payment_query_call_info(
44 client: &RpcClient,
45 mut call: Vec<u8>,
46 at: Option<H256>,
47) -> Result<RuntimeDispatchInfo, Error> {
48 let len = call.len() as u32;
49 let bytes = len.to_ne_bytes();
50 call.extend_from_slice(&bytes);
51
52 call_raw(client, "TransactionPaymentCallApi_query_call_info", &call, at).await
53}
54
55pub async fn api_transaction_payment_query_call_fee_details(
56 client: &RpcClient,
57 mut call: Vec<u8>,
58 at: Option<H256>,
59) -> Result<FeeDetails, Error> {
60 let len = call.len() as u32;
61 let bytes = len.to_ne_bytes();
62 call.extend_from_slice(&bytes);
63
64 call_raw(client, "TransactionPaymentCallApi_query_call_fee_details", &call, at).await
65}