use crate::transaction::TransactionExecute;
use crate::{
AccountId,
AccountInfoQuery,
Client,
Error,
Key,
PublicKey,
Transaction,
};
async fn query_pk(client: &Client, account_id: AccountId) -> crate::Result<PublicKey> {
let key = AccountInfoQuery::new().account_id(account_id).execute(client).await?.key;
match key {
Key::Single(it) => Ok(it),
_ => {
Err(Error::signature_verify("`{account_id}`: unsupported key kind: {key:?}".to_owned()))
}
}
}
pub async fn verify_signature(
client: &Client,
account_id: AccountId,
msg: &[u8],
signature: &[u8],
) -> crate::Result<()> {
let key = query_pk(client, account_id).await?;
key.verify(msg, signature)
}
pub async fn verify_transaction_signature<D: TransactionExecute>(
client: &Client,
account_id: AccountId,
transaction: &mut Transaction<D>,
) -> crate::Result<()> {
let key = query_pk(client, account_id).await?;
key.verify_transaction(transaction)
}