wasi_sol/core/
traits.rs

1#![allow(async_fn_in_trait)]
2
3use anyhow::Result;
4
5use solana_client_wasm::WasmClient as RpcClient;
6use solana_sdk::{pubkey::Pubkey, signature::Signature, transaction::Transaction};
7use std::sync::Arc;
8
9use crate::core::{
10    error::WalletError, transaction::TransactionOrVersionedTransaction, wallet::WalletReadyState,
11};
12
13pub trait WalletAdapterEvents {
14    fn emit_connect(&mut self, public_key: Pubkey);
15    fn emit_disconnect(&mut self);
16    fn emit_error(&mut self, error: WalletError);
17    fn ready_state_change(&mut self, ready_state: WalletReadyState);
18    fn emit_transaction_sent(&mut self, signature: Signature);
19}
20
21pub trait WalletAdapter: WalletAdapterEvents + Send + Sync {
22    fn name(&self) -> String;
23    fn url(&self) -> String;
24    fn icon(&self) -> String;
25    fn ready_state(&self) -> WalletReadyState;
26    fn public_key(&self) -> Option<Pubkey>;
27    fn connecting(&self) -> bool;
28    fn connected(&self) -> bool {
29        self.public_key().is_some()
30    }
31    async fn auto_connect(&mut self) -> Result<bool, WalletError>;
32    async fn connect(&mut self) -> Result<bool, WalletError>;
33    async fn disconnect(&mut self) -> Result<bool, WalletError>;
34    async fn send_transaction(
35        &mut self,
36        client: Arc<RpcClient>,
37        transaction: TransactionOrVersionedTransaction,
38    ) -> Result<Signature, WalletError>;
39    async fn sign_transaction(
40        &mut self,
41        transaction: Transaction,
42    ) -> Result<Signature, WalletError>;
43    async fn sign_send_transaction(
44        &mut self,
45        transaction: Transaction,
46    ) -> Result<Signature, WalletError>;
47    async fn sign_message(&mut self, message: &str) -> Result<Signature, WalletError>;
48}
49
50pub trait SignerWalletAdapter: WalletAdapter {
51    async fn sign_transaction(&self, transaction: &mut Transaction) -> Result<()>;
52
53    async fn sign_all_transactions(&self, transactions: &mut [Transaction]) -> Result<()>;
54}
55
56pub trait MessageSignerWalletAdapter: SignerWalletAdapter {
57    async fn sign_message(&self, message: &[u8]) -> Result<Vec<u8>>;
58}
59
60pub trait SignInMessageSignerWalletAdapter: MessageSignerWalletAdapter {
61    async fn sign_in(&self) -> Result<()>;
62}