pub enum ArchSigner {
Local(LocalSigner),
Remote(RemoteSigner),
}Expand description
A signer whose backend, local or remote, is chosen at runtime.
Variants§
Local(LocalSigner)
In-process signing with a LocalSigner.
Remote(RemoteSigner)
Proxy-delegated signing with a RemoteSigner.
Implementations§
Source§impl ArchSigner
impl ArchSigner
Sourcepub fn local(keypair: UntweakedKeypair) -> Self
pub fn local(keypair: UntweakedKeypair) -> Self
Wraps keypair as a LocalSigner.
Sourcepub fn local_from_key_file(path: &str) -> Result<Self, SignError>
pub fn local_from_key_file(path: &str) -> Result<Self, SignError>
Loads a LocalSigner from a key file.
§Errors
SignError::Config as described on LocalSigner::from_key_file.
Sourcepub fn remote(url: &str, token: &str, role: &str, pubkey: Pubkey) -> Self
pub fn remote(url: &str, token: &str, role: &str, pubkey: Pubkey) -> Self
Creates a RemoteSigner for role at the proxy base url.
Sourcepub fn from_env() -> Result<Self, SignError>
pub fn from_env() -> Result<Self, SignError>
Resolves a signer from bare environment variables.
Remote configuration reads COSIGNER_URL, COSIGNER_TOKEN,
COSIGNER_ROLE, and COSIGNER_PUBKEY (64 hex characters); local
configuration reads ARCH_KEY_PATH. Exactly one of COSIGNER_URL and
ARCH_KEY_PATH must be set, and empty values count as unset. The
network is not read from the environment: it defaults to Bitcoin and
is set with with_network.
§Errors
SignError::Config when neither or both backends are configured,
when a required remote variable is missing (the message names every
missing variable), or when COSIGNER_PUBKEY is not 64 hex characters.
§Examples
use cosigner_client::ArchSigner;
let signer = ArchSigner::from_env()?.with_intent("sweep");Sourcepub fn from_prefixed_env(prefix: &str) -> Result<Self, SignError>
pub fn from_prefixed_env(prefix: &str) -> Result<Self, SignError>
Resolves a signer from {prefix}_-prefixed environment variables,
falling back to the bare names.
Each variable from from_env is first looked up as
{prefix}_{NAME}. The backend is chosen at the most specific level
that sets a backend-selecting variable ({prefix}_COSIGNER_URL or
{prefix}_ARCH_KEY_PATH); when the prefixed level sets neither, the
bare level decides. After the backend is chosen, every variable fills
per-variable with the prefixed value first, so one bare COSIGNER_URL
can serve several prefixed tokens. Trailing underscores in prefix
are ignored, and an empty prefix behaves exactly like
from_env.
§Errors
SignError::Config under the conditions listed on
from_env, with the ambiguity check applied at the
deciding level.
Sourcepub fn with_network(self, network: Network) -> Self
pub fn with_network(self, network: Network) -> Self
Returns this signer with network applied to either variant.
Sourcepub fn with_intent(self, intent: &str) -> Self
pub fn with_intent(self, intent: &str) -> Self
Returns this signer with the intent label set on the remote variant; no-op for a local signer.
Sourcepub fn with_retries(self, retries: u32) -> Self
pub fn with_retries(self, retries: u32) -> Self
Returns this signer with the retry budget set on the remote variant; no-op for a local signer.
Sourcepub fn with_timeout(self, timeout: Duration) -> Self
pub fn with_timeout(self, timeout: Duration) -> Self
Returns this signer with the HTTP timeout set on the remote variant; no-op for a local signer.
Sourcepub fn as_local(&self) -> Option<&LocalSigner>
pub fn as_local(&self) -> Option<&LocalSigner>
Returns the local variant, if any.
Sourcepub fn as_remote(&self) -> Option<&RemoteSigner>
pub fn as_remote(&self) -> Option<&RemoteSigner>
Returns the remote variant, if any.
Trait Implementations§
Source§impl ArchSignerT for ArchSigner
impl ArchSignerT for ArchSigner
Source§fn sign_message<'life0, 'life1, 'async_trait>(
&'life0 self,
message: &'life1 ArchMessage,
) -> Pin<Box<dyn Future<Output = Result<SignResponse, SignError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn sign_message<'life0, 'life1, 'async_trait>(
&'life0 self,
message: &'life1 ArchMessage,
) -> Pin<Box<dyn Future<Output = Result<SignResponse, SignError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn sign_messages<'life0, 'life1, 'async_trait>(
&'life0 self,
messages: &'life1 [ArchMessage],
) -> Pin<Box<dyn Future<Output = Result<Vec<Result<SignResponse, SignError>>, SignError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn sign_messages<'life0, 'life1, 'async_trait>(
&'life0 self,
messages: &'life1 [ArchMessage],
) -> Pin<Box<dyn Future<Output = Result<Vec<Result<SignResponse, SignError>>, SignError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
messages, returning one result per input in
input order. Read moreSource§fn sign_transaction<'life0, 'async_trait>(
&'life0 self,
message: ArchMessage,
) -> Pin<Box<dyn Future<Output = Result<RuntimeTransaction, SignError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn sign_transaction<'life0, 'async_trait>(
&'life0 self,
message: ArchMessage,
) -> Pin<Box<dyn Future<Output = Result<RuntimeTransaction, SignError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn sign_transaction_mixed<'life0, 'life1, 'async_trait>(
&'life0 self,
message: ArchMessage,
local_cosigners: &'life1 [UntweakedKeypair],
) -> Pin<Box<dyn Future<Output = Result<RuntimeTransaction, SignError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn sign_transaction_mixed<'life0, 'life1, 'async_trait>(
&'life0 self,
message: ArchMessage,
local_cosigners: &'life1 [UntweakedKeypair],
) -> Pin<Box<dyn Future<Output = Result<RuntimeTransaction, SignError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§impl Clone for ArchSigner
impl Clone for ArchSigner
Source§fn clone(&self) -> ArchSigner
fn clone(&self) -> ArchSigner
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more