kona_sources/signer/
mod.rs1use alloy_primitives::{Address, ChainId};
9use alloy_signer::{Signature, SignerSync};
10use derive_more::From;
11use op_alloy_rpc_types_engine::PayloadHash;
12use std::fmt::Debug;
13
14mod remote;
15pub use remote::{
16 CertificateError, ClientCert, RemoteSigner, RemoteSignerError, RemoteSignerHandler,
17 RemoteSignerStartError,
18};
19
20#[derive(Debug, Clone, From)]
22pub enum BlockSigner {
23 Local(#[from] alloy_signer_local::PrivateKeySigner),
25 Remote(#[from] RemoteSigner),
27}
28
29#[derive(Debug)]
31pub enum BlockSignerHandler {
32 Local(alloy_signer_local::PrivateKeySigner),
34 Remote(RemoteSignerHandler),
36}
37
38#[derive(Debug, thiserror::Error)]
40pub enum BlockSignerStartError {
41 #[error(transparent)]
43 Local(#[from] alloy_signer::Error),
44 #[error(transparent)]
46 Remote(#[from] RemoteSignerStartError),
47}
48
49#[derive(Debug, thiserror::Error)]
51pub enum BlockSignerError {
52 #[error(transparent)]
54 Local(#[from] alloy_signer::Error),
55 #[error(transparent)]
57 Remote(#[from] RemoteSignerError),
58}
59
60impl BlockSigner {
61 pub async fn start(self) -> Result<BlockSignerHandler, BlockSignerStartError> {
63 match self {
64 Self::Local(signer) => Ok(BlockSignerHandler::Local(signer)),
65 Self::Remote(signer) => Ok(BlockSignerHandler::Remote(signer.start().await?)),
66 }
67 }
68}
69
70impl BlockSignerHandler {
71 pub async fn sign_block(
73 &self,
74 payload_hash: PayloadHash,
75 chain_id: ChainId,
76 sender_address: Address,
77 ) -> Result<Signature, BlockSignerError> {
78 let signature = match self {
79 Self::Local(signer) => {
80 signer.sign_hash_sync(&payload_hash.signature_message(chain_id))?
81 }
82 Self::Remote(signer) => {
83 signer.sign_block_v1(payload_hash, chain_id, sender_address).await?
84 }
85 };
86
87 Ok(signature)
88 }
89}