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