From 035838901e5031033a69c33d34aa5229f473d8b4 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Wed, 22 Jan 2020 13:17:16 -0800 Subject: [PATCH] add diagram --- spec/consensus/light/README.md | 16 +++++++++++++++- .../consensus/light/assets/light-node-image.png | Bin 0 -> 31450 bytes 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 spec/consensus/light/assets/light-node-image.png diff --git a/spec/consensus/light/README.md b/spec/consensus/light/README.md index 7a4d8840b..79f04e9d0 100644 --- a/spec/consensus/light/README.md +++ b/spec/consensus/light/README.md @@ -28,6 +28,8 @@ transactions from "IBC relayers", who make RPC requests to full nodes on behalf ## Structure +### Components + The Tendermint Light Client consists of three primary components: - [Core Verification](./verification.md): verifying hashes, signatures, and validator set changes @@ -40,8 +42,17 @@ be done by full nodes and validators, and is thus more accurately a component of the full node consensus protocol, though it is included here since it is primarily concerned with providing security to light clients. +A schematic of the core verification and fork detection components in +a Light Node are depicted below. The schematic is quite similar for other use cases. +Note fork accountability is not depicted, as it is the responsibility of the +full nodes. + +![Light Client Diagram](assets/light-node-image.png). + +### Synchrony + Light clients are fundamentally synchronous protocols, -where security is grounded ultimately in the interval during which a validator can be punished +where security is restricted by the interval during which a validator can be punished for byzantine behaviour. We assume here that such intervals have fixed and known minima referred to commonly as a blockchain's Unbonding Period. @@ -50,3 +61,6 @@ core verification, fork detection, and fork accountability - each with their own synchrony assumptions and fault model, can execute sequentially and to completion within the given Unbonding Period. +TODO: define all the synchrony parameters used in the protocol and their +relation to the Unbonding Period. + diff --git a/spec/consensus/light/assets/light-node-image.png b/spec/consensus/light/assets/light-node-image.png new file mode 100644 index 0000000000000000000000000000000000000000..24d80d71de3935459fba1cd1cff00601dbc41800 GIT binary patch literal 31450 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 D#fwd) literal 0 HcmV?d00001