avail_rust_core/rpc/
runtime_api.rs

1use 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}