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: AtomicUsize
Implementations§
Source§impl Signer
impl Signer
Sourcepub fn new<T: SignerTrait + Send + Sync + 'static>(
signer: T,
) -> Result<Arc<Self>, SignerError>
pub fn new<T: SignerTrait + Send + Sync + 'static>( signer: T, ) -> Result<Arc<Self>, SignerError>
Creates a new signer and instantiates nonce cache.
Sourcepub async fn add_signer_to_pool<T: SignerTrait + Send + Sync + 'static>(
&self,
signer: T,
) -> Result<(), SignerError>
pub async fn add_signer_to_pool<T: SignerTrait + Send + Sync + 'static>( &self, signer: T, ) -> Result<(), SignerError>
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 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<SecretKeySigner, SecretError>
pub fn from_seed_phrase( seed_phrase: &str, password: Option<&str>, ) -> Result<SecretKeySigner, SecretError>
Creates a SecretKeySigner using seed phrase with default HD path.
Sourcepub fn from_secret_key(secret_key: SecretKey) -> SecretKeySigner
pub fn from_secret_key(secret_key: SecretKey) -> SecretKeySigner
Creates a SecretKeySigner using a secret key.
Sourcepub fn from_seed_phrase_with_hd_path(
seed_phrase: &str,
hd_path: BIP32Path,
password: Option<&str>,
) -> Result<SecretKeySigner, SecretError>
pub fn from_seed_phrase_with_hd_path( seed_phrase: &str, hd_path: BIP32Path, password: Option<&str>, ) -> Result<SecretKeySigner, SecretError>
Creates a SecretKeySigner using seed phrase with a custom HD path.
Sourcepub fn from_access_keyfile(
path: PathBuf,
) -> Result<SecretKeySigner, AccessKeyFileError>
pub fn from_access_keyfile( path: PathBuf, ) -> Result<SecretKeySigner, AccessKeyFileError>
Creates a SecretKeySigner using a path to the access key file.
Sourcepub fn from_ledger() -> LedgerSigner
pub fn from_ledger() -> LedgerSigner
Creates a LedgerSigner using default HD path.
Sourcepub const fn from_ledger_with_hd_path(hd_path: BIP32Path) -> LedgerSigner
pub const fn from_ledger_with_hd_path(hd_path: BIP32Path) -> LedgerSigner
Creates a LedgerSigner using a custom HD path.
Sourcepub fn from_keystore(pub_key: PublicKey) -> KeystoreSigner
pub fn from_keystore(pub_key: PublicKey) -> KeystoreSigner
Creates a KeystoreSigner with predefined public key.
Sourcepub async fn from_keystore_with_search_for_keys(
account_id: AccountId,
network: &NetworkConfig,
) -> Result<KeystoreSigner, KeyStoreError>
pub async fn from_keystore_with_search_for_keys( account_id: AccountId, network: &NetworkConfig, ) -> Result<KeystoreSigner, KeyStoreError>
Creates a KeystoreSigner. The provided function will query provided account for public keys and search in the system keychain for the corresponding secret keys.
Sourcepub fn from_workspace(account: &Account) -> SecretKeySigner
pub fn from_workspace(account: &Account) -> SecretKeySigner
Creates a SecretKeySigner from a near_workspaces::Account for testing purposes.
Sourcepub async fn get_public_key(&self) -> Result<PublicKey, SignerError>
pub async fn get_public_key(&self) -> Result<PublicKey, SignerError>
Retrieves the public key from the pool of signers. The public key is rotated on each call.
pub async fn sign_meta( &self, tr: PrepopulateTransaction, public_key: PublicKey, nonce: Nonce, block_hash: CryptoHash, max_block_height: BlockHeight, ) -> Result<SignedDelegateAction, MetaSignError>
pub async fn sign( &self, tr: PrepopulateTransaction, public_key: PublicKey, nonce: Nonce, block_hash: CryptoHash, ) -> Result<SignedTransaction, SignerError>
Auto Trait Implementations§
impl !Freeze for Signer
impl !RefUnwindSafe for Signer
impl Send for Signer
impl Sync for Signer
impl Unpin for Signer
impl !UnwindSafe for Signer
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.