Closed jsoares closed 2 years ago
mircat
demonstrable with PBFT.mircat
as a subproject.mirbft
(using a sample chat application) be useful? Another video with failures could follow when PBFT view change is implemented.
mirbft
interfacemirbft
Eudico interface(Updated by @matejpavlovic 2022-04-12)
Currently MirBFT - carries historical baggage. Let's rename to
GoNode
Initial idea was Node.go (like Node.js), which would have fit even better to the abstraction it provides, but Node.js is a registered trademark. For now the repository lives at https://github.com/matejpavlovic/go-node and will be populated with code soon.
Given recent research results (Narwhal, Tusk, Bullshark, etc.) and discussions,
Thus, it is worth revisiting the current plan for consensus implementation. The long-term solution will involve a
Conclusion:
Would we need "RustNode" as well?
From complete ignorance, @matejpavlovic, how does Mir-BFT relates to Node.js? (I am just wary of this kind of generic names :smile: ). It makes SEO and general discoverability harder.
+1 I am not a huge fan of the name proposal
Why Node? Node-go or go-node says that "Node" is implemented in Go, but what Node is, and how does it relate to BFT?
If we are talking about names:
Proposing the initial draft of the design document for incremental implementation of Eudico's ordering layer. Comments welcome! https://hackmd.io/@matejpavlovic/ryd53ZP4c
initial draft of the design document for incremental implementation of Eudico's ordering layer
I left some comments
Miner
exist in Filecoin version with a BFT-type consensus algorithm?No zoom call, just async collaboration on the notes.
ContextStore
abstraction to simplify the workflow of using digital signatures in Mir.ContextStore
and DSL module to the main branch.Oh, hi! I'm just QA engineer from another company, I don't mind learning Rust, but can you help with DSL please. Also, do you pay euros?
@atonkikh oh, sorry, it's because I also sometimes use atonkikh as my nickname. Don't worry, I'll handle the DSL thing :)
ContextStore
.ContextStore
.ApplyEvents
directly and checking the output), but BCB probably needs something more similar to integration tests: we need to run several nodes with other modules and the application being mocked, let the nodes talk to each other while manipulating the network, and check the outcome.ActiveModule
. That way, if the consensus module is too slow to process them, the Mir implementation will temporarily stop reading new batches from the availability layer.
net.Stop()
, net.Start()
and net.Connect()
on each reconfiguration. So we need to add a function like NewConnections(map[NodeID]NetAddr) to the network transport interface. This function opens connections to nodes contained in the map without removing all network connection from previous stage.
strncov.Atoi(nodeID)
if tr.Sim != nil {...}
if transport, ok := tr.Modules["net"]; ok {...}
(guilty, this one is mine)t.NodeID
instead of string
) and conversion functions.
.proto
definitions?
.pb.go
files as input.
This choice was motivated by relative simplicity compared to working directly with .proto
files since protobufs have their own type system which would need to be translated to go type system..proto
file?
.proto
files, e.g.:
string module = 1 [(mir.type) = "github.com/filecoin-project/mir/pkg/types.ModuleID"];
SomeObjectType{Field: val, ...}
and always using the constructor. This way, should we decide to add fields to some objects,
the compiler would help avoiding the default zero values for that field in instantiations of the object
that one might forget to update.
service
description in protobufs.
This would be nice in the future, but I think goes beyond the intended scope for the first version of code generator.events.proto
and messages.proto
are historical artifacts and a big part (if not all) of their content
should be moved to files associated with the respective modules. I'll soon have a proper look at that and move things around.
@xosmig if this has any impact on the code generation and you would like me to stick to some particular conventions, pls let me know.
isspb.Event
, availabilitypb.Event
, isspb.ISSMessage
, mscpb.Message
).isspb.ISSMessage
should then be renamed to isspb.Message
though.)oneof
s with primitive type options.
Partly, because I am considering a posibility of the future where we will move to a different data model with interfaces instead of oneofs.oneof
s and when refactoring, I'll remove the existing ones.Y3 has been merged with the B4 project, including the meeting notes.
Description
Our goal is to design and implement scalable, efficient consensus protocols for subnets (i.e. anything below the top-level Filecoin consensus). This should enable secure, low-latency operation up to ~500 nodes per subnet.
These protocols will be integrated with Eudico, the research clone of the Lotus Filecoin client, supporting a hierarchy of subnets, each running its own instance of a consensus protocol.
To achieve our, we develop Mir, a framework for implementing distributed protocols. The first protocol to be implemented is ISS, a multi-leader BFT-style consensus protocol, in conjunction with Narwhal, a state-of-the-art mempool implementation enabling sale-out throughput.
The design should be, however, general enough, and its implementation sufficiently modular, to make it easy to implement various different consensus protocols and select any of them for any particular subnet deployment.
Scope
Resources
Papers
Talks
soon™️
Demos
2022-04-07, MirBFT
2022-06-02, Crash failures in Mir and its integration with Eudico
2022-08-12, Reproducible Integration Testing in Mir
2022-08-12, Taking Pseudocode To An Implementation With Mir Framework
2022-09-01, Reconfigurable SMR with Mir
2022-09-01, Dynamically adding new nodes to Eudico with Mir