Skip to content

Commit 11e42ee

Browse files
committed
Added 'currentSnarkWorker' graphql endpoint
1 parent 28b0a73 commit 11e42ee

File tree

2 files changed

+57
-3
lines changed

2 files changed

+57
-3
lines changed

node/native/src/graphql/mod.rs

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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;
911
use node::{
1012
account::AccountPublicKey,
1113
ledger::read::LedgerStatus,
@@ -26,7 +28,7 @@ use openmina_core::{
2628
NetworkConfig,
2729
};
2830
use openmina_node_common::rpc::RpcSender;
29-
use snark::GraphQLPendingSnarkWork;
31+
use snark::{GraphQLPendingSnarkWork, GraphQLSnarkWorker};
3032
use std::str::FromStr;
3133
use tokio::sync::OnceCell;
3234
use transaction::GraphQLTransactionStatus;
@@ -41,6 +43,8 @@ pub mod transaction;
4143
pub mod user_command;
4244
pub mod zkapp;
4345

46+
pub type PublicKey = String;
47+
4448
#[derive(Debug, thiserror::Error)]
4549
pub enum Error {
4650
#[error("Conversion error: {0}")]
@@ -534,6 +538,34 @@ impl Query {
534538
let res = BuildEnv::get().git.commit_hash;
535539
Ok(res)
536540
}
541+
542+
async fn current_snark_worker(
543+
&self,
544+
context: &Context,
545+
) -> juniper::FieldResult<Option<GraphQLSnarkWorker>> {
546+
let config: Option<RpcSnarkerConfig> = context
547+
.rpc_sender
548+
.oneshot_request(RpcRequest::SnarkerConfig)
549+
.await
550+
.ok_or(Error::StateMachineEmptyResponse)?;
551+
552+
let Some(config) = config else {
553+
return Ok(None);
554+
};
555+
556+
let account = context
557+
.load_account(AccountId {
558+
public_key: CompressedPubKey::try_from(&config.public_key)?,
559+
token_id: TokenIdKeyHash::default().into(),
560+
})
561+
.await;
562+
563+
Ok(Some(GraphQLSnarkWorker {
564+
key: config.public_key.to_string(),
565+
account,
566+
fee: config.fee.to_string(),
567+
}))
568+
}
537569
}
538570

539571
async fn inject_tx<R>(

node/native/src/graphql/snark.rs

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
use juniper::GraphQLObject;
1+
use juniper::{graphql_object, GraphQLObject};
22
use ledger::scan_state::scan_state::{AvailableJobMessage, ParallelScanAvailableJob};
33
use mina_p2p_messages::v2::{
44
MinaBaseFeeExcessStableV1, MinaStateBlockchainStateValueStableV2SignedAmount,
55
TransactionSnarkScanStateTransactionWithWitnessStableV2, TransactionSnarkStableV2,
66
};
77
use node::snark_pool::JobState;
88

9-
use super::ConversionError;
9+
use super::{account::GraphQLAccount, Context, ConversionError, PublicKey};
1010

1111
#[derive(GraphQLObject, Debug)]
1212
#[graphql(description = "A Mina block")]
@@ -149,3 +149,25 @@ impl TryFrom<TransactionSnarkStableV2> for GraphQLWorkDescription {
149149
})
150150
}
151151
}
152+
153+
pub(crate) struct GraphQLSnarkWorker {
154+
pub key: PublicKey,
155+
pub account: Option<GraphQLAccount>,
156+
pub fee: String,
157+
}
158+
159+
#[graphql_object(context = Context)]
160+
#[graphql(description = "A snark worker")]
161+
impl GraphQLSnarkWorker {
162+
pub fn key(&self) -> String {
163+
self.key.to_string()
164+
}
165+
166+
pub fn fee(&self) -> String {
167+
self.fee.to_string()
168+
}
169+
170+
pub fn account(&self) -> Option<GraphQLAccount> {
171+
self.account.clone()
172+
}
173+
}

0 commit comments

Comments
 (0)