1use crate::{
2 external_snark_worker::{ExternalSnarkWorker, SnarkWorkId},
3 p2p::{bootstrap::P2pNetworkKadBootstrapStats, connection::P2pConnectionResponse},
4 rpc::{
5 discovery::RpcDiscoveryRoutingTable, AccountQuery, ActionStatsQuery, RpcBestChainResponse,
6 RpcConsensusTimeGetResponse, RpcGenesisBlockResponse, RpcGetBlockResponse,
7 RpcLedgerAccountDelegatorsGetResponse, RpcLedgerStatusGetResponse, RpcPeerInfo,
8 RpcPooledUserCommandsResponse, RpcPooledZkappCommandsResponse,
9 RpcScanStateSummaryScanStateJob, RpcSnarkPoolCompletedJobsResponse,
10 RpcSnarkPoolPendingJobsGetResponse, RpcSnarkerConfig, RpcTransactionInjectFailure,
11 RpcTransactionInjectRejected, RpcTransactionInjectSuccess, SyncStatsQuery,
12 },
13};
14use ledger::{
15 scan_state::transaction_logic::{valid::UserCommand, zkapp_command::WithHash},
16 Account,
17};
18use mina_core::{consensus::ConsensusConstants, requests::RpcId, snark::SnarkJobId, ActionEvent};
19use mina_p2p_messages::v2::{self, MinaBaseUserCommandStableV2};
20use serde::{Deserialize, Serialize};
21
22#[derive(Serialize, Deserialize, Debug, Clone, ActionEvent)]
23pub enum RpcEffectfulAction {
24 GlobalStateGet {
25 rpc_id: RpcId,
26 filter: Option<String>,
27 },
28 StatusGet {
29 rpc_id: RpcId,
30 },
31 HeartbeatGet {
32 rpc_id: RpcId,
33 },
34 ActionStatsGet {
35 rpc_id: RpcId,
36 query: ActionStatsQuery,
37 },
38 SyncStatsGet {
39 rpc_id: RpcId,
40 query: SyncStatsQuery,
41 },
42 BlockProducerStatsGet {
43 rpc_id: RpcId,
44 },
45
46 MessageProgressGet {
47 rpc_id: RpcId,
48 },
49 PeersGet {
50 rpc_id: RpcId,
51 peers: Vec<RpcPeerInfo>,
52 },
53 P2pConnectionOutgoingError {
54 rpc_id: RpcId,
55 error: String,
56 },
57 P2pConnectionOutgoingSuccess {
58 rpc_id: RpcId,
59 },
60 P2pConnectionIncomingRespond {
61 rpc_id: RpcId,
62 response: P2pConnectionResponse,
63 },
64 P2pConnectionIncomingError {
65 rpc_id: RpcId,
66 error: String,
67 },
68 P2pConnectionIncomingSuccess {
69 rpc_id: RpcId,
70 },
71 ScanStateSummaryGetSuccess {
72 rpc_id: RpcId,
73 scan_state: Result<Vec<Vec<RpcScanStateSummaryScanStateJob>>, String>,
74 },
75 SnarkPoolAvailableJobsGet {
76 rpc_id: RpcId,
77 },
78 SnarkPoolJobGet {
79 job_id: SnarkWorkId,
80 rpc_id: RpcId,
81 },
82 SnarkPoolCompletedJobsGet {
83 rpc_id: RpcId,
84 jobs: RpcSnarkPoolCompletedJobsResponse,
85 },
86 SnarkPoolPendingJobsGet {
87 rpc_id: RpcId,
88 jobs: RpcSnarkPoolPendingJobsGetResponse,
89 },
90 SnarkerConfigGet {
91 rpc_id: RpcId,
92 config: Option<RpcSnarkerConfig>,
93 },
94 SnarkerJobCommit {
95 rpc_id: RpcId,
96 job_id: SnarkJobId,
97 },
98 SnarkerJobSpec {
99 rpc_id: RpcId,
100 job_id: SnarkJobId,
101 },
102 SnarkerWorkersGet {
103 rpc_id: RpcId,
104 snark_worker: ExternalSnarkWorker,
105 },
106 HealthCheck {
107 rpc_id: RpcId,
108 has_peers: Result<(), String>,
109 },
110 ReadinessCheck {
111 rpc_id: RpcId,
112 },
113 DiscoveryRoutingTable {
114 rpc_id: RpcId,
115 response: Option<RpcDiscoveryRoutingTable>,
116 },
117 DiscoveryBoostrapStats {
118 rpc_id: RpcId,
119 response: Option<P2pNetworkKadBootstrapStats>,
120 },
121 TransactionPool {
122 rpc_id: RpcId,
123 response: Vec<WithHash<UserCommand, v2::TransactionHash>>,
124 },
125 LedgerAccountsGetSuccess {
126 rpc_id: RpcId,
127 accounts: Vec<Account>,
128 account_query: AccountQuery,
129 },
130 TransactionInjectSuccess {
131 rpc_id: RpcId,
132 response: RpcTransactionInjectSuccess,
133 },
134 TransactionInjectRejected {
135 rpc_id: RpcId,
136 response: RpcTransactionInjectRejected,
137 },
138 TransactionInjectFailure {
139 rpc_id: RpcId,
140 errors: RpcTransactionInjectFailure,
141 },
142 TransitionFrontierUserCommandsGet {
143 rpc_id: RpcId,
144 commands: Vec<MinaBaseUserCommandStableV2>,
145 },
146 BestChain {
147 rpc_id: RpcId,
148 best_chain: RpcBestChainResponse,
149 },
150 ConsensusConstantsGet {
151 rpc_id: RpcId,
152 response: ConsensusConstants,
153 },
154 TransactionStatusGet {
155 rpc_id: RpcId,
156 tx: MinaBaseUserCommandStableV2,
157 },
158 BlockGet {
159 rpc_id: RpcId,
160 block: RpcGetBlockResponse,
161 },
162 PooledUserCommands {
163 rpc_id: RpcId,
164 user_commands: RpcPooledUserCommandsResponse,
165 },
166 PooledZkappCommands {
167 rpc_id: RpcId,
168 zkapp_commands: RpcPooledZkappCommandsResponse,
169 },
170 GenesisBlock {
171 rpc_id: RpcId,
172 genesis_block: RpcGenesisBlockResponse,
173 },
174 ConsensusTimeGet {
175 rpc_id: RpcId,
176 consensus_time: RpcConsensusTimeGetResponse,
177 },
178 LedgerStatusGetSuccess {
179 rpc_id: RpcId,
180 response: RpcLedgerStatusGetResponse,
181 },
182 LedgerAccountDelegatorsGetSuccess {
183 rpc_id: RpcId,
184 response: RpcLedgerAccountDelegatorsGetResponse,
185 },
186}
187
188impl redux::EnablingCondition<crate::State> for RpcEffectfulAction {
189 fn is_enabled(&self, _state: &crate::State, _time: redux::Timestamp) -> bool {
190 true
191 }
192}