hyperledger / hyperledger/fabric

Orderer v3: BFT: Block Replication for peer and orderer

Open
#4,240 0 comments 0 reactions 1 assignee Claimed by @tock-ibm View on GitHub
workitem
Dominant language
Go
Stars
16.7k
Forks
9.1k
Avg merge
5h 38m
Merged PRs (30d)
26

Description

### Current Status

Currently the peer is using the orderer's delivery service to pull blocks in a way that is resilient to crash failures of the orderer is is pulling from. It is not resistant to some BFT attacks, in particular, the target orderer may deliberately slow down block transmission or withhold blocks (censorship).

The same is true for the orderer "sync" functionality - when an orderer is trying to catch-up with the cluster it may pull blocks from a malicious orderer that will slow it down or withold blocks.

### Goal

Implement a BFT block puller that would be used in the peer and in the orderer, as described in [this RFC](https://github.com/hyperledger/fabric-rfcs/blob/main/text/0010-bft-signatures.md)

### Solution

As described in [this RFC](https://github.com/hyperledger/fabric-rfcs/blob/main/text/0010-bft-signatures.md), we will implement a block puller / delivery service client that can detect withholding attacks by inspecting block headers from multiple members in the cluster. When such an attack is detected or suspected, we'll switch the target orderer from which we pull blocks.

- We will start by implementing a solution to the peer, then
- Refactor this solution to isolate subcomponents that are reusable at the orderer,
- Implement a BFT solution to allow the orderers to sync, a solution that will work both for a consenter and a follower.

### Tasks

- [x] #4241
- [x] #4243
- [x] #4259
- [x] #4261
- [x] #4273
- [x] #4277
- [x] #4293
- [x] #4354
- [x] #4456
- [x] #4306
- [x] #4348
- [x] #4394
- [x] #4401
- [x] #4346
- [x] #4353
- [x] #4403
- [x] #4347
- [x] #4351
- [x] #4350
- [x] #4566
- [x] #4715
- [x] #4719
- [x] #4696
- [x] #4697
- [x] #4731
- [ ] #4446
- [x] #4732
- [x] #4847

- [ ] #4698
- [ ] #4567
- [ ] A block withholding detector - frugal

### Related Issues

Part of #3771

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.