Files
bft-crdt-experiment/README.md

60 lines
2.2 KiB
Markdown
Raw Normal View History

2024-06-18 15:20:46 +01:00
# Side BFT-CRDT PoC
2024-06-18 15:20:46 +01:00
This is a proof of concept implementation of a BFT-CRDT blockchain system.
## Running in development
2024-06-18 15:20:46 +01:00
Run the watcher first:
```bash
2024-06-18 15:20:46 +01:00
cd side-watcher
cargo watch -x run
```
2024-06-18 15:20:46 +01:00
To init a Side node:
```bash
2024-06-18 15:20:46 +01:00
cd side-node
cargo run -- init node1
cargo run -- init node2
cargo run -- init node3
cargo run -- init node4
```
2024-06-18 15:20:46 +01:00
To start a node with a cargo watch for development purposes (from the side-node dir), open up a few terminals and run:
```bash
2024-06-18 15:20:46 +01:00
cargo watch -x "run -- run -- node1"
cargo watch -x "run -- run -- node2"
cargo watch -x "run -- run -- node3"
cargo watch -x "run -- run -- node4"
```
## Discussion
What we have here is a very simple system comprised of two key parts: the Side Node, and the Side Watcher.
### Side Node(s)
The Side Nodes make up a system of BFT-CRDT-producing nodes that can make a blockchain. Currently they can reliably send transactions to each other in a secure way, such that all nodes they communicate with can tell whether received transactions are obeying the rules of the system.
2024-06-18 15:35:22 +01:00
Next dev tasks:
[ ] enable Side Nodes to download current P2P chain state so that they start out with a consistent copy of transaction data
[ ] add smart contract execution engine (CosmWasm would be a good first choice)
[ ] enable Side Nodes to download contract code for a given contract
[ ] enable Side Nodes to download current contract state for a given contract
[ ] switch to full P2P messaging instead of websockets
[ ] take the Side Watcher out of the system by electing a Side Node as a leader, so that agreement about transaction inclusion can be reached for a given block.
### Side Watcher
The Side Watcher is a simple relayer node that sits between the Side Chain (Cosmos) and the decentralized Side Nodes. At the moment, it simply relays transactions between nodes via a websocket.
Next, the Side Watcher needs to:
[ ] make a block for the P2P when the Side Chain creates a block (see litepaper)
[ ] submit P2P chain data to the Side Chain
Later, we will aim to remove the Side Watcher from the architecture, by (a) moving to pure P2P transactions between Side Nodes, and (b) doing leader election of a Side Node to reach agreement on the submitted block.