11use alloy:: {
2- network:: { EthereumWallet , Network , ReceiptResponse } ,
2+ network:: { Network , ReceiptResponse } ,
33 primitives:: { Address , B256 } ,
44 providers:: { Provider , ProviderBuilder } ,
55 signers:: local:: PrivateKeySigner ,
@@ -21,8 +21,6 @@ use tendermint_light_client_verifier::Verdict;
2121use tracing:: { error, info, Instrument } ;
2222use tracing_subscriber:: EnvFilter ;
2323
24- use sp1_blobstream_script:: util:: signer:: MaybeWallet ;
25-
2624/////// Contract ///////
2725
2826sol ! {
@@ -621,31 +619,29 @@ async fn main() {
621619
622620 // Succinct deployments use the `CHAINS` environment variable.
623621 let config = ChainConfig :: fetch ( ) . expect ( "Failed to fetch chain config" ) ;
624- let maybe_private_key: Option < PrivateKeySigner > = env:: var ( "PRIVATE_KEY" )
625- . ok ( )
626- . map ( |s| s. parse ( ) . expect ( "Failed to parse PRIVATE_KEY" ) ) ;
627622
628623 // Set up the KMS relayer config.
629624 let signer_mode = env:: var ( "SIGNER_MODE" )
630625 . map ( |s| s. parse ( ) . expect ( "SIGNER_MODE failed to parse" ) )
631626 . unwrap_or ( SignerMode :: Kms ) ;
632627
633- // Ensure a signer is set if KMS relayer is false.
634- if matches ! ( signer_mode , SignerMode :: Local ) && maybe_private_key . is_none ( ) {
635- panic ! ( "PRIVATE_KEY is not set but signer mode is local." ) ;
628+ match signer_mode {
629+ SignerMode :: Local => run_with_wallet ( config ) . await ,
630+ SignerMode :: Kms => run_with_kms_relayer ( config ) . await ,
636631 }
632+ }
637633
638- // Set up the signer.
639- let signer = MaybeWallet :: new ( maybe_private_key. map ( EthereumWallet :: new) ) ;
634+ async fn run_with_wallet ( config : Vec < ChainConfig > ) {
635+ let key = env:: var ( "PRIVATE_KEY" ) . expect ( "PRIVATE_KEY not set" ) ;
636+ let signer: PrivateKeySigner = key. parse ( ) . expect ( "Failed to parse PRIVATE_KEY" ) ;
640637
641- // Set up the prover and program keys.
642638 let prover = ProverClient :: builder ( ) . network ( ) . build ( ) ;
643639 let ( pk, vk) = prover. setup ( TENDERMINT_ELF ) ;
644640
645641 let client = TendermintRPCClient :: default ( ) ;
646642
647- let mut operator = SP1BlobstreamOperator :: new ( pk , vk , client , signer_mode , Arc :: new ( prover ) ) ;
648-
643+ let mut operator =
644+ SP1BlobstreamOperator :: new ( pk , vk , client , SignerMode :: Local , Arc :: new ( prover ) ) ;
649645 for ( i, c) in config. iter ( ) . enumerate ( ) {
650646 let url: Url = c. rpc_url . parse ( ) . expect ( "Failed to parse RPC URL" ) ;
651647 tracing:: info!( "Adding chain {:?} to operator" , url. domain( ) ) ;
@@ -660,3 +656,25 @@ async fn main() {
660656
661657 operator. run ( ) . await ;
662658}
659+
660+ async fn run_with_kms_relayer ( config : Vec < ChainConfig > ) {
661+ let prover = ProverClient :: builder ( ) . network ( ) . build ( ) ;
662+ let ( pk, vk) = prover. setup ( TENDERMINT_ELF ) ;
663+
664+ let client = TendermintRPCClient :: default ( ) ;
665+
666+ let mut operator =
667+ SP1BlobstreamOperator :: new ( pk, vk, client, SignerMode :: Kms , Arc :: new ( prover) ) ;
668+
669+ for ( i, c) in config. iter ( ) . enumerate ( ) {
670+ let url: Url = c. rpc_url . parse ( ) . expect ( "Failed to parse RPC URL" ) ;
671+ tracing:: info!( "Adding chain {:?} to operator" , url. domain( ) ) ;
672+ tracing:: info!( "Chain {} of {}" , i + 1 , config. len( ) ) ;
673+
674+ let provider = ProviderBuilder :: new ( ) . connect_http ( url) ;
675+
676+ operator = operator. with_chain ( provider, c. blobstream_address ) . await ;
677+ }
678+
679+ operator. run ( ) . await ;
680+ }
0 commit comments