|
18 | 18 | - Block production logic |
19 | 19 | - [x] Without transactions and without proof |
20 | 20 | - [x] Full block with proof |
21 | | - - [ ] Blocks with transactions. - Missing because we don't yet have the transaction pool logic. |
| 21 | + - [x] Blocks with transactions. |
22 | 22 | - Networking layer |
23 | 23 | - [x] P2P layer in general along with serialization/deserialization of all messages |
24 | 24 | - RPCs support |
|
40 | 40 | - [x] Floodsub-like resending of blocks, txs and snarks |
41 | 41 | - [ ] Trust system (to punish/ban peers): **not implemented (and no equivalent)** |
42 | 42 | - Pools |
43 | | - - [ ] Transaction pool: **in progress** |
44 | | - - No pool is maintained, transactions received over the gossip network are not processed or re-broadcasted |
| 43 | + - Transaction pool: **in progress** |
| 44 | + - [x] Receiving, validating and integrating transactions |
| 45 | + - [x] Payments |
| 46 | + - [x] zkApp transactions (with proofs too) |
| 47 | + - [x] Broadcasting transactions to peers. |
| 48 | + - [x] Updating and revalidating the txn pool when new blocks are applied (by removing transactions already in the block) |
| 49 | + - [x] Updating and revalidating the txn pool when there are chain reorgs (by restoring transactions from discarded chains) |
| 50 | + - [ ] Error handling |
| 51 | + - [ ] Testing |
45 | 52 | - SNARK pool |
46 | 53 | - [x] SNARK Verification |
47 | 54 | - [x] Pool is implemented |
48 | | - - [x] SNARK work production is implemented (through OCaml). Node can complete and broadcast SNARK work. |
| 55 | + - [x] SNARK work production and broadcasting. |
| 56 | + - [ ] Testing |
49 | 57 | - [x] Compatible ledger implementation |
50 | 58 | - [x] Transition frontier |
51 | 59 | - [x] Support for loading arbitrary genesis ledgers at startup |
|
81 | 89 | - [x] Zkapp proof verification (same as above) |
82 | 90 | - [ ] Client API (currently the node has a very partial support, not planned at the moment) |
83 | 91 | - [ ] Support for the archive node sidecar process (sending updates through RPC calls). |
84 | | -- [x] Berkeleynet support |
85 | 92 | - [x] Devnet support |
86 | 93 | - [x] Raw data for gates used to produced files updated for devnet compatibility |
87 | 94 | - [x] Non-circuit logic updated for devnet compatibility |
88 | | - - [x] Circuit logic updated for devnet compatibility (**partially implemented**) |
| 95 | + - [x] Circuit logic updated for devnet compatibility |
89 | 96 | - [x] Genesis ledger file loadable by openmina for connecting to devnet |
90 | 97 | - [x] Updated to handle fork proof and new genesis state |
| 98 | +- [x] Mainnet support |
| 99 | + - [x] Raw data for gates used to produced files updated for mainnet compatibility |
| 100 | + - [x] Non-circuit logic updated for mainnet compatibility |
| 101 | + - [x] Circuit logic updated for mainnet compatibility |
| 102 | + - [x] Genesis ledger file loadable by openmina for connecting to mainnet |
| 103 | + - [x] Updated to handle fork proof and new genesis state |
| 104 | +- Block replayer using precomputed blocks from Google Cloud Storage |
| 105 | + - [x] Basic replayer that applies blocks with openmina and verifies the results. |
| 106 | + - [ ] Enable proofs verification (for performance reasons, that is skipped right now) |
| 107 | + - [x] OCaml node counterpart to replay failed block applications (for debugging an testing) |
| 108 | + - [ ] CI pipeline to regularly test application of mainnet blocks |
| 109 | + - [ ] Support for applying all blocks, not just the cannonical chain |
| 110 | + - [ ] Produce tracing receipts from both the OCaml and Rust implementations that can be compared (for debugging and verification purposes) |
| 111 | +- Webnode |
| 112 | + - [x] WASM compilation |
| 113 | + - [x] WebRTC-based P2P layer |
| 114 | + - [x] Able to successfully sync up to the network |
| 115 | + - [ ] Testing |
| 116 | + - [ ] o1js integration |
| 117 | + - [ ] Frontend |
91 | 118 |
|
92 | 119 | ## VRF Evaluator <a name="vrf-evaluator"></a> |
93 | 120 |
|
|
112 | 139 |
|
113 | 140 | ## Block Producer <a name="block-producer"></a> |
114 | 141 |
|
115 | | -- [ ] Block producer |
| 142 | +- [x] Block producer |
116 | 143 | - [x] Integrate with VRF evaluator |
117 | 144 | - [x] Include coinbase transactions |
118 | 145 | - [x] Include fee transfers |
119 | | - - [ ] Include simple transactions (transaction pool missing) |
120 | | - - [ ] Include zkapp transactions (transaction pool missing) |
| 146 | + - [x] Include simple transactions |
| 147 | + - [x] Include zkapp transactions |
121 | 148 | - [x] Ledger diff creation |
122 | 149 | - [x] Integrate with transition frontier |
123 | 150 | - [x] New epoch seed calculation |
|
137 | 164 | - [x] Zkapps |
138 | 165 | - [x] Ledger interactions are asynchronous and cannot stall the state machine. |
139 | 166 | - [x] Persistent database |
140 | | - - https://github.com/MinaProtocol/mina/pull/13340 |
141 | | - - Drop-in replacement for RocksDB |
| 167 | + - [x] (discarded) Drop-in replacement for RocksDB https://github.com/MinaProtocol/mina/pull/13340 |
| 168 | + - [ ] Design and implement a persistent ledger |
| 169 | + - DRAFT design https://github.com/openmina/openmina/issues/522 |
| 170 | + - [ ] Design and implement a persistent block storage |
| 171 | + - [ ] Design and implement a persistent proof storage |
142 | 172 |
|
143 | 173 | ## Proofs <a name="proofs"></a> |
144 | 174 |
|
|
157 | 187 | ### Handshake |
158 | 188 |
|
159 | 189 | - [x] Create a service for low level TCP networking (mio, epoll). |
160 | | - - [ ] Per-connection data buffering limits. |
| 190 | + - [x] Per-connection data buffering limits. |
161 | 191 | - [ ] DNS support. |
162 | 192 | - [x] Pnet protocol. |
163 | 193 | - [x] Multistream select protocol. |
164 | | -- [ ] Handle simultaneous connect case. |
| 194 | +- [x] Handle simultaneous connect case. |
165 | 195 | - [x] Noise protocol for outgoing connections. |
166 | 196 | - [x] Noise protocol for incoming connections. |
| 197 | +- [x] Forbid connections whose negotiated peer-id don't match the one in the dial-opts or routing table. |
167 | 198 | - [x] Yamux multiplexer. |
168 | 199 | - [ ] Yamux congestion control. |
169 | 200 |
|
|
176 | 207 | - [ ] Implement Kademlia algorithm. |
177 | 208 | - [x] Implement Kademlia FIND_NODE (client/server). |
178 | 209 | - [x] Implement Kademlia Bootstrap process. |
179 | | - - [ ] Update Kademlia routing table according to Identify protocol messages. |
| 210 | + - [x] Update Kademlia routing table according to Identify protocol messages. |
180 | 211 | - [ ] Per peer limit on incoming requests |
181 | 212 |
|
182 | 213 | ### RPC |
183 | 214 |
|
184 | 215 | - [x] Perform outgoing RPC requests. |
185 | 216 | - [x] Handle incoming RPC requests. |
186 | | -- [ ] Per peer limit on incoming requests |
| 217 | +- [x] Per peer limit on incoming requests |
187 | 218 |
|
188 | 219 | ### Gossipsub |
189 | 220 |
|
190 | 221 | - [x] Implement gossipsub compatible with libp2p. |
191 | 222 | - [ ] Research how to use "expander graph" theory to make gossipsub robust and efficient. |
192 | | -- [ ] Implement mesh (meshsub protocol) |
193 | | -- [ ] Handle control messages |
| 223 | +- [x] Implement mesh (meshsub protocol) |
| 224 | +- [x] Handle control messages |
194 | 225 | - [ ] Limit received blocks, txs and snarks from the same peer |
195 | 226 | - [ ] Rebroadcast only validated |
196 | 227 |
|
|
201 | 232 | - [x] Test that the Openmina node can bootstrap from the replayer tool. |
202 | 233 | - [ ] Test that the OCaml node can bootstrap from the Openmina node. |
203 | 234 | - [ ] Test that the Openmina node can bootstrap from another instance of openmina node. |
| 235 | +- [ ] Test block propagation |
204 | 236 |
|
205 | 237 | ### Fuzzing |
206 | 238 | - [x] Mutator-based (bit-flipping/extend/shrink) fuzzing of communication between two openmina nodes |
|
209 | 241 | - [x] Noise mutator. |
210 | 242 | - [x] Yamux mutator. |
211 | 243 | - [x] Stream-based protocols mutators: Identify, Kad, Meshsub, RPCs. |
| 244 | + - [x] Fixed bugs found by fuzzing |
| 245 | + - [x] Connection management / resources leak issues. |
| 246 | + - [x] Panics in Kad due incorrect buffer index calculations. |
212 | 247 |
|
213 | 248 | ## P2P Related Tests <a name="p2p-tests"></a> |
214 | 249 |
|
| 250 | +See [Testing](./docs/testing/README.md) for more details. |
| 251 | + |
215 | 252 | - [ ] P2p functionality tests |
216 | 253 | - [ ] p2p messages |
217 | 254 | - [ ] Binprot types (de)serialization testing/fuzzing |
218 | 255 | - [ ] Mina RPC types testing (ideally along with OCaml codecs) |
219 | 256 | - [ ] hashing testing (ideally along with OCaml hash implementations) |
220 | 257 | - [ ] Connection |
221 | | - - [ ] Proper initial peers handling, like reconnecting if offline |
222 | | - - [ ] Peers number maintaining, including edge cases, when we have max peers but still allow peers to connect for e.g. discovery, that is dropping connection strategy |
223 | | - - [ ] Other connection constraints, like no duplicate connections to the same peer, peer_id, no self connections etc |
| 258 | + - [x] Proper initial peers handling, like reconnecting if offline |
| 259 | + - [x] Peers number maintaining, including edge cases, when we have max peers but still allow peers to connect for e.g. discovery, that is dropping connection strategy |
| 260 | + - [x] Other connection constraints, like no duplicate connections to the same peer, peer_id, no self connections etc |
224 | 261 | - [ ] Connection quality metrics |
| 262 | + - [x] Connects to OCaml node and vice versa |
225 | 263 | - [ ] Kademlia |
226 | | - - [ ] Peers discovery, according to Kademlia parameters (a new node gets 20 new peers) |
| 264 | + - [x] Peers discovery, according to Kademlia parameters (a new node gets 20 new peers) |
| 265 | + - [x] Bootstraps from OCaml node and vice versa |
227 | 266 | - [ ] Kademlia routing table is up-to-date with the network (each peer status, like connected/disconnected/can_connect/cant_connect, reflects actual peer state) |
228 | 267 | - [ ] Gossipsub |
229 | 268 | - [ ] Reacheability (all nodes get the message) |
230 | 269 | - [ ] Non-redundancy (minimal number of duplicating/unneeded messages) |
231 | 270 | - [ ] Interoperability with OCaml node |
232 | 271 | - [ ] Bootstrap Rust node from OCaml and vice versa |
233 | | - - [ ] Discovery using Rust node |
| 272 | + - [x] Discovery using Rust node |
234 | 273 | - [ ] Gossipsub relaying |
235 | 274 | - [ ] Public network tests. This should be the only set of tests that involve publicly available networks, and should be executed if we're sure we don't ruin them. |
236 | 275 | - [ ] Attack resistance testing |
|
0 commit comments