@@ -6,6 +6,8 @@ use mina_p2p_messages::v2::{
66 conv, LedgerHash , MinaBaseSignedCommandStableV2 , MinaBaseUserCommandStableV2 ,
77 MinaBaseZkappCommandTStableV1WireStableV1 , TokenIdKeyHash , TransactionHash ,
88} ;
9+ use mina_signer:: CompressedPubKey ;
10+ use node:: rpc:: RpcSnarkerConfig ;
911use node:: {
1012 account:: AccountPublicKey ,
1113 ledger:: read:: LedgerStatus ,
@@ -26,7 +28,7 @@ use openmina_core::{
2628 NetworkConfig ,
2729} ;
2830use openmina_node_common:: rpc:: RpcSender ;
29- use snark:: GraphQLPendingSnarkWork ;
31+ use snark:: { GraphQLPendingSnarkWork , GraphQLSnarkWorker } ;
3032use std:: str:: FromStr ;
3133use tokio:: sync:: OnceCell ;
3234use transaction:: GraphQLTransactionStatus ;
@@ -41,6 +43,9 @@ pub mod transaction;
4143pub mod user_command;
4244pub mod zkapp;
4345
46+ /// Base58 encoded public key
47+ pub type GraphQLPublicKey = String ;
48+
4449#[ derive( Debug , thiserror:: Error ) ]
4550pub enum Error {
4651 #[ error( "Conversion error: {0}" ) ]
@@ -534,6 +539,34 @@ impl Query {
534539 let res = BuildEnv :: get ( ) . git . commit_hash ;
535540 Ok ( res)
536541 }
542+
543+ async fn current_snark_worker (
544+ & self ,
545+ context : & Context ,
546+ ) -> juniper:: FieldResult < Option < GraphQLSnarkWorker > > {
547+ let config: Option < RpcSnarkerConfig > = context
548+ . rpc_sender
549+ . oneshot_request ( RpcRequest :: SnarkerConfig )
550+ . await
551+ . ok_or ( Error :: StateMachineEmptyResponse ) ?;
552+
553+ let Some ( config) = config else {
554+ return Ok ( None ) ;
555+ } ;
556+
557+ let account = context
558+ . load_account ( AccountId {
559+ public_key : CompressedPubKey :: try_from ( & config. public_key ) ?,
560+ token_id : TokenIdKeyHash :: default ( ) . into ( ) ,
561+ } )
562+ . await ;
563+
564+ Ok ( Some ( GraphQLSnarkWorker {
565+ key : config. public_key . to_string ( ) ,
566+ account,
567+ fee : config. fee . to_string ( ) ,
568+ } ) )
569+ }
537570}
538571
539572async fn inject_tx < R > (
0 commit comments