1use codec::{Decode, Encode};
26use sp_api::{ApiError, CallApiAt, CallApiAtParams, CallContext};
27use sp_runtime::{traits::Block as BlockT, AccountId32, MultiSignature, MultiSigner};
28
29fn call<Block, C, Args, R>(
30 client: &C,
31 at: Block::Hash,
32 method: &'static str,
33 args: Args,
34) -> Result<R, ApiError>
35where
36 Block: BlockT,
37 C: CallApiAt<Block>,
38 Args: Encode,
39 R: Decode,
40{
41 let raw = client.call_api_at(CallApiAtParams {
42 at,
43 function: method,
44 arguments: args.encode(),
45 overlayed_changes: &Default::default(),
46 call_context: CallContext::Offchain,
47 recorder: &None,
48 extensions: &Default::default(),
49 })?;
50 R::decode(&mut &*raw).map_err(|error| ApiError::FailedToDecodeReturnValue {
51 function: method,
52 error,
53 raw,
54 })
55}
56
57pub fn max_promotion_size<Block, C>(client: &C, at: Block::Hash) -> Result<u32, ApiError>
59where
60 Block: BlockT,
61 C: CallApiAt<Block>,
62{
63 call::<Block, _, _, _>(client, at, "HopRuntimeApi_max_promotion_size", ())
64}
65
66pub fn can_account_promote<Block, C>(
68 client: &C,
69 at: Block::Hash,
70 who: AccountId32,
71 data_len: u32,
72) -> Result<bool, ApiError>
73where
74 Block: BlockT,
75 C: CallApiAt<Block>,
76{
77 call::<Block, _, _, _>(client, at, "HopRuntimeApi_can_account_promote", (who, data_len))
78}
79
80pub fn create_promotion_extrinsic<Block, C>(
82 client: &C,
83 at: Block::Hash,
84 data: Vec<u8>,
85 signer: MultiSigner,
86 signature: MultiSignature,
87 submit_timestamp: u64,
88) -> Result<<Block as BlockT>::Extrinsic, ApiError>
89where
90 Block: BlockT,
91 C: CallApiAt<Block>,
92{
93 call::<Block, _, _, _>(
94 client,
95 at,
96 "HopRuntimeApi_create_promotion_extrinsic",
97 (data, signer, signature, submit_timestamp),
98 )
99}
100
101pub fn is_promoted_on_chain<Block, C>(
103 client: &C,
104 at: Block::Hash,
105 hash: [u8; 32],
106) -> Result<bool, ApiError>
107where
108 Block: BlockT,
109 C: CallApiAt<Block>,
110{
111 call::<Block, _, _, _>(client, at, "HopRuntimeApi_is_promoted_on_chain", hash)
112}