I'm putting what's in my head here before taking days off. So, please feel free to edit this.
Create a nomos-libp2p crate that wraps rust-libp2p and provides some convenient APIs, which can be integrated as a network backend (nomos-services/network/backends/libp2p.rs).
Since rust-libp2p provides very raw/flexible interfaces, we may need to design the nomos-libp2p crate to hide boilerplates and provides simple interfaces with users.
Create a libp2p consensus adapter by using the libp2p network backend.
Here, we may need to have a data structure to query messages per 'view' (aka, message ordering). Where to implement the message ordering can be decided depending on which context we need for it. If we need Carnot-specific contexts for message ordering, it may be good to implement it in the libp2p consensus adapter. If not, it may be able to implemented in the libp2p network adapter or the nomos-libp2p crate.
Tests
After completing the first simple implementation, we may need to consider about further topics:
To replace Waku with libp2p
I'm putting what's in my head here before taking days off. So, please feel free to edit this.
nomos-libp2p
crate that wraps rust-libp2p and provides some convenient APIs, which can be integrated as a network backend (nomos-services/network/backends/libp2p.rs
).nomos-libp2p
crate to hide boilerplates and provides simple interfaces with users.libp2p
network backend by using thenomos-libp2p
crate.libp2p
consensus adapter by using thelibp2p
network backend.libp2p
consensus adapter. If not, it may be able to implemented in thelibp2p
network adapter or thenomos-libp2p
crate.After completing the first simple implementation, we may need to consider about further topics: