pub struct Signer {
pool: RwLock<HashMap<PublicKey, Box<dyn SignerTrait + Send + Sync + 'static>>>,
nonce_cache: RwLock<HashMap<(AccountId, PublicKey), AtomicU64>>,
current_public_key: AtomicUsize,
}Expand description
A Signer is a wrapper around a single or multiple signer implementations of SignerTrait.
It provides an access key pooling and a nonce caching mechanism to improve transaction throughput.
Fields§
§pool: RwLock<HashMap<PublicKey, Box<dyn SignerTrait + Send + Sync + 'static>>>§nonce_cache: RwLock<HashMap<(AccountId, PublicKey), AtomicU64>>§current_public_key: AtomicUsizeImplementations§
Source§impl Signer
impl Signer
Sourcepub fn new<T: SignerTrait + Send + Sync + 'static>(
signer: T,
) -> Result<Arc<Self>, PublicKeyError>
pub fn new<T: SignerTrait + Send + Sync + 'static>( signer: T, ) -> Result<Arc<Self>, PublicKeyError>
Creates a new signer and instantiates nonce cache.
Sourcepub async fn add_signer_to_pool<T: SignerTrait + Send + Sync + 'static>(
&self,
signer: T,
) -> Result<(), PublicKeyError>
pub async fn add_signer_to_pool<T: SignerTrait + Send + Sync + 'static>( &self, signer: T, ) -> Result<(), PublicKeyError>
Adds a signer to the pool of signers. The Signer will rotate the provided implementation of SignerTrait on each call to get_public_key.
Sourcepub async fn add_secret_key_to_pool(
&self,
secret_key: SecretKey,
) -> Result<(), PublicKeyError>
pub async fn add_secret_key_to_pool( &self, secret_key: SecretKey, ) -> Result<(), PublicKeyError>
Adds a secret key to the signing pool.
This is a convenience method for adding additional keys to the pool to enable concurrent transaction signing and nonce management across multiple keys.
Sourcepub async fn add_seed_phrase_to_pool(
&self,
seed_phrase: &str,
password: Option<&str>,
) -> Result<(), SignerError>
pub async fn add_seed_phrase_to_pool( &self, seed_phrase: &str, password: Option<&str>, ) -> Result<(), SignerError>
Adds a seed phrase-derived key to the signing pool with default HD path.
This is a convenience method for adding additional keys to the pool to enable concurrent transaction signing and nonce management across multiple keys.
Sourcepub async fn add_seed_phrase_to_pool_with_hd_path(
&self,
seed_phrase: &str,
hd_path: BIP32Path,
password: Option<&str>,
) -> Result<(), SignerError>
pub async fn add_seed_phrase_to_pool_with_hd_path( &self, seed_phrase: &str, hd_path: BIP32Path, password: Option<&str>, ) -> Result<(), SignerError>
Adds a seed phrase-derived key to the signing pool with a custom HD path.
This is a convenience method for adding additional keys to the pool to enable concurrent transaction signing and nonce management across multiple keys.
Sourcepub async fn add_access_keyfile_to_pool(
&self,
path: PathBuf,
) -> Result<(), AccessKeyFileError>
pub async fn add_access_keyfile_to_pool( &self, path: PathBuf, ) -> Result<(), AccessKeyFileError>
Adds a key from an access key file to the signing pool.
This is a convenience method for adding additional keys to the pool to enable concurrent transaction signing and nonce management across multiple keys.
Sourcepub async fn add_ledger_to_pool(&self) -> Result<(), PublicKeyError>
pub async fn add_ledger_to_pool(&self) -> Result<(), PublicKeyError>
Adds a Ledger hardware wallet signer to the pool with default HD path.
This is a convenience method for adding additional keys to the pool to enable concurrent transaction signing and nonce management across multiple keys.
Sourcepub async fn add_ledger_to_pool_with_hd_path(
&self,
hd_path: BIP32Path,
) -> Result<(), PublicKeyError>
pub async fn add_ledger_to_pool_with_hd_path( &self, hd_path: BIP32Path, ) -> Result<(), PublicKeyError>
Adds a Ledger hardware wallet signer to the pool with a custom HD path.
This is a convenience method for adding additional keys to the pool to enable concurrent transaction signing and nonce management across multiple keys.
Sourcepub async fn add_keystore_to_pool(
&self,
pub_key: PublicKey,
) -> Result<(), PublicKeyError>
pub async fn add_keystore_to_pool( &self, pub_key: PublicKey, ) -> Result<(), PublicKeyError>
Adds a keystore signer to the pool with a predefined public key.
This is a convenience method for adding additional keys to the pool to enable concurrent transaction signing and nonce management across multiple keys.
Sourcepub async fn fetch_tx_nonce(
&self,
account_id: AccountId,
public_key: PublicKey,
network: &NetworkConfig,
) -> Result<(Nonce, CryptoHash, BlockHeight), SignerError>
pub async fn fetch_tx_nonce( &self, account_id: AccountId, public_key: PublicKey, network: &NetworkConfig, ) -> Result<(Nonce, CryptoHash, BlockHeight), SignerError>
Fetches the transaction nonce and block hash associated to the access key. Internally caches the nonce as to not need to query for it every time, and ending up having to run into contention with others.
Sourcepub fn from_seed_phrase(
seed_phrase: &str,
password: Option<&str>,
) -> Result<Arc<Self>, SecretError>
pub fn from_seed_phrase( seed_phrase: &str, password: Option<&str>, ) -> Result<Arc<Self>, SecretError>
Creates a Signer using seed phrase with default HD path.
Sourcepub fn from_secret_key(
secret_key: SecretKey,
) -> Result<Arc<Self>, PublicKeyError>
pub fn from_secret_key( secret_key: SecretKey, ) -> Result<Arc<Self>, PublicKeyError>
Creates a Signer using a secret key.
Sourcepub fn from_seed_phrase_with_hd_path(
seed_phrase: &str,
hd_path: BIP32Path,
password: Option<&str>,
) -> Result<Arc<Self>, SecretError>
pub fn from_seed_phrase_with_hd_path( seed_phrase: &str, hd_path: BIP32Path, password: Option<&str>, ) -> Result<Arc<Self>, SecretError>
Creates a Signer using seed phrase with a custom HD path.
Sourcepub fn from_access_keyfile(
path: PathBuf,
) -> Result<Arc<Self>, AccessKeyFileError>
pub fn from_access_keyfile( path: PathBuf, ) -> Result<Arc<Self>, AccessKeyFileError>
Creates a Signer using a path to the access key file.
Sourcepub fn from_ledger() -> Result<Arc<Self>, PublicKeyError>
pub fn from_ledger() -> Result<Arc<Self>, PublicKeyError>
Creates a Signer using Ledger hardware wallet with default HD path.
Sourcepub fn from_ledger_with_hd_path(
hd_path: BIP32Path,
) -> Result<Arc<Self>, PublicKeyError>
pub fn from_ledger_with_hd_path( hd_path: BIP32Path, ) -> Result<Arc<Self>, PublicKeyError>
Creates a Signer using Ledger hardware wallet with a custom HD path.
Sourcepub fn from_keystore(pub_key: PublicKey) -> Result<Arc<Self>, PublicKeyError>
pub fn from_keystore(pub_key: PublicKey) -> Result<Arc<Self>, PublicKeyError>
Creates a Signer with keystore using a predefined public key.
Sourcepub async fn from_keystore_with_search_for_keys(
account_id: AccountId,
network: &NetworkConfig,
) -> Result<Arc<Self>, KeyStoreError>
pub async fn from_keystore_with_search_for_keys( account_id: AccountId, network: &NetworkConfig, ) -> Result<Arc<Self>, KeyStoreError>
Creates a Signer with keystore. The provided function will query provided account for public keys and search in the system keychain for the corresponding secret keys.
Sourcepub async fn get_public_key(&self) -> Result<PublicKey, PublicKeyError>
pub async fn get_public_key(&self) -> Result<PublicKey, PublicKeyError>
Retrieves the public key from the pool of signers. The public key is rotated on each call.
pub async fn sign_meta( &self, transaction: PrepopulateTransaction, public_key: PublicKey, nonce: Nonce, block_hash: CryptoHash, max_block_height: BlockHeight, ) -> Result<SignedDelegateAction, MetaSignError>
pub async fn sign( &self, transaction: PrepopulateTransaction, public_key: PublicKey, nonce: Nonce, block_hash: CryptoHash, ) -> Result<SignedTransaction, SignerError>
Sourcepub async fn sign_message_nep413(
&self,
signer_id: AccountId,
public_key: PublicKey,
payload: &NEP413Payload,
) -> Result<Signature, SignerError>
pub async fn sign_message_nep413( &self, signer_id: AccountId, public_key: PublicKey, payload: &NEP413Payload, ) -> Result<Signature, SignerError>
Signs a NEP413 message.
This is used for authentication and off-chain proof of account ownership.