avail_rust_core/runtime_api/
mod.rs

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