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