diff --git a/README.md b/README.md index ad3f0c5..86278fe 100644 --- a/README.md +++ b/README.md @@ -29,3 +29,31 @@ 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. + +TODO: + +[ ] 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.