pub(crate) mod account_id;
mod block;
use super::{GearApi, Result};
use crate::Error;
use account_id::IntoAccountId32;
use gear_core::{ids::*, message::UserStoredMessage};
use gsdk::{
ext::{sp_runtime::AccountId32, subxt::utils::H256},
gear::runtime_types::{
gear_common::storage::primitives::Interval, pallet_balances::types::AccountData,
pallet_gear_bank::pallet::BankAccount,
},
};
use sp_core::crypto::Ss58Codec;
impl GearApi {
pub async fn get_mailbox_message(
&self,
message_id: MessageId,
) -> Result<Option<(UserStoredMessage, Interval<u32>)>> {
self.get_mailbox_account_message(self.0.account_id(), message_id)
.await
}
pub async fn get_mailbox_account_message(
&self,
account_id: impl IntoAccountId32,
message_id: MessageId,
) -> Result<Option<(UserStoredMessage, Interval<u32>)>> {
Ok(self
.0
.api()
.get_mailbox_account_message(account_id.into_account_id(), message_id)
.await?)
}
pub async fn get_mailbox_account_messages(
&self,
account_id: impl IntoAccountId32,
count: usize,
) -> Result<Vec<(UserStoredMessage, Interval<u32>)>> {
Ok(self
.0
.api()
.mailbox(Some(account_id.into_account_id()), count)
.await?)
}
pub async fn get_mailbox_messages(
&self,
count: usize,
) -> Result<Vec<(UserStoredMessage, Interval<u32>)>> {
self.get_mailbox_account_messages(self.0.account_id(), count)
.await
}
pub(crate) async fn account_data(
&self,
account_id: impl IntoAccountId32,
) -> Result<AccountData<u128>> {
self.account_data_at(account_id, None).await
}
pub(crate) async fn account_data_at(
&self,
account_id: impl IntoAccountId32,
block_hash: Option<H256>,
) -> Result<AccountData<u128>> {
Ok(self
.0
.api()
.info_at(&account_id.into_account_id().to_ss58check(), block_hash)
.await?
.data)
}
pub(crate) async fn bank_data_at(
&self,
account_id: impl IntoAccountId32,
block_hash: Option<H256>,
) -> Result<BankAccount<u128>> {
Ok(self
.0
.api()
.bank_info_at(account_id.into_account_id(), block_hash)
.await?)
}
pub async fn bank_address(&self) -> Result<AccountId32> {
Ok(self.0.api().bank_address().await?)
}
pub async fn total_balance(&self, account_id: impl IntoAccountId32) -> Result<u128> {
let data = self.account_data(account_id).await?;
data.free
.checked_add(data.reserved)
.ok_or(Error::BalanceOverflow)
}
pub async fn free_balance(&self, account_id: impl IntoAccountId32) -> Result<u128> {
let data = self.account_data(account_id).await?;
Ok(data.free)
}
pub async fn reserved_balance(&self, account_id: impl IntoAccountId32) -> Result<u128> {
let data = self.account_data(account_id).await?;
Ok(data.reserved)
}
}