Skip to content

Commit 5278d2c

Browse files
authored
Merge pull request #1130 from 0xMimir/feat/graphql-current-snark-worker
Added 'currentSnarkWorker' graphql endpoint
2 parents 28b0a73 + f00482f commit 5278d2c

File tree

2 files changed

+58
-3
lines changed

2 files changed

+58
-3
lines changed

node/native/src/graphql/mod.rs

Lines changed: 34 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,9 @@ pub mod transaction;
4143
pub mod user_command;
4244
pub mod zkapp;
4345

46+
/// Base58 encoded public key
47+
pub type GraphQLPublicKey = String;
48+
4449
#[derive(Debug, thiserror::Error)]
4550
pub 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

539572
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, GraphQLPublicKey};
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: GraphQLPublicKey,
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)