From 601e44daff7ff2531efd03350aa960d2dc9cf78c Mon Sep 17 00:00:00 2001 From: "M. J. Fromberger" Date: Fri, 18 Feb 2022 07:14:05 -0800 Subject: [PATCH] Remove ADR and RFC docs from the v0.35.x backport branch. (#7866) --- docs/architecture/README.md | 102 --- docs/architecture/adr-001-logging.md | 216 ------ .../adr-002-event-subscription.md | 88 --- docs/architecture/adr-003-abci-app-rpc.md | 34 - .../adr-004-historical-validators.md | 38 -- docs/architecture/adr-005-consensus-params.md | 85 --- docs/architecture/adr-006-trust-metric.md | 229 ------- .../adr-007-trust-metric-usage.md | 106 --- docs/architecture/adr-008-priv-validator.md | 35 - docs/architecture/adr-009-ABCI-design.md | 271 -------- docs/architecture/adr-010-crypto-changes.md | 77 --- docs/architecture/adr-011-monitoring.md | 116 ---- docs/architecture/adr-012-peer-transport.md | 113 ---- docs/architecture/adr-013-symmetric-crypto.md | 99 --- .../architecture/adr-014-secp-malleability.md | 63 -- docs/architecture/adr-015-crypto-encoding.md | 84 --- .../architecture/adr-016-protocol-versions.md | 308 --------- docs/architecture/adr-017-chain-versions.md | 99 --- docs/architecture/adr-018-ABCI-Validators.md | 100 --- docs/architecture/adr-019-multisigs.md | 162 ----- docs/architecture/adr-020-block-size.md | 104 --- docs/architecture/adr-021-abci-events.md | 52 -- docs/architecture/adr-022-abci-errors.md | 63 -- docs/architecture/adr-023-ABCI-propose-tx.md | 183 ------ docs/architecture/adr-024-sign-bytes.md | 234 ------- docs/architecture/adr-025-commit.md | 150 ----- .../adr-026-general-merkle-proof.md | 49 -- .../adr-029-check-tx-consensus.md | 127 ---- .../adr-030-consensus-refactor.md | 458 ------------- docs/architecture/adr-033-pubsub.md | 247 ------- .../adr-034-priv-validator-file-structure.md | 72 -- docs/architecture/adr-035-documentation.md | 40 -- .../architecture/adr-036-empty-blocks-abci.md | 38 -- docs/architecture/adr-037-deliver-block.md | 100 --- .../adr-038-non-zero-start-height.md | 38 -- docs/architecture/adr-039-peer-behaviour.md | 159 ----- .../adr-040-blockchain-reactor-refactor.md | 534 --------------- .../adr-041-proposer-selection-via-abci.md | 29 - docs/architecture/adr-042-state-sync.md | 235 ------- .../adr-043-blockchain-riri-org.md | 404 ------------ ...-044-lite-client-with-weak-subjectivity.md | 141 ---- docs/architecture/adr-045-abci-evidence.md | 140 ---- .../adr-046-light-client-implementation.md | 169 ----- ...047-handling-evidence-from-light-client.md | 254 -------- .../adr-050-improved-trusted-peering.md | 58 -- .../adr-051-double-signing-risk-reduction.md | 53 -- docs/architecture/adr-052-tendermint-mode.md | 85 --- .../adr-053-state-sync-prototype.md | 254 -------- .../architecture/adr-054-crypto-encoding-2.md | 71 -- docs/architecture/adr-055-protobuf-design.md | 61 -- .../adr-056-light-client-amnesia-attacks.md | 170 ----- docs/architecture/adr-057-RPC.md | 90 --- docs/architecture/adr-058-event-hashing.md | 122 ---- ...-059-evidence-composition-and-lifecycle.md | 306 --------- docs/architecture/adr-060-go-api-stability.md | 193 ------ .../adr-061-p2p-refactor-scope.md | 109 ---- docs/architecture/adr-062-p2p-architecture.md | 615 ------------------ docs/architecture/adr-063-privval-grpc.md | 109 ---- .../adr-064-batch-verification.md | 90 --- .../adr-065-custom-event-indexing.md | 405 ------------ docs/architecture/adr-066-e2e-testing.md | 140 ---- docs/architecture/adr-067-mempool-refactor.md | 303 --------- docs/architecture/adr-068-reverse-sync.md | 97 --- .../adr-069-flexible-node-intitalization.md | 268 -------- .../adr-071-proposer-based-timestamps.md | 445 ------------- .../adr-072-request-for-comments.md | 105 --- docs/architecture/adr-template.md | 83 --- docs/architecture/img/adr-046-fig1.png | Bin 13276 -> 0 bytes .../architecture/img/adr-062-architecture.svg | 1 - docs/architecture/img/bc-reactor-refactor.png | Bin 8105 -> 0 bytes docs/architecture/img/bc-reactor.png | Bin 44211 -> 0 bytes .../img/blockchain-reactor-v1.png | Bin 124042 -> 0 bytes .../img/blockchain-reactor-v2.png | Bin 171024 -> 0 bytes .../img/blockchain-v2-channels.png | Bin 109340 -> 0 bytes .../architecture/img/consensus_blockchain.png | Bin 687838 -> 0 bytes docs/architecture/img/formula1.png | Bin 9833 -> 0 bytes docs/architecture/img/formula2.png | Bin 5942 -> 0 bytes docs/architecture/img/mempool-v0.jpeg | Bin 94476 -> 0 bytes docs/architecture/img/pbts-message.png | Bin 32028 -> 0 bytes docs/architecture/img/state-sync.png | Bin 101084 -> 0 bytes docs/architecture/img/tags1.png | Bin 10446 -> 0 bytes docs/rfc/README.md | 47 -- docs/rfc/rfc-000-p2p-roadmap.rst | 316 --------- docs/rfc/rfc-001-storage-engine.rst | 179 ----- docs/rfc/rfc-002-ipc-ecosystem.md | 420 ------------ docs/rfc/rfc-003-performance-questions.md | 283 -------- docs/rfc/rfc-004-e2e-framework.rst | 213 ------ docs/rfc/rfc-005-event-system.rst | 122 ---- docs/rfc/rfc-template.md | 35 - 89 files changed, 12293 deletions(-) delete mode 100644 docs/architecture/README.md delete mode 100644 docs/architecture/adr-001-logging.md delete mode 100644 docs/architecture/adr-002-event-subscription.md delete mode 100644 docs/architecture/adr-003-abci-app-rpc.md delete mode 100644 docs/architecture/adr-004-historical-validators.md delete mode 100644 docs/architecture/adr-005-consensus-params.md delete mode 100644 docs/architecture/adr-006-trust-metric.md delete mode 100644 docs/architecture/adr-007-trust-metric-usage.md delete mode 100644 docs/architecture/adr-008-priv-validator.md delete mode 100644 docs/architecture/adr-009-ABCI-design.md delete mode 100644 docs/architecture/adr-010-crypto-changes.md delete mode 100644 docs/architecture/adr-011-monitoring.md delete mode 100644 docs/architecture/adr-012-peer-transport.md delete mode 100644 docs/architecture/adr-013-symmetric-crypto.md delete mode 100644 docs/architecture/adr-014-secp-malleability.md delete mode 100644 docs/architecture/adr-015-crypto-encoding.md delete mode 100644 docs/architecture/adr-016-protocol-versions.md delete mode 100644 docs/architecture/adr-017-chain-versions.md delete mode 100644 docs/architecture/adr-018-ABCI-Validators.md delete mode 100644 docs/architecture/adr-019-multisigs.md delete mode 100644 docs/architecture/adr-020-block-size.md delete mode 100644 docs/architecture/adr-021-abci-events.md delete mode 100644 docs/architecture/adr-022-abci-errors.md delete mode 100644 docs/architecture/adr-023-ABCI-propose-tx.md delete mode 100644 docs/architecture/adr-024-sign-bytes.md delete mode 100644 docs/architecture/adr-025-commit.md delete mode 100644 docs/architecture/adr-026-general-merkle-proof.md delete mode 100644 docs/architecture/adr-029-check-tx-consensus.md delete mode 100644 docs/architecture/adr-030-consensus-refactor.md delete mode 100644 docs/architecture/adr-033-pubsub.md delete mode 100644 docs/architecture/adr-034-priv-validator-file-structure.md delete mode 100644 docs/architecture/adr-035-documentation.md delete mode 100644 docs/architecture/adr-036-empty-blocks-abci.md delete mode 100644 docs/architecture/adr-037-deliver-block.md delete mode 100644 docs/architecture/adr-038-non-zero-start-height.md delete mode 100644 docs/architecture/adr-039-peer-behaviour.md delete mode 100644 docs/architecture/adr-040-blockchain-reactor-refactor.md delete mode 100644 docs/architecture/adr-041-proposer-selection-via-abci.md delete mode 100644 docs/architecture/adr-042-state-sync.md delete mode 100644 docs/architecture/adr-043-blockchain-riri-org.md delete mode 100644 docs/architecture/adr-044-lite-client-with-weak-subjectivity.md delete mode 100644 docs/architecture/adr-045-abci-evidence.md delete mode 100644 docs/architecture/adr-046-light-client-implementation.md delete mode 100644 docs/architecture/adr-047-handling-evidence-from-light-client.md delete mode 100644 docs/architecture/adr-050-improved-trusted-peering.md delete mode 100644 docs/architecture/adr-051-double-signing-risk-reduction.md delete mode 100644 docs/architecture/adr-052-tendermint-mode.md delete mode 100644 docs/architecture/adr-053-state-sync-prototype.md delete mode 100644 docs/architecture/adr-054-crypto-encoding-2.md delete mode 100644 docs/architecture/adr-055-protobuf-design.md delete mode 100644 docs/architecture/adr-056-light-client-amnesia-attacks.md delete mode 100644 docs/architecture/adr-057-RPC.md delete mode 100644 docs/architecture/adr-058-event-hashing.md delete mode 100644 docs/architecture/adr-059-evidence-composition-and-lifecycle.md delete mode 100644 docs/architecture/adr-060-go-api-stability.md delete mode 100644 docs/architecture/adr-061-p2p-refactor-scope.md delete mode 100644 docs/architecture/adr-062-p2p-architecture.md delete mode 100644 docs/architecture/adr-063-privval-grpc.md delete mode 100644 docs/architecture/adr-064-batch-verification.md delete mode 100644 docs/architecture/adr-065-custom-event-indexing.md delete mode 100644 docs/architecture/adr-066-e2e-testing.md delete mode 100644 docs/architecture/adr-067-mempool-refactor.md delete mode 100644 docs/architecture/adr-068-reverse-sync.md delete mode 100644 docs/architecture/adr-069-flexible-node-intitalization.md delete mode 100644 docs/architecture/adr-071-proposer-based-timestamps.md delete mode 100644 docs/architecture/adr-072-request-for-comments.md delete mode 100644 docs/architecture/adr-template.md delete mode 100644 docs/architecture/img/adr-046-fig1.png delete mode 100644 docs/architecture/img/adr-062-architecture.svg delete mode 100644 docs/architecture/img/bc-reactor-refactor.png delete mode 100644 docs/architecture/img/bc-reactor.png delete mode 100644 docs/architecture/img/blockchain-reactor-v1.png delete mode 100644 docs/architecture/img/blockchain-reactor-v2.png delete mode 100644 docs/architecture/img/blockchain-v2-channels.png delete mode 100644 docs/architecture/img/consensus_blockchain.png delete mode 100644 docs/architecture/img/formula1.png delete mode 100644 docs/architecture/img/formula2.png delete mode 100644 docs/architecture/img/mempool-v0.jpeg delete mode 100644 docs/architecture/img/pbts-message.png delete mode 100644 docs/architecture/img/state-sync.png delete mode 100644 docs/architecture/img/tags1.png delete mode 100644 docs/rfc/README.md delete mode 100644 docs/rfc/rfc-000-p2p-roadmap.rst delete mode 100644 docs/rfc/rfc-001-storage-engine.rst delete mode 100644 docs/rfc/rfc-002-ipc-ecosystem.md delete mode 100644 docs/rfc/rfc-003-performance-questions.md delete mode 100644 docs/rfc/rfc-004-e2e-framework.rst delete mode 100644 docs/rfc/rfc-005-event-system.rst delete mode 100644 docs/rfc/rfc-template.md diff --git a/docs/architecture/README.md b/docs/architecture/README.md deleted file mode 100644 index f6c12996f..000000000 --- a/docs/architecture/README.md +++ /dev/null @@ -1,102 +0,0 @@ ---- -order: 1 -parent: - order: false ---- - -# Architecture Decision Records (ADR) - -This is a location to record all high-level architecture decisions in the tendermint project. - -You can read more about the ADR concept in this [blog post](https://product.reverb.com/documenting-architecture-decisions-the-reverb-way-a3563bb24bd0#.78xhdix6t). - -An ADR should provide: - -- Context on the relevant goals and the current state -- Proposed changes to achieve the goals -- Summary of pros and cons -- References -- Changelog - -Note the distinction between an ADR and a spec. The ADR provides the context, intuition, reasoning, and -justification for a change in architecture, or for the architecture of something -new. The spec is much more compressed and streamlined summary of everything as -it stands today. - -If recorded decisions turned out to be lacking, convene a discussion, record the new decisions here, and then modify the code to match. - -Note the context/background should be written in the present tense. - -## Table of Contents - -### Implemented - -- [ADR-001: Logging](./adr-001-logging.md) -- [ADR-002: Event-Subscription](./adr-002-event-subscription.md) -- [ADR-003: ABCI-APP-RPC](./adr-003-abci-app-rpc.md) -- [ADR-004: Historical-Validators](./adr-004-historical-validators.md) -- [ADR-005: Consensus-Params](./adr-005-consensus-params.md) -- [ADR-008: Priv-Validator](./adr-008-priv-validator.md) -- [ADR-009: ABCI-Design](./adr-009-ABCI-design.md) -- [ADR-010: Crypto-Changes](./adr-010-crypto-changes.md) -- [ADR-011: Monitoring](./adr-011-monitoring.md) -- [ADR-014: Secp-Malleability](./adr-014-secp-malleability.md) -- [ADR-015: Crypto-Encoding](./adr-015-crypto-encoding.md) -- [ADR-016: Protocol-Versions](./adr-016-protocol-versions.md) -- [ADR-017: Chain-Versions](./adr-017-chain-versions.md) -- [ADR-018: ABCI-Validators](./adr-018-ABCI-Validators.md) -- [ADR-019: Multisigs](./adr-019-multisigs.md) -- [ADR-020: Block-Size](./adr-020-block-size.md) -- [ADR-021: ABCI-Events](./adr-021-abci-events.md) -- [ADR-025: Commit](./adr-025-commit.md) -- [ADR-026: General-Merkle-Proof](./adr-026-general-merkle-proof.md) -- [ADR-033: Pubsub](./adr-033-pubsub.md) -- [ADR-034: Priv-Validator-File-Structure](./adr-034-priv-validator-file-structure.md) -- [ADR-043: Blockchain-RiRi-Org](./adr-043-blockchain-riri-org.md) -- [ADR-044: Lite-Client-With-Weak-Subjectivity](./adr-044-lite-client-with-weak-subjectivity.md) -- [ADR-046: Light-Client-Implementation](./adr-046-light-client-implementation.md) -- [ADR-047: Handling-Evidence-From-Light-Client](./adr-047-handling-evidence-from-light-client.md) -- [ADR-051: Double-Signing-Risk-Reduction](./adr-051-double-signing-risk-reduction.md) -- [ADR-052: Tendermint-Mode](./adr-052-tendermint-mode.md) -- [ADR-053: State-Sync-Prototype](./adr-053-state-sync-prototype.md) -- [ADR-054: Crypto-Encoding-2](./adr-054-crypto-encoding-2.md) -- [ADR-055: Protobuf-Design](./adr-055-protobuf-design.md) -- [ADR-056: Light-Client-Amnesia-Attacks](./adr-056-light-client-amnesia-attacks.md) -- [ADR-059: Evidence-Composition-and-Lifecycle](./adr-059-evidence-composition-and-lifecycle.md) -- [ADR-062: P2P-Architecture](./adr-062-p2p-architecture.md) -- [ADR-063: Privval-gRPC](./adr-063-privval-grpc.md) -- [ADR-066-E2E-Testing](./adr-066-e2e-testing.md) -### Accepted - -- [ADR-006: Trust-Metric](./adr-006-trust-metric.md) -- [ADR-024: Sign-Bytes](./adr-024-sign-bytes.md) -- [ADR-035: Documentation](./adr-035-documentation.md) -- [ADR-039: Peer-Behaviour](./adr-039-peer-behaviour.md) -- [ADR-060: Go-API-Stability](./adr-060-go-api-stability.md) -- [ADR-061: P2P-Refactor-Scope](./adr-061-p2p-refactor-scope.md) -- [ADR-065: Custom Event Indexing](./adr-065-custom-event-indexing.md) -- [ADR-068: Reverse-Sync](./adr-068-reverse-sync.md) -- [ADR-067: Mempool Refactor](./adr-067-mempool-refactor.md) - -### Rejected - -- [ADR-023: ABCI-Propose-tx](./adr-023-ABCI-propose-tx.md) -- [ADR-029: Check-Tx-Consensus](./adr-029-check-tx-consensus.md) -- [ADR-058: Event-Hashing](./adr-058-event-hashing.md) - - -### Proposed - -- [ADR-007: Trust-Metric-Usage](./adr-007-trust-metric-usage.md) -- [ADR-012: Peer-Transport](./adr-012-peer-transport.md) -- [ADR-013: Symmetric-Crypto](./adr-013-symmetric-crypto.md) -- [ADR-022: ABCI-Errors](./adr-022-abci-errors.md) -- [ADR-030: Consensus-Refactor](./adr-030-consensus-refactor.md) -- [ADR-037: Deliver-Block](./adr-037-deliver-block.md) -- [ADR-038: Non-Zero-Start-Height](./adr-038-non-zero-start-height.md) -- [ADR-041: Proposer-Selection-via-ABCI](./adr-041-proposer-selection-via-abci.md) -- [ADR-045: ABCI-Evidence](./adr-045-abci-evidence.md) -- [ADR-057: RPC](./adr-057-RPC.md) -- [ADR-069: Node Initialization](./adr-069-flexible-node-initialization.md) -- [ADR-071: Proposer-Based Timestamps](adr-071-proposer-based-timestamps.md) -- [ADR-072: Restore Requests for Comments](./adr-072-request-for-comments.md) diff --git a/docs/architecture/adr-001-logging.md b/docs/architecture/adr-001-logging.md deleted file mode 100644 index b5df8bf7f..000000000 --- a/docs/architecture/adr-001-logging.md +++ /dev/null @@ -1,216 +0,0 @@ -# ADR 1: Logging - -## Context - -Current logging system in Tendermint is very static and not flexible enough. - -Issues: [358](https://github.com/tendermint/tendermint/issues/358), [375](https://github.com/tendermint/tendermint/issues/375). - -What we want from the new system: - -- per package dynamic log levels -- dynamic logger setting (logger tied to the processing struct) -- conventions -- be more visually appealing - -"dynamic" here means the ability to set smth in runtime. - -## Decision - -### 1) An interface - -First, we will need an interface for all of our libraries (`tmlibs`, Tendermint, etc.). My personal preference is go-kit `Logger` interface (see Appendix A.), but that is too much a bigger change. Plus we will still need levels. - -```go -# log.go -type Logger interface { - Debug(msg string, keyvals ...interface{}) error - Info(msg string, keyvals ...interface{}) error - Error(msg string, keyvals ...interface{}) error - - With(keyvals ...interface{}) Logger -} -``` - -On a side note: difference between `Info` and `Notice` is subtle. We probably -could do without `Notice`. Don't think we need `Panic` or `Fatal` as a part of -the interface. These funcs could be implemented as helpers. In fact, we already -have some in `tmlibs/common`. - -- `Debug` - extended output for devs -- `Info` - all that is useful for a user -- `Error` - errors - -`Notice` should become `Info`, `Warn` either `Error` or `Debug` depending on the message, `Crit` -> `Error`. - -This interface should go into `tmlibs/log`. All libraries which are part of the core (tendermint/tendermint) should obey it. - -### 2) Logger with our current formatting - -On top of this interface, we will need to implement a stdout logger, which will be used when Tendermint is configured to output logs to STDOUT. - -Many people say that they like the current output, so let's stick with it. - -``` -NOTE[2017-04-25|14:45:08] ABCI Replay Blocks module=consensus appHeight=0 storeHeight=0 stateHeight=0 -``` - -Couple of minor changes: - -``` -I[2017-04-25|14:45:08.322] ABCI Replay Blocks module=consensus appHeight=0 storeHeight=0 stateHeight=0 -``` - -Notice the level is encoded using only one char plus milliseconds. - -Note: there are many other formats out there like [logfmt](https://brandur.org/logfmt). - -This logger could be implemented using any logger - [logrus](https://github.com/sirupsen/logrus), [go-kit/log](https://github.com/go-kit/kit/tree/master/log), [zap](https://github.com/uber-go/zap), log15 so far as it - -a) supports coloring output
-b) is moderately fast (buffering)
-c) conforms to the new interface or adapter could be written for it
-d) is somewhat configurable
- -go-kit is my favorite so far. Check out how easy it is to color errors in red https://github.com/go-kit/kit/blob/master/log/term/example_test.go#L12. Although, coloring could only be applied to the whole string :( - -``` -go-kit +: flexible, modular -go-kit “-”: logfmt format https://brandur.org/logfmt - -logrus +: popular, feature rich (hooks), API and output is more like what we want -logrus -: not so flexible -``` - -```go -# tm_logger.go -// NewTmLogger returns a logger that encodes keyvals to the Writer in -// tm format. -func NewTmLogger(w io.Writer) Logger { - return &tmLogger{kitlog.NewLogfmtLogger(w)} -} - -func (l tmLogger) SetLevel(level string() { - switch (level) { - case "debug": - l.sourceLogger = level.NewFilter(l.sourceLogger, level.AllowDebug()) - } -} - -func (l tmLogger) Info(msg string, keyvals ...interface{}) error { - l.sourceLogger.Log("msg", msg, keyvals...) -} - -# log.go -func With(logger Logger, keyvals ...interface{}) Logger { - kitlog.With(logger.sourceLogger, keyvals...) -} -``` - -Usage: - -```go -logger := log.NewTmLogger(os.Stdout) -logger.SetLevel(config.GetString("log_level")) -node.SetLogger(log.With(logger, "node", Name)) -``` - -**Other log formatters** - -In the future, we may want other formatters like JSONFormatter. - -``` -{ "level": "notice", "time": "2017-04-25 14:45:08.562471297 -0400 EDT", "module": "consensus", "msg": "ABCI Replay Blocks", "appHeight": 0, "storeHeight": 0, "stateHeight": 0 } -``` - -### 3) Dynamic logger setting - -https://dave.cheney.net/2017/01/23/the-package-level-logger-anti-pattern - -This is the hardest part and where the most work will be done. logger should be tied to the processing struct, or the context if it adds some fields to the logger. - -```go -type BaseService struct { - log log15.Logger - name string - started uint32 // atomic - stopped uint32 // atomic -... -} -``` - -BaseService already contains `log` field, so most of the structs embedding it should be fine. We should rename it to `logger`. - -The only thing missing is the ability to set logger: - -``` -func (bs *BaseService) SetLogger(l log.Logger) { - bs.logger = l -} -``` - -### 4) Conventions - -Important keyvals should go first. Example: - -``` -correct -I[2017-04-25|14:45:08.322] ABCI Replay Blocks module=consensus instance=1 appHeight=0 storeHeight=0 stateHeight=0 -``` - -not - -``` -wrong -I[2017-04-25|14:45:08.322] ABCI Replay Blocks module=consensus appHeight=0 storeHeight=0 stateHeight=0 instance=1 -``` - -for that in most cases you'll need to add `instance` field to a logger upon creating, not when u log a particular message: - -```go -colorFn := func(keyvals ...interface{}) term.FgBgColor { - for i := 1; i < len(keyvals); i += 2 { - if keyvals[i] == "instance" && keyvals[i+1] == "1" { - return term.FgBgColor{Fg: term.Blue} - } else if keyvals[i] == "instance" && keyvals[i+1] == "1" { - return term.FgBgColor{Fg: term.Red} - } - } - return term.FgBgColor{} - } -logger := term.NewLogger(os.Stdout, log.NewTmLogger, colorFn) - -c1 := NewConsensusReactor(...) -c1.SetLogger(log.With(logger, "instance", 1)) - -c2 := NewConsensusReactor(...) -c2.SetLogger(log.With(logger, "instance", 2)) -``` - -## Status - -Implemented - -## Consequences - -### Positive - -Dynamic logger, which could be turned off for some modules at runtime. Public interface for other projects using Tendermint libraries. - -### Negative - -We may loose the ability to color keys in keyvalue pairs. go-kit allow you to easily change foreground / background colors of the whole string, but not its parts. - -### Neutral - -## Appendix A. - -I really like a minimalistic approach go-kit took with his logger https://github.com/go-kit/kit/tree/master/log: - -``` -type Logger interface { - Log(keyvals ...interface{}) error -} -``` - -See [The Hunt for a Logger Interface](https://web.archive.org/web/20210902161539/https://go-talks.appspot.com/github.com/ChrisHines/talks/structured-logging/structured-logging.slide#1). The advantage is greater composability (check out how go-kit defines colored logging or log-leveled logging on top of this interface https://github.com/go-kit/kit/tree/master/log). diff --git a/docs/architecture/adr-002-event-subscription.md b/docs/architecture/adr-002-event-subscription.md deleted file mode 100644 index 4cc2affbc..000000000 --- a/docs/architecture/adr-002-event-subscription.md +++ /dev/null @@ -1,88 +0,0 @@ -# ADR 2: Event Subscription - -## Context - -In the light client (or any other client), the user may want to **subscribe to -a subset of transactions** (rather than all of them) using `/subscribe?event=X`. For -example, I want to subscribe for all transactions associated with a particular -account. Same for fetching. The user may want to **fetch transactions based on -some filter** (rather than fetching all the blocks). For example, I want to get -all transactions for a particular account in the last two weeks (`tx's block time >= '2017-06-05'`). - -Now you can't even subscribe to "all txs" in Tendermint. - -The goal is a simple and easy to use API for doing that. - -![Tx Send Flow Diagram](img/tags1.png) - -## Decision - -ABCI app return tags with a `DeliverTx` response inside the `data` field (_for -now, later we may create a separate field_). Tags is a list of key-value pairs, -protobuf encoded. - -Example data: - -```json -{ - "abci.account.name": "Igor", - "abci.account.address": "0xdeadbeef", - "tx.gas": 7 -} -``` - -### Subscribing for transactions events - -If the user wants to receive only a subset of transactions, ABCI-app must -return a list of tags with a `DeliverTx` response. These tags will be parsed and -matched with the current queries (subscribers). If the query matches the tags, -subscriber will get the transaction event. - -``` -/subscribe?query="tm.event = Tx AND tx.hash = AB0023433CF0334223212243BDD AND abci.account.invoice.number = 22" -``` - -A new package must be developed to replace the current `events` package. It -will allow clients to subscribe to a different types of events in the future: - -``` -/subscribe?query="abci.account.invoice.number = 22" -/subscribe?query="abci.account.invoice.owner CONTAINS Igor" -``` - -### Fetching transactions - -This is a bit tricky because a) we want to support a number of indexers, all of -which have a different API b) we don't know whenever tags will be sufficient -for the most apps (I guess we'll see). - -``` -/txs/search?query="tx.hash = AB0023433CF0334223212243BDD AND abci.account.owner CONTAINS Igor" -/txs/search?query="abci.account.owner = Igor" -``` - -For historic queries we will need a indexing storage (Postgres, SQLite, ...). - -### Issues - -- https://github.com/tendermint/tendermint/issues/376 -- https://github.com/tendermint/tendermint/issues/287 -- https://github.com/tendermint/tendermint/issues/525 (related) - -## Status - -Implemented - -## Consequences - -### Positive - -- same format for event notifications and search APIs -- powerful enough query - -### Negative - -- performance of the `match` function (where we have too many queries / subscribers) -- there is an issue where there are too many txs in the DB - -### Neutral diff --git a/docs/architecture/adr-003-abci-app-rpc.md b/docs/architecture/adr-003-abci-app-rpc.md deleted file mode 100644 index 3bc46498c..000000000 --- a/docs/architecture/adr-003-abci-app-rpc.md +++ /dev/null @@ -1,34 +0,0 @@ -# ADR 3: Must an ABCI-app have an RPC server? - -## Context - -ABCI-server could expose its own RPC-server and act as a proxy to Tendermint. - -The idea was for the Tendermint RPC to just be a transparent proxy to the app. -Clients need to talk to Tendermint for proofs, unless we burden all app devs -with exposing Tendermint proof stuff. Also seems less complex to lock down one -server than two, but granted it makes querying a bit more kludgy since it needs -to be passed as a `Query`. Also, **having a very standard rpc interface means -the light-client can work with all apps and handle proofs**. The only -app-specific logic is decoding the binary data to a more readable form (eg. -json). This is a huge advantage for code-reuse and standardization. - -## Decision - -We dont expose an RPC server on any of our ABCI-apps. - -## Status - -Implemented - -## Consequences - -### Positive - -- Unified interface for all apps - -### Negative - -- `Query` interface - -### Neutral diff --git a/docs/architecture/adr-004-historical-validators.md b/docs/architecture/adr-004-historical-validators.md deleted file mode 100644 index 7341c4735..000000000 --- a/docs/architecture/adr-004-historical-validators.md +++ /dev/null @@ -1,38 +0,0 @@ -# ADR 004: Historical Validators - -## Context - -Right now, we can query the present validator set, but there is no history. -If you were offline for a long time, there is no way to reconstruct past validators. This is needed for the light client and we agreed needs enhancement of the API. - -## Decision - -For every block, store a new structure that contains either the latest validator set, -or the height of the last block for which the validator set changed. Note this is not -the height of the block which returned the validator set change itself, but the next block, -ie. the first block it comes into effect for. - -Storing the validators will be handled by the `state` package. - -At some point in the future, we may consider more efficient storage in the case where the validators -are updated frequently - for instance by only saving the diffs, rather than the whole set. - -An alternative approach suggested keeping the validator set, or diffs of it, in a merkle IAVL tree. -While it might afford cheaper proofs that a validator set has not changed, it would be more complex, -and likely less efficient. - -## Status - -Implemented - -## Consequences - -### Positive - -- Can query old validator sets, with proof. - -### Negative - -- Writes an extra structure to disk with every block. - -### Neutral diff --git a/docs/architecture/adr-005-consensus-params.md b/docs/architecture/adr-005-consensus-params.md deleted file mode 100644 index 550e9fc0c..000000000 --- a/docs/architecture/adr-005-consensus-params.md +++ /dev/null @@ -1,85 +0,0 @@ -# ADR 005: Consensus Params - -## Context - -Consensus critical parameters controlling blockchain capacity have until now been hard coded, loaded from a local config, or neglected. -Since they may be need to be different in different networks, and potentially to evolve over time within -networks, we seek to initialize them in a genesis file, and expose them through the ABCI. - -While we have some specific parameters now, like maximum block and transaction size, we expect to have more in the future, -such as a period over which evidence is valid, or the frequency of checkpoints. - -## Decision - -### ConsensusParams - -No consensus critical parameters should ever be found in the `config.toml`. - -A new `ConsensusParams` is optionally included in the `genesis.json` file, -and loaded into the `State`. Any items not included are set to their default value. -A value of 0 is undefined (see ABCI, below). A value of -1 is used to indicate the parameter does not apply. -The parameters are used to determine the validity of a block (and tx) via the union of all relevant parameters. - -``` -type ConsensusParams struct { - BlockSize - TxSize - BlockGossip -} - -type BlockSize struct { - MaxBytes int - MaxTxs int - MaxGas int -} - -type TxSize struct { - MaxBytes int - MaxGas int -} - -type BlockGossip struct { - BlockPartSizeBytes int -} -``` - -The `ConsensusParams` can evolve over time by adding new structs that cover different aspects of the consensus rules. - -The `BlockPartSizeBytes` and the `BlockSize.MaxBytes` are enforced to be greater than 0. -The former because we need a part size, the latter so that we always have at least some sanity check over the size of blocks. - -### ABCI - -#### InitChain - -InitChain currently takes the initial validator set. It should be extended to also take parts of the ConsensusParams. -There is some case to be made for it to take the entire Genesis, except there may be things in the genesis, -like the BlockPartSize, that the app shouldn't really know about. - -#### EndBlock - -The EndBlock response includes a `ConsensusParams`, which includes BlockSize and TxSize, but not BlockGossip. -Other param struct can be added to `ConsensusParams` in the future. -The `0` value is used to denote no change. -Any other value will update that parameter in the `State.ConsensusParams`, to be applied for the next block. -Tendermint should have hard-coded upper limits as sanity checks. - -## Status - -Implemented - -## Consequences - -### Positive - -- Alternative capacity limits and consensus parameters can be specified without re-compiling the software. -- They can also change over time under the control of the application - -### Negative - -- More exposed parameters is more complexity -- Different rules at different heights in the blockchain complicates fast sync - -### Neutral - -- The TxSize, which checks validity, may be in conflict with the config's `max_block_size_tx`, which determines proposal sizes diff --git a/docs/architecture/adr-006-trust-metric.md b/docs/architecture/adr-006-trust-metric.md deleted file mode 100644 index 6fa77a609..000000000 --- a/docs/architecture/adr-006-trust-metric.md +++ /dev/null @@ -1,229 +0,0 @@ -# ADR 006: Trust Metric Design - -## Context - -The proposed trust metric will allow Tendermint to maintain local trust rankings for peers it has directly interacted with, which can then be used to implement soft security controls. The calculations were obtained from the [TrustGuard](https://dl.acm.org/citation.cfm?id=1060808) project. - -### Background - -The Tendermint Core project developers would like to improve Tendermint security and reliability by keeping track of the level of trustworthiness peers have demonstrated within the peer-to-peer network. This way, undesirable outcomes from peers will not immediately result in them being dropped from the network (potentially causing drastic changes to take place). Instead, peers behavior can be monitored with appropriate metrics and be removed from the network once Tendermint Core is certain the peer is a threat. For example, when the PEXReactor makes a request for peers network addresses from a already known peer, and the returned network addresses are unreachable, this untrustworthy behavior should be tracked. Returning a few bad network addresses probably shouldn’t cause a peer to be dropped, while excessive amounts of this behavior does qualify the peer being dropped. - -Trust metrics can be circumvented by malicious nodes through the use of strategic oscillation techniques, which adapts the malicious node’s behavior pattern in order to maximize its goals. For instance, if the malicious node learns that the time interval of the Tendermint trust metric is _X_ hours, then it could wait _X_ hours in-between malicious activities. We could try to combat this issue by increasing the interval length, yet this will make the system less adaptive to recent events. - -Instead, having shorter intervals, but keeping a history of interval values, will give our metric the flexibility needed in order to keep the network stable, while also making it resilient against a strategic malicious node in the Tendermint peer-to-peer network. Also, the metric can access trust data over a rather long period of time while not greatly increasing its history size by aggregating older history values over a larger number of intervals, and at the same time, maintain great precision for the recent intervals. This approach is referred to as fading memories, and closely resembles the way human beings remember their experiences. The trade-off to using history data is that the interval values should be preserved in-between executions of the node. - -### References - -S. Mudhakar, L. Xiong, and L. Liu, “TrustGuard: Countering Vulnerabilities in Reputation Management for Decentralized Overlay Networks,” in _Proceedings of the 14th international conference on World Wide Web, pp. 422-431_, May 2005. - -## Decision - -The proposed trust metric will allow a developer to inform the trust metric store of all good and bad events relevant to a peer's behavior, and at any time, the metric can be queried for a peer's current trust ranking. - -The three subsections below will cover the process being considered for calculating the trust ranking, the concept of the trust metric store, and the interface for the trust metric. - -### Proposed Process - -The proposed trust metric will count good and bad events relevant to the object, and calculate the percent of counters that are good over an interval with a predefined duration. This is the procedure that will continue for the life of the trust metric. When the trust metric is queried for the current **trust value**, a resilient equation will be utilized to perform the calculation. - -The equation being proposed resembles a Proportional-Integral-Derivative (PID) controller used in control systems. The proportional component allows us to be sensitive to the value of the most recent interval, while the integral component allows us to incorporate trust values stored in the history data, and the derivative component allows us to give weight to sudden changes in the behavior of a peer. We compute the trust value of a peer in interval i based on its current trust ranking, its trust rating history prior to interval _i_ (over the past _maxH_ number of intervals) and its trust ranking fluctuation. We will break up the equation into the three components. - -```math -(1) Proportional Value = a * R[i] -``` - -where _R_[*i*] denotes the raw trust value at time interval _i_ (where _i_ == 0 being current time) and _a_ is the weight applied to the contribution of the current reports. The next component of our equation uses a weighted sum over the last _maxH_ intervals to calculate the history value for time _i_: - -`H[i] =` ![formula1](img/formula1.png "Weighted Sum Formula") - -The weights can be chosen either optimistically or pessimistically. An optimistic weight creates larger weights for newer history data values, while the the pessimistic weight creates larger weights for time intervals with lower scores. The default weights used during the calculation of the history value are optimistic and calculated as _Wk_ = 0.8^_k_, for time interval _k_. With the history value available, we can now finish calculating the integral value: - -```math -(2) Integral Value = b * H[i] -``` - -Where _H_[*i*] denotes the history value at time interval _i_ and _b_ is the weight applied to the contribution of past performance for the object being measured. The derivative component will be calculated as follows: - -```math -D[i] = R[i] – H[i] - -(3) Derivative Value = c(D[i]) * D[i] -``` - -Where the value of _c_ is selected based on the _D_[*i*] value relative to zero. The default selection process makes _c_ equal to 0 unless _D_[*i*] is a negative value, in which case c is equal to 1. The result is that the maximum penalty is applied when current behavior is lower than previously experienced behavior. If the current behavior is better than the previously experienced behavior, then the Derivative Value has no impact on the trust value. With the three components brought together, our trust value equation is calculated as follows: - -```math -TrustValue[i] = a * R[i] + b * H[i] + c(D[i]) * D[i] -``` - -As a performance optimization that will keep the amount of raw interval data being saved to a reasonable size of _m_, while allowing us to represent 2^_m_ - 1 history intervals, we can employ the fading memories technique that will trade space and time complexity for the precision of the history data values by summarizing larger quantities of less recent values. While our equation above attempts to access up to _maxH_ (which can be 2^_m_ - 1), we will map those requests down to _m_ values using equation 4 below: - -```math -(4) j = index, where index > 0 -``` - -Where _j_ is one of _(0, 1, 2, … , m – 1)_ indices used to access history interval data. Now we can access the raw intervals using the following calculations: - -```math -R[0] = raw data for current time interval -``` - -`R[j] =` ![formula2](img/formula2.png "Fading Memories Formula") - -### Trust Metric Store - -Similar to the P2P subsystem AddrBook, the trust metric store will maintain information relevant to Tendermint peers. Additionally, the trust metric store will ensure that trust metrics will only be active for peers that a node is currently and directly engaged with. - -Reactors will provide a peer key to the trust metric store in order to retrieve the associated trust metric. The trust metric can then record new positive and negative events experienced by the reactor, as well as provided the current trust score calculated by the metric. - -When the node is shutting down, the trust metric store will save history data for trust metrics associated with all known peers. This saved information allows experiences with a peer to be preserved across node executions, which can span a tracking windows of days or weeks. The trust history data is loaded automatically during OnStart. - -### Interface Detailed Design - -Each trust metric allows for the recording of positive/negative events, querying the current trust value/score, and the stopping/pausing of tracking over time intervals. This can be seen below: - -```go -// TrustMetric - keeps track of peer reliability -type TrustMetric struct { - // Private elements. -} - -// Pause tells the metric to pause recording data over time intervals. -// All method calls that indicate events will unpause the metric -func (tm *TrustMetric) Pause() {} - -// Stop tells the metric to stop recording data over time intervals -func (tm *TrustMetric) Stop() {} - -// BadEvents indicates that an undesirable event(s) took place -func (tm *TrustMetric) BadEvents(num int) {} - -// GoodEvents indicates that a desirable event(s) took place -func (tm *TrustMetric) GoodEvents(num int) {} - -// TrustValue gets the dependable trust value; always between 0 and 1 -func (tm *TrustMetric) TrustValue() float64 {} - -// TrustScore gets a score based on the trust value always between 0 and 100 -func (tm *TrustMetric) TrustScore() int {} - -// NewMetric returns a trust metric with the default configuration -func NewMetric() *TrustMetric {} - -//------------------------------------------------------------------------------------------------ -// For example - -tm := NewMetric() - -tm.BadEvents(1) -score := tm.TrustScore() - -tm.Stop() -``` - -Some of the trust metric parameters can be configured. The weight values should probably be left alone in more cases, yet the time durations for the tracking window and individual time interval should be considered. - -```go -// TrustMetricConfig - Configures the weight functions and time intervals for the metric -type TrustMetricConfig struct { - // Determines the percentage given to current behavior - ProportionalWeight float64 - - // Determines the percentage given to prior behavior - IntegralWeight float64 - - // The window of time that the trust metric will track events across. - // This can be set to cover many days without issue - TrackingWindow time.Duration - - // Each interval should be short for adapability. - // Less than 30 seconds is too sensitive, - // and greater than 5 minutes will make the metric numb - IntervalLength time.Duration -} - -// DefaultConfig returns a config with values that have been tested and produce desirable results -func DefaultConfig() TrustMetricConfig {} - -// NewMetricWithConfig returns a trust metric with a custom configuration -func NewMetricWithConfig(tmc TrustMetricConfig) *TrustMetric {} - -//------------------------------------------------------------------------------------------------ -// For example - -config := TrustMetricConfig{ - TrackingWindow: time.Minute * 60 * 24, // one day - IntervalLength: time.Minute * 2, -} - -tm := NewMetricWithConfig(config) - -tm.BadEvents(10) -tm.Pause() -tm.GoodEvents(1) // becomes active again -``` - -A trust metric store should be created with a DB that has persistent storage so it can save history data across node executions. All trust metrics instantiated by the store will be created with the provided TrustMetricConfig configuration. - -When you attempt to fetch the trust metric for a peer, and an entry does not exist in the trust metric store, a new metric is automatically created and the entry made within the store. - -In additional to the fetching method, GetPeerTrustMetric, the trust metric store provides a method to call when a peer has disconnected from the node. This is so the metric can be paused (history data will not be saved) for periods of time when the node is not having direct experiences with the peer. - -```go -// TrustMetricStore - Manages all trust metrics for peers -type TrustMetricStore struct { - cmn.BaseService - - // Private elements -} - -// OnStart implements Service -func (tms *TrustMetricStore) OnStart() error {} - -// OnStop implements Service -func (tms *TrustMetricStore) OnStop() {} - -// NewTrustMetricStore returns a store that saves data to the DB -// and uses the config when creating new trust metrics -func NewTrustMetricStore(db dbm.DB, tmc TrustMetricConfig) *TrustMetricStore {} - -// Size returns the number of entries in the trust metric store -func (tms *TrustMetricStore) Size() int {} - -// GetPeerTrustMetric returns a trust metric by peer key -func (tms *TrustMetricStore) GetPeerTrustMetric(key string) *TrustMetric {} - -// PeerDisconnected pauses the trust metric associated with the peer identified by the key -func (tms *TrustMetricStore) PeerDisconnected(key string) {} - -//------------------------------------------------------------------------------------------------ -// For example - -db := dbm.NewDB("trusthistory", "goleveldb", dirPathStr) -tms := NewTrustMetricStore(db, DefaultConfig()) - -tm := tms.GetPeerTrustMetric(key) -tm.BadEvents(1) - -tms.PeerDisconnected(key) -``` - -## Status - -Approved. - -## Consequences - -### Positive - -- The trust metric will allow Tendermint to make non-binary security and reliability decisions -- Will help Tendermint implement deterrents that provide soft security controls, yet avoids disruption on the network -- Will provide useful profiling information when analyzing performance over time related to peer interaction - -### Negative - -- Requires saving the trust metric history data across node executions - -### Neutral - -- Keep in mind that, good events need to be recorded just as bad events do using this implementation diff --git a/docs/architecture/adr-007-trust-metric-usage.md b/docs/architecture/adr-007-trust-metric-usage.md deleted file mode 100644 index de3a088cb..000000000 --- a/docs/architecture/adr-007-trust-metric-usage.md +++ /dev/null @@ -1,106 +0,0 @@ -# ADR 007: Trust Metric Usage Guide - -## Context - -Tendermint is required to monitor peer quality in order to inform its peer dialing and peer exchange strategies. - -When a node first connects to the network, it is important that it can quickly find good peers. -Thus, while a node has fewer connections, it should prioritize connecting to higher quality peers. -As the node becomes well connected to the rest of the network, it can dial lesser known or lesser -quality peers and help assess their quality. Similarly, when queried for peers, a node should make -sure they dont return low quality peers. - -Peer quality can be tracked using a trust metric that flags certain behaviours as good or bad. When enough -bad behaviour accumulates, we can mark the peer as bad and disconnect. -For example, when the PEXReactor makes a request for peers network addresses from an already known peer, and the returned network addresses are unreachable, this undesirable behavior should be tracked. Returning a few bad network addresses probably shouldn’t cause a peer to be dropped, while excessive amounts of this behavior does qualify the peer for removal. The originally proposed approach and design document for the trust metric can be found in the [ADR 006](adr-006-trust-metric.md) document. - -The trust metric implementation allows a developer to obtain a peer's trust metric from a trust metric store, and track good and bad events relevant to a peer's behavior, and at any time, the peer's metric can be queried for a current trust value. The current trust value is calculated with a formula that utilizes current behavior, previous behavior, and change between the two. Current behavior is calculated as the percentage of good behavior within a time interval. The time interval is short; probably set between 30 seconds and 5 minutes. On the other hand, the historic data can estimate a peer's behavior over days worth of tracking. At the end of a time interval, the current behavior becomes part of the historic data, and a new time interval begins with the good and bad counters reset to zero. - -These are some important things to keep in mind regarding how the trust metrics handle time intervals and scoring: - -- Each new time interval begins with a perfect score -- Bad events quickly bring the score down and good events cause the score to slowly rise -- When the time interval is over, the percentage of good events becomes historic data. - -Some useful information about the inner workings of the trust metric: - -- When a trust metric is first instantiated, a timer (ticker) periodically fires in order to handle transitions between trust metric time intervals -- If a peer is disconnected from a node, the timer should be paused, since the node is no longer connected to that peer -- The ability to pause the metric is supported with the store **PeerDisconnected** method and the metric **Pause** method -- After a pause, if a good or bad event method is called on a metric, it automatically becomes unpaused and begins a new time interval. - -## Decision - -The trust metric capability is now available, yet, it still leaves the question of how should it be applied throughout Tendermint in order to properly track the quality of peers? - -### Proposed Process - -Peers are managed using an address book and a trust metric: - -- The address book keeps a record of peers and provides selection methods -- The trust metric tracks the quality of the peers - -#### Presence in Address Book - -Outbound peers are added to the address book before they are dialed, -and inbound peers are added once the peer connection is set up. -Peers are also added to the address book when they are received in response to -a pexRequestMessage. - -While a node has less than `needAddressThreshold`, it will periodically request more, -via pexRequestMessage, from randomly selected peers and from newly dialed outbound peers. - -When a new address is added to an address book that has more than `0.5*needAddressThreshold` addresses, -then with some low probability, a randomly chosen low quality peer is removed. - -#### Outbound Peers - -Peers attempt to maintain a minimum number of outbound connections by -repeatedly querying the address book for peers to connect to. -While a node has few to no outbound connections, the address book is biased to return -higher quality peers. As the node increases the number of outbound connections, -the address book is biased to return less-vetted or lower-quality peers. - -#### Inbound Peers - -Peers also maintain a maximum number of total connections, MaxNumPeers. -If a peer has MaxNumPeers, new incoming connections will be accepted with low probability. -When such a new connection is accepted, the peer disconnects from a probabilistically chosen low ranking peer -so it does not exceed MaxNumPeers. - -#### Peer Exchange - -When a peer receives a pexRequestMessage, it returns a random sample of high quality peers from the address book. Peers with no score or low score should not be inclided in a response to pexRequestMessage. - -#### Peer Quality - -Peer quality is tracked in the connection and across the reactors by storing the TrustMetric in the peer's -thread safe Data store. - -Peer behaviour is then defined as one of the following: - -- Fatal - something outright malicious that causes us to disconnect the peer and ban it from the address book for some amount of time -- Bad - Any kind of timeout, messages that don't unmarshal, fail other validity checks, or messages we didn't ask for or aren't expecting (usually worth one bad event) -- Neutral - Unknown channels/message types/version upgrades (no good or bad events recorded) -- Correct - Normal correct behavior (worth one good event) -- Good - some random majority of peers per reactor sending us useful messages (worth more than one good event). - -Note that Fatal behaviour causes us to remove the peer, and neutral behaviour does not affect the score. - -## Status - -Proposed. - -## Consequences - -### Positive - -- Bringing the address book and trust metric store together will cause the network to be built in a way that encourages greater security and reliability. - -### Negative - -- TBD - -### Neutral - -- Keep in mind that, good events need to be recorded just as bad events do using this implementation. diff --git a/docs/architecture/adr-008-priv-validator.md b/docs/architecture/adr-008-priv-validator.md deleted file mode 100644 index a3d31048a..000000000 --- a/docs/architecture/adr-008-priv-validator.md +++ /dev/null @@ -1,35 +0,0 @@ -# ADR 008: SocketPV - -Tendermint node's should support only two in-process PrivValidator -implementations: - -- FilePV uses an unencrypted private key in a "priv_validator.json" file - no - configuration required (just `tendermint init validator`). -- TCPVal and IPCVal use TCP and Unix sockets respectively to send signing requests - to another process - the user is responsible for starting that process themselves. - -Both TCPVal and IPCVal addresses can be provided via flags at the command line -or in the configuration file; TCPVal addresses must be of the form -`tcp://:` and IPCVal addresses `unix:///path/to/file.sock` - -doing so will cause Tendermint to ignore any private validator files. - -TCPVal will listen on the given address for incoming connections from an external -private validator process. It will halt any operation until at least one external -process successfully connected. - -The external priv_validator process will dial the address to connect to -Tendermint, and then Tendermint will send requests on the ensuing connection to -sign votes and proposals. Thus the external process initiates the connection, -but the Tendermint process makes all requests. In a later stage we're going to -support multiple validators for fault tolerance. To prevent double signing they -need to be synced, which is deferred to an external solution (see #1185). - -Conversely, IPCVal will make an outbound connection to an existing socket opened -by the external validator process. - -In addition, Tendermint will provide implementations that can be run in that -external process. These include: - -- FilePV will encrypt the private key, and the user must enter password to - decrypt key when process is started. -- LedgerPV uses a Ledger Nano S to handle all signing. diff --git a/docs/architecture/adr-009-ABCI-design.md b/docs/architecture/adr-009-ABCI-design.md deleted file mode 100644 index 6acd31991..000000000 --- a/docs/architecture/adr-009-ABCI-design.md +++ /dev/null @@ -1,271 +0,0 @@ -# ADR 009: ABCI UX Improvements - -## Changelog - -23-06-2018: Some minor fixes from review -07-06-2018: Some updates based on discussion with Jae -07-06-2018: Initial draft to match what was released in ABCI v0.11 - -## Context - -The ABCI was first introduced in late 2015. It's purpose is to be: - -- a generic interface between state machines and their replication engines -- agnostic to the language the state machine is written in -- agnostic to the replication engine that drives it - -This means ABCI should provide an interface for both pluggable applications and -pluggable consensus engines. - -To achieve this, it uses Protocol Buffers (proto3) for message types. The dominant -implementation is in Go. - -After some recent discussions with the community on github, the following were -identified as pain points: - -- Amino encoded types -- Managing validator sets -- Imports in the protobuf file - -See the [references](#references) for more. - -### Imports - -The native proto library in Go generates inflexible and verbose code. -Many in the Go community have adopted a fork called -[gogoproto](https://github.com/gogo/protobuf) that provides a -variety of features aimed to improve the developer experience. -While `gogoproto` is nice, it creates an additional dependency, and compiling -the protobuf types for other languages has been reported to fail when `gogoproto` is used. - -### Amino - -Amino is an encoding protocol designed to improve over insufficiencies of protobuf. -It's goal is to be proto4. - -Many people are frustrated by incompatibility with protobuf, -and with the requirement for Amino to be used at all within ABCI. - -We intend to make Amino successful enough that we can eventually use it for ABCI -message types directly. By then it should be called proto4. In the meantime, -we want it to be easy to use. - -### PubKey - -PubKeys are encoded using Amino (and before that, go-wire). -Ideally, PubKeys are an interface type where we don't know all the -implementation types, so its unfitting to use `oneof` or `enum`. - -### Addresses - -The address for ED25519 pubkey is the RIPEMD160 of the Amino -encoded pubkey. This introduces an Amino dependency in the address generation, -a functionality that is widely required and should be easy to compute as -possible. - -### Validators - -To change the validator set, applications can return a list of validator updates -with ResponseEndBlock. In these updates, the public key _must_ be included, -because Tendermint requires the public key to verify validator signatures. This -means ABCI developers have to work with PubKeys. That said, it would also be -convenient to work with address information, and for it to be simple to do so. - -### AbsentValidators - -Tendermint also provides a list of validators in BeginBlock who did not sign the -last block. This allows applications to reflect availability behaviour in the -application, for instance by punishing validators for not having votes included -in commits. - -### InitChain - -Tendermint passes in a list of validators here, and nothing else. It would -benefit the application to be able to control the initial validator set. For -instance the genesis file could include application-based information about the -initial validator set that the application could process to determine the -initial validator set. Additionally, InitChain would benefit from getting all -the genesis information. - -### Header - -ABCI provides the Header in RequestBeginBlock so the application can have -important information about the latest state of the blockchain. - -## Decision - -### Imports - -Move away from gogoproto. In the short term, we will just maintain a second -protobuf file without the gogoproto annotations. In the medium term, we will -make copies of all the structs in Golang and shuttle back and forth. In the long -term, we will use Amino. - -### Amino - -To simplify ABCI application development in the short term, -Amino will be completely removed from the ABCI: - -- It will not be required for PubKey encoding -- It will not be required for computing PubKey addresses - -That said, we are working to make Amino a huge success, and to become proto4. -To facilitate adoption and cross-language compatibility in the near-term, Amino -v1 will: - -- be fully compatible with the subset of proto3 that excludes `oneof` -- use the Amino prefix system to provide interface types, as opposed to `oneof` - style union types. - -That said, an Amino v2 will be worked on to improve the performance of the -format and its useability in cryptographic applications. - -### PubKey - -Encoding schemes infect software. As a generic middleware, ABCI aims to have -some cross scheme compatibility. For this it has no choice but to include opaque -bytes from time to time. While we will not enforce Amino encoding for these -bytes yet, we need to provide a type system. The simplest way to do this is to -use a type string. - -PubKey will now look like: - -``` -message PubKey { - string type - bytes data -} -``` - -where `type` can be: - -- "ed225519", with `data = ` -- "secp256k1", with `data = <33-byte OpenSSL compressed pubkey>` - -As we want to retain flexibility here, and since ideally, PubKey would be an -interface type, we do not use `enum` or `oneof`. - -### Addresses - -To simplify and improve computing addresses, we change it to the first 20-bytes of the SHA256 -of the raw 32-byte public key. - -We continue to use the Bitcoin address scheme for secp256k1 keys. - -### Validators - -Add a `bytes address` field: - -``` -message Validator { - bytes address - PubKey pub_key - int64 power -} -``` - -### RequestBeginBlock and AbsentValidators - -To simplify this, RequestBeginBlock will include the complete validator set, -including the address, and voting power of each validator, along -with a boolean for whether or not they voted: - -``` -message RequestBeginBlock { - bytes hash - Header header - LastCommitInfo last_commit_info - repeated Evidence byzantine_validators -} - -message LastCommitInfo { - int32 CommitRound - repeated SigningValidator validators -} - -message SigningValidator { - Validator validator - bool signed_last_block -} -``` - -Note that in Validators in RequestBeginBlock, we DO NOT include public keys. Public keys are -larger than addresses and in the future, with quantum computers, will be much -larger. The overhead of passing them, especially during fast-sync, is -significant. - -Additional, addresses are changing to be simpler to compute, further removing -the need to include pubkeys here. - -In short, ABCI developers must be aware of both addresses and public keys. - -### ResponseEndBlock - -Since ResponseEndBlock includes Validator, it must now include their address. - -### InitChain - -Change RequestInitChain to give the app all the information from the genesis file: - -``` -message RequestInitChain { - int64 time - string chain_id - ConsensusParams consensus_params - repeated Validator validators - bytes app_state_bytes -} -``` - -Change ResponseInitChain to allow the app to specify the initial validator set -and consensus parameters. - -``` -message ResponseInitChain { - ConsensusParams consensus_params - repeated Validator validators -} -``` - -### Header - -Now that Tendermint Amino will be compatible with proto3, the Header in ABCI -should exactly match the Tendermint header - they will then be encoded -identically in ABCI and in Tendermint Core. - -## Status - -Implemented - -## Consequences - -### Positive - -- Easier for developers to build on the ABCI -- ABCI and Tendermint headers are identically serialized - -### Negative - -- Maintenance overhead of alternative type encoding scheme -- Performance overhead of passing all validator info every block (at least its - only addresses, and not also pubkeys) -- Maintenance overhead of duplicate types - -### Neutral - -- ABCI developers must know about validator addresses - -## References - -- [ABCI v0.10.3 Specification (before this - proposal)](https://github.com/tendermint/abci/blob/v0.10.3/specification.rst) -- [ABCI v0.11.0 Specification (implementing first draft of this - proposal)](https://github.com/tendermint/abci/blob/v0.11.0/specification.md) -- [Ed25519 addresses](https://github.com/tendermint/go-crypto/issues/103) -- [InitChain contains the - Genesis](https://github.com/tendermint/abci/issues/216) -- [PubKeys](https://github.com/tendermint/tendermint/issues/1524) -- [Notes on - Header](https://github.com/tendermint/tendermint/issues/1605) -- [Gogoproto issues](https://github.com/tendermint/abci/issues/256) -- [Absent Validators](https://github.com/tendermint/abci/issues/231) diff --git a/docs/architecture/adr-010-crypto-changes.md b/docs/architecture/adr-010-crypto-changes.md deleted file mode 100644 index 41d15da35..000000000 --- a/docs/architecture/adr-010-crypto-changes.md +++ /dev/null @@ -1,77 +0,0 @@ -# ADR 010: Crypto Changes - -## Context - -Tendermint is a cryptographic protocol that uses and composes a variety of cryptographic primitives. - -After nearly 4 years of development, Tendermint has recently undergone multiple security reviews to search for vulnerabilities and to assess the the use and composition of cryptographic primitives. - -### Hash Functions - -Tendermint uses RIPEMD160 universally as a hash function, most notably in its Merkle tree implementation. - -RIPEMD160 was chosen because it provides the shortest fingerprint that is long enough to be considered secure (ie. birthday bound of 80-bits). -It was also developed in the open academic community, unlike NSA-designed algorithms like SHA256. - -That said, the cryptographic community appears to unanimously agree on the security of SHA256. It has become a universal standard, especially now that SHA1 is broken, being required in TLS connections and having optimized support in hardware. - -### Merkle Trees - -Tendermint uses a simple Merkle tree to compute digests of large structures like transaction batches -and even blockchain headers. The Merkle tree length prefixes byte arrays before concatenating and hashing them. -It uses RIPEMD160. - -### Addresses - -ED25519 addresses are computed using the RIPEMD160 of the Amino encoding of the public key. -RIPEMD160 is generally considered an outdated hash function, and is much slower -than more modern functions like SHA256 or Blake2. - -### Authenticated Encryption - -Tendermint P2P connections use authenticated encryption to provide privacy and authentication in the communications. -This is done using the simple Station-to-Station protocol with the NaCL Ed25519 library. - -While there have been no vulnerabilities found in the implementation, there are some concerns: - -- NaCL uses Salsa20, a not-widely used and relatively out-dated stream cipher that has been obsoleted by ChaCha20 -- Connections use RIPEMD160 to compute a value that is used for the encryption nonce with subtle requirements on how it's used - -## Decision - -### Hash Functions - -Use the first 20-bytes of the SHA256 hash instead of RIPEMD160 for everything - -### Merkle Trees - -TODO - -### Addresses - -Compute ED25519 addresses as the first 20-bytes of the SHA256 of the raw 32-byte public key - -### Authenticated Encryption - -Make the following changes: - -- Use xChaCha20 instead of xSalsa20 - https://github.com/tendermint/tendermint/issues/1124 -- Use an HKDF instead of RIPEMD160 to compute nonces - https://github.com/tendermint/tendermint/issues/1165 - -## Status - -Implemented - -## Consequences - -### Positive - -- More modern and standard cryptographic functions with wider adoption and hardware acceleration - -### Negative - -- Exact authenticated encryption construction isn't already provided in a well-used library - -### Neutral - -## References diff --git a/docs/architecture/adr-011-monitoring.md b/docs/architecture/adr-011-monitoring.md deleted file mode 100644 index e4b62c261..000000000 --- a/docs/architecture/adr-011-monitoring.md +++ /dev/null @@ -1,116 +0,0 @@ -# ADR 011: Monitoring - -## Changelog - -08-06-2018: Initial draft -11-06-2018: Reorg after @xla comments -13-06-2018: Clarification about usage of labels - -## Context - -In order to bring more visibility into Tendermint, we would like it to report -metrics and, maybe later, traces of transactions and RPC queries. See -https://github.com/tendermint/tendermint/issues/986. - -A few solutions were considered: - -1. [Prometheus](https://prometheus.io) - a) Prometheus API - b) [go-kit metrics package](https://github.com/go-kit/kit/tree/master/metrics) as an interface plus Prometheus - c) [telegraf](https://github.com/influxdata/telegraf) - d) new service, which will listen to events emitted by pubsub and report metrics -2. [OpenCensus](https://opencensus.io/introduction/) - -### 1. Prometheus - -Prometheus seems to be the most popular product out there for monitoring. It has -a Go client library, powerful queries, alerts. - -**a) Prometheus API** - -We can commit to using Prometheus in Tendermint, but I think Tendermint users -should be free to choose whatever monitoring tool they feel will better suit -their needs (if they don't have existing one already). So we should try to -abstract interface enough so people can switch between Prometheus and other -similar tools. - -**b) go-kit metrics package as an interface** - -metrics package provides a set of uniform interfaces for service -instrumentation and offers adapters to popular metrics packages: - -https://godoc.org/github.com/go-kit/kit/metrics#pkg-subdirectories - -Comparing to Prometheus API, we're losing customisability and control, but gaining -freedom in choosing any instrument from the above list given we will extract -metrics creation into a separate function (see "providers" in node/node.go). - -**c) telegraf** - -Unlike already discussed options, telegraf does not require modifying Tendermint -source code. You create something called an input plugin, which polls -Tendermint RPC every second and calculates the metrics itself. - -While it may sound good, but some metrics we want to report are not exposed via -RPC or pubsub, therefore can't be accessed externally. - -**d) service, listening to pubsub** - -Same issue as the above. - -### 2. opencensus - -opencensus provides both metrics and tracing, which may be important in the -future. It's API looks different from go-kit and Prometheus, but looks like it -covers everything we need. - -Unfortunately, OpenCensus go client does not define any -interfaces, so if we want to abstract away metrics we -will need to write interfaces ourselves. - -### List of metrics - -| | Name | Type | Description | -| --- | ------------------------------------ | ------ | ----------------------------------------------------------------------------- | -| A | consensus_height | Gauge | | -| A | consensus_validators | Gauge | Number of validators who signed | -| A | consensus_validators_power | Gauge | Total voting power of all validators | -| A | consensus_missing_validators | Gauge | Number of validators who did not sign | -| A | consensus_missing_validators_power | Gauge | Total voting power of the missing validators | -| A | consensus_byzantine_validators | Gauge | Number of validators who tried to double sign | -| A | consensus_byzantine_validators_power | Gauge | Total voting power of the byzantine validators | -| A | consensus_block_interval | Timing | Time between this and last block (Block.Header.Time) | -| | consensus_block_time | Timing | Time to create a block (from creating a proposal to commit) | -| | consensus_time_between_blocks | Timing | Time between committing last block and (receiving proposal creating proposal) | -| A | consensus_rounds | Gauge | Number of rounds | -| | consensus_prevotes | Gauge | | -| | consensus_precommits | Gauge | | -| | consensus_prevotes_total_power | Gauge | | -| | consensus_precommits_total_power | Gauge | | -| A | consensus_num_txs | Gauge | | -| A | mempool_size | Gauge | | -| A | consensus_total_txs | Gauge | | -| A | consensus_block_size | Gauge | In bytes | -| A | p2p_peers | Gauge | Number of peers node's connected to | - -`A` - will be implemented in the fist place. - -**Proposed solution** - -## Status - -Implemented - -## Consequences - -### Positive - -Better visibility, support of variety of monitoring backends - -### Negative - -One more library to audit, messing metrics reporting code with business domain. - -### Neutral - -- diff --git a/docs/architecture/adr-012-peer-transport.md b/docs/architecture/adr-012-peer-transport.md deleted file mode 100644 index 1cf4fb80b..000000000 --- a/docs/architecture/adr-012-peer-transport.md +++ /dev/null @@ -1,113 +0,0 @@ -# ADR 012: PeerTransport - -## Context - -One of the more apparent problems with the current architecture in the p2p -package is that there is no clear separation of concerns between different -components. Most notably the `Switch` is currently doing physical connection -handling. An artifact is the dependency of the Switch on -`[config.P2PConfig`](https://github.com/tendermint/tendermint/blob/05a76fb517f50da27b4bfcdc7b4cf185fc61eff6/config/config.go#L272-L339). - -Addresses: - -- [#2046](https://github.com/tendermint/tendermint/issues/2046) -- [#2047](https://github.com/tendermint/tendermint/issues/2047) - -First iteraton in [#2067](https://github.com/tendermint/tendermint/issues/2067) - -## Decision - -Transport concerns will be handled by a new component (`PeerTransport`) which -will provide Peers at its boundary to the caller. In turn `Switch` will use -this new component accept new `Peer`s and dial them based on `NetAddress`. - -### PeerTransport - -Responsible for emitting and connecting to Peers. The implementation of `Peer` -is left to the transport, which implies that the chosen transport dictates the -characteristics of the implementation handed back to the `Switch`. Each -transport implementation is responsible to filter establishing peers specific -to its domain, for the default multiplexed implementation the following will -apply: - -- connections from our own node -- handshake fails -- upgrade to secret connection fails -- prevent duplicate ip -- prevent duplicate id -- nodeinfo incompatibility - -```go -// PeerTransport proxies incoming and outgoing peer connections. -type PeerTransport interface { - // Accept returns a newly connected Peer. - Accept() (Peer, error) - - // Dial connects to a Peer. - Dial(NetAddress) (Peer, error) -} - -// EXAMPLE OF DEFAULT IMPLEMENTATION - -// multiplexTransport accepts tcp connections and upgrades to multiplexted -// peers. -type multiplexTransport struct { - listener net.Listener - - acceptc chan accept - closec <-chan struct{} - listenc <-chan struct{} - - dialTimeout time.Duration - handshakeTimeout time.Duration - nodeAddr NetAddress - nodeInfo NodeInfo - nodeKey NodeKey - - // TODO(xla): Remove when MConnection is refactored into mPeer. - mConfig conn.MConnConfig -} - -var _ PeerTransport = (*multiplexTransport)(nil) - -// NewMTransport returns network connected multiplexed peers. -func NewMTransport( - nodeAddr NetAddress, - nodeInfo NodeInfo, - nodeKey NodeKey, -) *multiplexTransport -``` - -### Switch - -From now the Switch will depend on a fully setup `PeerTransport` to -retrieve/reach out to its peers. As the more low-level concerns are pushed to -the transport, we can omit passing the `config.P2PConfig` to the Switch. - -```go -func NewSwitch(transport PeerTransport, opts ...SwitchOption) *Switch -``` - -## Status - -In Review. - -## Consequences - -### Positive - -- free Switch from transport concerns - simpler implementation -- pluggable transport implementation - simpler test setup -- remove Switch dependency on P2PConfig - easier to test - -### Negative - -- more setup for tests which depend on Switches - -### Neutral - -- multiplexed will be the default implementation - -[0] These guards could be potentially extended to be pluggable much like -middlewares to express different concerns required by differentally configured -environments. diff --git a/docs/architecture/adr-013-symmetric-crypto.md b/docs/architecture/adr-013-symmetric-crypto.md deleted file mode 100644 index 69bfc2f29..000000000 --- a/docs/architecture/adr-013-symmetric-crypto.md +++ /dev/null @@ -1,99 +0,0 @@ -# ADR 013: Need for symmetric cryptography - -## Context - -We require symmetric ciphers to handle how we encrypt keys in the sdk, -and to potentially encrypt `priv_validator.json` in tendermint. - -Currently we use AEAD's to support symmetric encryption, -which is great since we want data integrity in addition to privacy and authenticity. -We don't currently have a scenario where we want to encrypt without data integrity, -so it is fine to optimize our code to just use AEAD's. -Currently there is not a way to switch out AEAD's easily, this ADR outlines a way -to easily swap these out. - -### How do we encrypt with AEAD's - -AEAD's typically require a nonce in addition to the key. -For the purposes we require symmetric cryptography for, -we need encryption to be stateless. -Because of this we use random nonces. -(Thus the AEAD must support random nonces) - -We currently construct a random nonce, and encrypt the data with it. -The returned value is `nonce || encrypted data`. -The limitation of this is that does not provide a way to identify -which algorithm was used in encryption. -Consequently decryption with multiple algoritms is sub-optimal. -(You have to try them all) - -## Decision - -We should create the following two methods in a new `crypto/encoding/symmetric` package: - -```golang -func Encrypt(aead cipher.AEAD, plaintext []byte) (ciphertext []byte, err error) -func Decrypt(key []byte, ciphertext []byte) (plaintext []byte, err error) -func Register(aead cipher.AEAD, algo_name string, NewAead func(key []byte) (cipher.Aead, error)) error -``` - -This allows you to specify the algorithm in encryption, but not have to specify -it in decryption. -This is intended for ease of use in downstream applications, in addition to people -looking at the file directly. -One downside is that for the encrypt function you must have already initialized an AEAD, -but I don't really see this as an issue. - -If there is no error in encryption, Encrypt will return `algo_name || nonce || aead_ciphertext`. -`algo_name` should be length prefixed, using standard varuint encoding. -This will be binary data, but thats not a problem considering the nonce and ciphertext are also binary. - -This solution requires a mapping from aead type to name. -We can achieve this via reflection. - -```golang -func getType(myvar interface{}) string { - if t := reflect.TypeOf(myvar); t.Kind() == reflect.Ptr { - return "*" + t.Elem().Name() - } else { - return t.Name() - } -} -``` - -Then we maintain a map from the name returned from `getType(aead)` to `algo_name`. - -In decryption, we read the `algo_name`, and then instantiate a new AEAD with the key. -Then we call the AEAD's decrypt method on the provided nonce/ciphertext. - -`Register` allows a downstream user to add their own desired AEAD to the symmetric package. -It will error if the AEAD name is already registered. -This prevents a malicious import from modifying / nullifying an AEAD at runtime. - -## Implementation strategy - -The golang implementation of what is proposed is rather straight forward. -The concern is that we will break existing private keys if we just switch to this. -If this is concerning, we can make a simple script which doesn't require decoding privkeys, -for converting from the old format to the new one. - -## Status - -Proposed. - -## Consequences - -### Positive - -- Allows us to support new AEAD's, in a way that makes decryption easier -- Allows downstream users to add their own AEAD - -### Negative - -- We will have to break all private keys stored on disk. - They can be recovered using seed words, and upgrade scripts are simple. - -### Neutral - -- Caller has to instantiate the AEAD with the private key. - However it forces them to be aware of what signing algorithm they are using, which is a positive. diff --git a/docs/architecture/adr-014-secp-malleability.md b/docs/architecture/adr-014-secp-malleability.md deleted file mode 100644 index 33f9d0044..000000000 --- a/docs/architecture/adr-014-secp-malleability.md +++ /dev/null @@ -1,63 +0,0 @@ -# ADR 014: Secp256k1 Signature Malleability - -## Context - -Secp256k1 has two layers of malleability. -The signer has a random nonce, and thus can produce many different valid signatures. -This ADR is not concerned with that. -The second layer of malleability basically allows one who is given a signature -to produce exactly one more valid signature for the same message from the same public key. -(They don't even have to know the message!) -The math behind this will be explained in the subsequent section. - -Note that in many downstream applications, signatures will appear in a transaction, and therefore in the tx hash. -This means that if someone broadcasts a transaction with secp256k1 signature, the signature can be altered into the other form by anyone in the p2p network. -Thus the tx hash will change, and this altered tx hash may be committed instead. -This breaks the assumption that you can broadcast a valid transaction and just wait for its hash to be included on chain. -One example is if you are broadcasting a tx in cosmos, -and you wait for it to appear on chain before incrementing your sequence number. -You may never increment your sequence number if a different tx hash got committed. -Removing this second layer of signature malleability concerns could ease downstream development. - -### ECDSA context - -Secp256k1 is ECDSA over a particular curve. -The signature is of the form `(r, s)`, where `s` is a field element. -(The particular field is the `Z_n`, where the elliptic curve has order `n`) -However `(r, -s)` is also another valid solution. -Note that anyone can negate a group element, and therefore can get this second signature. - -## Decision - -We can just distinguish a canonical form for the ECDSA signatures. -Then we require that all ECDSA signatures be in the form which we defined as canonical. -We reject signatures in non-canonical form. - -A canonical form is rather easy to define and check. -It would just be the smaller of the two values for `s`, defined lexicographically. -This is a simple check, instead of checking if `s < n`, instead check `s <= (n - 1)/2`. -An example of another cryptosystem using this -is the parity definition here https://github.com/zkcrypto/pairing/pull/30#issuecomment-372910663. - -This is the same solution Ethereum has chosen for solving secp malleability. - -## Proposed Implementation - -Fork https://github.com/btcsuite/btcd, and just update the [parse sig method](https://github.com/btcsuite/btcd/blob/11fcd83963ab0ecd1b84b429b1efc1d2cdc6d5c5/btcec/signature.go#L195) and serialize functions to enforce our canonical form. - -## Status - -Implemented - -## Consequences - -### Positive - -- Lets us maintain the ability to expect a tx hash to appear in the blockchain. - -### Negative - -- More work in all future implementations (Though this is a very simple check) -- Requires us to maintain another fork - -### Neutral diff --git a/docs/architecture/adr-015-crypto-encoding.md b/docs/architecture/adr-015-crypto-encoding.md deleted file mode 100644 index bb0a8cd80..000000000 --- a/docs/architecture/adr-015-crypto-encoding.md +++ /dev/null @@ -1,84 +0,0 @@ -# ADR 015: Crypto encoding - -## Context - -We must standardize our method for encoding public keys and signatures on chain. -Currently we amino encode the public keys and signatures. -The reason we are using amino here is primarily due to ease of support in -parsing for other languages. -We don't need its upgradability properties in cryptosystems, as a change in -the crypto that requires adapting the encoding, likely warrants being deemed -a new cryptosystem. -(I.e. using new public parameters) - -## Decision - -### Public keys - -For public keys, we will continue to use amino encoding on the canonical -representation of the pubkey. -(Canonical as defined by the cryptosystem itself) -This has two significant drawbacks. -Amino encoding is less space-efficient, due to requiring support for upgradability. -Amino encoding support requires forking protobuf and adding this new interface support -option in the language of choice. - -The reason for continuing to use amino however is that people can create code -more easily in languages that already have an up to date amino library. -It is possible that this will change in the future, if it is deemed that -requiring amino for interacting with Tendermint cryptography is unnecessary. - -The arguments for space efficiency here are refuted on the basis that there are -far more egregious wastages of space in the SDK. -The space requirement of the public keys doesn't cause many problems beyond -increasing the space attached to each validator / account. - -The alternative to using amino here would be for us to create an enum type. -Switching to just an enum type is worthy of investigation post-launch. -For reference, part of amino encoding interfaces is basically a 4 byte enum -type definition. -Enum types would just change that 4 bytes to be a variant, and it would remove -the protobuf overhead, but it would be hard to integrate into the existing API. - -### Signatures - -Signatures should be switched to be `[]byte`. -Spatial efficiency in the signatures is quite important, -as it directly affects the gas cost of every transaction, -and the throughput of the chain. -Signatures don't need to encode what type they are for (unlike public keys) -since public keys must already be known. -Therefore we can validate the signature without needing to encode its type. - -When placed in state, signatures will still be amino encoded, but it will be the -primitive type `[]byte` getting encoded. - -#### Ed25519 - -Use the canonical representation for signatures. - -#### Secp256k1 - -There isn't a clear canonical representation here. -Signatures have two elements `r,s`. -These bytes are encoded as `r || s`, where `r` and `s` are both exactly -32 bytes long, encoded big-endian. -This is basically Ethereum's encoding, but without the leading recovery bit. - -## Status - -Implemented - -## Consequences - -### Positive - -- More space efficient signatures - -### Negative - -- We have an amino dependency for cryptography. - -### Neutral - -- No change to public keys diff --git a/docs/architecture/adr-016-protocol-versions.md b/docs/architecture/adr-016-protocol-versions.md deleted file mode 100644 index 3a2351a56..000000000 --- a/docs/architecture/adr-016-protocol-versions.md +++ /dev/null @@ -1,308 +0,0 @@ -# ADR 016: Protocol Versions - -## TODO - -- How to / should we version the authenticated encryption handshake itself (ie. - upfront protocol negotiation for the P2PVersion) -- How to / should we version ABCI itself? Should it just be absorbed by the - BlockVersion? - -## Changelog - -- 18-09-2018: Updates after working a bit on implementation - - ABCI Handshake needs to happen independently of starting the app - conns so we can see the result - - Add question about ABCI protocol version -- 16-08-2018: Updates after discussion with SDK team - - Remove signalling for next version from Header/ABCI -- 03-08-2018: Updates from discussion with Jae: - - ProtocolVersion contains Block/AppVersion, not Current/Next - - signal upgrades to Tendermint using EndBlock fields - - dont restrict peer compatibilty by version to simplify syncing old nodes -- 28-07-2018: Updates from review - - split into two ADRs - one for protocol, one for chains - - include signalling for upgrades in header -- 16-07-2018: Initial draft - was originally joint ADR for protocol and chain - versions - -## Context - -Here we focus on software-agnostic protocol versions. - -The Software Version is covered by SemVer and described elsewhere. -It is not relevant to the protocol description, suffice to say that if any protocol version -changes, the software version changes, but not necessarily vice versa. - -Software version should be included in NodeInfo for convenience/diagnostics. - -We are also interested in versioning across different blockchains in a -meaningful way, for instance to differentiate branches of a contentious -hard-fork. We leave that for a later ADR. - -## Requirements - -We need to version components of the blockchain that may be independently upgraded. -We need to do it in a way that is scalable and maintainable - we can't just litter -the code with conditionals. - -We can consider the complete version of the protocol to contain the following sub-versions: -BlockVersion, P2PVersion, AppVersion. These versions reflect the major sub-components -of the software that are likely to evolve together, at different rates, and in different ways, -as described below. - -The BlockVersion defines the core of the blockchain data structures and -should change infrequently. - -The P2PVersion defines how peers connect and communicate with eachother - it's -not part of the blockchain data structures, but defines the protocols used to build the -blockchain. It may change gradually. - -The AppVersion determines how we compute app specific information, like the -AppHash and the Results. - -All of these versions may change over the life of a blockchain, and we need to -be able to help new nodes sync up across version changes. This means we must be willing -to connect to peers with older version. - -### BlockVersion - -- All tendermint hashed data-structures (headers, votes, txs, responses, etc.). - - Note the semantic meaning of a transaction may change according to the AppVersion, but the way txs are merklized into the header is part of the BlockVersion -- It should be the least frequent/likely to change. - - Tendermint should be stabilizing - it's just Atomic Broadcast. - - We can start considering for Tendermint v2.0 in a year -- It's easy to determine the version of a block from its serialized form - -### P2PVersion - -- All p2p and reactor messaging (messages, detectable behaviour) -- Will change gradually as reactors evolve to improve performance and support new features - eg proposed new message types BatchTx in the mempool and HasBlockPart in the consensus -- It's easy to determine the version of a peer from its first serialized message/s -- New versions must be compatible with at least one old version to allow gradual upgrades - -### AppVersion - -- The ABCI state machine (txs, begin/endblock behaviour, commit hashing) -- Behaviour and message types will change abruptly in the course of the life of a chain -- Need to minimize complexity of the code for supporting different AppVersions at different heights -- Ideally, each version of the software supports only a _single_ AppVersion at one time - - this means we checkout different versions of the software at different heights instead of littering the code - with conditionals - - minimize the number of data migrations required across AppVersion (ie. most AppVersion should be able to read the same state from disk as previous AppVersion). - -## Ideal - -Each component of the software is independently versioned in a modular way and its easy to mix and match and upgrade. - -## Proposal - -Each of BlockVersion, AppVersion, P2PVersion, is a monotonically increasing uint64. - -To use these versions, we need to update the block Header, the p2p NodeInfo, and the ABCI. - -### Header - -Block Header should include a `Version` struct as its first field like: - -``` -type Version struct { - Block uint64 - App uint64 -} -``` - -Here, `Version.Block` defines the rules for the current block, while -`Version.App` defines the app version that processed the last block and computed -the `AppHash` in the current block. Together they provide a complete description -of the consensus-critical protocol. - -Since we have settled on a proto3 header, the ability to read the BlockVersion out of the serialized header is unanimous. - -Using a Version struct gives us more flexibility to add fields without breaking -the header. - -The ProtocolVersion struct includes both the Block and App versions - it should -serve as a complete description of the consensus-critical protocol. - -### NodeInfo - -NodeInfo should include a Version struct as its first field like: - -``` -type Version struct { - P2P uint64 - Block uint64 - App uint64 - - Other []string -} -``` - -Note this effectively makes `Version.P2P` the first field in the NodeInfo, so it -should be easy to read this out of the serialized header if need be to facilitate an upgrade. - -The `Version.Other` here should include additional information like the name of the software client and -it's SemVer version - this is for convenience only. Eg. -`tendermint-core/v0.22.8`. It's a `[]string` so it can include information about -the version of Tendermint, of the app, of Tendermint libraries, etc. - -### ABCI - -Since the ABCI is responsible for keeping Tendermint and the App in sync, we -need to communicate version information through it. - -On startup, we use Info to perform a basic handshake. It should include all the -version information. - -We also need to be able to update versions in the life of a blockchain. The -natural place to do this is EndBlock. - -Note that currently the result of the Handshake isn't exposed anywhere, as the -handshaking happens inside the `proxy.AppConns` abstraction. We will need to -remove the handshaking from the `proxy` package so we can call it independently -and get the result, which should contain the application version. - -#### Info - -RequestInfo should add support for protocol versions like: - -``` -message RequestInfo { - string version - uint64 block_version - uint64 p2p_version -} -``` - -Similarly, ResponseInfo should return the versions: - -``` -message ResponseInfo { - string data - - string version - uint64 app_version - - int64 last_block_height - bytes last_block_app_hash -} -``` - -The existing `version` fields should be called `software_version` but we leave -them for now to reduce the number of breaking changes. - -#### EndBlock - -Updating the version could be done either with new fields or by using the -existing `tags`. Since we're trying to communicate information that will be -included in Tendermint block Headers, it should be native to the ABCI, and not -something embedded through some scheme in the tags. Thus, version updates should -be communicated through EndBlock. - -EndBlock already contains `ConsensusParams`. We can add version information to -the ConsensusParams as well: - -``` -message ConsensusParams { - - BlockSize block_size - EvidenceParams evidence_params - VersionParams version -} - -message VersionParams { - uint64 block_version - uint64 app_version -} -``` - -For now, the `block_version` will be ignored, as we do not allow block version -to be updated live. If the `app_version` is set, it signals that the app's -protocol version has changed, and the new `app_version` will be included in the -`Block.Header.Version.App` for the next block. - -### BlockVersion - -BlockVersion is included in both the Header and the NodeInfo. - -Changing BlockVersion should happen quite infrequently and ideally only for -critical upgrades. For now, it is not encoded in ABCI, though it's always -possible to use tags to signal an external process to co-ordinate an upgrade. - -Note Ethereum has not had to make an upgrade like this (everything has been at state machine level, AFAIK). - -### P2PVersion - -P2PVersion is not included in the block Header, just the NodeInfo. - -P2PVersion is the first field in the NodeInfo. NodeInfo is also proto3 so this is easy to read out. - -Note we need the peer/reactor protocols to take the versions of peers into account when sending messages: - -- don't send messages they don't understand -- don't send messages they don't expect - -Doing this will be specific to the upgrades being made. - -Note we also include the list of reactor channels in the NodeInfo and already don't send messages for channels the peer doesn't understand. -If upgrades always use new channels, this simplifies the development cost of backwards compatibility. - -Note NodeInfo is only exchanged after the authenticated encryption handshake to ensure that it's private. -Doing any version exchange before encrypting could be considered information leakage, though I'm not sure -how much that matters compared to being able to upgrade the protocol. - -XXX: if needed, can we change the meaning of the first byte of the first message to encode a handshake version? -this is the first byte of a 32-byte ed25519 pubkey. - -### AppVersion - -AppVersion is also included in the block Header and the NodeInfo. - -AppVersion essentially defines how the AppHash and LastResults are computed. - -### Peer Compatibility - -Restricting peer compatibility based on version is complicated by the need to -help old peers, possibly on older versions, sync the blockchain. - -We might be tempted to say that we only connect to peers with the same -AppVersion and BlockVersion (since these define the consensus critical -computations), and a select list of P2PVersions (ie. those compatible with -ours), but then we'd need to make accomodations for connecting to peers with the -right Block/AppVersion for the height they're on. - -For now, we will connect to peers with any version and restrict compatibility -solely based on the ChainID. We leave more restrictive rules on peer -compatibiltiy to a future proposal. - -### Future Changes - -It may be valuable to support an `/unsafe_stop?height=_` endpoint to tell Tendermint to shutdown at a given height. -This could be use by an external manager process that oversees upgrades by -checking out and installing new software versions and restarting the process. It -would subscribe to the relevant upgrade event (needs to be implemented) and call `/unsafe_stop` at -the correct height (of course only after getting approval from its user!) - -## Consequences - -### Positive - -- Make tendermint and application versions native to the ABCI to more clearly - communicate about them -- Distinguish clearly between protocol versions and software version to - facilitate implementations in other languages -- Versions included in key data structures in easy to discern way -- Allows proposers to signal for upgrades and apps to decide when to actually change the - version (and start signalling for a new version) - -### Neutral - -- Unclear how to version the initial P2P handshake itself -- Versions aren't being used (yet) to restrict peer compatibility -- Signalling for a new version happens through the proposer and must be - tallied/tracked in the app. - -### Negative - -- Adds more fields to the ABCI -- Implies that a single codebase must be able to handle multiple versions diff --git a/docs/architecture/adr-017-chain-versions.md b/docs/architecture/adr-017-chain-versions.md deleted file mode 100644 index 7113dbaee..000000000 --- a/docs/architecture/adr-017-chain-versions.md +++ /dev/null @@ -1,99 +0,0 @@ -# ADR 017: Chain Versions - -## TODO - -- clarify how to handle slashing when ChainID changes - -## Changelog - -- 28-07-2018: Updates from review - - split into two ADRs - one for protocol, one for chains -- 16-07-2018: Initial draft - was originally joint ADR for protocol and chain - versions - -## Context - -Software and Protocol versions are covered in a separate ADR. - -Here we focus on chain versions. - -## Requirements - -We need to version blockchains across protocols, networks, forks, etc. -We need chain identifiers and descriptions so we can talk about a multitude of chains, -and especially the differences between them, in a meaningful way. - -### Networks - -We need to support many independent networks running the same version of the software, -even possibly starting from the same initial state. -They must have distinct identifiers so that peers know which one they are joining and so -validators and users can prevent replay attacks. - -Call this the `NetworkName` (note we currently call this `ChainID` in the software. In this -ADR, ChainID has a different meaning). -It represents both the application being run and the community or intention -of running it. - -Peers only connect to other peers with the same NetworkName. - -### Forks - -We need to support existing networks upgrading and forking, wherein they may do any of: - - - revert back to some height, continue with the same versions but new blocks - - arbitrarily mutate state at some height, continue with the same versions (eg. Dao Fork) - - change the AppVersion at some height - -Note because of Tendermint's voting power threshold rules, a chain can only be extended under the "original" rules and under the new rules -if 1/3 or more is double signing, which is expressly prohibited, and is supposed to result in their punishment on both chains. Since they can censor -the punishment, the chain is expected to be hardforked to remove the validators. Thus, if both branches are to continue after a fork, -they will each require a new identifier, and the old chain identifier will be retired (ie. only useful for syncing history, not for new blocks).. - -TODO: explain how to handle slashing when chain id changed! - -We need a consistent way to describe forks. - -## Proposal - -### ChainDescription - -ChainDescription is a complete immutable description of a blockchain. It takes the following form: - -``` -ChainDescription = ///// -``` - -Here, StateHash is the merkle root of the initial state, ValHash is the merkle root of the initial Tendermint validator set, -and ConsensusParamsHash is the merkle root of the initial Tendermint consensus parameters. - -The `genesis.json` file must contain enough information to compute this value. It need not contain the StateHash or ValHash itself, -but contain the state from which they can be computed with the given protocol versions. - -NOTE: consider splitting NetworkName into NetworkName and AppName - this allows -folks to independently use the same application for different networks (ie we -could imagine multiple communities of validators wanting to put up a Hub using -the same app but having a distinct network name. Arguably not needed if -differences will come via different initial state / validators). - -#### ChainID - -Define `ChainID = TMHASH(ChainDescriptor)`. It's the unique ID of a blockchain. - -It should be Bech32 encoded when handled by users, eg. with `cosmoschain` prefix. - -#### Forks and Uprades - -When a chain forks or upgrades but continues the same history, it takes a new ChainDescription as follows: - -``` -ChainDescription = /x// -``` - -Where - -- ChainID is the ChainID from the previous ChainDescription (ie. its hash) -- `x` denotes that a change occured -- `Height` is the height the change occured -- ForkDescription has the same form as ChainDescription but for the fork -- this allows forks to specify new versions for tendermint or the app, as well as arbitrary changes to the state or validator set diff --git a/docs/architecture/adr-018-ABCI-Validators.md b/docs/architecture/adr-018-ABCI-Validators.md deleted file mode 100644 index b517c3694..000000000 --- a/docs/architecture/adr-018-ABCI-Validators.md +++ /dev/null @@ -1,100 +0,0 @@ -# ADR 018: ABCI Validator Improvements - -## Changelog - -016-08-2018: Follow up from review: - Revert changes to commit round - Remind about justification for removing pubkey - Update pros/cons -05-08-2018: Initial draft - -## Context - -ADR 009 introduced major improvements to the ABCI around validators and the use -of Amino. Here we follow up with some additional changes to improve the naming -and expected use of Validator messages. - -## Decision - -### Validator - -Currently a Validator contains `address` and `pub_key`, and one or the other is -optional/not-sent depending on the use case. Instead, we should have a -`Validator` (with just the address, used for RequestBeginBlock) -and a `ValidatorUpdate` (with the pubkey, used for ResponseEndBlock): - -``` -message Validator { - bytes address - int64 power -} - -message ValidatorUpdate { - PubKey pub_key - int64 power -} -``` - -As noted in [ADR-009](adr-009-ABCI-design.md), -the `Validator` does not contain a pubkey because quantum public keys are -quite large and it would be wasteful to send them all over ABCI with every block. -Thus, applications that want to take advantage of the information in BeginBlock -are _required_ to store pubkeys in state (or use much less efficient lazy means -of verifying BeginBlock data). - -### RequestBeginBlock - -LastCommitInfo currently has an array of `SigningValidator` that contains -information for each validator in the entire validator set. -Instead, this should be called `VoteInfo`, since it is information about the -validator votes. - -Note that all votes in a commit must be from the same round. - -``` -message LastCommitInfo { - int64 round - repeated VoteInfo commit_votes -} - -message VoteInfo { - Validator validator - bool signed_last_block -} -``` - -### ResponseEndBlock - -Use ValidatorUpdates instead of Validators. Then it's clear we don't need an -address, and we do need a pubkey. - -We could require the address here as well as a sanity check, but it doesn't seem -necessary. - -### InitChain - -Use ValidatorUpdates for both Request and Response. InitChain -is about setting/updating the initial validator set, unlike BeginBlock -which is just informational. - -## Status - -Implemented - -## Consequences - -### Positive - -- Clarifies the distinction between the different uses of validator information - -### Negative - -- Apps must still store the public keys in state to utilize the RequestBeginBlock info - -### Neutral - -- ResponseEndBlock does not require an address - -## References - -- [Latest ABCI Spec](https://github.com/tendermint/tendermint/blob/v0.22.8/docs/app-dev/abci-spec.md) -- [ADR-009](https://github.com/tendermint/tendermint/blob/v0.22.8/docs/architecture/adr-009-ABCI-design.md) -- [Issue #1712 - Don't send PubKey in - RequestBeginBlock](https://github.com/tendermint/tendermint/issues/1712) diff --git a/docs/architecture/adr-019-multisigs.md b/docs/architecture/adr-019-multisigs.md deleted file mode 100644 index 7fd3aab0a..000000000 --- a/docs/architecture/adr-019-multisigs.md +++ /dev/null @@ -1,162 +0,0 @@ -# ADR 019: Encoding standard for Multisignatures - -## Changelog - -06-08-2018: Minor updates - -27-07-2018: Update draft to use amino encoding - -11-07-2018: Initial Draft - -5-26-2021: Multisigs were moved into the Cosmos-sdk - -## Context - -Multisignatures, or technically _Accountable Subgroup Multisignatures_ (ASM), -are signature schemes which enable any subgroup of a set of signers to sign any message, -and reveal to the verifier exactly who the signers were. -This allows for complex conditionals of when to validate a signature. - -Suppose the set of signers is of size _n_. -If we validate a signature if any subgroup of size _k_ signs a message, -this becomes what is commonly reffered to as a _k of n multisig_ in Bitcoin. - -This ADR specifies the encoding standard for general accountable subgroup multisignatures, -k of n accountable subgroup multisignatures, and its weighted variant. - -In the future, we can also allow for more complex conditionals on the accountable subgroup. - -## Proposed Solution - -### New structs - -Every ASM will then have its own struct, implementing the crypto.Pubkey interface. - -This ADR assumes that [replacing crypto.Signature with []bytes](https://github.com/tendermint/tendermint/issues/1957) has been accepted. - -#### K of N threshold signature - -The pubkey is the following struct: - -```golang -type ThresholdMultiSignaturePubKey struct { // K of N threshold multisig - K uint `json:"threshold"` - Pubkeys []crypto.Pubkey `json:"pubkeys"` -} -``` - -We will derive N from the length of pubkeys. (For spatial efficiency in encoding) - -`Verify` will expect an `[]byte` encoded version of the Multisignature. -(Multisignature is described in the next section) -The multisignature will be rejected if the bitmap has less than k indices, -or if any signature at any of the k indices is not a valid signature from -the kth public key on the message. -(If more than k signatures are included, all must be valid) - -`Bytes` will be the amino encoded version of the pubkey. - -Address will be `Hash(amino_encoded_pubkey)` - -The reason this doesn't use `log_8(n)` bytes per signer is because that heavily optimizes for the case where a very small number of signers are required. -e.g. for `n` of size `24`, that would only be more space efficient for `k < 3`. -This seems less likely, and that it should not be the case optimized for. - -#### Weighted threshold signature - -The pubkey is the following struct: - -```golang -type WeightedThresholdMultiSignaturePubKey struct { - Weights []uint `json:"weights"` - Threshold uint `json:"threshold"` - Pubkeys []crypto.Pubkey `json:"pubkeys"` -} -``` - -Weights and Pubkeys must be of the same length. -Everything else proceeds identically to the K of N multisig, -except the multisig fails if the sum of the weights is less than the threshold. - -#### Multisignature - -The inter-mediate phase of the signatures (as it accrues more signatures) will be the following struct: - -```golang -type Multisignature struct { - BitArray CryptoBitArray // Documented later - Sigs [][]byte -``` - -It is important to recall that each private key will output a signature on the provided message itself. -So no signing algorithm ever outputs the multisignature. -The UI will take a signature, cast into a multisignature, and then keep adding -new signatures into it, and when done marshal into `[]byte`. -This will require the following helper methods: - -```golang -func SigToMultisig(sig []byte, n int) -func GetIndex(pk crypto.Pubkey, []crypto.Pubkey) -func AddSignature(sig Signature, index int, multiSig *Multisignature) -``` - -The multisignature will be converted to an `[]byte` using amino.MarshalBinaryBare. \* - -#### Bit Array - -We would be using a new implementation of a bitarray. The struct it would be encoded/decoded from is - -```golang -type CryptoBitArray struct { - ExtraBitsStored byte `json:"extra_bits"` // The number of extra bits in elems. - Elems []byte `json:"elems"` -} -``` - -The reason for not using the BitArray currently implemented in `libs/common/bit_array.go` -is that it is less space efficient, due to a space / time trade-off. -Evidence for this is outlined in [this issue](https://github.com/tendermint/tendermint/issues/2077). - -In the multisig, we will not be performing arithmetic operations, -so there is no performance increase with the current implementation, -and just loss of spatial efficiency. -Implementing this new bit array with `[]byte` _should_ be simple, as no -arithmetic operations between bit arrays are required, and save a couple of bytes. -(Explained in that same issue) - -When this bit array encoded, the number of elements is encoded due to amino. -However we may be encoding a full byte for what we actually only need 1-7 bits for. -We store that difference in ExtraBitsStored. -This allows for us to have an unbounded number of signers, and is more space efficient than what is currently used in `libs/common`. -Again the implementation of this space saving feature is straight forward. - -### Encoding the structs - -We will use straight forward amino encoding. This is chosen for ease of compatibility in other languages. - -### Future points of discussion - -If desired, we can use ed25519 batch verification for all ed25519 keys. -This is a future point of discussion, but would be backwards compatible as this information won't need to be marshalled. -(There may even be cofactor concerns without ristretto) -Aggregation of pubkeys / sigs in Schnorr sigs / BLS sigs is not backwards compatible, and would need to be a new ASM type. - -## Status - -Implemented (moved to cosmos-sdk) - -## Consequences - -### Positive - -- Supports multisignatures, in a way that won't require any special cases in our downstream verification code. -- Easy to serialize / deserialize -- Unbounded number of signers - -### Negative - -- Larger codebase, however this should reside in a subfolder of tendermint/crypto, as it provides no new interfaces. (Ref #https://github.com/tendermint/go-crypto/issues/136) -- Space inefficient due to utilization of amino encoding -- Suggested implementation requires a new struct for every ASM. - -### Neutral diff --git a/docs/architecture/adr-020-block-size.md b/docs/architecture/adr-020-block-size.md deleted file mode 100644 index f32ed7ab5..000000000 --- a/docs/architecture/adr-020-block-size.md +++ /dev/null @@ -1,104 +0,0 @@ -# ADR 020: Limiting txs size inside a block - -## Changelog - -13-08-2018: Initial Draft -15-08-2018: Second version after Dev's comments -28-08-2018: Third version after Ethan's comments -30-08-2018: AminoOverheadForBlock => MaxAminoOverheadForBlock -31-08-2018: Bounding evidence and chain ID -13-01-2019: Add section on MaxBytes vs MaxDataBytes - -## Context - -We currently use MaxTxs to reap txs from the mempool when proposing a block, -but enforce MaxBytes when unmarshaling a block, so we could easily propose a -block thats too large to be valid. - -We should just remove MaxTxs all together and stick with MaxBytes, and have a -`mempool.ReapMaxBytes`. - -But we can't just reap BlockSize.MaxBytes, since MaxBytes is for the entire block, -not for the txs inside the block. There's extra amino overhead + the actual -headers on top of the actual transactions + evidence + last commit. -We could also consider using a MaxDataBytes instead of or in addition to MaxBytes. - -## MaxBytes vs MaxDataBytes - -The [PR #3045](https://github.com/tendermint/tendermint/pull/3045) suggested -additional clarity/justification was necessary here, wither respect to the use -of MaxDataBytes in addition to, or instead of, MaxBytes. - -MaxBytes provides a clear limit on the total size of a block that requires no -additional calculation if you want to use it to bound resource usage, and there -has been considerable discussions about optimizing tendermint around 1MB blocks. -Regardless, we need some maximum on the size of a block so we can avoid -unmarshaling blocks that are too big during the consensus, and it seems more -straightforward to provide a single fixed number for this rather than a -computation of "MaxDataBytes + everything else you need to make room for -(signatures, evidence, header)". MaxBytes provides a simple bound so we can -always say "blocks are less than X MB". - -Having both MaxBytes and MaxDataBytes feels like unnecessary complexity. It's -not particularly surprising for MaxBytes to imply the maximum size of the -entire block (not just txs), one just has to know that a block includes header, -txs, evidence, votes. For more fine grained control over the txs included in the -block, there is the MaxGas. In practice, the MaxGas may be expected to do most of -the tx throttling, and the MaxBytes to just serve as an upper bound on the total -size. Applications can use MaxGas as a MaxDataBytes by just taking the gas for -every tx to be its size in bytes. - -## Proposed solution - -Therefore, we should - -1) Get rid of MaxTxs. -2) Rename MaxTxsBytes to MaxBytes. - -When we need to ReapMaxBytes from the mempool, we calculate the upper bound as follows: - -``` -ExactLastCommitBytes = {number of validators currently enabled} * {MaxVoteBytes} -MaxEvidenceBytesPerBlock = MaxBytes / 10 -ExactEvidenceBytes = cs.evpool.PendingEvidence(MaxEvidenceBytesPerBlock) * MaxEvidenceBytes - -mempool.ReapMaxBytes(MaxBytes - MaxAminoOverheadForBlock - ExactLastCommitBytes - ExactEvidenceBytes - MaxHeaderBytes) -``` - -where MaxVoteBytes, MaxEvidenceBytes, MaxHeaderBytes and MaxAminoOverheadForBlock -are constants defined inside the `types` package: - -- MaxVoteBytes - 170 bytes -- MaxEvidenceBytes - 364 bytes -- MaxHeaderBytes - 476 bytes (~276 bytes hashes + 200 bytes - 50 UTF-8 encoded - symbols of chain ID 4 bytes each in the worst case + amino overhead) -- MaxAminoOverheadForBlock - 8 bytes (assuming MaxHeaderBytes includes amino - overhead for encoding header, MaxVoteBytes - for encoding vote, etc.) - -ChainID needs to bound to 50 symbols max. - -When reaping evidence, we use MaxBytes to calculate the upper bound (e.g. 1/10) -to save some space for transactions. - -NOTE while reaping the `max int` bytes in mempool, we should account that every -transaction will take `len(tx)+aminoOverhead`, where aminoOverhead=1-4 bytes. - -We should write a test that fails if the underlying structs got changed, but -MaxXXX stayed the same. - -## Status - -Implemented - -## Consequences - -### Positive - -* one way to limit the size of a block -* less variables to configure - -### Negative - -* constants that need to be adjusted if the underlying structs got changed - -### Neutral diff --git a/docs/architecture/adr-021-abci-events.md b/docs/architecture/adr-021-abci-events.md deleted file mode 100644 index ca20a05e9..000000000 --- a/docs/architecture/adr-021-abci-events.md +++ /dev/null @@ -1,52 +0,0 @@ -# ADR 012: ABCI Events - -## Changelog - -- *2018-09-02* Remove ABCI errors component. Update description for events -- *2018-07-12* Initial version - -## Context - -ABCI tags were first described in [ADR 002](https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-002-event-subscription.md). -They are key-value pairs that can be used to index transactions. - -Currently, ABCI messages return a list of tags to describe an -"event" that took place during the Check/DeliverTx/Begin/EndBlock, -where each tag refers to a different property of the event, like the sending and receiving account addresses. - -Since there is only one list of tags, recording data for multiple such events in -a single Check/DeliverTx/Begin/EndBlock must be done using prefixes in the key -space. - -Alternatively, groups of tags that constitute an event can be separated by a -special tag that denotes a break between the events. This would allow -straightforward encoding of multiple events into a single list of tags without -prefixing, at the cost of these "special" tags to separate the different events. - -TODO: brief description of how the indexing works - -## Decision - -Instead of returning a list of tags, return a list of events, where -each event is a list of tags. This way we naturally capture the concept of -multiple events happening during a single ABCI message. - -TODO: describe impact on indexing and querying - -## Status - -Implemented - -## Consequences - -### Positive - -- Ability to track distinct events separate from ABCI calls (DeliverTx/BeginBlock/EndBlock) -- More powerful query abilities - -### Negative - -- More complex query syntax -- More complex search implementation - -### Neutral diff --git a/docs/architecture/adr-022-abci-errors.md b/docs/architecture/adr-022-abci-errors.md deleted file mode 100644 index ce2c56a28..000000000 --- a/docs/architecture/adr-022-abci-errors.md +++ /dev/null @@ -1,63 +0,0 @@ -# ADR 022: ABCI Errors - -## Changelog - -- *2018-09-01* Initial version - -## Context - -ABCI errors should provide an abstraction between application details -and the client interface responsible for formatting & displaying errors to the user. - -Currently, this abstraction consists of a single integer (the `code`), where any -`code > 0` is considered an error (ie. invalid transaction) and all type -information about the error is contained in the code. This integer is -expected to be decoded by the client into a known error string, where any -more specific data is contained in the `data`. - -In a [previous conversation](https://github.com/tendermint/abci/issues/165#issuecomment-353704015), -it was suggested that not all non-zero codes need to be errors, hence why it's called `code` and not `error code`. -It is unclear exactly how the semantics of the `code` field will evolve, though -better lite-client proofs (like discussed for tags -[here](https://github.com/tendermint/tendermint/issues/1007#issuecomment-413917763)) -may play a role. - -Note that having all type information in a single integer -precludes an easy coordination method between "module implementers" and "client -implementers", especially for apps with many "modules". With an unbounded error domain (such as a string), module -implementers can pick a globally unique prefix & error code set, so client -implementers could easily implement support for "module A" regardless of which -particular blockchain network it was running in and which other modules were running with it. With -only error codes, globally unique codes are difficult/impossible, as the space -is finite and collisions are likely without an easy way to coordinate. - -For instance, while trying to build an ecosystem of modules that can be composed into a single -ABCI application, the Cosmos-SDK had to hack a higher level "codespace" into the -single integer so that each module could have its own space to express its -errors. - -## Decision - -Include a `string code_space` in all ABCI messages that have a `code`. -This allows applications to namespace the codes so they can experiment with -their own code schemes. - -It is the responsibility of applications to limit the size of the `code_space` -string. - -How the codespace is hashed into block headers (ie. so it can be queried -efficiently by lite clients) is left for a separate ADR. - -## Consequences - -## Positive - -- No need for complex codespacing on a single integer -- More expressive type system for errors - -## Negative - -- Another field in the response needs to be accounted for -- Some redundancy with `code` field -- May encourage more error/code type info to move to the `codespace` string, which - could impact lite clients. diff --git a/docs/architecture/adr-023-ABCI-propose-tx.md b/docs/architecture/adr-023-ABCI-propose-tx.md deleted file mode 100644 index 34963b1ba..000000000 --- a/docs/architecture/adr-023-ABCI-propose-tx.md +++ /dev/null @@ -1,183 +0,0 @@ -# ADR 023: ABCI `ProposeTx` Method - -## Changelog - -25-06-2018: Initial draft based on [#1776](https://github.com/tendermint/tendermint/issues/1776) - -## Context - -[#1776](https://github.com/tendermint/tendermint/issues/1776) was -opened in relation to implementation of a Plasma child chain using Tendermint -Core as consensus/replication engine. - -Due to the requirements of [Minimal Viable Plasma (MVP)](https://ethresear.ch/t/minimal-viable-plasma/426) and [Plasma Cash](https://ethresear.ch/t/plasma-cash-plasma-with-much-less-per-user-data-checking/1298), it is necessary for ABCI apps to have a mechanism to handle the following cases (more may emerge in the near future): - -1. `deposit` transactions on the Root Chain, which must consist of a block - with a single transaction, where there are no inputs and only one output - made in favour of the depositor. In this case, a `block` consists of - a transaction with the following shape: - - ``` - [0, 0, 0, 0, #input1 - zeroed out - 0, 0, 0, 0, #input2 - zeroed out - , , #output1 - in favour of depositor - 0, 0, #output2 - zeroed out - , - ] - ``` - - `exit` transactions may also be treated in a similar manner, wherein the - input is the UTXO being exited on the Root Chain, and the output belongs to - a reserved "burn" address, e.g., `0x0`. In such cases, it is favourable for - the containing block to only hold a single transaction that may receive - special treatment. - -2. Other "internal" transactions on the child chain, which may be initiated - unilaterally. The most basic example of is a coinbase transaction - implementing validator node incentives, but may also be app-specific. In - these cases, it may be favourable for such transactions to - be ordered in a specific manner, e.g., coinbase transactions will always be - at index 0. In general, such strategies increase the determinism and - predictability of blockchain applications. - -While it is possible to deal with the cases enumerated above using the -existing ABCI, currently available result in suboptimal workarounds. Two are -explained in greater detail below. - -### Solution 1: App state-based Plasma chain - -In this work around, the app maintains a `PlasmaStore` with a corresponding -`Keeper`. The PlasmaStore is responsible for maintaing a second, separate -blockchain that complies with the MVP specification, including `deposit` -blocks and other "internal" transactions. These "virtual" blocks are then broadcasted -to the Root Chain. - -This naive approach is, however, fundamentally flawed, as it by definition -diverges from the canonical chain maintained by Tendermint. This is further -exacerbated if the business logic for generating such transactions is -potentially non-deterministic, as this should not even be done in -`Begin/EndBlock`, which may, as a result, break consensus guarantees. - -Additinoally, this has serious implications for "watchers" - independent third parties, -or even an auxilliary blockchain, responsible for ensuring that blocks recorded -on the Root Chain are consistent with the Plasma chain's. Since, in this case, -the Plasma chain is inconsistent with the canonical one maintained by Tendermint -Core, it seems that there exists no compact means of verifying the legitimacy of -the Plasma chain without replaying every state transition from genesis (!). - -### Solution 2: Broadcast to Tendermint Core from ABCI app - -This approach is inspired by `tendermint`, in which Ethereum transactions are -relayed to Tendermint Core. It requires the app to maintain a client connection -to the consensus engine. - -Whenever an "internal" transaction needs to be created, the proposer of the -current block broadcasts the transaction or transactions to Tendermint as -needed in order to ensure that the Tendermint chain and Plasma chain are -completely consistent. - -This allows "internal" transactions to pass through the full consensus -process, and can be validated in methods like `CheckTx`, i.e., signed by the -proposer, is the semantically correct, etc. Note that this involves informing -the ABCI app of the block proposer, which was temporarily hacked in as a means -of conducting this experiment, although this should not be necessary when the -current proposer is passed to `BeginBlock`. - -It is much easier to relay these transactions directly to the Root -Chain smart contract and/or maintain a "compressed" auxiliary chain comprised -of Plasma-friendly blocks that 100% reflect the canonical (Tendermint) -blockchain. Unfortunately, this approach not idiomatic (i.e., utilises the -Tendermint consensus engine in unintended ways). Additionally, it does not -allow the application developer to: - -- Control the _ordering_ of transactions in the proposed block (e.g., index 0, - or 0 to `n` for coinbase transactions) -- Control the _number_ of transactions in the block (e.g., when a `deposit` - block is required) - -Since determinism is of utmost importance in blockchain engineering, this approach, -while more viable, should also not be considered as fit for production. - -## Decision - -### `ProposeTx` - -In order to address the difficulties described above, the ABCI interface must -expose an additional method, tentatively named `ProposeTx`. - -It should have the following signature: - -``` -ProposeTx(RequestProposeTx) ResponseProposeTx -``` - -Where `RequestProposeTx` and `ResponseProposeTx` are `message`s with the -following shapes: - -``` -message RequestProposeTx { - int64 next_block_height = 1; // height of the block the proposed tx would be part of - Validator proposer = 2; // the proposer details -} - -message ResponseProposeTx { - int64 num_tx = 1; // the number of tx to include in proposed block - repeated bytes txs = 2; // ordered transaction data to include in block - bool exclusive = 3; // whether the block should include other transactions (from `mempool`) -} -``` - -`ProposeTx` would be called by before `mempool.Reap` at this -[line](https://github.com/tendermint/tendermint/blob/9cd9f3338bc80a12590631632c23c8dbe3ff5c34/consensus/state.go#L935). -Depending on whether `exclusive` is `true` or `false`, the proposed -transactions are then pushed on top of the transactions received from -`mempool.Reap`. - -### `DeliverTx` - -Since the list of `tx` received from `ProposeTx` are _not_ passed through `CheckTx`, -it is probably a good idea to provide a means of differentiatiating "internal" transactions -from user-generated ones, in case the app developer needs/wants to take extra measures to -ensure validity of the proposed transactions. - -Therefore, the `RequestDeliverTx` message should be changed to provide an additional flag, like so: - -``` -message RequestDeliverTx { - bytes tx = 1; - bool internal = 2; -} -``` - -Alternatively, an additional method `DeliverProposeTx` may be added as an accompanient to -`ProposeTx`. However, it is not clear at this stage if this additional overhead is necessary -to preserve consensus guarantees given that a simple flag may suffice for now. - -## Status - -Pending - -## Consequences - -### Positive - -- Tendermint ABCI apps will be able to function as minimally viable Plasma chains. -- It will thereby become possible to add an extension to `cosmos-sdk` to enable - ABCI apps to support both IBC and Plasma, maximising interop. -- ABCI apps will have great control and flexibility in managing blockchain state, - without having to resort to non-deterministic hacks and/or unsafe workarounds - -### Negative - -- Maintenance overhead of exposing additional ABCI method -- Potential security issues that may have been overlooked and must now be tested extensively - -### Neutral - -- ABCI developers must deal with increased (albeit nominal) API surface area. - -## References - -- [#1776 Plasma and "Internal" Transactions in ABCI Apps](https://github.com/tendermint/tendermint/issues/1776) -- [Minimal Viable Plasma](https://ethresear.ch/t/minimal-viable-plasma/426) -- [Plasma Cash: Plasma with much less per-user data checking](https://ethresear.ch/t/plasma-cash-plasma-with-much-less-per-user-data-checking/1298) diff --git a/docs/architecture/adr-024-sign-bytes.md b/docs/architecture/adr-024-sign-bytes.md deleted file mode 100644 index 23a6afcdc..000000000 --- a/docs/architecture/adr-024-sign-bytes.md +++ /dev/null @@ -1,234 +0,0 @@ -# ADR 024: SignBytes and validator types in privval - -## Context - -Currently, the messages exchanged between tendermint and a (potentially remote) signer/validator, -namely votes, proposals, and heartbeats, are encoded as a JSON string -(e.g., via `Vote.SignBytes(...)`) and then -signed . JSON encoding is sub-optimal for both, hardware wallets -and for usage in ethereum smart contracts. Both is laid down in detail in [issue#1622]. - -Also, there are currently no differences between sign-request and -replies. Also, there is no possibility -for a remote signer to include an error code or message in case something went wrong. -The messages exchanged between tendermint and a remote signer currently live in -[privval/socket.go] and encapsulate the corresponding types in [types]. - - -[privval/socket.go]: https://github.com/tendermint/tendermint/blob/d419fffe18531317c28c29a292ad7d253f6cafdf/privval/socket.go#L496-L502 -[issue#1622]: https://github.com/tendermint/tendermint/issues/1622 -[types]: https://github.com/tendermint/tendermint/tree/master/types - - -## Decision - -- restructure vote, proposal, and heartbeat such that their encoding is easily parseable by -hardware devices and smart contracts using a binary encoding format ([amino] in this case) -- split up the messages exchanged between tendermint and remote signers into requests and -responses (see details below) -- include an error type in responses - -### Overview -``` -+--------------+ +----------------+ -| | SignXRequest | | -|Remote signer |<---------------------+ tendermint | -| (e.g. KMS) | | | -| +--------------------->| | -+--------------+ SignedXReply +----------------+ - - -SignXRequest { - x: X -} - -SignedXReply { - x: X - sig: Signature // []byte - err: Error{ - code: int - desc: string - } -} -``` - -TODO: Alternatively, the type `X` might directly include the signature. A lot of places expect a vote with a -signature and do not necessarily deal with "Replies". -Still exploring what would work best here. -This would look like (exemplified using X = Vote): -``` -Vote { - // all fields besides signature -} - -SignedVote { - Vote Vote - Signature []byte -} - -SignVoteRequest { - Vote Vote -} - -SignedVoteReply { - Vote SignedVote - Err Error -} -``` - -**Note:** There was a related discussion around including a fingerprint of, or, the whole public-key -into each sign-request to tell the signer which corresponding private-key to -use to sign the message. This is particularly relevant in the context of the KMS -but is currently not considered in this ADR. - - -[amino]: https://github.com/tendermint/go-amino/ - -### Vote - -As explained in [issue#1622] `Vote` will be changed to contain the following fields -(notation in protobuf-like syntax for easy readability): - -```proto -// vanilla protobuf / amino encoded -message Vote { - Version fixed32 - Height sfixed64 - Round sfixed32 - VoteType fixed32 - Timestamp Timestamp // << using protobuf definition - BlockID BlockID // << as already defined - ChainID string // at the end because length could vary a lot -} - -// this is an amino registered type; like currently privval.SignVoteMsg: -// registered with "tendermint/socketpv/SignVoteRequest" -message SignVoteRequest { - Vote vote -} - -// amino registered type -// registered with "tendermint/socketpv/SignedVoteReply" -message SignedVoteReply { - Vote Vote - Signature Signature - Err Error -} - -// we will use this type everywhere below -message Error { - Type uint // error code - Description string // optional description -} - -``` - -The `ChainID` gets moved into the vote message directly. Previously, it was injected -using the [Signable] interface method `SignBytes(chainID string) []byte`. Also, the -signature won't be included directly, only in the corresponding `SignedVoteReply` message. - -[Signable]: https://github.com/tendermint/tendermint/blob/d419fffe18531317c28c29a292ad7d253f6cafdf/types/signable.go#L9-L11 - -### Proposal - -```proto -// vanilla protobuf / amino encoded -message Proposal { - Height sfixed64 - Round sfixed32 - Timestamp Timestamp // << using protobuf definition - BlockPartsHeader PartSetHeader // as already defined - POLRound sfixed32 - POLBlockID BlockID // << as already defined -} - -// amino registered with "tendermint/socketpv/SignProposalRequest" -message SignProposalRequest { - Proposal proposal -} - -// amino registered with "tendermint/socketpv/SignProposalReply" -message SignProposalReply { - Prop Proposal - Sig Signature - Err Error // as defined above -} -``` - -### Heartbeat - -**TODO**: clarify if heartbeat also needs a fixed offset and update the fields accordingly: - -```proto -message Heartbeat { - ValidatorAddress Address - ValidatorIndex int - Height int64 - Round int - Sequence int -} -// amino registered with "tendermint/socketpv/SignHeartbeatRequest" -message SignHeartbeatRequest { - Hb Heartbeat -} - -// amino registered with "tendermint/socketpv/SignHeartbeatReply" -message SignHeartbeatReply { - Hb Heartbeat - Sig Signature - Err Error // as defined above -} - -``` - -## PubKey - -TBA - this needs further thoughts: e.g. what todo like in the case of the KMS which holds -several keys? How does it know with which key to reply? - -## SignBytes -`SignBytes` will not require a `ChainID` parameter: - -```golang -type Signable interface { - SignBytes() []byte -} - -``` -And the implementation for vote, heartbeat, proposal will look like: -```golang -// type T is one of vote, sign, proposal -func (tp *T) SignBytes() []byte { - bz, err := cdc.MarshalBinary(tp) - if err != nil { - panic(err) - } - return bz -} -``` - -## Status - -Partially Accepted - -## Consequences - - - -### Positive - -The most relevant positive effect is that the signing bytes can easily be parsed by a -hardware module and a smart contract. Besides that: - -- clearer separation between requests and responses -- added error messages enable better error handling - - -### Negative - -- relatively huge change / refactoring touching quite some code -- lot's of places assume a `Vote` with a signature included -> they will need to -- need to modify some interfaces - -### Neutral - -not even the swiss are neutral diff --git a/docs/architecture/adr-025-commit.md b/docs/architecture/adr-025-commit.md deleted file mode 100644 index a23d3803f..000000000 --- a/docs/architecture/adr-025-commit.md +++ /dev/null @@ -1,150 +0,0 @@ -# ADR 025 Commit - -## Context - -Currently the `Commit` structure contains a lot of potentially redundant or unnecessary data. -It contains a list of precommits from every validator, where the precommit -includes the whole `Vote` structure. Thus each of the commit height, round, -type, and blockID are repeated for every validator, and could be deduplicated, -leading to very significant savings in block size. - -``` -type Commit struct { - BlockID BlockID `json:"block_id"` - Precommits []*Vote `json:"precommits"` -} - -type Vote struct { - ValidatorAddress Address `json:"validator_address"` - ValidatorIndex int `json:"validator_index"` - Height int64 `json:"height"` - Round int `json:"round"` - Timestamp time.Time `json:"timestamp"` - Type byte `json:"type"` - BlockID BlockID `json:"block_id"` - Signature []byte `json:"signature"` -} -``` - -The original tracking issue for this is [#1648](https://github.com/tendermint/tendermint/issues/1648). -We have discussed replacing the `Vote` type in `Commit` with a new `CommitSig` -type, which includes at minimum the vote signature. The `Vote` type will -continue to be used in the consensus reactor and elsewhere. - -A primary question is what should be included in the `CommitSig` beyond the -signature. One current constraint is that we must include a timestamp, since -this is how we calculuate BFT time, though we may be able to change this [in the -future](https://github.com/tendermint/tendermint/issues/2840). - -Other concerns here include: - -- Validator Address [#3596](https://github.com/tendermint/tendermint/issues/3596) - - Should the CommitSig include the validator address? It is very convenient to - do so, but likely not necessary. This was also discussed in [#2226](https://github.com/tendermint/tendermint/issues/2226). -- Absent Votes [#3591](https://github.com/tendermint/tendermint/issues/3591) - - How to represent absent votes? Currently they are just present as `nil` in the - Precommits list, which is actually problematic for serialization -- Other BlockIDs [#3485](https://github.com/tendermint/tendermint/issues/3485) - - How to represent votes for nil and for other block IDs? We currently allow - votes for nil and votes for alternative block ids, but just ignore them - - -## Decision - -Deduplicate the fields and introduce `CommitSig`: - -``` -type Commit struct { - Height int64 - Round int - BlockID BlockID `json:"block_id"` - Precommits []CommitSig `json:"precommits"` -} - -type CommitSig struct { - BlockID BlockIDFlag - ValidatorAddress Address - Timestamp time.Time - Signature []byte -} - - -// indicate which BlockID the signature is for -type BlockIDFlag int - -const ( - BlockIDFlagAbsent BlockIDFlag = iota // vote is not included in the Commit.Precommits - BlockIDFlagCommit // voted for the Commit.BlockID - BlockIDFlagNil // voted for nil -) - -``` - -Re the concerns outlined in the context: - -**Timestamp**: Leave the timestamp for now. Removing it and switching to -proposer based time will take more analysis and work, and will be left for a -future breaking change. In the meantime, the concerns with the current approach to -BFT time [can be -mitigated](https://github.com/tendermint/tendermint/issues/2840#issuecomment-529122431). - -**ValidatorAddress**: we include it in the `CommitSig` for now. While this -does increase the block size unecessarily (20-bytes per validator), it has some ergonomic and debugging advantages: - -- `Commit` contains everything necessary to reconstruct `[]Vote`, and doesn't depend on additional access to a `ValidatorSet` -- Lite clients can check if they know the validators in a commit without - re-downloading the validator set -- Easy to see directly in a commit which validators signed what without having - to fetch the validator set - -If and when we change the `CommitSig` again, for instance to remove the timestamp, -we can reconsider whether the ValidatorAddress should be removed. - -**Absent Votes**: we include absent votes explicitly with no Signature or -Timestamp but with the ValidatorAddress. This should resolve the serialization -issues and make it easy to see which validator's votes failed to be included. - -**Other BlockIDs**: We use a single byte to indicate which blockID a `CommitSig` -is for. The only options are: - - `Absent` - no vote received from the this validator, so no signature - - `Nil` - validator voted Nil - meaning they did not see a polka in time - - `Commit` - validator voted for this block - -Note this means we don't allow votes for any other blockIDs. If a signature is -included in a commit, it is either for nil or the correct blockID. According to -the Tendermint protocol and assumptions, there is no way for a correct validator to -precommit for a conflicting blockID in the same round an actual commit was -created. This was the consensus from -[#3485](https://github.com/tendermint/tendermint/issues/3485) - -We may want to consider supporting other blockIDs later, as a way to capture -evidence that might be helpful. We should clarify if/when/how doing so would -actually help first. To implement it, we could change the `Commit.BlockID` -field to a slice, where the first entry is the correct block ID and the other -entries are other BlockIDs that validators precommited before. The BlockIDFlag -enum can be extended to represent these additional block IDs on a per block -basis. - -## Status - -Implemented - -## Consequences - -### Positive - -Removing the Type/Height/Round/Index and the BlockID saves roughly 80 bytes per precommit. -It varies because some integers are varint. The BlockID contains two 32-byte hashes an integer, -and the Height is 8-bytes. - -For a chain with 100 validators, that's up to 8kB in savings per block! - - -### Negative - -- Large breaking change to the block and commit structure -- Requires differentiating in code between the Vote and CommitSig objects, which may add some complexity (votes need to be reconstructed to be verified and gossiped) - -### Neutral - -- Commit.Precommits no longer contains nil values diff --git a/docs/architecture/adr-026-general-merkle-proof.md b/docs/architecture/adr-026-general-merkle-proof.md deleted file mode 100644 index 5774c10f8..000000000 --- a/docs/architecture/adr-026-general-merkle-proof.md +++ /dev/null @@ -1,49 +0,0 @@ -# ADR 026: General Merkle Proof - -## Context - -We are using raw `[]byte` for merkle proofs in `abci.ResponseQuery`. It makes hard to handle multilayer merkle proofs and general cases. Here, new interface `ProofOperator` is defined. The users can defines their own Merkle proof format and layer them easily. - -Goals: -- Layer Merkle proofs without decoding/reencoding -- Provide general way to chain proofs -- Make the proof format extensible, allowing thirdparty proof types - -## Decision - -### ProofOperator - -`type ProofOperator` is an interface for Merkle proofs. The definition is: - -```go -type ProofOperator interface { - Run([][]byte) ([][]byte, error) - GetKey() []byte - ProofOp() ProofOp -} -``` - -Since a proof can treat various data type, `Run()` takes `[][]byte` as the argument, not `[]byte`. For example, a range proof's `Run()` can take multiple key-values as its argument. It will then return the root of the tree for the further process, calculated with the input value. - -`ProofOperator` does not have to be a Merkle proof - it can be a function that transforms the argument for intermediate process e.g. prepending the length to the `[]byte`. - -### ProofOp - -`type ProofOp` is a protobuf message which is a triple of `Type string`, `Key []byte`, and `Data []byte`. `ProofOperator` and `ProofOp`are interconvertible, using `ProofOperator.ProofOp()` and `OpDecoder()`, where `OpDecoder` is a function that each proof type can register for their own encoding scheme. For example, we can add an byte for encoding scheme before the serialized proof, supporting JSON decoding. - -## Status - -Implemented - -## Consequences - -### Positive - -- Layering becomes easier (no encoding/decoding at each step) -- Thirdparty proof format is available - -### Negative - -- Larger size for abci.ResponseQuery -- Unintuitive proof chaining(it is not clear what `Run()` is doing) -- Additional codes for registering `OpDecoder`s diff --git a/docs/architecture/adr-029-check-tx-consensus.md b/docs/architecture/adr-029-check-tx-consensus.md deleted file mode 100644 index 191a0ec8e..000000000 --- a/docs/architecture/adr-029-check-tx-consensus.md +++ /dev/null @@ -1,127 +0,0 @@ -# ADR 029: Check block txs before prevote - -## Changelog - -04-10-2018: Update with link to issue -[#2384](https://github.com/tendermint/tendermint/issues/2384) and reason for rejection -19-09-2018: Initial Draft - -## Context - -We currently check a tx's validity through 2 ways. - -1. Through checkTx in mempool connection. -2. Through deliverTx in consensus connection. - -The 1st is called when external tx comes in, so the node should be a proposer this time. The 2nd is called when external block comes in and reach the commit phase, the node doesn't need to be the proposer of the block, however it should check the txs in that block. - -In the 2nd situation, if there are many invalid txs in the block, it would be too late for all nodes to discover that most txs in the block are invalid, and we'd better not record invalid txs in the blockchain too. - -## Proposed solution - -Therefore, we should find a way to check the txs' validity before send out a prevote. Currently we have cs.isProposalComplete() to judge whether a block is complete. We can have - -``` -func (blockExec *BlockExecutor) CheckBlock(block *types.Block) error { - // check txs of block. - for _, tx := range block.Txs { - reqRes := blockExec.proxyApp.CheckTxAsync(tx) - reqRes.Wait() - if reqRes.Response == nil || reqRes.Response.GetCheckTx() == nil || reqRes.Response.GetCheckTx().Code != abci.CodeTypeOK { - return errors.Errorf("tx %v check failed. response: %v", tx, reqRes.Response) - } - } - return nil -} -``` - -such a method in BlockExecutor to check all txs' validity in that block. - -However, this method should not be implemented like that, because checkTx will share the same state used in mempool in the app. So we should define a new interface method checkBlock in Application to indicate it to use the same state as deliverTx. - -``` -type Application interface { - // Info/Query Connection - Info(RequestInfo) ResponseInfo // Return application info - Query(RequestQuery) ResponseQuery // Query for state - - // Mempool Connection - CheckTx(tx []byte) ResponseCheckTx // Validate a tx for the mempool - - // Consensus Connection - InitChain(RequestInitChain) ResponseInitChain // Initialize blockchain with validators and other info from TendermintCore - CheckBlock(RequestCheckBlock) ResponseCheckBlock - BeginBlock(RequestBeginBlock) ResponseBeginBlock // Signals the beginning of a block - DeliverTx(tx []byte) ResponseDeliverTx // Deliver a tx for full processing - EndBlock(RequestEndBlock) ResponseEndBlock // Signals the end of a block, returns changes to the validator set - Commit() ResponseCommit // Commit the state and return the application Merkle root hash -} -``` - -All app should implement that method. For example, counter: - -``` -func (app *CounterApplication) CheckBlock(block types.Request_CheckBlock) types.ResponseCheckBlock { - if app.serial { - app.originalTxCount = app.txCount //backup the txCount state - for _, tx := range block.CheckBlock.Block.Txs { - if len(tx) > 8 { - return types.ResponseCheckBlock{ - Code: code.CodeTypeEncodingError, - Log: fmt.Sprintf("Max tx size is 8 bytes, got %d", len(tx))} - } - tx8 := make([]byte, 8) - copy(tx8[len(tx8)-len(tx):], tx) - txValue := binary.BigEndian.Uint64(tx8) - if txValue < uint64(app.txCount) { - return types.ResponseCheckBlock{ - Code: code.CodeTypeBadNonce, - Log: fmt.Sprintf("Invalid nonce. Expected >= %v, got %v", app.txCount, txValue)} - } - app.txCount++ - } - } - return types.ResponseCheckBlock{Code: code.CodeTypeOK} -} -``` - -In BeginBlock, the app should restore the state to the orignal state before checking the block: - -``` -func (app *CounterApplication) DeliverTx(tx []byte) types.ResponseDeliverTx { - if app.serial { - app.txCount = app.originalTxCount //restore the txCount state - } - app.txCount++ - return types.ResponseDeliverTx{Code: code.CodeTypeOK} -} -``` - -The txCount is like the nonce in ethermint, it should be restored when entering the deliverTx phase. While some operation like checking the tx signature needs not to be done again. So the deliverTx can focus on how a tx can be applied, ignoring the checking of the tx, because all the checking has already been done in the checkBlock phase before. - -An optional optimization is alter the deliverTx to deliverBlock. For the block has already been checked by checkBlock, so all the txs in it are valid. So the app can cache the block, and in the deliverBlock phase, it just needs to apply the block in the cache. This optimization can save network current in deliverTx. - - - -## Status - -Rejected - -## Decision - -Performance impact is considered too great. See [#2384](https://github.com/tendermint/tendermint/issues/2384) - -## Consequences - -### Positive - -- more robust to defend the adversary to propose a block full of invalid txs. - -### Negative - -- add a new interface method. app logic needs to adjust to appeal to it. -- sending all the tx data over the ABCI twice -- potentially redundant validations (eg. signature checks in both CheckBlock and - DeliverTx) - -### Neutral diff --git a/docs/architecture/adr-030-consensus-refactor.md b/docs/architecture/adr-030-consensus-refactor.md deleted file mode 100644 index 5c8c3d754..000000000 --- a/docs/architecture/adr-030-consensus-refactor.md +++ /dev/null @@ -1,458 +0,0 @@ -# ADR 030: Consensus Refactor - -## Context - -One of the biggest challenges this project faces is to proof that the -implementations of the specifications are correct, much like we strive to -formaly verify our alogrithms and protocols we should work towards high -confidence about the correctness of our program code. One of those is the core -of Tendermint - Consensus - which currently resides in the `consensus` package. -Over time there has been high friction making changes to the package due to the -algorithm being scattered in a side-effectful container (the current -`ConsensusState`). In order to test the algorithm a large object-graph needs to -be set up and even than the non-deterministic parts of the container makes will -prevent high certainty. Where ideally we have a 1-to-1 representation of the -[spec](https://github.com/tendermint/spec), ready and easy to test for domain -experts. - -Addresses: - -- [#1495](https://github.com/tendermint/tendermint/issues/1495) -- [#1692](https://github.com/tendermint/tendermint/issues/1692) - -## Decision - -To remedy these issues we plan a gradual, non-invasive refactoring of the -`consensus` package. Starting of by isolating the consensus alogrithm into -a pure function and a finite state machine to address the most pressuring issue -of lack of confidence. Doing so while leaving the rest of the package in tact -and have follow-up optional changes to improve the sepration of concerns. - -### Implementation changes - -The core of Consensus can be modelled as a function with clear defined inputs: - -* `State` - data container for current round, height, etc. -* `Event`- significant events in the network - -producing clear outputs; - -* `State` - updated input -* `Message` - signal what actions to perform - -```go -type Event int - -const ( - EventUnknown Event = iota - EventProposal - Majority23PrevotesBlock - Majority23PrecommitBlock - Majority23PrevotesAny - Majority23PrecommitAny - TimeoutNewRound - TimeoutPropose - TimeoutPrevotes - TimeoutPrecommit -) - -type Message int - -const ( - MeesageUnknown Message = iota - MessageProposal - MessageVotes - MessageDecision -) - -type State struct { - height uint64 - round uint64 - step uint64 - lockedValue interface{} // TODO: Define proper type. - lockedRound interface{} // TODO: Define proper type. - validValue interface{} // TODO: Define proper type. - validRound interface{} // TODO: Define proper type. - // From the original notes: valid(v) - valid interface{} // TODO: Define proper type. - // From the original notes: proposer(h, r) - proposer interface{} // TODO: Define proper type. -} - -func Consensus(Event, State) (State, Message) { - // Consolidate implementation. -} -``` - -Tracking of relevant information to feed `Event` into the function and act on -the output is left to the `ConsensusExecutor` (formerly `ConsensusState`). - -Benefits for testing surfacing nicely as testing for a sequence of events -against algorithm could be as simple as the following example: - -``` go -func TestConsensusXXX(t *testing.T) { - type expected struct { - message Message - state State - } - - // Setup order of events, initial state and expectation. - var ( - events = []struct { - event Event - want expected - }{ - // ... - } - state = State{ - // ... - } - ) - - for _, e := range events { - sate, msg = Consensus(e.event, state) - - // Test message expectation. - if msg != e.want.message { - t.Fatalf("have %v, want %v", msg, e.want.message) - } - - // Test state expectation. - if !reflect.DeepEqual(state, e.want.state) { - t.Fatalf("have %v, want %v", state, e.want.state) - } - } -} -``` - - -## Consensus Executor - -## Consensus Core - -```go -type Event interface{} - -type EventNewHeight struct { - Height int64 - ValidatorId int -} - -type EventNewRound HeightAndRound - -type EventProposal struct { - Height int64 - Round int - Timestamp Time - BlockID BlockID - POLRound int - Sender int -} - -type Majority23PrevotesBlock struct { - Height int64 - Round int - BlockID BlockID -} - -type Majority23PrecommitBlock struct { - Height int64 - Round int - BlockID BlockID -} - -type HeightAndRound struct { - Height int64 - Round int -} - -type Majority23PrevotesAny HeightAndRound -type Majority23PrecommitAny HeightAndRound -type TimeoutPropose HeightAndRound -type TimeoutPrevotes HeightAndRound -type TimeoutPrecommit HeightAndRound - - -type Message interface{} - -type MessageProposal struct { - Height int64 - Round int - BlockID BlockID - POLRound int -} - -type VoteType int - -const ( - VoteTypeUnknown VoteType = iota - Prevote - Precommit -) - - -type MessageVote struct { - Height int64 - Round int - BlockID BlockID - Type VoteType -} - - -type MessageDecision struct { - Height int64 - Round int - BlockID BlockID -} - -type TriggerTimeout struct { - Height int64 - Round int - Duration Duration -} - - -type RoundStep int - -const ( - RoundStepUnknown RoundStep = iota - RoundStepPropose - RoundStepPrevote - RoundStepPrecommit - RoundStepCommit -) - -type State struct { - Height int64 - Round int - Step RoundStep - LockedValue BlockID - LockedRound int - ValidValue BlockID - ValidRound int - ValidatorId int - ValidatorSetSize int -} - -func proposer(height int64, round int) int {} -func getValue() BlockID {} - -func Consensus(event Event, state State) (State, Message, TriggerTimeout) { - msg = nil - timeout = nil - switch event := event.(type) { - case EventNewHeight: - if event.Height > state.Height { - state.Height = event.Height - state.Round = -1 - state.Step = RoundStepPropose - state.LockedValue = nil - state.LockedRound = -1 - state.ValidValue = nil - state.ValidRound = -1 - state.ValidatorId = event.ValidatorId - } - return state, msg, timeout - - case EventNewRound: - if event.Height == state.Height and event.Round > state.Round { - state.Round = eventRound - state.Step = RoundStepPropose - if proposer(state.Height, state.Round) == state.ValidatorId { - proposal = state.ValidValue - if proposal == nil { - proposal = getValue() - } - msg = MessageProposal { state.Height, state.Round, proposal, state.ValidRound } - } - timeout = TriggerTimeout { state.Height, state.Round, timeoutPropose(state.Round) } - } - return state, msg, timeout - - case EventProposal: - if event.Height == state.Height and event.Round == state.Round and - event.Sender == proposal(state.Height, state.Round) and state.Step == RoundStepPropose { - if event.POLRound >= state.LockedRound or event.BlockID == state.BlockID or state.LockedRound == -1 { - msg = MessageVote { state.Height, state.Round, event.BlockID, Prevote } - } - state.Step = RoundStepPrevote - } - return state, msg, timeout - - case TimeoutPropose: - if event.Height == state.Height and event.Round == state.Round and state.Step == RoundStepPropose { - msg = MessageVote { state.Height, state.Round, nil, Prevote } - state.Step = RoundStepPrevote - } - return state, msg, timeout - - case Majority23PrevotesBlock: - if event.Height == state.Height and event.Round == state.Round and state.Step >= RoundStepPrevote and event.Round > state.ValidRound { - state.ValidRound = event.Round - state.ValidValue = event.BlockID - if state.Step == RoundStepPrevote { - state.LockedRound = event.Round - state.LockedValue = event.BlockID - msg = MessageVote { state.Height, state.Round, event.BlockID, Precommit } - state.Step = RoundStepPrecommit - } - } - return state, msg, timeout - - case Majority23PrevotesAny: - if event.Height == state.Height and event.Round == state.Round and state.Step == RoundStepPrevote { - timeout = TriggerTimeout { state.Height, state.Round, timeoutPrevote(state.Round) } - } - return state, msg, timeout - - case TimeoutPrevote: - if event.Height == state.Height and event.Round == state.Round and state.Step == RoundStepPrevote { - msg = MessageVote { state.Height, state.Round, nil, Precommit } - state.Step = RoundStepPrecommit - } - return state, msg, timeout - - case Majority23PrecommitBlock: - if event.Height == state.Height { - state.Step = RoundStepCommit - state.LockedValue = event.BlockID - } - return state, msg, timeout - - case Majority23PrecommitAny: - if event.Height == state.Height and event.Round == state.Round { - timeout = TriggerTimeout { state.Height, state.Round, timeoutPrecommit(state.Round) } - } - return state, msg, timeout - - case TimeoutPrecommit: - if event.Height == state.Height and event.Round == state.Round { - state.Round = state.Round + 1 - } - return state, msg, timeout - } -} - -func ConsensusExecutor() { - proposal = nil - votes = HeightVoteSet { Height: 1 } - state = State { - Height: 1 - Round: 0 - Step: RoundStepPropose - LockedValue: nil - LockedRound: -1 - ValidValue: nil - ValidRound: -1 - } - - event = EventNewHeight {1, id} - state, msg, timeout = Consensus(event, state) - - event = EventNewRound {state.Height, 0} - state, msg, timeout = Consensus(event, state) - - if msg != nil { - send msg - } - - if timeout != nil { - trigger timeout - } - - for { - select { - case message := <- msgCh: - switch msg := message.(type) { - case MessageProposal: - - case MessageVote: - if msg.Height == state.Height { - newVote = votes.AddVote(msg) - if newVote { - switch msg.Type { - case Prevote: - prevotes = votes.Prevotes(msg.Round) - if prevotes.WeakCertificate() and msg.Round > state.Round { - event = EventNewRound { msg.Height, msg.Round } - state, msg, timeout = Consensus(event, state) - state = handleStateChange(state, msg, timeout) - } - - if blockID, ok = prevotes.TwoThirdsMajority(); ok and blockID != nil { - if msg.Round == state.Round and hasBlock(blockID) { - event = Majority23PrevotesBlock { msg.Height, msg.Round, blockID } - state, msg, timeout = Consensus(event, state) - state = handleStateChange(state, msg, timeout) - } - if proposal != nil and proposal.POLRound == msg.Round and hasBlock(blockID) { - event = EventProposal { - Height: state.Height - Round: state.Round - BlockID: blockID - POLRound: proposal.POLRound - Sender: message.Sender - } - state, msg, timeout = Consensus(event, state) - state = handleStateChange(state, msg, timeout) - } - } - - if prevotes.HasTwoThirdsAny() and msg.Round == state.Round { - event = Majority23PrevotesAny { msg.Height, msg.Round, blockID } - state, msg, timeout = Consensus(event, state) - state = handleStateChange(state, msg, timeout) - } - - case Precommit: - - } - } - } - case timeout := <- timeoutCh: - - case block := <- blockCh: - - } - } -} - -func handleStateChange(state, msg, timeout) State { - if state.Step == Commit { - state = ExecuteBlock(state.LockedValue) - } - if msg != nil { - send msg - } - if timeout != nil { - trigger timeout - } -} - -``` - -### Implementation roadmap - -* implement proposed implementation -* replace currently scattered calls in `ConsensusState` with calls to the new - `Consensus` function -* rename `ConsensusState` to `ConsensusExecutor` to avoid confusion -* propose design for improved separation and clear information flow between - `ConsensusExecutor` and `ConsensusReactor` - -## Status - -Draft. - -## Consequences - -### Positive - -- isolated implementation of the algorithm -- improved testability - simpler to proof correctness -- clearer separation of concerns - easier to reason - -### Negative - -### Neutral diff --git a/docs/architecture/adr-033-pubsub.md b/docs/architecture/adr-033-pubsub.md deleted file mode 100644 index 7b7912a9f..000000000 --- a/docs/architecture/adr-033-pubsub.md +++ /dev/null @@ -1,247 +0,0 @@ -# ADR 033: pubsub 2.0 - -Author: Anton Kaliaev (@melekes) - -## Changelog - -02-10-2018: Initial draft - -16-01-2019: Second version based on our conversation with Jae - -17-01-2019: Third version explaining how new design solves current issues - -25-01-2019: Fourth version to treat buffered and unbuffered channels differently - -## Context - -Since the initial version of the pubsub, there's been a number of issues -raised: [#951], [#1879], [#1880]. Some of them are high-level issues questioning the -core design choices made. Others are minor and mostly about the interface of -`Subscribe()` / `Publish()` functions. - -### Sync vs Async - -Now, when publishing a message to subscribers, we can do it in a goroutine: - -_using channels for data transmission_ -```go -for each subscriber { - out := subscriber.outc - go func() { - out <- msg - } -} -``` - -_by invoking callback functions_ -```go -for each subscriber { - go subscriber.callbackFn() -} -``` - -This gives us greater performance and allows us to avoid "slow client problem" -(when other subscribers have to wait for a slow subscriber). A pool of -goroutines can be used to avoid uncontrolled memory growth. - -In certain cases, this is what you want. But in our case, because we need -strict ordering of events (if event A was published before B, the guaranteed -delivery order will be A -> B), we can't publish msg in a new goroutine every time. - -We can also have a goroutine per subscriber, although we'd need to be careful -with the number of subscribers. It's more difficult to implement as well + -unclear if we'll benefit from it (cause we'd be forced to create N additional -channels to distribute msg to these goroutines). - -### Non-blocking send - -There is also a question whenever we should have a non-blocking send. -Currently, sends are blocking, so publishing to one client can block on -publishing to another. This means a slow or unresponsive client can halt the -system. Instead, we can use a non-blocking send: - -```go -for each subscriber { - out := subscriber.outc - select { - case out <- msg: - default: - log("subscriber %v buffer is full, skipping...") - } -} -``` - -This fixes the "slow client problem", but there is no way for a slow client to -know if it had missed a message. We could return a second channel and close it -to indicate subscription termination. On the other hand, if we're going to -stick with blocking send, **devs must always ensure subscriber's handling code -does not block**, which is a hard task to put on their shoulders. - -The interim option is to run goroutines pool for a single message, wait for all -goroutines to finish. This will solve "slow client problem", but we'd still -have to wait `max(goroutine_X_time)` before we can publish the next message. - -### Channels vs Callbacks - -Yet another question is whether we should use channels for message transmission or -call subscriber-defined callback functions. Callback functions give subscribers -more flexibility - you can use mutexes in there, channels, spawn goroutines, -anything you really want. But they also carry local scope, which can result in -memory leaks and/or memory usage increase. - -Go channels are de-facto standard for carrying data between goroutines. - -### Why `Subscribe()` accepts an `out` channel? - -Because in our tests, we create buffered channels (cap: 1). Alternatively, we -can make capacity an argument and return a channel. - -## Decision - -### MsgAndTags - -Use a `MsgAndTags` struct on the subscription channel to indicate what tags the -msg matched. - -```go -type MsgAndTags struct { - Msg interface{} - Tags TagMap -} -``` - -### Subscription Struct - - -Change `Subscribe()` function to return a `Subscription` struct: - -```go -type Subscription struct { - // private fields -} - -func (s *Subscription) Out() <-chan MsgAndTags -func (s *Subscription) Canceled() <-chan struct{} -func (s *Subscription) Err() error -``` - -`Out()` returns a channel onto which messages and tags are published. -`Unsubscribe`/`UnsubscribeAll` does not close the channel to avoid clients from -receiving a nil message. - -`Canceled()` returns a channel that's closed when the subscription is terminated -and supposed to be used in a select statement. - -If the channel returned by `Canceled()` is not closed yet, `Err()` returns nil. -If the channel is closed, `Err()` returns a non-nil error explaining why: -`ErrUnsubscribed` if the subscriber choose to unsubscribe, -`ErrOutOfCapacity` if the subscriber is not pulling messages fast enough and the channel returned by `Out()` became full. -After `Err()` returns a non-nil error, successive calls to `Err() return the same error. - -```go -subscription, err := pubsub.Subscribe(...) -if err != nil { - // ... -} -for { -select { - case msgAndTags <- subscription.Out(): - // ... - case <-subscription.Canceled(): - return subscription.Err() -} -``` - -### Capacity and Subscriptions - -Make the `Out()` channel buffered (with capacity 1) by default. In most cases, we want to -terminate the slow subscriber. Only in rare cases, we want to block the pubsub -(e.g. when debugging consensus). This should lower the chances of the pubsub -being frozen. - -```go -// outCap can be used to set capacity of Out channel -// (1 by default, must be greater than 0). -Subscribe(ctx context.Context, clientID string, query Query, outCap... int) (Subscription, error) { -``` - -Use a different function for an unbuffered channel: - -```go -// Subscription uses an unbuffered channel. Publishing will block. -SubscribeUnbuffered(ctx context.Context, clientID string, query Query) (Subscription, error) { -``` - -SubscribeUnbuffered should not be exposed to users. - -### Blocking/Nonblocking - -The publisher should treat these kinds of channels separately. -It should block on unbuffered channels (for use with internal consensus events -in the consensus tests) and not block on the buffered ones. If a client is too -slow to keep up with it's messages, it's subscription is terminated: - -for each subscription { - out := subscription.outChan - if cap(out) == 0 { - // block on unbuffered channel - out <- msg - } else { - // don't block on buffered channels - select { - case out <- msg: - default: - // set the error, notify on the cancel chan - subscription.err = fmt.Errorf("client is too slow for msg) - close(subscription.cancelChan) - - // ... unsubscribe and close out - } - } -} - -### How this new design solves the current issues? - -[#951] ([#1880]): - -Because of non-blocking send, situation where we'll deadlock is not possible -anymore. If the client stops reading messages, it will be removed. - -[#1879]: - -MsgAndTags is used now instead of a plain message. - -### Future problems and their possible solutions - -[#2826] - -One question I am still pondering about: how to prevent pubsub from slowing -down consensus. We can increase the pubsub queue size (which is 0 now). Also, -it's probably a good idea to limit the total number of subscribers. - -This can be made automatically. Say we set queue size to 1000 and, when it's >= -80% full, refuse new subscriptions. - -## Status - -Implemented - -## Consequences - -### Positive - -- more idiomatic interface -- subscribers know what tags msg was published with -- subscribers aware of the reason their subscription was canceled - -### Negative - -- (since v1) no concurrency when it comes to publishing messages - -### Neutral - - -[#951]: https://github.com/tendermint/tendermint/issues/951 -[#1879]: https://github.com/tendermint/tendermint/issues/1879 -[#1880]: https://github.com/tendermint/tendermint/issues/1880 -[#2826]: https://github.com/tendermint/tendermint/issues/2826 diff --git a/docs/architecture/adr-034-priv-validator-file-structure.md b/docs/architecture/adr-034-priv-validator-file-structure.md deleted file mode 100644 index c87cec132..000000000 --- a/docs/architecture/adr-034-priv-validator-file-structure.md +++ /dev/null @@ -1,72 +0,0 @@ -# ADR 034: PrivValidator file structure - -## Changelog - -03-11-2018: Initial Draft - -## Context - -For now, the PrivValidator file `priv_validator.json` contains mutable and immutable parts. -Even in an insecure mode which does not encrypt private key on disk, it is reasonable to separate -the mutable part and immutable part. - -References: -[#1181](https://github.com/tendermint/tendermint/issues/1181) -[#2657](https://github.com/tendermint/tendermint/issues/2657) -[#2313](https://github.com/tendermint/tendermint/issues/2313) - -## Proposed Solution - -We can split mutable and immutable parts with two structs: -```go -// FilePVKey stores the immutable part of PrivValidator -type FilePVKey struct { - Address types.Address `json:"address"` - PubKey crypto.PubKey `json:"pub_key"` - PrivKey crypto.PrivKey `json:"priv_key"` - - filePath string -} - -// FilePVState stores the mutable part of PrivValidator -type FilePVLastSignState struct { - Height int64 `json:"height"` - Round int `json:"round"` - Step int8 `json:"step"` - Signature []byte `json:"signature,omitempty"` - SignBytes cmn.HexBytes `json:"signbytes,omitempty"` - - filePath string - mtx sync.Mutex -} -``` - -Then we can combine `FilePVKey` with `FilePVLastSignState` and will get the original `FilePV`. - -```go -type FilePV struct { - Key FilePVKey - LastSignState FilePVLastSignState -} -``` - -As discussed, `FilePV` should be located in `config`, and `FilePVLastSignState` should be stored in `data`. The -store path of each file should be specified in `config.yml`. - -What we need to do next is changing the methods of `FilePV`. - -## Status - -Implemented - -## Consequences - -### Positive - -- separate the mutable and immutable of PrivValidator - -### Negative - -- need to add more config for file path - -### Neutral diff --git a/docs/architecture/adr-035-documentation.md b/docs/architecture/adr-035-documentation.md deleted file mode 100644 index 92cb07916..000000000 --- a/docs/architecture/adr-035-documentation.md +++ /dev/null @@ -1,40 +0,0 @@ -# ADR 035: Documentation - -Author: @zramsay (Zach Ramsay) - -## Changelog - -### November 2nd 2018 - -- initial write-up - -## Context - -The Tendermint documentation has undergone several changes until settling on the current model. Originally, the documentation was hosted on the website and had to be updated asynchronously from the code. Along with the other repositories requiring documentation, the whole stack moved to using Read The Docs to automatically generate, publish, and host the documentation. This, however, was insufficient; the RTD site had advertisement, it wasn't easily accessible to devs, didn't collect metrics, was another set of external links, etc. - -## Decision - -For two reasons, the decision was made to use VuePress: - -1) ability to get metrics (implemented on both Tendermint and SDK) -2) host the documentation on the website as a `/docs` endpoint. - -This is done while maintaining synchrony between the docs and code, i.e., the website is built whenever the docs are updated. - -## Status - -The two points above have been implemented; the `config.js` has a Google Analytics identifier and the documentation workflow has been up and running largely without problems for several months. Details about the documentation build & workflow can be found [here](../DOCS_README.md) - -## Consequences - -Because of the organizational seperation between Tendermint & Cosmos, there is a challenge of "what goes where" for certain aspects of documentation. - -### Positive - -This architecture is largely positive relative to prior docs arrangements. - -### Negative - -A significant portion of the docs automation / build process is in private repos with limited access/visibility to devs. However, these tasks are handled by the SRE team. - -### Neutral diff --git a/docs/architecture/adr-036-empty-blocks-abci.md b/docs/architecture/adr-036-empty-blocks-abci.md deleted file mode 100644 index ec4806cfa..000000000 --- a/docs/architecture/adr-036-empty-blocks-abci.md +++ /dev/null @@ -1,38 +0,0 @@ -# ADR 036: Empty Blocks via ABCI - -## Changelog - -- {date}: {changelog} - -## Context - -> This section contains all the context one needs to understand the current state, and why there is a problem. It should be as succinct as possible and introduce the high level idea behind the solution. - -## Decision - -> This section explains all of the details of the proposed solution, including implementation details. -> It should also describe affects / corollary items that may need to be changed as a part of this. -> If the proposed change will be large, please also indicate a way to do the change to maximize ease of review. -> (e.g. the optimal split of things to do between separate PR's) - -## Status - -> A decision may be "proposed" if it hasn't been agreed upon yet, or "accepted" once it is agreed upon. If a later ADR changes or reverses a decision, it may be marked as "deprecated" or "superseded" with a reference to its replacement. - -{Deprecated|Proposed|Accepted|Declined} - -## Consequences - -> This section describes the consequences, after applying the decision. All consequences should be summarized here, not just the "positive" ones. - -### Positive - -### Negative - -### Neutral - -## References - -> Are there any relevant PR comments, issues that led up to this, or articles referenced for why we made the given design choice? If so link them here! - -- {reference link} diff --git a/docs/architecture/adr-037-deliver-block.md b/docs/architecture/adr-037-deliver-block.md deleted file mode 100644 index c5e119c06..000000000 --- a/docs/architecture/adr-037-deliver-block.md +++ /dev/null @@ -1,100 +0,0 @@ -# ADR 037: Deliver Block - -Author: Daniil Lashin (@danil-lashin) - -## Changelog - -13-03-2019: Initial draft - -## Context - -Initial conversation: https://github.com/tendermint/tendermint/issues/2901 - -Some applications can handle transactions in parallel, or at least some -part of tx processing can be parallelized. Now it is not possible for developer -to execute txs in parallel because Tendermint delivers them consequentially. - -## Decision - -Now Tendermint have `BeginBlock`, `EndBlock`, `Commit`, `DeliverTx` steps -while executing block. This doc proposes merging this steps into one `DeliverBlock` -step. It will allow developers of applications to decide how they want to -execute transactions (in parallel or consequentially). Also it will simplify and -speed up communications between application and Tendermint. - -As @jaekwon [mentioned](https://github.com/tendermint/tendermint/issues/2901#issuecomment-477746128) -in discussion not all application will benefit from this solution. In some cases, -when application handles transaction consequentially, it way slow down the blockchain, -because it need to wait until full block is transmitted to application to start -processing it. Also, in the case of complete change of ABCI, we need to force all the apps -to change their implementation completely. That's why I propose to introduce one more ABCI -type. - -# Implementation Changes - -In addition to default application interface which now have this structure - -```go -type Application interface { - // Info and Mempool methods... - - // Consensus Connection - InitChain(RequestInitChain) ResponseInitChain // Initialize blockchain with validators and other info from TendermintCore - BeginBlock(RequestBeginBlock) ResponseBeginBlock // Signals the beginning of a block - DeliverTx(tx []byte) ResponseDeliverTx // Deliver a tx for full processing - EndBlock(RequestEndBlock) ResponseEndBlock // Signals the end of a block, returns changes to the validator set - Commit() ResponseCommit // Commit the state and return the application Merkle root hash -} -``` - -this doc proposes to add one more: - -```go -type Application interface { - // Info and Mempool methods... - - // Consensus Connection - InitChain(RequestInitChain) ResponseInitChain // Initialize blockchain with validators and other info from TendermintCore - DeliverBlock(RequestDeliverBlock) ResponseDeliverBlock // Deliver full block - Commit() ResponseCommit // Commit the state and return the application Merkle root hash -} - -type RequestDeliverBlock struct { - Hash []byte - Header Header - Txs Txs - LastCommitInfo LastCommitInfo - ByzantineValidators []Evidence -} - -type ResponseDeliverBlock struct { - ValidatorUpdates []ValidatorUpdate - ConsensusParamUpdates *ConsensusParams - Tags []kv.Pair - TxResults []ResponseDeliverTx -} - -``` - -Also, we will need to add new config param, which will specify what kind of ABCI application uses. -For example, it can be `abci_type`. Then we will have 2 types: -- `advanced` - current ABCI -- `simple` - proposed implementation - -## Status - -In review - -## Consequences - -### Positive - -- much simpler introduction and tutorials for new developers (instead of implementing 5 methods whey -will need to implement only 3) -- txs can be handled in parallel -- simpler interface -- faster communications between Tendermint and application - -### Negative - -- Tendermint should now support 2 kinds of ABCI diff --git a/docs/architecture/adr-038-non-zero-start-height.md b/docs/architecture/adr-038-non-zero-start-height.md deleted file mode 100644 index 7dd474ec7..000000000 --- a/docs/architecture/adr-038-non-zero-start-height.md +++ /dev/null @@ -1,38 +0,0 @@ -# ADR 038: Non-zero start height - -## Changelog - -- {date}: {changelog} - -## Context - -> This section contains all the context one needs to understand the current state, and why there is a problem. It should be as succinct as possible and introduce the high level idea behind the solution. - -## Decision - -> This section explains all of the details of the proposed solution, including implementation details. -> It should also describe affects / corollary items that may need to be changed as a part of this. -> If the proposed change will be large, please also indicate a way to do the change to maximize ease of review. -> (e.g. the optimal split of things to do between separate PR's) - -## Status - -> A decision may be "proposed" if it hasn't been agreed upon yet, or "accepted" once it is agreed upon. If a later ADR changes or reverses a decision, it may be marked as "deprecated" or "superseded" with a reference to its replacement. - -{Deprecated|Proposed|Accepted|Declined} - -## Consequences - -> This section describes the consequences, after applying the decision. All consequences should be summarized here, not just the "positive" ones. - -### Positive - -### Negative - -### Neutral - -## References - -> Are there any relevant PR comments, issues that led up to this, or articles referenced for why we made the given design choice? If so link them here! - -- {reference link} diff --git a/docs/architecture/adr-039-peer-behaviour.md b/docs/architecture/adr-039-peer-behaviour.md deleted file mode 100644 index 4ad051a35..000000000 --- a/docs/architecture/adr-039-peer-behaviour.md +++ /dev/null @@ -1,159 +0,0 @@ -# ADR 039: Peer Behaviour Interface - -## Changelog -* 07-03-2019: Initial draft -* 14-03-2019: Updates from feedback - -## Context - -The responsibility for signaling and acting upon peer behaviour lacks a single -owning component and is heavily coupled with the network stack[1](#references). Reactors -maintain a reference to the `p2p.Switch` which they use to call -`switch.StopPeerForError(...)` when a peer misbehaves and -`switch.MarkAsGood(...)` when a peer contributes in some meaningful way. -While the switch handles `StopPeerForError` internally, the `MarkAsGood` -method delegates to another component, `p2p.AddrBook`. This scheme of delegation -across Switch obscures the responsibility for handling peer behaviour -and ties up the reactors in a larger dependency graph when testing. - -## Decision - -Introduce a `PeerBehaviour` interface and concrete implementations which -provide methods for reactors to signal peer behaviour without direct -coupling `p2p.Switch`. Introduce a ErrorBehaviourPeer to provide -concrete reasons for stopping peers. Introduce GoodBehaviourPeer to provide -concrete ways in which a peer contributes. - -### Implementation Changes - -PeerBehaviour then becomes an interface for signaling peer errors as well -as for marking peers as `good`. - -```go -type PeerBehaviour interface { - Behaved(peer Peer, reason GoodBehaviourPeer) - Errored(peer Peer, reason ErrorBehaviourPeer) -} -``` - -Instead of signaling peers to stop with arbitrary reasons: -`reason interface{}` - -We introduce a concrete error type ErrorBehaviourPeer: -```go -type ErrorBehaviourPeer int - -const ( - ErrorBehaviourUnknown = iota - ErrorBehaviourBadMessage - ErrorBehaviourMessageOutofOrder - ... -) -``` - -To provide additional information on the ways a peer contributed, we introduce -the GoodBehaviourPeer type. - -```go -type GoodBehaviourPeer int - -const ( - GoodBehaviourVote = iota - GoodBehaviourBlockPart - ... -) -``` - -As a first iteration we provide a concrete implementation which wraps -the switch: -```go -type SwitchedPeerBehaviour struct { - sw *Switch -} - -func (spb *SwitchedPeerBehaviour) Errored(peer Peer, reason ErrorBehaviourPeer) { - spb.sw.StopPeerForError(peer, reason) -} - -func (spb *SwitchedPeerBehaviour) Behaved(peer Peer, reason GoodBehaviourPeer) { - spb.sw.MarkPeerAsGood(peer) -} - -func NewSwitchedPeerBehaviour(sw *Switch) *SwitchedPeerBehaviour { - return &SwitchedPeerBehaviour{ - sw: sw, - } -} -``` - -Reactors, which are often difficult to unit test[2](#references) could use an implementation which exposes the signals produced by the reactor in -manufactured scenarios: - -```go -type ErrorBehaviours map[Peer][]ErrorBehaviourPeer -type GoodBehaviours map[Peer][]GoodBehaviourPeer - -type StorePeerBehaviour struct { - eb ErrorBehaviours - gb GoodBehaviours -} - -func NewStorePeerBehaviour() *StorePeerBehaviour{ - return &StorePeerBehaviour{ - eb: make(ErrorBehaviours), - gb: make(GoodBehaviours), - } -} - -func (spb StorePeerBehaviour) Errored(peer Peer, reason ErrorBehaviourPeer) { - if _, ok := spb.eb[peer]; !ok { - spb.eb[peer] = []ErrorBehaviours{reason} - } else { - spb.eb[peer] = append(spb.eb[peer], reason) - } -} - -func (mpb *StorePeerBehaviour) GetErrored() ErrorBehaviours { - return mpb.eb -} - - -func (spb StorePeerBehaviour) Behaved(peer Peer, reason GoodBehaviourPeer) { - if _, ok := spb.gb[peer]; !ok { - spb.gb[peer] = []GoodBehaviourPeer{reason} - } else { - spb.gb[peer] = append(spb.gb[peer], reason) - } -} - -func (spb *StorePeerBehaviour) GetBehaved() GoodBehaviours { - return spb.gb -} -``` - -## Status - -Accepted - -## Consequences - -### Positive - - * De-couple signaling from acting upon peer behaviour. - * Reduce the coupling of reactors and the Switch and the network - stack - * The responsibility of managing peer behaviour can be migrated to - a single component instead of split between the switch and the - address book. - -### Negative - - * The first iteration will simply wrap the Switch and introduce a - level of indirection. - -### Neutral - -## References - -1. Issue [#2067](https://github.com/tendermint/tendermint/issues/2067): P2P Refactor -2. PR: [#3506](https://github.com/tendermint/tendermint/pull/3506): ADR 036: Blockchain Reactor Refactor diff --git a/docs/architecture/adr-040-blockchain-reactor-refactor.md b/docs/architecture/adr-040-blockchain-reactor-refactor.md deleted file mode 100644 index 520d55b5d..000000000 --- a/docs/architecture/adr-040-blockchain-reactor-refactor.md +++ /dev/null @@ -1,534 +0,0 @@ -# ADR 040: Blockchain Reactor Refactor - -## Changelog - -19-03-2019: Initial draft - -## Context - -The Blockchain Reactor's high level responsibility is to enable peers who are far behind the current state of the -blockchain to quickly catch up by downloading many blocks in parallel from its peers, verifying block correctness, and -executing them against the ABCI application. We call the protocol executed by the Blockchain Reactor `fast-sync`. -The current architecture diagram of the blockchain reactor can be found here: - -![Blockchain Reactor Architecture Diagram](img/bc-reactor.png) - -The current architecture consists of dozens of routines and it is tightly depending on the `Switch`, making writing -unit tests almost impossible. Current tests require setting up complex dependency graphs and dealing with concurrency. -Note that having dozens of routines is in this case overkill as most of the time routines sits idle waiting for -something to happen (message to arrive or timeout to expire). Due to dependency on the `Switch`, testing relatively -complex network scenarios and failures (for example adding and removing peers) is very complex tasks and frequently lead -to complex tests with not deterministic behavior ([#3400]). Impossibility to write proper tests makes confidence in -the code low and this resulted in several issues (some are fixed in the meantime and some are still open): -[#3400], [#2897], [#2896], [#2699], [#2888], [#2457], [#2622], [#2026]. - -## Decision - -To remedy these issues we plan a major refactor of the blockchain reactor. The proposed architecture is largely inspired -by ADR-30 and is presented on the following diagram: -![Blockchain Reactor Refactor Diagram](img/bc-reactor-refactor.png) - -We suggest a concurrency architecture where the core algorithm (we call it `Controller`) is extracted into a finite -state machine. The active routine of the reactor is called `Executor` and is responsible for receiving and sending -messages from/to peers and triggering timeouts. What messages should be sent and timeouts triggered is determined mostly -by the `Controller`. The exception is `Peer Heartbeat` mechanism which is `Executor` responsibility. The heartbeat -mechanism is used to remove slow and unresponsive peers from the peer list. Writing of unit tests is simpler with -this architecture as most of the critical logic is part of the `Controller` function. We expect that simpler concurrency -architecture will not have significant negative effect on the performance of this reactor (to be confirmed by -experimental evaluation). - - -### Implementation changes - -We assume the following system model for "fast sync" protocol: - -* a node is connected to a random subset of all nodes that represents its peer set. Some nodes are correct and some - might be faulty. We don't make assumptions about ratio of faulty nodes, i.e., it is possible that all nodes in some - peer set are faulty. -* we assume that communication between correct nodes is synchronous, i.e., if a correct node `p` sends a message `m` to - a correct node `q` at time `t`, then `q` will receive message the latest at time `t+Delta` where `Delta` is a system - parameter that is known by network participants. `Delta` is normally chosen to be an order of magnitude higher than - the real communication delay (maximum) between correct nodes. Therefore if a correct node `p` sends a request message - to a correct node `q` at time `t` and there is no the corresponding reply at time `t + 2*Delta`, then `p` can assume - that `q` is faulty. Note that the network assumptions for the consensus reactor are different (we assume partially - synchronous model there). - -The requirements for the "fast sync" protocol are formally specified as follows: - -- `Correctness`: If a correct node `p` is connected to a correct node `q` for a long enough period of time, then `p` -- will eventually download all requested blocks from `q`. -- `Termination`: If a set of peers of a correct node `p` is stable (no new nodes are added to the peer set of `p`) for -- a long enough period of time, then protocol eventually terminates. -- `Fairness`: A correct node `p` sends requests for blocks to all peers from its peer set. - -As explained above, the `Executor` is responsible for sending and receiving messages that are part of the `fast-sync` -protocol. The following messages are exchanged as part of `fast-sync` protocol: - -``` go -type Message int -const ( - MessageUnknown Message = iota - MessageStatusRequest - MessageStatusResponse - MessageBlockRequest - MessageBlockResponse -) -``` -`MessageStatusRequest` is sent periodically to all peers as a request for a peer to provide its current height. It is -part of the `Peer Heartbeat` mechanism and a failure to respond timely to this message results in a peer being removed -from the peer set. Note that the `Peer Heartbeat` mechanism is used only while a peer is in `fast-sync` mode. We assume -here existence of a mechanism that gives node a possibility to inform its peers that it is in the `fast-sync` mode. - -``` go -type MessageStatusRequest struct { - SeqNum int64 // sequence number of the request -} -``` -`MessageStatusResponse` is sent as a response to `MessageStatusRequest` to inform requester about the peer current -height. - -``` go -type MessageStatusResponse struct { - SeqNum int64 // sequence number of the corresponding request - Height int64 // current peer height -} -``` - -`MessageBlockRequest` is used to make a request for a block and the corresponding commit certificate at a given height. - -``` go -type MessageBlockRequest struct { - Height int64 -} -``` - -`MessageBlockResponse` is a response for the corresponding block request. In addition to providing the block and the -corresponding commit certificate, it contains also a current peer height. - -``` go -type MessageBlockResponse struct { - Height int64 - Block Block - Commit Commit - PeerHeight int64 -} -``` - -In addition to sending and receiving messages, and `HeartBeat` mechanism, controller is also managing timeouts -that are triggered upon `Controller` request. `Controller` is then informed once a timeout expires. - -``` go -type TimeoutTrigger int -const ( - TimeoutUnknown TimeoutTrigger = iota - TimeoutResponseTrigger - TimeoutTerminationTrigger -) -``` - -The `Controller` can be modelled as a function with clearly defined inputs: - -* `State` - current state of the node. Contains data about connected peers and its behavior, pending requests, -* received blocks, etc. -* `Event` - significant events in the network. - -producing clear outputs: - -* `State` - updated state of the node, -* `MessageToSend` - signal what message to send and to which peer -* `TimeoutTrigger` - signal that timeout should be triggered. - - -We consider the following `Event` types: - -``` go -type Event int -const ( - EventUnknown Event = iota - EventStatusReport - EventBlockRequest - EventBlockResponse - EventRemovePeer - EventTimeoutResponse - EventTimeoutTermination -) -``` - -`EventStatusResponse` event is generated once `MessageStatusResponse` is received by the `Executor`. - -``` go -type EventStatusReport struct { - PeerID ID - Height int64 -} -``` - -`EventBlockRequest` event is generated once `MessageBlockRequest` is received by the `Executor`. - -``` go -type EventBlockRequest struct { - Height int64 - PeerID p2p.ID -} -``` -`EventBlockResponse` event is generated upon reception of `MessageBlockResponse` message by the `Executor`. - -``` go -type EventBlockResponse struct { - Height int64 - Block Block - Commit Commit - PeerID ID - PeerHeight int64 -} -``` -`EventRemovePeer` is generated by `Executor` to signal that the connection to a peer is closed due to peer misbehavior. - -``` go -type EventRemovePeer struct { - PeerID ID -} -``` -`EventTimeoutResponse` is generated by `Executor` to signal that a timeout triggered by `TimeoutResponseTrigger` has -expired. - -``` go -type EventTimeoutResponse struct { - PeerID ID - Height int64 -} -``` -`EventTimeoutTermination` is generated by `Executor` to signal that a timeout triggered by `TimeoutTerminationTrigger` -has expired. - -``` go -type EventTimeoutTermination struct { - Height int64 -} -``` - -`MessageToSend` is just a wrapper around `Message` type that contains id of the peer to which message should be sent. - -``` go -type MessageToSend struct { - PeerID ID - Message Message -} -``` - -The Controller state machine can be in two modes: `ModeFastSync` when -a node is trying to catch up with the network by downloading committed blocks, -and `ModeConsensus` in which it executes Tendermint consensus protocol. We -consider that `fast sync` mode terminates once the Controller switch to -`ModeConsensus`. - -``` go -type Mode int -const ( - ModeUnknown Mode = iota - ModeFastSync - ModeConsensus -) -``` -`Controller` is managing the following state: - -``` go -type ControllerState struct { - Height int64 // the first block that is not committed - Mode Mode // mode of operation - PeerMap map[ID]PeerStats // map of peer IDs to peer statistics - MaxRequestPending int64 // maximum height of the pending requests - FailedRequests []int64 // list of failed block requests - PendingRequestsNum int // total number of pending requests - Store []BlockInfo // contains list of downloaded blocks - Executor BlockExecutor // store, verify and executes blocks -} -``` - -`PeerStats` data structure keeps for every peer its current height and a list of pending requests for blocks. - -``` go -type PeerStats struct { - Height int64 - PendingRequest int64 // a request sent to this peer -} -``` - -`BlockInfo` data structure is used to store information (as part of block store) about downloaded blocks: from what peer - a block and the corresponding commit certificate are received. -``` go -type BlockInfo struct { - Block Block - Commit Commit - PeerID ID // a peer from which we received the corresponding Block and Commit -} -``` - -The `Controller` is initialized by providing an initial height (`startHeight`) from which it will start downloading -blocks from peers and the current state of the `BlockExecutor`. - -``` go -func NewControllerState(startHeight int64, executor BlockExecutor) ControllerState { - state = ControllerState {} - state.Height = startHeight - state.Mode = ModeFastSync - state.MaxRequestPending = startHeight - 1 - state.PendingRequestsNum = 0 - state.Executor = executor - initialize state.PeerMap, state.FailedRequests and state.Store to empty data structures - return state -} -``` - -The core protocol logic is given with the following function: - -``` go -func handleEvent(state ControllerState, event Event) (ControllerState, Message, TimeoutTrigger, Error) { - msg = nil - timeout = nil - error = nil - - switch state.Mode { - case ModeConsensus: - switch event := event.(type) { - case EventBlockRequest: - msg = createBlockResponseMessage(state, event) - return state, msg, timeout, error - default: - error = "Only respond to BlockRequests while in ModeConsensus!" - return state, msg, timeout, error - } - - case ModeFastSync: - switch event := event.(type) { - case EventBlockRequest: - msg = createBlockResponseMessage(state, event) - return state, msg, timeout, error - - case EventStatusResponse: - return handleEventStatusResponse(event, state) - - case EventRemovePeer: - return handleEventRemovePeer(event, state) - - case EventBlockResponse: - return handleEventBlockResponse(event, state) - - case EventResponseTimeout: - return handleEventResponseTimeout(event, state) - - case EventTerminationTimeout: - // Termination timeout is triggered in case of empty peer set and in case there are no pending requests. - // If this timeout expires and in the meantime no new peers are added or new pending requests are made - // then `fast-sync` mode terminates by switching to `ModeConsensus`. - // Note that termination timeout should be higher than the response timeout. - if state.Height == event.Height && state.PendingRequestsNum == 0 { state.State = ConsensusMode } - return state, msg, timeout, error - - default: - error = "Received unknown event type!" - return state, msg, timeout, error - } - } -} -``` - -``` go -func createBlockResponseMessage(state ControllerState, event BlockRequest) MessageToSend { - msgToSend = nil - if _, ok := state.PeerMap[event.PeerID]; !ok { peerStats = PeerStats{-1, -1} } - if state.Executor.ContainsBlockWithHeight(event.Height) && event.Height > peerStats.Height { - peerStats = event.Height - msg = BlockResponseMessage{ - Height: event.Height, - Block: state.Executor.getBlock(eventHeight), - Commit: state.Executor.getCommit(eventHeight), - PeerID: event.PeerID, - CurrentHeight: state.Height - 1, - } - msgToSend = MessageToSend { event.PeerID, msg } - } - state.PeerMap[event.PeerID] = peerStats - return msgToSend -} -``` - -``` go -func handleEventStatusResponse(event EventStatusResponse, state ControllerState) (ControllerState, MessageToSend, TimeoutTrigger, Error) { - if _, ok := state.PeerMap[event.PeerID]; !ok { - peerStats = PeerStats{ -1, -1 } - } else { - peerStats = state.PeerMap[event.PeerID] - } - - if event.Height > peerStats.Height { peerStats.Height = event.Height } - // if there are no pending requests for this peer, try to send him a request for block - if peerStats.PendingRequest == -1 { - msg = createBlockRequestMessages(state, event.PeerID, peerStats.Height) - // msg is nil if no request for block can be made to a peer at this point in time - if msg != nil { - peerStats.PendingRequests = msg.Height - state.PendingRequestsNum++ - // when a request for a block is sent to a peer, a response timeout is triggered. If no corresponding block is sent by the peer - // during response timeout period, then the peer is considered faulty and is removed from the peer set. - timeout = ResponseTimeoutTrigger{ msg.PeerID, msg.Height, PeerTimeout } - } else if state.PendingRequestsNum == 0 { - // if there are no pending requests and no new request can be placed to the peer, termination timeout is triggered. - // If termination timeout expires and we are still at the same height and there are no pending requests, the "fast-sync" - // mode is finished and we switch to `ModeConsensus`. - timeout = TerminationTimeoutTrigger{ state.Height, TerminationTimeout } - } - } - state.PeerMap[event.PeerID] = peerStats - return state, msg, timeout, error -} -``` - -``` go -func handleEventRemovePeer(event EventRemovePeer, state ControllerState) (ControllerState, MessageToSend, TimeoutTrigger, Error) { - if _, ok := state.PeerMap[event.PeerID]; ok { - pendingRequest = state.PeerMap[event.PeerID].PendingRequest - // if a peer is removed from the peer set, its pending request is declared failed and added to the `FailedRequests` list - // so it can be retried. - if pendingRequest != -1 { - add(state.FailedRequests, pendingRequest) - } - state.PendingRequestsNum-- - delete(state.PeerMap, event.PeerID) - // if the peer set is empty after removal of this peer then termination timeout is triggered. - if state.PeerMap.isEmpty() { - timeout = TerminationTimeoutTrigger{ state.Height, TerminationTimeout } - } - } else { error = "Removing unknown peer!" } - return state, msg, timeout, error -``` - -``` go -func handleEventBlockResponse(event EventBlockResponse, state ControllerState) (ControllerState, MessageToSend, TimeoutTrigger, Error) - if state.PeerMap[event.PeerID] { - peerStats = state.PeerMap[event.PeerID] - // when expected block arrives from a peer, it is added to the store so it can be verified and if correct executed after. - if peerStats.PendingRequest == event.Height { - peerStats.PendingRequest = -1 - state.PendingRequestsNum-- - if event.PeerHeight > peerStats.Height { peerStats.Height = event.PeerHeight } - state.Store[event.Height] = BlockInfo{ event.Block, event.Commit, event.PeerID } - // blocks are verified sequentially so adding a block to the store does not mean that it will be immediately verified - // as some of the previous blocks might be missing. - state = verifyBlocks(state) // it can lead to event.PeerID being removed from peer list - if _, ok := state.PeerMap[event.PeerID]; ok { - // we try to identify new request for a block that can be asked to the peer - msg = createBlockRequestMessage(state, event.PeerID, peerStats.Height) - if msg != nil { - peerStats.PendingRequests = msg.Height - state.PendingRequestsNum++ - // if request for block is made, response timeout is triggered - timeout = ResponseTimeoutTrigger{ msg.PeerID, msg.Height, PeerTimeout } - } else if state.PeerMap.isEmpty() || state.PendingRequestsNum == 0 { - // if the peer map is empty (the peer can be removed as block verification failed) or there are no pending requests - // termination timeout is triggered. - timeout = TerminationTimeoutTrigger{ state.Height, TerminationTimeout } - } - } - } else { error = "Received Block from wrong peer!" } - } else { error = "Received Block from unknown peer!" } - - state.PeerMap[event.PeerID] = peerStats - return state, msg, timeout, error -} -``` - -``` go -func handleEventResponseTimeout(event, state) { - if _, ok := state.PeerMap[event.PeerID]; ok { - peerStats = state.PeerMap[event.PeerID] - // if a response timeout expires and the peer hasn't delivered the block, the peer is removed from the peer list and - // the request is added to the `FailedRequests` so the block can be downloaded from other peer - if peerStats.PendingRequest == event.Height { - add(state.FailedRequests, pendingRequest) - delete(state.PeerMap, event.PeerID) - state.PendingRequestsNum-- - // if peer set is empty, then termination timeout is triggered - if state.PeerMap.isEmpty() { - timeout = TimeoutTrigger{ state.Height, TerminationTimeout } - } - } - } - return state, msg, timeout, error -} -``` - -``` go -func createBlockRequestMessage(state ControllerState, peerID ID, peerHeight int64) MessageToSend { - msg = nil - blockHeight = -1 - r = find request in state.FailedRequests such that r <= peerHeight // returns `nil` if there are no such request - // if there is a height in failed requests that can be downloaded from the peer send request to it - if r != nil { - blockNumber = r - delete(state.FailedRequests, r) - } else if state.MaxRequestPending < peerHeight { - // if height of the maximum pending request is smaller than peer height, then ask peer for next block - state.MaxRequestPending++ - blockHeight = state.MaxRequestPending // increment state.MaxRequestPending and then return the new value - } - - if blockHeight > -1 { msg = MessageToSend { peerID, MessageBlockRequest { blockHeight } } - return msg -} -``` - -``` go -func verifyBlocks(state State) State { - done = false - for !done { - block = state.Store[height] - if block != nil { - verified = verify block.Block using block.Commit // return `true` is verification succeed, 'false` otherwise - - if verified { - block.Execute() // executing block is costly operation so it might make sense executing asynchronously - state.Height++ - } else { - // if block verification failed, then it is added to `FailedRequests` and the peer is removed from the peer set - add(state.FailedRequests, height) - state.Store[height] = nil - if _, ok := state.PeerMap[block.PeerID]; ok { - pendingRequest = state.PeerMap[block.PeerID].PendingRequest - // if there is a pending request sent to the peer that is just to be removed from the peer set, add it to `FailedRequests` - if pendingRequest != -1 { - add(state.FailedRequests, pendingRequest) - state.PendingRequestsNum-- - } - delete(state.PeerMap, event.PeerID) - } - done = true - } - } else { done = true } - } - return state -} -``` - -In the proposed architecture `Controller` is not active task, i.e., it is being called by the `Executor`. Depending on -the return values returned by `Controller`,`Executor` will send a message to some peer (`msg` != nil), trigger a -timeout (`timeout` != nil) or deal with errors (`error` != nil). -In case a timeout is triggered, it will provide as an input to `Controller` the corresponding timeout event once -timeout expires. - - -## Status - -Draft. - -## Consequences - -### Positive - -- isolated implementation of the algorithm -- improved testability - simpler to prove correctness -- clearer separation of concerns - easier to reason - -### Negative - -### Neutral diff --git a/docs/architecture/adr-041-proposer-selection-via-abci.md b/docs/architecture/adr-041-proposer-selection-via-abci.md deleted file mode 100644 index 58bf20de3..000000000 --- a/docs/architecture/adr-041-proposer-selection-via-abci.md +++ /dev/null @@ -1,29 +0,0 @@ -# ADR 041: Application should be in charge of validator set - -## Changelog - - -## Context - -Currently Tendermint is in charge of validator set and proposer selection. Application can only update the validator set changes at EndBlock time. -To support Light Client, application should make sure at least 2/3 of validator are same at each round. - -Application should have full control on validator set changes and proposer selection. In each round Application can provide the list of validators for next rounds in order with their power. The proposer is the first in the list, in case the proposer is offline, the next one can propose the proposal and so on. - -## Decision - -## Status - -## Consequences - -Tendermint is no more in charge of validator set and its changes. The Application should provide the correct information. -However Tendermint can provide psedo-randomness algorithm to help application for selecting proposer in each round. - -### Positive - -### Negative - -### Neutral - -## References - diff --git a/docs/architecture/adr-042-state-sync.md b/docs/architecture/adr-042-state-sync.md deleted file mode 100644 index 72d71ae22..000000000 --- a/docs/architecture/adr-042-state-sync.md +++ /dev/null @@ -1,235 +0,0 @@ -# ADR 042: State Sync Design - -## Changelog - -2019-06-27: Init by EB -2019-07-04: Follow up by brapse - -## Context -StateSync is a feature which would allow a new node to receive a -snapshot of the application state without downloading blocks or going -through consensus. Once downloaded, the node could switch to FastSync -and eventually participate in consensus. The goal of StateSync is to -facilitate setting up a new node as quickly as possible. - -## Considerations -Because Tendermint doesn't know anything about the application state, -StateSync will broker messages between nodes and through -the ABCI to an opaque applicaton. The implementation will have multiple -touch points on both the tendermint code base and ABCI application. - -* A StateSync reactor to facilitate peer communication - Tendermint -* A Set of ABCI messages to transmit application state to the reactor - Tendermint -* A Set of MultiStore APIs for exposing snapshot data to the ABCI - ABCI application -* A Storage format with validation and performance considerations - ABCI application - -### Implementation Properties -Beyond the approach, any implementation of StateSync can be evaluated -across different criteria: - -* Speed: Expected throughput of producing and consuming snapshots -* Safety: Cost of pushing invalid snapshots to a node -* Liveness: Cost of preventing a node from receiving/constructing a snapshot -* Effort: How much effort does an implementation require - -### Implementation Question -* What is the format of a snapshot - * Complete snapshot - * Ordered IAVL key ranges - * Compressed individually chunks which can be validated -* How is data validated - * Trust a peer with it's data blindly - * Trust a majority of peers - * Use light client validation to validate each chunk against consensus - produced merkle tree root -* What are the performance characteristics - * Random vs sequential reads - * How parallelizeable is the scheduling algorithm - -### Proposals -Broadly speaking there are two approaches to this problem which have had -varying degrees of discussion and progress. These approach can be -summarized as: - -**Lazy:** Where snapshots are produced dynamically at request time. This -solution would use the existing data structure. -**Eager:** Where snapshots are produced periodically and served from disk at -request time. This solution would create an auxiliary data structure -optimized for batch read/writes. - -Additionally the propsosals tend to vary on how they provide safety -properties. - -**LightClient** Where a client can aquire the merkle root from the block -headers synchronized from a trusted validator set. Subsets of the application state, -called chunks can therefore be validated on receipt to ensure each chunk -is part of the merkle root. - -**Majority of Peers** Where manifests of chunks along with checksums are -downloaded and compared against versions provided by a majority of -peers. - -#### Lazy StateSync -An initial specification was published by Alexis Sellier. -In this design, the state has a given `size` of primitive elements (like -keys or nodes), each element is assigned a number from 0 to `size-1`, -and chunks consists of a range of such elements. Ackratos raised -[some concerns](https://docs.google.com/document/d/1npGTAa1qxe8EQZ1wG0a0Sip9t5oX2vYZNUDwr_LVRR4/edit) -about this design, somewhat specific to the IAVL tree, and mainly concerning -performance of random reads and of iterating through the tree to determine element numbers -(ie. elements aren't indexed by the element number). - -An alternative design was suggested by Jae Kwon in -[#3639](https://github.com/tendermint/tendermint/issues/3639) where chunking -happens lazily and in a dynamic way: nodes request key ranges from their peers, -and peers respond with some subset of the -requested range and with notes on how to request the rest in parallel from other -peers. Unlike chunk numbers, keys can be verified directly. And if some keys in the -range are ommitted, proofs for the range will fail to verify. -This way a node can start by requesting the entire tree from one peer, -and that peer can respond with say the first few keys, and the ranges to request -from other peers. - -Additionally, per chunk validation tends to come more naturally to the -Lazy approach since it tends to use the existing structure of the tree -(ie. keys or nodes) rather than state-sync specific chunks. Such a -design for tendermint was originally tracked in -[#828](https://github.com/tendermint/tendermint/issues/828). - -#### Eager StateSync -Warp Sync as implemented in OpenEthereum to rapidly -download both blocks and state snapshots from peers. Data is carved into ~4MB -chunks and snappy compressed. Hashes of snappy compressed chunks are stored in a -manifest file which co-ordinates the state-sync. Obtaining a correct manifest -file seems to require an honest majority of peers. This means you may not find -out the state is incorrect until you download the whole thing and compare it -with a verified block header. - -A similar solution was implemented by Binance in -[#3594](https://github.com/tendermint/tendermint/pull/3594) -based on their initial implementation in -[PR #3243](https://github.com/tendermint/tendermint/pull/3243) -and [some learnings](https://docs.google.com/document/d/1npGTAa1qxe8EQZ1wG0a0Sip9t5oX2vYZNUDwr_LVRR4/edit). -Note this still requires the honest majority peer assumption. - -As an eager protocol, warp-sync can efficiently compress larger, more -predicatable chunks once per snapshot and service many new peers. By -comparison lazy chunkers would have to compress each chunk at request -time. - -### Analysis of Lazy vs Eager -Lazy vs Eager have more in common than they differ. They all require -reactors on the tendermint side, a set of ABCI messages and a method for -serializing/deserializing snapshots facilitated by a SnapshotFormat. - -The biggest difference between Lazy and Eager proposals is in the -read/write patterns necessitated by serving a snapshot chunk. -Specifically, Lazy State Sync performs random reads to the underlying data -structure while Eager can optimize for sequential reads. - -This distinctin between approaches was demonstrated by Binance's -[ackratos](https://github.com/ackratos) in their implementation of [Lazy -State sync](https://github.com/tendermint/tendermint/pull/3243), The -[analysis](https://docs.google.com/document/d/1npGTAa1qxe8EQZ1wG0a0Sip9t5oX2vYZNUDwr_LVRR4/) -of the performance, and follow up implementation of [Warp -Sync](http://github.com/tendermint/tendermint/pull/3594). - -#### Compairing Security Models -There are several different security models which have been -discussed/proposed in the past but generally fall into two categories. - -Light client validation: In which the node receiving data is expected to -first perform a light client sync and have all the nessesary block -headers. Within the trusted block header (trusted in terms of from a -validator set subject to [weak -subjectivity](https://github.com/tendermint/tendermint/pull/3795)) and -can compare any subset of keys called a chunk against the merkle root. -The advantage of light client validation is that the block headers are -signed by validators which have something to lose for malicious -behaviour. If a validator were to provide an invalid proof, they can be -slashed. - -Majority of peer validation: A manifest file containing a list of chunks -along with checksums of each chunk is downloaded from a -trusted source. That source can be a community resource similar to -[sum.golang.org](https://sum.golang.org) or downloaded from the majority -of peers. One disadantage of the majority of peer security model is the -vuliberability to eclipse attacks in which a malicious users looks to -saturate a target node's peer list and produce a manufactured picture of -majority. - -A third option would be to include snapshot related data in the -block header. This could include the manifest with related checksums and be -secured through consensus. One challenge of this approach is to -ensure that creating snapshots does not put undo burden on block -propsers by synchronizing snapshot creation and block creation. One -approach to minimizing the burden is for snapshots for height -`H` to be included in block `H+n` where `n` is some `n` block away, -giving the block propser enough time to complete the snapshot -asynchronousy. - -## Proposal: Eager StateSync With Per Chunk Light Client Validation -The conclusion after some concideration of the advantages/disadvances of -eager/lazy and different security models is to produce a state sync -which eagerly produces snapshots and uses light client validation. This -approach has the performance advantages of pre-computing efficient -snapshots which can streamed to new nodes on demand using sequential IO. -Secondly, by using light client validation we cna validate each chunk on -receipt and avoid the potential eclipse attack of majority of peer based -security. - -### Implementation -Tendermint is responsible for downloading and verifying chunks of -AppState from peers. ABCI Application is responsible for taking -AppStateChunk objects from TM and constructing a valid state tree whose -root corresponds with the AppHash of syncing block. In particular we -will need implement: - -* Build new StateSync reactor brokers message transmission between the peers - and the ABCI application -* A set of ABCI Messages -* Design SnapshotFormat as an interface which can: - * validate chunks - * read/write chunks from file - * read/write chunks to/from application state store - * convert manifests into chunkRequest ABCI messages -* Implement SnapshotFormat for cosmos-hub with concrete implementation for: - * read/write chunks in a way which can be: - * parallelized across peers - * validated on receipt - * read/write to/from IAVL+ tree - -![StateSync Architecture Diagram](img/state-sync.png) - -## Implementation Path -* Create StateSync reactor based on [#3753](https://github.com/tendermint/tendermint/pull/3753) -* Design SnapshotFormat with an eye towards cosmos-hub implementation -* ABCI message to send/receive SnapshotFormat -* IAVL+ changes to support SnapshotFormat -* Deliver Warp sync (no chunk validation) -* light client implementation for weak subjectivity -* Deliver StateSync with chunk validation - -## Status - -Proposed - -## Concequences - -### Neutral - -### Positive -* Safe & performant state sync design substantiated with real world implementation experience -* General interfaces allowing application specific innovation -* Parallizable implementation trajectory with reasonable engineering effort - -### Negative -* Static Scheduling lacks opportunity for real time chunk availability optimizations - -## References -[sync: Sync current state without full replay for Applications](https://github.com/tendermint/tendermint/issues/828) - original issue -[tendermint state sync proposal 2](https://docs.google.com/document/d/1npGTAa1qxe8EQZ1wG0a0Sip9t5oX2vYZNUDwr_LVRR4/edit) - ackratos proposal -[proposal 2 implementation](https://github.com/tendermint/tendermint/pull/3243) - ackratos implementation -[WIP General/Lazy State-Sync pseudo-spec](https://github.com/tendermint/tendermint/issues/3639) - Jae Proposal -[Warp Sync Implementation](https://github.com/tendermint/tendermint/pull/3594) - ackratos -[Chunk Proposal](https://github.com/tendermint/tendermint/pull/3799) - Bucky proposed diff --git a/docs/architecture/adr-043-blockchain-riri-org.md b/docs/architecture/adr-043-blockchain-riri-org.md deleted file mode 100644 index 19c2334c3..000000000 --- a/docs/architecture/adr-043-blockchain-riri-org.md +++ /dev/null @@ -1,404 +0,0 @@ -# ADR 043: Blockhchain Reactor Riri-Org - -## Changelog - -- 18-06-2019: Initial draft -- 08-07-2019: Reviewed -- 29-11-2019: Implemented -- 14-02-2020: Updated with the implementation details - -## Context - -The blockchain reactor is responsible for two high level processes:sending/receiving blocks from peers and FastSync-ing blocks to catch upnode who is far behind. The goal of [ADR-40](https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-040-blockchain-reactor-refactor.md) was to refactor these two processes by separating business logic currently wrapped up in go-channels into pure `handle*` functions. While the ADR specified what the final form of the reactor might look like it lacked guidance on intermediary steps to get there. -The following diagram illustrates the state of the [blockchain-reorg](https://github.com/tendermint/tendermint/pull/3561) reactor which will be referred to as `v1`. - -![v1 Blockchain Reactor Architecture -Diagram](https://github.com/tendermint/tendermint/blob/f9e556481654a24aeb689bdadaf5eab3ccd66829/docs/architecture/img/blockchain-reactor-v1.png) - -While `v1` of the blockchain reactor has shown significant improvements in terms of simplifying the concurrency model, the current PR has run into few roadblocks. - -- The current PR large and difficult to review. -- Block gossiping and fast sync processes are highly coupled to the shared `Pool` data structure. -- Peer communication is spread over multiple components creating complex dependency graph which must be mocked out during testing. -- Timeouts modeled as stateful tickers introduce non-determinism in tests - -This ADR is meant to specify the missing components and control necessary to achieve [ADR-40](https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-040-blockchain-reactor-refactor.md). - -## Decision - -Partition the responsibilities of the blockchain reactor into a set of components which communicate exclusively with events. Events will contain timestamps allowing each component to track time as internal state. The internal state will be mutated by a set of `handle*` which will produce event(s). The integration between components will happen in the reactor and reactor tests will then become integration tests between components. This design will be known as `v2`. - -![v2 Blockchain Reactor Architecture -Diagram](https://github.com/tendermint/tendermint/blob/584e67ac3fac220c5c3e0652e3582eca8231e814/docs/architecture/img/blockchain-reactor-v2.png) - -### Fast Sync Related Communication Channels - -The diagram below shows the fast sync routines and the types of channels and queues used to communicate with each other. -In addition the per reactor channels used by the sendRoutine to send messages over the Peer MConnection are shown. - -![v2 Blockchain Channels and Queues -Diagram](https://github.com/tendermint/tendermint/blob/5cf570690f989646fb3b615b734da503f038891f/docs/architecture/img/blockchain-v2-channels.png) - -### Reactor changes in detail - -The reactor will include a demultiplexing routine which will send each message to each sub routine for independent processing. Each sub routine will then select the messages it's interested in and call the handle specific function specified in [ADR-40](https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-040-blockchain-reactor-refactor.md). The demuxRoutine acts as "pacemaker" setting the time in which events are expected to be handled. - -```go -func demuxRoutine(msgs, scheduleMsgs, processorMsgs, ioMsgs) { - timer := time.NewTicker(interval) - for { - select { - case <-timer.C: - now := evTimeCheck{time.Now()} - schedulerMsgs <- now - processorMsgs <- now - ioMsgs <- now - case msg:= <- msgs: - msg.time = time.Now() - // These channels should produce backpressure before - // being full to avoid starving each other - schedulerMsgs <- msg - processorMsgs <- msg - ioMesgs <- msg - if msg == stop { - break; - } - } - } -} - -func processRoutine(input chan Message, output chan Message) { - processor := NewProcessor(..) - for { - msg := <- input - switch msg := msg.(type) { - case bcBlockRequestMessage: - output <- processor.handleBlockRequest(msg)) - ... - case stop: - processor.stop() - break; - } -} - -func scheduleRoutine(input chan Message, output chan Message) { - schelduer = NewScheduler(...) - for { - msg := <-msgs - switch msg := input.(type) { - case bcBlockResponseMessage: - output <- scheduler.handleBlockResponse(msg) - ... - case stop: - schedule.stop() - break; - } - } -} -``` - -## Lifecycle management - -A set of routines for individual processes allow processes to run in parallel with clear lifecycle management. `Start`, `Stop`, and `AddPeer` hooks currently present in the reactor will delegate to the sub-routines allowing them to manage internal state independent without further coupling to the reactor. - -```go -func (r *BlockChainReactor) Start() { - r.msgs := make(chan Message, maxInFlight) - schedulerMsgs := make(chan Message) - processorMsgs := make(chan Message) - ioMsgs := make(chan Message) - - go processorRoutine(processorMsgs, r.msgs) - go scheduleRoutine(schedulerMsgs, r.msgs) - go ioRoutine(ioMsgs, r.msgs) - ... -} - -func (bcR *BlockchainReactor) Receive(...) { - ... - r.msgs <- msg - ... -} - -func (r *BlockchainReactor) Stop() { - ... - r.msgs <- stop - ... -} - -... -func (r *BlockchainReactor) Stop() { - ... - r.msgs <- stop - ... -} -... - -func (r *BlockchainReactor) AddPeer(peer p2p.Peer) { - ... - r.msgs <- bcAddPeerEv{peer.ID} - ... -} - -``` - -## IO handling - -An io handling routine within the reactor will isolate peer communication. Message going through the ioRoutine will usually be one way, using `p2p` APIs. In the case in which the `p2p` API such as `trySend` return errors, the ioRoutine can funnel those message back to the demuxRoutine for distribution to the other routines. For instance errors from the ioRoutine can be consumed by the scheduler to inform better peer selection implementations. - -```go -func (r *BlockchainReacor) ioRoutine(ioMesgs chan Message, outMsgs chan Message) { - ... - for { - msg := <-ioMsgs - switch msg := msg.(type) { - case scBlockRequestMessage: - queued := r.sendBlockRequestToPeer(...) - if queued { - outMsgs <- ioSendQueued{...} - } - case scStatusRequestMessage - r.sendStatusRequestToPeer(...) - case bcPeerError - r.Swtich.StopPeerForError(msg.src) - ... - ... - case bcFinished - break; - } - } -} - -``` - -### Processor Internals - -The processor is responsible for ordering, verifying and executing blocks. The Processor will maintain an internal cursor `height` refering to the last processed block. As a set of blocks arrive unordered, the Processor will check if it has `height+1` necessary to process the next block. The processor also maintains the map `blockPeers` of peers to height, to keep track of which peer provided the block at `height`. `blockPeers` can be used in`handleRemovePeer(...)` to reschedule all unprocessed blocks provided by a peer who has errored. - -```go -type Processor struct { - height int64 // the height cursor - state ... - blocks [height]*Block // keep a set of blocks in memory until they are processed - blockPeers [height]PeerID // keep track of which heights came from which peerID - lastTouch timestamp -} - -func (proc *Processor) handleBlockResponse(peerID, block) { - if block.height <= height || block[block.height] { - } else if blocks[block.height] { - return errDuplicateBlock{} - } else { - blocks[block.height] = block - } - - if blocks[height] && blocks[height+1] { - ... = state.Validators.VerifyCommit(...) - ... = store.SaveBlock(...) - state, err = blockExec.ApplyBlock(...) - ... - if err == nil { - delete blocks[height] - height++ - lastTouch = msg.time - return pcBlockProcessed{height-1} - } else { - ... // Delete all unprocessed block from the peer - return pcBlockProcessError{peerID, height} - } - } -} - -func (proc *Processor) handleRemovePeer(peerID) { - events = [] - // Delete all unprocessed blocks from peerID - for i = height; i < len(blocks); i++ { - if blockPeers[i] == peerID { - events = append(events, pcBlockReschedule{height}) - - delete block[height] - } - } - return events -} - -func handleTimeCheckEv(time) { - if time - lastTouch > timeout { - // Timeout the processor - ... - } -} -``` - -## Schedule - -The Schedule maintains the internal state used for scheduling blockRequestMessages based on some scheduling algorithm. The schedule needs to maintain state on: - -- The state `blockState` of every block seem up to height of maxHeight -- The set of peers and their peer state `peerState` -- which peers have which blocks -- which blocks have been requested from which peers - -```go -type blockState int - -const ( - blockStateNew = iota - blockStatePending, - blockStateReceived, - blockStateProcessed -) - -type schedule { - // a list of blocks in which blockState - blockStates map[height]blockState - - // a map of which blocks are available from which peers - blockPeers map[height]map[p2p.ID]scPeer - - // a map of peerID to schedule specific peer struct `scPeer` - peers map[p2p.ID]scPeer - - // a map of heights to the peer we are waiting for a response from - pending map[height]scPeer - - targetPending int // the number of blocks we want in blockStatePending - targetReceived int // the number of blocks we want in blockStateReceived - - peerTimeout int - peerMinSpeed int -} - -func (sc *schedule) numBlockInState(state blockState) uint32 { - num := 0 - for i := sc.minHeight(); i <= sc.maxHeight(); i++ { - if sc.blockState[i] == state { - num++ - } - } - return num -} - - -func (sc *schedule) popSchedule(maxRequest int) []scBlockRequestMessage { - // We only want to schedule requests such that we have less than sc.targetPending and sc.targetReceived - // This ensures we don't saturate the network or flood the processor with unprocessed blocks - todo := min(sc.targetPending - sc.numBlockInState(blockStatePending), sc.numBlockInState(blockStateReceived)) - events := []scBlockRequestMessage{} - for i := sc.minHeight(); i < sc.maxMaxHeight(); i++ { - if todo == 0 { - break - } - if blockStates[i] == blockStateNew { - peer = sc.selectPeer(blockPeers[i]) - sc.blockStates[i] = blockStatePending - sc.pending[i] = peer - events = append(events, scBlockRequestMessage{peerID: peer.peerID, height: i}) - todo-- - } - } - return events -} -... - -type scPeer struct { - peerID p2p.ID - numOustandingRequest int - lastTouched time.Time - monitor flow.Monitor -} - -``` - -# Scheduler - -The scheduler is configured to maintain a target `n` of in flight -messages and will use feedback from `_blockResponseMessage`, -`_statusResponseMessage` and `_peerError` produce an optimal assignment -of scBlockRequestMessage at each `timeCheckEv`. - -``` - -func handleStatusResponse(peerID, height, time) { - schedule.touchPeer(peerID, time) - schedule.setPeerHeight(peerID, height) -} - -func handleBlockResponseMessage(peerID, height, block, time) { - schedule.touchPeer(peerID, time) - schedule.markReceived(peerID, height, size(block)) -} - -func handleNoBlockResponseMessage(peerID, height, time) { - schedule.touchPeer(peerID, time) - // reschedule that block, punish peer... - ... -} - -func handlePeerError(peerID) { - // Remove the peer, reschedule the requests - ... -} - -func handleTimeCheckEv(time) { - // clean peer list - - events = [] - for peerID := range schedule.peersNotTouchedSince(time) { - pending = schedule.pendingFrom(peerID) - schedule.setPeerState(peerID, timedout) - schedule.resetBlocks(pending) - events = append(events, peerTimeout{peerID}) - } - - events = append(events, schedule.popSchedule()) - - return events -} -``` - -## Peer - -The Peer Stores per peer state based on messages received by the scheduler. - -```go -type Peer struct { - lastTouched timestamp - lastDownloaded timestamp - pending map[height]struct{} - height height // max height for the peer - state { - pending, // we know the peer but not the height - active, // we know the height - timeout // the peer has timed out - } -} -``` - -## Status - -Implemented - -## Consequences - -### Positive - -- Test become deterministic -- Simulation becomes a-termporal: no need wait for a wall-time timeout -- Peer Selection can be independently tested/simulated -- Develop a general approach to refactoring reactors - -### Negative - -### Neutral - -### Implementation Path - -- Implement the scheduler, test the scheduler, review the rescheduler -- Implement the processor, test the processor, review the processor -- Implement the demuxer, write integration test, review integration tests - -## References - -- [ADR-40](https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-040-blockchain-reactor-refactor.md): The original blockchain reactor re-org proposal -- [Blockchain re-org](https://github.com/tendermint/tendermint/pull/3561): The current blockchain reactor re-org implementation (v1) diff --git a/docs/architecture/adr-044-lite-client-with-weak-subjectivity.md b/docs/architecture/adr-044-lite-client-with-weak-subjectivity.md deleted file mode 100644 index 00137e64a..000000000 --- a/docs/architecture/adr-044-lite-client-with-weak-subjectivity.md +++ /dev/null @@ -1,141 +0,0 @@ -# ADR 044: Lite Client with Weak Subjectivity - -## Changelog -* 13-07-2019: Initial draft -* 14-08-2019: Address cwgoes comments - -## Context - -The concept of light clients was introduced in the Bitcoin white paper. It -describes a watcher of distributed consensus process that only validates the -consensus algorithm and not the state machine transactions within. - -Tendermint light clients allow bandwidth & compute-constrained devices, such as smartphones, low-power embedded chips, or other blockchains to -efficiently verify the consensus of a Tendermint blockchain. This forms the -basis of safe and efficient state synchronization for new network nodes and -inter-blockchain communication (where a light client of one Tendermint instance -runs in another chain's state machine). - -In a network that is expected to reliably punish validators for misbehavior -by slashing bonded stake and where the validator set changes -infrequently, clients can take advantage of this assumption to safely -synchronize a lite client without downloading the intervening headers. - -Light clients (and full nodes) operating in the Proof Of Stake context need a -trusted block height from a trusted source that is no older than 1 unbonding -window plus a configurable evidence submission synchrony bound. This is called “weak subjectivity”. - -Weak subjectivity is required in Proof of Stake blockchains because it is -costless for an attacker to buy up voting keys that are no longer bonded and -fork the network at some point in its prior history. See Vitalik’s post at -[Proof of Stake: How I Learned to Love Weak -Subjectivity](https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/). - -Currently, Tendermint provides a lite client implementation in the -[light](https://github.com/tendermint/tendermint/tree/master/light) package. This -lite client implements a bisection algorithm that tries to use a binary search -to find the minimum number of block headers where the validator set voting -power changes are less than < 1/3rd. This interface does not support weak -subjectivity at this time. The Cosmos SDK also does not support counterfactual -slashing, nor does the lite client have any capacity to report evidence making -these systems *theoretically unsafe*. - -NOTE: Tendermint provides a somewhat different (stronger) light client model -than Bitcoin under eclipse, since the eclipsing node(s) can only fool the light -client if they have two-thirds of the private keys from the last root-of-trust. - -## Decision - -### The Weak Subjectivity Interface - -Add the weak subjectivity interface for when a new light client connects to the -network or when a light client that has been offline for longer than the -unbonding period connects to the network. Specifically, the node needs to -initialize the following structure before syncing from user input: - -``` -type TrustOptions struct { - // Required: only trust commits up to this old. - // Should be equal to the unbonding period minus some delta for evidence reporting. - TrustPeriod time.Duration `json:"trust-period"` - - // Option 1: TrustHeight and TrustHash can both be provided - // to force the trusting of a particular height and hash. - // If the latest trusted height/hash is more recent, then this option is - // ignored. - TrustHeight int64 `json:"trust-height"` - TrustHash []byte `json:"trust-hash"` - - // Option 2: Callback can be set to implement a confirmation - // step if the trust store is uninitialized, or expired. - Callback func(height int64, hash []byte) error -} -``` - -The expectation is the user will get this information from a trusted source -like a validator, a friend, or a secure website. A more user friendly -solution with trust tradeoffs is that we establish an https based protocol with -a default end point that populates this information. Also an on-chain registry -of roots-of-trust (e.g. on the Cosmos Hub) seems likely in the future. - -### Linear Verification - -The linear verification algorithm requires downloading all headers -between the `TrustHeight` and the `LatestHeight`. The lite client downloads the -full header for the provided `TrustHeight` and then proceeds to download `N+1` -headers and applies the [Tendermint validation -rules](https://docs.tendermint.com/master/spec/light-client/verification/) -to each block. - -### Bisecting Verification - -Bisecting Verification is a more bandwidth and compute intensive mechanism that -in the most optimistic case requires a light client to only download two block -headers to come into synchronization. - -The bisection algorithm proceeds in the following fashion. The client downloads -and verifies the full block header for `TrustHeight` and then fetches -`LatestHeight` blocker header. The client then verifies the `LatestHeight` -header. Finally the client attempts to verify the `LatestHeight` header with -voting powers taken from `NextValidatorSet` in the `TrustHeight` header. This -verification will succeed if the validators from `TrustHeight` still have > 2/3 -+1 of voting power in the `LatestHeight`. If this succeeds, the client is fully -synchronized. If this fails, then following Bisection Algorithm should be -executed. - -The Client tries to download the block at the mid-point block between -`LatestHeight` and `TrustHeight` and attempts that same algorithm as above -using `MidPointHeight` instead of `LatestHeight` and a different threshold - -1/3 +1 of voting power for *non-adjacent headers*. In the case the of failure, -recursively perform the `MidPoint` verification until success then start over -with an updated `NextValidatorSet` and `TrustHeight`. - -If the client encounters a forged header, it should submit the header along -with some other intermediate headers as the evidence of misbehavior to other -full nodes. After that, it can retry the bisection using another full node. An -optimal client will cache trusted headers from the previous run to minimize -network usage. - ---- - -Check out the formal specification -[here](https://github.com/tendermint/spec/tree/master/spec/light-client). - -## Status - -Implemented - -## Consequences - -### Positive - -* light client which is safe to use (it can go offline, but not for too long) - -### Negative - -* complexity of bisection - -### Neutral - -* social consensus can be prone to errors (for cases where a new light client - joins a network or it has been offline for too long) diff --git a/docs/architecture/adr-045-abci-evidence.md b/docs/architecture/adr-045-abci-evidence.md deleted file mode 100644 index 257564021..000000000 --- a/docs/architecture/adr-045-abci-evidence.md +++ /dev/null @@ -1,140 +0,0 @@ -# ADR 45 - ABCI Evidence Handling - -## Changelog -* 21-09-2019: Initial draft - -## Context - -Evidence is a distinct component in a Tendermint block and has it's own reactor -for high priority gossipping. Currently, Tendermint supports only a single form of evidence, an explicit -equivocation, where a validator signs conflicting blocks at the same -height/round. It is detected in real-time in the consensus reactor, and gossiped -through the evidence reactor. Evidence can also be submitted through the RPC. - -Currently, Tendermint does not gracefully handle a fork on the main chain. -If a fork is detected, the node panics. At this point manual intervention and -social consensus are required to reconfigure. We'd like to do something more -graceful here, but that's for another day. - -It's possible to fool lite clients without there being a fork on the -main chain - so called Fork-Lite. See the -[fork accountability](https://docs.tendermint.com/master/spec/light-client/accountability/) -document for more details. For a sequential lite client, this can happen via -equivocation or amnesia attacks. For a skipping lite client this can also happen -via lunatic validator attacks. There must be some way for applications to punish -all forms of misbehaviour. - -The essential question is whether Tendermint should manage the evidence -verification, or whether it should treat evidence more like a transaction (ie. -arbitrary bytes) and let the application handle it (including all the signature -checking). - -Currently, evidence verification is handled by Tendermint. Once committed, -[evidence is passed over -ABCI](https://github.com/tendermint/tendermint/blob/master/proto/tendermint/abci/types.proto#L354) -in BeginBlock in a reduced form that includes only -the type of evidence, its height and timestamp, the validator it's from, and the -total voting power of the validator set at the height. The app trusts Tendermint -to perform the evidence verification, as the ABCI evidence does not contain the -signatures and additional data for the app to verify itself. - -Arguments in favor of leaving evidence handling in Tendermint: - -1) Attacks on full nodes must be detectable by full nodes in real time, ie. within the consensus reactor. - So at the very least, any evidence involved in something that could fool a full - node must be handled natively by Tendermint as there would otherwise be no way - for the ABCI app to detect it (ie. we don't send all votes we receive during - consensus to the app ... ). - -2) Amensia attacks can not be easily detected - they require an interactive - protocol among all the validators to submit justification for their past - votes. Our best notion of [how to do this - currently](https://github.com/tendermint/tendermint/blob/c67154232ca8be8f5c21dff65d154127adc4f7bb/docs/spec/consensus/fork-detection.md) - is via a centralized - monitor service that is trusted for liveness to aggregate data from - current and past validators, but which produces a proof of misbehaviour (ie. - via amnesia) that can be verified by anyone, including the blockchain. - Validators must submit all the votes they saw for the relevant consensus - height to justify their precommits. This is quite specific to the Tendermint - protocol and may change if the protocol is upgraded. Hence it would be awkward - to co-ordinate this from the app. - -3) Evidence gossipping is similar to tx gossipping, but it should be higher - priority. Since the mempool does not support any notion of priority yet, - evidence is gossipped through a distinct Evidence reactor. If we just treated - evidence like any other transaction, leaving it entirely to the application, - Tendermint would have no way to know how to prioritize it, unless/until we - significantly upgrade the mempool. Thus we would need to continue to treat evidence - distinctly and update the ABCI to either support sending Evidence through - CheckTx/DeliverTx, or to introduce new CheckEvidence/DeliverEvidence methods. - In either case we'd need to make more changes to ABCI then if Tendermint - handled things and we just added support for another evidence type that could be included - in BeginBlock. - -4) All ABCI application frameworks will benefit from most of the heavy lifting - being handled by Tendermint, rather than each of them needing to re-implement - all the evidence verification logic in each language. - -Arguments in favor of moving evidence handling to the application: - -5) Skipping lite clients require us to track the set of all validators that were - bonded over some period in case validators that are unbonding but still - slashable sign invalid headers to fool lite clients. The Cosmos-SDK - staking/slashing modules track this, as it's used for slashing. - Tendermint does not currently track this, though it does keep track of the - validator set at every height. This leans in favour of managing evidence in - the app to avoid redundantly managing the historical validator set data in - Tendermint - -6) Applications supporting cross-chain validation will be required to process - evidence from other chains. This data will come in the form of a transaction, - but it means the app will be required to have all the functionality to process - evidence, even if the evidence for its own chain is handled directly by - Tendermint. - -7) Evidence from lite clients may be large and constitute some form of DoS - vector against full nodes. Putting it in transactions allows it to engage the application's fee - mechanism to pay for cost of executions in the event the evidence is false. - This means the evidence submitter must be able to afford the fees for the - submission, but of course it should be refunded if the evidence is valid. - That said, the burden is mostly on full nodes, which don't necessarily benefit - from fees. - - -## Decision - -The above mostly seems to suggest that evidence detection belongs in Tendermint. -(5) does not impose particularly large obligations on Tendermint and (6) just -means the app can use Tendermint libraries. That said, (7) is potentially -cause for some concern, though it could still attack full nodes that weren't associated with validators -(ie. that don't benefit from fees). This could be handled out of band, for instance by -full nodes offering the light client service via payment channels or via some -other payment service. This can also be mitigated by banning client IPs if they -send bad data. Note the burden is on the client to actually send us a lot of -data in the first place. - -A separate ADR will describe how Tendermint will handle these new forms of -evidence, in terms of how it will engage the monitoring protocol described in -the [fork -detection](https://github.com/tendermint/tendermint/blob/c67154232ca8be8f5c21dff65d154127adc4f7bb/docs/spec/consensus/fork-detection.md) document, -and how it will track past validators and manage DoS issues. - -## Status - -Proposed. - -## Consequences - -### Positive - -- No real changes to ABCI -- Tendermint handles evidence for all apps - -### Neutral - -- Need to be careful about denial of service on the Tendermint RPC - -### Negative - -- Tendermint duplicates data by tracking all pubkeys that were validators during - the unbonding period diff --git a/docs/architecture/adr-046-light-client-implementation.md b/docs/architecture/adr-046-light-client-implementation.md deleted file mode 100644 index 15d77373d..000000000 --- a/docs/architecture/adr-046-light-client-implementation.md +++ /dev/null @@ -1,169 +0,0 @@ -# ADR 046: Lite Client Implementation - -## Changelog -* 13-02-2020: Initial draft -* 26-02-2020: Cross-checking the first header -* 28-02-2020: Bisection algorithm details -* 31-03-2020: Verify signature got changed - -## Context - -A `Client` struct represents a light client, connected to a single blockchain. - -The user has an option to verify headers using `VerifyHeader` or -`VerifyHeaderAtHeight` or `Update` methods. The latter method downloads the -latest header from primary and compares it with the currently trusted one. - -```go -type Client interface { - // verify new headers - VerifyHeaderAtHeight(height int64, now time.Time) (*types.SignedHeader, error) - VerifyHeader(newHeader *types.SignedHeader, newVals *types.ValidatorSet, now time.Time) error - Update(now time.Time) (*types.SignedHeader, error) - - // get trusted headers & validators - TrustedHeader(height int64) (*types.SignedHeader, error) - TrustedValidatorSet(height int64) (valSet *types.ValidatorSet, heightUsed int64, err error) - LastTrustedHeight() (int64, error) - FirstTrustedHeight() (int64, error) - - // query configuration options - ChainID() string - Primary() provider.Provider - Witnesses() []provider.Provider - - Cleanup() error -} -``` - -A new light client can either be created from scratch (via `NewClient`) or -using the trusted store (via `NewClientFromTrustedStore`). When there's some -data in the trusted store and `NewClient` is called, the light client will a) -check if stored header is more recent b) optionally ask the user whenever it -should rollback (no confirmation required by default). - -```go -func NewClient( - chainID string, - trustOptions TrustOptions, - primary provider.Provider, - witnesses []provider.Provider, - trustedStore store.Store, - options ...Option) (*Client, error) { -``` - -`witnesses` as argument (as opposite to `Option`) is an intentional choice, -made to increase security by default. At least one witness is required, -although, right now, the light client does not check that primary != witness. -When cross-checking a new header with witnesses, minimum number of witnesses -required to respond: 1. Note the very first header (`TrustOptions.Hash`) is -also cross-checked with witnesses for additional security. - -Due to bisection algorithm nature, some headers might be skipped. If the light -client does not have a header for height `X` and `VerifyHeaderAtHeight(X)` or -`VerifyHeader(H#X)` methods are called, these will perform either a) backwards -verification from the latest header back to the header at height `X` or b) -bisection verification from the first stored header to the header at height `X`. - -`TrustedHeader`, `TrustedValidatorSet` only communicate with the trusted store. -If some header is not there, an error will be returned indicating that -verification is required. - -```go -type Provider interface { - ChainID() string - - SignedHeader(height int64) (*types.SignedHeader, error) - ValidatorSet(height int64) (*types.ValidatorSet, error) -} -``` - -Provider is a full node usually, but can be another light client. The above -interface is thin and can accommodate many implementations. - -If provider (primary or witness) becomes unavailable for a prolonged period of -time, it will be removed to ensure smooth operation. - -Both `Client` and providers expose chain ID to track if there are on the same -chain. Note, when chain upgrades or intentionally forks, chain ID changes. - -The light client stores headers & validators in the trusted store: - -```go -type Store interface { - SaveSignedHeaderAndValidatorSet(sh *types.SignedHeader, valSet *types.ValidatorSet) error - DeleteSignedHeaderAndValidatorSet(height int64) error - - SignedHeader(height int64) (*types.SignedHeader, error) - ValidatorSet(height int64) (*types.ValidatorSet, error) - - LastSignedHeaderHeight() (int64, error) - FirstSignedHeaderHeight() (int64, error) - - SignedHeaderAfter(height int64) (*types.SignedHeader, error) - - Prune(size uint16) error - - Size() uint16 -} -``` - -At the moment, the only implementation is the `db` store (wrapper around the KV -database, used in Tendermint). In the future, remote adapters are possible -(e.g. `Postgresql`). - -```go -func Verify( - chainID string, - trustedHeader *types.SignedHeader, // height=X - trustedVals *types.ValidatorSet, // height=X or height=X+1 - untrustedHeader *types.SignedHeader, // height=Y - untrustedVals *types.ValidatorSet, // height=Y - trustingPeriod time.Duration, - now time.Time, - maxClockDrift time.Duration, - trustLevel tmmath.Fraction) error { -``` - -`Verify` pure function is exposed for a header verification. It handles both -cases of adjacent and non-adjacent headers. In the former case, it compares the -hashes directly (2/3+ signed transition). Otherwise, it verifies 1/3+ -(`trustLevel`) of trusted validators are still present in new validators. - -While `Verify` function is certainly handy, `VerifyAdjacent` and -`VerifyNonAdjacent` should be used most often to avoid logic errors. - -### Bisection algorithm details - -Non-recursive bisection algorithm was implemented despite the spec containing -the recursive version. There are two major reasons: - -1) Constant memory consumption => no risk of getting OOM (Out-Of-Memory) exceptions; -2) Faster finality (see Fig. 1). - -_Fig. 1: Differences between recursive and non-recursive bisections_ - -![Fig. 1](./img/adr-046-fig1.png) - -Specification of the non-recursive bisection can be found -[here](https://github.com/tendermint/spec/blob/zm_non-recursive-verification/spec/consensus/light-client/non-recursive-verification.md). - -## Status - -Implemented - -## Consequences - -### Positive - -* single `Client` struct, which is easy to use -* flexible interfaces for header providers and trusted storage - -### Negative - -* `Verify` needs to be aligned with the current spec - -### Neutral - -* `Verify` function might be misused (called with non-adjacent headers in - incorrectly implemented sequential verification) diff --git a/docs/architecture/adr-047-handling-evidence-from-light-client.md b/docs/architecture/adr-047-handling-evidence-from-light-client.md deleted file mode 100644 index cede04399..000000000 --- a/docs/architecture/adr-047-handling-evidence-from-light-client.md +++ /dev/null @@ -1,254 +0,0 @@ -# ADR 047: Handling evidence from light client - -## Changelog -* 18-02-2020: Initial draft -* 24-02-2020: Second version -* 13-04-2020: Add PotentialAmnesiaEvidence and a few remarks -* 31-07-2020: Remove PhantomValidatorEvidence -* 14-08-2020: Introduce light traces (listed now as an alternative approach) -* 20-08-2020: Light client produces evidence when detected instead of passing to full node -* 16-09-2020: Post-implementation revision -* 15-03-2020: Ammends for the case of a forward lunatic attack - -### Glossary of Terms - -- a `LightBlock` is the unit of data that a light client receives, verifies and stores. -It is composed of a validator set, commit and header all at the same height. -- a **Trace** is seen as an array of light blocks across a range of heights that were -created as a result of skipping verification. -- a **Provider** is a full node that a light client is connected to and serves the light -client signed headers and validator sets. -- `VerifySkipping` (sometimes known as bisection or verify non-adjacent) is a method the -light client uses to verify a target header from a trusted header. The process involves verifying -intermediate headers in between the two by making sure that 1/3 of the validators that signed -the trusted header also signed the untrusted one. -- **Light Bifurcation Point**: If the light client was to run `VerifySkipping` with two providers -(i.e. a primary and a witness), the bifurcation point is the height that the headers -from each of these providers are different yet valid. This signals that one of the providers -may be trying to fool the light client. - -## Context - -The bisection method of header verification used by the light client exposes -itself to a potential attack if any block within the light clients trusted period has -a malicious group of validators with power that exceeds the light clients trust level -(default is 1/3). To improve light client (and overall network) security, the light -client has a detector component that compares the verified header provided by the -primary against witness headers. This ADR outlines the process of mitigating attacks -on the light client by using witness nodes to cross reference with. - -## Alternative Approaches - -A previously discussed approach to handling evidence was to pass all the data that the -light client had witnessed when it had observed diverging headers for the full node to -process.This was known as a light trace and had the following structure: - -```go -type ConflictingHeadersTrace struct { - Headers []*types.SignedHeader -} -``` - -This approach has the advantage of not requiring as much processing on the light -client side in the event that an attack happens. Although, this is not a significant -difference as the light client would in any case have to validate all the headers -from both witness and primary. Using traces would consume a large amount of bandwidth -and adds a DDOS vector to the full node. - - -## Decision - -The light client will be divided into two components: a `Verifier` (either sequential or -skipping) and a `Detector` (see [Informal's Detector](https://github.com/informalsystems/tendermint-rs/blob/master/docs/spec/lightclient/detection/detection.md)) -. The detector will take the trace of headers from the primary and check it against all -witnesses. For a witness with a diverging header, the detector will first verify the header -by bisecting through all the heights defined by the trace that the primary provided. If valid, -the light client will trawl through both traces and find the point of bifurcation where it -can proceed to extract any evidence (as is discussed in detail later). - -Upon successfully detecting the evidence, the light client will send it to both primary and -witness before halting. It will not send evidence to other peers nor continue to verify the -primary's header against any other header. - - -## Detailed Design - -The verification process of the light client will start from a trusted header and use a bisectional -algorithm to verify up to a header at a given height. This becomes the verified header (does not -mean that it is trusted yet). All headers that were verified in between are cached and known as -intermediary headers and the entire array is sometimes referred to as a trace. - -The light client's detector then takes all the headers and runs the detect function. - -```golang -func (c *Client) detectDivergence(primaryTrace []*types.LightBlock, now time.Time) error -``` - -The function takes the last header it received, the target header and compares it against all the witnesses -it has through the following function: - -```golang -func (c *Client) compareNewHeaderWithWitness(errc chan error, h *types.SignedHeader, - witness provider.Provider, witnessIndex int) -``` - -The err channel is used to send back all the outcomes so that they can be processed in parallel. -Invalid headers result in dropping the witness, lack of response or not having the headers is ignored -just as headers that have the same hash. Headers, however, -of a different hash then trigger the detection process between the primary and that particular witness. - -This begins with verification of the witness's header via skipping verification which is run in tande -with locating the Light Bifurcation Point - -![](../imgs/light-client-detector.png) - -This is done with: - -```golang -func (c *Client) examineConflictingHeaderAgainstTrace( - trace []*types.LightBlock, - targetBlock *types.LightBlock, - source provider.Provider, - now time.Time, - ) ([]*types.LightBlock, *types.LightBlock, error) -``` - -which performs the following - -1. Checking that the trusted header is the same. Currently, they should not theoretically be different -because witnesses cannot be added and removed after the client is initialized. But we do this any way -as a sanity check. If this fails we have to drop the witness. - -2. Querying and verifying the witness's headers using bisection at the same heights of all the -intermediary headers of the primary (In the above example this is A, B, C, D, F, H). If bisection fails -or the witness stops responding then we can call the witness faulty and drop it. - -3. We eventually reach a verified header by the witness which is not the same as the intermediary header -(In the above example this is E). This is the point of bifurcation (This could also be the last header). - -4. There is a unique case where the trace that is being examined against has blocks that have a greater -height than the targetBlock. This can occur as part of a forward lunatic attack where the primary has -provided a light block that has a height greater than the head of the chain (see Appendix B). In this -case, the light client will verify the sources blocks up to the targetBlock and return the block in the -trace that is directly after the targetBlock in height as the `ConflictingBlock` - -This function then returns the trace of blocks from the witness node between the common header and the -divergent header of the primary as it is likely, as seen in the example to the right, that multiple -headers where required in order to verify the divergent one. This trace will -be used later (as is also described later in this document). - -![](../imgs/bifurcation-point.png) - -Now, that an attack has been detected, the light client must form evidence to prove it. There are -three types of attacks that either the primary or witness could have done to try fool the light client -into verifying the wrong header: Lunatic, Equivocation and Amnesia. As the consequence is the same and -the data required to prove it is also very similar, we bundle these attack styles together in a single -evidence: - -```golang -type LightClientAttackEvidence struct { - ConflictingBlock *LightBlock - CommonHeight int64 -} -``` - -The light client takes the stance of first suspecting the primary. Given the bifurcation point found -above, it takes the two divergent headers and compares whether the one from the primary is valid with -respect to the one from the witness. This is done by calling `isInvalidHeader()` which looks to see if -any one of the deterministically derived header fields differ from one another. This could be one of -`ValidatorsHash`, `NextValidatorsHash`, `ConsensusHash`, `AppHash`, and `LastResultsHash`. -In this case we know it's a Lunatic attack and to help the witness verify it we send the height -of the common header which is 1 in the example above or C in the example above that. If all these -hashes are the same then we can infer that it is either Equivocation or Amnesia. In this case we send -the height of the diverged headers because we know that the validator sets are the same, hence the -malicious nodes are still bonded at that height. In the example above, this is height 10 and the -example above that it is the height at E. - -The light client now has the evidence and broadcasts it to the witness. - -However, it could have been that the header the light client used from the witness against the primary -was forged, so before halting the light client swaps the process and thus suspects the witness and -uses the primary to create evidence. It calls `examineConflictingHeaderAgainstTrace` this time using -the witness trace found earlier. -If the primary was malicious it is likely that it will not respond but if it is innocent then the -light client will produce the same evidence but this time the conflicting -block will come from the witness node instead of the primary. The evidence is then formed and sent to -the primary node. - -This then ends the process and the verify function that was called at the start returns the error to -the user. - -For a detailed overview of how each of these three attacks can be conducted please refer to the -[fork accountability spec](https://github.com/tendermint/spec/blob/master/spec/consensus/light-client/accountability.md). - -## Full Node Verification - -When a full node receives evidence from the light client it will need to verify -it for itself before gossiping it to peers and trying to commit it on chain. This process is outlined - in [ADR-059](https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-059-evidence-composition-and-lifecycle.md). - -## Status - -Implemented - -## Consequences - -### Positive - -* Light client has increased security against Lunatic, Equivocation and Amnesia attacks. -* Do not need intermediate data structures to encapsulate the malicious behavior -* Generalized evidence makes the code simpler - -### Negative - -* Breaking change on the light client from versions 0.33.8 and below. Previous -versions will still send `ConflictingHeadersEvidence` but it won't be recognized -by the full node. Light clients will however still refuse the header and shut down. -* Amnesia attacks although detected, will not be able to be punished as it is not -clear from the current information which nodes behaved maliciously. -* Evidence module must handle both individual and grouped evidence. - -### Neutral - -## References - -* [Fork accountability spec](https://github.com/tendermint/spec/blob/master/spec/consensus/light-client/accountability.md) -* [ADR 056: Light client amnesia attacks](https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-056-light-client-amnesia-attacks.md) -* [ADR-059: Evidence Composition and Lifecycle](https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-059-evidence-composition-and-lifecycle.md) -* [Informal's Light Client Detector](https://github.com/informalsystems/tendermint-rs/blob/master/docs/spec/lightclient/detection/detection.md) - - -## Appendix A - -PhantomValidatorEvidence was used to capture when a validator that was still staked -(i.e. within the bonded period) but was not in the current validator set had voted for a block. - -In later discussions it was argued that although possible to keep phantom validator -evidence, any case a phantom validator that could have the capacity to be involved -in fooling a light client would have to be aided by 1/3+ lunatic validators. - -It would also be very unlikely that the new validators injected by the lunatic attack -would be validators that currently still have something staked. - -Not only this but there was a large degree of extra computation required in storing all -the currently staked validators that could possibly fall into the group of being -a phantom validator. Given this, it was removed. - -## Appendix B - -A unique flavor of lunatic attack is a forward lunatic attack. This is where a malicious -node provides a header with a height greater than the height of the blockchain. Thus there -are no witnesses capable of rebutting the malicious header. Such an attack will also -require an accomplice, i.e. at least one other witness to also return the same forged header. -Although such attacks can be any arbitrary height ahead, they must still remain within the -clock drift of the light clients real time. Therefore, to detect such an attack, a light -client will wait for a time - -``` -2 * MAX_CLOCK_DRIFT + LAG -``` - -for a witness to provide the latest block it has. Given the time constraints, if the witness -is operating at the head of the blockchain, it will have a header with an earlier height but -a later timestamp. This can be used to prove that the primary has submitted a lunatic header -which violates monotonically increasing time. diff --git a/docs/architecture/adr-050-improved-trusted-peering.md b/docs/architecture/adr-050-improved-trusted-peering.md deleted file mode 100644 index d079e67bd..000000000 --- a/docs/architecture/adr-050-improved-trusted-peering.md +++ /dev/null @@ -1,58 +0,0 @@ -# ADR 50: Improved Trusted Peering - -## Changelog -* 22-10-2019: Initial draft -* 05-11-2019: Modify `maximum-dial-period` to `persistent-peers-max-dial-period` - -## Context - -When `max-num-inbound-peers` or `max-num-outbound-peers` of a node is reached, the node cannot spare more slots to any peer -by inbound or outbound. Therefore, after a certain period of disconnection, any important peering can be lost indefinitely -because all slots are consumed by other peers, and the node stops trying to dial the peer anymore. - -This is happening because of two reasons, exponential backoff and absence of unconditional peering feature for trusted peers. - - -## Decision - -We would like to suggest solving this problem by introducing two parameters in `config.toml`, `unconditional-peer-ids` and -`persistent-peers-max-dial-period`. - -1) `unconditional-peer-ids` - -A node operator inputs list of ids of peers which are allowed to be connected by both inbound or outbound regardless of -`max-num-inbound-peers` or `max-num-outbound-peers` of user's node reached or not. - -2) `persistent-peers-max-dial-period` - -Terms between each dial to each persistent peer will not exceed `persistent-peers-max-dial-period` during exponential backoff. -Therefore, `dial-period` = min(`persistent-peers-max-dial-period`, `exponential-backoff-dial-period`) - -Alternative approach - -Persistent-peers is only for outbound, therefore it is not enough to cover the full utility of `unconditional-peer-ids`. -@creamers158(https://github.com/Creamers158) suggested putting id-only items into persistent-peers to be handled as -`unconditional-peer-ids`, but it needs very complicated struct exception for different structure of items in persistent-peers. -Therefore we decided to have `unconditional-peer-ids` to independently cover this use-case. - -## Status - -Proposed - -## Consequences - -### Positive - -A node operator can configure two new parameters in `config.toml` so that he/she can assure that tendermint will allow connections -from/to peers in `unconditional-peer-ids`. Also he/she can assure that every persistent peer will be dialed at least once in every -`persistent-peers-max-dial-period` term. It achieves more stable and persistent peering for trusted peers. - -### Negative - -The new feature introduces two new parameters in `config.toml` which needs explanation for node operators. - -### Neutral - -## References - -* two p2p feature enhancement proposal(https://github.com/tendermint/tendermint/issues/4053) diff --git a/docs/architecture/adr-051-double-signing-risk-reduction.md b/docs/architecture/adr-051-double-signing-risk-reduction.md deleted file mode 100644 index 2bf8db731..000000000 --- a/docs/architecture/adr-051-double-signing-risk-reduction.md +++ /dev/null @@ -1,53 +0,0 @@ -# ADR 051: Double Signing Risk Reduction - -## Changelog - -* 27-11-2019: Initial draft -* 13-01-2020: Separate into 2 ADR, This ADR will only cover Double signing Protection and ADR-052 handle Tendermint Mode -* 22-01-2020: change the title from "Double signing Protection" to "Double Signing Risk Reduction" - -## Context - -To provide a risk reduction method for double signing incidents mistakenly executed by validators -- Validators often mistakenly run duplicated validators to cause double-signing incident -- This proposed feature is to reduce the risk of mistaken double-signing incident by checking recent N blocks before voting begins -- When we think of such serious impact on double-signing incident, it is very reasonable to have multiple risk reduction algorithm built in node daemon - -## Decision - -We would like to suggest a double signing risk reduction method. - -- Methodology : query recent consensus results to find out whether node's consensus key is used on consensus recently or not -- When to check - - When the state machine starts `ConsensusReactor` after fully synced - - When the node is validator ( with privValidator ) - - When `cs.config.DoubleSignCheckHeight > 0` -- How to check - 1. When a validator is transformed from syncing status to fully synced status, the state machine check recent N blocks (`latest_height - double_sign_check_height`) to find out whether there exists consensus votes using the validator's consensus key - 2. If there exists votes from the validator's consensus key, exit state machine program -- Configuration - - We would like to suggest by introducing `double_sign_check_height` parameter in `config.toml` and cli, how many blocks state machine looks back to check votes - - `double_sign_check_height = {{ .Consensus.DoubleSignCheckHeight }}` in `config.toml` - - `tendermint node --consensus.double_sign_check_height` in cli - - State machine ignore checking procedure when `double_sign_check_height == 0` - -## Status - -Implemented - -## Consequences - -### Positive - -- Validators can avoid double signing incident by mistakes. (eg. If another validator node is voting on consensus, starting new validator node with same consensus key will cause panic stop of the state machine because consensus votes with the consensus key are found in recent blocks) -- We expect this method will prevent majority of double signing incident by mistakes. - -### Negative - -- When the risk reduction method is on, restarting a validator node will panic because the node itself voted on consensus with the same consensus key. So, validators should stop the state machine, wait for some blocks, and then restart the state machine to avoid panic stop. - -### Neutral - -## References - -- Issue [#4059](https://github.com/tendermint/tendermint/issues/4059) : double-signing protection diff --git a/docs/architecture/adr-052-tendermint-mode.md b/docs/architecture/adr-052-tendermint-mode.md deleted file mode 100644 index 04f3eb699..000000000 --- a/docs/architecture/adr-052-tendermint-mode.md +++ /dev/null @@ -1,85 +0,0 @@ -# ADR 052: Tendermint Mode - -## Changelog - -* 27-11-2019: Initial draft from ADR-051 -* 13-01-2020: Separate ADR Tendermint Mode from ADR-051 -* 29-03-2021: Update info regarding defaults - -## Context - -- Full mode: full mode does not have the capability to become a validator. -- Validator mode : this mode is exactly same as existing state machine behavior. sync without voting on consensus, and participate consensus when fully synced -- Seed mode : lightweight seed node maintaining an address book, p2p like [TenderSeed](https://gitlab.com/polychainlabs/tenderseed) - -## Decision - -We would like to suggest a simple Tendermint mode abstraction. These modes will live under one binary, and when initializing a node the user will be able to specify which node they would like to create. - -- Which reactor, component to include for each node - - full - - switch, transport - - reactors - - mempool - - consensus - - evidence - - blockchain - - p2p/pex - - statesync - - rpc (safe connections only) - - *~~no privValidator(priv_validator_key.json, priv_validator_state.json)~~* - - validator - - switch, transport - - reactors - - mempool - - consensus - - evidence - - blockchain - - p2p/pex - - statesync - - rpc (safe connections only) - - with privValidator(priv_validator_key.json, priv_validator_state.json) - - seed - - switch, transport - - reactor - - p2p/pex -- Configuration, cli command - - We would like to suggest by introducing `mode` parameter in `config.toml` and cli - - `mode = "{{ .BaseConfig.Mode }}"` in `config.toml` - - `tendermint start --mode validator` in cli - - full | validator | seednode - - There will be no default. Users will need to specify when they run `tendermint init` -- RPC modification - - `host:26657/status` - - return empty `validator_info` when in full mode - - no rpc server in seednode -- Where to modify in codebase - - Add switch for `config.Mode` on `node/node.go:DefaultNewNode` - - If `config.Mode==validator`, call default `NewNode` (current logic) - - If `config.Mode==full`, call `NewNode` with `nil` `privValidator` (do not load or generation) - - Need to add exception routine for `nil` `privValidator` to related functions - - If `config.Mode==seed`, call `NewSeedNode` (seed node version of `node/node.go:NewNode`) - - Need to add exception routine for `nil` `reactor`, `component` to related functions - -## Status - -Implemented - -## Consequences - -### Positive - -- Node operators can choose mode when they run state machine according to the purpose of the node. -- Mode can prevent mistakes because users have to specify which mode they want to run via flag. (eg. If a user want to run a validator node, she/he should explicitly write down validator as mode) -- Different mode needs different reactors, resulting in efficient resource usage. - -### Negative - -- Users need to study how each mode operate and which capability it has. - -### Neutral - -## References - -- Issue [#2237](https://github.com/tendermint/tendermint/issues/2237) : Tendermint "mode" -- [TenderSeed](https://gitlab.com/polychainlabs/tenderseed) : A lightweight Tendermint Seed Node. diff --git a/docs/architecture/adr-053-state-sync-prototype.md b/docs/architecture/adr-053-state-sync-prototype.md deleted file mode 100644 index 2d8c37ad1..000000000 --- a/docs/architecture/adr-053-state-sync-prototype.md +++ /dev/null @@ -1,254 +0,0 @@ -# ADR 053: State Sync Prototype - -State sync is now [merged](https://github.com/tendermint/tendermint/pull/4705). Up-to-date ABCI documentation is [available](https://github.com/tendermint/spec/pull/90), refer to it rather than this ADR for details. - -This ADR outlines the plan for an initial state sync prototype, and is subject to change as we gain feedback and experience. It builds on discussions and findings in [ADR-042](./adr-042-state-sync.md), see that for background information. - -## Changelog - -* 2020-01-28: Initial draft (Erik Grinaker) - -* 2020-02-18: Updates after initial prototype (Erik Grinaker) - * ABCI: added missing `reason` fields. - * ABCI: used 32-bit 1-based chunk indexes (was 64-bit 0-based). - * ABCI: moved `RequestApplySnapshotChunk.chain_hash` to `RequestOfferSnapshot.app_hash`. - * Gaia: snapshots must include node versions as well, both for inner and leaf nodes. - * Added experimental prototype info. - * Added open questions and implementation plan. - -* 2020-03-29: Strengthened and simplified ABCI interface (Erik Grinaker) - * ABCI: replaced `chunks` with `chunk_hashes` in `Snapshot`. - * ABCI: removed `SnapshotChunk` message. - * ABCI: renamed `GetSnapshotChunk` to `LoadSnapshotChunk`. - * ABCI: chunks are now exchanged simply as `bytes`. - * ABCI: chunks are now 0-indexed, for parity with `chunk_hashes` array. - * Reduced maximum chunk size to 16 MB, and increased snapshot message size to 4 MB. - -* 2020-04-29: Update with final released ABCI interface (Erik Grinaker) - -## Context - -State sync will allow a new node to receive a snapshot of the application state without downloading blocks or going through consensus. This bootstraps the node significantly faster than the current fast sync system, which replays all historical blocks. - -Background discussions and justifications are detailed in [ADR-042](./adr-042-state-sync.md). Its recommendations can be summarized as: - -* The application periodically takes full state snapshots (i.e. eager snapshots). - -* The application splits snapshots into smaller chunks that can be individually verified against a chain app hash. - -* Tendermint uses the light client to obtain a trusted chain app hash for verification. - -* Tendermint discovers and downloads snapshot chunks in parallel from multiple peers, and passes them to the application via ABCI to be applied and verified against the chain app hash. - -* Historical blocks are not backfilled, so state synced nodes will have a truncated block history. - -## Tendermint Proposal - -This describes the snapshot/restore process seen from Tendermint. The interface is kept as small and general as possible to give applications maximum flexibility. - -### Snapshot Data Structure - -A node can have multiple snapshots taken at various heights. Snapshots can be taken in different application-specified formats (e.g. MessagePack as format `1` and Protobuf as format `2`, or similarly for schema versioning). Each snapshot consists of multiple chunks containing the actual state data, for parallel downloads and reduced memory usage. - -```proto -message Snapshot { - uint64 height = 1; // The height at which the snapshot was taken - uint32 format = 2; // The application-specific snapshot format - uint32 chunks = 3; // Number of chunks in the snapshot - bytes hash = 4; // Arbitrary snapshot hash - should be equal only for identical snapshots - bytes metadata = 5; // Arbitrary application metadata -} -``` - -Chunks are exchanged simply as `bytes`, and cannot be larger than 16 MB. `Snapshot` messages should be less than 4 MB. - -### ABCI Interface - -```proto -// Lists available snapshots -message RequestListSnapshots {} - -message ResponseListSnapshots { - repeated Snapshot snapshots = 1; -} - -// Offers a snapshot to the application -message RequestOfferSnapshot { - Snapshot snapshot = 1; // snapshot offered by peers - bytes app_hash = 2; // light client-verified app hash for snapshot height - } - -message ResponseOfferSnapshot { - Result result = 1; - - enum Result { - accept = 0; // Snapshot accepted, apply chunks - abort = 1; // Abort all snapshot restoration - reject = 2; // Reject this specific snapshot, and try a different one - reject_format = 3; // Reject all snapshots of this format, and try a different one - reject_sender = 4; // Reject all snapshots from the sender(s), and try a different one - } -} - -// Loads a snapshot chunk -message RequestLoadSnapshotChunk { - uint64 height = 1; - uint32 format = 2; - uint32 chunk = 3; // Zero-indexed -} - -message ResponseLoadSnapshotChunk { - bytes chunk = 1; -} - -// Applies a snapshot chunk -message RequestApplySnapshotChunk { - uint32 index = 1; - bytes chunk = 2; - string sender = 3; - } - -message ResponseApplySnapshotChunk { - Result result = 1; - repeated uint32 refetch_chunks = 2; // Chunks to refetch and reapply (regardless of result) - repeated string reject_senders = 3; // Chunk senders to reject and ban (regardless of result) - - enum Result { - accept = 0; // Chunk successfully accepted - abort = 1; // Abort all snapshot restoration - retry = 2; // Retry chunk, combine with refetch and reject as appropriate - retry_snapshot = 3; // Retry snapshot, combine with refetch and reject as appropriate - reject_snapshot = 4; // Reject this snapshot, try a different one but keep sender rejections - } -} -``` - -### Taking Snapshots - -Tendermint is not aware of the snapshotting process at all, it is entirely an application concern. The following guarantees must be provided: - -* **Periodic:** snapshots must be taken periodically, not on-demand, for faster restores, lower load, and less DoS risk. - -* **Deterministic:** snapshots must be deterministic, and identical across all nodes - typically by taking a snapshot at given height intervals. - -* **Consistent:** snapshots must be consistent, i.e. not affected by concurrent writes - typically by using a data store that supports versioning and/or snapshot isolation. - -* **Asynchronous:** snapshots must be asynchronous, i.e. not halt block processing and state transitions. - -* **Chunked:** snapshots must be split into chunks of reasonable size (on the order of megabytes), and each chunk must be verifiable against the chain app hash. - -* **Garbage collected:** snapshots must be garbage collected periodically. - -### Restoring Snapshots - -Nodes should have options for enabling state sync and/or fast sync, and be provided a trusted header hash for the light client. - -When starting an empty node with state sync and fast sync enabled, snapshots are restored as follows: - -1. The node checks that it is empty, i.e. that it has no state nor blocks. - -2. The node contacts the given seeds to discover peers. - -3. The node contacts a set of full nodes, and verifies the trusted block header using the given hash via the light client. - -4. The node requests available snapshots via P2P from peers, via `RequestListSnapshots`. Peers will return the 10 most recent snapshots, one message per snapshot. - -5. The node aggregates snapshots from multiple peers, ordered by height and format (in reverse). If there are mismatches between different snapshots, the one hosted by the largest amount of peers is chosen. The node iterates over all snapshots in reverse order by height and format until it finds one that satisfies all of the following conditions: - - * The snapshot height's block is considered trustworthy by the light client (i.e. snapshot height is greater than trusted header and within unbonding period of the latest trustworthy block). - - * The snapshot's height or format hasn't been explicitly rejected by an earlier `RequestOfferSnapshot`. - - * The application accepts the `RequestOfferSnapshot` call. - -6. The node downloads chunks in parallel from multiple peers, via `RequestLoadSnapshotChunk`. Chunk messages cannot exceed 16 MB. - -7. The node passes chunks sequentially to the app via `RequestApplySnapshotChunk`. - -8. Once all chunks have been applied, the node compares the app hash to the chain app hash, and if they do not match it either errors or discards the state and starts over. - -9. The node switches to fast sync to catch up blocks that were committed while restoring the snapshot. - -10. The node switches to normal consensus mode. - -## Gaia Proposal - -This describes the snapshot process seen from Gaia, using format version `1`. The serialization format is unspecified, but likely to be compressed Amino or Protobuf. - -### Snapshot Metadata - -In the initial version there is no snapshot metadata, so it is set to an empty byte buffer. - -Once all chunks have been successfully built, snapshot metadata should be stored in a database and served via `RequestListSnapshots`. - -### Snapshot Chunk Format - -The Gaia data structure consists of a set of named IAVL trees. A root hash is constructed by taking the root hashes of each of the IAVL trees, then constructing a Merkle tree of the sorted name/hash map. - -IAVL trees are versioned, but a snapshot only contains the version relevant for the snapshot height. All historical versions are ignored. - -IAVL trees are insertion-order dependent, so key/value pairs must be set in an appropriate insertion order to produce the same tree branching structure. This insertion order can be found by doing a breadth-first scan of all nodes (including inner nodes) and collecting unique keys in order. However, the node hash also depends on the node's version, so snapshots must contain the inner nodes' version numbers as well. - -For the initial prototype, each chunk consists of a complete dump of all node data for all nodes in an entire IAVL tree. Thus the number of chunks equals the number of persistent stores in Gaia. No incremental verification of chunks is done, only a final app hash comparison at the end of the snapshot restoration. - -For a production version, it should be sufficient to store key/value/version for all nodes (leaf and inner) in insertion order, chunked in some appropriate way. If per-chunk verification is required, the chunk must also contain enough information to reconstruct the Merkle proofs all the way up to the root of the multistore, e.g. by storing a complete subtree's key/value/version data plus Merkle hashes of all other branches up to the multistore root. The exact approach will depend on tradeoffs between size, time, and verification. IAVL RangeProofs are not recommended, since these include redundant data such as proofs for intermediate and leaf nodes that can be derived from the above data. - -Chunks should be built greedily by collecting node data up to some size limit (e.g. 10 MB) and serializing it. Chunk data is stored in the file system as `snapshots///`, and a SHA-256 checksum is stored along with the snapshot metadata. - -### Snapshot Scheduling - -Snapshots should be taken at some configurable height interval, e.g. every 1000 blocks. All nodes should preferably have the same snapshot schedule, such that all nodes can serve chunks for a given snapshot. - -Taking consistent snapshots of IAVL trees is greatly simplified by them being versioned: simply snapshot the version that corresponds to the snapshot height, while concurrent writes create new versions. IAVL pruning must not prune a version that is being snapshotted. - -Snapshots must also be garbage collected after some configurable time, e.g. by keeping the latest `n` snapshots. - -## Resolved Questions - -* Is it OK for state-synced nodes to not have historical blocks nor historical IAVL versions? - - > Yes, this is as intended. Maybe backfill blocks later. - -* Do we need incremental chunk verification for first version? - - > No, we'll start simple. Can add chunk verification via a new snapshot format without any breaking changes in Tendermint. For adversarial conditions, maybe consider support for whitelisting peers to download chunks from. - -* Should the snapshot ABCI interface be a separate optional ABCI service, or mandatory? - - > Mandatory, to keep things simple for now. It will therefore be a breaking change and push the release. For apps using the Cosmos SDK, we can provide a default implementation that does not serve snapshots and errors when trying to apply them. - -* How can we make sure `ListSnapshots` data is valid? An adversary can provide fake/invalid snapshots to DoS peers. - - > For now, just pick snapshots that are available on a large number of peers. Maybe support whitelisting. We may consider e.g. placing snapshot manifests on the blockchain later. - -* Should we punish nodes that provide invalid snapshots? How? - - > No, these are full nodes not validators, so we can't punish them. Just disconnect from them and ignore them. - -* Should we call these snapshots? The SDK already uses the term "snapshot" for `PruningOptions.SnapshotEvery`, and state sync will introduce additional SDK options for snapshot scheduling and pruning that are not related to IAVL snapshotting or pruning. - - > Yes. Hopefully these concepts are distinct enough that we can refer to state sync snapshots and IAVL snapshots without too much confusion. - -* Should we store snapshot and chunk metadata in a database? Can we use the database for chunks? - - > As a first approach, store metadata in a database and chunks in the filesystem. - -* Should a snapshot at height H be taken before or after the block at H is processed? E.g. RPC `/commit` returns app_hash after _previous_ height, i.e. _before_ current height. - - > After commit. - -* Do we need to support all versions of blockchain reactor (i.e. fast sync)? - - > We should remove the v1 reactor completely once v2 has stabilized. - -* Should `ListSnapshots` be a streaming API instead of a request/response API? - - > No, just use a max message size. - -## Status - -Implemented - -## References - -* [ADR-042](./adr-042-state-sync.md) and its references diff --git a/docs/architecture/adr-054-crypto-encoding-2.md b/docs/architecture/adr-054-crypto-encoding-2.md deleted file mode 100644 index e58681d15..000000000 --- a/docs/architecture/adr-054-crypto-encoding-2.md +++ /dev/null @@ -1,71 +0,0 @@ -# ADR 054: Crypto encoding (part 2) - -## Changelog - -2020-2-27: Created -2020-4-16: Update - -## Context - -Amino has been a pain point of many users in the ecosystem. While Tendermint does not suffer greatly from the performance degradation introduced by amino, we are making an effort in moving the encoding format to a widely adopted format, [Protocol Buffers](https://developers.google.com/protocol-buffers). With this migration a new standard is needed for the encoding of keys. This will cause ecosystem wide breaking changes. - -Currently amino encodes keys as ` `. - -## Decision - -Previously Tendermint defined all the key types for use in Tendermint and the Cosmos-SDK. Going forward the Cosmos-SDK will define its own protobuf type for keys. This will allow Tendermint to only define the keys that are being used in the codebase (ed25519). -There is the the opportunity to only define the usage of ed25519 (`bytes`) and not have it be a `oneof`, but this would mean that the `oneof` work is only being postponed to a later date. When using the `oneof` protobuf type we will have to manually switch over the possible key types and then pass them to the interface which is needed. - -The approach that will be taken to minimize headaches for users is one where all encoding of keys will shift to protobuf and where amino encoding is relied on, there will be custom marshal and unmarshal functions. - -Protobuf messages: - -```proto -message PubKey { - oneof key { - bytes ed25519 = 1; - } - -message PrivKey { - oneof sum { - bytes ed25519 = 1; - } -} -``` - -> Note: The places where backwards compatibility is needed is still unclear. - -All modules currently do not rely on amino encoded bytes and keys are not amino encoded for genesis, therefore a hardfork upgrade is what will be needed to adopt these changes. - -This work will be broken out into a few PRs, this work will be merged into a proto-breakage branch, all PRs will be reviewed prior to being merged: - -1. Encoding of keys to protobuf and protobuf messages -2. Move Tendermint types to protobuf, mainly the ones that are being encoded. -3. Go one by one through the reactors and transition amino encoded messages to protobuf. -4. Test with cosmos-sdk and/or testnets repo. - -## Status - -Implemented - -## Consequences - -- Move keys to protobuf encoding, where backwards compatibility is needed, amino marshal and unmarshal functions will be used. - -### Positive - -- Protocol Buffer encoding will not change going forward. -- Removing amino overhead from keys will help with the KSM. -- Have a large ecosystem of supported languages. - -### Negative - -- Hardfork is required to integrate this into running chains. - -### Neutral - -## References - -> Are there any relevant PR comments, issues that led up to this, or articles referenced for why we made the given design choice? If so link them here! - -- {reference link} diff --git a/docs/architecture/adr-055-protobuf-design.md b/docs/architecture/adr-055-protobuf-design.md deleted file mode 100644 index ab2f75283..000000000 --- a/docs/architecture/adr-055-protobuf-design.md +++ /dev/null @@ -1,61 +0,0 @@ -# ADR 055: Protobuf Design - -## Changelog - -- 2020-4-15: Created (@marbar3778) -- 2020-6-18: Updated (@marbar3778) - -## Context - -Currently we use [go-amino](https://github.com/tendermint/go-amino) throughout Tendermint. Amino is not being maintained anymore (April 15, 2020) by the Tendermint team and has been found to have issues: - -- https://github.com/tendermint/go-amino/issues/286 -- https://github.com/tendermint/go-amino/issues/230 -- https://github.com/tendermint/go-amino/issues/121 - -These are a few of the known issues that users could run into. - -Amino enables quick prototyping and development of features. While this is nice, amino does not provide the performance and developer convenience that is expected. For Tendermint to see wider adoption as a BFT protocol engine a transition to an adopted encoding format is needed. Below are some possible options that can be explored. - -There are a few options to pick from: - -- `Protobuf`: Protocol buffers are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler. It is supported in countless languages and has been proven in production for many years. - -- `FlatBuffers`: FlatBuffers is an efficient cross platform serialization library. Flatbuffers are more efficient than Protobuf due to the fast that there is no parsing/unpacking to a second representation. FlatBuffers has been tested and used in production but is not widely adopted. - -- `CapnProto`: Cap’n Proto is an insanely fast data interchange format and capability-based RPC system. Cap'n Proto does not have a encoding/decoding step. It has not seen wide adoption throughout the industry. - -- @erikgrinaker - https://github.com/tendermint/tendermint/pull/4623#discussion_r401163501 - ``` - Cap'n'Proto is awesome. It was written by one of the original Protobuf developers to fix some of its issues, and supports e.g. random access to process huge messages without loading them into memory and an (opt-in) canonical form which would be very useful when determinism is needed (e.g. in the state machine). That said, I suspect Protobuf is the better choice due to wider adoption, although it makes me kind of sad since Cap'n'Proto is technically better. - ``` - -## Decision - -Transition Tendermint to Protobuf because of its performance and tooling. The Ecosystem behind Protobuf is vast and has outstanding [support for many languages](https://developers.google.com/protocol-buffers/docs/tutorials). - -We will be making this possible by keeping the current types in there current form (handwritten) and creating a `/proto` directory in which all the `.proto` files will live. Where encoding is needed, on disk and over the wire, we will call util functions that will transition the types from handwritten go types to protobuf generated types. This is inline with the recommended file structure from [buf](https://buf.build). You can find more information on this file structure [here](https://buf.build/docs/lint-checkers#file_layout). - -By going with this design we will enable future changes to types and allow for a more modular codebase. - -## Status - -Implemented - -## Consequences - -### Positive - -- Allows for modular types in the future -- Less refactoring -- Allows the proto files to be pulled into the spec repo in the future. -- Performance -- Tooling & support in multiple languages - -### Negative - -- When a developer is updating a type they need to make sure to update the proto type as well - -### Neutral - -## References diff --git a/docs/architecture/adr-056-light-client-amnesia-attacks.md b/docs/architecture/adr-056-light-client-amnesia-attacks.md deleted file mode 100644 index b2a268052..000000000 --- a/docs/architecture/adr-056-light-client-amnesia-attacks.md +++ /dev/null @@ -1,170 +0,0 @@ -# ADR 056: Light client amnesia attacks - -## Changelog - -- 02.04.20: Initial Draft -- 06.04.20: Second Draft -- 10.06.20: Post Implementation Revision -- 19.08.20: Short Term Amnesia Alteration -- 01.10.20: Status of Amnesia for 0.34 - -## Context - -Whilst most created evidence of malicious behavior is self evident such that any individual can verify them independently there are types of evidence, known collectively as global evidence, that require further collaboration from the network in order to accumulate enough information to create evidence that is individually verifiable and can therefore be processed through consensus. [Fork Accountability](https://github.com/tendermint/spec/blob/master/spec/consensus/light-client/accountability.md) has been coined to describe the entire process of detection, proving and punishing of malicious behavior. This ADR addresses specifically what a light client amnesia attack is and how it can be proven and the current decision around handling light client amnesia attacks. For information on evidence handling by the light client, it is recommended to read [ADR 47](https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-047-handling-evidence-from-light-client.md). - -### Amnesia Attack - -The schematic below explains a scenario where an amnesia attack can occur such that two sets of honest nodes, C1 and C2, commit different blocks. - -![](../imgs/tm-amnesia-attack.png) - -1. C1 and F send PREVOTE messages for block A. -2. C1 sends PRECOMMIT for round 1 for block A. -3. A new round is started, C2 and F send PREVOTE messages for a different block B. -4. C2 and F then send PRECOMMIT messages for block B. -5. F later on creates PRECOMMITS for block A and combines it with those from C1 to form a block - - -This forged block can then be used to fool light clients trying to verify it. It must be stressed that there are a few more hurdles or dimensions to the attack to consider.For a more detailed walkthrough refer to Appendix A. - -## Decision - -The decision surrounding amnesia attacks has both a short term and long term component. In the long term, a more sturdy protocol will need to be fleshed out and implemented. There is already draft documents outlining what such a protocol would look like and the resources it would require (see references). Prior revisions however outlined a protocol which had been implemented (See Appendix B). It was agreed that it still required greater consideration and review given it's importance. It was therefore discussed, with the limited time frame set before 0.34, whether the protocol should be completely removed or if there should remain some logic in handling the aforementioned scenarios. - -The latter of the two options meant storing a record of all votes in any height with which there was more than one round. This information would then be accessible for applications if they wanted to perform some off-chain verification and punishment. - -In summary, this seemed like too much to ask of the application to implement only on a temporary basis, whilst not having the domain specific knowledge and considering such a difficult and unlikely attack. Therefore the short term decision is to identify when the attack has occurred and implement the detector algorithm highlighted in [ADR 47](https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-047-handling-evidence-from-light-client.md) but to not implement any accountability protocol that would identify malicious validators and allow applications to punish them. This will hopefully change in the long term with the focus on eventually reaching a concrete and secure protocol with identifying and dealing with these attacks. - -## Implications - -- Light clients will still be able to detect amnesia attacks so long as the assumption of having at least one correct witness holds -- Light clients will gossip the attack to witnesses and halt thus failing to validate the incorrect block (and therefore not being fooled) -- Validators will propose and commit evidence of the amnesia attack on chain -- No evidence will be passed to the application indicting any malicious validators, thus meaning that no malicious validators will be punished for performing the attack -- If a light clients bubble of providers are all faulty the light client will falsely validate amnesia attacks as well as any other 1/3+ light client attack. - -## Status - -Implemented - -## Consequences - -### Positive - -Light clients are still able to prevent falsely validating a block. - -Already implemented. - -### Negative - -Light clients where all witnesses are faulty can be subject to an amnesia attack and verify a forged block that is not part of the chain. - -### Neutral - - -## References - -- [Fork accountability algorithm](https://docs.google.com/document/d/11ZhMsCj3y7zIZz4udO9l25xqb0kl7gmWqNpGVRzOeyY/edit) -- [Fork accountability spec](https://github.com/tendermint/spec/blob/master/spec/consensus/light-client/accountability.md) - -## Appendix A: Detailed Walkthrough of Performing a Light Client Amnesia Attack - -As the attacker, a prerequisite to this attack is first to observe or attempt to craft a block where a subset (less than ⅓) of correct validators sent precommit votes for a proposal in an earlier round and later received ⅔ prevotes for a different proposal thus changing their lock and correctly sending precommit votes (and later committing) for the proposal in the latter round. The second prerequisite is to have at least ⅓ validating power in that height (or enough voting power to have ⅔+ when combined with the precommits of the earlier round). - -To go back to how one may craft such a block, we begin with one of the validators in this cabal being the proposer. They propose a block with all the txs that they want to fool a light client with. The proposer then only relays this to the members of their cabal and a controlled subset of correct validators (less than ⅓). We will call ourselves f for faulty and c1 for this correct subset. - -Attackers need to rely on the assistance of some form of a network partition or on the nature of the sporadic voting to conjure their desired environment. The attackers need at least ⅓ of the validating power of the remaining correct validators, we shall denote this as c2, to not see ⅔ prevotes and thus not be locked on a block when it comes to the next round. If we have less than ⅓ remaining validators that don’t see this first proposal, then we will not have enough voting power to reach ⅔+ prevotes (the sum of f and c2) in the following round and thus change the lock of c1 such that we correctly commit the block in the latter round yet have enough precommits in the earlier round to fool the light client. Remember this is our desired scenario: to save all these precommit votes for a different (in this case earlier) proposed block. - -To try to break this down even further let’s go back to the first round. F sends c1 a proposal (and not c2), c1 in turn sends their prevotes to all whom they are connected to. This means that some will be received by c2. F then sends their prevotes just to c1. Now not all validators in c1 may be connected to each other, so perhaps some validators in c1 might not receive ⅔ (from their own cohort and from f) and thus not precommit. In other situations we may see a validator in c2 connected to all validators in c1. Therefore they too will receive ⅔ prevotes and thus precommit. We can conclude therefore that although targeting this c1 subset of validators, those that actually precommit may be somewhat different. The key is for the attackers to observe the n amount of precommits they need in round 1 where n is ⅔+ - f, whilst ensuring that n itself does not go over ⅓. If it does then less than ⅔ validators remain to be able to change the lock and commit the block in the later round. - -An extra dimension to this puzzle is the timeouts. Whilst c1 is relaying votes to its peers and these validators count closer towards the ⅔ threshold needed to send their precommit votes at any moment the timeout could be reached and thus the nodes will precommit nil and ignore any late prevote messages. - -This is all to say that such an attack is partly out of the attackers hands. All they can do is tweak the subset of validators that they first choose to gossip the proposal and modify the timings around when they send their prevotes until they reach the desired precondition: n precommits for an earlier proposal and ⅔ precommits for the later proposal. So this is up to the gods of non deterministic behavior to help them out with their plight. I’m not going to allocate the hours to calculate the probability but it could be in the magnitude of 1000’s of blocks trying to get this scenario before the precondition is met. - -Obviously, the probability becomes substantially higher as the cabal’s voting power nears ⅔. This is because both n decreases and there is greater tolerance to send prevotes to a greater amount of validators without going overboard and reaching the ⅓ precommit threshold in the first round which would mean they would have to try again. - -Once we’ve got our n, we can then forge the remaining signatures for that block (from the f) and bundle them all together and tada we have a forged signed header. - -Now we’ve done that, it’s time to find some light clients to fool. - -Also critical to this type of attack is that the light client that is connected to our nodes must request a light block at that specific height with which we forged this signed header but this shouldn’t be hard to do. To bring this back to a real context, say our faulty cabal, f, bought some groceries using atoms and then wanted to prove that they did, the grocery owner whips out their phone, runs the light client and f tells them the height they committed the transaction. - -An important note here is that because the validator sets are the same between the canonical and the forged block, this attack also works on light clients that verify sequentially. In fact, they are especially vulnerable because they currently don’t run the detector function afterwards. - -However, if our grocery owner verifies using the skipping algorithm, they will then run the detector and therefore they will compare with other witness nodes. Ideally for our attackers, if f has a lot of nodes exposing their rpc endpoints, then there is a chance that all the witnesses the light client has are faulty and thus we have a successful attack and the grocery owner has been fooled into handing f a few apples and carrots. - -However, there is a greater chance, especially if the light client is connected to quite a few other nodes that a divergence will be detected. The light client will figure out there was an amnesia attack and send the evidence to the witness to commit on chain. The grocery owner will see that verification failed and won't hand over the apples or carrots but also f won't be punished for their villainous behavior. This means that they can go over to the hairdressers and see if they can pull off the same stunt again. - -So this brings to the fore the current defenses that are in place. As long as there has not been a cabal of validators with greater than 1/3 power (or the trust level), the light clients verification algorithm will prevent any attempts to deceive it. Greater than this threshold and we rely on the detector as a second layer of defense to pick up on any attack. It's security is chiefly tied with the assumption that at least one of the witnesses is correct. If this fails then as illustrated above, the light client can be suceptible to amnesia (as well as equivocation and lunatic) attacks. - -The outstanding problem, if we indeed consider it big enough to be one, therefore lies in the incentivisation mechanism which is how f and other malicious validators are punished. This is decided by the application but it's up to Tendermint to identify them. With other forms of attacks the evidence lies in the precommits. But because an amnesia attack uses precommits from another round, which is information that is discarded by the consensus engine once the block is committed, it is difficult to understand which validators were in fact faulty. - -If we cast our minds back to what I previously wrote, part of an amnesia attack depends on getting n precommits from an earlier round. These are then bundled with the malicious validators' own signatures. This means that the light client nor full nodes are capable of distinguishing which of the signatures were correctly created as part of Tendermint consensus and which were forged later on. - -## Appendix B: Prior Amnesia Evidence Accountability Implementation - -As the distinction between these two attacks (amnesia and back to the past) can only be distinguished by confirming with all validators (to see if it is a full fork or a light fork), for the purpose of simplicity, these attacks will be treated as the same. - -Currently, the evidence reactor is used to simply broadcast and store evidence. The idea of creating a new reactor for the specific task of verifying these attacks was briefly discussed, but it is decided that the current evidence reactor will be extended. - -The process begins with a light client receiving conflicting headers (in the future this could also be a full node during fast sync or state sync), which it sends to a full node to analyze. As part of [evidence handling](https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-047-handling-evidence-from-light-client.md), this is extracted into potential amnesia evidence when the validator voted in more than one round for a different block. - -```golang -type PotentialAmnesiaEvidence struct { - VoteA *types.Vote - VoteB *types.Vote - - Heightstamp int64 -} -``` - -*NOTE: There had been an earlier notion towards batching evidence against the entire set of validators all together but this has given way to individual processing predominantly to maintain consistency with the other forms of evidence. A more extensive breakdown can be found [here](https://github.com/tendermint/tendermint/issues/4729)* - -The evidence will contain the precommit votes for a validator that voted for both rounds. If the validator voted in more than two rounds, then they will have multiple `PotentialAmnesiaEvidence` against them hence it is possible that there is multiple evidence for a validator in a single height but not for a single round. The votes should be all valid and the height and time that the infringement was made should be within: - -`MaxEvidenceAge - ProofTrialPeriod` - -This trial period will be discussed later. - -Returning to the event of an amnesia attack, if we were to examine the behavior of the honest nodes, C1 and C2, in the schematic, C2 will not PRECOMMIT an earlier round, but it is likely, if a node in C1 were to receive +2/3 PREVOTE's or PRECOMMIT's for a higher round, that it would remove the lock and PREVOTE and PRECOMMIT for the later round. Therefore, unfortunately it is not a case of simply punishing all nodes that have double voted in the `PotentialAmnesiaEvidence`. - -Instead we use the Proof of Lock Change (PoLC) referred to in the [consensus spec](https://github.com/tendermint/spec/blob/master/spec/consensus/consensus.md#terms). When an honest node votes again for a different block in a later round -(which will only occur in very rare cases), it will generate the PoLC and store it in the evidence reactor for a time equal to the `MaxEvidenceAge` - -```golang -type ProofOfLockChange struct { - Votes []*types.Vote - PubKey crypto.PubKey -} -``` - -This can be either evidence of +2/3 PREVOTES or PRECOMMITS (either warrants the honest node the right to vote) and is valid, among other checks, so long as the PRECOMMIT vote of the node in V2 came after all the votes in the `ProofOfLockChange` i.e. it received +2/3 votes for a block and then voted for that block thereafter (F is unable to prove this). - -In the event that an honest node receives `PotentialAmnesiaEvidence` it will first `ValidateBasic()` and `Verify()` it and then will check if it is among the suspected nodes in the evidence. If so, it will retrieve the `ProofOfLockChange` and combine it with `PotentialAmensiaEvidence` to form `AmensiaEvidence`. All honest nodes that are part of the indicted group will have a time, measured in blocks, equal to `ProofTrialPeriod`, the aforementioned evidence paramter, to gossip their `AmnesiaEvidence` with their `ProofOfLockChange` - -```golang -type AmnesiaEvidence struct { - *types.PotentialAmnesiaEvidence - Polc *types.ProofOfLockChange -} -``` - -If the node is not required to submit any proof than it will simply broadcast the `PotentialAmnesiaEvidence`, stamp the height that it received the evidence and begin to wait out the trial period. It will ignore other `PotentialAmnesiaEvidence` gossiped at the same height and round. - -If a node receives `AmnesiaEvidence` that contains a valid `ProofOfClockChange` it will add it to the evidence store and replace any PotentialAmnesiaEvidence of the same height and round. At this stage, an amnesia evidence with polc, it is ready to be submitted to the chin. If a node receives `AmnesiaEvidence` with an empty polc it will ignore it as each honest node will conduct their own trial period to be sure that time was given for any other honest nodes to respond. - -There can only be one `AmnesiaEvidence` and one `PotentialAmneisaEvidence` stored for each attack (i.e. for each height). - -When, `state.LastBlockHeight > PotentialAmnesiaEvidence.timestamp + ProofTrialPeriod`, nodes will upgrade the corresponding `PotentialAmnesiaEvidence` and attach an empty `ProofOfLockChange`. Then honest validators of the current validator set can begin proposing the block that contains the `AmnesiaEvidence`. - -*NOTE: Even before the evidence is proposed and committed, the off-chain process of gossiping valid evidence could be - enough for honest nodes to recognize the fork and halt.* - -Other validators will vote `nil` if: - -- The Amnesia Evidence is not valid -- The Amensia Evidence is not within their own trial period i.e. too soon. -- They don't have the Amnesia Evidence and it is has an empty polc (each validator needs to run their own trial period of the evidence) -- Is of an AmnesiaEvidence that has already been committed to the chain. - -Finally it is important to stress that the protocol of having a trial period addresses attacks where a validator voted again for a different block at a later round and time. In the event, however, that the validator voted for an earlier round after voting for a later round i.e. `VoteA.Timestamp < VoteB.Timestamp && VoteA.Round > VoteB.Round` then this action is inexcusable and can be punished immediately without the need of a trial period. In this case, PotentialAmnesiaEvidence will be instantly upgraded to AmnesiaEvidence. diff --git a/docs/architecture/adr-057-RPC.md b/docs/architecture/adr-057-RPC.md deleted file mode 100644 index 5e7c9f1dc..000000000 --- a/docs/architecture/adr-057-RPC.md +++ /dev/null @@ -1,90 +0,0 @@ -# ADR 057: RPC - -## Changelog - -- 19-05-2020: created - -## Context - -Currently the RPC layer of Tendermint is using a variant of the JSON-RPC protocol. This ADR is meant to serve as a pro/con list for possible alternatives and JSON-RPC. - -There are currently two options being discussed: gRPC & JSON-RPC. - -### JSON-RPC - -JSON-RPC is a JSON-based RPC protocol. Tendermint has implemented its own variant of JSON-RPC which is not compatible with the [JSON-RPC 2.0 specification](https://www.jsonrpc.org/specification). - -**Pros:** - -- Easy to use & implement (by default) -- Well-known and well-understood by users and integrators -- Integrates reasonably well with web infrastructure (proxies, API gateways, service meshes, caches, etc) -- human readable encoding (by default) - -**Cons:** - -- No schema support -- RPC clients must be hand-written -- Streaming not built into protocol -- Underspecified types (e.g. numbers and timestamps) -- Tendermint has its own implementation (not standards compliant, maintenance overhead) - - High maintenance cost associated to this -- Stdlib `jsonrpc` package only supports JSON-RPC 1.0, no dominant package for JSON-RPC 2.0 -- Tooling around documentation/specification (e.g. Swagger) could be better -- JSON data is larger (offset by HTTP compression) -- Serializing is slow ([~100% marshal, ~400% unmarshal](https://github.com/alecthomas/go_serialization_benchmarks)); insignificant in absolute terms -- Specification was last updated in 2013 and is way behind Swagger/OpenAPI - -### gRPC + gRPC-gateway (REST + Swagger) - -gRPC is a high performant RPC framework. It has been battle tested by a large number of users and is heavily relied on and maintained by countless large corporations. - -**Pros:** - -- Efficient data retrieval for users, lite clients and other protocols -- Easily implemented in supported languages (Go, Dart, JS, TS, rust, Elixir, Haskell, ...) -- Defined schema with richer type system (Protocol Buffers) -- Can use common schemas and types across all protocols and data stores (RPC, ABCI, blocks, etc) -- Established conventions for forwards- and backwards-compatibility -- Bi-directional streaming -- Servers and clients are be autogenerated in many languages (e.g. Tendermint-rs) -- Auto-generated swagger documentation for REST API -- Backwards and forwards compatibility guarantees enforced at the protocol level. -- Can be used with different codecs (JSON, CBOR, ...) - -**Cons:** - -- Complex system involving cross-language schemas, code generation, and custom protocols -- Type system does not always map cleanly to native language type system; integration woes -- Many common types require Protobuf plugins (e.g. timestamps and duration) -- Generated code may be non-idiomatic and hard to use -- Migration will be disruptive and laborious - -## Decision - -> This section explains all of the details of the proposed solution, including implementation details. -> It should also describe affects / corollary items that may need to be changed as a part of this. -> If the proposed change will be large, please also indicate a way to do the change to maximize ease of review. -> (e.g. the optimal split of things to do between separate PR's) - -## Status - -> A decision may be "proposed" if it hasn't been agreed upon yet, or "accepted" once it is agreed upon. If a later ADR changes or reverses a decision, it may be marked as "deprecated" or "superseded" with a reference to its replacement. - -{Deprecated|Proposed|Accepted} - -## Consequences - -> This section describes the consequences, after applying the decision. All consequences should be summarized here, not just the "positive" ones. - -### Positive - -### Negative - -### Neutral - -## References - -> Are there any relevant PR comments, issues that led up to this, or articles referenced for why we made the given design choice? If so link them here! - -- {reference link} diff --git a/docs/architecture/adr-058-event-hashing.md b/docs/architecture/adr-058-event-hashing.md deleted file mode 100644 index 184b921d5..000000000 --- a/docs/architecture/adr-058-event-hashing.md +++ /dev/null @@ -1,122 +0,0 @@ -# ADR 058: Event hashing - -## Changelog - -- 2020-07-17: initial version -- 2020-07-27: fixes after Ismail and Ethan's comments -- 2020-07-27: declined - -## Context - -Before [PR#4845](https://github.com/tendermint/tendermint/pull/4845), -`Header#LastResultsHash` was a root of the Merkle tree built from `DeliverTx` -results. Only `Code`, `Data` fields were included because `Info` and `Log` -fields are non-deterministic. - -At some point, we've added events to `ResponseBeginBlock`, `ResponseEndBlock`, -and `ResponseDeliverTx` to give applications a way to attach some additional -information to blocks / transactions. - -Many applications seem to have started using them since. - -However, before [PR#4845](https://github.com/tendermint/tendermint/pull/4845) -there was no way to prove that certain events were a part of the result -(_unless the application developer includes them into the state tree_). - -Hence, [PR#4845](https://github.com/tendermint/tendermint/pull/4845) was -opened. In it, `GasWanted` along with `GasUsed` are included when hashing -`DeliverTx` results. Also, events from `BeginBlock`, `EndBlock` and `DeliverTx` -results are hashed into the `LastResultsHash` as follows: - -- Since we do not expect `BeginBlock` and `EndBlock` to contain many events, - these will be Protobuf encoded and included in the Merkle tree as leaves. -- `LastResultsHash` therefore is the root hash of a Merkle tree w/ 3 leafs: - proto-encoded `ResponseBeginBlock#Events`, root hash of a Merkle tree build - from `ResponseDeliverTx` responses (Log, Info and Codespace fields are - ignored), and proto-encoded `ResponseEndBlock#Events`. -- Order of events is unchanged - same as received from the ABCI application. - -[Spec PR](https://github.com/tendermint/spec/pull/97/files) - -While it's certainly good to be able to prove something, introducing new events -or removing such becomes difficult because it breaks the `LastResultsHash`. It -means that every time you add, remove or update an event, you'll need a -hard-fork. And that is undoubtedly bad for applications, which are evolving and -don't have a stable events set. - -## Decision - -As a middle ground approach, the proposal is to add the -`Block#LastResultsEvents` consensus parameter that is a list of all events that -are to be hashed in the header. - -``` -@ proto/tendermint/abci/types.proto:295 @ message BlockParams { - int64 max_bytes = 1; - // Note: must be greater or equal to -1 - int64 max_gas = 2; - // List of events, which will be hashed into the LastResultsHash - repeated string last_results_events = 3; -} -``` - -Initially the list is empty. The ABCI application can change it via `InitChain` -or `EndBlock`. - -Example: - -```go -func (app *MyApp) DeliverTx(req types.RequestDeliverTx) types.ResponseDeliverTx { - //... - events := []abci.Event{ - { - Type: "transfer", - Attributes: []abci.EventAttribute{ - {Key: []byte("sender"), Value: []byte("Bob"), Index: true}, - }, - }, - } - return types.ResponseDeliverTx{Code: code.CodeTypeOK, Events: events} -} -``` - -For "transfer" event to be hashed, the `LastResultsEvents` must contain a -string "transfer". - -## Status - -Declined - -**Until there's more stability/motivation/use-cases/demand, the decision is to -push this entirely application side and just have apps which want events to be -provable to insert them into their application-side merkle trees. Of course -this puts more pressure on their application state and makes event proving -application specific, but it might help built up a better sense of use-cases -and how this ought to ultimately be done by Tendermint.** - -## Consequences - -### Positive - -1. networks can perform parameter change proposals to update this list as new events are added -2. allows networks to avoid having to do hard-forks -3. events can still be added at-will to the application w/o breaking anything - -### Negative - -1. yet another consensus parameter -2. more things to track in the tendermint state - -## References - -- [ADR 021](./adr-021-abci-events.md) -- [Indexing transactions](../app-dev/indexing-transactions.md) - -## Appendix A. Alternative proposals - -The other proposal was to add `Hash bool` flag to the `Event`, similarly to -`Index bool` EventAttribute's field. When `true`, Tendermint would hash it into -the `LastResultsEvents`. The downside is that the logic is implicit and depends -largely on the node's operator, who decides what application code to run. The -above proposal makes it (the logic) explicit and easy to upgrade via -governance. diff --git a/docs/architecture/adr-059-evidence-composition-and-lifecycle.md b/docs/architecture/adr-059-evidence-composition-and-lifecycle.md deleted file mode 100644 index 521dee257..000000000 --- a/docs/architecture/adr-059-evidence-composition-and-lifecycle.md +++ /dev/null @@ -1,306 +0,0 @@ -# ADR 059: Evidence Composition and Lifecycle - -## Changelog - -- 04/09/2020: Initial Draft (Unabridged) -- 07/09/2020: First Version -- 13/03/2021: Ammendment to accomodate forward lunatic attack -- 29/06/2021: Add information about ABCI specific fields - -## Scope - -This document is designed to collate together and surface some predicaments involving evidence in Tendermint: both its composition and lifecycle. It then aims to find a solution to these. The scope does not extend to the verification nor detection of certain types of evidence but concerns itself mainly with the general form of evidence and how it moves from inception to application. - -## Background - -For a long time `DuplicateVoteEvidence`, formed in the consensus reactor, was the only evidence Tendermint had. It was produced whenever two votes from the same validator in the same round -was observed and thus it was designed that each evidence was for a single validator. It was predicted that there may come more forms of evidence and thus `DuplicateVoteEvidence` was used as the model for the `Evidence` interface and also for the form of the evidence data sent to the application. It is important to note that Tendermint concerns itself just with the detection and reporting of evidence and it is the responsibility of the application to exercise punishment. - -```go -type Evidence interface { //existing - Height() int64 // height of the offense - Time() time.Time // time of the offense - Address() []byte // address of the offending validator - Bytes() []byte // bytes which comprise the evidence - Hash() []byte // hash of the evidence - Verify(chainID string, pubKey crypto.PubKey) error // verify the evidence - Equal(Evidence) bool // check equality of evidence - - ValidateBasic() error - String() string -} -``` - -```go -type DuplicateVoteEvidence struct { - VoteA *Vote - VoteB *Vote - - timestamp time.Time // taken from the block time -} -``` - -Tendermint has now introduced a new type of evidence to protect light clients from being attacked. This `LightClientAttackEvidence` (see [here](https://github.com/informalsystems/tendermint-rs/blob/31ca3e64ce90786c1734caf186e30595832297a4/docs/spec/lightclient/attacks/evidence-handling.md) for more information) is vastly different to `DuplicateVoteEvidence` in that it is physically a much different size containing a complete signed header and validator set. It is formed within the light client, not the consensus reactor and requires a lot more information from state to verify (`VerifyLightClientAttack(commonHeader, trustedHeader *SignedHeader, commonVals *ValidatorSet)` vs `VerifyDuplicateVote(chainID string, pubKey PubKey)`). Finally it batches validators together (a single piece of evidence that implicates multiple malicious validators at a height) as opposed to having individual evidence (each piece of evidence is per validator per height). This evidence stretches the existing mould that was used to accommodate new types of evidence and has thus caused us to reconsider how evidence should be formatted and processed. - -```go -type LightClientAttackEvidence struct { // proposed struct in spec - ConflictingBlock *LightBlock - CommonHeight int64 - Type AttackType // enum: {Lunatic|Equivocation|Amnesia} - - timestamp time.Time // taken from the block time at the common height -} -``` -*Note: These three attack types have been proven by the research team to be exhaustive* - -## Possible Approaches for Evidence Composition - -### Individual framework - -Evidence remains on a per validator basis. This causes the least disruption to the current processes but requires that we break `LightClientAttackEvidence` into several pieces of evidence for each malicious validator. This not only has performance consequences in that there are n times as many database operations and that the gossiping of evidence will require more bandwidth then necessary (by requiring a header for each piece) but it potentially impacts our ability to validate it. In batch form, the full node can run the same process the light client did to see that 1/3 validating power was present in both the common block and the conflicting block whereas this becomes more difficult to verify individually without opening the possibility that malicious validators forge evidence against innocent . Not only that, but `LightClientAttackEvidence` also deals with amnesia attacks which unfortunately have the characteristic where we know the set of validators involved but not the subset that were actually malicious (more to be said about this later). And finally splitting the evidence into individual pieces makes it difficult to understand the severity of the attack (i.e. the total voting power involved in the attack) - -#### An example of a possible implementation path - -We would ignore amnesia evidence (as individually it's hard to make) and revert to the initial split we had before where `DuplicateVoteEvidence` is also used for light client equivocation attacks and thus we only need `LunaticEvidence`. We would also most likely need to remove `Verify` from the interface as this isn't really something that can be used. - -``` go -type LunaticEvidence struct { // individual lunatic attack - header *Header - commonHeight int64 - vote *Vote - - timestamp time.Time // once again taken from the block time at the height of the common header -} -``` - -### Batch Framework - -The last approach of this category would be to consider batch only evidence. This works fine with `LightClientAttackEvidence` but would require alterations to `DuplicateVoteEvidence` which would most likely mean that the consensus would send conflicting votes to a buffer in the evidence module which would then wrap all the votes together per height before gossiping them to other nodes and trying to commit it on chain. At a glance this may improve IO and verification speed and perhaps more importantly grouping validators gives the application and Tendermint a better overview of the severity of the attack. - -However individual evidence has the advantage that it is easy to check if a node already has that evidence meaning we just need to check hashes to know that we've already verified this evidence before. Batching evidence would imply that each node may have a different combination of duplicate votes which may complicate things. - -#### An example of a possible implementation path - -`LightClientAttackEvidence` won't change but the evidence interface will need to look like the proposed one above and `DuplicateVoteEvidence` will need to change to encompass multiple double votes. A problem with batch evidence is that it needs to be unique to avoid people from submitting different permutations. - -## Decision - -The decision is to adopt a hybrid design. - -We allow individual and batch evidence to coexist together, meaning that verification is done depending on the evidence type and that the bulk of the work is done in the evidence pool itself (including forming the evidence to be sent to the application). - - -## Detailed Design - -Evidence has the following simple interface: - -```go -type Evidence interface { //proposed - Height() int64 // height of the offense - Bytes() []byte // bytes which comprise the evidence - Hash() []byte // hash of the evidence - ValidateBasic() error - String() string -} -``` - -The changing of the interface is backwards compatible as these methods are all present in the previous version of the interface. However, networks will need to upgrade to be able to process the new evidence as verification has changed. - -We have two concrete types of evidence that fulfil this interface - -```go -type LightClientAttackEvidence struct { - ConflictingBlock *LightBlock - CommonHeight int64 // the last height at which the primary provider and witness provider had the same header - - // abci specific information - ByzantineValidators []*Validator // validators in the validator set that misbehaved in creating the conflicting block - TotalVotingPower int64 // total voting power of the validator set at the common height - Timestamp time.Time // timestamp of the block at the common height -} -``` -where the `Hash()` is the hash of the header and commonHeight. - -Note: It was also discussed whether to include the commit hash which captures the validators that signed the header. However this would open the opportunity for someone to propose multiple permutations of the same evidence (through different commit signatures) hence it was omitted. Consequentially, when it comes to verifying evidence in a block, for `LightClientAttackEvidence` we can't just check the hashes because someone could have the same hash as us but a different commit where less than 1/3 validators voted which would be an invalid version of the evidence. (see `fastCheck` for more details) - -```go -type DuplicateVoteEvidence { - VoteA *Vote - VoteB *Vote - - // abci specific information - TotalVotingPower int64 - ValidatorPower int64 - Timestamp time.Time -} -``` -where the `Hash()` is the hash of the two votes - -For both of these types of evidence, `Bytes()` represents the proto-encoded byte array format of the evidence and `ValidateBasic` is -an initial consistency check to make sure the evidence has a valid structure. - -### The Evidence Pool - -`LightClientAttackEvidence` is generated in the light client and `DuplicateVoteEvidence` in consensus. Both are sent to the evidence pool through `AddEvidence(ev Evidence) error`. The evidence pool's primary purpose is to verify evidence. It also gossips evidence to other peers' evidence pool and serves it to consensus so it can be committed on chain and the relevant information can be sent to the application in order to exercise punishment. When evidence is added, the pool first runs `Has(ev Evidence)` to check if it has already received it (by comparing hashes) and then `Verify(ev Evidence) error`. Once verified the evidence pool stores it it's pending database. There are two databases: one for pending evidence that is not yet committed and another of the committed evidence (to avoid committing evidence twice) - -#### Verification - -`Verify()` does the following: - -- Use the hash to see if we already have this evidence in our committed database. - -- Use the height to check if the evidence hasn't expired. - -- If it has expired then use the height to find the block header and check if the time has also expired in which case we drop the evidence - -- Then proceed with switch statement for each of the two evidence: - -For `DuplicateVote`: - -- Check that height, round, type and validator address are the same - -- Check that the Block ID is different - -- Check the look up table for addresses to make sure there already isn't evidence against this validator - -- Fetch the validator set and confirm that the address is in the set at the height of the attack - -- Check that the chain ID and signature is valid. - -For `LightClientAttack` - -- Fetch the common signed header and val set from the common height and use skipping verification to verify the conflicting header - -- Fetch the trusted signed header at the same height as the conflicting header and compare with the conflicting header to work out which type of attack it is and in doing so return the malicious validators. NOTE: If the node doesn't have the signed header at the height of the conflicting header, it instead fetches the latest header it has and checks to see if it can prove the evidence based on a violation of header time. This is known as forward lunatic attack. - - - If equivocation, return the validators that signed for the commits of both the trusted and signed header - - - If lunatic, return the validators from the common val set that signed in the conflicting block - - - If amnesia, return no validators (since we can't know which validators are malicious). This also means that we don't currently send amnesia evidence to the application, although we will introduce more robust amnesia evidence handling in future Tendermint Core releases - -- Check that the hashes of the conflicting header and the trusted header are different - -- In the case of a forward lunatic attack, where the trusted header height is less than the conflicting header height, the node checks that the time of the trusted header is later than the time of conflicting header. This proves that the conflicting header breaks monotonically increasing time. If the node doesn't have a trusted header with a later time then it is unable to validate the evidence for now. - -- Lastly, for each validator, check the look up table to make sure there already isn't evidence against this validator - -After verification we persist the evidence with the key `height/hash` to the pending evidence database in the evidence pool. - -#### ABCI Evidence - -Both evidence structures contain data (such as timestamp) that are necessary to be passed to the application but do not strictly constitute evidence of misbehaviour. As such, these fields are verified last. If any of these fields are invalid to a node i.e. they don't correspond with their state, nodes will reconstruct a new evidence struct from the existing fields and repopulate the abci specific fields with their own state data. - -#### Broadcasting and receiving evidence - -The evidence pool also runs a reactor that broadcasts the newly validated -evidence to all connected peers. - -Receiving evidence from other evidence reactors works in the same manner as receiving evidence from the consensus reactor or a light client. - - -#### Proposing evidence on the block - -When it comes to prevoting and precomitting a proposal that contains evidence, the full node will once again -call upon the evidence pool to verify the evidence using `CheckEvidence(ev []Evidence)`: - -This performs the following actions: - -1. Loops through all the evidence to check that nothing has been duplicated - -2. For each evidence, run `fastCheck(ev evidence)` which works similar to `Has` but instead for `LightClientAttackEvidence` if it has the -same hash it then goes on to check that the validators it has are all signers in the commit of the conflicting header. If it doesn't pass fast check (because it hasn't seen the evidence before) then it will have to verify the evidence. - -3. runs `Verify(ev Evidence)` - Note: this also saves the evidence to the db as mentioned before. - - -#### Updating application and pool - -The final part of the lifecycle is when the block is committed and the `BlockExecutor` then updates state. As part of this process, the `BlockExecutor` gets the evidence pool to create a simplified format for the evidence to be sent to the application. This happens in `ApplyBlock` where the executor calls `Update(Block, State) []abci.Evidence`. - -```go -abciResponses.BeginBlock.ByzantineValidators = evpool.Update(block, state) -``` - -Here is the format of the evidence that the application will receive. As seen above, this is stored as an array within `BeginBlock`. -The changes to the application are minimal (it is still formed one for each malicious validator) with the exception of using an enum instead of a string for the evidence type. - -```go -type Evidence struct { - // either LightClientAttackEvidence or DuplicateVoteEvidence as an enum (abci.EvidenceType) - Type EvidenceType `protobuf:"varint,1,opt,name=type,proto3,enum=tendermint.abci.EvidenceType" json:"type,omitempty"` - // The offending validator - Validator Validator `protobuf:"bytes,2,opt,name=validator,proto3" json:"validator"` - // The height when the offense occurred - Height int64 `protobuf:"varint,3,opt,name=height,proto3" json:"height,omitempty"` - // The corresponding time where the offense occurred - Time time.Time `protobuf:"bytes,4,opt,name=time,proto3,stdtime" json:"time"` - // Total voting power of the validator set in case the ABCI application does - // not store historical validators. - // https://github.com/tendermint/tendermint/issues/4581 - TotalVotingPower int64 `protobuf:"varint,5,opt,name=total_voting_power,json=totalVotingPower,proto3" json:"total_voting_power,omitempty"` -} -``` - - -This `Update()` function does the following: - -- Increments state which keeps track of both the current time and height used for measuring expiry - -- Marks evidence as committed and saves to db. This prevents validators from proposing committed evidence in the future - Note: the db just saves the height and the hash. There is no need to save the entire committed evidence - -- Forms ABCI evidence as such: (note for `DuplicateVoteEvidence` the validators array size is 1) - ```go - for _, val := range evInfo.Validators { - abciEv = append(abciEv, &abci.Evidence{ - Type: evType, // either DuplicateVote or LightClientAttack - Validator: val, // the offending validator (which includes the address, pubkey and power) - Height: evInfo.ev.Height(), // the height when the offense happened - Time: evInfo.time, // the time when the offense happened - TotalVotingPower: evInfo.totalVotingPower // the total voting power of the validator set - }) - } - ``` - -- Removes expired evidence from both pending and committed databases - -The ABCI evidence is then sent via the `BlockExecutor` to the application. - -#### Summary - -To summarize, we can see the lifecycle of evidence as such: - -![evidence_lifecycle](../imgs/evidence_lifecycle.png) - -Evidence is first detected and created in the light client and consensus reactor. It is verified and stored as `EvidenceInfo` and gossiped to the evidence pools in other nodes. The consensus reactor later communicates with the evidence pool to either retrieve evidence to be put into a block, or verify the evidence the consensus reactor has retrieved in a block. Lastly when a block is added to the chain, the block executor sends the committed evidence back to the evidence pool so a pointer to the evidence can be stored in the evidence pool and it can update it's height and time. Finally, it turns the committed evidence into ABCI evidence and through the block executor passes the evidence to the application so the application can handle it. - -## Status - -Implemented - -## Consequences - - - -### Positive - -- Evidence is better contained to the evidence pool / module -- LightClientAttack is kept together (easier for verification and bandwidth) -- Variations on commit sigs in LightClientAttack doesn't lead to multiple permutations and multiple evidence -- Address to evidence map prevents DOS attacks, where a single validator could DOS the network by flooding it with evidence submissions - -### Negative - -- Changes the `Evidence` interface and thus is a block breaking change -- Changes the ABCI `Evidence` and is thus a ABCI breaking change -- Unable to query evidence for address / time without evidence pool - -### Neutral - - -## References - - - -- [LightClientAttackEvidence](https://github.com/informalsystems/tendermint-rs/blob/31ca3e64ce90786c1734caf186e30595832297a4/docs/spec/lightclient/attacks/evidence-handling.md) diff --git a/docs/architecture/adr-060-go-api-stability.md b/docs/architecture/adr-060-go-api-stability.md deleted file mode 100644 index d900733b7..000000000 --- a/docs/architecture/adr-060-go-api-stability.md +++ /dev/null @@ -1,193 +0,0 @@ -# ADR 060: Go API Stability - -## Changelog - -- 2020-09-08: Initial version. (@erikgrinaker) - -- 2020-09-09: Tweak accepted changes, add initial public API packages, add consequences. (@erikgrinaker) - -- 2020-09-17: Clarify initial public API. (@erikgrinaker) - -## Context - -With the release of Tendermint 1.0 we will adopt [semantic versioning](https://semver.org). One major implication is a guarantee that we will not make backwards-incompatible changes until Tendermint 2.0 (except in pre-release versions). In order to provide this guarantee for our Go API, we must clearly define which of our APIs are public, and what changes are considered backwards-compatible. - -Currently, we list packages that we consider public in our [README](https://github.com/tendermint/tendermint#versioning), but since we are still at version 0.x we do not provide any backwards compatiblity guarantees at all. - -### Glossary - -* **External project:** a different Git/VCS repository or code base. - -* **External package:** a different Go package, can be a child or sibling package in the same project. - -* **Internal code:** code not intended for use in external projects. - -* **Internal directory:** code under `internal/` which cannot be imported in external projects. - -* **Exported:** a Go identifier starting with an uppercase letter, which can therefore be accessed by an external package. - -* **Private:** a Go identifier starting with a lowercase letter, which therefore cannot be accessed by an external package unless via an exported field, variable, or function/method return value. - -* **Public API:** any Go identifier that can be imported or accessed by an external project, except test code in `_test.go` files. - -* **Private API:** any Go identifier that is not accessible via a public API, including all code in the internal directory. - -## Alternative Approaches - -- Split all public APIs out to separate Go modules in separate Git repositories, and consider all Tendermint code internal and not subject to API backwards compatibility at all. This was rejected, since it has been attempted by the Tendermint project earlier, resulting in too much dependency management overhead. - -- Simply document which APIs are public and which are private. This is the current approach, but users should not be expected to self-enforce this, the documentation is not always up-to-date, and external projects will often end up depending on internal code anyway. - -## Decision - -From Tendermint 1.0, all internal code (except private APIs) will be placed in a root-level [`internal` directory](https://golang.org/cmd/go/#hdr-Internal_Directories), which the Go compiler will block for use by external projects. All exported items outside of the `internal` directory are considered a public API and subject to backwards compatibility guarantees, except files ending in `_test.go`. - -The `crypto` package may be split out to a separate module in a separate repo. This is the main general-purpose package used by external projects, and is the only Tendermint dependency in e.g. IAVL which can cause some problems for projects depending on both IAVL and Tendermint. This will be decided after further discussion. - -The `tm-db` package will remain a separate module in a separate repo. The `crypto` package may possibly be split out, pending further discussion, as this is the main general-purpose package used by other projects. - -## Detailed Design - -### Public API - -When preparing our public API for 1.0, we should keep these principles in mind: - -- Limit the number of public APIs that we start out with - we can always add new APIs later, but we can't change or remove APIs once they're made public. - -- Before an API is made public, do a thorough review of the API to make sure it covers any future needs, can accomodate expected changes, and follows good API design practices. - -The following is the minimum set of public APIs that will be included in 1.0, in some form: - -- `abci` -- packages used for constructing nodes `config`, `libs/log`, and `version` -- Client APIs, i.e. `rpc/client`, `light`, and `privval`. -- `crypto` (possibly as a separate repo) - -We may offer additional APIs as well, following further discussions internally and with other stakeholders. However, public APIs for providing custom components (e.g. reactors and mempools) are not planned for 1.0, but may be added in a later 1.x version if this is something we want to offer. - -For comparison, the following are the number of Tendermint imports in the Cosmos SDK (excluding tests), which should be mostly satisfied by the planned APIs. - -``` - 1 github.com/tendermint/tendermint/abci/server - 73 github.com/tendermint/tendermint/abci/types - 2 github.com/tendermint/tendermint/cmd/tendermint/commands - 7 github.com/tendermint/tendermint/config - 68 github.com/tendermint/tendermint/crypto - 1 github.com/tendermint/tendermint/crypto/armor - 10 github.com/tendermint/tendermint/crypto/ed25519 - 2 github.com/tendermint/tendermint/crypto/encoding - 3 github.com/tendermint/tendermint/crypto/merkle - 3 github.com/tendermint/tendermint/crypto/sr25519 - 8 github.com/tendermint/tendermint/crypto/tmhash - 1 github.com/tendermint/tendermint/crypto/xsalsa20symmetric - 11 github.com/tendermint/tendermint/libs/bytes - 2 github.com/tendermint/tendermint/libs/bytes.HexBytes - 15 github.com/tendermint/tendermint/libs/cli - 2 github.com/tendermint/tendermint/libs/cli/flags - 2 github.com/tendermint/tendermint/libs/json - 30 github.com/tendermint/tendermint/libs/log - 1 github.com/tendermint/tendermint/libs/math - 11 github.com/tendermint/tendermint/libs/os - 4 github.com/tendermint/tendermint/libs/rand - 1 github.com/tendermint/tendermint/libs/strings - 5 github.com/tendermint/tendermint/light - 1 github.com/tendermint/tendermint/internal/mempool - 3 github.com/tendermint/tendermint/node - 5 github.com/tendermint/tendermint/internal/p2p - 4 github.com/tendermint/tendermint/privval - 10 github.com/tendermint/tendermint/proto/tendermint/crypto - 1 github.com/tendermint/tendermint/proto/tendermint/libs/bits - 24 github.com/tendermint/tendermint/proto/tendermint/types - 3 github.com/tendermint/tendermint/proto/tendermint/version - 2 github.com/tendermint/tendermint/proxy - 3 github.com/tendermint/tendermint/rpc/client - 1 github.com/tendermint/tendermint/rpc/client/http - 2 github.com/tendermint/tendermint/rpc/client/local - 3 github.com/tendermint/tendermint/rpc/core/types - 1 github.com/tendermint/tendermint/rpc/jsonrpc/server - 33 github.com/tendermint/tendermint/types - 2 github.com/tendermint/tendermint/types/time - 1 github.com/tendermint/tendermint/version -``` - -### Backwards-Compatible Changes - -In Go, [almost all API changes are backwards-incompatible](https://blog.golang.org/module-compatibility) and thus exported items in public APIs generally cannot be changed until Tendermint 2.0. The only backwards-compatible changes we can make to public APIs are: - -- Adding a package. - -- Adding a new identifier to the package scope (e.g. const, var, func, struct, interface, etc.). - -- Adding a new method to a struct. - -- Adding a new field to a struct, if the zero-value preserves any old behavior. - -- Changing the order of fields in a struct. - -- Adding a variadic parameter to a named function or struct method, if the function type itself is not assignable in any public APIs (e.g. a callback). - -- Adding a new method to an interface, or a variadic parameter to an interface method, _if the interface already has a private method_ (which prevents external packages from implementing it). - -- Widening a numeric type as long as it is a named type (e.g. `type Number int32` can change to `int64`, but not `int8` or `uint32`). - -Note that public APIs can expose private types (e.g. via an exported variable, field, or function/method return value), in which case the exported fields and methods on these private types are also part of the public API and covered by its backwards compatiblity guarantees. In general, private types should never be accessible via public APIs unless wrapped in an exported interface. - -Also note that if we accept, return, export, or embed types from a dependency, we assume the backwards compatibility responsibility for that dependency, and must make sure any dependency upgrades comply with the above constraints. - -We should run CI linters for minor version branches to enforce this, e.g. [apidiff](https://go.googlesource.com/exp/+/refs/heads/master/apidiff/README.md), [breakcheck](https://github.com/gbbr/breakcheck), and [apicombat](https://github.com/bradleyfalzon/apicompat). - -#### Accepted Breakage - -The above changes can still break programs in a few ways - these are _not_ considered backwards-incompatible changes, and users are advised to avoid this usage: - -- If a program uses unkeyed struct literals (e.g. `Foo{"bar", "baz"}`) and we add fields or change the field order, the program will no longer compile or may have logic errors. - -- If a program embeds two structs in a struct, and we add a new field or method to an embedded Tendermint struct which also exists in the other embedded struct, the program will no longer compile. - -- If a program compares two structs (e.g. with `==`), and we add a new field of an incomparable type (slice, map, func, or struct that contains these) to a Tendermint struct which is compared, the program will no longer compile. - -- If a program assigns a Tendermint function to an identifier, and we add a variadic parameter to the function signature, the program will no longer compile. - -### Strategies for API Evolution - -The API guarantees above can be fairly constraining, but are unavoidable given the Go language design. The following tricks can be employed where appropriate to allow us to make changes to the API: - -- We can add a new function or method with a different name that takes additional parameters, and have the old function call the new one. - -- Functions and methods can take an options struct instead of separate parameters, to allow adding new options - this is particularly suitable for functions that take many parameters and are expected to be extended, and especially for interfaces where we cannot add new methods with different parameters at all. - -- Interfaces can include a private method, e.g. `interface { private() }`, to make them unimplementable by external packages and thus allow us to add new methods to the interface without breaking other programs. Of course, this can't be used for interfaces that should be implementable externally. - -- We can use [interface upgrades](https://avtok.com/2014/11/05/interface-upgrades.html) to allow implementers of an existing interface to also implement a new interface, as long as the old interface can still be used - e.g. the new interface `BetterReader` may have a method `ReadBetter()`, and a function that takes a `Reader` interface as an input can check if the implementer also implements `BetterReader` and in that case call `ReadBetter()` instead of `Read()`. - -## Status - -Accepted - -## Consequences - -### Positive - -- Users can safely upgrade with less fear of applications breaking, and know whether an upgrade only includes bug fixes or also functional enhancements - -- External developers have a predictable and well-defined API to build on that will be supported for some time - -- Less synchronization between teams, since there is a clearer contract and timeline for changes and they happen less frequently - -- More documentation will remain accurate, since it's not chasing a moving target - -- Less time will be spent on code churn and more time spent on functional improvements, both for the community and for our teams - -### Negative - -- Many improvements, changes, and bug fixes will have to be postponed until the next major version, possibly for a year or more - -- The pace of development will slow down, since we must work within the existing API constraints, and spend more time planning public APIs - -- External developers may lose access to some currently exported APIs and functionality - -## References - -- [#4451: Place internal APIs under internal package](https://github.com/tendermint/tendermint/issues/4451) - -- [On Pluggability](https://docs.google.com/document/d/1G08LnwSyb6BAuCVSMF3EKn47CGdhZ5wPZYJQr4-bw58/edit?ts=5f609f11) diff --git a/docs/architecture/adr-061-p2p-refactor-scope.md b/docs/architecture/adr-061-p2p-refactor-scope.md deleted file mode 100644 index 7a9cb04be..000000000 --- a/docs/architecture/adr-061-p2p-refactor-scope.md +++ /dev/null @@ -1,109 +0,0 @@ -# ADR 061: P2P Refactor Scope - -## Changelog - -- 2020-10-30: Initial version (@erikgrinaker) - -## Context - -The `p2p` package responsible for peer-to-peer networking is rather old and has a number of weaknesses, including tight coupling, leaky abstractions, lack of tests, DoS vulnerabilites, poor performance, custom protocols, and incorrect behavior. A refactor has been discussed for several years ([#2067](https://github.com/tendermint/tendermint/issues/2067)). - -Informal Systems are also building a Rust implementation of Tendermint, [Tendermint-rs](https://github.com/informalsystems/tendermint-rs), and plan to implement P2P networking support over the next year. As part of this work, they have requested adopting e.g. [QUIC](https://datatracker.ietf.org/doc/draft-ietf-quic-transport/) as a transport protocol instead of implementing the custom application-level `MConnection` stream multiplexing protocol that Tendermint currently uses. - -This ADR summarizes recent discussion with stakeholders on the scope of a P2P refactor. Specific designs and implementations will be submitted as separate ADRs. - -## Alternative Approaches - -There have been recurring proposals to adopt [LibP2P](https://libp2p.io) instead of maintaining our own P2P networking stack (see [#3696](https://github.com/tendermint/tendermint/issues/3696)). While this appears to be a good idea in principle, it would be a highly breaking protocol change, there are indications that we might have to fork and modify LibP2P, and there are concerns about the abstractions used. - -In discussions with Informal Systems we decided to begin with incremental improvements to the current P2P stack, add support for pluggable transports, and then gradually start experimenting with LibP2P as a transport layer. If this proves successful, we can consider adopting it for higher-level components at a later time. - -## Decision - -The P2P stack will be refactored and improved iteratively, in several phases: - -* **Phase 1:** code and API refactoring, maintaining protocol compatibility as far as possible. - -* **Phase 2:** additional transports and incremental protocol improvements. - -* **Phase 3:** disruptive protocol changes. - -The scope of phases 2 and 3 is still uncertain, and will be revisited once the preceding phases have been completed as we'll have a better sense of requirements and challenges. - -## Detailed Design - -Separate ADRs will be submitted for specific designs and changes in each phase, following research and prototyping. Below are objectives in order of priority. - -### Phase 1: Code and API Refactoring - -This phase will focus on improving the internal abstractions and implementations in the `p2p` package. As far as possible, it should not change the P2P protocol in a backwards-incompatible way. - -* Cleaner, decoupled abstractions for e.g. `Reactor`, `Switch`, and `Peer`. [#2067](https://github.com/tendermint/tendermint/issues/2067) [#5287](https://github.com/tendermint/tendermint/issues/5287) [#3833](https://github.com/tendermint/tendermint/issues/3833) - * Reactors should receive messages in separate goroutines or via buffered channels. [#2888](https://github.com/tendermint/tendermint/issues/2888) -* Improved peer lifecycle management. [#3679](https://github.com/tendermint/tendermint/issues/3679) [#3719](https://github.com/tendermint/tendermint/issues/3719) [#3653](https://github.com/tendermint/tendermint/issues/3653) [#3540](https://github.com/tendermint/tendermint/issues/3540) [#3183](https://github.com/tendermint/tendermint/issues/3183) [#3081](https://github.com/tendermint/tendermint/issues/3081) [#1356](https://github.com/tendermint/tendermint/issues/1356) - * Peer prioritization. [#2860](https://github.com/tendermint/tendermint/issues/2860) [#2041](https://github.com/tendermint/tendermint/issues/2041) -* Pluggable transports, with `MConnection` as one implementation. [#5587](https://github.com/tendermint/tendermint/issues/5587) [#2430](https://github.com/tendermint/tendermint/issues/2430) [#805](https://github.com/tendermint/tendermint/issues/805) -* Improved peer address handling. - * Address book refactor. [#4848](https://github.com/tendermint/tendermint/issues/4848) [#2661](https://github.com/tendermint/tendermint/issues/2661) - * Transport-agnostic peer addressing. [#5587](https://github.com/tendermint/tendermint/issues/5587) [#3782](https://github.com/tendermint/tendermint/issues/3782) [#3692](https://github.com/tendermint/tendermint/issues/3692) - * Improved detection and advertisement of own address. [#5588](https://github.com/tendermint/tendermint/issues/5588) [#4260](https://github.com/tendermint/tendermint/issues/4260) [#3716](https://github.com/tendermint/tendermint/issues/3716) [#1727](https://github.com/tendermint/tendermint/issues/1727) - * Support multiple IPs per peer. [#1521](https://github.com/tendermint/tendermint/issues/1521) [#2317](https://github.com/tendermint/tendermint/issues/2317) - -The refactor should attempt to address the following secondary objectives: testability, observability, performance, security, quality-of-service, backpressure, and DoS resilience. Much of this will be revisited as explicit objectives in phase 2. - -Ideally, the refactor should happen incrementally, with regular merges to `master` every few weeks. This will take more time overall, and cause frequent breaking changes to internal Go APIs, but it reduces the branch drift and gets the code tested sooner and more broadly. - -### Phase 2: Additional Transports and Protocol Improvements - -This phase will focus on protocol improvements and other breaking changes. The following are considered proposals that will need to be evaluated separately once the refactor is done. Additional proposals are likely to be added during phase 1. - -* QUIC transport. [#198](https://github.com/tendermint/spec/issues/198) -* Noise protocol for secret connection handshake. [#5589](https://github.com/tendermint/tendermint/issues/5589) [#3340](https://github.com/tendermint/tendermint/issues/3340) -* Peer ID in connection handshake. [#5590](https://github.com/tendermint/tendermint/issues/5590) -* Peer and service discovery (e.g. RPC nodes, state sync snapshots). [#5481](https://github.com/tendermint/tendermint/issues/5481) [#4583](https://github.com/tendermint/tendermint/issues/4583) -* Rate-limiting, backpressure, and QoS scheduling. [#4753](https://github.com/tendermint/tendermint/issues/4753) [#2338](https://github.com/tendermint/tendermint/issues/2338) -* Compression. [#2375](https://github.com/tendermint/tendermint/issues/2375) -* Improved metrics and tracing. [#3849](https://github.com/tendermint/tendermint/issues/3849) [#2600](https://github.com/tendermint/tendermint/issues/2600) -* Simplified P2P configuration options. - -### Phase 3: Disruptive Protocol Changes - -This phase covers speculative, wide-reaching proposals that are poorly defined and highly uncertain. They will be evaluated once the previous phases are done. - -* Adopt LibP2P. [#3696](https://github.com/tendermint/tendermint/issues/3696) -* Allow cross-reactor communication, possibly without channels. -* Dynamic channel advertisment, as reactors are enabled/disabled. [#4394](https://github.com/tendermint/tendermint/issues/4394) [#1148](https://github.com/tendermint/tendermint/issues/1148) -* Pubsub-style networking topology and pattern. -* Support multiple chain IDs in the same network. - -## Status - -Accepted - -## Consequences - -### Positive - -* Cleaner, simpler architecture that's easier to reason about and test, and thus hopefully less buggy. - -* Improved performance and robustness. - -* Reduced maintenance burden and increased interoperability by the possible adoption of standardized protocols such as QUIC and Noise. - -* Improved usability, with better observability, simpler configuration, and more automation (e.g. peer/service/address discovery, rate-limiting, and backpressure). - -### Negative - -* Maintaining our own P2P networking stack is resource-intensive. - -* Abstracting away the underlying transport may prevent usage of advanced transport features. - -* Breaking changes to APIs and protocols are disruptive to users. - -## References - -See issue links above. - -- [#2067: P2P Refactor](https://github.com/tendermint/tendermint/issues/2067) - -- [P2P refactor brainstorm document](https://docs.google.com/document/d/1FUTADZyLnwA9z7ndayuhAdAFRKujhh_y73D0ZFdKiOQ/edit?pli=1#) diff --git a/docs/architecture/adr-062-p2p-architecture.md b/docs/architecture/adr-062-p2p-architecture.md deleted file mode 100644 index bf8e0f01d..000000000 --- a/docs/architecture/adr-062-p2p-architecture.md +++ /dev/null @@ -1,615 +0,0 @@ -# ADR 062: P2P Architecture and Abstractions - -## Changelog - -- 2020-11-09: Initial version (@erikgrinaker) - -- 2020-11-13: Remove stream IDs, move peer errors onto channel, note on moving PEX into core (@erikgrinaker) - -- 2020-11-16: Notes on recommended reactor implementation patterns, approve ADR (@erikgrinaker) - -- 2021-02-04: Update with new P2P core and Transport API changes (@erikgrinaker). - -## Context - -In [ADR 061](adr-061-p2p-refactor-scope.md) we decided to refactor the peer-to-peer (P2P) networking stack. The first phase is to redesign and refactor the internal P2P architecture, while retaining protocol compatibility as far as possible. - -## Alternative Approaches - -Several variations of the proposed design were considered, including e.g. calling interface methods instead of passing messages (like the current architecture), merging channels with streams, exposing the internal peer data structure to reactors, being message format-agnostic via arbitrary codecs, and so on. This design was chosen because it has very loose coupling, is simpler to reason about and more convenient to use, avoids race conditions and lock contention for internal data structures, gives reactors better control of message ordering and processing semantics, and allows for QoS scheduling and backpressure in a very natural way. - -[multiaddr](https://github.com/multiformats/multiaddr) was considered as a transport-agnostic peer address format over regular URLs, but it does not appear to have very widespread adoption, and advanced features like protocol encapsulation and tunneling do not appear to be immediately useful to us. - -There were also proposals to use LibP2P instead of maintaining our own P2P stack, which were rejected (for now) in [ADR 061](adr-061-p2p-refactor-scope.md). - -The initial version of this ADR had a byte-oriented multi-stream transport API, but this had to be abandoned/postponed to maintain backwards-compatibility with the existing MConnection protocol which is message-oriented. See the rejected RFC in [tendermint/spec#227](https://github.com/tendermint/spec/pull/227) for details. - -## Decision - -The P2P stack will be redesigned as a message-oriented architecture, primarily relying on Go channels for communication and scheduling. It will use a message-oriented transport to binary messages with individual peers, bidirectional peer-addressable channels to send and receive Protobuf messages, a router to route messages between reactors and peers, and a peer manager to manage peer lifecycle information. Message passing is asynchronous with at-most-once delivery. - -## Detailed Design - -This ADR is primarily concerned with the architecture and interfaces of the P2P stack, not implementation details. The interfaces described here should therefore be considered a rough architecture outline, not a complete and final design. - -Primary design objectives have been: - -* Loose coupling between components, for a simpler, more robust, and test-friendly architecture. -* Pluggable transports (not necessarily networked). -* Better scheduling of messages, with improved prioritization, backpressure, and performance. -* Centralized peer lifecycle and connection management. -* Better peer address detection, advertisement, and exchange. -* Wire-level backwards compatibility with current P2P network protocols, except where it proves too obstructive. - -The main abstractions in the new stack are: - -* `Transport`: An arbitrary mechanism to exchange binary messages with a peer across a `Connection`. -* `Channel`: A bidirectional channel to asynchronously exchange Protobuf messages with peers using node ID addressing. -* `Router`: Maintains transport connections to relevant peers and routes channel messages. -* `PeerManager`: Manages peer lifecycle information, e.g. deciding which peers to dial and when, using a `peerStore` for storage. -* Reactor: A design pattern loosely defined as "something which listens on a channel and reacts to messages". - -These abstractions are illustrated in the following diagram (representing the internals of node A) and described in detail below. - -![P2P Architecture Diagram](img/adr-062-architecture.svg) - -### Transports - -Transports are arbitrary mechanisms for exchanging binary messages with a peer. For example, a gRPC transport would connect to a peer over TCP/IP and send data using the gRPC protocol, while an in-memory transport might communicate with a peer running in another goroutine using internal Go channels. Note that transports don't have a notion of a "peer" or "node" as such - instead, they establish connections between arbitrary endpoint addresses (e.g. IP address and port number), to decouple them from the rest of the P2P stack. - -Transports must satisfy the following requirements: - -* Be connection-oriented, and support both listening for inbound connections and making outbound connections using endpoint addresses. - -* Support sending binary messages with distinct channel IDs (although channels and channel IDs are a higher-level application protocol concept explained in the Router section, they are threaded through the transport layer as well for backwards compatibilty with the existing MConnection protocol). - -* Exchange the MConnection `NodeInfo` and public key via a node handshake, and possibly encrypt or sign the traffic as appropriate. - -The initial transport is a port of the current MConnection protocol currently used by Tendermint, and should be backwards-compatible at the wire level. An in-memory transport for testing has also been implemented. There are plans to explore a QUIC transport that may replace the MConnection protocol. - -The `Transport` interface is as follows: - -```go -// Transport is a connection-oriented mechanism for exchanging data with a peer. -type Transport interface { - // Protocols returns the protocols supported by the transport. The Router - // uses this to pick a transport for an Endpoint. - Protocols() []Protocol - - // Endpoints returns the local endpoints the transport is listening on, if any. - // How to listen is transport-dependent, e.g. MConnTransport uses Listen() while - // MemoryTransport starts listening via MemoryNetwork.CreateTransport(). - Endpoints() []Endpoint - - // Accept waits for the next inbound connection on a listening endpoint, blocking - // until either a connection is available or the transport is closed. On closure, - // io.EOF is returned and further Accept calls are futile. - Accept() (Connection, error) - - // Dial creates an outbound connection to an endpoint. - Dial(context.Context, Endpoint) (Connection, error) - - // Close stops accepting new connections, but does not close active connections. - Close() error -} -``` - -How the transport configures listening is transport-dependent, and not covered by the interface. This typically happens during transport construction, where a single instance of the transport is created and set to listen on an appropriate network interface before being passed to the router. - -#### Endpoints - -`Endpoint` represents a transport endpoint (e.g. an IP address and port). A connection always has two endpoints: one at the local node and one at the remote peer. Outbound connections to remote endpoints are made via `Dial()`, and inbound connections to listening endpoints are returned via `Accept()`. - -The `Endpoint` struct is: - -```go -// Endpoint represents a transport connection endpoint, either local or remote. -// -// Endpoints are not necessarily networked (see e.g. MemoryTransport) but all -// networked endpoints must use IP as the underlying transport protocol to allow -// e.g. IP address filtering. Either IP or Path (or both) must be set. -type Endpoint struct { - // Protocol specifies the transport protocol. - Protocol Protocol - - // IP is an IP address (v4 or v6) to connect to. If set, this defines the - // endpoint as a networked endpoint. - IP net.IP - - // Port is a network port (either TCP or UDP). If 0, a default port may be - // used depending on the protocol. - Port uint16 - - // Path is an optional transport-specific path or identifier. - Path string -} - -// Protocol identifies a transport protocol. -type Protocol string -``` - -Endpoints are arbitrary transport-specific addresses, but if they are networked they must use IP addresses and thus rely on IP as a fundamental packet routing protocol. This enables policies for address discovery, advertisement, and exchange - for example, a private `192.168.0.0/24` IP address should only be advertised to peers on that IP network, while the public address `8.8.8.8` may be advertised to all peers. Similarly, any port numbers if given must represent TCP and/or UDP port numbers, in order to use [UPnP](https://en.wikipedia.org/wiki/Universal_Plug_and_Play) to autoconfigure e.g. NAT gateways. - -Non-networked endpoints (without an IP address) are considered local, and will only be advertised to other peers connecting via the same protocol. For example, the in-memory transport used for testing uses `Endpoint{Protocol: "memory", Path: "foo"}` as an address for the node "foo", and this should only be advertised to other nodes using `Protocol: "memory"`. - -#### Connections - -A connection represents an established transport connection between two endpoints (i.e. two nodes), which can be used to exchange binary messages with logical channel IDs (corresponding to the higher-level channel IDs used in the router). Connections are set up either via `Transport.Dial()` (outbound) or `Transport.Accept()` (inbound). - -Once a connection is esablished, `Transport.Handshake()` must be called to perform a node handshake, exchanging node info and public keys to verify node identities. Node handshakes should not really be part of the transport layer (it's an application protocol concern), this exists for backwards-compatibility with the existing MConnection protocol which conflates the two. `NodeInfo` is part of the existing MConnection protocol, but does not appear to be documented in the specification -- refer to the Go codebase for details. - -The `Connection` interface is shown below. It omits certain additions that are currently implemented for backwards compatibility with the legacy P2P stack and are planned to be removed before the final release. - -```go -// Connection represents an established connection between two endpoints. -type Connection interface { - // Handshake executes a node handshake with the remote peer. It must be - // called once the connection is established, and returns the remote peer's - // node info and public key. The caller is responsible for validation. - Handshake(context.Context, NodeInfo, crypto.PrivKey) (NodeInfo, crypto.PubKey, error) - - // ReceiveMessage returns the next message received on the connection, - // blocking until one is available. Returns io.EOF if closed. - ReceiveMessage() (ChannelID, []byte, error) - - // SendMessage sends a message on the connection. Returns io.EOF if closed. - SendMessage(ChannelID, []byte) error - - // LocalEndpoint returns the local endpoint for the connection. - LocalEndpoint() Endpoint - - // RemoteEndpoint returns the remote endpoint for the connection. - RemoteEndpoint() Endpoint - - // Close closes the connection. - Close() error -} -``` - -This ADR initially proposed a byte-oriented multi-stream connection API that follows more typical networking API conventions (using e.g. `io.Reader` and `io.Writer` interfaces which easily compose with other libraries). This would also allow moving the responsibility for message framing, node handshakes, and traffic scheduling to the common router instead of reimplementing this across transports, and would allow making better use of multi-stream protocols such as QUIC. However, this would require minor breaking changes to the MConnection protocol which were rejected, see [tendermint/spec#227](https://github.com/tendermint/spec/pull/227) for details. This should be revisited when starting work on a QUIC transport. - -### Peer Management - -Peers are other Tendermint nodes. Each peer is identified by a unique `NodeID` (tied to the node's private key). - -#### Peer Addresses - -Nodes have one or more `NodeAddress` addresses expressed as URLs that they can be reached at. Examples of node addresses might be e.g.: - -* `mconn://nodeid@host.domain.com:25567/path` -* `memory:nodeid` - -Addresses are resolved into one or more transport endpoints, e.g. by resolving DNS hostnames into IP addresses. Peers should always be expressed as address URLs rather than endpoints (which are a lower-level transport construct). - -```go -// NodeID is a hex-encoded crypto.Address. It must be lowercased -// (for uniqueness) and of length 40. -type NodeID string - -// NodeAddress is a node address URL. It differs from a transport Endpoint in -// that it contains the node's ID, and that the address hostname may be resolved -// into multiple IP addresses (and thus multiple endpoints). -// -// If the URL is opaque, i.e. of the form "scheme:opaque", then the opaque part -// is expected to contain a node ID. -type NodeAddress struct { - NodeID NodeID - Protocol Protocol - Hostname string - Port uint16 - Path string -} - -// ParseNodeAddress parses a node address URL into a NodeAddress, normalizing -// and validating it. -func ParseNodeAddress(urlString string) (NodeAddress, error) - -// Resolve resolves a NodeAddress into a set of Endpoints, e.g. by expanding -// out a DNS hostname to IP addresses. -func (a NodeAddress) Resolve(ctx context.Context) ([]Endpoint, error) -``` - -#### Peer Manager - -The P2P stack needs to track a lot of internal state about peers, such as their addresses, connection state, priorities, availability, failures, retries, and so on. This responsibility has been separated out to a `PeerManager`, which track this state for the `Router` (but does not maintain the actual transport connections themselves, which is the router's responsibility). - -The `PeerManager` is a synchronous state machine, where all state transitions are serialized (implemented as synchronous method calls holding an exclusive mutex lock). Most peer state is intentionally kept internal, stored in a `peerStore` database that persists it as appropriate, and the external interfaces pass the minimum amount of information necessary in order to avoid shared state between router goroutines. This design significantly simplifies the model, making it much easier to reason about and test than if it was baked into the asynchronous ball of concurrency that the P2P networking core must necessarily be. As peer lifecycle events are expected to be relatively infrequent, this should not significantly impact performance either. - -The `Router` uses the `PeerManager` to request which peers to dial and evict, and reports in with peer lifecycle events such as connections, disconnections, and failures as they occur. The manager can reject these events (e.g. reject an inbound connection) by returning errors. This happens as follows: - -* Outbound connections, via `Transport.Dial`: - * `DialNext()`: returns a peer address to dial, or blocks until one is available. - * `DialFailed()`: reports a peer dial failure. - * `Dialed()`: reports a peer dial success. - * `Ready()`: reports the peer as routed and ready. - * `Disconnected()`: reports a peer disconnection. - -* Inbound connections, via `Transport.Accept`: - * `Accepted()`: reports an inbound peer connection. - * `Ready()`: reports the peer as routed and ready. - * `Disconnected()`: reports a peer disconnection. - -* Evictions, via `Connection.Close`: - * `EvictNext()`: returns a peer to disconnect, or blocks until one is available. - * `Disconnected()`: reports a peer disconnection. - -These calls have the following interface: - -```go -// DialNext returns a peer address to dial, blocking until one is available. -func (m *PeerManager) DialNext(ctx context.Context) (NodeAddress, error) - -// DialFailed reports a dial failure for the given address. -func (m *PeerManager) DialFailed(address NodeAddress) error - -// Dialed reports a successful outbound connection to the given address. -func (m *PeerManager) Dialed(address NodeAddress) error - -// Accepted reports a successful inbound connection from the given node. -func (m *PeerManager) Accepted(peerID NodeID) error - -// Ready reports the peer as fully routed and ready for use. -func (m *PeerManager) Ready(peerID NodeID) error - -// EvictNext returns a peer ID to disconnect, blocking until one is available. -func (m *PeerManager) EvictNext(ctx context.Context) (NodeID, error) - -// Disconnected reports a peer disconnection. -func (m *PeerManager) Disconnected(peerID NodeID) error -``` - -Internally, the `PeerManager` uses a numeric peer score to prioritize peers, e.g. when deciding which peers to dial next. The scoring policy has not yet been implemented, but should take into account e.g. node configuration such a `persistent_peers`, uptime and connection failures, performance, and so on. The manager will also attempt to automatically upgrade to better-scored peers by evicting lower-scored peers when a better one becomes available (e.g. when a persistent peer comes back online after an outage). - -The `PeerManager` should also have an API for reporting peer behavior from reactors that affects its score (e.g. signing a block increases the score, double-voting decreases it or even bans the peer), but this has not yet been designed and implemented. - -Additionally, the `PeerManager` provides `PeerUpdates` subscriptions that will receive `PeerUpdate` events whenever significant peer state changes happen. Reactors can use these e.g. to know when peers are connected or disconnected, and take appropriate action. This is currently fairly minimal: - -```go -// Subscribe subscribes to peer updates. The caller must consume the peer updates -// in a timely fashion and close the subscription when done, to avoid stalling the -// PeerManager as delivery is semi-synchronous, guaranteed, and ordered. -func (m *PeerManager) Subscribe() *PeerUpdates - -// PeerUpdate is a peer update event sent via PeerUpdates. -type PeerUpdate struct { - NodeID NodeID - Status PeerStatus -} - -// PeerStatus is a peer status. -type PeerStatus string - -const ( - PeerStatusUp PeerStatus = "up" // Connected and ready. - PeerStatusDown PeerStatus = "down" // Disconnected. -) - -// PeerUpdates is a real-time peer update subscription. -type PeerUpdates struct { ... } - -// Updates returns a channel for consuming peer updates. -func (pu *PeerUpdates) Updates() <-chan PeerUpdate - -// Close closes the peer updates subscription. -func (pu *PeerUpdates) Close() -``` - -The `PeerManager` will also be responsible for providing peer information to the PEX reactor that can be gossipped to other nodes. This requires an improved system for peer address detection and advertisement, that e.g. reliably detects peer and self addresses and only gossips private network addresses to other peers on the same network, but this system has not yet been fully designed and implemented. - -### Channels - -While low-level data exchange happens via the `Transport`, the high-level API is based on a bidirectional `Channel` that can send and receive Protobuf messages addressed by `NodeID`. A channel is identified by an arbitrary `ChannelID` identifier, and can exchange Protobuf messages of one specific type (since the type to unmarshal into must be predefined). Message delivery is asynchronous and at-most-once. - -The channel can also be used to report peer errors, e.g. when receiving an invalid or malignant message. This may cause the peer to be disconnected or banned depending on `PeerManager` policy, but should probably be replaced by a broader peer behavior API that can also report good behavior. - -A `Channel` has this interface: - -```go -// ChannelID is an arbitrary channel ID. -type ChannelID uint16 - -// Channel is a bidirectional channel to exchange Protobuf messages with peers. -type Channel struct { - ID ChannelID // Channel ID. - In <-chan Envelope // Inbound messages (peers to reactors). - Out chan<- Envelope // outbound messages (reactors to peers) - Error chan<- PeerError // Peer error reporting. - messageType proto.Message // Channel's message type, for e.g. unmarshaling. -} - -// Close closes the channel, also closing Out and Error. -func (c *Channel) Close() error - -// Envelope specifies the message receiver and sender. -type Envelope struct { - From NodeID // Sender (empty if outbound). - To NodeID // Receiver (empty if inbound). - Broadcast bool // Send to all connected peers, ignoring To. - Message proto.Message // Message payload. -} - -// PeerError is a peer error reported via the Error channel. -type PeerError struct { - NodeID NodeID - Err error -} -``` - -A channel can reach any connected peer, and will automatically (un)marshal the Protobuf messages. Message scheduling and queueing is a `Router` implementation concern, and can use any number of algorithms such as FIFO, round-robin, priority queues, etc. Since message delivery is not guaranteed, both inbound and outbound messages may be dropped, buffered, reordered, or blocked as appropriate. - -Since a channel can only exchange messages of a single type, it is often useful to use a wrapper message type with e.g. a Protobuf `oneof` field that specifies a set of inner message types that it can contain. The channel can automatically perform this (un)wrapping if the outer message type implements the `Wrapper` interface (see [Reactor Example](#reactor-example) for an example): - -```go -// Wrapper is a Protobuf message that can contain a variety of inner messages. -// If a Channel's message type implements Wrapper, the channel will -// automatically (un)wrap passed messages using the container type, such that -// the channel can transparently support multiple message types. -type Wrapper interface { - proto.Message - - // Wrap will take a message and wrap it in this one. - Wrap(proto.Message) error - - // Unwrap will unwrap the inner message contained in this message. - Unwrap() (proto.Message, error) -} -``` - -### Routers - -The router exeutes P2P networking for a node, taking instructions from and reporting events to the `PeerManager`, maintaining transport connections to peers, and routing messages between channels and peers. - -Practically all concurrency in the P2P stack has been moved into the router and reactors, while as many other responsibilities as possible have been moved into separate components such as the `Transport` and `PeerManager` that can remain largely synchronous. Limiting concurrency to a single core component makes it much easier to reason about since there is only a single concurrency structure, while the remaining components can be serial, simple, and easily testable. - -The `Router` has a very minimal API, since it is mostly driven by `PeerManager` and `Transport` events: - -```go -// Router maintains peer transport connections and routes messages between -// peers and channels. -type Router struct { - // Some details have been omitted below. - - logger log.Logger - options RouterOptions - nodeInfo NodeInfo - privKey crypto.PrivKey - peerManager *PeerManager - transports []Transport - - peerMtx sync.RWMutex - peerQueues map[NodeID]queue - - channelMtx sync.RWMutex - channelQueues map[ChannelID]queue -} - -// OpenChannel opens a new channel for the given message type. The caller must -// close the channel when done, before stopping the Router. messageType is the -// type of message passed through the channel. -func (r *Router) OpenChannel(id ChannelID, messageType proto.Message) (*Channel, error) - -// Start starts the router, connecting to peers and routing messages. -func (r *Router) Start() error - -// Stop stops the router, disconnecting from all peers and stopping message routing. -func (r *Router) Stop() error -``` - -All Go channel sends in the `Router` and reactors are blocking (the router also selects on signal channels for closure and shutdown). The responsibility for message scheduling, prioritization, backpressure, and load shedding is centralized in a core `queue` interface that is used at contention points (i.e. from all peers to a single channel, and from all channels to a single peer): - -```go -// queue does QoS scheduling for Envelopes, enqueueing and dequeueing according -// to some policy. Queues are used at contention points, i.e.: -// - Receiving inbound messages to a single channel from all peers. -// - Sending outbound messages to a single peer from all channels. -type queue interface { - // enqueue returns a channel for submitting envelopes. - enqueue() chan<- Envelope - - // dequeue returns a channel ordered according to some queueing policy. - dequeue() <-chan Envelope - - // close closes the queue. After this call enqueue() will block, so the - // caller must select on closed() as well to avoid blocking forever. The - // enqueue() and dequeue() channels will not be closed. - close() - - // closed returns a channel that's closed when the scheduler is closed. - closed() <-chan struct{} -} -``` - -The current implementation is `fifoQueue`, which is a simple unbuffered lossless queue that passes messages in the order they were received and blocks until the message is delivered (i.e. it is a Go channel). The router will need a more sophisticated queueing policy, but this has not yet been implemented. - -The internal `Router` goroutine structure and design is described in the `Router` GoDoc, which is included below for reference: - -```go -// On startup, three main goroutines are spawned to maintain peer connections: -// -// dialPeers(): in a loop, calls PeerManager.DialNext() to get the next peer -// address to dial and spawns a goroutine that dials the peer, handshakes -// with it, and begins to route messages if successful. -// -// acceptPeers(): in a loop, waits for an inbound connection via -// Transport.Accept() and spawns a goroutine that handshakes with it and -// begins to route messages if successful. -// -// evictPeers(): in a loop, calls PeerManager.EvictNext() to get the next -// peer to evict, and disconnects it by closing its message queue. -// -// When a peer is connected, an outbound peer message queue is registered in -// peerQueues, and routePeer() is called to spawn off two additional goroutines: -// -// sendPeer(): waits for an outbound message from the peerQueues queue, -// marshals it, and passes it to the peer transport which delivers it. -// -// receivePeer(): waits for an inbound message from the peer transport, -// unmarshals it, and passes it to the appropriate inbound channel queue -// in channelQueues. -// -// When a reactor opens a channel via OpenChannel, an inbound channel message -// queue is registered in channelQueues, and a channel goroutine is spawned: -// -// routeChannel(): waits for an outbound message from the channel, looks -// up the recipient peer's outbound message queue in peerQueues, and submits -// the message to it. -// -// All channel sends in the router are blocking. It is the responsibility of the -// queue interface in peerQueues and channelQueues to prioritize and drop -// messages as appropriate during contention to prevent stalls and ensure good -// quality of service. -``` - -### Reactor Example - -While reactors are a first-class concept in the current P2P stack (i.e. there is an explicit `p2p.Reactor` interface), they will simply be a design pattern in the new stack, loosely defined as "something which listens on a channel and reacts to messages". - -Since reactors have very few formal constraints, they can be implemented in a variety of ways. There is currently no recommended pattern for implementing reactors, to avoid overspecification and scope creep in this ADR. However, prototyping and developing a reactor pattern should be done early during implementation, to make sure reactors built using the `Channel` interface can satisfy the needs for convenience, deterministic tests, and reliability. - -Below is a trivial example of a simple echo reactor implemented as a function. The reactor will exchange the following Protobuf messages: - -```protobuf -message EchoMessage { - oneof inner { - PingMessage ping = 1; - PongMessage pong = 2; - } -} - -message PingMessage { - string content = 1; -} - -message PongMessage { - string content = 1; -} -``` - -Implementing the `Wrapper` interface for `EchoMessage` allows transparently passing `PingMessage` and `PongMessage` through the channel, where it will automatically be (un)wrapped in an `EchoMessage`: - -```go -func (m *EchoMessage) Wrap(inner proto.Message) error { - switch inner := inner.(type) { - case *PingMessage: - m.Inner = &EchoMessage_PingMessage{Ping: inner} - case *PongMessage: - m.Inner = &EchoMessage_PongMessage{Pong: inner} - default: - return fmt.Errorf("unknown message %T", inner) - } - return nil -} - -func (m *EchoMessage) Unwrap() (proto.Message, error) { - switch inner := m.Inner.(type) { - case *EchoMessage_PingMessage: - return inner.Ping, nil - case *EchoMessage_PongMessage: - return inner.Pong, nil - default: - return nil, fmt.Errorf("unknown message %T", inner) - } -} -``` - -The reactor itself would be implemented e.g. like this: - -```go -// RunEchoReactor wires up an echo reactor to a router and runs it. -func RunEchoReactor(router *p2p.Router, peerManager *p2p.PeerManager) error { - channel, err := router.OpenChannel(1, &EchoMessage{}) - if err != nil { - return err - } - defer channel.Close() - peerUpdates := peerManager.Subscribe() - defer peerUpdates.Close() - - return EchoReactor(context.Background(), channel, peerUpdates) -} - -// EchoReactor provides an echo service, pinging all known peers until the given -// context is canceled. -func EchoReactor(ctx context.Context, channel *p2p.Channel, peerUpdates *p2p.PeerUpdates) error { - ticker := time.NewTicker(5 * time.Second) - defer ticker.Stop() - - for { - select { - // Send ping message to all known peers every 5 seconds. - case <-ticker.C: - channel.Out <- Envelope{ - Broadcast: true, - Message: &PingMessage{Content: "👋"}, - } - - // When we receive a message from a peer, either respond to ping, output - // pong, or report peer error on unknown message type. - case envelope := <-channel.In: - switch msg := envelope.Message.(type) { - case *PingMessage: - channel.Out <- Envelope{ - To: envelope.From, - Message: &PongMessage{Content: msg.Content}, - } - - case *PongMessage: - fmt.Printf("%q replied with %q\n", envelope.From, msg.Content) - - default: - channel.Error <- PeerError{ - PeerID: envelope.From, - Err: fmt.Errorf("unexpected message %T", msg), - } - } - - // Output info about any peer status changes. - case peerUpdate := <-peerUpdates: - fmt.Printf("Peer %q changed status to %q", peerUpdate.PeerID, peerUpdate.Status) - - // Exit when context is canceled. - case <-ctx.Done(): - return nil - } - } -} -``` - -## Status - -Partially implemented ([#5670](https://github.com/tendermint/tendermint/issues/5670)) - -## Consequences - -### Positive - -* Reduced coupling and simplified interfaces should lead to better understandability, increased reliability, and more testing. - -* Using message passing via Go channels gives better control of backpressure and quality-of-service scheduling. - -* Peer lifecycle and connection management is centralized in a single entity, making it easier to reason about. - -* Detection, advertisement, and exchange of node addresses will be improved. - -* Additional transports (e.g. QUIC) can be implemented and used in parallel with the existing MConn protocol. - -* The P2P protocol will not be broken in the initial version, if possible. - -### Negative - -* Fully implementing the new design as indended is likely to require breaking changes to the P2P protocol at some point, although the initial implementation shouldn't. - -* Gradually migrating the existing stack and maintaining backwards-compatibility will be more labor-intensive than simply replacing the entire stack. - -* A complete overhaul of P2P internals is likely to cause temporary performance regressions and bugs as the implementation matures. - -* Hiding peer management information inside the `PeerManager` may prevent certain functionality or require additional deliberate interfaces for information exchange, as a tradeoff to simplify the design, reduce coupling, and avoid race conditions and lock contention. - -### Neutral - -* Implementation details around e.g. peer management, message scheduling, and peer and endpoint advertisement are not yet determined. - -## References - -* [ADR 061: P2P Refactor Scope](adr-061-p2p-refactor-scope.md) -* [#5670 p2p: internal refactor and architecture redesign](https://github.com/tendermint/tendermint/issues/5670) diff --git a/docs/architecture/adr-063-privval-grpc.md b/docs/architecture/adr-063-privval-grpc.md deleted file mode 100644 index 53fdb129c..000000000 --- a/docs/architecture/adr-063-privval-grpc.md +++ /dev/null @@ -1,109 +0,0 @@ -# ADR 063: Privval gRPC - -## Changelog - -- 23/11/2020: Initial Version (@marbar3778) - -## Context - -Validators use remote signers to help secure their keys. This system is Tendermint's recommended way to secure validators, but the path to integration with Tendermint's private validator client is plagued with custom protocols. - -Tendermint uses its own custom secure connection protocol (`SecretConnection`) and a raw tcp/unix socket connection protocol. The secure connection protocol until recently was exposed to man in the middle attacks and can take longer to integrate if not using Golang. The raw tcp connection protocol is less custom, but has been causing minute issues with users. - -Migrating Tendermint's private validator client to a widely adopted protocol, gRPC, will ease the current maintenance and integration burden experienced with the current protocol. - -## Decision - -After discussing with multiple stake holders, [gRPC](https://grpc.io/) was decided on to replace the current private validator protocol. gRPC is a widely adopted protocol in the micro-service and cloud infrastructure world. gRPC uses [protocol-buffers](https://developers.google.com/protocol-buffers) to describe its services, providing a language agnostic implementation. Tendermint uses protobuf for on disk and over the wire encoding already making the integration with gRPC simpler. - -## Alternative Approaches - -- JSON-RPC: We did not consider JSON-RPC because Tendermint uses protobuf extensively making gRPC a natural choice. - -## Detailed Design - -With the recent integration of [Protobuf](https://developers.google.com/protocol-buffers) into Tendermint the needed changes to migrate from the current private validator protocol to gRPC is not large. - -The [service definition](https://grpc.io/docs/what-is-grpc/core-concepts/#service-definition) for gRPC will be defined as: - -```proto - service PrivValidatorAPI { - rpc GetPubKey(tendermint.proto.privval.PubKeyRequest) returns (tendermint.proto.privval.PubKeyResponse); - rpc SignVote(tendermint.proto.privval.SignVoteRequest) returns (tendermint.proto.privval.SignedVoteResponse); - rpc SignProposal(tendermint.proto.privval.SignProposalRequest) returns (tendermint.proto.privval.SignedProposalResponse); - - message PubKeyRequest { - string chain_id = 1; - } - - // PubKeyResponse is a response message containing the public key. - message PubKeyResponse { - tendermint.crypto.PublicKey pub_key = 1 [(gogoproto.nullable) = false]; - } - - // SignVoteRequest is a request to sign a vote - message SignVoteRequest { - tendermint.types.Vote vote = 1; - string chain_id = 2; - } - - // SignedVoteResponse is a response containing a signed vote or an error - message SignedVoteResponse { - tendermint.types.Vote vote = 1 [(gogoproto.nullable) = false]; - } - - // SignProposalRequest is a request to sign a proposal - message SignProposalRequest { - tendermint.types.Proposal proposal = 1; - string chain_id = 2; - } - - // SignedProposalResponse is response containing a signed proposal or an error - message SignedProposalResponse { - tendermint.types.Proposal proposal = 1 [(gogoproto.nullable) = false]; - } -} -``` - -> Note: Remote Singer errors are removed in favor of [grpc status error codes](https://grpc.io/docs/guides/error/). - -In previous versions of the remote signer, Tendermint acted as the server and the remote signer as the client. In this process the client established a long lived connection providing a way for the server to make requests to the client. In the new version it has been simplified. Tendermint is the client and the remote signer is the server. This follows client and server architecture and simplifies the previous protocol. - -#### Keep Alive - -If you have worked on the private validator system you will see that we are removing the `PingRequest` and `PingResponse` messages. These messages were used to create functionality which kept the connection alive. With gRPC there is a [keep alive feature](https://github.com/grpc/grpc/blob/master/doc/keepalive.md) that will be added along side the integration to provide the same functionality. - -#### Metrics - -Remote signers are crucial to operating secure and consistently up Validators. In the past there were no metrics to tell the operator if something is wrong other than the node not signing. Integrating metrics into the client and provided server will be done with [prometheus](https://github.com/grpc-ecosystem/go-grpc-prometheus). This will be integrated into node's prometheus export for node operators. - -#### Security - -[TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security) is widely adopted with the use of gRPC. There are various forms of TLS (one-way & two-way). One way is the client identifying who the server is, while two way is both parties identifying the other. For Tendermint's use case having both parties identifying each other provides adds an extra layer of security. This requires users to generate both client and server certificates for a TLS connection. - -An insecure option will be provided for users who do not wish to secure the connection. - -#### Upgrade Path - -This is a largely breaking change for validator operators. The optimal upgrade path would be to release gRPC in a minor release, allow key management systems to migrate to the new protocol. In the next major release the current system (raw tcp/unix) is removed. This allows users to migrate to the new system and not have to coordinate upgrading the key management system alongside a network upgrade. - -The upgrade of [tmkms](https://github.com/iqlusioninc/tmkms) will be coordinated with Iqlusion. They will be able to make the necessary upgrades to allow users to migrate to gRPC from the current protocol. - -## Status - - -Implemented - -### Positive - -- Use an adopted standard for secure communication. (TLS) -- Use an adopted communication protocol. (gRPC) -- Requests are multiplexed onto the tcp connection. (http/2) -- Language agnostic service definition. - -### Negative - -- Users will need to generate certificates to use TLS. (Added step) -- Users will need to find a supported gRPC supported key management system - -### Neutral diff --git a/docs/architecture/adr-064-batch-verification.md b/docs/architecture/adr-064-batch-verification.md deleted file mode 100644 index 13bba25e4..000000000 --- a/docs/architecture/adr-064-batch-verification.md +++ /dev/null @@ -1,90 +0,0 @@ -# ADR 064: Batch Verification - -## Changelog - -- January 28, 2021: Created (@marbar3778) - -## Context - -Tendermint uses public private key cryptography for validator signing. When a block is proposed and voted on validators sign a message representing acceptance of a block, rejection is signaled via a nil vote. These signatures are also used to verify previous blocks are correct if a node is syncing. Currently, Tendermint requires each signature to be verified individually, this leads to a slow down of block times. - -Batch Verification is the process of taking many messages, keys, and signatures adding them together and verifying them all at once. The public key can be the same in which case it would mean a single user is signing many messages. In our case each public key is unique, each validator has their own and contribute a unique message. The algorithm can vary from curve to curve but the performance benefit, over single verifying messages, public keys and signatures is shared. - -## Alternative Approaches - -- Signature aggregation - - Signature aggregation is an alternative to batch verification. Signature aggregation leads to fast verification and smaller block sizes. At the time of writing this ADR there is on going work to enable signature aggregation in Tendermint. The reason why we have opted to not introduce it at this time is because every validator signs a unique message. - Signing a unique message prevents aggregation before verification. For example if we were to implement signature aggregation with BLS, there could be a potential slow down of 10x-100x in verification speeds. - -## Decision - -Adopt Batch Verification. - -## Detailed Design - -A new interface will be introduced. This interface will have three methods `NewBatchVerifier`, `Add` and `VerifyBatch`. - -```go -type BatchVerifier interface { - Add(key crypto.Pubkey, signature, message []byte) error // Add appends an entry into the BatchVerifier. - Verify() bool // Verify verifies all the entries in the BatchVerifier. If the verification fails it is unknown which entry failed and each entry will need to be verified individually. -} -``` - -- `NewBatchVerifier` creates a new verifier. This verifier will be populated with entries to be verified. -- `Add` adds an entry to the Verifier. Add accepts a public key and two slice of bytes (signature and message). -- `Verify` verifies all the entires. At the end of Verify if the underlying API does not reset the Verifier to its initial state (empty), it should be done here. This prevents accidentally reusing the verifier with entries from a previous verification. - -Above there is mention of an entry. An entry can be constructed in many ways depending on the needs of the underlying curve. A simple approach would be: - -```go -type entry struct { - pubKey crypto.Pubkey - signature []byte - message []byte -} -``` - -The main reason this approach is being taken is to prevent simple mistakes. Some APIs allow the user to create three slices and pass them to the `VerifyBatch` function but this relies on the user to safely generate all the slices (see example below). We would like to minimize the possibility of making a mistake. - -```go -func Verify(keys []crypto.Pubkey, signatures, messages[][]byte) bool -``` - -This change will not affect any users in anyway other than faster verification times. - -This new api will be used for verification in both consensus and block syncing. Within the current Verify functions there will be a check to see if the key types supports the BatchVerification API. If it does it will execute batch verification, if not single signature verification will be used. - -#### Consensus - - The process within consensus will be to wait for 2/3+ of the votes to be received, once they are received `Verify()` will be called to batch verify all the messages. The messages that come in after 2/3+ has been verified will be individually verified. - -#### Block Sync & Light Client - - The process for block sync & light client verification will be to verify only 2/3+ in a batch style. Since these processes are not participating in consensus there is no need to wait for more messages. - -If batch verifications fails for any reason, it will not be known which entry caused the failure. Verification will need to revert to single signature verification. - -Starting out, only ed25519 will support batch verification. - -## Status - -Implemented - -### Positive - -- Faster verification times, if the curve supports it - -### Negative - -- No way to see which key failed verification - - A failure means reverting back to single signature verification. - -### Neutral - -## References - -[Ed25519 Library](https://github.com/hdevalence/ed25519consensus) -[Ed25519 spec](https://ed25519.cr.yp.to/) -[Signature Aggregation for votes](https://github.com/tendermint/tendermint/issues/1319) -[Proposer-based timestamps](https://github.com/tendermint/tendermint/issues/2840) diff --git a/docs/architecture/adr-065-custom-event-indexing.md b/docs/architecture/adr-065-custom-event-indexing.md deleted file mode 100644 index b5c86ecfa..000000000 --- a/docs/architecture/adr-065-custom-event-indexing.md +++ /dev/null @@ -1,405 +0,0 @@ -# ADR 065: Custom Event Indexing - -- [ADR 065: Custom Event Indexing](#adr-065-custom-event-indexing) - - [Changelog](#changelog) - - [Status](#status) - - [Context](#context) - - [Alternative Approaches](#alternative-approaches) - - [Decision](#decision) - - [Detailed Design](#detailed-design) - - [EventSink](#eventsink) - - [Supported Sinks](#supported-sinks) - - [`KVEventSink`](#kveventsink) - - [`PSQLEventSink`](#psqleventsink) - - [Configuration](#configuration) - - [Future Improvements](#future-improvements) - - [Consequences](#consequences) - - [Positive](#positive) - - [Negative](#negative) - - [Neutral](#neutral) - - [References](#references) - -## Changelog - -- April 1, 2021: Initial Draft (@alexanderbez) -- April 28, 2021: Specify search capabilities are only supported through the KV indexer (@marbar3778) -- May 19, 2021: Update the SQL schema and the eventsink interface (@jayt106) -- Aug 30, 2021: Update the SQL schema and the psql implementation (@creachadair) - -## Status - -Accepted - -## Context - -Currently, Tendermint Core supports block and transaction event indexing through -the `tx_index.indexer` configuration. Events are captured in transactions and -are indexed via a `TxIndexer` type. Events are captured in blocks, specifically -from `BeginBlock` and `EndBlock` application responses, and are indexed via a -`BlockIndexer` type. Both of these types are managed by a single `IndexerService` -which is responsible for consuming events and sending those events off to be -indexed by the respective type. - -In addition to indexing, Tendermint Core also supports the ability to query for -both indexed transaction and block events via Tendermint's RPC layer. The ability -to query for these indexed events facilitates a great multitude of upstream client -and application capabilities, e.g. block explorers, IBC relayers, and auxiliary -data availability and indexing services. - -Currently, Tendermint only supports indexing via a `kv` indexer, which is supported -by an underlying embedded key/value store database. The `kv` indexer implements -its own indexing and query mechanisms. While the former is somewhat trivial, -providing a rich and flexible query layer is not as trivial and has caused many -issues and UX concerns for upstream clients and applications. - -The fragile nature of the proprietary `kv` query engine and the potential -performance and scaling issues that arise when a large number of consumers are -introduced, motivate the need for a more robust and flexible indexing and query -solution. - -## Alternative Approaches - -With regards to alternative approaches to a more robust solution, the only serious -contender that was considered was to transition to using [SQLite](https://www.sqlite.org/index.html). - -While the approach would work, it locks us into a specific query language and -storage layer, so in some ways it's only a bit better than our current approach. -In addition, the implementation would require the introduction of CGO into the -Tendermint Core stack, whereas right now CGO is only introduced depending on -the database used. - -## Decision - -We will adopt a similar approach to that of the Cosmos SDK's `KVStore` state -listening described in [ADR-038](https://github.com/cosmos/cosmos-sdk/blob/master/docs/architecture/adr-038-state-listening.md). - -Namely, we will perform the following: - -- Introduce a new interface, `EventSink`, that all data sinks must implement. -- Augment the existing `tx_index.indexer` configuration to now accept a series - of one or more indexer types, i.e sinks. -- Combine the current `TxIndexer` and `BlockIndexer` into a single `KVEventSink` - that implements the `EventSink` interface. -- Introduce an additional `EventSink` that is backed by [PostgreSQL](https://www.postgresql.org/). - - Implement the necessary schemas to support both block and transaction event - indexing. -- Update `IndexerService` to use a series of `EventSinks`. -- Proxy queries to the relevant sink's native query layer. -- Update all relevant RPC methods. - - -## Detailed Design - -### EventSink - -We introduce the `EventSink` interface type that all supported sinks must implement. -The interface is defined as follows: - -```go -type EventSink interface { - IndexBlockEvents(types.EventDataNewBlockHeader) error - IndexTxEvents([]*abci.TxResult) error - - SearchBlockEvents(context.Context, *query.Query) ([]int64, error) - SearchTxEvents(context.Context, *query.Query) ([]*abci.TxResult, error) - - GetTxByHash([]byte) (*abci.TxResult, error) - HasBlock(int64) (bool, error) - - Type() EventSinkType - Stop() error -} -``` - -The `IndexerService` will accept a list of one or more `EventSink` types. During -the `OnStart` method it will call the appropriate APIs on each `EventSink` to -index both block and transaction events. - -### Supported Sinks - -We will initially support two `EventSink` types out of the box. - -#### `KVEventSink` - -This type of `EventSink` is a combination of the `TxIndexer` and `BlockIndexer` -indexers, both of which are backed by a single embedded key/value database. - -A bulk of the existing business logic will remain the same, but the existing APIs -mapped to the new `EventSink` API. Both types will be removed in favor of a single -`KVEventSink` type. - -The `KVEventSink` will be the only `EventSink` enabled by default, so from a UX -perspective, operators should not notice a difference apart from a configuration -change. - -We omit `EventSink` implementation details as it should be fairly straightforward -to map the existing business logic to the new APIs. - -#### `PSQLEventSink` - -This type of `EventSink` indexes block and transaction events into a [PostgreSQL](https://www.postgresql.org/). -database. We define and automatically migrate the following schema when the -`IndexerService` starts. - -The postgres eventsink will not support `tx_search`, `block_search`, `GetTxByHash` and `HasBlock`. - -```sql --- Table Definition ---------------------------------------------- - --- The blocks table records metadata about each block. --- The block record does not include its events or transactions (see tx_results). -CREATE TABLE blocks ( - rowid BIGSERIAL PRIMARY KEY, - - height BIGINT NOT NULL, - chain_id VARCHAR NOT NULL, - - -- When this block header was logged into the sink, in UTC. - created_at TIMESTAMPTZ NOT NULL, - - UNIQUE (height, chain_id) -); - --- Index blocks by height and chain, since we need to resolve block IDs when --- indexing transaction records and transaction events. -CREATE INDEX idx_blocks_height_chain ON blocks(height, chain_id); - --- The tx_results table records metadata about transaction results. Note that --- the events from a transaction are stored separately. -CREATE TABLE tx_results ( - rowid BIGSERIAL PRIMARY KEY, - - -- The block to which this transaction belongs. - block_id BIGINT NOT NULL REFERENCES blocks(rowid), - -- The sequential index of the transaction within the block. - index INTEGER NOT NULL, - -- When this result record was logged into the sink, in UTC. - created_at TIMESTAMPTZ NOT NULL, - -- The hex-encoded hash of the transaction. - tx_hash VARCHAR NOT NULL, - -- The protobuf wire encoding of the TxResult message. - tx_result BYTEA NOT NULL, - - UNIQUE (block_id, index) -); - --- The events table records events. All events (both block and transaction) are --- associated with a block ID; transaction events also have a transaction ID. -CREATE TABLE events ( - rowid BIGSERIAL PRIMARY KEY, - - -- The block and transaction this event belongs to. - -- If tx_id is NULL, this is a block event. - block_id BIGINT NOT NULL REFERENCES blocks(rowid), - tx_id BIGINT NULL REFERENCES tx_results(rowid), - - -- The application-defined type label for the event. - type VARCHAR NOT NULL -); - --- The attributes table records event attributes. -CREATE TABLE attributes ( - event_id BIGINT NOT NULL REFERENCES events(rowid), - key VARCHAR NOT NULL, -- bare key - composite_key VARCHAR NOT NULL, -- composed type.key - value VARCHAR NULL, - - UNIQUE (event_id, key) -); - --- A joined view of events and their attributes. Events that do not have any --- attributes are represented as a single row with empty key and value fields. -CREATE VIEW event_attributes AS - SELECT block_id, tx_id, type, key, composite_key, value - FROM events LEFT JOIN attributes ON (events.rowid = attributes.event_id); - --- A joined view of all block events (those having tx_id NULL). -CREATE VIEW block_events AS - SELECT blocks.rowid as block_id, height, chain_id, type, key, composite_key, value - FROM blocks JOIN event_attributes ON (blocks.rowid = event_attributes.block_id) - WHERE event_attributes.tx_id IS NULL; - --- A joined view of all transaction events. -CREATE VIEW tx_events AS - SELECT height, index, chain_id, type, key, composite_key, value, tx_results.created_at - FROM blocks JOIN tx_results ON (blocks.rowid = tx_results.block_id) - JOIN event_attributes ON (tx_results.rowid = event_attributes.tx_id) - WHERE event_attributes.tx_id IS NOT NULL; -``` - -The `PSQLEventSink` will implement the `EventSink` interface as follows -(some details omitted for brevity): - -```go -func NewEventSink(connStr, chainID string) (*EventSink, error) { - db, err := sql.Open(driverName, connStr) - // ... - - return &EventSink{ - store: db, - chainID: chainID, - }, nil -} - -func (es *EventSink) IndexBlockEvents(h types.EventDataNewBlockHeader) error { - ts := time.Now().UTC() - - return runInTransaction(es.store, func(tx *sql.Tx) error { - // Add the block to the blocks table and report back its row ID for use - // in indexing the events for the block. - blockID, err := queryWithID(tx, ` -INSERT INTO blocks (height, chain_id, created_at) - VALUES ($1, $2, $3) - ON CONFLICT DO NOTHING - RETURNING rowid; -`, h.Header.Height, es.chainID, ts) - // ... - - // Insert the special block meta-event for height. - if err := insertEvents(tx, blockID, 0, []abci.Event{ - makeIndexedEvent(types.BlockHeightKey, fmt.Sprint(h.Header.Height)), - }); err != nil { - return fmt.Errorf("block meta-events: %w", err) - } - // Insert all the block events. Order is important here, - if err := insertEvents(tx, blockID, 0, h.ResultBeginBlock.Events); err != nil { - return fmt.Errorf("begin-block events: %w", err) - } - if err := insertEvents(tx, blockID, 0, h.ResultEndBlock.Events); err != nil { - return fmt.Errorf("end-block events: %w", err) - } - return nil - }) -} - -func (es *EventSink) IndexTxEvents(txrs []*abci.TxResult) error { - ts := time.Now().UTC() - - for _, txr := range txrs { - // Encode the result message in protobuf wire format for indexing. - resultData, err := proto.Marshal(txr) - // ... - - // Index the hash of the underlying transaction as a hex string. - txHash := fmt.Sprintf("%X", types.Tx(txr.Tx).Hash()) - - if err := runInTransaction(es.store, func(tx *sql.Tx) error { - // Find the block associated with this transaction. - blockID, err := queryWithID(tx, ` -SELECT rowid FROM blocks WHERE height = $1 AND chain_id = $2; -`, txr.Height, es.chainID) - // ... - - // Insert a record for this tx_result and capture its ID for indexing events. - txID, err := queryWithID(tx, ` -INSERT INTO tx_results (block_id, index, created_at, tx_hash, tx_result) - VALUES ($1, $2, $3, $4, $5) - ON CONFLICT DO NOTHING - RETURNING rowid; -`, blockID, txr.Index, ts, txHash, resultData) - // ... - - // Insert the special transaction meta-events for hash and height. - if err := insertEvents(tx, blockID, txID, []abci.Event{ - makeIndexedEvent(types.TxHashKey, txHash), - makeIndexedEvent(types.TxHeightKey, fmt.Sprint(txr.Height)), - }); err != nil { - return fmt.Errorf("indexing transaction meta-events: %w", err) - } - // Index any events packaged with the transaction. - if err := insertEvents(tx, blockID, txID, txr.Result.Events); err != nil { - return fmt.Errorf("indexing transaction events: %w", err) - } - return nil - - }); err != nil { - return err - } - } - return nil -} - -// SearchBlockEvents is not implemented by this sink, and reports an error for all queries. -func (es *EventSink) SearchBlockEvents(ctx context.Context, q *query.Query) ([]int64, error) - -// SearchTxEvents is not implemented by this sink, and reports an error for all queries. -func (es *EventSink) SearchTxEvents(ctx context.Context, q *query.Query) ([]*abci.TxResult, error) - -// GetTxByHash is not implemented by this sink, and reports an error for all queries. -func (es *EventSink) GetTxByHash(hash []byte) (*abci.TxResult, error) - -// HasBlock is not implemented by this sink, and reports an error for all queries. -func (es *EventSink) HasBlock(h int64) (bool, error) -``` - -### Configuration - -The current `tx_index.indexer` configuration would be changed to accept a list -of supported `EventSink` types instead of a single value. - -Example: - -```toml -[tx_index] - -indexer = [ - "kv", - "psql" -] -``` - -If the `indexer` list contains the `null` indexer, then no indexers will be used -regardless of what other values may exist. - -Additional configuration parameters might be required depending on what event -sinks are supplied to `tx_index.indexer`. The `psql` will require an additional -connection configuration. - -```toml -[tx_index] - -indexer = [ - "kv", - "psql" -] - -pqsql_conn = "postgresql://:@:/?" -``` - -Any invalid or misconfigured `tx_index` configuration should yield an error as -early as possible. - -## Future Improvements - -Although not technically required to maintain feature parity with the current -existing Tendermint indexer, it would be beneficial for operators to have a method -of performing a "re-index". Specifically, Tendermint operators could invoke an -RPC method that allows the Tendermint node to perform a re-indexing of all block -and transaction events between two given heights, H1 and H2, -so long as the block store contains the blocks and transaction results for all -the heights specified in a given range. - -## Consequences - -### Positive - -- A more robust and flexible indexing and query engine for indexing and search - block and transaction events. -- The ability to not have to support a custom indexing and query engine beyond - the legacy `kv` type. -- The ability to offload/proxy indexing and querying to the underling sink. -- Scalability and reliability that essentially comes "for free" from the underlying - sink, if it supports it. - -### Negative - -- The need to support multiple and potentially a growing set of custom `EventSink` - types. - -### Neutral - -## References - -- [Cosmos SDK ADR-038](https://github.com/cosmos/cosmos-sdk/blob/master/docs/architecture/adr-038-state-listening.md) -- [PostgreSQL](https://www.postgresql.org/) -- [SQLite](https://www.sqlite.org/index.html) diff --git a/docs/architecture/adr-066-e2e-testing.md b/docs/architecture/adr-066-e2e-testing.md deleted file mode 100644 index 528e25238..000000000 --- a/docs/architecture/adr-066-e2e-testing.md +++ /dev/null @@ -1,140 +0,0 @@ -# ADR 66: End-to-End Testing - -## Changelog - -- 2020-09-07: Initial draft (@erikgrinaker) -- 2020-09-08: Minor improvements (@erikgrinaker) -- 2021-04-12: Renamed from RFC 001 (@tessr) - -## Authors - -- Erik Grinaker (@erikgrinaker) - -## Context - -The current set of end-to-end tests under `test/` are very limited, mostly focusing on P2P testing in a standard configuration. They do not test various configurations (e.g. fast sync reactor versions, state sync, block pruning, genesis vs InitChain setup), nor do they test various network topologies (e.g. sentry node architecture). This leads to poor test coverage, which has caused several serious bugs to go unnoticed. - -We need an end-to-end test suite that can run a large number of combinations of configuration options, genesis settings, network topologies, ABCI interactions, and failure scenarios and check that the network is still functional. This ADR outlines the basic requirements and design for such a system. - -This ADR will not cover comprehensive chaos testing, only a few simple scenarios (e.g. abrupt process termination and network partitioning). Chaos testing of the core consensus algorithm should be implemented e.g. via Jepsen tests or a similar framework, or alternatively be added to these end-to-end tests at a later time. Similarly, malicious or adversarial behavior is out of scope for the first implementation, but may be added later. - -## Proposal - -### Functional Coverage - -The following lists the functionality we would like to test: - -#### Environments - -- **Topology:** single node, 4 nodes (seeds and persistent), sentry architecture, NAT (UPnP) -- **Networking:** IPv4, IPv6 -- **ABCI connection:** UNIX socket, TCP, gRPC -- **PrivVal:** file, UNIX socket, TCP - -#### Node/App Configurations - -- **Database:** goleveldb, cleveldb, boltdb, rocksdb, badgerdb -- **Fast sync:** disabled, v0, v2 -- **State sync:** disabled, enabled -- **Block pruning:** none, keep 20, keep 1, keep random -- **Role:** validator, full node -- **App persistence:** enabled, disabled -- **Node modes:** validator, full, light, seed - -#### Geneses - -- **Validators:** none (InitChain), given -- **Initial height:** 1, 1000 -- **App state:** none, given - -#### Behaviors - -- **Recovery:** stop/start, power cycling, validator outage, network partition, total network loss -- **Validators:** add, remove, change power -- **Evidence:** injection of DuplicateVoteEvidence and LightClientAttackEvidence - -### Functional Combinations - -Running separate tests for all combinations of the above functionality is not feasible, as there are millions of them. However, the functionality can be grouped into three broad classes: - -- **Global:** affects the entire network, needing a separate testnet for each combination (e.g. topology, network protocol, genesis settings) - -- **Local:** affects a single node, and can be varied per node in a testnet (e.g. ABCI/privval connections, database backend, block pruning) - -- **Temporal:** can be run after each other in the same testnet (e.g. recovery and validator changes) - -Thus, we can run separate testnets for all combinations of global options (on the order of 100). In each testnet, we run nodes with randomly generated node configurations optimized for broad coverage (i.e. if one node is using GoLevelDB, then no other node should use it if possible). And in each testnet, we sequentially and randomly pick nodes to stop/start, power cycle, add/remove, disconnect, and so on. - -All of the settings should be specified in a testnet configuration (or alternatively the seed that generated it) such that it can be retrieved from CI and debugged locally. - -A custom ABCI application will have to be built that can exhibit the necessary behavior (e.g. make validator changes, prune blocks, enable/disable persistence, and so on). - -### Test Stages - -Given a test configuration, the test runner has the following stages: - -- **Setup:** configures the Docker containers and networks, but does not start them. - -- **Initialization:** starts the Docker containers, performs fast sync/state sync. Accomodates for different start heights. - -- **Perturbation:** adds/removes validators, restarts nodes, perturbs networking, etc - liveness and readiness checked between each operation. - -- **Testing:** runs RPC tests independently against all network nodes, making sure data matches expectations and invariants hold. - -### Tests - -The general approach will be to put the network through a sequence of operations (see stages above), check basic liveness and readiness after each operation, and then once the network stabilizes run an RPC test suite against each node in the network. - -The test suite will do black-box testing against a single node's RPC service. We will be testing the behavior of the network as a whole, e.g. that a fast synced node correctly catches up to the chain head and serves basic block data via RPC. Thus the tests will not send e.g. P2P messages or examine the node database, as these are considered internal implementation details - if the network behaves correctly, presumably the internal components function correctly. Comprehensive component testing (e.g. each and every RPC method parameter) should be done via unit/integration tests. - -The tests must take into account the node configuration (e.g. some nodes may be pruned, others may not be validators), and should somehow be provided access to expected data (i.e. complete block headers for the entire chain). - -The test suite should use the Tendermint RPC client and the Tendermint light client, to exercise the client code as well. - -### Implementation Considerations - -The testnets should run in Docker Compose, both locally and in CI. This makes it easier to reproduce test failures locally. Supporting multiple test-runners (e.g. on VMs or Kubernetes) is out of scope. The same image should be used for all tests, with configuration passed via a mounted volume. - -There does not appear to be any off-the-shelf solutions that would do this for us, so we will have to roll our own on top of Docker Compose. This gives us more flexibility, but is estimated to be a few weeks of work. - -Testnets should be configured via a YAML file. These are used as inputs for the test runner, which e.g. generates Docker Compose configurations from them. An additional layer on top should generate these testnet configurations from a YAML file that specifies all the option combinations to test. - -Comprehensive testnets should run against master nightly. However, a small subset of representative testnets should run for each pull request, e.g. a four-node IPv4 network with state sync and fast sync. - -Tests should be written using the standard Go test framework (and e.g. Testify), with a helper function to fetch info from the test configuration. The test runner will run the tests separately for each network node, and the test must vary its expectations based on the node's configuration. - -It should be possible to launch a specific testnet and run individual test cases from the IDE or local terminal against a it. - -If possible, the existing `testnet` command should be extended to set up the network topologies needed by the end-to-end tests. - -## Status - -Implemented - -## Consequences - -### Positive - -- Comprehensive end-to-end test coverage of basic Tendermint functionality, exercising common code paths in the same way that users would - -- Test environments can easily be reproduced locally and debugged via standard tooling - -### Negative - -- Limited coverage of consensus correctness testing (e.g. Jepsen) - -- No coverage of malicious or adversarial behavior - -- Have to roll our own test framework, which takes engineering resources - -- Possibly slower CI times, depending on which tests are run - -- Operational costs and overhead, e.g. infrastructure costs and system maintenance - -### Neutral - -- No support for alternative infrastructure platforms, e.g. Kubernetes or VMs - -## References - -- [#5291: new end-to-end test suite](https://github.com/tendermint/tendermint/issues/5291) diff --git a/docs/architecture/adr-067-mempool-refactor.md b/docs/architecture/adr-067-mempool-refactor.md deleted file mode 100644 index 88bf6d76d..000000000 --- a/docs/architecture/adr-067-mempool-refactor.md +++ /dev/null @@ -1,303 +0,0 @@ -# ADR 067: Mempool Refactor - -- [ADR 067: Mempool Refactor](#adr-067-mempool-refactor) - - [Changelog](#changelog) - - [Status](#status) - - [Context](#context) - - [Current Design](#current-design) - - [Alternative Approaches](#alternative-approaches) - - [Prior Art](#prior-art) - - [Ethereum](#ethereum) - - [Diem](#diem) - - [Decision](#decision) - - [Detailed Design](#detailed-design) - - [CheckTx](#checktx) - - [Mempool](#mempool) - - [Eviction](#eviction) - - [Gossiping](#gossiping) - - [Performance](#performance) - - [Future Improvements](#future-improvements) - - [Consequences](#consequences) - - [Positive](#positive) - - [Negative](#negative) - - [Neutral](#neutral) - - [References](#references) - -## Changelog - -- April 19, 2021: Initial Draft (@alexanderbez) - -## Status - -Accepted - -## Context - -Tendermint Core has a reactor and data structure, mempool, that facilitates the -ephemeral storage of uncommitted transactions. Honest nodes participating in a -Tendermint network gossip these uncommitted transactions to each other if they -pass the application's `CheckTx`. In addition, block proposers select from the -mempool a subset of uncommitted transactions to include in the next block. - -Currently, the mempool in Tendermint Core is designed as a FIFO queue. In other -words, transactions are included in blocks as they are received by a node. There -currently is no explicit and prioritized ordering of these uncommitted transactions. -This presents a few technical and UX challenges for operators and applications. - -Namely, validators are not able to prioritize transactions by their fees or any -incentive aligned mechanism. In addition, the lack of prioritization also leads -to cascading effects in terms of DoS and various attack vectors on networks, -e.g. [cosmos/cosmos-sdk#8224](https://github.com/cosmos/cosmos-sdk/discussions/8224). - -Thus, Tendermint Core needs the ability for an application and its users to -prioritize transactions in a flexible and performant manner. Specifically, we're -aiming to either improve, maintain or add the following properties in the -Tendermint mempool: - -- Allow application-determined transaction priority. -- Allow efficient concurrent reads and writes. -- Allow block proposers to reap transactions efficiently by priority. -- Maintain a fixed mempool capacity by transaction size and evict lower priority - transactions to make room for higher priority transactions. -- Allow transactions to be gossiped by priority efficiently. -- Allow operators to specify a maximum TTL for transactions in the mempool before - they're automatically evicted if not selected for a block proposal in time. -- Ensure the design allows for future extensions, such as replace-by-priority and - allowing multiple pending transactions per sender, to be incorporated easily. - -Note, not all of these properties will be addressed by the proposed changes in -this ADR. However, this proposal will ensure that any unaddressed properties -can be addressed in an easy and extensible manner in the future. - -### Current Design - -![mempool](./img/mempool-v0.jpeg) - -At the core of the `v0` mempool reactor is a concurrent linked-list. This is the -primary data structure that contains `Tx` objects that have passed `CheckTx`. -When a node receives a transaction from another peer, it executes `CheckTx`, which -obtains a read-lock on the `*CListMempool`. If the transaction passes `CheckTx` -locally on the node, it is added to the `*CList` by obtaining a write-lock. It -is also added to the `cache` and `txsMap`, both of which obtain their own respective -write-locks and map a reference from the transaction hash to the `Tx` itself. - -Transactions are continuously gossiped to peers whenever a new transaction is added -to a local node's `*CList`, where the node at the front of the `*CList` is selected. -Another transaction will not be gossiped until the `*CList` notifies the reader -that there are more transactions to gossip. - -When a proposer attempts to propose a block, they will execute `ReapMaxBytesMaxGas` -on the reactor's `*CListMempool`. This call obtains a read-lock on the `*CListMempool` -and selects as many transactions as possible starting from the front of the `*CList` -moving to the back of the list. - -When a block is finally committed, a caller invokes `Update` on the reactor's -`*CListMempool` with all the selected transactions. Note, the caller must also -explicitly obtain a write-lock on the reactor's `*CListMempool`. This call -will remove all the supplied transactions from the `txsMap` and the `*CList`, both -of which obtain their own respective write-locks. In addition, the transaction -may also be removed from the `cache` which obtains it's own write-lock. - -## Alternative Approaches - -When considering which approach to take for a priority-based flexible and -performant mempool, there are two core candidates. The first candidate is less -invasive in the required set of protocol and implementation changes, which -simply extends the existing `CheckTx` ABCI method. The second candidate essentially -involves the introduction of new ABCI method(s) and would require a higher degree -of complexity in protocol and implementation changes, some of which may either -overlap or conflict with the upcoming introduction of [ABCI++](https://github.com/tendermint/spec/blob/master/rfc/004-abci%2B%2B.md). - -For more information on the various approaches and proposals, please see the -[mempool discussion](https://github.com/tendermint/tendermint/discussions/6295). - -## Prior Art - -### Ethereum - -The Ethereum mempool, specifically [Geth](https://github.com/ethereum/go-ethereum), -contains a mempool, `*TxPool`, that contains various mappings indexed by account, -such as a `pending` which contains all processable transactions for accounts -prioritized by nonce. It also contains a `queue` which is the exact same mapping -except it contains not currently processable transactions. The mempool also -contains a `priced` index of type `*txPricedList` that is a priority queue based -on transaction price. - -### Diem - -The [Diem mempool](https://github.com/diem/diem/blob/master/mempool/README.md#implementation-details) -contains a similar approach to the one we propose. Specifically, the Diem mempool -contains a mapping from `Account:[]Tx`. On top of this primary mapping from account -to a list of transactions, are various indexes used to perform certain actions. - -The main index, `PriorityIndex`. is an ordered queue of transactions that are -“consensus-ready” (i.e., they have a sequence number which is sequential to the -current sequence number for the account). This queue is ordered by gas price so -that if a client is willing to pay more (than other clients) per unit of -execution, then they can enter consensus earlier. - -## Decision - -To incorporate a priority-based flexible and performant mempool in Tendermint Core, -we will introduce new fields, `priority` and `sender`, into the `ResponseCheckTx` -type. - -We will introduce a new versioned mempool reactor, `v1` and assume an implicit -version of the current mempool reactor as `v0`. In the new `v1` mempool reactor, -we largely keep the functionality the same as `v0` except we augment the underlying -data structures. Specifically, we keep a mapping of senders to transaction objects. -On top of this mapping, we index transactions to provide the ability to efficiently -gossip and reap transactions by priority. - -## Detailed Design - -### CheckTx - -We introduce the following new fields into the `ResponseCheckTx` type: - -```diff -message ResponseCheckTx { - uint32 code = 1; - bytes data = 2; - string log = 3; // nondeterministic - string info = 4; // nondeterministic - int64 gas_wanted = 5 [json_name = "gas_wanted"]; - int64 gas_used = 6 [json_name = "gas_used"]; - repeated Event events = 7 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; - string codespace = 8; -+ int64 priority = 9; -+ string sender = 10; -} -``` - -It is entirely up the application in determining how these fields are populated -and with what values, e.g. the `sender` could be the signer and fee payer -of the transaction, the `priority` could be the cumulative sum of the fee(s). - -Only `sender` is required, while `priority` can be omitted which would result in -using the default value of zero. - -### Mempool - -The existing concurrent-safe linked-list will be replaced by a thread-safe map -of ``, i.e a mapping from `sender` to a single `*Tx` object, where -each `*Tx` is the next valid and processable transaction from the given `sender`. - -On top of this mapping, we index all transactions by priority using a thread-safe -priority queue, i.e. a [max heap](https://en.wikipedia.org/wiki/Min-max_heap). -When a proposer is ready to select transactions for the next block proposal, -transactions are selected from this priority index by highest priority order. -When a transaction is selected and reaped, it is removed from this index and -from the `` mapping. - -We define `Tx` as the following data structure: - -```go -type Tx struct { - // Tx represents the raw binary transaction data. - Tx []byte - - // Priority defines the transaction's priority as specified by the application - // in the ResponseCheckTx response. - Priority int64 - - // Sender defines the transaction's sender as specified by the application in - // the ResponseCheckTx response. - Sender string - - // Index defines the current index in the priority queue index. Note, if - // multiple Tx indexes are needed, this field will be removed and each Tx - // index will have its own wrapped Tx type. - Index int -} -``` - -### Eviction - -Upon successfully executing `CheckTx` for a new `Tx` and the mempool is currently -full, we must check if there exists a `Tx` of lower priority that can be evicted -to make room for the new `Tx` with higher priority and with sufficient size -capacity left. - -If such a `Tx` exists, we find it by obtaining a read lock and sorting the -priority queue index. Once sorted, we find the first `Tx` with lower priority and -size such that the new `Tx` would fit within the mempool's size limit. We then -remove this `Tx` from the priority queue index as well as the `` -mapping. - -This will require additional `O(n)` space and `O(n*log(n))` runtime complexity. Note that the space complexity does not depend on the size of the tx. - -### Gossiping - -We keep the existing thread-safe linked list as an additional index. Using this -index, we can efficiently gossip transactions in the same manner as they are -gossiped now (FIFO). - -Gossiping transactions will not require locking any other indexes. - -### Performance - -Performance should largely remain unaffected apart from the space overhead of -keeping an additional priority queue index and the case where we need to evict -transactions from the priority queue index. There should be no reads which -block writes on any index - -## Future Improvements - -There are a few considerable ways in which the proposed design can be improved or -expanded upon. Namely, transaction gossiping and for the ability to support -multiple transactions from the same `sender`. - -With regards to transaction gossiping, we need empirically validate whether we -need to gossip by priority. In addition, the current method of gossiping may not -be the most efficient. Specifically, broadcasting all the transactions a node -has in it's mempool to it's peers. Rather, we should explore for the ability to -gossip transactions on a request/response basis similar to Ethereum and other -protocols. Not only does this reduce bandwidth and complexity, but also allows -for us to explore gossiping by priority or other dimensions more efficiently. - -Allowing for multiple transactions from the same `sender` is important and will -most likely be a needed feature in the future development of the mempool, but for -now it suffices to have the preliminary design agreed upon. Having the ability -to support multiple transactions per `sender` will require careful thought with -regards to the interplay of the corresponding ABCI application. Regardless, the -proposed design should allow for adaptations to support this feature in a -non-contentious and backwards compatible manner. - -## Consequences - -### Positive - -- Transactions are allowed to be prioritized by the application. - -### Negative - -- Increased size of the `ResponseCheckTx` Protocol Buffer type. -- Causal ordering is NOT maintained. - - It is possible that certain transactions broadcasted in a particular order may - pass `CheckTx` but not end up being committed in a block because they fail - `CheckTx` later. e.g. Consider Tx1 that sends funds from existing - account Alice to a _new_ account Bob with priority P1 and then later - Bob's _new_ account sends funds back to Alice in Tx2 with P2, - such that P2 > P1. If executed in this order, both - transactions will pass `CheckTx`. However, when a proposer is ready to select - transactions for the next block proposal, they will select Tx2 before - Tx1 and thus Tx2 will _fail_ because Tx1 must - be executed first. This is because there is a _causal ordering_, - Tx1 ➝ Tx2. These types of situations should be rare as - most transactions are not causally ordered and can be circumvented by simply - trying again at a later point in time or by ensuring the "child" priority is - lower than the "parent" priority. In other words, if parents always have - priories that are higher than their children, then the new mempool design will - maintain causal ordering. - -### Neutral - -- A transaction that passed `CheckTx` and entered the mempool can later be evicted - at a future point in time if a higher priority transaction entered while the - mempool was full. - -## References - -- [ABCI++](https://github.com/tendermint/spec/blob/master/rfc/004-abci%2B%2B.md) -- [Mempool Discussion](https://github.com/tendermint/tendermint/discussions/6295) diff --git a/docs/architecture/adr-068-reverse-sync.md b/docs/architecture/adr-068-reverse-sync.md deleted file mode 100644 index 513bb5d03..000000000 --- a/docs/architecture/adr-068-reverse-sync.md +++ /dev/null @@ -1,97 +0,0 @@ -# ADR 068: Reverse Sync - -## Changelog - -- 20 April 2021: Initial Draft (@cmwaters) - -## Status - -Accepted - -## Context - -The advent of state sync and block pruning gave rise to the opportunity for full nodes to participate in consensus without needing complete block history. This also introduced a problem with respect to evidence handling. Nodes that didn't have all the blocks within the evidence age were incapable of validating evidence, thus halting if that evidence was committed on chain. - -[RFC005](https://github.com/tendermint/spec/blob/master/rfc/005-reverse-sync.md) was published in response to this problem and modified the spec to add a minimum block history invariant. This predominantly sought to extend state sync so that it was capable of fetching and storing the `Header`, `Commit` and `ValidatorSet` (essentially a `LightBlock`) of the last `n` heights, where `n` was calculated based from the evidence age. - -This ADR sets out to describe the design of this state sync extension as well as modifications to the light client provider and the merging of tm store. - -## Decision - -The state sync reactor will be extended by introducing 2 new P2P messages (and a new channel). - -```protobuf -message LightBlockRequest { - uint64 height = 1; -} - -message LightBlockResponse { - tendermint.types.LightBlock light_block = 1; -} -``` - -This will be used by the "reverse sync" protocol that will fetch, verify and store prior light blocks such that the node can safely participate in consensus. - -Furthermore this allows for a new light client provider which offers the ability for the `StateProvider` to use the underlying P2P stack instead of RPC. - -## Detailed Design - -This section will focus first on the reverse sync (here we call it `backfill`) mechanism as a standalone protocol and then look to decribe how it integrates within the state sync reactor and how we define the new p2p light client provider. - -```go -// Backfill fetches, verifies, and stores necessary history -// to participate in consensus and validate evidence. -func (r *Reactor) backfill(state State) error {} -``` - -`State` is used to work out how far to go back, namely we need all light blocks that have: -- a height: `h >= state.LastBlockHeight - state.ConsensusParams.Evidence.MaxAgeNumBlocks` -- a time: `t >= state.LastBlockTime - state.ConsensusParams.Evidence.MaxAgeDuration` - -Reverse Sync relies on two components: A `Dispatcher` and a `BlockQueue`. The `Dispatcher` is a pattern taken from a similar [PR](https://github.com/tendermint/tendermint/pull/4508). It is wired to the `LightBlockChannel` and allows for concurrent light block requests by shifting through a linked list of peers. This abstraction has the nice quality that it can also be used as an array of light providers for a P2P based light client. - -The `BlockQueue` is a data structure that allows for multiple workers to fetch light blocks, serializing them for the main thread which picks them off the end of the queue, verifies the hashes and persists them. - -### Integration with State Sync - -Reverse sync is a blocking process that runs directly after syncing state and before transitioning into either fast sync or consensus. - -Prior, the state sync service was not connected to any db, instead it passed the state and commit back to the node. For reverse sync, state sync will be given access to both the `StateStore` and `BlockStore` to be able to write `Header`'s, `Commit`'s and `ValidatorSet`'s and read them so as to serve other state syncing peers. - -This also means adding new methods to these respective stores in order to persist them - -### P2P Light Client Provider - -As mentioned previously, the `Dispatcher` is capable of handling requests to multiple peers. We can therefore simply peel off a `blockProvider` instance which is assigned to each peer. By giving it the chain ID, the `blockProvider` is capable of doing a basic validation of the light block before returning it to the client. - -It's important to note that because state sync doesn't have access to the evidence channel it is incapable of allowing the light client to report evidence thus `ReportEvidence` is a no op. This is not too much of a concern for reverse sync but will need to be addressed for pure p2p light clients. - -### Pruning - -A final small note is with pruning. This ADR will introduce changes that will not allow an application to prune blocks that are within the evidence age. - -## Future Work - -This ADR tries to remain within the scope of extending state sync, however the changes made opens the door for several areas to be followed up: -- Properly integrate p2p messaging in the light client package. This will require adding the evidence channel so the light client is capable of reporting evidence. We may also need to rethink the providers model (i.e. currently providers are only added on start up) -- Merge and clean up the tendermint stores (state, block and evidence). This ADR adds new methods to both the state and block store for saving headers, commits and validator sets. This doesn't quite fit with the current struct (i.e. only `BlockMeta`s instead of `Header`s are saved). We should explore consolidating this for the sake of atomicity and the opportunity for batching. There are also other areas for changes such as the way we store block parts. See [here](https://github.com/tendermint/tendermint/issues/5383) and [here](https://github.com/tendermint/tendermint/issues/4630) for more context. -- Explore opportunistic reverse sync. Technically we don't need to reverse sync if no evidence is observed. I've tried to design the protocol such that it could be possible to move it across to the evidence package if we see fit. Thus only when evidence is seen where we don't have the necessary data, do we perform a reverse sync. The problem with this is that imagine we are in consensus and some evidence pops up requiring us to first fetch and verify the last 10,000 blocks. There's no way a node could do this (sequentially) and vote before the round finishes. Also as we don't punish invalid evidence, a malicious node could easily spam the chain just to get a bunch of "stateless" nodes to perform a bunch of useless work. -- Explore full reverse sync. Currently we only fetch light blocks. There might be benefits in the future to fetch and persist entire blocks especially if we give control to the application to do this. - -## Consequences - -### Positive - -- All nodes should have sufficient history to validate all types of evidence -- State syncing nodes can use the p2p layer for light client verification of state. This has better UX and could be faster but I haven't benchmarked. - -### Negative - -- Introduces more code = more maintenance - -### Neutral - -## References - -- [Reverse Sync RFC](https://github.com/tendermint/spec/blob/master/rfc/005-reverse-sync.md) -- [Original Issue](https://github.com/tendermint/tendermint/issues/5617) diff --git a/docs/architecture/adr-069-flexible-node-intitalization.md b/docs/architecture/adr-069-flexible-node-intitalization.md deleted file mode 100644 index 4e66d88d6..000000000 --- a/docs/architecture/adr-069-flexible-node-intitalization.md +++ /dev/null @@ -1,268 +0,0 @@ -# ADR 069: Flexible Node Initialization - -## Changlog - -- 2021-06-09: Initial Draft (@tychoish) - -- 2021-07-21: Major Revision (@tychoish) - -## Status - -Proposed. - -## Context - -In an effort to support [Go-API-Stability](./adr-060-go-api-stability.md), -during the 0.35 development cycle, we have attempted to reduce the the API -surface area by moving most of the interface of the `node` package into -unexported functions, as well as moving the reactors to an `internal` -package. Having this coincide with the 0.35 release made a lot of sense -because these interfaces were _already_ changing as a result of the `p2p` -[refactor](./adr-061-p2p-refactor-scope.md), so it made sense to think a bit -more about how tendermint exposes this API. - -While the interfaces of the P2P layer and most of the node package are already -internalized, this precludes some operational patterns that are important to -users who use tendermint as a library. Specifically, introspecting the -tendermint node service and replacing components is not supported in the latest -version of the code, and some of these use cases would require maintaining a -vendor copy of the code. Adding these features requires rather extensive -(internal/implementation) changes to the `node` and `rpc` packages, and this -ADR describes a model for changing the way that tendermint nodes initialize, in -service of providing this kind of functionality. - -We consider node initialization, because the current implemention -provides strong connections between all components, as well as between -the components of the node and the RPC layer, and being able to think -about the interactions of these components will help enable these -features and help define the requirements of the node package. - -## Alternative Approaches - -These alternatives are presented to frame the design space and to -contextualize the decision in terms of product requirements. These -ideas are not inherently bad, and may even be possible or desireable -in the (distant) future, and merely provide additional context for how -we, in the moment came to our decision(s). - -### Do Nothing - -The current implementation is functional and sufficient for the vast -majority of use cases (e.g., all users of the Cosmos-SDK as well as -anyone who runs tendermint and the ABCI application in separate -processes). In the current implementation, and even previous versions, -modifying node initialization or injecting custom components required -copying most of the `node` package, which required such users -to maintain a vendored copy of tendermint. - -While this is (likely) not tenable in the long term, as users do want -more modularity, and the current service implementation is brittle and -difficult to maintain, in the short term it may be possible to delay -implementation somewhat. Eventually, however, we will need to make the -`node` package easier to maintain and reason about. - -### Generic Service Pluggability - -One possible system design would export interfaces (in the Golang -sense) for all components of the system, to permit runtime dependency -injection of all components in the system, so that users can compose -tendermint nodes of arbitrary user-supplied components. - -Although this level of customization would provide benefits, it would be a huge -undertaking (particularly with regards to API design work) that we do not have -scope for at the moment. Eventually providing support for some kinds of -pluggability may be useful, so the current solution does not explicitly -foreclose the possibility of this alternative. - -### Abstract Dependency Based Startup and Shutdown - -The main proposal in this document makes tendermint node initialization simpler -and more abstract, but the system lacks a number of -features which daemon/service initialization could provide, such as a -system allowing the authors of services to control initialization and shutdown order -of components using dependency relationships. - -Such a system could work by allowing services to declare -initialization order dependencies to other reactors (by ID, perhaps) -so that the node could decide the initialization based on the -dependencies declared by services rather than requiring the node to -encode this logic directly. - -This level of configuration is probably more complicated than is needed. Given -that the authors of components in the current implementation of tendermint -already *do* need to know about other components, a dependency-based system -would probably be overly-abstract at this stage. - -## Decisions - -- To the greatest extent possible, factor the code base so that - packages are responsible for their own initialization, and minimize - the amount of code in the `node` package itself. - -- As a design goal, reduce direct coupling and dependencies between - components in the implementation of `node`. - -- Begin iterating on a more-flexible internal framework for - initializing tendermint nodes to make the initatilization process - less hard-coded by the implementation of the node objects. - - - Reactors should not need to expose their interfaces *within* the - implementation of the node type - - - This refactoring should be entirely opaque to users. - - - These node initialization changes should not require a - reevaluation of the `service.Service` or a generic initialization - orchestration framework. - -- Do not proactively provide a system for injecting - components/services within a tendtermint node, though make it - possible to retrofit this kind of plugability in the future if - needed. - -- Prioritize implementation of p2p-based statesync reactor to obviate - need for users to inject a custom state-sync provider. - -## Detailed Design - -The [current -nodeImpl](https://github.com/tendermint/tendermint/blob/master/node/node.go#L47) -includes direct references to the implementations of each of the -reactors, which should be replaced by references to `service.Service` -objects. This will require moving construction of the [rpc -service](https://github.com/tendermint/tendermint/blob/master/node/node.go#L771) -into the constructor of -[makeNode](https://github.com/tendermint/tendermint/blob/master/node/node.go#L126). One -possible implementation of this would be to eliminate the current -`ConfigureRPC` method on the node package and instead [configure it -here](https://github.com/tendermint/tendermint/pull/6798/files#diff-375d57e386f20eaa5f09f02bb9d28bfc48ac3dca18d0325f59492208219e5618R441). - -To avoid adding complexity to the `node` package, we will add a -composite service implementation to the `service` package -that implements `service.Service` and is composed of a sequence of -underlying `service.Service` objects and handles their -startup/shutdown in the specified sequential order. - -Consensus, blocksync (*née* fast sync), and statesync all depend on -each other, and have significant initialization dependencies that are -presently encoded in the `node` package. As part of this change, a -new package/component (likely named `blocks` located at -`internal/blocks`) will encapsulate the initialization of these block -management areas of the code. - -### Injectable Component Option - -This section briefly describes a possible implementation for -user-supplied services running within a node. This should not be -implemented unless user-supplied components are a hard requirement for -a user. - -In order to allow components to be replaced, a new public function -will be added to the public interface of `node` with a signature that -resembles the following: - -```go -func NewWithServices(conf *config.Config, - logger log.Logger, - cf proxy.ClientCreator, - gen *types.GenesisDoc, - srvs []service.Service, -) (service.Service, error) { -``` - -The `service.Service` objects will be initialized in the order supplied, after -all pre-configured/default services have started (and shut down in reverse -order). The given services may implement additional interfaces, allowing them -to replace specific default services. `NewWithServices` will validate input -service lists with the following rules: - -- None of the services may already be running. -- The caller may not supply more than one replacement reactor for a given - default service type. - -If callers violate any of these rules, `NewWithServices` will return -an error. To retract support for this kind of operation in the future, -the function can be modified to *always* return an error. - -## Consequences - -### Positive - -- The node package will become easier to maintain. - -- It will become easier to add additional services within tendermint - nodes. - -- It will become possible to replace default components in the node - package without vendoring the tendermint repo and modifying internal - code. - -- The current end-to-end (e2e) test suite will be able to prevent any - regressions, and the new functionality can be thoroughly unit tested. - -- The scope of this project is very narrow, which minimizes risk. - -### Negative - -- This increases our reliance on the `service.Service` interface which - is probably not an interface that we want to fully commit to. - -- This proposal implements a fairly minimal set of functionality and - leaves open the possibility for many additional features which are - not included in the scope of this proposal. - -### Neutral - -N/A - -## Open Questions - -- To what extent does this new initialization framework need to accommodate - the legacy p2p stack? Would it be possible to delay a great deal of this - work to the 0.36 cycle to avoid this complexity? - - - Answer: _depends on timing_, and the requirement to ship pluggable reactors in 0.35. - -- Where should additional public types be exported for the 0.35 - release? - - Related to the general project of API stabilization we want to deprecate - the `types` package, and move its contents into a new `pkg` hierarchy; - however, the design of the `pkg` interface is currently underspecified. - If `types` is going to remain for the 0.35 release, then we should consider - the impact of using multiple organizing modalities for this code within a - single release. - -## Future Work - -- Improve or simplify the `service.Service` interface. There are some - pretty clear limitations with this interface as written (there's no - way to timeout slow startup or shut down, the cycle between the - `service.BaseService` and `service.Service` implementations is - troubling, the default panic in `OnReset` seems troubling.) - -- As part of the refactor of `service.Service` have all services/nodes - respect the lifetime of a `context.Context` object, and avoid the - current practice of creating `context.Context` objects in p2p and - reactor code. This would be required for in-process multi-tenancy. - -- Support explicit dependencies between components and allow for - parallel startup, so that different reactors can startup at the same - time, where possible. - -## References - -- [the component - graph](https://peter.bourgon.org/go-for-industrial-programming/#the-component-graph) - as a framing for internal service construction. - -## Appendix - -### Dependencies - -There's a relationship between the blockchain and consensus reactor -described by the following dependency graph makes replacing some of -these components more difficult relative to other reactors or -components. - -![consensus blockchain dependency graph](./img/consensus_blockchain.png) diff --git a/docs/architecture/adr-071-proposer-based-timestamps.md b/docs/architecture/adr-071-proposer-based-timestamps.md deleted file mode 100644 index c23488005..000000000 --- a/docs/architecture/adr-071-proposer-based-timestamps.md +++ /dev/null @@ -1,445 +0,0 @@ -# ADR 71: Proposer-Based Timestamps - -* [Changelog](#changelog) -* [Status](#status) -* [Context](#context) -* [Alternative Approaches](#alternative-approaches) - * [Remove timestamps altogether](#remove-timestamps-altogether) -* [Decision](#decision) -* [Detailed Design](#detailed-design) - * [Overview](#overview) - * [Proposal Timestamp and Block Timestamp](#proposal-timestamp-and-block-timestamp) - * [Saving the timestamp across heights](#saving-the-timestamp-across-heights) - * [Changes to `CommitSig`](#changes-to-commitsig) - * [Changes to `Commit`](#changes-to-commit) - * [Changes to `Vote` messages](#changes-to-vote-messages) - * [New consensus parameters](#new-consensus-parameters) - * [Changes to `Header`](#changes-to-header) - * [Changes to the block proposal step](#changes-to-the-block-proposal-step) - * [Proposer selects proposal timestamp](#proposer-selects-proposal-timestamp) - * [Proposer selects block timestamp](#proposer-selects-block-timestamp) - * [Proposer waits](#proposer-waits) - * [Changes to the propose step timeout](#changes-to-the-propose-step-timeout) - * [Changes to validation rules](#changes-to-validation-rules) - * [Proposal timestamp validation](#proposal-timestamp-validation) - * [Block timestamp validation](#block-timestamp-validation) - * [Changes to the prevote step](#changes-to-the-prevote-step) - * [Changes to the precommit step](#changes-to-the-precommit-step) - * [Changes to locking a block](#changes-to-locking-a-block) - * [Remove voteTime Completely](#remove-votetime-completely) -* [Future Improvements](#future-improvements) -* [Consequences](#consequences) - * [Positive](#positive) - * [Neutral](#neutral) - * [Negative](#negative) -* [References](#references) - -## Changelog - - - July 15 2021: Created by @williambanfield - - Aug 4 2021: Draft completed by @williambanfield - - Aug 5 2021: Draft updated to include data structure changes by @williambanfield - - Aug 20 2021: Language edits completed by @williambanfield - -## Status - - **Accepted** - -## Context - -Tendermint currently provides a monotonically increasing source of time known as [BFTTime](https://github.com/tendermint/spec/blob/master/spec/consensus/bft-time.md). -This mechanism for producing a source of time is reasonably simple. -Each correct validator adds a timestamp to each `Precommit` message it sends. -The timestamp it sends is either the validator's current known Unix time or one millisecond greater than the previous block time, depending on which value is greater. -When a block is produced, the proposer chooses the block timestamp as the weighted median of the times in all of the `Precommit` messages the proposer received. -The weighting is proportional to the amount of voting power, or stake, a validator has on the network. -This mechanism for producing timestamps is both deterministic and byzantine fault tolerant. - -This current mechanism for producing timestamps has a few drawbacks. -Validators do not have to agree at all on how close the selected block timestamp is to their own currently known Unix time. -Additionally, any amount of voting power `>1/3` may directly control the block timestamp. -As a result, it is quite possible that the timestamp is not particularly meaningful. - -These drawbacks present issues in the Tendermint protocol. -Timestamps are used by light clients to verify blocks. -Light clients rely on correspondence between their own currently known Unix time and the block timestamp to verify blocks they see; -However, their currently known Unix time may be greatly divergent from the block timestamp as a result of the limitations of `BFTTime`. - -The proposer-based timestamps specification suggests an alternative approach for producing block timestamps that remedies these issues. -Proposer-based timestamps alter the current mechanism for producing block timestamps in two main ways: - -1. The block proposer is amended to offer up its currently known Unix time as the timestamp for the next block. -1. Correct validators only approve the proposed block timestamp if it is close enough to their own currently known Unix time. - -The result of these changes is a more meaningful timestamp that cannot be controlled by `<= 2/3` of the validator voting power. -This document outlines the necessary code changes in Tendermint to implement the corresponding [proposer-based timestamps specification](https://github.com/tendermint/spec/tree/master/spec/consensus/proposer-based-timestamp). - -## Alternative Approaches - -### Remove timestamps altogether - -Computer clocks are bound to skew for a variety of reasons. -Using timestamps in our protocol means either accepting the timestamps as not reliable or impacting the protocol’s liveness guarantees. -This design requires impacting the protocol’s liveness in order to make the timestamps more reliable. -An alternate approach is to remove timestamps altogether from the block protocol. -`BFTTime` is deterministic but may be arbitrarily inaccurate. -However, having a reliable source of time is quite useful for applications and protocols built on top of a blockchain. - -We therefore decided not to remove the timestamp. -Applications often wish for some transactions to occur on a certain day, on a regular period, or after some time following a different event. -All of these require some meaningful representation of agreed upon time. -The following protocols and application features require a reliable source of time: -* Tendermint Light Clients [rely on correspondence between their known time](https://github.com/tendermint/spec/blob/master/spec/light-client/verification/README.md#definitions-1) and the block time for block verification. -* Tendermint Evidence validity is determined [either in terms of heights or in terms of time](https://github.com/tendermint/spec/blob/8029cf7a0fcc89a5004e173ec065aa48ad5ba3c8/spec/consensus/evidence.md#verification). -* Unbonding of staked assets in the Cosmos Hub [occurs after a period of 21 days](https://github.com/cosmos/governance/blob/ce75de4019b0129f6efcbb0e752cd2cc9e6136d3/params-change/Staking.md#unbondingtime). -* IBC packets can use either a [timestamp or a height to timeout packet delivery](https://docs.cosmos.network/v0.43/ibc/overview.html#acknowledgements). - -Finally, inflation distribution in the Cosmos Hub uses an approximation of time to calculate an annual percentage rate. -This approximation of time is calculated using [block heights with an estimated number of blocks produced in a year](https://github.com/cosmos/governance/blob/master/params-change/Mint.md#blocksperyear). -Proposer-based timestamps will allow this inflation calculation to use a more meaningful and accurate source of time. - - -## Decision - -Implement proposer-based timestamps and remove `BFTTime`. - -## Detailed Design - -### Overview - -Implementing proposer-based timestamps will require a few changes to Tendermint’s code. -These changes will be to the following components: -* The `internal/consensus/` package. -* The `state/` package. -* The `Vote`, `CommitSig`, `Commit` and `Header` types. -* The consensus parameters. - -### Proposal Timestamp and Block Timestamp - -This design discusses two timestamps: (1) The timestamp in the block and (2) the timestamp in the proposal message. -The existence and use of both of these timestamps can get a bit confusing, so some background is given here to clarify their uses. - -The [proposal message currently has a timestamp](https://github.com/tendermint/tendermint/blob/e5312942e30331e7c42b75426da2c6c9c00ae476/types/proposal.go#L31). -This timestamp is the current Unix time known to the proposer when sending the `Proposal` message. -This timestamp is not currently used as part of consensus. -The changes in this ADR will begin using the proposal message timestamp as part of consensus. -We will refer to this as the **proposal timestamp** throughout this design. - -The block has a timestamp field [in the header](https://github.com/tendermint/tendermint/blob/dc7c212c41a360bfe6eb38a6dd8c709bbc39aae7/types/block.go#L338). -This timestamp is set currently as part of Tendermint’s `BFTtime` algorithm. -It is set when a block is proposed and it is checked by the validators when they are deciding to prevote the block. -This field will continue to be used but the logic for creating and validating this timestamp will change. -We will refer to this as the **block timestamp** throughout this design. - -At a high level, the proposal timestamp from height `H` is used as the block timestamp at height `H+1`. -The following image shows this relationship. -The rest of this document describes the code changes that will make this possible. - -![](./img/pbts-message.png) - -### Saving the timestamp across heights - -Currently, `BFTtime` uses `LastCommit` to construct the block timestamp. -The `LastCommit` is created at height `H-1` and is saved in the state store to be included in the block at height `H`. -`BFTtime` takes the weighted median of the timestamps in `LastCommit.CommitSig` to build the timestamp for height `H`. - -For proposer-based timestamps, the `LastCommit.CommitSig` timestamps will no longer be used to build the timestamps for height `H`. -Instead, the proposal timestamp from height `H-1` will become the block timestamp for height `H`. -To enable this, we will add a `Timestamp` field to the `Commit` struct. -This field will be populated at each height with the proposal timestamp decided on at the previous height. -This timestamp will also be saved with the rest of the commit in the state store [when the commit is finalized](https://github.com/tendermint/tendermint/blob/e8013281281985e3ada7819f42502b09623d24a0/internal/consensus/state.go#L1611) so that it can be recovered if Tendermint crashes. -Changes to the `CommitSig` and `Commit` struct are detailed below. - -### Changes to `CommitSig` - -The [CommitSig](https://github.com/tendermint/tendermint/blob/a419f4df76fe4aed668a6c74696deabb9fe73211/types/block.go#L604) struct currently contains a timestamp. -This timestamp is the current Unix time known to the validator when it issued a `Precommit` for the block. -This timestamp is no longer used and will be removed in this change. - -`CommitSig` will be updated as follows: - -```diff -type CommitSig struct { - BlockIDFlag BlockIDFlag `json:"block_id_flag"` - ValidatorAddress Address `json:"validator_address"` --- Timestamp time.Time `json:"timestamp"` - Signature []byte `json:"signature"` -} -``` - -### Changes to `Commit` - -The [Commit](https://github.com/tendermint/tendermint/blob/a419f4df76fe4aed668a6c74696deabb9fe73211/types/block.go#L746) struct does not currently contain a timestamp. -The timestamps in the `Commit.CommitSig` entries are currently used to build the block timestamp. -With these timestamps removed, the commit time will instead be stored in the `Commit` struct. - -`Commit` will be updated as follows. - -```diff -type Commit struct { - Height int64 `json:"height"` - Round int32 `json:"round"` -++ Timestamp time.Time `json:"timestamp"` - BlockID BlockID `json:"block_id"` - Signatures []CommitSig `json:"signatures"` -} -``` - -### Changes to `Vote` messages - -`Precommit` and `Prevote` messages use a common [Vote struct](https://github.com/tendermint/tendermint/blob/a419f4df76fe4aed668a6c74696deabb9fe73211/types/vote.go#L50). -This struct currently contains a timestamp. -This timestamp is set using the [voteTime](https://github.com/tendermint/tendermint/blob/e8013281281985e3ada7819f42502b09623d24a0/internal/consensus/state.go#L2241) function and therefore vote times correspond to the current Unix time known to the validator. -For precommits, this timestamp is used to construct the [CommitSig that is included in the block in the LastCommit](https://github.com/tendermint/tendermint/blob/e8013281281985e3ada7819f42502b09623d24a0/types/block.go#L754) field. -For prevotes, this field is unused. -Proposer-based timestamps will use the [RoundState.Proposal](https://github.com/tendermint/tendermint/blob/c3ae6f5b58e07b29c62bfdc5715b6bf8ae5ee951/internal/consensus/types/round_state.go#L76) timestamp to construct the `signedBytes` `CommitSig`. -This timestamp is therefore no longer useful and will be dropped. - -`Vote` will be updated as follows: - -```diff -type Vote struct { - Type tmproto.SignedMsgType `json:"type"` - Height int64 `json:"height"` - Round int32 `json:"round"` - BlockID BlockID `json:"block_id"` // zero if vote is nil. --- Timestamp time.Time `json:"timestamp"` - ValidatorAddress Address `json:"validator_address"` - ValidatorIndex int32 `json:"validator_index"` - Signature []byte `json:"signature"` -} -``` - -### New consensus parameters - -The proposer-based timestamp specification includes multiple new parameters that must be the same among all validators. -These parameters are `PRECISION`, `MSGDELAY`, and `ACCURACY`. - -The `PRECISION` and `MSGDELAY` parameters are used to determine if the proposed timestamp is acceptable. -A validator will only Prevote a proposal if the proposal timestamp is considered `timely`. -A proposal timestamp is considered `timely` if it is within `PRECISION` and `MSGDELAY` of the Unix time known to the validator. -More specifically, a proposal timestamp is `timely` if `validatorLocalTime - PRECISION < proposalTime < validatorLocalTime + PRECISION + MSGDELAY`. - -Because the `PRECISION` and `MSGDELAY` parameters must be the same across all validators, they will be added to the [consensus parameters](https://github.com/tendermint/tendermint/blob/master/proto/tendermint/types/params.proto#L13) as [durations](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Duration). - -The proposer-based timestamp specification also includes a [new ACCURACY parameter](https://github.com/tendermint/spec/blob/master/spec/consensus/proposer-based-timestamp/pbts-sysmodel_001_draft.md#pbts-clocksync-external0). -Intuitively, `ACCURACY` represents the difference between the ‘real’ time and the currently known time of correct validators. -The currently known Unix time of any validator is always somewhat different from real time. -`ACCURACY` is the largest such difference between each validator's time and real time taken as an absolute value. -This is not something a computer can determine on its own and must be specified as an estimate by community running a Tendermint-based chain. -It is used in the new algorithm to [calculate a timeout for the propose step](https://github.com/tendermint/spec/blob/master/spec/consensus/proposer-based-timestamp/pbts-algorithm_001_draft.md#pbts-alg-startround0). -`ACCURACY` is assumed to be the same across all validators and therefore should be included as a consensus parameter. - -The consensus will be updated to include this `Timestamp` field as follows: - -```diff -type ConsensusParams struct { - Block BlockParams `json:"block"` - Evidence EvidenceParams `json:"evidence"` - Validator ValidatorParams `json:"validator"` - Version VersionParams `json:"version"` -++ Timestamp TimestampParams `json:"timestamp"` -} -``` - -```go -type TimestampParams struct { - Accuracy time.Duration `json:"accuracy"` - Precision time.Duration `json:"precision"` - MsgDelay time.Duration `json:"msg_delay"` -} -``` - -### Changes to `Header` - -The [Header](https://github.com/tendermint/tendermint/blob/a419f4df76fe4aed668a6c74696deabb9fe73211/types/block.go#L338) struct currently contains a timestamp. -This timestamp is set as the `BFTtime` derived from the block's `LastCommit.CommitSig` timestamps. -This timestamp will no longer be derived from the `LastCommit.CommitSig` timestamps and will instead be included directly into the block's `LastCommit`. -This timestamp will therfore be identical in both the `Header` and the `LastCommit`. -To clarify that the timestamp in the header corresponds to the `LastCommit`'s time, we will rename this timestamp field to `last_timestamp`. - -`Header` will be updated as follows: - -```diff -type Header struct { - // basic block info - Version version.Consensus `json:"version"` - ChainID string `json:"chain_id"` - Height int64 `json:"height"` --- Time time.Time `json:"time"` -++ LastTimestamp time.Time `json:"last_timestamp"` - - // prev block info - LastBlockID BlockID `json:"last_block_id"` - - // hashes of block data - LastCommitHash tmbytes.HexBytes `json:"last_commit_hash"` - DataHash tmbytes.HexBytes `json:"data_hash"` - - // hashes from the app output from the prev block - ValidatorsHash tmbytes.HexBytes `json:"validators_hash"` - NextValidatorsHash tmbytes.HexBytes `json:"next_validators_hash"` - ConsensusHash tmbytes.HexBytes `json:"consensus_hash"` - AppHash tmbytes.HexBytes `json:"app_hash"` - - // root hash of all results from the txs from the previous block - LastResultsHash tmbytes.HexBytes `json:"last_results_hash"` - - // consensus info - EvidenceHash tmbytes.HexBytes `json:"evidence_hash"` - ProposerAddress Address `json:"proposer_address"` -} -``` - -### Changes to the block proposal step - -#### Proposer selects proposal timestamp - -The proposal logic already [sets the Unix time known to the validator](https://github.com/tendermint/tendermint/blob/2abfe20114ee3bb3adfee817589033529a804e4d/types/proposal.go#L44) into the `Proposal` message. -This satisfies the proposer-based timestamp specification and does not need to change. - -#### Proposer selects block timestamp - -The proposal timestamp that was decided in height `H-1` will be stored in the `State` struct's in the `RoundState.LastCommit` field. -The proposer will select this timestamp to use as the block timestamp at height `H`. - -#### Proposer waits - -Block timestamps must be monotonically increasing. -In `BFTTime`, if a validator’s clock was behind, the [validator added 1 millisecond to the previous block’s time and used that in its vote messages](https://github.com/tendermint/tendermint/blob/e8013281281985e3ada7819f42502b09623d24a0/internal/consensus/state.go#L2246). -A goal of adding proposer-based timestamps is to enforce some degree of clock synchronization, so having a mechanism that completely ignores the Unix time of the validator time no longer works. - -Validator clocks will not be perfectly in sync. -Therefore, the proposer’s current known Unix time may be less than the `LastCommit.Timestamp`. -If the proposer’s current known Unix time is less than the `LastCommit.Timestamp`, the proposer will sleep until its known Unix time exceeds `LastCommit.Timestamp`. - -This change will require amending the [defaultDecideProposal](https://github.com/tendermint/tendermint/blob/822893615564cb20b002dd5cf3b42b8d364cb7d9/internal/consensus/state.go#L1180) method. -This method should now block until the proposer’s time is greater than `LastCommit.Timestamp`. - -#### Changes to the propose step timeout - -Currently, a validator waiting for a proposal will proceed past the propose step if the configured propose timeout is reached and no proposal is seen. -Proposer-based timestamps requires changing this timeout logic. - -The proposer will now wait until its current known Unix time exceeds the `LastCommit.Timestamp` to propose a block. -The validators must now take this and some other factors into account when deciding when to timeout the propose step. -Specifically, the propose step timeout must also take into account potential inaccuracy in the validator’s clock and in the clock of the proposer. -Additionally, there may be a delay communicating the proposal message from the proposer to the other validators. - -Therefore, validators waiting for a proposal must wait until after the `LastCommit.Timestamp` before timing out. -To account for possible inaccuracy in its own clock, inaccuracy in the proposer’s clock, and message delay, validators waiting for a proposal will wait until `LastCommit.Timesatmp + 2*ACCURACY + MSGDELAY`. - The spec defines this as `waitingTime`. - -The [propose step’s timeout is set in enterPropose](https://github.com/tendermint/tendermint/blob/822893615564cb20b002dd5cf3b42b8d364cb7d9/internal/consensus/state.go#L1108) in `state.go`. -`enterPropose` will be changed to calculate waiting time using the new consensus parameters. -The timeout in `enterPropose` will then be set as the maximum of `waitingTime` and the [configured proposal step timeout](https://github.com/tendermint/tendermint/blob/dc7c212c41a360bfe6eb38a6dd8c709bbc39aae7/config/config.go#L1013). - -### Changes to validation rules - -The rules for validating that a proposal is valid will need slight modification to implement proposer-based timestamps. -Specifically, we will change the validation logic to ensure that the proposal timestamp is `timely` and we will modify the way the block timestamp is validated as well. - -#### Proposal timestamp validation - -Adding proposal timestamp validation is a reasonably straightforward change. -The current Unix time known to the proposer is already included in the [Proposal message](https://github.com/tendermint/tendermint/blob/dc7c212c41a360bfe6eb38a6dd8c709bbc39aae7/types/proposal.go#L31). -Once the proposal is received, the complete message is stored in the `RoundState.Proposal` field. -The precommit and prevote validation logic does not currently use this timestamp. -This validation logic will be updated to check that the proposal timestamp is within `PRECISION` of the current Unix time known to the validators. -If the timestamp is not within `PRECISION` of the current Unix time known to the validator, the proposal will not be considered it valid. -The validator will also check that the proposal time is greater than the block timestamp from the previous height. - -If no valid proposal is received by the proposal timeout, the validator will prevote nil. -This is identical to the current logic. - -#### Block timestamp validation - -The [validBlock function](https://github.com/tendermint/tendermint/blob/c3ae6f5b58e07b29c62bfdc5715b6bf8ae5ee951/state/validation.go#L14) currently [validates the proposed block timestamp in three ways](https://github.com/tendermint/tendermint/blob/c3ae6f5b58e07b29c62bfdc5715b6bf8ae5ee951/state/validation.go#L118). -First, the validation logic checks that this timestamp is greater than the previous block’s timestamp. -Additionally, it validates that the block timestamp is correctly calculated as the weighted median of the timestamps in the [block’s LastCommit](https://github.com/tendermint/tendermint/blob/e8013281281985e3ada7819f42502b09623d24a0/types/block.go#L48). -Finally, the logic also authenticates the timestamps in the `LastCommit`. -The cryptographic signature in each `CommitSig` is created by signing a hash of fields in the block with the validator’s private key. -One of the items in this `signedBytes` hash is derived from the timestamp in the `CommitSig`. -To authenticate the `CommitSig` timestamp, the validator builds a hash of fields that includes the timestamp and checks this hash against the provided signature. -This takes place in the [VerifyCommit function](https://github.com/tendermint/tendermint/blob/e8013281281985e3ada7819f42502b09623d24a0/types/validation.go#L25). - -The logic to validate that the block timestamp is greater than the previous block’s timestamp also works for proposer-based timestamps and will not change. - -`BFTTime` validation is no longer applicable and will be removed. -Validators will no longer check that the block timestamp is a weighted median of `LastCommit` timestamps. -This will mean removing the call to [MedianTime in the validateBlock function](https://github.com/tendermint/tendermint/blob/4db71da68e82d5cb732b235eeb2fd69d62114b45/state/validation.go#L117). -The `MedianTime` function can be completely removed. -The `LastCommit` timestamps may also be removed. - -The `signedBytes` validation logic in `VerifyCommit` will be slightly altered. -The `CommitSig`s in the block’s `LastCommit` will no longer each contain a timestamp. -The validation logic will instead include the `LastCommit.Timestamp` in the hash of fields for generating the `signedBytes`. -The cryptographic signatures included in the `CommitSig`s will then be checked against this `signedBytes` hash to authenticate the timestamp. -Specifically, the `VerifyCommit` function will be updated to use this new timestamp. - -### Changes to the prevote step - -Currently, a validator will prevote a proposal in one of three cases: - -* Case 1: Validator has no locked block and receives a valid proposal. -* Case 2: Validator has a locked block and receives a valid proposal matching its locked block. -* Case 3: Validator has a locked block, sees a valid proposal not matching its locked block but sees +⅔ prevotes for the new proposal’s block. - -The only change we will make to the prevote step is to what a validator considers a valid proposal as detailed above. - -### Changes to the precommit step - -The precommit step will not require much modification. -Its proposal validation rules will change in the same ways that validation will change in the prevote step. - -### Changes to locking a block -When a validator receives a valid proposed block and +2/3 prevotes for that block, it stores the block as its ‘locked block’ in the [RoundState.ValidBlock](https://github.com/tendermint/tendermint/blob/e8013281281985e3ada7819f42502b09623d24a0/internal/consensus/types/round_state.go#L85) field. -In each subsequent round it will prevote that block. -A validator will only change which block it has locked if it sees +2/3 prevotes for a different block. - -This mechanism will remain largely unchanged. -The only difference is the addition of proposal timestamp validation. -A validator will prevote nil in a round if the proposal message it received is not `timely`. -Prevoting nil in this case will not cause a validator to ‘unlock’ its locked block. -This difference is an incidental result of the changes to prevote validation. -It is included in this design for completeness and to clarify that no additional changes will be made to block locking. - -### Remove voteTime Completely - -[voteTime](https://github.com/tendermint/tendermint/blob/822893615564cb20b002dd5cf3b42b8d364cb7d9/internal/consensus/state.go#L2229) is a mechanism for calculating the next `BFTTime` given both the validator's current known Unix time and the previous block timestamp. -If the previous block timestamp is greater than the validator's current known Unix time, then voteTime returns a value one millisecond greater than the previous block timestamp. -This logic is used in multiple places and is no longer needed for proposer-based timestamps. -It should therefore be removed completely. - -## Future Improvements - -* Implement BLS signature aggregation. -By removing fields from the `Precommit` messages, we are able to aggregate signatures. - -## Consequences - -### Positive - -* `<2/3` of validators can no longer influence block timestamps. -* Block timestamp will have stronger correspondence to real time. -* Improves the reliability of light client block verification. -* Enables BLS signature aggregation. -* Enables evidence handling to use time instead of height for evidence validity. - -### Neutral - -* Alters Tendermint’s liveness properties. -Liveness now requires that all correct validators have synchronized clocks within a bound. -Liveness will now also require that validators’ clocks move forward, which was not required under `BFTTime`. - -### Negative - -* May increase the length of the propose step if there is a large skew between the previous proposer and the current proposer’s local Unix time. -This skew will be bound by the `PRECISION` value, so it is unlikely to be too large. - -* Current chains with block timestamps far in the future will either need to pause consensus until after the erroneous block timestamp or must maintain synchronized but very inaccurate clocks. - -## References - -* [PBTS Spec](https://github.com/tendermint/spec/tree/master/spec/consensus/proposer-based-timestamp) -* [BFTTime spec](https://github.com/tendermint/spec/blob/master/spec/consensus/bft-time.md) diff --git a/docs/architecture/adr-072-request-for-comments.md b/docs/architecture/adr-072-request-for-comments.md deleted file mode 100644 index 7eb22ebc9..000000000 --- a/docs/architecture/adr-072-request-for-comments.md +++ /dev/null @@ -1,105 +0,0 @@ -# ADR 72: Restore Requests for Comments - -## Changelog - -- 20-Aug-2021: Initial draft (@creachadair) - -## Status - -Proposed - -## Context - -In the past, we kept a collection of Request for Comments (RFC) documents in `docs/rfc`. -Prior to the creation of the ADR process, these documents were used to document -design and implementation decisions about Tendermint Core. The RFC directory -was removed in favor of ADRs, in commit 3761aa69 (PR -[\#6345](https://github.com/tendermint/tendermint/pull/6345)). - -For issues where an explicit design decision or implementation change is -required, an ADR is generally preferable to an open-ended RFC: An ADR is -relatively narrowly-focused, identifies a specific design or implementation -question, and documents the consensus answer to that question. - -Some discussions are more open-ended, however, or don't require a specific -decision to be made (yet). Such conversations are still valuable to document, -and several members of the Tendermint team have been doing so by writing gists -or Google docs to share them around. That works well enough in the moment, but -gists do not support any kind of collaborative editing, and both gists and docs -are hard to discover after the fact. Google docs have much better collaborative -editing, but are worse for discoverability, especially when contributors span -different Google accounts. - -Discoverability is important, because these kinds of open-ended discussions are -useful to people who come later -- either as new team members or as outside -contributors seeking to use and understand the thoughts behind our designs and -the architectural decisions that arose from those discussion. - -With these in mind, I propose that: - -- We re-create a new, initially empty `docs/rfc` directory in the repository, - and use it to capture these kinds of open-ended discussions in supplement to - ADRs. - -- Unlike in the previous RFC scheme, documents in this new directory will - _not_ be used directly for decision-making. This is the key difference - between an RFC and an ADR. - - Instead, an RFC will exist to document background, articulate general - principles, and serve as a historical record of discussion and motivation. - - In this system, an RFC may _only_ result in a decision indirectly, via ADR - documents created in response to the RFC. - - **In short:** If a decision is required, write an ADR; otherwise if a - sufficiently broad discussion is needed, write an RFC. - -Just so that there is a consistent format, I also propose that: - -- RFC files are named `rfc-XXX-title.{md,rst,txt}` and are written in plain - text, Markdown, or ReStructured Text. - -- Like an ADR, an RFC should include a high-level change log at the top of the - document, and sections for: - - * Abstract: A brief, high-level synopsis of the topic. - * Background: Any background necessary to understand the topic. - * Discussion: Detailed discussion of the issue being considered. - -- Unlike an ADR, an RFC does _not_ include sections for Decisions, Detailed - Design, or evaluation of proposed solutions. If an RFC leads to a proposal - for an actual architectural change, that must be recorded in an ADR in the - usual way, and may refer back to the RFC in its References section. - -## Alternative Approaches - -Leaving aside implementation details, the main alternative to this proposal is -to leave things as they are now, with ADRs as the only log of record and other -discussions being held informally in whatever medium is convenient at the time. - -## Decision - -(pending) - -## Detailed Design - -- Create a new `docs/rfc` directory in the `tendermint` repository. Note that - this proposal intentionally does _not_ pull back the previous contents of - that path from Git history, as those documents were appropriately merged into - the ADR process. - -- Create a `README.md` for RFCs that explains the rules and their relationship - to ADRs. - -- Create an `rfc-template.md` file for RFC files. - -## Consequences - -### Positive - -- We will have a more discoverable place to record open-ended discussions that - do not immediately result in a design change. - -### Negative - -- Potentially some people could be confused about the RFC/ADR distinction. diff --git a/docs/architecture/adr-template.md b/docs/architecture/adr-template.md deleted file mode 100644 index 00e553437..000000000 --- a/docs/architecture/adr-template.md +++ /dev/null @@ -1,83 +0,0 @@ -# ADR {ADR-NUMBER}: {TITLE} - -## Changelog - -- {date}: {changelog} - -## Status - -> A decision may be "proposed" if it hasn't been agreed upon yet, or "accepted" -> once it is agreed upon. Once the ADR has been implemented mark the ADR as -> "implemented". If a later ADR changes or reverses a decision, it may be marked -> as "deprecated" or "superseded" with a reference to its replacement. - -{Deprecated|Declined|Accepted|Implemented} - -## Context - -> This section contains all the context one needs to understand the current state, -> and why there is a problem. It should be as succinct as possible and introduce -> the high level idea behind the solution. - -## Alternative Approaches - -> This section contains information around alternative options that are considered -> before making a decision. It should contain a explanation on why the alternative -> approach(es) were not chosen. - -## Decision - -> This section records the decision that was made. -> It is best to record as much info as possible from the discussion that happened. -> This aids in not having to go back to the Pull Request to get the needed information. - -## Detailed Design - -> This section does not need to be filled in at the start of the ADR, but must -> be completed prior to the merging of the implementation. -> -> Here are some common questions that get answered as part of the detailed design: -> -> - What are the user requirements? -> -> - What systems will be affected? -> -> - What new data structures are needed, what data structures will be changed? -> -> - What new APIs will be needed, what APIs will be changed? -> -> - What are the efficiency considerations (time/space)? -> -> - What are the expected access patterns (load/throughput)? -> -> - Are there any logging, monitoring or observability needs? -> -> - Are there any security considerations? -> -> - Are there any privacy considerations? -> -> - How will the changes be tested? -> -> - If the change is large, how will the changes be broken up for ease of review? -> -> - Will these changes require a breaking (major) release? -> -> - Does this change require coordination with the SDK or other? - -## Consequences - -> This section describes the consequences, after applying the decision. All -> consequences should be summarized here, not just the "positive" ones. - -### Positive - -### Negative - -### Neutral - -## References - -> Are there any relevant PR comments, issues that led up to this, or articles -> referenced for why we made the given design choice? If so link them here! - -- {reference link} diff --git a/docs/architecture/img/adr-046-fig1.png b/docs/architecture/img/adr-046-fig1.png deleted file mode 100644 index d68712e8a1a463647493abd5ce6787a5a8dd8b59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13276 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 CA6?b} diff --git a/docs/architecture/img/adr-062-architecture.svg b/docs/architecture/img/adr-062-architecture.svg deleted file mode 100644 index 4a824eee0..000000000 --- a/docs/architecture/img/adr-062-architecture.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/architecture/img/bc-reactor-refactor.png b/docs/architecture/img/bc-reactor-refactor.png deleted file mode 100644 index 4cd84a02f600154a1d59c34b1e7f2f09ea66167f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8105 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 bZSC!R|IZ3f5A-kY-T~^$T1w>#Rw4fd6<|rR diff --git a/docs/architecture/img/bc-reactor.png b/docs/architecture/img/bc-reactor.png deleted file mode 100644 index f7fe0f8193d93ce7d0461e064acffc0426f38d55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44211 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 I?OV_O1Bz9-`2YX_ diff --git a/docs/architecture/img/blockchain-reactor-v1.png b/docs/architecture/img/blockchain-reactor-v1.png deleted file mode 100644 index 70debcd66988635a180efbf0fde3635458c59597..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 124042 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 diff --git a/docs/architecture/img/blockchain-reactor-v2.png b/docs/architecture/img/blockchain-reactor-v2.png deleted file mode 100644 index 5f15333a0080cd93d01496d7b711e00d84d2083e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 171024 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%0AyOZVkp1ilOu3?*@M!GZ| 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 B=v@E+ diff --git a/docs/architecture/img/blockchain-v2-channels.png b/docs/architecture/img/blockchain-v2-channels.png deleted file mode 100644 index 69886da95d6b00b974c241fb54a29d422f769a9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109340 zcmaHS3p~^R_kWa%ltLk;+)6^buuTfP+Ldi=vy}?l*nMVZTQ|~8xhIi|P|`(3sYK~c z=&C|Dg)Y)fDRle4rqB2L`ThQn|Ks07V|%~%x}4X!JkRr-cPc$NXtLQ%voT}FOePU= z%rRrek;jZNJ~eSX_{4fjd-a$x7Pr;-aJ5V;6iEeRT;bTif4RaSv5I)LD;(zvgC!;= zdhu0}iC!WFcn2=Y6nv3TB;fzO41>TRo)DNP)H@6YafPG3k>CY_@`6DjyubHH#t7v9 zj73xEMN(;`D~#ad1p!03(ITToajG#QYjU11W^=`+Asjm+G`+EC$LE(nkLnDQeD$)NK#;`k$Kou`i$p3B*3iCo57HYU4P)El6{gjEJs^ema z;XEOCr2r$)ymcoQ_RNH(3thoMJ#(l#jOtO-IKBqYa`!QaD1sH0KGPb{Y3$>6t6#q^2hCW1j=!E`}1O)TIG64a7lTp~iA5DTNLgj}*L z0R`m}VT5obQ5VZq31ob}KrBPT5>Wy2p zUP*!oG#nH%7*6+&^$q36BjDUH0t|-o4h7nVq3X3VETEtG0Q<54Vi9VCoP|s!79FnC66297NFoOxE+NstK@-3w z@Cwn1@KO|(h~r3Ou`0Y0mmmQb$S84?mczve`FL6)mK?;@GAU|?Lh36bu;L~0RNo*S z6h`un_2EVZYvn97OTr?0t6~Vqm|z+!DwrjT6vuNhk@({Uf5?VqaqYc6%L8;Ng zV2V)1q$!CBLEboTWfUs}+=WMlk6RYQd@kH9h5SA(gj}`NnP&`(W zNW?`kqQzncO~a9~iBVCANF|O4RwUx6fZ<_;dK8Z;OF&TBz&gP9(Y`3~8ZW~sed6RH zC>o4JiWDb^LZX*9>Vn&hwwx}2#h>I9D@_1G(0pGA0>rrV+g(~sT>j# z5{(wI!H5tAhl=s$#0u%)4cUi*mr0?CA}JBZ4g8!VxO>BU58e5@}k)R&77SOO0+gc6c&jL^A5r&!M*YE!K^4c4tU*(lP^34T8g8&6q{dsr3gzi}K`Heh4v<$I<8+p*~c!UYkH= z!DICyu`oUdhTs81V@3zd6j32!j*KZoM`Jm`8Xq#22oENbArv-2h2bUg@m#t{i$thl z=wN1OES0PdPYf5+*^p=)MHL$y6B8K|rl5<%!)3fMHHIz~Nb#W{1mWQ*JdK45gJX3% z6hcLnFbE-XPC^im3?PCeR6!2H$x$*XlP6b^$ðMKVH-S72~TqLj|jQJGP`(K0d7 zhl$i^gnSH5EmgpxNYM&i7+dQdBGi+jsK5ttq&T)7ErBPJBg0jYgg7CbMW88BvAQUP zCXoe2qEuX}#^90FGM_k+!K9)XVc|@fC=4GfRq7c^Um-1$=PL;lBcui&6BZBTih;_- z7^#dI3JYdyr1X$@WF%5T4huHKIEpF}uFyylNfdI7ghoju3-}lwf{B)^czOkcq7svQ z!thKu9}n);lG!Q-h7MEFSUfQZExss*)|W)&W3@;=jUOr{B`El@L?#0v4hdGo5ycb~ zoy`a`I2-UIl1nkcP@P_&SE6b1ID8mM5=5nGh-3;!jc1VJgLuKQ3Ozq8jG$8{su7Wq zXkP_IC)DF;394X%uPlzO5yoMJ7=%hyFu1Dt zFm@1{Lki=9VYE^_#g~Gh5EE&UbYvt6e1w;S7aTcKEY?DN6j-`I91@L4j3t3NFho8RYS@aehDAe?>AWB)QYlE3#VO!%x}eY?9akQWL|~b5^4K^X zEDAzaDF~`?p_)er@dB0*q(nw~GuSjia3nt@DkO~0PmGGzuyGVolrn)87taw>c?aOypqI2vvEuT)tAkTWx}{{Wi$!R4UY4PAxjjrV6ovS;L&7ZTxgI$ z9zyp~#4vG8IWdfY5o_R~LN&~rL13!mLzPhgm}8)LHWf-j2s8pF)DZflLV{T7jpu|C zeMs~K4FgIDV#wqONHCPi)uDhffrBF8baDJBIs{LJLTNlcN-PZ}fJi5W&_IGC)a!6c z4m*m2lR%{23WSdjks1P%>UDG$9R`#7vQR2H4vr@qCIh3P88Ip`PZuIUhAQJQp=dl* ziA$8k@Y&*MI3!ArL2;!5h$7raB4LT8L^uTx4GHBFHAq;DJc^1}(_|VtCx{cKXG>@* zX$+L(6OYmeI0y=s#nwh@3F0U)hZGqa8ixpCN`sVCjl=*@l*m{uS*t+$Vn)#_70ZFd z;&I9tE(=3o3b}ei$^d?}1i6f_3FT?SwQQ)b9D~I|V?&~YQF=H53sWmXL*xIsPZ5RX zCMMt$AZ!_wuLb~DuZ+i`NQ@{702hX!&I?CLAikJjz9cA)3iVM!V{stM5Gn+~zzIs4 zfI$`{_$ov3e33*Zqao3eD5*dZLP=mnqEXsdL*ye6qhlaymMRVk{^o!oML|drEt(gj z!*B^Agr1V1mJy=j#1xK3#159qqY-hM5Lp}#5w0f-B;JW~S&)!~4vM4#Ul%SR3OKSv zfS`d+$`nDN0tt(+M^of5vP8y*E4{-IdP#x~8_m^_bu=_Ll#dDtL3?YNQB*dHK|xCm zm=6Pd9s`UZPY@ zV^VT#H@p^jVgvm<-rX;^$n#t_e*XM&rC+`7i|~}>(Ukbtx9~^U$2_`UwNw7?GA_BH zA<$dgHgS{L^vk&mLTxjy4sFF<91Ck!f9kq4apJ^=&6Dl3ydrAfATPrWv(N)Wjm^p4 zKC}AM^2XiT>sRi7*Kf@b1T4}@^r$DU_vX&fB1qGu6%Gb@xCJIRj^pQ*w9K{hU!&z) z^xg&>iu?&m`usvfE20-YD(XDXhT^MLH!|yy`vbeLr?Ud@U0naiZKYu3>syrmtJ}k4 z%WQh%hXO~}dxB=feK`F4*J_XO6AcKXqn|3ztKV)YBkfSxWlYcTRHPbPpYSvq?^@&Y ztnRU!*^_he6E6N9SqP4H#x?lw?~sc0J&O~>K1W`ALms-HOn>nzf|+E@b_en!PslqX$Oj`{`Kd*WE&}I~wM3_SQonjvv;63% zRHtS|Rm|-v9hm&TYYaaKZf>51{MLEZc(X^n=vm#l&Pz!Y1$7Bgx(_IG(k3(F(j%z2 zmtF539iO3}(67N6&sympU|4$i1;cmeV4o$Mjx%5IN*oh2Vg35`Gva+NojpM^oYTX( z4aj>BA=_R&AA93b?TuZDL14d|!IvJ}#ymUVU|hBIL`urok->L1z11--`THNbtX{o3 zXn2-?)~FdtDM^a5W2@_YFFag&q0Y~Y-hdcqo7;XJ^~Gy&Dr)t&qn%DepI%&Xi>OtX zc@hJiE^U)eUVc{jf;i{)1cU7sC&|n{rJqX3^!tCzzR!3e`{<~Zc`iHHm$5NX+EHcl zzVq~z{*G#HAudF+j{wxNfjw@B&{-R_yIbf;s^6mY0 z<^l44))BT?liKE}8~Iwn6L$CZZUToM{qQJPsZznZ$V+zq-4J?oL%IKt4NbPrvRV4& zRqK`K>;I(RFAwRyw%tZdxlw}OUV=^;|E8mQe$=&Xf-aVJu}PZ8r#@@&<8ak%cGrPF zHJhGSN2Rnq|Cu!x>+Bp*(7p$10@j?ryHm2g`$#=BGShHYI8G9pq`o$!H5=n@oo$0z z;#Mp&G9?+0oi?;M<>2|ITXvke*v;m|BLDh0dx3;7y~|!ysuEX1GmgL7ym593Fp#M- zU{QDHb(>nRqF;WU)H@N_&`s6i=6y5qKqL%XTIa;)#KK(Ub^F&t*N3K_7;7+nbAzQo z9PLlwjc&P}yv8`wvRX)wD(DsxkK5(imc;CfA0~7zxdly_o}r*NeW^8kCv85^WNn_b zX|v(D@2pxjbPVQp@{>_p=?`=A*FgA}1vOs@BbQPpWWDA$mICp|K0Inyt9~1`bFf}2 zTGRS7WXmpaQf{jdV8O!DSDQ}Fg9uw}8+Z9{shfE3jP~6jM(Ny@OWanej2^l{eNWC< zMECf$U@n&9sYzcu^2ZpAz8C_TY6lnMs`yQJDkJ<@=4*jV(hl}bXCGg2%-Ble2j)2@ z>(>St)~g1daA^4nt`T)qf5A^ZOTc?TGs5vNKb5%n!L< zzxq49a=CBIzNO1rF~eWqTFs;F-Y96!tN7OU;7GZ{_u(%wVMo}LGcqzJnweex_2c`= z$SdPp&Ff~|;J{J+6Ai9o(loGg$FbMsVhV5wr+ggxX+y@#_0g+uPZ*@A~R@Cbuwc{49 z|M@xSEIM`LtY0I8SAcVV(A~3q!h{Jv-DTk?qdpA|vL0PjzA!!*yw}Xe#-^t+dn{?k zylWlRF?Z`%Cl0RF)qTiP_BJGs-EF7!%s4JowofxSn;A|(YcS)tJ#EVa9!8cvVfB^b zjklBkSgoR${EA7L@tpW>Lk=N*=B3Avmzh{hcMqdi2Z5lr83dNn#E;L!51U?I+YVLr z5PcqFh1-bjj*-{5OFeEBTya>esMcZW(sk;`%v3XR{Sg)aejlH>MlHF+q>*lT8>*Nw{@&tZobBC*9z{o zk&ZrR!OvX%O5%1!SpvFgk8k{)Bb-IVIf8+@Tmv7ygQnmWlv-;IEzb^f$%4?q=bR)E8hHVrYT+#h2 zw+kNuUzmD9wd6M4NVntRr86mFf-nzfo1b5i|L(%tA6b5h^1*{QcV}jO9|iymuY;*H}SKL}?2x7pkjCV!&eXWbb0&i$rawC57^gH#W`=_lKtD-UvAO}*F z<-vRD2guX03fleGTk1kgN&f48ZUx~?RC(Lnuw=)vlyf}wSS!y7uCOoNU*Fz0V+gf| za3{KdkX20u8eU>{_@-kuMR;pZg-}hTJKwke2v4?lO`SU)tpYthQK zTZ<>n@R(S+68J^SQ;O#fst;SIIfv1#eO=OaK9vphHkap(BSm&ZoYxerYbe#3cxEWP z70DLm22KA0G+p|8LExCRU?Xozug9mke)?5-YOAqT=mgiQ)^hM~q>L-%5L=Cg&s(QZ z3t$J_tK62Qk@sH*xcwy<9F_QCkNc3@vh;bR92e{Dbt1EOYdSKPJzLT=za2Js0T{O- zQ1(18v0k5RoI61H01Wlbo&94Cus$hiOhQD#g+Je)uXj%9Ydf5=VGYb{OPx_}$n^s& zPm3Qg-vi$@;ZbEoDBfK_N|vs7FA^%A*7~%qy=i~8Jfx^3`bNfC-Is%hTj!e0cSU6j z%m6@4{W@}8@4x2x6oXl8mVf`z09%}#YH&5e+(x;#<(ivc{GzX?1+2O$wcvhpf-g?f zHC|jRTBdnK%9@KlbntndE@g|w94CM;`<@?qXaU^W!`AiygFE9H{MPAdk?TD$4Ozwf zmI~;MxXk{t8WZ8Z!qnnSbfgB>V{VWfkPV^8e=WT{c(%9b9&WlIH>9BVelIw!!|wxn zC+D}#$;yfbAl{vt^>(nTbW_W{iMqz}Yms}`_qRjOo;z0&ax%X6<^g|!Mx|oz-@4Im z;1#(uuXju#Lbjo(XwJ`HzgSC67R*|(c1Ot31E>T2CmaKIt)qnRSh`v>eSpZg3A{TJY;wF}$|+*$6YWRDSTYb&|cga^v3bwoGkwK;cidE*+rX4xa&ULiC8;*{MAx%<-oZ59X$Sxdg!+<7_Fw;s7<$6pKwaXZ->_d3GfZB;BC zHj?|TZ>BBr@_ipS$l+BS_33z+4*DpI!gQg#aVlp47*K+9nUy^^>h-O?hYxP)KjgTD zx@%VvNjq&|;>R_nA>>_N$ApQEj_8eTh^$q3%w!7-3+qKImbXq>u<}CP?z>LQwvy?N zkN1!riKapP?^A|XgUHGnynTR8F>rc)Ja6R*e6aRQ|X&sl`qA`7=J> zeEL03!<(p529yh1GSM8@_0D`=ubJIkB5`gt@xpPA6NT%dee>veQQvlti`gA>nbm

_Ec~xce+}wz*Lw6oPvO3LR@35LX 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≫M?HPJVNYAHMb2hRMy> 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≫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
0K*h!lbw<@=MCZqOMv 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
GWAC0_|AAt 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%0ARHVI&*dBKnfuvD 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� zVVh2)N`@yUIz3;&cU8GHt%nQOZl?z-0Ai+HeNspW5*?1{->_El+$ZW{bml<1zx&D7>x_ci&&Fi*ti9>!#&BGSyH#F4SX`QOtHj~?F--@!y#tIprbW2TNIv(xjAW*TA{ZZs~2I^=BexRkYcTkkuO_rYUWa*d!4 z_Nn`SGfwo0gI4MFUxB=ER%0Xx`}ca0j|i|YMs^QU2bR7S)OhKcvovk5EcKnpc*;SG z(@0d%p{pfrd!2 zmHbkmxx0r{()_cvSXf@7CM$yPO{}?%76WFgWGJ%KA7muZZ54H`*v$;G1+nEXTyvI$ z8Ph5S>a(4QpFObS%sU(68!kshBhE{>3vbR(hP@osHuc%HBBmhYERxfI5X0+(n$-Qp z)F*0ceehJIUw+I1^_vjq{twu}{CG&O%xau_OAX}ZF_HY9Wt><@WEU5Q0GjHG1tW+e zcAK3V@pHz$iHnPqP&oY_8R`pQ756*8y3#IF_%m74^rEGv>4I{6H(({>L&?I(2p8CB zo$fn?+Pa+^KTNsO7+(_^5ArAbwVO5H+d+}g*2l|Sz}V_UP|gehlGv}E%iWy=Czxc< zX~Ky9@owm`-wT;tkO+0D^9gq_c zVVRL@@~xm!QK<1JRT!!0zJu;te>0(p>BNPkO5rmMC^+d8OWzV|BK}qo1}&eA>M+N_ z{={FUVT@hN*9$4|Whyo@f<$3et&zvTfmAK-lCK(BAe?38*jmz)zxyEcr9a<*Fn*@m zK=k=47k>me#De$mF125B;PZzL)HhF0UZYQr!cLu35g-LJ860{)h5%ng%uM9v#$RejW;p z_PqVxFSr4gra z3$qveKyH?^6kz>ZfUq5A92E+z@vf4ar0LACr~@Er2AI^flwM+Gu9g2i7GW96dK3vO_biuU(0B@&HVO8(AQFd zq#EImv{m0mtCci!!o*{>-VV`Tp@w=;LqKs|5iruGYvY@=u>upc=pE ze6&&Wuv;QgFkwK4BL_hKK&!98K#P9hck==K$QQGwYds<19BLEm^Is(ZPx=>JeScsc zAxK0@Ntur5q z^UbX5zH`khk2@M%Vfi7E;fJ3~HS7X3Nza!nE^0)KC;GuWilYZtOy|X;XDxC1t9?t2 zSOwOXWKQ(Xb6}?@Kf2u4pu>jP_ovmA<*&QQ#i;(q)316i02ZYGm`ZXFUvf`pZ+e!; z=we;pl5oY>tOz&AO^q-u`m9U!H?eu+`g5n&|JzOIuXzY)Dk< zR~joU`u5uL5~}ASq5v!m1{PGXL9508D0_c#Fy!bn7Is%Uz2*e&are_$TRpj#yI8X` zFIy6Eqz8IVr=BtW7DCmkyJcYY;Kf%azK$Ta8MVF^a`YgtrwAtfY@1GSu z&ZwfIEX%T!=vMZq&3%G(O#)vtpoqZflM$cHiP_jn_4ErzM!@T{GmH}sXLo+)BrUN; zZYrur9mXs7nl(*Rcbe+P)+iBc$Is zVIq2X>2Nl{h=l^+~qcS>P+AiG&HaR$rv$+lpyT@(YE7BCnk7m z0wq(@ps8thqF`rlkEdY5>Y!>0h)S6P1sGdm0sPEz<0+~|_ea-3jz<^h!zP$wo+?of z1;J8AD0|z{RRx%g0(=sNB^O!{u>Bvh&H}3HuKD)|QBaXkxFzvqH%NDP9y;$nzW0CM=lS2Y#I;-tPwd~`v%fR*nVH&~i>;mn{;2xv zsd|auibdvQ`8^0l4UHH+ibrS%=kA~f{g2LPL4>Sr`q2V1_RG~wOiaj;Ap@qI?pFux zU{^=J(2^7vZ~m$0gY3z@uwVc*zIu)03%c+Jd8%(EBqT<+!0?hVQ_jG-y^P%4;Ly;} zB~6S5(BqjyuR>h3wR6?sXfpk2zxc@-3Kb7eRGwCa@y#yzVGFMOuR+uC5)*8&|L5c8 zu8dcm%a2!ASBJ*N+JRL6)N8y{00h|JMtXjL^RoMu=WXSlR#>~;^c*U3AOd}lRE}WT zF@f>Y+FI4_>FuGE0IC7R%5`7hP&$u;JCc5LrM>0`RE)ey{{5|h`Fz-h@7l$VS5 zsV+b0R+qm9ws~~z`|eVmTW5)IHg1Qy?)u#;+J5eO>6(I|7IhKT)FEqw19o`fzUqyA zXM*;-$}a-pZ$Bd?M+@<5--rH&Z3{Z$ESBwiQ|8LQKMn0BxvKa*GS z!Q!97v|x1+AOZo9P*mj995BcR_hfB(*&5kY8BEuSMLy>fVPMmKMn)cjKJp1&W_OhO zk6CXPS^KJOvJ8 zH)fYKX~SloRa^AD_Qppfs18+#up&hp7R`E3K_D!eJnM9^8D11?X=x!H5iri?1JbX( zy+UNT#x@kKxt52xRexU-wRzg#j9ho%G9aC!GcXY%>DZNCt3U+K@}BP5BBQRGEhXeR zzP3Yu58Us53#!GoGcF{mu`{-qYuIteNzbhRu7rat*Qtly3L|D~Bn0Pe zn;F7kXx+@{)|vy{9e0Y}tzLn=10WS{2ChX{4=`*uV?c7Dsg@6*nD3|yn7-hIfBW%O zOyU>=ESG=*NNRBlQt!rg^-VWC!|OT+~ZDxB4vlL1K^>o~F;2lwJ2VO4BopXVLf>o}upU(`+5P&@yEktnAFp z=)*HG7ODkI>j@a!`dwW71B@ELi0gF>H0GHtTK(tR0)swL>%svd6fgPsmb~&|bMOQZ zwMzs;uZr~>??_8a8@mgMkrkZkSr}HzKcHpSQWMp7TdB&=JX>{%omZ|? zyN^~iCn6;!Wg^iJM=YLAQ&ZE}?cpMWYe=XIUs+Fg)(S_NTDV-s#=|4qhT*193j`-& zoJ*n3fN>4JaL#Z--#glcG-Pvd2v>xj=R;T5MwQlbU!@N9jM@S*7()Y7eEZf`IpD!R zQZx6PY-nrshe!%Hb7QV4>JL|IXRXA3D;hkz=PhTx{Hx-7SA6q=j9$$X0+lS4@h*Ba z0hCz4FAyYzzTa9lsP+3!4GGqK5pl8|QDhb4#bXI4h(*7B{XBsR2OHSaF!MSwvaH(L z_yW)4oDxAy>b}n|XEu9c6(RV~H|ABcwJ8Uge*wfPD2* zsLJ@;s^kk>)hOKn-PE{2m-udEEBQpvi;e%grfJ2;8}h#u6+rT;Nw`jP>N820*K*Py&KJ?e27DSYN76ogn+T*~~mpNX^f5-8z+@id=J z70vd{he(P-%aYOWe{olb)Xj(qfSU0LztV?!Z5@r@(MJEcL+$c!e+@xrHDiO?Ub0br zd;Obt9dYN~UQbM^fx19MS}zZ~qb>_c1a!;gxw3ou4T0|DtzO#DO95!pXuhnrs^|Gv z79`n=v-WK)X;L2P^8*yDsQMAGt0let?6L2xdd|1w```abyy|^%oq&>fF^KiVW<@fQ zbXTY0kjsePW2Q6h4MKE|@>~bO1e9GHxmIMocmE&V-XFCtPdbq4u$EGWmum|8eTF*c ztw>H0>rq7^tnw?GJkt)GMbT`<;TGNWDJ8m^`hxNlGS}SppyOr^Z^+doZCl+khoGWOsR<5_jMgiX-wxx86`5KCXq4=-e*ii9920d8~#G7B;y`N*$@Z%E6kU-&J*bUXx`zI>bKY{RXy@ zH6sijr0nn13tm+gq_DMJT3_79j*qsD+r1TC{^VB_gOmu^FvSc`EFdeQ zq2-VBel;YA`8gmY=#Xg8e{u^SMh{gk>E7xNGF zxyc7@q}~S{k6B23RQ)%^A>kcqhe1jCxS?{-${28{Vn|c3i>UUFJzL!BC{gA)$2Gnw z^$%U0GxsLRf6|y0ezKVRqpzCr3lYtK;gLl$!nbW4Q)nR+IdW#=NpjDKRhV`*jvYDR z?^q#NbrF@4W=WGm?o_x0f-MROb;YJ7PP`>LdtEX1LLoHL>dLr4T&EI%7*XrP5 z&IR%h!U!}EHRAcBBwXw?z%OSs3Yl*K^Dj`gxsUnD>?<%fpZ=Tn4Y1RG8qr~~^+(gf z^>?x9^TcPld}IXV51)Vfq+N%)Hy&q&E{LwKVZ-++G`WY1OeI`}K&6TJoQ^}Td6~K| zy$JYw1pM4}215wHW*_ILT~$DcR2dE?v6B&}v<`QO!kBJv28H*dnCkgi z9pAD_W95wIbE4vG0k9np|C}f=*G8;{8aH<$S6KCR<;bCBEg!$|hQIz>C09T4KQ1R& z8fM~dur!mPt(NlBHy@apKNiMuSgzakN(4jTg9ejr&w)=3K%+KoQdfVMCZc5Lc=$KP zd*-3$hogr+3slXi29VX2WqH0mZh3Lznl>)V1j&BA{42USueAc=N5>`R`!tC{`*=>w zXH7rH{@Tk4*f5OrfolpRx4Ou$_Q_UosFVIOWbf1qA`(#-_*Pog11!(5S>ko4)rtE6 zx`^DT7~$)a)@bHxvlw$u;-!d_UV-5w_S8;OW3RfB*nZZ^uM$;u8AfD(Pu9fZz*J@F z(H*e8AQ1UK?ZDk|#3a{WoA>m4D$NrQDnNkC1BfqDP2KiigB)Wj%|loBm^yr z8z@*)R0W?ig%uS=d@~gjYBA>^WVs z^EZ&8q?%Liz#kctb$Ri3^VIoOqgr^C0XL<)!H8$9f8E(^NT6yjDrQXRl=)2HxsXfd ze8?Pk(RH321Z24NE`$l++sW#BT)$d9_s_>Zb7;1E6z0lt*=^D4?m62FqLQ{lhR9n` zEIw2l4Lv8Y-$do$9CGA~HX&&5t+R`|P4ST`J^<1s%T+Ujx$Vfr!%P@$rx9E4{o4hh z@k5w0$7&ICSS(yM0^h$y0d#zRmZms+LR#l=Uti<(Hrb?nPJxdy z^j-s~H4Y)yniwy_FO!x{C<#P7Bq(O~LOJfswxQ;tzM*tGC0AGRxb?bn*_Gbyt>lTb z5JP)Fj6=oz*jKfP<=05{W`3$>&UM-3@pbvo?}YNX?7Y0uPoxzR3YovQWz{D>e5+fl zt3q7eR9e63(D(Cp5x!Y)Mewa5_)cf%7pBKt>RTB$NO2;>8pIw^{r3uZA8hA(p-eF1 zJQbsP^`f+Tb7R!SC#`NWbtJt9rRdo!IZ*{XWfdc@6@s>z6B`1hSw{NhI%t<3s9#>ocAU?Af}uT zd4xD4z9@H_<`L_Xg(fxHx28cyHf0X(bM z^|35c*lt=6vHhh^hb<7ZI6Df0copPnl{-{0JdfAjv#;fx(UhLjvC*=J-(MO?aQK2l zBc%{Z_ezkWpCSKMfL-`M?gF;H1;;arEza4u_ozJy1VD%4bvM)F5H|EzxZ8wHmA{-f zp*aj@lj2Vi3h(aAkq9trPVUxyOC+*r)8jc?3DAuS%I?F0(E0hD))eySd%Zw+xBQ}r z_8{m^&)c(yJ9T-rN=GDeVd3>wZt;{o7kYGlSVDlr`+}p#;+PW@mWc3sfgjSeGS^3P za9{A$twyIKYA^j}z~=qW70QQ^y84W2X>k6T`@DIm zKQej1K#`l6y0h>?)CQ6!A(Nb663AkXZrP^#^pDNmU{ZCi(!ojbnmR&nyzT)N{J^O= z8%nD!hiQVNJaqRkCI1Irx(SXiuqqO6f5Ls5E!SAJJiEhInT=}sT*j{f@`LR7!BK6x%r}@Gw=mEn~zAR586odRjl(*G- zTCSG?9goJ5Jw^I%eXwfZ$+bC!BqUTMm8TQdI0t3hIV@I&?b*_hp2w1KTf>Wh{`3C2+op|!*)NDZu5_ZV|6u`w<6dsa!GF8C zm4vK$*5PYaI0@UakoI2{WW*1-PG`qCNvj^Jc1pn!f(eq{Be*OJlch}i{O+^#f7O6o zh;Awky+A^|^?v=urjKvj|8HuEIrx9XvVY_ zvUsb1fI-K@9%QDVA@eo*%NrB2l~nM#=prP1i4y;L#`^NAJ;EGFVBem$%za+7Hd4^~ zMp~Bf*qdr;P$W~=P(PkN(pB1&n=4uVKAHV3tv^%Hg}Fn^y?fYDNfj08Ni7HwrA4D2 z{}FA_(C8fj|EZCTFPJl*;jH(3`RV7vhIjPMchDx?w9b3|k`DH_^}gW<+MrCgG2p54?pS&WoVe5D>^vMWfivQx&crIjhzn6=?%M9fI4Yka&kMsHY zn1Z(`I>>WPFAK@6=)2#l?(1%3!0iOW`#LOR#`Yu5FfKf7{sRU}hN=#-GcrfKG01Xf zGJMcm&h5y(Yb4dIds2=!xK)fg`!UTN%ko2SatL@cVgp9xPSRB7J`lAHF9CeHmyrV4 zLN?6*+(+>l{p6!0wT);&NyNwCp4$CIaYTU*X+*hhCMXiL*+x^A_)VRb__cj|D$kW+ z&jOu__8DF;4vKGVqFgoEY|t{UIE|kUtP@#ula)+QKyYt>fn>MO1IK@=ao5k%o)3C< zovyckYkY-`E2b##EWFs_;N+yFsK`Fq4GtiiALp23$?l9IYLpEH8G&W_o2_{0^qu_-LX3Cd=M=oR&jLK~;c9uSBi# zKGx&5m+7zM-n)Lls`?%SkE`{?5#LhN035*oQUUymzi~y}&Qk26y)p}mP2;kHXbwJ$ zDBTvCey}8xvKkf2B;eSK_E2+h9NMx)X|DLiYHD^QC?_nZUU~%T4dl1vKN~d_8ixHI zUO&?XoCC`(BR83*ctvW^oaN0u?A7b&Hw%39Wvn*tlwMbC;OD@U6wrPMhnMOiM?aVwsH{L$Rq|=x!Jg6!_?Rh7^aLk9-P!ad5}Q-JH{_=q@JVjB zT>03G z?M@!Nz1dd+V=C4oY*^e6B;BVSpYwMi&6r4Pyt~A`kd%eK&Qm*uCN-488dsP1-LUbQ z!kx5JTI89tYd?`^%6z_`=oZ}nh{j3uDxhy{Yj-8rRT70`}`TgM)+HQx$tM%m=kgwpGp`v-bMU8{#59KexF){I#vEfr*Ju zRBV9;Confwbd4`OX|L#}=4ne6-E*qXZ=bL(XK?JU`TBY-e&0APrt-ux7XJp5sTl5R zt0up)JjIy4>BK%CiM(A3@9H-zFAG`h^5s1}`cJe5?Hh2P{(2k8T`^Wc9wvD(tCsEb zoM;Bkf&~3VtQ-}Q_b(v>1rsOMx?Y`@C-P?7qGVS5w7qT}!CiD2Ay7EDbZmDOU>rfqM?jJ!xBnl1U}8h;%ds+>QJr=XX&x33fCb z?XrAX4)@tK!5r56j~*RepMr_94<0RWFdr9}brOWgg$3z^fRRp>loBo>4_5CQ2gmgsb&&n&p>b>eiL)k9 zwkQ7oTTv-;BG4L?>@I)s_!W7ndG)@p1Zt?C1V0n0f=WbXpYwAWF35J?)HExQybF0& zIE!n-AMTgV%)a$0BlQkmD*eT3{$gKH?m>cmia##{*tLvXa?Cf$%&h8u-Ajub1h5lq|F(dqrks5D?Im;1@U!GX&ki@eE#yTtw6770wo%h8*enYFaE zKn4Z}8^b)0Xd;<4nrNf67cnjv1I5I}QAb8bmRDC(22B|l8I#k~{idh2?V;pT<(ADB z+~IL?TXCRftI*@p5#$*H!h{b7WB^)5OG~THOz`B%ll{|E^j}p~F@Tb33!{{O_2qPq zIU*wBXH*o2%i#yWNP*$HA52VAv!DC=`bPH}FD@?nCBQP5^0Ts%%gZB!gCE^NMU`I{ zH2wH-alX;#&)67t^xF6}xyB{(D}5{j=NP+Y#&g=x%*tx_6pmSupByTy>yL|FM8V(x zSlk0nj)i`HeopiVjZQ9p{qhRSq|gJOkWfiW3qu3|Re(KKRt3GO2qeYCnjX}tWmHp8 zzw&zc5cmLT{&aTTX|RET;g*xOI*Xis6R)=qtVTkzvwxPUDURxPn)_1X7(6nP{y;ZO zW7iSV^D2YyJYPU8zCToZ4(-|V=PgwK$cqHqNNGkk4F;L*>Y@{5d`G**g5ohzDBrna zCbE}8O-hK6g+%Wdr!XJb5BJ_&>^Lj)kVw2On38Z%qlaWsH<$i`Sswo9BC2!|hCo9S z4YN{Jhus+QT^PrI+x{8Vl9s$9kHLrD*Hhf3;`bY^- zkS&1Ci4kyN?-xKkA_($D;=OB0UWs7lvjU)|z)0{WfYx|S)qz3cuOuXjz%C|W(e6Oz zgO>7-!7%U@km_6x<=@pm-bAuEo>xnh2!I$Ax}91PuHxFDJ2+LK9h za9|!?Qh>?RUitu4MpmAHQPjWY$b5EKq0m@=O3!F;OhCTvwXEz4qF-2ex9Ax?{i)lW z-=)Q)qW4yFMI7;^pjvYBVE6vbi3+KXWtqc(!}w=kjyCGE_f{_UfyV53_@Fg zeAxm3ADpMA>(jY@;oI|mT+f0hxVZ9Wf?@#+68BzNOAOt~f2}FvUl&A<={7N2=?`pR zQ4KkSb3#)?r7BbacERwBS9#%UFHx~2p^E^GG9+mf=cdvabx;mYgCEJ&Y* zAUT$hyD>H-@Q&JCl#e98?M{Y@%1Wn>{E*ciL|@@>7lUi8_q zn_Wi?uHEzwiEHfH*6tdk#S4TW54|zT>GEqX1-8Q;V~)ngMrQRw@75qfy9uMHgLxn9 z#DQ{oq4Q^e=c5u7Oo)sm(Dghwf?Qo+gLy~EDJgfnx3?|s+_@9YWllg$Obp*)ty+G9 z+%aGZa@A5OKLqsirJ`!MtQy;}_bG3J12(3kt7{RkVYDnPq39IO-W?qsC`+MWCir}^ zKSc^iQU(OvN5aGabT>6OU-G(H^K#E?K%x!r4GpWVPo^GVVzydv+jY`LS@&{{6?$H~ zB1<@guJ*+nw9IUf2G&m^OmKH}R29rv7CvZ1r-ZyTXu7NGb?p$zq61xa8~F351;9RC z$>RR^F)?ZB==|0a-LUk>uVZ?RS?aHBkslxMHxr=jjy(RxUQ809Gq4M4g8;`xY_-~|gyn#wFZaS-5<&q+CXzaMRu1UD%h#`o&Q4#=c@TnWdL$%JeL?z? zdc(OWCBaA~zSYK#E$jCep70F$q&~oU0KIF_`GXc&=Kx}mK#}d%BIJ;q;^frSIXEnp z=c{q(Ggg^n+_bbSrK2F^!#7K13guhanErk&3q1M>%_N{x+_P)y@XyGt=%+|e3hNB8 zZ>KLwG#1QyNTRxf*BQT@#Ymms|H5l`QI@Rs`*9sk`;Y(TD%sjx1U#66C@_Q2_+^|q zSwxb%cb;|Nt&nD9Ki3&~0l7;r`NQ-L4Kr0>WFp$3IZrX~mYnodoq>XcLbN`Gz}?OL zO2$14RH_%x$U@ldX$yx&Q!Vc*HTAix!Y`13o<1#EY4bt6NGzTa6dmZPSKBj! z8pZYv`@^ZZo0HtWy#wd<&CN~1JLJKw?~_3(OvO})YR<7Bj61GKGw-@hGf$N{G8tye zPcAAd3TmEKd*l2Yt=}i$1xwNh3JRK7c&*)WA(xYx>#vYZU6{MQ;py$|{Y#00YbRH` z>hR~uz1jVBd^PRHDOi0kum+VYky>aoR+VEX_Q+@F@bIA-HSTMSn1%}W$N^JJW36Ti z?mt!;nLAY3*^8<(%RKns=9C+RPvLEM-`*KcwXJ+f7Z%-+xg-yqo?Mua{c^0_eVf@K zGOqySX#op(pBmnCQJyS3l-_PxVrUclj>`(~UbXghbINENmbNM^qW{+yYdi^qkJ|!! z{qZw+oZG*at<^c9RNq9d=k+=wO1YMxWU8QT|-Yl~BzhMHmLV6vPUv zs9wtpx1wg_J@`_d$NX_=u6`mgbxg})r-_NaaGo@)*{Y<-3LQJ&u1rl$d6TdGzI^$XlmyVqjQo774jXXR zSgNY3e9E);nE3c&z`cPyIRX@6r>m9uEQ*SXujS;7uP=@v;MokFPR9(LR?^EvH=G?T zozLufu3fs!bw&Dgc6BwGavrvk!jQsy;c_Btdrt-$bE>TCA3k=9r~`r;aKxg{&b&@D z4r6cBxXHJjR`}=6vE+eJ@(#?QKh#awbp;%iTpD9M(+`6EDGZ8*m;!;e1dXxp_(Fqf z9tsk_bL)Qa1PU$Jn0xkN!_T<7gVd}ua~yxFv9x4uXa)U(eZNcnCF(>W>-=vp75QL; z%`Rhucn37^G~mC%xX*rfK+`#3bO%2-Xu|)aEp8@Hq3KY_-I&@uQY~z<6h{vf$b%@E zwjTmmC2aAS_>`yvJL^U;la~-BnszoOsMSE#*obm*MHPj&`A~5H`#mgZU#hFK$6md) zOZ+oU#Y)}{bCcbBL|^1mO(eJP*-!9it}}>BtcV~evTL$CzV-+%Jb#beaJ&d*{MoZ> z?pQ1b)R(sx_QkBh#%bCTf4_~o^DQQ(vusS)O?7Ry z0!9f$SURZtiQzCg1Z8bQGc&T%(hrM@ns0ZxI63zhgIJ5rhUtXPmvKE$N|K7erkR|a zRIhX80=N}0ra-3^sxu=sBq+K$auo!nV86kuO_Z1*kgqm8EUu{d<&sd3o^kJ!Kz6w~187%pF?A7}-M$8mY)6NB%3R0sEmjK=i; zU{W;YTCgr1IAEh%n{~a9{P1Y@4(ypl?oB-5sgTdi2!@EV2i~aa08U(GrLp!;uWiWY=2&OzGwzh z?`Km7e8e)QzINW4;(rV6YNke$pk@%7KD|1s49fb*nmje}wjhTn)r_4nvN6X$Gh5n5 zivzOMOD&Ejfg-JieMUj={~>-FB{7}PhLCMGz9*dDQ{GaI3scbH%Jw>}l5dM;mDYVF zH(vs*KGD`DmgD}M8V1VCv#qnXQ#&b6hUyx|B%YusRQ*51=Wk}iI(~2Tq4gr8e&zlJePj1L#T5?@7RL!+QpvNZ8wtF zUHnQ9F8UIu)O4KpM`vc3%OTy=Fm0q3ze>MT&a-P^K4S$X)A{QHD%=n=bqR;hXYyt+ zdgMF4J$^-v_AfO?ett->e-BTa8y$iY_%QHu_TaFEInB^Ark^7@RuBoz=fRlJa^;?o zgzii9#EkZhmW2s<{RX@rJw6p#*}J=G-3yq%)BV3-LstWaRAJq2_k5QJj+FR%hM(Z# zwcqx6#G5z?cZOE?^3Gu0B;4ZBTHc%f=|X=~y)dQuH$8R4=c-eCyp~X@GmD7mu1}C~ zmYEOeRU6i6PI40X6d0JoFfF_y^d2>AZWmtrE5hs6IEa-Ywt^~=*2#op+-bdR2J^~j zte(-bU|-M)B%|O79)fgy^*C#vmdflsj|Qb&&KCUHh#noCoE(nT-$YDLPnVQd-$>?M zmzLI@{1|K8vVdb{K-ECC9wbsrun+)&!404D&P&6 zU1x6O(+=TC+2mM_s(45$AUtB=x(!;Ov;TIpl&*q@6AI{=4 zX5HFo;BAMUu!FENNKw)vv!(m?yPZ|vn?~8WM|brNcd#b6XS-Tu%L!&#FMpnP3(-y! zHGy!1qK$HJ_DzHYD6DKL`d7@1#7N&rpxHH|W7HtOg)xw25JPYC!6Y$-!Tp8HV_fE} zEA!LaK?}>Y!N~>~&sA`aV!=XosrkTjAAiHYY~$uhevZMIi3&vhsVs9f>@c8r#hTyQ zeQVEj-3+3yxvXpzV~?<@U>cuoC>Gvr*sw;G((K31WtcSBTikPtEGiS4`Ju{jR0$+zAn?z$p7z|^GO4DN>|tN= zIq|}5)cEyMPi3dEI|C{c+oY5~U%p(JD053c2ZF=-N*{BuSv;w)Uhl89nU@$<&2P%9b}2Z+bR2~(^f6+8GnFIR zp+z1;J(6Co8TWlBSfSz|gZomW_7&<84SQ5}wm`zIQ{ZGEBw9bQ0XzM=-jiqSk@4w; zrtamIoPgC{)OSQwn)P`vYQL5v=kChJOt-sU<`x&!N=C0`q%-O$$D8J_C2y(9hFKq- z^q5bKDfakH?pWl_?U<{~@$kB)sa#J-Z#>g_BIR;c^T2rTi337R%%Jz7ey<5S|Jkb9&i*4?U}P zAG5rL$I{}$L^8g=WksH-4eO(7=cUsrn*0;DsxT zRrv$T<@6{xcYf~twaMwifpdQfp+*LEEvd9kTEH#{#aK~Eej}&x&FHFXLeWj z$-e%_y`qs%H4QD#?uUN|DbnWh>@ZH>?}S`2=LaP*`f@}oBSEY*S>UYfFOwnx5u`xI zc^|wr=XYbO{wIG=a*!d~0j(4&{IPlyvYvfd9yYdKc2^Snk@?TkGJVb!{R*o_y$nO~ z)^^mUlzVwns2Ll{&HfT$$^;<~1E|OQZ68YU79Xapy=?r^g*f*z(Hph`d<6dQz2X8h z9w(Wbd}U%J>?+rcjF}vKtAHv@mNKlefCO5V5X0p+aIPT@nH-11#KP1cqV2F%R5Y%Q zA0)vS^2ESmtIcwMby1UD=dl8bJNcFRSE*&KJiCVnh$@h|Br2s*qEIbWoNG!H3dJuvL5Z9P^}nLGb$}kjhCuFqb^xuS@i3f0v-~uc))A~ zAi6+|bz4^n)0=jvWvo6bh+QmU^48A!9xIviV@RE3f7l@fHJkG~L5x+D|BC!tiD90T z2T5KN&t6

A4M@4J#}h>8sTZ$$RK2O2#%-dL6#_;GYrJ^Xcz`+_%9Z%3fTrj?J@& z*3S4n=Qq#Xc8`j}n5AWT84Gqs6@wK)^3AG(ZXIvZ@m310h5|L(KhSWtHZv}d=Ru1o zA`aCypqDC%<)fuvDffO=mJ_+foqo33KkGobg#MZM)Vp$rif1?H4>$ZyLt9`3@aQdj zA<_1(Pd@wQk2|D+WAkynij+X`DXS}1XC$ZY^yQ;-O#XKY6Y6!59(>pxq+Pr`#Kbe4UCblXax zA-$U1B5N+B7iee)C-UxxvkNPqonnZfpD^C1+lltrGke-1%6KttiB$to{&mr~_72Yb z4liN4R&Qg)r&A0tJVR@<8L&c~Z)gnOEO27Hsn_>qyxZu9ynzwV8?uPf$GAD#%aErakzY}rT>LiuJ+ zL1B=A1Riw>0oOG)AH1%!4I>PenqG_QEfPfObYp>L(>WWb2M%h5w2-mO!9#&;r)z?G zeK^Ot@nMRs>~bU`U`CzH@D;b}=zc50Ie$88sW zy?*}YA@!KX|Hi)tDlqG&NC_Mm5@zW+AAV|k{iAouY~3tvcGO#E>uCqx7rocF4>jb% z{JZ2}Z%6-pdxs|hV28D)wC?k?b`>2sJwTT-`#z|#CQ@|56F+$QcYjj=-!p8OA z&9*$D+_h?LeYdJ8IAp8+$6?FK!{&Ww0tE!{HZ58h>MZM%y}lc63|vAi=;)H_`M&RU zuAaiKo7F1qSLP}vj6AvKo5=S!@HL~4HKgvsNo-c^r>pK5L3;bddNu#K!}T0R{UEFD z{l=bG7O|F=7MU|`gj`wxzPl?DHrzJ3*_)d;E0e|;T*cQdVoky(fTQ=dBtMsgxS#+6`f6!_qDQp`Q>Ey zDdwj>axXq}>ACiWT_ekh%bzYRDEhU0cfEE7qUfZxFaW12MxW63IFaABedRkoUkp+V zq#WtQTcMZfj0lunhqc_JEi_%^=?qHbSll`rG&v1BBLn89Pse4@uF~rQTgr|2dRt4c zIooLV_H^qJNxs_$=qGAV6MHNb6_=X^jH|WzhkF7f@=Y;LqS$e(cotDVt`2W3CXl0eYV!`#y>))7#BavRp*xQx(6|e>BMnLa9I}+ zK9oZP!>>zdD7};jHmDbx^K;TB04qGs`X#d=dKlVf_Z8raHj@rLUu&XI19eT5jtMg} zm7P=${+tN^ph#@x+Ti*Agx#hz3dsw`ts2tWG;t{9aSn z&q&RAP-Zu?vE^^6s~#(%k$dTD3Bm-bNX?^8C1btyQF(5yp`98A7CCdx^(S@GC3(F( zo=8lj3yxBvH$bdYK{Pdu#iQxtSQ-WPIkKiJ03&#{?MPxe8Xi!5B0Z`KGxq4^Mg|a+ z?NyZqHF}HxdzTt)Kl+UMDYe$thWprDyZ}^51sMKIsy~`cHBj(x-@pta$(^Og^A%Cz z?euKq&2xm1T=CzR3nnTAP0dpc20z%{dbdk-s+A#L|b zpNm8ih+;FGOhqCL-z;!(cN)El{g|{?>kK-z#gh!6k>1O*29M3{09mL3q-@TnBzSN%!10&j_zPvM6_+JYCY5jn$D3WMBr&mbEv#^Yx4rIs^X~ zf!_CPW7uzY=hbm0FX#j}!X#<0>D8m@b!Qt5>J44OiIBkdm!OeFQNOynyzbeiY%8q{ z0wMRfN*!*py5DIUaJJ>xE=>$~ln~ap7#GPcciU`kk0=#KReQ923*HUX5_+Tdx;Y;O z`NuqVLs3g}Pxvx_(7d}g;&CgPYI=6lb4xwV`?7~Wdc5Io{+s#@du&nQ6S*vEV+1*t z9~~aDR_OC<*V#?de$_5yI1lbq7|?8>EWiEk=!On?+;-oSdx`$pUHV5vQ==c2R)lwc zWshsIDJ$TyRJsf3)iK66bqTNf6pvJ@z%o^GOsj00)GAqaq^}%+spu6WdrV~1WZ$Tb197p&)lDP2 zYZiFsY}4%OQ-N%BaGR}G>saJZNqiIXt}1fr2}_a4jlsK|?l+bd6)Q@CF8k$02&KsV?R+(qcWzEkHur?r zdA(C2J%IW#Ficfcvwck>99#EuarDkCi?eUaC~9V=MV3Z?WbAR8U%H*k;gj@NvU^Vc z0wM<8o}1O?g*7`@A7{c`OxxsN7pDaeeMgGw_OaoG`Bo{O!O?ZWwdiP`(45^)p;SA- zjP(ki3I%m9-JufXOpry`j;W$|Acu|s-by;QL#QmF&j~5-LXWn%D-0q_ULv4`91q-fh z2q6+NA5i$1qwl&u_|DYKEoW~?E0ETHz{MVlk!^LSGVmpX&UWTaeC^q}Pv{G?32YH> zp@8-Ivtd4v+}1Qj6Rw&c+s>Zrn({4BoKd+a^2VIn%hDtGmE9A)x4JUAJ!GYU6%M0> zDmg_^HwH_lrrqL$@wVHQ#A);x0zq?5?7z|ApEH|_D|)cxs&vx7G7536jTd4Y|3Y4- zASY@KyS5{{O9j5hB3t{jrg-n@x*ib_=|?f^>Wcl_EzYB#*2I_X_(VT3$1}2cCj!3K z>qlkPd4)#U-bZ4+e0YcF-SpD;hXGj8gXb+mjD|`$SM_zuR|JL$d|@cKnG5OOW4JU0~{w*Y3z2ud>LQ zc@>mLtQ_I9^P6`XD{=Y;J-@p)qMJ@zuuBTr50h+V-2rh}Q1MP{6iY;=I417ai2&`E z1K}W{VuJ5Adrp{*HD{5mQaT;&iTYNN;FNUjAT#$?o{vfIMZ?B^;^{gjNxB}Xs96&W z#azWOk7|zTx#m!-JI9VR@GLos<*4P9-=%$B9dg8zNNyi~6PAMu!PGn=8el?ube7zX z{bCmJksgceBmHyN;4cO$3Cb=H&6Le05%2y!14#*sd0s1Ny`GSbpz$f~mRNDp3GE7u zn*T%9S3p%2t?Pmah|(pENJ@8yN=r+3m$WoUBOLI~>VmyHS`{nYSU$-Y$@%93@5HQmxe zXD@bL8w}x#-Kq|+p$+2x+K8)+gfX2gbU!;j0X0o4HO>9$**yo2vtebM?1~?Vnifom zQ&Y=M1y|=)7UPA7)Yi zoN|-_+*~AOie+}pHyGD7WofYjVD#NKv#ajbDreG- zG4@RFJO){QY0IiKsJC}U(jB?f>k_z0%ib|s=+zku4RYq%Sb~ORl}v3wew2D{gCGlJ zrY?1Q)~&2^W}Bbr>HeoJ9s*RWJ^gB5AXp4n5PDQ7{L6~Blm^z3+8l31RTDF28PB> z84a7*;e$_y_I8uZZeg4N_KwI$n}8SnA-N&mBpJsWTWTxgwyIA1yR%DSkg*5_Yujg> zblfJNiJ5`f^2-|jRn5jS&~c~ocvaRCZ2F)#WRH;}VclCBQ#e+g#+n<-XtNPk%ABonQz z8I98M5#K!V_WTg5xuMt7)4xibK_MD2rse#b9m#u{a{->n?_8c=9-#YRAQsWSBO@IEtYeRT5 zNNc0!U|{=P*DU!skL0;#sQULWJlR&_ZJBT4zP-ED1*flj3JC$|Dh;VBmaL?D06wK% zY55jMary}iB?ID7-XdRPHvIh&Af_Z2OpO>=v}TN8t-a*e3rio293Mueos|NNzxHjr zldGKcF>@R0=^@tVg}C62#f`^0AA!g{ykLU(inphKKqy_(`+D3jQzbr@D`e3~^jf^p z9zm#xbSm2;rZBohq|glTFMRh=ez{d7?3AOz)ZS^niCmPk(GVb8y<_=Q|4yNTEQs>W ziyHcE1LQzDhfpS=sxiNYKA*~>_yYvONr=v`qK5m~HfJt%1%ce?r|?BOes9Jl^uA+& zyOe|O<=dI~EaG`H-XC$jpGc|c7mpRrODlFtmk(V_Y!wwA6AXRPp+aZ<#W?!?^X=ebK)fY3EE$ zH!iz+E&8G@`=+~>4|iS9%$zp*6YYN&p1YmT9P)e?_ZAX5=UrG)LgEmq^A~y1xz2js zXN*jc?kv6fSN8*5!2XkVe7>$mg>Th`=UbUPRPPNni%*F+sU>W*e3jDodzstYmujMq zJk{lSR-|*gu4IA(|1`IseR10f?@z$bB~N zCB+kGRaU|9%v)F)KW@Yxri?$KK&628IeEoLoJbR#^tSSa#|)PGNaYC|`FX>Tc<%MkziLaS4h)~_t~G0 zr~$|Wc8#4TuXx>zrMm!OL3N;+=-Kp`cY6o4;(E)C`&rVnCug?@7RTSaz@e+MLqW;!u-c@qxbR7;^St4ww6R z)xU(TnGI$xfPoH3`_}A_?|p*n$YCsv@2wxeYx7-0yU5i&U30g;zB{Vmao-}+N;=Jw zQ%hkFGmEyh|5ZU?7G`T$fN54u`Jwua7&{*MWE%Iz1CD4*>Uw*;yDf+Oq0df6jrBY! z8M+6}5)2c}A`zNwQv_dIPsXvUbnTa){vv-HS%L_zX_kzP0`Z|zL&m1NB#Xs5gLRd3 z=Aq7dbBJ;IUY27O(ge(LY=Ql2XTCk#muu}^yUV?q7c2~LuiA5y|Bp=j%x7p@%BBiG zbwzH>FO$aqQ_`4n?492!v~29XpykCRbAs%fIBU|u2*V|A70edd%t2;Iq~YZQjg409 zeik_8hjhkMeMuFMUkbFE<8L~y!b`>e+a0neSd`BXo*!`oiwipSFmT`98%}RIh^*?0?GoPTycmOghx|}d69FM%-JX!ke7Y0$&hZ<;+6kMz71BuSc2>m_ z(#}+c?vACju(p{?FB?ls!Re|LA?tgr^Oc*k2TN64)$p2-A!MGIpZaAt`=1tXG~v%D z$o@p&DZ};V_b!BxFB!f4ffi4#?Bgzx@r^0gGonT`w};e5NI%*x#>^r`LW=eXAE}ei zMm!i{)jv7YKiLp(q_JUxJE7oBb%oZ|DZh)ofJ=q;6@tsry35fP?M(tmgr-M#}dHDib!Z zx>9@UTiAFky6F*a5zjA6<=#Nk*0z6LM2?7mi+ptF$9Zs|;-8L_5ufm(T!ZtoPh@`; z6YtdUytzC{`RQuDP+a7eG1ASfE#iLg_(?^UJ%R%d=ci^PD%7No01s06F%?PS--*bF zFdytYGiXVdNLPf+k?C53_E?|8`AKR>{^{YCoO_iP7Q+l={wNg4eZxiDgY-10MvN#t z9%^r5VfLO`Z~j2@YUj$ie|aFt7^AGNE@@}S0%KEujNpfeCQDieNIiARPX(^RXR{pX zH&dQjO#WH{7;4Vp(|N%VEP*cJ!{oMYbI>`rA&qYoltqlZ9Xk*a6znLIY>%$LDnzk# ztD)_OkMlC(?qLXCC>+9cc`x=_Vu}>y*V^_czzj*!)sVYsjZL~Q-FEcu_Vvepe^ClN z8K%cZFUczjX0g{sKYcS86by=jBhR{YCVu>RzIAoMgqFVFnY`K=v;ILDiFm6eep7Tp zwy~=#$W;`3h}LL%I^}^R!ROfQD3^s zA!dwb+A>^|qQH$(wR)wT@lt^AYN8&f&1CZZlMp|#*^K^`V~k#bjNKgNV5pA!BWc5- zuK623!kWp7k|SnZi+iPok2wsoP%GvcOjbFf1K-0}yQ#7weTIP%x1{&($F*!=0gw+X zQ|pr4Rtlz@&Qg^beNWb@!5k}3VAgy7GO{*02t&|7?F=ej52bJcpr7lh2>`5j0j{hz zRQMRmn}y2Z5AyEPLt)W6uIo4l)vKt*wL7$c0f^QNwDnzq4M`b&X!`x0DIkEIbO}8~ z0g!75kgAOVJVB_MJs_2JoKNYZc^j+GyKbghF4V>XW$nhxhC_^JPiw=i0G|wc+PgI9 z0FKoa5ajJE)o+8EO$-U%(gXE>z#D7?8p6v?b+ekD$0b0X|-m|kB2q+(vy|>J*pZGda z9;L6`1t@R7p`n4%>j=TQ1Ev;KbabKM0TtBL64IpP?im0a3X$~7H{H8GFZltw9GO%w z1)z)fgI0yWku_iKmXzG@A@9~tnq88WIMp3Rehsd|$nMZSpnkP5BZC911}OIO+@FoP z-w6n~%y*sC*;Uuz2ed$i+<_msIbak4Qxs}IpdE_zOS^Fe08Td##;yI@KrnjNuKf<| zJnR6g$QFRdp*~5+{cJRr;&_i4Z8hdWxw3;nGQ6ht@1buh;n1Pt6ycha=?h?Qk;KyA|g zGZpD|FFGOitUETx6!XtNcGJ?lWGVH0V!yE@k;mKJxV}zP(0VQR__AQE#iP%wwYD>S z?}d2xrA}B5_jS+w(8r{ShS`yl$&zJVWj>gz{TW>&@2;t$0Zl%g<+50zpJers-hA<_4fn1HeKkhFUHM zuy_F#((^b}m)T;HK1VKn(aO5c`EVmzicx>PH#Q+hQc@D>u>KS^J3D)u2Mz2K;I5Kn zx7uk3SdZnVLnN|%`|O;S({JCsgB7~pmYacC5dxv%X^h+3`$MnDf`Tx7wg3RsCz-fH zYqUXaWI`oYmAg#t7vQ)QCSCQ|E@V1Q67+D3^mszA+n54H^p|+uhmzhcBSOXVx9t`H z??cONJ6mAU6l}7Qx%sp&Cz6vznq5$*GYLBNxS@~P&5rBk~Bpo5^b=zV+psu_?9LW_6#kK3^t7Igtk zf7cE}1$7FapZS*Ob?m=BRsY)eYfchl7Ys=j~?I_vxG z`{&P35r)<)(uNc(I9q13C-$rhe=uf6&xS2HRQqu|#Qx$(o4F=&$Q6^^Kp({CjKB6X z{WJOV^U$$DdvyCOR=dV({^7ozffW+?lL`IA&Y%eCbrDNukzIs125G!*SIm0r82*EU zDev*Ro2@DL@rIKM{J?RBdp75PVidP)0;Ff>M&_xI z#iKhY3IFagvZvr@uawo<4U(&2Oh@NxkUa`m^PKfK3)s$8T7SZ>s!vr%$-fSmQ;cj1=-xd%BxFWzS3%U{kw|s4LGbS}vh8Yivmeny0 zmclH2FF7{?RXL*rfuRN_k8?*If%8OZDs_k@KCnj0%*yi9V|GzmeV}O~6bR4C$nXYd zJ&XA$1tYM-Vr6A@0bu9bJMOLg^vTIdoy~E@Tj5PN8tti?l>ox4)AYywyX#YRKp6ov zPVIP3&n8ltF{rawHL#08b@w{wM1XC%VP?8_gRA3Y&%O-jE%IjauwYH|_G~{z>C@A0 zb6d>!48(CHHJCNINhsctwoh+4y20P`r0s8$u~AGfi%$wm^+))rLtX8`>xW?UEpeA> zDy9Sf>)2KQH+AHpJEH(sA#0OX3KCWc|L{TDjN`M>!`pbD$UtPwA5Ww7QbeY?t*2xI z-`am98@`Wyo2rA@s3liGU{;Kn>;Lv|b<|G%Eyt{%CZRpdSMuqqReggqPsyRWmqSyX$t%uZ%13lY*RHr8glu8iQtT(j1@A{D1 zqwO+ce_F9l>oy1d(huu-v)=^!!VdG>qw)WOD}8@CsIkBM#g?}sQCo%_W9vcNj)nL6 z)fWy*uh&gWC&*Dh-?`T(Uz`4t zQ$W^y(IqA6wt7H;s7@hEj0Kc4(0m74(iA8cR-X>?2~Dy9XSF}aE>-tdR#q7Z*U#838+A+=DE3 zqWhu!VdyGL37`@rfgh$fJ>DNeNkf3`bTNG}Y)5*y6b_y*5}JB-k$R=fS=WUF0?>8B z#+0IvVQ1L3;w?~PAYT**E17&OM`krjoa9G-elTDhk<4A+d$z7H+g{!74zu(paqQ-8 z-kBRwF{m^`0=XXR!$s(oF(y}()NRkzWQCfpg1naJXKG`r3YS(EW-rY`NzY(0q*}(< zy%mVrB=?Rha*Cp-;Jki}s0#D5Df6h<(-@iN76h5V-$8Hk9T{8VcP<2F1-a=IAtX$F zKbPrOi&3u@t$)&bL8yZ&JAxrpLCzFGkn92%(J7;x#nckj|0l$I#P0X5NoA+6hGuV;mgT2-?W=c&)H>p+V77fY zd1#!dZ?fTlYk*T@wnQ~WO%si%+eBL@jWAC(`*3+_Dzv|Wo!ZGaL1&vU`*}VQ8P&m~ zDT870o#?Lh=Xv%1H~d9X2}(hVQUBEA?;v$-^q&YsevOw)MEnd?D}|erUbsLLM8_rm z!_-=WD4|yQo3enWXUjEl=0s1?4SuxzSG`V2Q-v|1?10}=YUt8R4$sG-KMcS}1&NC| za3*;52XI@cvEKwj3TlmCT;tJaTL2yk5^24l9@yq%te%h)JSjYVr3YAO#=YO)EL=pA z3Z?1Z@2FD5ND@WB**F5Bg9vbhWZS4JDKT5mS7#ASc>;|Ae&AwecXRQ>o{;A=1xTSO za6=uDmWT&~FvwlDv*X?Po#^k0nF0r8Haw5@2f1$=Bf9EoX=(9T4B9c~h8*ijUqRM)q$=Jqjk)zxRsV#E)yq z$r<=%tu|0_Gr=x`s+7yA=@=dBSuf+q{9cwofY|c9=^e!|tdA0*vf>es@bXSLru<>-hSnllu-LW z<255*Gm^33@kQKTLH6>Ah9gqG6Lijx>TEPl*PjE zTEOS{AiFwtA<~`#ZC=xK58O89tMd}C0g!t=eM^tK3c7zApg#Ena$RHKQwf!H0Pd9E zfK!Tbymlw347;E)8md|&7D)olI=kgOPq1JL3JOZCk^z%(_4GOqD9MzSMS+(IIGW7J zejw|GN-Q*957^{*p#~1_gEa~DD`5gDDzqU5b_MXD0J<;3-_lO2?N$LTGaLMW5Xzw< z9Y9^AAE+gCv{Bq&BLynu=gjO8389G}eu$nAJ2tzNn{Xdfi!uI_6cN`RBx0a`}ObPu7DWfrszIn#8cq0_Swok~TDJJb+jpH9OqxuU9YgeuQ zXtyi5aAlTJwKL{EHmbHY<*_pbe{tyKJ83%b}ezj88Jd0<5X8~@`*hs?6xyKNhCA1y%?SWM6ZX%0`uhh z%1b!kW6q>ZhI#(u!d&TC1(}fq9y40UD5{IEgh-U+SB^|DaaLmlHo4upZ=;&Lqx;G3 z`8CLH(hW$h@)7^Dd%;lVOM%DwgiS@2IaW;%4V#lVUeh+~7dZQ%@hUjx!`!K8p88h{ z4~^?XM|Cohut)d!Tz04JeRb!qQ@4)>iuMAv1;@FkjKZq!o-rq;haTy~44QVI7#msc zojfmB?x!I#&9MXfri|^o$SL0V>9xh$DFxlmvl(nx8)xK!X$EC@z+r+8dT7HwL+}HZ znJ9o=jNHZyzJP(&KR$4XG2=gTHNI6m*V;~-|ej29%%1|(%rWqd}XLi^c zX6#cuoUIJiWA5G>$pVH!Fu)r&O^-P!lO~LqFK!@NQ6D&c7$hYpZ*OfiZ#zV%rY=~y z?)hzQ*m8qS5)$$pC`&+J4lqFjk3Tv;A2zpdGM=XZwV3rr!lL??oE&PN1gMXc9^t^W zkr^aLfWhp(XY=R+JIK9?46$Bt1KaBQ3)ofx0Re3hyUR7oN=n`He8l_#jTaMhL)*iy zvGMVwkRf6|Cp|m_P)y5LOJW$xHc%+&Ixj0m+ut5UCD|$chYXH9 z4t&ajMa_6rlYZc|e70MC=T z5+ys=)=rx$UY@yVw@DxAmT3FwQ{km@MR}z=qIu1o@h#5X)50i*YJC0oV z@dBbyW79rFY+N@r@N`~qoGbmZ&M=UHGdX#CZmTH8Yz7%zzLtG|fa`Qvn4S5F$$d8| z*gu*g^P5CM`v3)tfY>N;n~Ej7sIaP|!-S8M{97gG{3|%?4+z*SMMmtah_S4K&e)<4 zzG(q*1b+HaVY$93apqCasLQ02jo5=RX*$_xi zxN(l8JEgu0 ze{+(uxjBVCLgmAg!Nqk4ycNc-C$glcA+n||r98+eKi@}PemSy_oBSdnYC-9_AZ4z? zVrVaZ(ty82af*F~-e@&9U%qzx%VPe$@Xtg^xXz4>(yU6%KFFIs#+7)}do;f<*Y^TS zWH)n}iiZo#|9g<0(e&Xov!lF@`)Yj!8-&=#4M)Q7im&aP3FFS!YP2Ov@k;~jmYJV{nZ!2N&fOLkiso4QpTdyacfs1OBv?!@R;P8!Ggw%}v3M?9;4Pj=L&U z(h0+8S$sU~laSMjB_T0!ZvUuKBn~Pwi%|6E9Z1f26qQc{Qk#b{DN>N43y@@Ah$_pg zT2QEJs!>SpP@%5AHB;bFPJ#Gp+Qo#wG#w2tHuLrsR0(ebYE6Fy;bZ&}&4gukon zC8o||gMZWvr8F^fgrkh6c^G8b-i7%Wg{Gzx7|A%--x_){uc|!1hr4zEK>a+$_(wM!F3& zOV85hx;>g2<~-pgJhVjM_)~TB@3l2%0uSKe;f)`iMO%L447dO8og!cyDk~^_ALqH9m)F}TRnlL3faQQGYqYiph(w1#c zn^hCWviAokU%{v!80f*l^j)5l;4<_bG?Z^$43_2<^Sl}4m4_|ncE?VCbB}4G!Y|jp zwVWR-w31wLD1`p{ujfS9pJkV#&+;FY6nNn>KYVJ+B>EkW5)z)Rh6nj-OeLv?pkewA zyJD9E+xb)Ae)-3H3)~QELpr^>=zN+2zQo=#UV2-NjG1XhEKwN`@d^b8K1b=wvIVLT z6T@99ZmTWJiu7Wh5oPMyjn*GL!^$sfb5_Ua^FjhNFEas>wSk7l#gg=sL!>{+j`Z850k+^{jB+wt~Y&rU6%zFgWm$f94t)_qwrL1z#Bo; z3*%nGNreSSOs^hKiRCTZ%ZQqdD`~Z}9)Nsc9)RmfV=?Sxwq5q2{B?1#&i z{8gZh52~Fnf}~mEk+P9cMY-{b3D|E@Q7z;7iY&-}AU#6!2FB^Vy}h-+;eZMw=#a92 zT#uv#sGd_-`2J95|IMC3``k>=U7DyMq@W-}1KhTPf;?KYf{;w#B8`Ly3M5R5qCqb- zB|@pH(R+;uiZ~O)x%}0fzV?H#q}c+QkCC|-ySR)p9h**n?0Jq0XgwFcF0DN2lel!Y zl{mLO*F&2+u-(KrdD15BjlnBjxY|~DYiA~#l7tm`Agrp*P0Xm3gc#ozeqg&YI$uqk z@13t`zcSgdRe+V-_H}NhE#EP1^=Nr?-mKs*Sp07@IY=?QAWxcz^PC-~VZB9W$oVJxR1w%}FiECJrJh3igU1_?h?Vo-I{&0c)iM{CYl1FFM+*B{K)I2;b2VS%5~d^6-D#tW~NANnKXAH@qY zOZB$!@ANGwbF9h>tQkyEQpKg{KL}GGH*dAkztf%3@X@D)q1n~)eb7tVS)LuU-rSUW zOt#HTt#WSc9{v?2O~k&NC8KgS6VA2R4ThSdRW?oc7Y=G?K8Pe4nVHauz$M^p6U<-}50 zcSsy%u{GMqafWdOsm2Q2Vl~4PEm8 zumE%T{O8M)4b?=}^|eBkODio!xdmypj!f2pObea+M}Nk(x}5d?lQ9QHb|7*T+F3A4 z&l!1hRrRsJf7Qnqbs=Ibn6(H>v`eGYm8QYiSnAYG(`Z;xGqU}iY{8BQ+ z@S^T8U>NO3Hg z5YlzqrUYKa57xKoZaZ&)D|K+!s`iBqn8&}=aq)pbH~~Z+3@4$ZZqUAgNb$w@b!a;; zbntAZz%_&E+22GA7$Hjov0Xm|luY1v3lu5gjzCCfw%?Gpu33+BAVsXII~$dPtp@N9 zq^D2nf%c%5%Svt)tsj8;e^6E`*Ge?1iO@>zC`HyVct=1!z%B-q+s73NXT`0mBa$LC zFjc0W8Z$3`C@qVv3@04Dtw%-6vhT%^P9u_Xcj)4IGI#`}J z@6#;Ru@O6tgiL2J!O9@|r%gy=b19|><`0Lr9C2ajU>K_6>%!{Rzglh?Ba!JRk-17f zAg8PZkWVDJOvE%Y%1km}r3JQa^K;n}cG`B&R_(5iw(^bq z1~DU(nBBn~c6)A|B0lw{>cnptCYpUdrCVDmKuk-8J-anCX(xl*-Kb<=Y(r+PB0K&_ ztmE~c9-1cIbC^fL%dU?|yN1}Pf$G3c6k?^Qq7pE*3)%>8#ls0=HEQt^SPT&WT!Re; z%$Kooh@YK5+-(YNLgw6xjZBlMR%{c(!osY(tm}`(3JMGB_T{Kz@(SGaf*EAU6Q!Lj zRORKtH22*N#8`d%m~;o&tG6*DTQ{6fl0=gBm($bty{4nv4YK-*{zoahkQc7u8u@I) zna^a7GknD4;_EKBYUPDiXtDdsN{&h~zft+q#iJD_*?*bJw7J2si)L}#(_~fjK@o1p zu7*e4^VF88BnyZ?=`*ewSLZ%oM5B9x6|zS zZOp6f(F%Who<)fSxv+}OhZ!UU3u-TwGrSg~QNBOJ%MS?=zjQ{6;q^#eQmksIMXOr8 zug*#1^(y|Lflv}F)Rz){+T*ZEa_uh*^tX9@vM}EV$u-#z@&p3FOxL{tGMS*t$<4|b zgPO@O3%w+N+Y_9fSYAtb`R0T56sn}@22-xSMeWWZuUm9D&T9GFi>1IAovu=f7FM`E zSQ!rY1m{fv9EwK2&&iz<${l=c{15XL^vLYgtfk+=TDGDl8`1j|@Ezf7L20$xrZ@wl5?0f6#6$I$yO7JvsNM2c4)XB-IRvT<` zpmVw~Xak0w4GpPad_;2V1yCmmTsAuCo$Nro7Amd?8vi6Y(uqL%uD%&GddDqp!APpy zdVyC%Q}eo$t8rxiifxF$4eGKE6qidp*f}_kFXn8po_~do+OHNb8@p0?PI4;1>F`2S zq5E

Ttkt)cbh*KF8|ggwDVLL}2gJk}!C$PL(RqDdpARAB4`8)gDGuX5^oT zL1irlLQs2{geeS1rI3k8Fm)E*-NF8%(<*SGF4X2b;*eQdF*}8gWDu<*=v*2iT zByHOQiV$NKYu)5RQ_qjh$xBEDJBXe~1YZvqythE>!g;Ikc7I+acJNS-<~hq4LPzEg z?%?ww+&!mLL*fUdO6@k5SESfx?pzY*#cE!W5<#A0W4omP77^Y*Fzx{c33r0J1RR!ZTzLVhS+SC^h!8)!KEIHQBmoVUk6?&q6>SZKNMjz7_@ z!rI7sNNSi=`rQhh;$tde{Gyn}?_drNDf~F?POt+a%^Ndqptj_>Rcx%RSA))tZ9v$Y z1({r18T;de07~1I(*uY@^Tz6z!VOn{Lg#@yg9ky3KAwM@KD$g-Lj!SqpC~ilUS)%^ zIv9sKXy*d4L0C9cr3P)Fj0na28Bd;37(b0w~14#tmgL>PCkOB;(Sn zH3O^RTXrXK8aIq#he!A8e>Xy1{Wa(T7RiiC2Sg8EGr4bOygv3~aD7T<&d8$A2?DX) ztl9VK+P7s9bf&LB7+5}gH+Ga}AobIt0Ir0fxe!tCqfnd`CfjR~%RtEinh}wNJdD?~ z`1IifKL!t@{2+?DWkzdxC9x8n5)_8NJCbhM#o#H4iO#oS`D=x6XeK=J?@@&WRX;VU zqAfccgJqF#Yb}K2ENH#UTM&dtHhJitK01HgPilu@h#)KcV{>Zo_WJ&T5oZkSaiYZt zV!j&yfI8!Iy+7JEDuL02BhoY1v*3gXw@mU~TIlh7oP&sMde)s1!Al|X!F>;9>rq3~ z5Eqi$;{Fsa%!>8dk@SPPSEN`_M^zpf|k^P;7@~ zLSyXaHa3T+pAVo4x_O0#t3zH7Y~M649>6qXyOMP)(KM|Gd`N=c4OCMe2M1@{5TJkCcP7goMzgviyDfk zAd#1U0AmCq%ekELhLH2{bGErize6Qiz(9&`>&jN-koGhIzq9bC@PNEbu3t&07v_+1_N?-s9|O-;?-w++sUU zLLhuaqu$Ls!iA16i7V=m$zbtlh|QxLz_Tm5PKN-*`QaqKi737daKG~3Zm+}rdY|%P z?c9%hqQ1-&f6kY$=KST<#ihLe*2_Tm`+tm3-@~BG{l=2#NK#7uhDn}3lLryapsA9o zBQ9cq!M=fWAwpc#;I==~0{5BnyM*2>AKqU2;8vTzXq9t-sIq7lMd4mv7Z1BTg{t%e zu9r?7`W)nXY$x5m5C4*d{&wpY-D7NWG9btN>OMbP$FJoT93tvdz0seN{1?-P+Ypdc z8i6mg2fYA3r3NUSyX|{zk7j%5_>$-?HF~VA5j|tu+}s4t40A==0Fwq3cDZ>;OF#r* z=X47Hz9+;9;A003mpahM17Ku>pg2P13jpOSXyZey`bfz@zF_#1=0okx)=Md-SNc@b zxW52gMGV}`EM6tJx1%4*i|xpF3Aj$`!oBpg7R@%W2aQx#ke{SCQ}zoIcQVwv!37qO>oy^7v?W#A8XCOF&&=T-&}iT$z2GR2;?NfVXX^l@$nRpt04iwi4{ zE7^`GCdCZJzH5%1sbPY%F;!M2J=jsXfP%{cSi0VDVAA3;-YfaYDmK%6<$p zKeyPBsl?hni7mh*Vuo@P!&b5x*w2FkGpI2^ojca2ad9ag_m9%QEGrlQar)!TJuFSw z_xqVU@>xQ_VTSP*A0|?gK|XDCwz@W5L>i~& z%^hHK%w;1n~m&X;3R(5)M_cx0+SdIErN&goqoHjDgF zgA??~F1s47dZ2Tk;<}Nzy$Y4o1!Go9sW^ExwQhhxf`v9{XR~>?en9cTP}dRF#uJ=H zFw}MUb|w#UNa{2f-~V=QpN$NqB*g@~u0pdqi%y+)+SO@jyHlm*)+m~q5W^W3e?sY@UyD z9^xF~D;`F!CuX4>6-Jv&i66NG*~Gt;$qB*zC-s*#hF$1tuOERXd$J$?Q7C%~QzpWP zp9H52-}l?>lCnFb_85&9{rSQ~TtUV&`RI|#-Y8*5Td|dG`l6W#ef6tzbe+J()yfOV z{_8mDudWE05vxW3r zz8oRSr^YkSq|}lN;0pxx-~`8^yhECpZPr9rdcc3?(;xx=NA2m^yHRO9imWST#H6HJ z;uE|)RCr|}^pm*>Txpxg?%spRp{w~fc$0^)5(&x;IyR30k#F3EhpUYJwU64v52E&B zj&MqGNns#{^nsLXpq4Oj)?PxHDEXZq!g1Zweeu+)a3JbBFq+soo(6s<32df=`nQh{ zmrY*NtMNK+<|VOj!Ipf_Sbx-NeY;@I1@JsyZk%jZ)46O&K&;$_cnxQ~s|OJC?KyBv z@0F#3Qzu6E?WO(Xuxkp31Bq3z(_)EwOI>B(4DPRHh}G*J8k;@WP_B#mj^(!)>BOv& zY=}c-W3eMk!Y@h5b2q5EcB#6Oy~Z~|*=+V&M3Y{^{nuBJ93_RJbG-lEpI%kdB(-!lnhV|ZwAnv(CQTb`wV2GX>AYcd6)#RB*n|UxGC($H9}PFF=iTHv4nF zIkjCLub_bUP^?d?G)HBM-Q+kuJiG}q&u+Vn?0?&h?YR;EBFN}RVBZF``Ls!YrPqXG zVXun72qt|N>ZF3paCGCYW#Fk<8pZF7?=DRGXB0b5iDA8UC4G0avz);R0!$qxCT-^h z{3UN&_m57_$Gn=`4j+UxvSfZ0dje))^_NjDN@gfCI7kQOXzlY%H`8bH?U&Q@_2HE6 z@h2^fXu-)ypn$BpXzbH;UosXkLE4O`2jdTEhx|1f!6(}G(Z7*Pt&~K`@vNj79Bmx* z)R2@!K})y$6s7fV9h4W+IlLED|ND=}>sw2zfyB;%%Z0HeMd%m;+F3nD`o~)O{Ws?K zFnKg<)3CF#uNZt>Xz2+eV9_~|2{JKY#LncEu|cn0B&{l}bDCEx$uHiyX%N0`Xd82O zeh!kHhk+2`0ZvQfTKns&u?Nzohh@f0u>`cjxMg`qMiMXbkk>wc$yH~v3fP^S;rd?| z@vIYUQ4W=w`U+!hJ}xN0H4j1-?hF>P?#y>}tM#sUQZ&CfMaGVOgF*OKl}4zN;HAT`$mEsmUZ zIoYbYk#fog?IgB~>VY3L75TYMY;#fNhOzJ%gPxd6_KBlTiPn1xd`go}Fzd9ahiuAhprsAG z6i<nb^n8AZf0eGktJH%kC8qYTOXtAE0g2C0yQX3963r;NG&;!Fv8tlCQ_TLRc z*8XUEIM|l;Yp^rY%XFZhBBn>$39}sY)!r+bCr>`S3$4pkyLB3yO>dmg&^({eD4M;2 zsH{8YD;G}IIw)vXhP;r+oiUE$fGv+srH|=1O7z&czGq>6MxoEr15+b3)!`^}!au}w z$+M|Xl{jxtN`^q@_#5uOmkgYQXC97(ZiNB}O0@EYW*oIgq_Y8y3$SlP-r!c~cu5o9 z&T7C6=X0#7TlNp7B6UjR?o5TkkacmW5HHd0*O2BKJEp2C6@mG-H)^`w{albRXwfFz7*K`4f z89@IeS+>Z~`r<3U^U5j^BsUdT!eX#q=xQVM?7FugHCC0fV=DUZ{s6y@OfQN1KXHrf zsi2n&p__92^KimHa0p7DI4I<4DkQ|QAlK@x9m6hhbQP~BCeYJ{I&f4AIyCk4*Q^0>Rpoo`@b z3NOpaJ@G(YjmrJ6cghRyvs~nV5 zOjVGAA7x)Bhg&I5@{)o=j3oKo?hCmEC#fo9c4LJP+@cAq^dxLP?Txbf$McXxMp|ND6F%=KT(ab{cs-}(05?|$P6Hkp5(mLCDL1hMYl z7k!978?J5%OsDNT(gNVfLKLo$K8*|^*=Wj-;vdS+Y(3SgV!Dc58IOHR)BVGzXTgJG zb;G@bZ4n5~1+YwB9-V4NnBpVx=H>=$Ogx0&nck$LhW>erW-H-BC$+B{mX}Trh!;@r z4}(3Mr>}!&>z6e&Ca?7IH1s3W(BE9w)YM!87Foc;0nfS;Ir=gfd}=j&!;y{s8rWDF z5+>9IeH|B!^;a8>9#6!Rxf1~rGFNl@z;sTMOn;kmcdj-DSf&6PXvkJ(;lTj_C_>3+ zPEJnAWzZ@1GLUix^tqB59bljZ3;}_&k4X6ypm+MEr>ECHKL{EHwwF?F*Rs$-*tsfU zUH;4#|N7D?$&Qud-)60^Gs)q(-4rjsF=Iep6&qroJ!4nX=$4}^m2l z&N@aTOT_dZ_<~?ND7i7!z~Hxu2lpU!qg`NeHeiXbWh0UerXhv0d}f- zt=*Yz)!p`B)eS%JYf;E8mzv&|wBH$zk9ZZ|`y>dD4K+%1%#=qctr!d^!F#;FyE$^; zZ0+c{5QzuznG=9PZES2l)ZcHPtbpcAhyxO*bf%*^V(v%4)14Bfe)5W=n(;S=Q zoFiKP#681Tf@@LDvv)gI#~VreB+CC{)3H}?`B(x`AHQCG?t$66#r(dkYqzb-)ypf7 z7bQwTAY^Uw%aDNT;1h&OyN529d{H84{S=zTXTeEKwz#p0Y-w)KY#yKfz&86~Mffm% zM#ii_O`QJpO6ww*(RS2oEH-{9Yhb@p95d+Fu1o;B6`$dQ*g1OIl@Q~Kgp0#`B6P%K zV8yfoUv)Jz?{;jtCWDEt*7cUndN7M|2uabOAYZxkS?N?Sm~xR*P`sh04hA4tw3_jq zGZ{5C1YXdblFW<%#cCL+T%p@0b;$eRPKx`=8+dbFkdTtTce%ECee2eFa3QOvCJvl~ zwzjqaun>?6{l<)Rfp-qTSq#n2_5w#J;w}%IU;wG0*tO#TM9*d|x`a=8KR@{o56b|n zozC7~5^8EhcR(WqSddTXK4HYdsbjuw_Ll&(9uOL;zdKnB#cY74cX&iZ@ys4{8vyDg zK1tMbPpwE*A zl|nQs=a;w5Ox`2c4YUk}?87=XG#DEh0R+4*AUp!7`uVh-wDe2p;EyySdt%3_=Aohg z#1m!tw9cx*OVB0=1te~$Wkl!B4%l2* zT~e<6z+niWQ%Kp^emjMUW~2fNDcE@ccJOHO_g4m*m~T+yPenyxL&JAdQ&X$!zLZzM zHwgSF&;drkW!_Earu(F-DyFWE4_s`)6AC3+UmPri&Y9`A`o9F8g^!AKI*WynC%01>cS z3=9p~e&HC~@8Ji!0I&q`p#@fce6LYh_y7CW3?+049FzPKIqU%sCzjRn&CU59F)b}} zJhht5(xy_M9)n(K^^8+#CU-4IB})m-+<*Y^N2Q5*kto>#_<&F@A=p&lk-)<`soCs45m9 z&}Yq9fWQM0K&l@(yqT!1tULi)57D4y6%3lX;GIM5eZjC1#OjSOJ1D{gV8C&z3)0iQ z?dQMxfotGfu}%lD^^63p2{oG`K`P}ElJ^?V&GotU`|+T*QZ=?avD_}~h=_;~Mn*;p zpgM3esS|nxB_V0IK8H3b55fNf6FvLGx&xQO3GP~4dti{PsAdTRwioBcto5wjjA@6u z7r;pXim3B=fw~xwr2+1HVcd>Jg@F75dSi#6uNGunSag?74-U#RAq8AupS^~l}VdY+WItdhH11NjrD`$0c51H4$UwgAMkdTnjfu{!DRye3H zsa}6V7qp+YqJf3*ERMsT<{K96FW?16Sy1H(M#-=c;28_%qa6TY0hz3K;Q){1z)8UW zv*qAb{bBP9s2Yy*3hu%pRPg}9o)`lBz93q~N|!yF_sxJ_jZ@veW_1L}H6_5EeA!Vn4o;7n*{MSVfSjc3Z6AP5f2SRe4#swIk z$%1}*v(Jl1P#-w3O5%y^P7aTfvQcR+i=kgyyrz&~CF$7kba z;ei{aAhN<>=nZtsT3K27fBUuq5M&rA1xa$is2M!ZRIv`MqQ+O}xx~6R0IDrWgG$#bU(BZ&l`Tk%Iv_*jtF6ptY{ltacL-IECdg=uP zmQQjN7?rbDFMtVstT-t+$xsU|$GU>5s#uU16`M@Gf32qe70_d#t?$;>52&a}2U?6^ z!;TuA(GP?|={Mj@K{9l5wUPV>ftQew(0No`Y;BD-Z6dgED=#rKB5_ayoBGq3jjYH zxP>}^zxk+W%4BqWoZ#ibPzb?=Frmu_;13N0vvfhSXU72zssKWARuK9T3i>ofOOwCkxDDSL$pnX|8O(q_0N*ml zy7~_2>2f;XZPF{XT#HhCZ$AIqHJ<_=$PoRf!UTGVr?*XB7!nC73O)-IbQvUcy_oYg zUAZ1KnlIukj|@T`(^9AA1aryMLdr5hu_>w=2*EbT^%cQ-(YSDahvwF~kg3Ba&sGsO z`?YBWL8243ajW>G0};6-WBoF@=#PrPC428RYrSmMcOJFNr`DykLARU=!wT)R6A!+A zEVm)s=hNiE?>-D@Yioz7GQD_BMn)!MIJjoDWWz4S7A9Uek^CuH7?;Ti9dJ%NxXe33 z@Wb-WJU*@g$mN@o(o*6DT5|Ffu-G%q2+y9lx?Nr*q9vxKMMXyowHv*Uy9BI~P!UYd znme$U=#56RWX))4X$uG1t#VelqpCvp4@?sLR<5@1T%Zyx;Lt#Ys(@RbTd~ww8Eo{E*!aY{hZn7C=gv ze1A#?06EsZU&&5>*aN2D%8H06`?1TMEWVg#{do^(BS>It^54HAB$U$8S%F)KC$lEJ z5E@@Af>OOfl~4!)d~k{qo#vtX8egtpdk`G~Kp5(?o+|k5jq1n+7O)xmr%`}l<>A$p z8W_r1W90EfqHigR;upbuO$XB}38LADtLL{X9~ROi%r1}_>wSkW(6 zsRqaX3P{(98W~Z5xy!o=O}9Jub_>$_^IW+cZkIlesdGu#_sE|U6B8#*D$GI?d+VkY zp|{j$K(%Lsim|k{wJA|y+SKgZtKDqloHJ?&N-F`-9XL-*P75~#j&(^OaV}iYj_Lll zP1E{%9%NI{HJv@q@jlgRxh+gYiBZdiaZanp-n2PF~P^TO!6+K!ZX>^G1+mPk< zuorZO!I0mo$B*#u`|ELgC(=hYt3Nm6tI=QIgjG)t6(v2Wy0DCe43i6kqM6^nNh^!Z zOEckyfq?sg`C#Kefv z;ccDF#KjSyNzwwbqfWU>c2*V?4EF06>FoaggB#Fnns++js=wPaC#>uPpwwd^Vk51r z4ChVx^O+YPv~UHpV9!+Yr;i^&BU?fB`j3?g`&1AC-^QplgGkR0L~&5&^==)YB1X{6 zL|>nbJNdx>iZ$x|y1OecySJr_r9!{epvo8%@w@G&C_; z1!>KOFRs}l7>(*}k7jd`2Di1gE?(RinwoN%)mmCwf?5HJtOsHXg%h`6>do_W;vT9? z2e^SH&R15D#~u)~%J{33jZ)y%3nfbey&8?=hI2RDSzwO21d?1WXs*N>a`A)SeqSw` zR#OsGF@dQcD5{f;oLttvfIRW16Vyx?kaKs>mCP^Jhg_1jU8r`3PpUytsA^X26K_@% z0CLPzhdsrKqRb;`ZdX=T1|6US67tx=*c20B%OAGfO#`Uxe}k>0@%gzZ1>h-8|7u

Q-sPLcLEDq=LUd$do;k51Ejo%_yP% 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

Cd`*CJst9qNkR*iNrtt2Z0w)$fI#cB zJB>TX26G*t{(+UXuH(ujn&tccF1~72zStC9p-OTpPiw;R_}L`QvlF@OU0z#7PU!h+&x`$s_zz=olNZGXL8jSce^gW=Sm)w_ z0uZF|-w2Wq8BIamKf)O6=+PdrlY)QLeB`=^fFT%sd|pOE$b9_v3C7#PFs$&(L6td3 zn#h*|%Uf&myPpl`oT+p|XUz2*DVnXth1bg2GckKwqAm|Sk2g|Blz7_YoP8IZ7s=<# z*P0G;Ihos7es&0p7|2rPKa4=nS}(zd*=A($%9WsKRmlDoz=48M-1O124>bldb`-KN zJcbKWLD2iLGrm7&@}*(Xxg$r$;>=XO{+Yr=XCW{6dxwGeQ8}pXYrho`PqEVw7)Nk( zti0{0MV}|3rucvUMl#d(`duXTro=mL+Q5FSp|kUuo4al>D>Alo>8gH3J70Db+XJFp z&2umY^!-nAB4_0t`~)mV!sF?kN2?oCOmtE&4M!q~42)emc)J|H!DPcZ`|vC*E?#3& zmWhe!S<1KG1;;lB#)#y6?d>J^U_GSqIbQCSG{tW*HbcRJ?F47n%pO)-+F)KubMHn7 z*0wLQ@XQdD$A<|46s;vY@|MTFi}efE-=5}cZ)=hg5C&Q~LX!^1@N%R(9u^aJo{@q;3fI|9^Lm(vKr=_mjkvjK37@v*ajute^Q zJoW3@AjFwg>*chKa*{@o)h+gSM9`?Z#&*ybdK4#N4Xsr==p1m=Ay&E-vjfi(+L{hi zPH+Xk7_mRNCgyZQ9sO27>?>+o+1KNSiLV~B*OHW$C+av8v%Yd0nFXa`cxZJ~bd5me z8om-^etNf0G3-40T-Bv^eRUS3z;zDS*r2`fi$L~<3_#u`_PQy~b6jpmOIY2QtEy1f z-r&=7pMNtN?DsyOE1`={E%M=F{%ee~JAB;cf z%!dCm_l(ozWn5W_OqsCZaHQ?yV$@)#Cqeqk?X9eo25~?(L_s(ulp_5sJrdr7X7RKAj~`@k(IPbwg1vUUtjol4A(fwRklzRz=D-o_}r>IZ(`6N!H&6l@}A6T~}EygzFUm?ARfagub| zwrELejix*{+I;gs6)~+hVgJ1iUAQ$rftUAt)InYvP{gX;9Lq%FB9MG?^oqL88Wk0L z3BgYrphj;{0!zrT!Umq}=b02&6CKN=a}CeAcGN}^L~D9K<2dS9tkR>Di(n7$%+Li#E*&^TUi=aH7P z%`&oxx4U9xKPf&Zs?T?_3G3ry_>eW(cZFd%;Rev$V`CSM5}#Xfbe7|GESrWK(#tD~ zlEV|`q)}qU3I?dG#xK{|g)_oCmmOD9av{I{s~5xf)+gJaf(DBB?PeDdVR@%23?35q zMFdtxpwk%#ev=UO-ruzPY?l8C_=o+_<~%j;t{&^T)!i6F&ClEcGq&udO?K%NZ7*{={7WIT#0_;UoM={uAGB_REXz z@`NU;&g~Y-s7G!OS~x<)y4g0`iR@NG)L0p8ZCo?n8@fpo_BrXk#P-FQD z2wS7J#dSF{QQBBbTEq*@-6#!^)ZO!N8$-E>-u4KK$Vsdg75NLPJ**7fb@r9Uq0);) zD;xzr7TvsM<;WiYzVbA=uP6Ygo_frtv2(0Q3aNc8s226xV{UhInypXedCooevs|Gr zY}+w|#$+*IQxo3MN(X(4`25pS&u_8rpi{f;&#yOQ03`!WP%tB!G$VTUelnGr zpM>~lPyqO`ggd32U`PE1_!f{`qILy-(gDf%q1BgaJSx1`m=)=;JX3L1vflo;OS_*3 zDyIUe#QDBGBg+F5b8NTeH$JQ@X!=>N22y{`<}HqSLqRdyp^yJ+7SGW}sBT@0yEXd! zOO`Kv7TJ3WVf4|ixV}&9s2NjF+0Fa{eZ3cQu+zR?eFvt!)nv%o8k?z&S%k!uq3Byo z^ua^+Q`Cw5tAT|9;(G&Ph6A0fkK0TfCJ+LADSZc6yjl}L?`g?sk2-boL=-Vd_yy)S z&nvXMP%y`#{~HdwJo(?qPcv@?vBN;dGOw~2=txx7t7a!`*>iXzj#lE2RMI|#mm z4}DU|(4*<83`7&>W;6X*hRC_+kxg3l2yp;F3{Vc$_1=q%+V)G(9rST;6Ui4FW+QYb zXJbrX{~3`Ls2w+2Ym+;Z1SXSq!NA07u?3Qv`;@#5aSiN{+aai#!Ru% zj?a*MdMI8TgVkCm!ti#B@533r5bJ_Ir)WP50CXx*D!eP(f`T|>a3D*cfBLy97&Jh5 z`Gm}`e98C+6^=%k+%%CXQoY|lWb&eSHM;lTEP&>08UZ!d!`fwP&dVCJl=$nW zRBTKH230s~=Z`Vzywr{|?{ltgv7Q(%L=aJ`Vn{9vKl^O7M^L2`cY^+--T0m|H3v`_kP&T6%(j{OPw*2tXE{B z=xap;W`aox0=E#TtMuf3kQD?eec$-$i}a(`Q-yjktAjU%Pu9h)NPV`S$j5R((9!ixMfm{S8qI3|8(fw!OUr7hf( z4CYaKywcf^nzjucjgm|G)HlQ(9@P)+iPX`|?zV*;{dDWSG0tW)|` z&&|I$3S$l?k^9*J&fznuINqeEC__KdqaZQHSc%w*FheqqYtOoNBM7-kxmG#YNktn% zS8P2V);n;!9C8XgIF4KjCHYR9+QovbfdTBfN@|oNE7^5xC+AK@rHbvM6p~(1kwUINc-;z*85w?(lVCJpBv}GWQjDlVcBQUG^c?IsNU=@+ zzB@58<46Iyp>kDeTJBIP+(5w`pq@M=DOySsI_Gm+Fg%0a#uIpMDFsw~U#}>H^{`aI zI7>!+pGMv)AoRooEw3HL1S(;Yxe~By37Q!jUlP@e%!YEpDJ!h`tEL8WH)0M=$n}e+ zci!Ro3K^iM^=FEm$tzb=i437XlHR6OASk2sHP|RO(Ta$}j);2=+?ig|9o4H*mH_|M z2Ar;+5xdgfkGjexB9Xfi$Z`$XDyYVtCwS;XtOtot2CK??*b0o(qAqYzWE~LIvQ0cf ze>rUky{@IK{R}Yam`Y)R4YrE#4=@@bG$?R~>gKYv)VO z1=J6FNd0JbFa)YTnx`R`OmI0L>~P4>seXQiTSLljZ;t96GC^IuHXT6Iu$J|lU zHpBkxyqlZLd5$wiFr3|dbxcK34VbJwW;qoJq!T;}=f6AiAkVZrinOJ9b;wK9F}5MI zenE~$hdjtpn^Ds^u~Rs{A;0d#iAPnmvQ{}{OZ zBs@Rb7}II6&n z*1k3XdmQrh3>x=kw-31O5e}x3mwGk6Ppu8+@Q!vO6YOq&9E^XClQQRQnHkwIfVopf z=I<%fRhw(NatF&eCDrN@1IM^D)4ufX)b=OBbsS1 znY6XT6#AZ~?SVnin-u11WN6rA%GOR;*!%lrX+uilNkp^*6J7R0ZiNx{7UI2rUyr^q ziGuO706=M*6LQp}uBmfp#0>G%w)!{S65Rd<)F}Sj!Z1v3;KHxY-F{nuG%O7Yu^JS@ znq*n)F4R=Ur6s2*s-~}JxPEDZBa!iO~gEV)|kGp!4MAm^uel9s=>EuJ%^n3~(x{xH zzdLI+kvDbH;|W!cvqwJr*?1oda&+-?o!+t8+^RSS}Z2KW|&0>Y3!vey| z=`fFuYr64Hq4hxs`6j#AJx`LI3nl*15%8U<)8{7q==SP1qHU$iOKayE3H0hU zr%zp8WpXxk026Ebea#Sgr(8a|QJa0@5`!?u*N`B*FdS8;w86k4 zjL+S)Z!e;X4I#aW73V#i%gYn{2N!_vys_%G=f6fZp`gPG#(nRBQ5&jMw?qG$8rLg+ zB|1u*-9IJJk9pNh4gw6*$r5lZI_TV*mbNoYCJhR6Ra_JlLbmpy=}2I*sQRMn7R3+G zZKni^a@X6Uc!0NkX_s=2=>;4cRB9n|ONQB;_+4`0%$!4J!E#4&|1++B1ossE~!clI^Io zcjPH?(A@utbk%Hu@8Z$^-4cZj;USwwWp*+3IAg!vrZMWZuK1T z>&NX6LaYuVU#QVYtzoyO=f%i`r3|Oj@k`xAGmp@{jUd2Sq1rrS)7aG@KV_g5p^v{-u=Fk}hh%{;p^=MK8PndQ* zVa!WY8e#o>s}WO&DhpbC<9myf@&1Mt^HX}tw0sL!s>{hl5E-H3aKqbm*P{>7|JW7q zd&{d=f_FB@b#4c@vMh3>a9`Qy2Vo;T8WrpMgnq0;ctHUSAO6BMIAaeXna0ET!K2*P z3{K?ek&IOu?+o9zv8YTnuq!t?`5j*8sN^|TimJVzJzcsBw_-zlu@9yKC!6*Y{#s1@ z*ra4=28L%0v(Sw_{{sBt>36=1l~}j9&;nB^tkU;M_K!s}St4nVL}-5wZ0AW9y7z*b zG^0c2Em6aH@sk&_X9ELWT}8{_e9as@vK_a5Q`Y>&jEJnJYevM>jpV=Y=nvbQH*|LA zMdx=4hsoMje^SeR(3rR&2F4Mgu<<^mKc$fB^lbB zb)}|AkLlr>581=}HCmJ;prNKUOS?k%z4phPc5pn0CO_s?QNfap-&c3V;E_P1$3g1F z4U*6Rs8cof9x{aC zO3GJUAc$S)?-($KUR5ZK_kza6<-{Dimy*5H@!p-((sB1+-mdfjHCp`Q06ukf8>ulc z9HUuEakf){`4UrrvG2EZJH-D;xBtlfnFc2Q8{amdO7m{!&Ia~J*81gEueXcT9b9iB zhazv0m@4{tD=tEr)1YhIaB>6DP8*)rjB9DLf8W#Ux_BRJ{^lmU*t49#%Z|Foa>0fG z)()gJaDw@Bm83r|uUV}3`=!7YCdwz?s8rIr#&q{L;GV0?e8F(}s=xRd*a<}!T(=sf z3T>H){8~<{?r^0nXAoXEJ9+yHUE1%sIm0s5f3KR#Xkez!%k;m818sbUX1MewtcFm8 z+6$yC;(iO6`;U-|OH7CsFqYGMid)7_!V$6&LnKX3_M2nSC-(}CFy==^<`D`K_J@2U8?tThGl>ItLxElO~ z+*+< z+0Bw7Zb62L+C>aW6UwQY^1a z#u*^RZQel2#7d4qela!mJR2^DTD9c;jLV+Xr5cg0@j05<${5-&_&mq#?@mGgYVpFN)gV zA|U$06=y82DhGKqc@=BPq}tlE7vy;b2tmp7E4rwbp zLP%xMDP6E?|I6do#PBcd=QMhAt0;7T(kaT>5gPK_;AscWL7r$fjV7{e*d|UYJ7SPbew<-<4+nW8V@4iZzx*E;zLP zDZ~q>-?~#EzMZ1?hLu%EXE)8qo1h{K+vcuKJeif(kEyvnvl|ROVt7pKRZ4NBd^GFo z^g)vF-`y`Dd@F}$gk?=!M=OmFb*z`dN07yK9N|#tzv?yi2$K;JQBBu-`_D5*GUc}# zbg(>XHtSp}JTR9HlfM6mpBEA0svy9Wmoay996<6)#E2il_pq^L*P2}T=PgzY<^WN+ z`ic}Gqe?^QeyWSO)Q^AXy8{At%1VvM96fjw$2zv}A(tZj%4->QUOnauMB7}4Zit9{ zOk=oSmWU6@BzNe-n{?JmXa>-WUXfQV$BRJG`iOVoY>RE zc3VS1iPUU)A#plNO7ri3gq=IC-L>SPONeRo;H$N!{>Zlg+2bbyvZL8?{qHZ-hcEoJXH$F_rW?I&4L zbrC6q3%V9X?8qU=OUL4c zl-eSikex9!x2prvXIy)yf8DyP)4bZ*a>g_6;sj@PY!x1ph;VRU{5l~%!-A5HW%l=* zi~lWq-KvYvTxhY5Q+8!NuU;v?i&|;@tm9V1r{jEL5t&2nKmmxje^mTb>kF$H7;MHS z?cTV`inLkRf_w;dP!!|}7tqW<`|JL@Wm$z0S53}-cYQaItgidb2fi<_otGIpvqFB^ z+EG&ei2O_4#-?}UAUL$MVt9V{9xT09?!WgYELcJ?f93i*vb+@mBjd;=zs85qjB$BTz$DaJE54=Xh88Q z_L8$8b3wxhuSuSau((B&170ENFY&8pIlgvgC+FW&MGa|-`HFjpJb|t=x2y@CuI=)nMFqa(PU?!#lx@{JRkWC^T_hP7xO;5j-#66qzmQhW)Kuwp z6>}F^Wh>OaW)086;PJ>ao+sGWHS`Q71DpCM{|hU@xg|3YWG-%<#TLkCs&^QCOv_*O zMmm?b&^Kpv(Dh!VzJ^Sa*_+KA>HC+@#2@o|;_8xLQoyx(-+Q9m7>I{)jbo}3`nSm^ z%~-)qZnok2wZqRH#QHH2&nN*O|E^gXH={GE@<)`EbnJiP>Dvl)%Tgmq#XK4!wdgle zhYv55Sz1Q4AwLP^?Ue7}ucT?4u@Ra(lY{H;*|8qB{UEwqwfF55hnI^|>Ys3IdU=7pYpVhB=-HeGqSL?$^SJcT2omwBIq@E)~Pg1=8^R@MV+gyojtOo|m82n<(qmuaE zbO_ed63EZpr(G=1X>-`ApCpv8TF)zQp-icr>VkKl5;+YrY-Q)h^VAkBmVi- zA&4!{<9pfz

9k^Jle8O(Dg;8|Z;lT+c&SCtuGG*XT~w`_CFBylG7n^zoI7_{t-{{8qN1pCH(u@ea!pA%6{K8QN6SY^A~Pk z`d7{oeNW+xv-Yg^I}q7-9ws{37!J(wubrb zae2F$2G7-71spsq-i|-3jgmX1r1F!6RLcoR+=pRKjbAX=v3}oYdHT8(J@mWb@{?Ne z6Szl32P7sWL44&mgHLKL*$i(tmA-{gAbWMK8H^@MDc`K}P3CRg{B>{6P$v4K{M5b- z`qZp%BUcw1c5>8BB&Sk)6gO%*!nGGL@Oa4mN84XkTs;e}ogIrCnD@Lzx?k}@h2s%J zT*M^ueodVu9|wL^kBGxUAA|)JgXBnXYxtBe4?sw<>svOzn>_*qUxa&dzuFuct8XlK zZftyDVeDU^RH$Qr=(2Zh!xikvd{$t_&gD$aoOJWV@QlB0Xe2N|!Z7Vmm^Zp(JC;%6 zG^ocDhKE;`!M`7{l?-_ytW86nRVTc%naK9ByI2HLxu@bcrZJYb>u4Y_G-z;5;klWp zY3LJb&+O5T;i(ajF}MZ8O#fV~dJ5)6YaRBMzkY7reV^UBsb>`Ahyf-)*#DLr3lDb* ziYzMfjs5MPh%3K+%p|;Tr=ZKaFNI%G-uP2qp2CtXqib#N;QPiKT6WFDN7Wx+c{L%xQVUl-PNS$FHmKP{N8_wn7yjP!o^%M$2t+E|n;p=uU)%UF%Gb=Z)y zp8ik9LMxvF!&&&XBYs=rpu`_blnb>ax+G?x-50uJT+db<3Y3w3Zsnn2?ceof>WUQj z-3NKRbwX|H*_#J~&)IFgKHXyNQmcLz1!S?-p7RU6na4DhWWE!3bSS+f} z@^~$uDgukgT(>K>jWzp>xm5(0Fx~&>+GOx}*0(fRWWes(N0~&vZ|DYJcLrrP6zJ!K zXQCS>U4*H}s@~T>I-1?G*{;jOf=Z7c6%Ua@9jBrWhHGr^n4bGiXd&z0g{Sp^vM#l% zHhX48OL$(KY`&|9I@1$l(Criv@oo$H+fXVBA}sgZgMq&KHq^GjV8_2#ll+XSv-Mme zf92NwAd+5405a-|l26vrdG(#RiC*b%HHivrR0V+wcKx`oqAv4c&xFB%9lz{B8+K^h zN~gI~ah&Syo>5if>n}wMpJtZQEo6D$x??}*uk6==9*&-V0wS8KKVmPv(s*TLCGCG^ zTgsx+|4rSAI56X~?66|!>4i3*pLX$CAKI7vd9lvp2j7x~9!9NoFI*H1Fw^8tL>8$C zkL0L~D2RyE!@crG4huYRB&4MKS!q6VP39dCAWebA9avu)S9*rAUvq_452?TUBGm&QT&*k|-9$TUKW+-2tG zZIaNqxEf00k|{i8JCE64C-Wdg_59qqsO)u#S-3%jFB0%CN0BwHDAI3oUvolzDIy|+ z-J^@dVzRz=i!QwC+uPlJ;D`*wyvt?3B|q;BCG+%uOef)?ey`}7BbHIYxzYUf(&6l9 z0iT^}1|cz!IMeYl3N!y+8Ok3WPN?v8U7>yI!d_D$9eR|_I|Z{-8+Mg07FD-MF@?Fk zbFQ;G{afzjSZRmgOnT$JV?T~eMD7O zxSD6rtV3uqZswe5`({$}zgYlVu|a-|n`E<7<~OMvv{40jw+YwG<38GQK)dlU1|Azr z)2b+?i0Uz0wifiQKk__$P8{^?uzGg&+LXv5&!?Y$$fP2*`zO!mPQ8?X#~={U74J6S z-J-v2-$z6xY}SueU*Bf|K74w$hc5Nl5!uE&pGjkAJMs37vF<0!nXi+m7Cns#Ujn`< z4gv>f%=agfu`0$^xnu*$zxWzI+-#M!E(bB&8;=4*D3^5a<==|m%s)&z;ew-j6(*H* z^L|K2cb@W@i9>1GftuuxstCf2_70yCyo!b&^^6frb_nF%J;?{G`^gQ(TArv4*jV$~t7D)Sy z-t!t&2&H-AwU-w7#i{-(Up$-P;V>iBr}Stw(5u+m6>Z0m;**I?;4yDT6;!+6f#h)y zEu~v~^2oR+&r-f$A>=%=>7Cf8HXJ07-+$7|f+{&~ma*z@t}JEBGE0tH<)2+Hvh_hg5{n?b%pzRj;Tx;GqqEWpZuxSr_TO zd`aYT@4#woewxy9_R9D|4-*q#=!2omw~ZbIytXlK8#0j9^vTd@#^SspCZD`oNiRk~ zde_hpv1R_r>tn`zZ}*)eZ_FciTj+?)1Kw3ny5n(2+4tT&%oRq82-%+rMJ=H(;=uv`# zpZ06k>U;<9^tNJOgo{%o-}^XG(Lr5H-)#CcBq#Q?#wcz>^G5c%vj2m|GK^fY$siTC z?TQUAEi}V{7(~UR{1{v>g7UWjgwp2QGxQd0lFoTy8vbt%XU7^ULuXOtIOiPPBcdZh zDTiEcPUPY>`B5NeUc)zUL}s@TJAE`NOsN_YLhgiC7p$~o#aU`G19y4GA3VGmw=!+0 zRJ_s_4IVSeUQvhb9mWg=CMYK5r^v7GeFx78x`Hz*wud}(aqx^D0m}aYxu05uhzoc{ zYnq7*rlqTH3mfyZ9IKL-UEeN#M-se0ktCS6ywpf%@}u6{#5(hy^f{zcy)N+uc)1ei zA!}KDG_<|W;oI1<=Y~u&vC*70mh9Ramf@zUbbO}HjG_x`Kjh@^BmP{A)j==U0$-&F zTId|Q=*3#-#h8&llBciPp4pyx!Q5Q&)atwca0IUdU#{cPW#+}I;@*LIFzQ1?)lSh5 z5e}8l0)Yu>{*}`jgDB@*A1w;sZ-9-i>epBhEn0^maX;z-s!z}xSBa*L@)hju7R0PO z@7cNF98(5usarP0<9O*0b_*->`#mNTSumRgRUYIJWZ-*NtZRUzs>vKeYTftMEm-QI zgiILGHLlh(r1H?c$JSrgmHrjrw+#7dlk=w8Pi{4iG=57rFFJKftvsehG7Yc2L4EbN z31_kWRXyZ7!Hw`<;8o#%~s7!2z#WGL(ef|Z2O z2;GiG^FFXGg~v&+uT1avJgZjYai|VnJ`{ZVsb-;pqmYlRAlxHiS$AqLrVeCp{#+2CVC-CzHEh{#< zPN<6f9R92rcNlY*v{iigd1I1BMn}=CfDf{7yQpa}T@+T)HL^_vBp;-GvCPmm3?Vbe z4`kl~$q*m}vL4`^ursPlvw|~9(XUuGq zCodSBe7f%V#Q4dPxfHtW;?})bHZJFHumFK&Ecu=HUt!h8xn$vmYj^0dVG+c5b?DJD zG+()osQNby?6#wCt+}e#7z127^_d-UK|<>VGQ`y8E*w#<Xg0>nIlkCGKUY_K#l zJ8no})kOp^+O=k)rZ96;SiSsEF<;qQ+S>lh*}QA`OCQ90Z@L`v5z$E{TwI>3Rhn%U zb79zTR2aXp)g7HgvNw_z=krgv3rqI=ZAg(}+d%uXK5RFb&h)C(E$ zKPi%QMFkvi;L>&&CyMZ)=%=)rtX{M@I(J)|+&pn!lz0jY@vX)Jgy5!`}54>v*&|T(cRQt;YU? zdYe5Q>7nX?7iIXD;JF9?e(r`c>;qc3i_fAy^*vskTxy9k4}u=j)XKs^)<_%xlprHD z?gQXlvZ`Ai^6O!fw&i9m&Uh7v<>rs?v-T6}vw%q9gVWNd{!}3fFNHisKwlx}$Yn9R!RI-WF8aa!WbA|US~M;`J{*hTAn714loV2FHq{!+J>Lyf zc8{-X1Umx$qdTH5HDGwn=fTUf{AAfo~cCa23BJVN^d`W*fF&o%T<{5xZ3Rp z3_0Mi7cL?x+g(O*E7;!x3Z~zTH-J>9{OPT5(Hm21PH_It9N#IRMhF0(9@|Ck8uIjg zrWN2*`7t~^Z05$x%gZ?LIB+uhqa@)D9A=YoM`T$blr`D|-l+O&udW8LGCg5rG@o$e znvgLaDvtq62Cm2`|G8bQrPHB{xl(cEdRJcZwkwq>fICx?40l?$w5QVPh`uKa_(P1&EyD%V(L=x` zCRSxJ7qYcw(#C?S3lz9h&9Y%_MhH+2=+4(WgFA}7eH)2IN;OSHvYLDH$@5$W8L{ zPTmO;$%K%al9G`)HvJ%0({TpaYXXB6b91YID=)7Ho|XSqmk*1}c64Jas90NWcE zV857HKgVd~D(D!SwI7{q(5+G}K-7{4q-;#FeSo^i&l(V)a2q>%x&g)qlfy>7@>Ht1 z446t-4h=a;-829Si%#%K7T^Z?A8LL~Hn=+0t(Vm}sJdoyI@Sx3?jC7=qrZpR9QWKl zw@DbNh%x)k#Tc&>YIq5U=O^nG&wW;=D=-o1$<6HCto*jRb72W!rt&eqT-Se#@IN{@ zp65bXw9{SVs@OJe^*03kUM7z&<#D)BKWO_gdD!v{((5rTDs9kf9Z>E3x&(f6;m8d1 zl``g4JGYW*Ldbq?8LDU<60NVmYR&gc@Ol8{+l*r&qwms0t_^?UP-VT!(N^Xuf-gje^gh zwK1Ib!MX!aL{#(;u(jP}L&5q0asV~b_qJWX+o=-Jsz&};PYaLOWKLJN8A`ae>ih*g zCh04pmoYDd#6V-w#_ms>rDHN_UJtLVM?^Y+TN}E#I!v5cFwm3Es*)4u19!ml;mb{V zREY7)bHPQ$B-RbYhrQ#YT8xHAg+mhCtTCV{O~--wvAkqDS}~cQ3m)QI;cxd%N^^Db{NA2C@EX3P;b)0)*DTCl?U!VmN*^{onJsxhk)gG zz>o)E?YaOGo94V-pC)3_YJN-R*-2zrUL%CX`?cNzqXg?|oV0hZlF1~ za^PDRqwEbAKo;>3Of7(tzqwEq6&NjG6}(z^-$!k{J*4?yG4mkwWjz}kTO5lvT!ZVG z0pP*=_We7jYf_IMXi9Na5Mg3^b*;4QI#3)=0=6bUaKPT=X^Rh1nZ?}m4@^o?yFQ3$ zINi)8MQkt0By0 z1H|b*HGU63nWkrG$X!=dakV$>p~|Ot*fJY!}|rOBq~g= z2P#IV*$Zk`M8CP?7u}ICdwK}msoy1P=v+mvC=pYcv`i8W~p&^N-^0fAcY$Mf3K#;Q9I!8np2pFVw(S5hhioQ?U4 z^sKC`0D4%#qVUOtW>jh_#tRJ%a&&*6*49^mF|$x0nm~!utkPt;1%Ve!Ry<%Rpw>KPk{_Mg+0{|9y zl4Trrr#nDkAKDnna6huzm}IJ6gaZmuef&epdGmYhIbb952DFz$DFThGfKcxt3JPH2 zYcnVV#;v4Pq73{s;t>B4DxlQ)T3?^k+1ZIdGb02BDQlegQ@FZ30fuBO6z<9_p&-2S zpzt_LTWte(0Cxz5CG41YXBve3_cOk@bdU_pFHNF5SzFGhx?>9_!@5B(g zZU&xlxbVWPFnK)1cz}$Va#zWeQGXyzv|sJ;Q4wQZv}I*~M!H8)Q`@iL&!4dYZ;`CK zyL;JH)5SW89~z0n&)vq8aW$AX>LQ+hy_+7)q_a0$)AfCqO1)}O-&cofschxAaJsPwFLg3bE~@|5%NNUi>UxM7^5jAr>9sD~^G822 zY&#c8o-nA%W;6taI#Z1DS#y9WBI`t&mAkQFlqntG3Sa=*3k3x{?s+FFXp$|uOjZmHwugu18n5>FY;0`0`}@Du z)+PYnLtPkNGO$2t#Z+!PNmi^$MWe`Lm^OTqu zu*ZQTf5gljo}2qj@M?#>wXMzl&=Zio0j=5E-mY2wECm62l$oCH4ND@vetiT3rqZ-g zmgL^v-U%TCIwi$UhdKZzh?$!+!Xu(S;^Bz{XlNmhgoMOh0h@%FI3P514dhn3N9zL! z_wOIVn6Cf=d9SG{3%qXGE(m2MdOg@?TqI1fc>{;B(Vz^#B_6cBSklqeWx9jJnmC}R zuRk(5*$o(?5@vxm5#ZwfTy}TdAWe|Y#19{9n6SGIKQ*kcxZSHil7T%5kSKV~$6Q?a ziy$U_cTjc7tgx#OC=VZdEABjJ0mqmo?}z_RF?PsNjUWPZ%s>Cj1HBVMaXV%2rZ)b^ zwT}CPfS6Nifqi)85Jr+^FqGonZ%%Q^zt{iVX7-9~=#au?PSut}ca+~QKWyv$#P{7B zyVYt{lWiwK?zPp`U)2{nLsj+3SC2Wvo-dsG7AwQj`oNs5RC!NYP=P2H`{SJ?qATDq z=6jK_T38!*N8UUOCZA(#ixgNvmf8{1ea%TDWY)zJf^+-W*-DFA*Z(?!#x$jch2O1a z?>J!r$gAtmi^{^(D)OG`(0^|=OcDNgGxw3x%% zyjIi3S@$pj{c@2;gWDCrDd>EjO^=2BIGj@x5+qGbwzRvxXJt`T7F5Jt9&e7Cd0vt6 za~<5mu~B6h!=0p+kUcjD?)b49=j#jK!!S_cXjH!&D#XfKGFFXFKI3%{9-Z$_p1iJW za}0+=oMLXJ5d+P#y0JK6?xtS z|N3P!C~)?nw5)6f*YxGfdla76toHWy$6I5;AoAUtmmIhQM3dkYF97XEi!_BG8ZMjv zN7Yw=Rn=`>qX-xXDheVX3JB6E9V#VK3P^W%cdE3Mh;&JVAl=>F-QC?C|2*FB-uL~_ zb3{GQW}m%k&N0WBYt0vLd3kX;tf?T%C54Xh#v`A5Up9)&w=P7b z)|tREPagt564U_7Q=N4pR7Sm<8XE>3NWJy;HeSS zaYZ7T{R#|*%=<)HcHrC8i^fWhXMIkFsxBK+KPIql34eOEIc7p z+oPXfSTLKg8rlK>Q!uP!YPzj9cL`r)H|tGyjQDM^v|&(+aLW12D1As3DmE+HOjwm) zU7o>%yNYw4)DH;?Z`>v1jzW+OP_bM3k9@<$(bQCO4!+|Az*>1<1MpfM%90(tZF@-F zun0Db=P-cSc?1Thc>3!d1hkrK^y8o!gtF8l)FsyWWx_2!Q zj0X|)C*bN}s3=`7dMk>$z$$TRu>xFCzf(&~L$xaZ3}$=V#rJp* z3&pp{{+rHlMg^PPKWy(E@-*7R3V%*r+|$%)RiN~Z>n!@)x{*oNg|Sgy%H>Vaf_{y# zu|HZB^`CqjE?l}}Pl`@f(PUdyZ%)zD-mVFpN#zkB!EnNa`)oN77SN$zk>Yq;<`0B? z$~fN+WF|1UPDN_M|Dvt3^*weFicbrujg5v38uSX~W9^GhW5_p|6mHU?t)F$x8t~4` zK9X9zjuz8K+U|yCL(Ex>hx+u1Q9=J0#mn?DQMn1@x32N21tEcUg(v}cL?#Ne&AMFbM5DjLzRAKT$~25eUK zhV>p)dQ>YKJAru#n8mZBsb**zh}K1zg+!E;cYd|t7Y-^zXp70YjR3u1L~|xI^vE+8 zGt(AlnrG+cPDZ+%QLCYFX&s_mJRo5Vp93hrY_K!Qncqb`(Ns#)l$o?7251_pMZ$5T zz^2%U7!hQYto6lI&d=}gwxCWK#S*?e{q8@3=lQ=ysHks^ z=2L5~LHwexH9y=#8W1dj+`94U$s2C=U9`%17sFpUQLlyE>wMzOK^k;K>}N7~Z;O(QLBDSRWs;$56OMp=B`cQBZkI(I1d0aHbLM|PEHPU z;VzIk5DX7za*L8mmQ~&e{P~m5&hF%XKwDQA8Tm>zPTL`EkJ5(^uMG_|OdP=JqM)F3 z6q;?9=Ue$>d{R_wM+CLJm|XR90X+VFDE&2chFF!k&&)CjnLc^P13&QogVsmrWOxPAB(_>V zGh?7gbO>_#_@+i`4C)XO2u@_Ob-z`#Cj2I2l*F8MLqUt{`2?{)+vMRpuNF<&EAou7 zQY6p3FIg^*;deT1ADX<+h`JfcY(&JxRnbEGY;SirH6w$BlCrJHZQ2>?)5oQzdO;Ow ztjEhrv%~rYx%vaY>qddf?TftNPafOQUh0glbaUn17%vIR&(CKzDH_{AKnPf1U=MC$ z7+2=XTFkX}bR1mdvQbcc1Lk_#l3gxG9R&&2+cRQfSdY_6Um0G!a96Ide>E2B)$IL4 zeP5GrlwY*45h!G6L2Kny9B_V&Y>DUZPi5ZdD}{ zAR8l_B4J$b_`-+6e@{gV^UZ&A0dOC_k@~>eQxjP4W|`n%%5?wDOxXU?1-Z#W;nB?0jf})fa%Hl*#+y@1Qy3* z(?(z1I-aW&@!Hy2*%I>?z;rc@Z}yP*Z%&jA6>&Nl*dMM7DJxH^jY&#MMv~|UhlKoy zh!{Oo4Uhny2sp(XH}WrJ;=n;dbz>`8hv+YhHR;gHlNAmuWm~$N9sZ?Y_D2_|m;4*l z)jFft{?D@lkgJ_<2^t$148%83=`AtLnrt}#L%0VEdx|-zr5;y^xR_$?fju9|-}IG0 ztSo~IzmI>V0LW^T(Mm_HcJprjl}dUR@9G+dp+EW&V8}|o^TVvsZ)%Sb`7~QXbpbF@ zo&?hSRV1ywOrI1}J3$>Zw)4Cn-gklBm8J>hKYgEaMZ`LvwuBbjfvbj8ntHvI=tcyW z2X&QYrp#TsxX-8%yvTU58Nw%10XJS>&v*Ow?c$Tg$Vd|NOsM$#N1=#$Yzso(H)du# zYAx}=5Fkp>L+l&k;o(7SjCQ=!LIMcbP3Z#8nlkcCzU1Fn%{HLue9m(e;;ja7dS+LF~Otu%M7J0}w#TqLBjc-?yqYHP+W>YqeoZXDLt2h8i9U3k%PI`_}{oW!SK=?)T;^ zW@ZUxIFX3U;TTYpY_aLgeT|EWE$600p`gc1y7%flF;ifEF?MkVA)o`8oIr>KFg)vO zAPjAbVzcl!CXzQ>F3zgDv`4Tk$2)T^t*}8T?n|FIPsIRpCVXyOd7>@g_k`cn)HLW@ z;D%mS0zP|TSXdY{p~LS^v6^wzH< zyY_53IrqDHGZc#a5gi8W8t`fz(3n6UkOTP_pPcN02r(%$i@yTeGcMl|2%%AG1*sq{ zBV!&qZ2{^~H|ZCcLu|RzOdNoSmpWPJ(4iVNj*{iaJSU#3^S$#$mMXT4>&w89iWwSG z0Y#)am?0-PzPV%jm*WD$n+Ir}E*Oop)KpdA$3;htj1<+>)H37?zIk|{8keq+A}Kqc zXxSgEHW(F62*}Dl{=CInHqogOz}1+oRtHi51>gln5H3i;&~{kR67}96Jv%q?yM+aO zb1ib67luC(cRmOCeW67DBa(Cn9*;&$Rm)zw#+0bWl8Q!)kEd)R9mU`8^tv>Tq@^&D z>al{>ohW!j@|?=Q`Ijlk*~~=*UC$q3PI!3gJ5Zlkxf}i-ZnfbzIB`50DlgjLag@vc zK`6`;s3P;OA}{d!XI1!8c1>R}UgLSbxuZ%twXIh}hj}iKHSCWz{aQ5RkJV32qv%gPtjy6qC7khxt(A%S~@$EU9K+O+}%IQ%D#ixCf4PW zO;1lROoSB3dOcm;>KRiy{r;Es`^#^nrLj4z*H!Di?xR1Z`#e!*!)U*+dwR4b4m=`a zGJxL2d3ii%^t&|_2&#O&J_y2|laYCXKuL0INj^57QKPsg4p z;bdKOr4w*ie~*st0Nc@%7<&yFHUD^A=-oS2D3XqlUdK$TCXP@lLiV8$Mnj?h{`mM+ zyODuPlY-9i-kRnQnV_z8yv5zFj;)WfDzjrT0~NG3=v7}RPgP!vH0Q`HAp#R2BW7G9 zC6)hXS+G}(U0HBVVH=XN(tU9t+@oEaRrg2;=@A z&8j<3r>kz%&`1#pv`Iqv%yGL0tsLrT_YV&40)KOvZH>W=QLSI_02j9XkOh6<- zfLHTQ@8nVy&*R6CEAujgHaR=ajmwJvVLy(ftP1SF%oR1_L-pvRO~zd5saVFFh^(Bj z$08iPU=^fk8Y_Q<8K`i4*II@+5ReUu+XLJug3^T|T_#o?GQAK`dUy6rDLU+QF89(IN96K6PZV%+N;SFAQmQo@6Zd$+aTu8@ zH7Z}i@eAfZ6ij#j6#Q4G?trvh`7)NA4nqvGZcV*h9-95v>N+I_IZ7?@EjpSKm1-;= zO~3X%H}=oNU0kjO4Qfy!Q-aDxbOerbtt&{|KAyr7_fnr7<=K!+Jn4c2fn zt;wYC*v8_P%M}MWp>hB+BC*`j9Gk@n9dqo%<#v0v>p4vkqMs+SKn?)D?8oV;{bE;a z7cwU2FTRiW1BvO>h?o=ca-L5-eh@mK8QWo$@+&i};-F#jMz2##BLCeN#hk`dW>%f3 zgTcn?N-LyOh0DL*om#JnLMEA}rMSlHBWE`hx0q}*p(d}JD`JYOw5O#0M8qfP@E2#= z)nzD9e!jSj5fh;h(}2dgHuz_5J+CVn92EjsfuBFSA-H0dC|f39745fJv-WQ9gRE?` zcSdO9+N>4P(i;n!vyI;qZRgZJ$CdLbq&!Es^ec!Yk(pbrf0LTtEhYSuW**-o7tm*f zR;`Xf+}*p6vzYT7?ZNZbKYkml#C9U6c$Ybk(Ou)W3Xi$u9;&wgS|dlCtswf8{}G;C zk<~R~hLkgo44MWAi6Kv78zN`?!mbrdNQd~`pdMFP7y>f=@87>2&oGoF2GnyPTEH}z zYrs*NXQ?_7^|^34p7E?qI`R(&qX}F{*=FgT&vCq-<^Vd(01ci|6yobCp8bI&8Ho7Q zm?KL7>ewC($V6`R&6s{rRt95>po`8ypj{~6>(r=qyG6i23j1tCyqaD=2I?*7;zFid=d`O!0Eo z&0o-8tSYhZao-igX+370V{>SNm^93nzgF=AL>)Q+&g2Nytfr<$(dFX6)9K3+ADcvm z(x0hLfxYR0QO@ECV{;3O6W~ib(Fh%@lR}kOhit`OkeNSaTFNae{ES#dzmJ}sN3G^O&ClKF(?D6-8jw-Hg`!~aq^_spR+ZIDMwhc0$J<=4Ol_$qTngN<7*Y~VAprpa6BE<+9N|^ihbalOC zsRTqtJBBaMwyLha9vygCtqtx#@5g{gi-s(dF9`gna=DCXw8!z@z$DP*{NE`Ci(a;i zhC{sR4HlC-5#RFEdfrjkHS94NDs)x{GKRSm%|thaT^+uX;T+UVv-B)BtJ~V^->hn4 z5{;QSx|+^Xd|gnKGoI9OYsNGTk+bA-R^)>Geu8ZaINZwJ;H>VxKHg{d9&;3BX8Lb# z8vp7q*u$GTZXC`zJhUDJdeeB_8D+^Cx{cK6mi=eQkLvB|c|#ghvts$< zeG)MBOYR?OtyN62N8Y>0L(qula=GNv351*(SX>c{y<;((s??mEz%O5}iS+gR$Py7r zw(HC4{WeTY%MFZ-D7^Naa*>VA@>^Zb9R4~_>&)dGiMdW$rf1Oon0ErU@q2biPb!`d z4rFR-Oy~~|(xlYNPqMTkk_XBM@&(3@XL1Bb2#xTHs**~>RpfS_G7tQrmW1+VM0x)l zZ)CyeNWxrbR1iam{l}6uHGA|i`TR;%EtHV;8n{U74sm&+*P*tr?dXV-+ z>yY5=T8ZPgCL1Vinm^|=Y_ut?LWOe>oaLxBu8}p=R#bIi1W@AZfc}Dk%Gs#w@h%9~ zGaDu@97ur3(5AcNco7ia#Cb3BymRZkbC|V6(LeTlo{SS{7o4aw=pXvnv+*U;4P|U< z`Fcd`jp*&2oB$_Z2n?ejZwe>9Am4Wbau(zY4RHZ|)S+w{5XD~Zry!`O6U5wwj1UfN zk_-M8%^xmTM=nbjTP{^!fnd^7FB+CzRj8MkBHEO9q$DL(;+;VBZQL+D#sQ%Q9V3&q zvkj4m4N-fS7`N*{b}mtOt;aM4^9`At;UXmD3kO7T0)`P05#=?fXf*#TUkzlkMgoOJ zm3A)Ssg~r@0()anW_C&cclZy3U_GO&#+dZnIULsF*VYhTPZwyZUpp6C_enuWb-_{H zQ|!Lo1xa`fiP%*Ao@h}ACHFg*^BXCr)>z_}d+n1hvmqTW@i-WyBmM*&rX`9~<2Z)2%)xyQ{OQE+Ec1m^%?PZWH%mPR_4I zK1eZav^qZL=Q*yyWHp^e0`x!aqjFA!$6`DW$%Ylv&Yw-3))dY+rY@-w=nd8b&b}o|y3DCZrPm{l(L)D|W;$BF2-=eEudZ zFh!asldD4$jl7Y^xVST!Wt+1aglEG8j(1>1Kfry=B-4>lqW^SD-VzH*=RpPjDo-N} zhCHzmy5{U_J-IX23qiJFm!Bp@7h(E3FV+lXaw{_*K0V+_Z?mI>u^`G*uA$nl4Oikc zJ=ckP^0cb9sdV%a!f<4y$tfqpu{M0#EOktxdE@+ul>x8jfwRjRmnA_@m+GDx=fwf% zpW?=)evuK_0US%TDt0jyfy(RHccv=#LbHl7rI+R$^e#p^jojF`3+xfGL?peQ00l^3)Y2j+lV1Uttd8 z_b9Y1KLC7jP6#tiYvFJoXAJ7u=J-b0~$l zSBM?UPeeWU`{7A%W1bb+e;pq!cNKZw_GS70AwNbAt+^MY_hinV7@0k*Q@JN0fs5~J z{#TK2lctxU+gbnkGfaL#^l|&o<|KrLdb(<>pApINc_4eY&@R$$>IaAJZ$l~#cNjPe z&)Rsz0K&_nUX>m7bHnU)jajV<-pstV22aTrN(`UTibwrMihNt0bLjYNyty_=;uTll z8Y6CVZ*dwAZ=Z3NtZmVY1}z<4-1!uP`n57?fkqTD-fSrYHObxb%rgRC8_N?NM3tPyMsj7CcIVT9-{7@ncndO0O ziJeMye>ymd3+&KF-uk=dB&@F+X^BrcpGsUHY5K5PdmiO+ltXDY8(FD=`jBq+%s*4r z@vF%UQ-3>spN+k{Mw}yNJ~*c0VaM#SbLgM1V-Y6PnIQ_>uwGLg`97it3YNiZ1U^4)qxXwdP;4+6?f-5 zYh5O~)1qM`nZb{+5s`0R9bcLQ&ozDIvEp6F@1_j3nUxpo>rTlbCUN9llJrb3fP>8D|8`xOEB{Y7l7Af<{kyW@IE@LG)odmQN{Ml*NEOP00E ztuHFz5>1K~T8#h96e5e)$#id%>8^inScS9ppBF&^13J;5NzK{ci}~yuOvWm2hJvz! z)(KRnxAm^4Yb)zyY#4BhagK-uAb${nuyvQYh!e{3XjY@;Z@bPdJE~% zfhFmqaxJ2JMP_~HMw)ln4h6@CagDWPj;+**&5$Hcm}sL$8t&*=tG&v|$dqdhIXzHR zsEYZOp4@JO*t}|PN3`-dAlfm6tTaZ4H4=Z!L^Yc{Kcr0FSWUEJmq8lN_t_mx{9ly; ze7c`(c-RGUH02}jAMoVAXj}ToRuwYS_t9S2SfiuKq+!uq@t`=UV;o?d&#w`VVw7rVES{aa=09#)F)$ik-@z`^<(frq*a4KUo#gmxJ&5ocCU@U#= z;JQkFg?~B7I4@{!S=Hb8)h46t_fGQr;FK5};|qLffX@6bx%`-mZ`+E7QJd0#jLYO~ z1O?v7Yb|0z*+b(~iI3JE3U+^vtN=XV-H~?-y8o1WhY2&*HUeQ4d6WDT4D>_hvPat- z(V**hrGr~j><;(SIn8I6qJ;MSIixpI=l$JT%$sV9BsVgsBoTIT7xf>Q`^6kLa z=}&%a!B6xDP3t_S=9U~TS(5d39oJ;iOr`szY()Pq(fhbf1~z#WYFJ}<%paM2@Nt)? zlQt({{6lq1`{lS5+C_^MFJP8u+@@;K&Ivi8foZ0hNk>02P!{Vc&e?EzNgS5UX5DU_ zlk*}!#)j4zjq*CRR)z#zM#J~dM0pktn{e%S#Nzfim)!V+>TuZhcBzZ4kl|^sEuW7l z4_+P`1u<+&>4n=Mhbw*yJ-ni9P>&(AaSr4tyrhLD{4C4Y`}DZw$GUfL89GeW5_Igk z+Scj^(x@TZIj;zR5l=RBno^e4o#_#-*C#$4WVI==FY0IjOQhLp5{A`t#5e&t%ss{NM~u?p5hk6@M?O0ULqwgo10rtN>@PcnRh)k+k~`>$36 z3;P=>P~mJ*J=wL*R-l^y#@|UoN=7ALRf1xp^eU~AH6>=Gt5v1qe&pF|NKveQI`-rn zcE;+-gsGGd?YqP2D%1XJn+cWLpGt%ynVlR)?d-c`+LSzCh!wvy4BU}btoV#c<-o!_ zas%x&AUnM%SZPN3LCHg;G{=b0Qky-ABV#1M4Qu)`+1$lH4hqt@hm{t}-E$H2s~!CL zd#h$&85qZ9p4K_C*tvm8r-$ve#d9zy#hK2?(!9~_;AFLt|Gf~jZz4rD_^S@P351vKD^Ba zYgnZ6`%KQzWdujj6+(5=2&y7hqs(SrA za;cuUOs~?3*h3AhsiaX`s|s_+%o>AKe65lI=pzJ5p7Uw2~5&FJw4lf9)5#)y0fzY)6}cS;cu;LEhd<8+RlAs zH&xnOBa)~NsOz=T!xq26!)a0!U|R2L4*77pEWVOB*)P`M)_G(STNSK;T`sD`2Uje5 zY^CR=!mZ)ejQ_nogxyD)olmhoCl7Sw4ag9-6k?>s!_+Y#++>3CgL(3Q7AWt zK3TYlrD>rjwqIWVj=7VV*2Uk(_>A+_r#o#*F^HQb($OIn4XmBxq!&e!ba$eBW0PNv zHm(Ko;(sF`<~iliq=?m4nZI{Nl*IB_4*iZ_%sonjknGy2+6O9(qQQO(tA&$|tuyVMw9OP@3ra(K=KNeinsIR3_Q_lmvQch-8pH;^?`^&ruYCm6l1wj=V= zOXp~W&G}SLAeWc(yw|CGue9sIJ}tG49b%Y+I)Sg)dDS;-u(rre(S5N9XO6N%dnXU!R#UZ-kxNa z=77@`;~WfhN0_h5=R&~39k8fMR_yhag7!Sr5$@mae@AGBFZ7;}pycfnRStb*E98-( zQr?b04Zukmc%S@XTGP=~VomNmhI;)X#gop5lmK%>{XlSvK5b6?MP0V(oCi;J_4M$H zPV?dq&eK(u?an{3FP0@$5r--+G6QOc$jlJq5ArjG=ANfpiPVE)W7TH<_3V$IZ0KTk z^Ds2~OqAK?IN*F(9aP@J$W8t2-B5|55u4t1LV!TT$%2_-I^t8;Vz@4DgS~Hg)KryL zT)Q}5dU|)9)rE4+m6D#WRVodJNaUZ>Pqj<>b!9$&rdS%Gi3vY<=kSq7cRiV;7@b27 z8U>*%PCxOBi@w|%iA|mkR zOAe^h*U^FwM;87(cI_q^G0eCWfa7DYIS6)WMDqHh+nGe|e>m-voY|)791XKN>%0;T zzRUE9ITygJuwzI25wq&!+ewHgEj+9di($LCO>4PD5`+8HroCF#PL&=4qsFmCqZ+OB zmy*FSAtW&VcT{e>xp#Z_uyvY&BT#aW@cot@pvQaJI7lSxnQLuqR4z>-59(cTzlS?yk9jp-uX;cWc)jJ)r84rQB(bFt>Q;)Eo!)M-ed)OR<$3 zqGxJrm>vvQS~|OdKVst==N&R-fflmQDrw#+$*};C5C0pTi(c|uDJTo)8THPeB+#rZ z`hpUCx8F{`fG^X_>!zxDFSfxF0xCh1E(2@!I@7F9N-~{^Sy+s8K3YlQ{)P>df#CxG zb5nAgfR&X6Uq}vR9@8D1VxnP&%%6y!#hFGWxJD` zekKZRdUN80u4_Y=G@IX$9Q+*v)akprj?Rfk6n{MGC<-oPg;g7f+oF}us&jJsLy=y5 zs2f)dJvyG)`CDHd7l2@f@7}RCPDG*cu*wuNoW`9!8^kJ#{MlvhzOlJmbDIZ#T5Uf0 zn)$@B^EY`F3*60|Jc1vi!GA~M=&AC?2*=D7Z#qG+p;5U9fuDjbuIyK}Wl?PCO7oEa z@e6s16ruQIhpZH4@E%D9iloz5-SUp!MNl|mYa7U%%YFFou{>s6J(sYj;>t7n})*@qe84>JkLwVqvaqJP=~ zs%izRpP7YcYA*nyB8(W@uo)>r7NtEGjiOIK|1*Ycu*Y>( zAT&&cP?2pjOfLdm)59zAY(@A0OXvs-1j%F#J_-8Sk>|7FdmLF6&x6H-o`_jQ#P|$; zP_uZD`qEv{KZ@^14M0l~&gMY%Bmf7b~v8B$(&kdiPm02xr z_c5{2GgX(4b|(%lMyv2%guK|VwD$d?F~O%GE>UJY1Fm2Ko7r#y(EA)zaUcm2?tV1c zQb#-0v@zt28rrAwAFH{@Sx0wMN(w7ARlCGx$8Bl;n;ohE>IxxlA`e%yDybL~*K1A= zDf=h_qL8N~!8}z8V|W6)xTRQXrMFb_pT_3(d*?SUBqXad@yX8+FJs&@Jx#SjGnHMJ zvFZZjRRjUNQI55>`%xa_Is1gS_mxVY)JQWBRfWukiAkk$*FM6kDWUkc8STkVotUjQ zwwlfliP_ZgS+a>c<`+KylCyDG(*os2s2r{i+-#nLbmM<9og_zyjiQ?hKyvbsh4XS$ zh5jcx7J=asS(i(MLe_<({%`D%{|ssoXIXqQR zC1|V1#rI~k6l1wkVG6@lr(@(3EMNP&B*o5o9L@bT6X{xL!02tBf=nc<%?OE5iBQ6H zwTjs@I8Pv)He5KbXzN+onfwTZ3p0kh0{ujPz zm$d7$B;Jm^gH+aV{q-e7ZM;vq)8o%V-J>#~xaI;Nd6DJdjw9yYg=b_>R?Oos#7g`|7dX<>NfgDE<$H6N|O z1EkiaHx?IdAg!jI^%f77k4>)DK$hA^o0kZ)$_8fjKK@-(WiP#mq=gMZ)D>~e2ck`l zZxaKhd}Wg#GIU^@FRA#jJz*zE^gF!O1Qgv|X`qJyM@r?+h=xq@JHEtm26rj|qQiJ> z&6Uk@cW7vNx)i!#A~Jgp<`8v%g=*IpNzj42(*IChRH5WQYvVC|us+{bSXpsS4y(#o z3q3*JC-Gbneu3NUJ8dH^V(<6mlW2dY!n^zfk_)s_ug$GQYoooyE=de&AJ<5h3rzVj zoV@gnD*6thGY;qXhRY-@MyJFS_@5SN{^qJCe^GmU96bQUJgctfO@5Yv>+DK$gh;}PU-VP|$zh$SN<}jC2hV9wFO@0KagLBbO zHnmOWp8;2C&T8#g%Yp*IYPx<%E?a&Gb=*O}ft?-nCHX%=w04OIH{>!(-?p<~$3V(; zzh0t#t!!a-f;#lf!1mCR3`tP^!q6y;<%Lz|`2e2Xj5s@x>vdE19z_=uf^ZJN`^5-j zi2a;f&QkZN=h7xr)JgD`MDl|Px%Y%7D|ax%aTHZHA0T2uO^;M-X^D-D#0D0#UrY+^ z_k|9yL@|Bc-xIG~_H@yo_T}6PEfb%YAekix&?d^7IVH#Sg!E6`q@-X4*}DpkcNJt_ z@KM^)OCpBQ7Z!T*37#WkHs75BUHSU3vic=9QZ;!eD1f!kp)Zyv_yu2?xc)C!IJr!< znh)NeW^Ba&O`2njep6Ciya_8itCiZvsUN6chp3WGY&cw-9K6<7ei=)){cQh4bGN{t z_{^hf$vfIbkZDqkow2z~`9hePrYzJ?c&nj1*Br6j%x_`%MB7c;FWRlq+KLf{5=Hsm z6BE2emav~pln`*{ovi+_eXlMNIh+;Vf@tiW9NI<0H;d2R6koYAu zWi9jbQqQ8Ybr~Y#MrX>G4**ve8#4Eva2n+-_dmLwaavH+SCoP*62uFGS89M=hrdE| ziW-m}a#X%?r`&ORN_WlidLLEpQuEQW_tWW(A;$;e{2fVXFkQep-^`lu8yezNv+4aR z_bkHyzSu!u=(h)A{42unhJUZ>Jj3GIicq9ixgAMLe9s8ard>NnVktAJMp96B-vUO@ zHN~IZhPqHVL-QFC10H`L^7@uZ!YlJIr$Any*s)@8EK!C(6h-*e3}oENtTvK7`T*Y> zUh>ZfHhk0mGOIiE%+ucg2EE+g-_K{{Rd1f@-CZ*gY0i3?y7a0y_QlaXOzS$RjQ=Bzs zXcK~t-g%>!R>TMW56lO8r~gRmzUR~SgJle24Z_JoXtm)QjTN($Jt{Y2qUL1!2*HIx zG}Vajfc1AYmHrt`brZ`+D5j(D3HT-o^Tdy6$pEl$ez@%eq=i^Ln(Sh1>1Jq~ixwJJ z7JdyNQ=qqQDV06+F*3F$mIoR&3QKxCcN1c8yTBH>GKrPNPF zdY4ICZ^du*s!MJ)6jgZ<_Tt~|ZN5X;gla+n?8My|_9*ElyCoklkx(h_j+#r2d;yF+ z9(y-QZ)1_ZsO@pM62{grL!o0eLhJNM7%YM|^*_!qC(zN}a7+z8;aZ~Nh;7!UHHcbR za^oFSzmR-_ebAW|w*nh@xdz_n+I;S8I?P?}?2u$uDX~*}Gih<5lC#u&QSN+x4W@{s zQ`yN3qf7nR;04AVyh1StQ8;-Z@{kQ&*j@-S`_QQfI_n}ui3~>naM8x>z%Nqcg>^2>C z1VV8S(eHv~N<3W_y% z#R=}l+$+f3wOqsr9MK_(of)3K1?tA!>#L9c7?vW#1h~Hd6^L$_L&k}Y(Z=mXyMZrC zFv5$Z|7xqq%(&LFu-eCfi*<9|mhlBE?1NDPs*FQ3BJSom*&A4Nqy@b@6xWsICmjd` zE03<1)Zg6Tv3Cz9EYZ8I6NP*IQ%CvIX_eYm&sNXqC6-9uI~iLXt_!r`?0x0If^wX? zY!L-6N}0@g$X<;pJV7AnOUOJZ1v0c5f6+#I&PFTB*Q-c(p-9RpGXo(3eao*Vau*PwPa+sD4Tlgxs-DySI6oGSb28;5p#CF3t z1;>; zmlZ3S9idCr$j{SF>SHT3IcDJSc}q@p`k{#)3FA;OnUhNYPj=q9jCJ?vK|7hogeI149+VaF4NmBu{nF&MJ+f2Ug%Gk$Y>qEz1TCJAN@pFvk-MQBZqKI zb_VHICqQAyN#;3@Uw)PQMLVE!JAky-lI(05cjMhC4+EgZxlY1X(#Nf&tPI`s##LY5 z{Gp`7eip4VLWfQA#|oui^n)h$%LslkjOazvb=#GMD{$1uC|!UbGcx3AAz=-eGTB*$ z)b3(v5Z6*7jfWLwnO}g%F4HZKaK}mPglH8-4>PVzX*~?`(w9)hWT}9Ib zYiv8)#vWxvmQ|) zYgD}nbU+-=sjUp4FWNzx1n7m6*}QZhP1%=iv;XL+!EchV|@7 zdn6p5*gK=DRuF)-^9G}VD2#4__RnK%*H=|17|NIDHrH6U51LAL+N!+O3Pg6=8HJO| z{5cBYJmyImyMt*Lx~SVhZ7H_!uWk@F6r|57Iu3@^9^+j4N3Gkr7j}{rZ;Xm-!@!&aK;M62^a4VcR)A-5ILgFx!}#^^{|?3-l5Z~ByG z2F;o%Hl9Lm+~TLfzGb$u3@2AIH;Bn)`AOR#5ZXBw^2dysAAY^Er>edDbqUX-hEtpi z!MQVJyA8Y&zE!H9oP%JS14o3rG{LkXUfMY#mteo`#9n9jetg3j`8=lN94Ji#{Z-cc zgqp083qU!yhQ_0%DiwYA089exSY1kdl%pZ7&t!pK>r%8g_MnQOg)XC~*ro4;(bV%u z@%xbAHJ?fQV4qqIWS#`rMD8~9lzr!BMNS>(`R-Ej#VAig?Z;Og2oV<2QdE*A>dddy zL(Xsl#!S=^;n4NO6ilXiH z3FZx#v~^eY$UXekI&(wySkw~I79{cJYy1m}h>I-Litc z>^6SvKUy=i)O&-L=jyu=VO9^Dqesw=PxH4UDn{!w=HmiyacO(Gn{!AT}>fAsFi^#rmJL2)1$bHS+* z&PdIdKhvwBx+lgDti?TC9?ya72bO5MrlDUG_sS3Y9lpAa7l2yMnz8zhf{~Y#qdhIo zxRb=5jovZ>ICYp7b?+{F(c0&ry3LoZ-=1)`h)^NTp zyP8sPjV!ovEOyS{A66UKgtEu}B@b>%9dFA>VVMswWaY-(UR&Uq!YaYf2|QlzGSW1> zbpr8DQf5i0>Z=SU+f~^QBkv?X5&NWLXZKg#i_O!2LV-xW3H14g`@yDsxTi5TXi*z~ zE!4r#;aN~}TJC9X)3~fmmyQ3=Qkl(-wdg`fc?F`fU!}-*QYL_5{88KmSys-xlR}Eo z<;XAceDCCLQhN>05v%zsHY}qCHH#qV2Prsg82fAGi~3oz6+Bk49NFm|(Cs1riNxng zVQ85n0ty5c-S``%iuh#NjXPrny`vB?p#ZYD?$fmq&*6&k0a16w2MOx>1|f7 zy}XE`&G@TSVt-=E$u{Q(J$9I?FYhfPrN*nA&0ZUkQUxytpGWO^v?TJrd9;nkQI9mn zasu}wpX4>*{2E;$iD}8EeNcHyG?i#o<-~D;#@_OR5&vXz4?5=IR(XV8mPT?qW`^dc zy^W}K=kVcfq4Lbp9N32D`g(vU0~@c$7R_DVKgGr+d~JwSuE)_JobvDSRCa3&bd6u5 z*PP>sS7=d%&Ll4Olj8T2fUds4Szl%StA1H%{+c^KK}W92TP?q*_lNTJpEmJdwE<0= z5kDM)cPS$HPX$qzMFnoA#P5?5?WEI8P&J{P>QD(`jziHCPT=|_JFmyFWd zg83;|#__h_`qfYq`Qq(-=MDP8iv~0(a5btQMvY;~DUu`mOr=?3 zs>ctZ?Er;aO@9}O{Dq!g%?*lF?{0smo)@S~xPZncb*(tpw)8I5w0GMLg(V9al86~< z&eD;8?pyuUxBz+!LTrKY_iGaubtiP;KUiL($nYqI#283g8E$@dvGPVe{LN_}GML5( zVgk#e{9cJb{1Yi^)TSyN?v*gF#*HH{$(UjYDbc045iP83#aS~ z8QUW_Ad08&uf8*pf;5bC%R*sqHa&H>L&5e8j_r5x8lLIfCtRQ1XGGI2)!WD)r0e5H z8-tl%Yg!7z;0yW(4eB{+HQyTa>-2NfR2!6L(9lt_QeI-;fuL6~V?=wVx~)OD^FQ0k z7(q|can?fKqr@ZSjG?9uLi_RGT!6)8VS%n&fdbx%8X7ab-nEHH;cr7W`NB5q8)QOK z&27`nrNGpYeE8^OJ+_k2x{@^d(Ho?w;5whVsHK$M#l&5`*>E+F+*_yuv%n!YaYG^! zDuWqJm&YwSnY!nY-}c<*J1_&_Ne(uj?Ug?VQp{|Gf`;qwQSa^Y|L&k3tz~Kt6xY0H zmWxL;=+*NbHrOb`_t5>6s`82)M(g4qqptDnh{aqaxTJ*9nlAIiBpcTeMLBQn57N65 zaPHjX&w~VFwc!b0&Dn?FP(&ETcdk!pJXqld4j`le8($2$jxMD{A2BfZ!znP@wA_Rw zKi0Oq?6LIy(tZyVs~V9gT{tGa8L4I5J(dSU3kzKf3(^u4bFotfz6@OXZ`B=MK=Q)U2hQI^G<(JvO%}^2rs&i2fh2tYW1`{%?n~-6|{}G zDybuO(1V*Y(9oFwuln8$t7?kYO+CYXQZo2VlLDvIiiPR*+03V9SwxX6(HHz@Ea{5mnb?q2rzC4p z%kz?yP1^WZf)mY<&Eau+bN;SudrS+5f8BXS0H5^3ztS!Jr0?@Np$+Yawa+kk^p<*@ zi4im(J$2a5V6J`YG;tsN5f0Cl*h(-4xD~VW#XP{H{+@n%!N)ecVco7$vq8` zO*GeF*Ar2i%uU?mhS_?-T)w=z|$b(3q=rL)34yk<;@|T}--8 z6hr!fmYj|9oVG{BW{l`a&N88>uc1H(X}3lABwp~`%jAG6nj@E#u-)T(2Y{5|7; zkUgr`2>mr_|MJI+Vc{h+oPeGOcvPTq4s=ngHlD0I4SZZ!R{h*O`eJY7{;Nj#gLHLo`c^=D+yhZiiWb!uJ+q$;oTu_t zmo!-@cwxKn=4WVg_r?Em_38=gny<(7)!X@0 zmslMATCZ*p7(Gzt85>cYx{#4!wx--2e8bqe)Hl&g|9XY3|#a=78*Ni?ILn|8s&LvP6Z z{lad-MbCf3!ou{;)(~ZH7<2DhC2PgHb!}XPs?mYvO-*cwD#-s!6Y=e(B zA+L1%%I2UB942|RGXRnkjMyucO~7~+^p^bVSj5P(G!<3OVQDk?b?3DVpv|6Ip1`J5 z)1wXWGU-$lHSIb+U{Ecb8R-}>rmg_V`@a>Ms-Y?9k@!qLducgp+B2QnKNHu+?T~pp zfPc{T>hl4&3XPSTeWH76Up{FLuAOt<7@;~jxti}vibTnZ5~(6Kg1o z-1Ul@g9;3f#Z`Y%uPH7sT;Dp|CX0jp{U4JTy(Rc5fuN#$c(^6JdW%Nab6bUoO0cy# zlrcRsbE;zeh(+&sBOLfzD}nFT1Sro92E5_I6jgK&kp9K4diVm#);bVUh20SkT&trx zeg}*$cEH(;`=m${gJR`@t5cXe$Uvf2lXW1S*2BN{88=4IGYT$7uaqybz->(t5fRKE zw{~|69G6rv93wawM%bO@p*owRew%fmZ8XSJ|M5*+@JkD8O)D_mVaQzJf?Umf%#~4R zJv}N6RaT_*>)pyZ0VdtbAINc^+S-SdE)%B`yXfEse*F~B-1wXG4eoHeehBCjy!X?* zn}fWz?%m3TE7(U^D zq%F5q;128(wj8?6kM-g)_o;!o=2Cn|qs{TG&Bk`FH$`+?!|Ku4>eC`k+N^E6lM0vl z1mD3D8!8NU1P~-;=~hKKS8vAJWK?s({nd3UNE^y|e81wcovCN!;t~P(BJBoroY#Sx zejPJ$al4hiz(ueIq{;dAbF!yj;7}c}`MQG8_5(`Y0vU*6a>M@UpgMWu- z$73(;>gI`W6<<(JM&+*1F%M7VoGYb-#LHHtcMpY?vp$HDGb=LUt7j7P(PbYmD(9ul z7kyN*s7mp1>l@Z8;=b8{|L<*|R*~E9&iwV_pSOmx-=4i5r|PP^8QIZ<_+`-A=WuWwN0j+sCyMU7BOm3}{D*$>z5EOhLeXo~N{UD2%4Qtqn##Y{J_ zI@Ac@SLnC#KF~sR!<~O+C8Z>w=$o!|t*WeK2i|u9Anef0(--yC07_O4Ag15j-!}&$ z3kGIp6(^@+V8-7ut~rCkDgwH_!Zkq*8)%9-Jog+3g=v)KkS~|6A!$hASLC0S32S*BI@4Lmqa(XKfrDNmFsg}qhvsJvRT<- zQ#y%v77vf%!2>0zq!8P@Fgck3)fyy_VXS&NK&Y|+l!@lMQO;wo;-^lXisEz5pOfM}h z9ku$*TDc13KYG9}^3%C^m z@o854(Xt6Xk>K!NS$39Uqs6r=SMH=2b@uo5sX!{P2Z$-RKI2|=pw|;8zkYoiZmK>4 zV(Pc2adBx7cf{Uy0ukpnlsQ-g9`Qaf#o1>skVqgwV?)Ek)0&$lnKkmi?nFB5kU7oH zeHmEoWz4PYMlb)IO&nnpc_w_!qp(oFu1VM5tW;&!2=djlM_EWhlj#-mP|t45Aq$H> zeon7XWV^<`GRCuSxggZ5tdeW6x+*{augj|-n~HBl?Ni^s-_GnqO}dJ_CU~Ejnd!7L zlAfGQjULPs0ruCG{un%;1SNZ2IyN>%SVt6b&fmYDha!Eb;~RhfeG|dJ#H0+2^ytmC zwP(a6B)Sf7FASsgaH+H~PwZj?KBK>-N z0jS`h(~cVAc>Cr}9Ha+lwk|+B>QIG()Qq}Z4)?dNp zY9R#Dx@uc>W_H#bIO1S=cL7!7PCyy&fqiX#y(lcs(RQL=qw9b-+=+{M?2PwRx#O1C zo+#$?ur^K?nVkQCa5PR|S-tc$KR-1>OE$Jp>V=w|%b9)CR=L~);nEtpeJ&4(bd+DfveFw0UZVg1|5u? z%wXp%EiLEjoD>WVlR@_w)YR05g-8#0p5i!=$rTu6^NZSZ?lkb-b~1>gVWuI7w8$ig|kO zwY>DGw741Zs0QU%ot1DRb+>?h%mOI;Nd*RAo?*pOd2YQ2a^GQ!f$?!YusUu)Xj=q1 zLn9-j*j*@wpkQm8CmY8P9MxW$K$-l+SEHw=M@3C74XEUlG0Pp8B{7R=Ys(>)*HIF< z3zUqEQsO*!G?;bD3pf2cUtCyq2kt&_Dt-AzEg_MS=`zur=|J`~dLP3Vh90d@^9F|h zLZCcG50`Z8=r}hNgy--p^(Uz4>nDQ0y5b3}G$h(wO2$NjZF^uJD~34>nGEET7El?+>H044Rw>)ri&$dQ3H#I3ZI1~cUUMkcF z0f*1X%c}{|MHdk019?^o7)+f4^$%F&S#2OyWp%*v8J*j){ej*bRqHdY%O8)o%S z!a$zc4Vxwh2!9#Dg&_+;jWEK5g!Eu%f~xVZIXpU=SzXPA7@0v(P!~c0axQD_=*{wq zig@R71qB7o(q{=!W5983;vrZsi?xYbw4e`=`-c^ueX;DzW@IH zdr}G;U|yD#k?DJXN1PqF%8U#R9Ts(=m`%I8wN{C>)dMvNiEpmEB*1&l>+p#PqV$l8 ziV8nJzmT{%mVzPRMdAXw;>tFR%W*#1-<~rfARw@`*Oim&@XzT03M%Jcv6F(rtp!Wc zHVD8E6E${M$H&t-Zg7}~#JPMw57h%qfe%vi(~}oaVvG^d{O#MjE>mSIt89IJeUyh6 zdJhPQfL5Q{zdjLKnUSBb2$l!tQcYPoB)LC66#PNgxA%9f2I?Cc%t6xrR*xJeRBDSC zI=Q}T0x@mH&uGKL)3YL`itonuCe=?p#PJ+^=o4Ce{pT-RT5^`FnYWyH&N%05mXet+# z)CLkVZGx!EW#d5*Xf@PL!HvfeOSUm>Yh^h%O`A2s?#cOX>Jb#Yk3Elvs z;!xJ;tymH!-1+qBUI5vH)bL;^Zup^Xc;FLJw#&tu^a_EC`x^qkOfOE=8~tD5-2QzZ zO}>9L9M*3~(Zv^t2G?&p3Pde!44%nu5xR@mFT7bJchz4~v9&iLgJ1bW<=av79P7>; zp~@us7Mu6}76W{pwfEt@7_Rg~FK~xoVtRmSgCV#n8PvfXjVh8|&>dFjf5B;^SI1lU zU4Y*LblMGwvTg6vpP=6+6I|2QQkO&G4E zve$U8=thRcQwX`!Ff4%FuSFX(=DaFrUI+ zPxC(3KIz zX{|Gv?QyC)l?5LiiYrWQMLPUMX%_rS&kV1pemSHJGLh3w@FK5q$RS|K)(T%e=+RW6 zSl~OG{i|v4Z~LP>x}U!sMfjt}U+W?hJv?X-p)vvH?2&HldLcpaNL(KpM1`cE@^JS^ z()u#9L+?$(GS_nIrf$pboHW(U^o+5l^gr@q{Qt~2smM|dDw=tgv*XQ%HJZu1NK>V^ zE_*(uU{q9w#J@O>cW4U4?Y&0$MG9&o9a1Y*`A#f~n3%0{eCY-;N{VGB{lff~oJipNZ72P$ea>dItiC;vs zA|q}jBHe&$*};zCkGQ%2O+jD14AL;au+UZZt<7`LCkhFo|#Z!)Zp1Bnt zsa?qW$VPQ&5a;yv9@p~)aq|#kr3tSlVJCEXNnar|i%pAlOs99$R5>C%hHT;z_<`7BU z)H|4nZW&khv`qG${L=8NTXb@l%X$T#iA`hBN9~Pt0LhVAv z;UH`#wdJaFy#zwhzKzW41RZUjVg2lXgZO;x;h*MZu3P4r`j?fpZR#JLwrr#|UoIf_ z{5LJULHscSna?OUY^5!J?-~Jlm0|Ih25L#xogdd$Nlp0#6|{^>_DmXRP=OCNf>1w&>4fZLt~LqX0_EGEK%hO3abXZ?X@7+) zAo3a0pT3T?g92N*U*G2*#~~xkuEFEhRWd8t>$#moJUPXP*x#DA?c*#N9W7*iw!PE& zRon)t7Ewc;Zo2do?QWZ$rHU_x9l_6^|2HL>EkpVW!DV2eos$$41ig^UT1@8e*copj zkeD!Ns%gsU`mh4Ok0;0aq^sTLb_g}GWo!53fRO$F#t^5`*3s!#|2sYBU|p%BRu?0$ z{+;}?+&nbaOdf2C$LPqgKuv*h1MPwy&$&KRHZv>Toa*S1+oV3VECzgjdL9vX1$gze zs1EcZuWLC>$Ffe(E~QUzA=(4`Ga=p$iH=@czJ?v+&$VY>>t$C^|Z|@$1smp#cM5&xcVO(Wt-4titms=w&%t$xp*JmX91Oy;ILrwzwaA-O^JEmbFbE^82v7>o=B$-nY9ar z6mtWrLmZ9H!HR}IGNR{w8-oTNEyeLEB0t#f>azOyKUB?BiS*tJlC|PlURK9Q`1#`` z`um7s|Ncca)?wR%^t@5~;L{?OjjkM_PHmT#mU1uMdfLpy+V^5Zk+`>yu76-W$DUiV zcls8&XGan0B<-S6k$TbG5OCb8bSe4r@In4`V@mhCCoz+BjqrNYj60HNJ=h)Dt-+jRmX4Sv$_VX9$&D4;7*IoOA`a~rA zw;D&r{otZL^SlUjl+mNdA^Jy}6>q$pHcFd2V)B-L1akh^m*Vi~3Pn<94keBAu7t{z?c->`~Z9JV#_6IJr5vuqU4 zkR28XiuU)>@n!~F_};juD8&-t3CFY^L+DGJy8S&D;Y!<}4C z`q%eyoG-p|KafD$QOGkfAPVpZ!%8xvsTX_<%FH>VDcFLNQrhD)LR`ZUNG9fN3b6}9 zLi7LWrp_OC6%pN~lf#nzDl#DTwX9C?jm~o7qx5~vz7qCffnX2`i%}Ap5k$we<}&5~W?qkUBZ&nHVYGyk|)wsCBH@;_@KRt#%@ zM+WK>x0z!ZNo3CB=TXe5@)|Sl%d^_(kPV=83YVpQIOAIFzwuWYb!OR;A8f8RKXG{9 zXWkc{>yapu>$&(}k$(b;n3CvR>hy$^YNff0LCz(GpK2CJi|EFqpcDPoQkodry#?`~sQ0+-#>oQ7G#1F+4oytqqz*6ZY~luV`)p~j_&&%j#!aTx6_MUL0^jqQV_!`g|Ni3o|psUgBo|5V-ZbjVtol3^gX+`l@~ z{?oWKX=w7d^G)Sj@1wy^(jyp#Tpw$(RPA7~0K=4?A~K<|jQxMwKX3J?{d=VcgMoY% z#78s_pB7Jvq*0U*d;VFYM#7!vAx!(>~BP?xa1e-LtU7avr~c!i3L-asTE;Ii2u` z+lUM^>+UFnGNRbr5(tzq3s}Lq16ez`zZCXTuAp%5q$&gT(vCLmkK-SA`ZKzF?s%v` zi|7nq&(Y2aFj#tVPRpuW$dEYx$6nSe$mHEX!_18Iu1Wiy;(sz5O;N!mO?>>qNM-kY z?P#xUKUqueiT`Qa#PD0}F!NBA6byF`I3^UBzRj(9$us=lraNh?N%PVnCW_=L_sD%&r!G0BDtc~n`aceS(Q9}jWCH!%NbFO+q+MZajLd8GY2lcMKDHAwdHfQH+Fz0v;pFa`Q-`Dk8<_G)O1M*UGPNaO1P+q$x|G+%Q8&) zlVA@0pg@{dFvvf$@srix6{9x1Q zIHSdMedk8N@j}stKg8$K7391QA0gcVTUDI>04Tr4jg40D=>81up#YrtlVoZTrtkh)HSD|2~ag>}Ry+3wCySewX>+ z#fA_nQzX|aBt1_wlqYR#FIQKgxw3^Ff{vN*#tzVoYxnj4@q#2UAI$C6_20`4=d%Jf z);o2x^TD8#wqt6d)IcCXK<9v`#O`)Cth}o$=%m%VsS?PH=;$rg_5|JN;UNM%AG|io zG_sD-giZw?YQ(H@Fj38VBS;)z%mbPf_ZnaYVnUP62m@+!|l2El~&KM;!`8ARO zt+|&|e6k|bN9=^w_!B&76Z{TP2yoycLpFcU_UXFyOZSnuycPiShQ z$M!|o8|%DrKbOUdW=5A66IM|NTnH+rSfv**3YU)MxWoDI&Z9aSMC42gO4%h}ZElru z0q#L#5B+#Gh(0*!?*1(DA^q$fKe>7du+d;}U*veNTOEY?HHQ0i&AHkmF3kAwj;W z;@pKXT{*c$CY40>dwUkLiW$`D8R-f(H`*8b_72EF<3G}en>N@B^}pLw0^JIs<_J+; z`Yc6-8MM^k>knucMU$`{`e5)|(e4SKalu0%Gsr8(G?bAIyta&Ph$tb$(l1q>)Cejn zp^W9`mC;7w?~4nmy?aWIGw~~mU-}FT?-d_2q~%N$?o@qJjUU~;NNgp*^k4B5{}b=_ z8Z@-sp{n2`bpT-yvPDg+c6DVYd!DAL&a^k^bxmZF+sq9P^gR1)HG}d2M|;j3o-?;aWhKHUGZVXD(HI?h zR&gFq)65)N6hviSkBRxyv#qm#2Jj!3SHppFTpD}PXx(Gd`5skO7CsxK zLny*IFzF6D70@e@CIUg{^=CQRuwr^_yOw#2@* zQwqDBo^zJ~d^d81*k7`HdL9n`l7^CTXX*vo`zY{y9y$lf28U;6QZIO4G)n(i-A}Kv ze9GL=t4Lib;6}V>*m++{_oNa$W{#P&i#@9FK=>ku%~~Qf3b)!+tRI%Oc_e{t2;}+xygf1 zacMP6>rdpTBaFo#ypvz;&z^5ts;B|0D&yxDOx;(^z928UTM@Do@~~SVsj;QbG=#d! zi(84-JTo>dO=$DYU%fOX+BumgZb5fh4_+juYU?xNb8xUPK=Uw%9mfSfTrsCi#H;+b zVb`6H+i1k0(W|VJ8&)nB>h1a{lt&b`GbrS^=FQox&&IdcjvYN=ajfRxoZm5LCdsx* z?;}$ZDQVm*hX|}VhPP`bA_2rj`B6;xJ(8p^ONoGpZC6K!o$%aJW0Hm3w!PbKT@wOjFX3Gv6+@(aL3a?G*;G%FY9$aIhnv) zyUm?<-X0%MBk%NS>*V%m&|*&YJdZzTHfvQ#sb==Qah~GF6rJaAS$i@Z4>?OaIGXA?ucVbc`0b;{#d5Hj_GQ{uzHTRNMYWHm&%as+ z7~H$Y&T;qQ>J6TcsM)&|bgccQYo_k?%c^niVsf3`9fGPxN=f}UTDnUAl?cEOnE#>g z;HRhk@o-j7W$`dQLqH=3HXtFplPnrhGHj)#-|l>FbjmS#mpkHF1l9g8 zHQ8!SD@o)B1*^PhO2NZ55e(izXs=0btM(k#H~lM0I^Yr9vN~@%Lw#-$(UOUC$KyE9z(?f z1}-kOn!Pp~00L!Wpn6g4X2_h%4M_wNl5%2VuK_xRNfhcpwbt134nPfI^2Q8wbn<`! zz<}?d)?qqix-!*r`xkoBFt8{cry(O`GKWRKDU?*&2TW%c)K+Z<97D;dQ#9yQDsUf~ zbtfaD*o-7A>~)u`p)gsI+qO9e2ZtGCz9AX8xJIU|qGE=55i9Ee)VG_NvfrsHA9S(k z&+3AzTH8>rY%$h(OhH8@6#jSK%J2*ETJB{ix6~|=;ia1hsL4Y;vx z!m8bU{Z(sO*>+d5iVeyYRFM?m^^_oCPQs%75rfKs^y~m3*9eql=ZCbq9Dtg7pyU$= zRPAev6Q~$<3`^c#8n6IN9zGFKKQQOt*3%nzdhpwI9-RfwB#iD~6TW?!C@4OwbkwyvzYp+1zZ7Hs%8yTV$K@5o90xX~MPj zuVbo-gYIB5Y#DQL?y^XBDAaufls;;Z6yWj3yowUEd?=)AnR&8N!j%kCAW1mWtfO~POTzn4bpi}%q z9i3Q!bbWyQHo%V_Lut<9^do+xC1?P)2#VCUg;l zf!OL*k}Ilc2hgErk$ETvi3+1geD$hB#P2lYJnQ@~)YE62%PaQ92PTNobjkpZZ$c7z z)u$LfX7=xVKMmg2&iVchyMEAHLjPXp%gC+xDRIa0^|#0FC)T6!oI~l6c=_E`u54V< z)IQTIb5;i<=EcqCoGto!-`a+iz?x&sNRM8eGNf2^3@RU=W3IQ$Kq+#m(_Ghx7qj&ijhl|O)j$#bspG z@I7y6PhFkJ1LM|r)EI0fpar|3UTNRZz1v3XBouKOVR&WtW7!d-r5%WgajON@=o==9K^j7l*1V05lOO5BHxj zUy95pLW8;J0en>I^0Fm`fLrg5tJW`ok#@v=Iy#BXxsCy-HkL4cwBqar;B3bh=8_oa zHbBfV0$hn%t5{kpjHwF>EOpNE0@#a@l~oRa6`J{mi17U1%h{6x8+G4|%hBD~{Yz0s zDMfP0T@_ZQlELLI@1b)J4ZVpFJVsrnu<;EMD1be(QCRq*vQBm}F)`hp)qjm?@AC2W zKQ}NpRji*p%`w0(p}MdYzLy`t3?DZ2;p&_fc$&r@xcV%-EE?`tDkndu_)g z2K81H`$>1AMr}R!?wvWv z+#?j9K1~2Lm1R5__smb9))Ec0OIc!d((Ix3r3F+1bc52E)Cdgr?QMe%NpL)$lb2U@ zVp39#t*l9-JwTU;FYIjTmfLrXws}r^;6A13&(=!wrSej@sW~bJ6iEA0gnN$t_)_uM zXk0lUX&eE&vgBNI5DP2R0p?G4s}j&O@G>cL_t-Y$0x-fHP{S}KIe8ufS(KK3t7G@u z)3!HoZv6}w2<}Y^Dj<`;qx?zz9P4NDAd%XZ7P#xe@4j}A-0|c`Q!z_g?u`))6jWB0 zV=V;EbTWr-C;3)*-1eC!ro0I|kF$408SZgN)`}Pqv)$HBNV|shAJ}>*Euaa0i}`!<d@a{2KNRv zSAFN84DZ5Vp27GJeooGvN_{|4DFW!kNzjrM&Z-vYyOQj{`yN4PfU3I7&#w*mT&L@~ ztUro#>HuDZ>3Mx)qh2BRj>TN{fK^q6fa5|+IK#br@>CvcFYpM-duLtYD}efZ*So_D z@D|g0KVrasD1mF$b(uU{G57meIp)>xvqZcIiJE>E(|}aGK6aID)2zR2^azP8(W<3s zTOo^DQSLDvl$Q^23r&BR{@gYREsv$5W~<*@eV`i}Ezfok)-Qb|*1&k1S>t}sYx+q( z19q2{$24hjip{%ercidkv^RFVDW>4J^v^=GaA z2;l%7BjZx#Dl>^c_#4NKX@me&rEvp{Jzr~7TwD&6TN8k9qN?0WIITxMf*(#vOIrdQ zDyrBjnt_pV8&E;!01=GU`-e!|WgHxef|*%*7_(MtYpXN{{@g}!NKpwM4`T+Q$dh*u zU>6H*#s!C+N69*L%QpZ!tNP~68;m>K0)U?dpgQL~2Yy1LErQ;{HI@>uB0!DK|QSf)T%ld#ttJpHKK;+l&2lP42 zy^|aLvVlpr@6vtc%MzdBh?GI8sZtm8Wjtf0qB-~4!9#&nf`~xXR-_7Wa4O^7iC^|L zWdZ`1f^~lEC;hwb!!bQ;Cb@Tfl`xJ^;Y~p!<8g+9UnHkA>~ySRAB%{6WrS$q)SF8i z0q4UY`+Pi}@7wp0gph(m8*HvpuF)}Ef(VU?$pU=^n7`?Gwdcn6wu+)65)fs>mF)m! zjEs!LzhH4xq4@tHasMwMam!o#-m$g-$ZKwG?S*hrpKrjBZQ%`VocyClFN)fH4)tucN!K^Ukz!~z6_kL0O>stBri;}D+1&d_6m{yUR>5A++`IN7690 zg@x=#a9^blY@s`2YI0zKE>xkzH6N>f?P%IJK30bb>mELQ2yHJ%7eKu;h_;#x*_uq* zd8u>nY!$`-&f{FWH)iMP^veM}(Yqvgzj*3<`AfI5kBnXnz=Kwu}9ktyrly z96Rn742eIfMwxCOEkOl1e^w(}Q8SnSgv1?Q`PbKm3Vr}aIgvPi_RN`iu;I$GvVmYd z0o94wO#s#y6AV_x6i#K~TK#IN-dG(5mkSYUKNNT0{ℑdyCf%dkC71-FZJhzxgI4 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 z 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 diff --git a/docs/architecture/img/formula1.png b/docs/architecture/img/formula1.png deleted file mode 100644 index 447ee30f5734f1b562a26664f16025cd69265b97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9833 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 pKwu+9vx2t#M;`x6DG$FvU4vE19d12Dwb)i}B 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 TrGQ6-8x16{CRZh6@!@{}Sksjb diff --git a/docs/architecture/img/mempool-v0.jpeg b/docs/architecture/img/mempool-v0.jpeg deleted file mode 100644 index dc3da6e779f2e0cf91416d7fb46fa9a125c22ab3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94476 zcmeFYby%BSmp2+JP$1&S9!a1HLo0tr^Uc!6NSwZ&;m3zT39uEpJ*Vh`>TTnfdD z7uUk!dCxr0yk};CAoWk`e!9rf0n%e;L%;dr;l+T-%9!R>^yq%n1IT?W2EaWctouY* zw;ceQJ0b7H`cvM&5;o4mNB1A#-un}FdI|twW8K4gfOjY7QylCEH~_4B_a8jO#vvkp zL_*K|jFg-~T1PhqGlom{94w@+ZHkTt3TipKc|=uIR#ET?$hg0c9UW&B)-ZEhg-rs?}~90q;?7gPp@Pv%3# zAHUkjfwEd=uIQx$x!YL){{6dl6Wu2QNC8fi|7!Vva>q&V>$zz-d_R_|PFlBzLJ*wD zdp~#cPI&r8Ty8Xxv46u@y-O?66m#7h}PPf#M86y+oc0}B*pH9U6Rr2kSjo+4WC4Z>%WW*)gm zv-qJ|zL20-=esw5HgQBzBY^P@uO6Xx=(0erYs_klTiK(YaP7dZ6)?nCzH15P-zDkX z*g`UpP7_NPt!3N+MXAc$O=b&1Eb7Tg5MZo0tkF16B@;=I)>W{2&al8U#bHGmnn;`N z^%1Lv(_cFf9!#~Y%8T!@d_wBH!Do1U45c0mqKv8C<-dccI;V~R=m30+8?`XA$nbua z9$VIBvRl9e$yzNuJ(ydBKz&ozw$V3C(i zNbu&@sY=-9oj0;;vtZ)ET)^5F0}VY%8odT_3&e0v!gMads^Z5C8d~UiWJF$1s}F;r zE}fyyYE^C$=j04W7?eA?p}#1IWt3L!7I3Xzy?EeEw^2+r|DW`(|1pRkXmHS%+&v@H zT26J|$y9NqvN5Fszf3lrp8TorAI8S}{Zzn3$ycg&d_l1uS*cx;Hs2yx8}W4^uvVm2 zEAX6ZWj%$vEl4oS|G*m4(xFF}UQI-6FiAEaEuv#8UQ&)g$KcQh{N_B?qQiqX&xzwQ zlOE(}T4PM8UlQB;)~jAI^01zJvp*eSp^4sGh1qy)X=oYHy@wxE8PLtMU9Eha{;Xc8 z=(@&o#@9b->3^;xw>>>JrX=ntyN>93t>nrwVW3b!fuVttlqd+~#V>=mL6j-)nr-gk z?#Ns}wOS0@{;eHJO6s7J(O4{^vPG!Z*P?B^#p44;6gVrJxu3nM1Tj|EI7FdP8Jr2s z)ch2zO70Ik+de>71ROTdiy#8avE4VTo&}_;ll>{vB06G5k!;?NgCS^*xQ^wi)-2Yc zPkFuUvIrCx*M-!uX2U_y`}!NzqKLHg5G2WD}%AvK_J+Yv;`7Yr$A* zR~%N6OddgnB+0AnZ9SGW@YqRf1MpeMKrtH^ioZ0lr@zottj8B=tjdPjeoZ)KFgQqV zeAL&sItMk(wG)0;;%iTp+>1)yR|@0|`~>!oU0$r~fvUR#!v!;oHUM z`vZQ`K52#Z#-^(4^I6;_mDK(Z-O82CqPEEsB1l>6pNM9&W`hv>My9O$p-rlN%dl5a z^clz3Ro|V@HpPVDO`@eFsTzBQZL#|Zhd)7+U*g`DRzsd3zHk;7Uj=){3&+m zaSm;lPO^+)M9s$Y{oqfW%+5D5px&Nt>DoOk@HLyV{fN6mDdi4Q&NBcME2$B&Y73P@!^47G$~(MF*mKf5pMK%qzt_3~b=DQx$Ld!TljX zoo(4~xh_Dgur;Hv0*0T~m*;amd8I5Ox<5H|+VA2{Hy-ODxkKPFR0SG?)kl`Im~58d z@!3eI##?goipPDAS=%opRyZ~dFP?I_Lkz8Xa=LxyqG;K}ND2jGjac>Tk{p9;z|7C! zaBm7}UsRKMrvTm4t_%K6qjBn7a9_o9%Q|<|s|y7g6{w7%20kXHcp?*?5QWmnrtK_G zGoPWuG=8LAJ`NL5QW6fZA7%Ush0JrW!|9uGI&UorKW3FyG=eo zvIeb-_A7MF$*mSo7nHb?W5~7*RMO$2jL}wYN-_

@lDVVp65ap=!a592}az0Eq^2Lifb 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 diff --git a/docs/rfc/README.md b/docs/rfc/README.md deleted file mode 100644 index c3adfa08a..000000000 --- a/docs/rfc/README.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -order: 1 -parent: - order: false ---- - -# Requests for Comments - -A Request for Comments (RFC) is a record of discussion on an open-ended topic -related to the design and implementation of Tendermint Core, for which no -immediate decision is required. - -The purpose of an RFC is to serve as a historical record of a high-level -discussion that might otherwise only be recorded in an ad hoc way (for example, -via gists or Google docs) that are difficult to discover for someone after the -fact. An RFC _may_ give rise to more specific architectural _decisions_ for -Tendermint, but those decisions must be recorded separately in [Architecture -Decision Records (ADR)](./../architecture). - -As a rule of thumb, if you can articulate a specific question that needs to be -answered, write an ADR. If you need to explore the topic and get input from -others to know what questions need to be answered, an RFC may be appropriate. - -## RFC Content - -An RFC should provide: - -- A **changelog**, documenting when and how the RFC has changed. -- An **abstract**, briefly summarizing the topic so the reader can quickly tell - whether it is relevant to their interest. -- Any **background** a reader will need to understand and participate in the - substance of the discussion (links to other documents are fine here). -- The **discussion**, the primary content of the document. - -The [rfc-template.md](./rfc-template.md) file includes placeholders for these -sections. - -## Table of Contents - -- [RFC-000: P2P Roadmap](./rfc-000-p2p-roadmap.rst) -- [RFC-001: Storage Engines](./rfc-001-storage-engine.rst) -- [RFC-002: Interprocess Communication](./rfc-002-ipc-ecosystem.md) -- [RFC-003: Performance Taxonomy](./rfc-003-performance-questions.md) -- [RFC-004: E2E Test Framework Enhancements](./rfc-004-e2e-framework.md) -- [RFC-005: Event System](./rfc-005-event-system.rst) - - diff --git a/docs/rfc/rfc-000-p2p-roadmap.rst b/docs/rfc/rfc-000-p2p-roadmap.rst deleted file mode 100644 index dc9b54c7f..000000000 --- a/docs/rfc/rfc-000-p2p-roadmap.rst +++ /dev/null @@ -1,316 +0,0 @@ -==================== -RFC 000: P2P Roadmap -==================== - -Changelog ---------- - -- 2021-08-20: Completed initial draft and distributed via a gist -- 2021-08-25: Migrated as an RFC and changed format - -Abstract --------- - -This document discusses the future of peer network management in Tendermint, with -a particular focus on features, semantics, and a proposed roadmap. -Specifically, we consider libp2p as a tool kit for implementing some fundamentals. - -Background ----------- - -For the 0.35 release cycle the switching/routing layer of Tendermint was -replaced. This work was done "in place," and produced a version of Tendermint -that was backward-compatible and interoperable with previous versions of the -software. While there are new p2p/peer management constructs in the new -version (e.g. ``PeerManager`` and ``Router``), the main effect of this change -was to simplify the ways that other components within Tendermint interacted with -the peer management layer, and to make it possible for higher-level components -(specifically the reactors), to be used and tested more independently. - -This refactoring, which was a major undertaking, was entirely necessary to -enable areas for future development and iteration on this aspect of -Tendermint. There are also a number of potential user-facing features that -depend heavily on the p2p layer: additional transport protocols, transport -compression, improved resilience to network partitions. These improvements to -modularity, stability, and reliability of the p2p system will also make -ongoing maintenance and feature development easier in the rest of Tendermint. - -Critique of Current Peer-to-Peer Infrastructure ---------------------------------------- - -The current (refactored) P2P stack is an improvement on the previous iteration -(legacy), but as of 0.35, there remains room for improvement in the design and -implementation of the P2P layer. - -Some limitations of the current stack include: - -- heavy reliance on buffering to avoid backups in the flow of components, - which is fragile to maintain and can lead to unexpected memory usage - patterns and forces the routing layer to make decisions about when messages - should be discarded. - -- the current p2p stack relies on convention (rather than the compiler) to - enforce the API boundaries and conventions between reactors and the router, - making it very easy to write "wrong" reactor code or introduce a bad - dependency. - -- the current stack is probably more complex and difficult to maintain because - the legacy system must coexist with the new components in 0.35. When the - legacy stack is removed there are some simple changes that will become - possible and could reduce the complexity of the new system. (e.g. `#6598 - `_.) - -- the current stack encapsulates a lot of information about peers, and makes it - difficult to expose that information to monitoring/observability tools. This - general opacity also makes it difficult to interact with the peer system - from other areas of the code base (e.g. tests, reactors). - -- the legacy stack provided some control to operators to force the system to - dial new peers or seed nodes or manipulate the topology of the system _in - situ_. The current stack can't easily provide this, and while the new stack - may have better behavior, it does leave operators hands tied. - -Some of these issues will be resolved early in the 0.36 cycle, with the -removal of the legacy components. - -The 0.36 release also provides the opportunity to make changes to the -protocol, as the release will not be compatible with previous releases. - -Areas for Development ---------------------- - -These sections describe features that may make sense to include in a Phase 2 of -a P2P project. - -Internal Message Passing -~~~~~~~~~~~~~~~~~~~~~~~~ - -Currently, there's no provision for intranode communication using the P2P -layer, which means when two reactors need to interact with each other they -have to have dependencies on each other's interfaces, and -initialization. Changing these interactions (e.g. transitions between -blocksync and consensus) from procedure calls to message passing. - -This is a relatively simple change and could be implemented with the following -components: - -- a constant to represent "local" delivery as the ``To`` field on - ``p2p.Envelope``. - -- special path for routing local messages that doesn't require message - serialization (protobuf marshalling/unmarshaling). - -Adding these semantics, particularly if in conjunction with synchronous -semantics provides a solution to dependency graph problems currently present -in the Tendermint codebase, which will simplify development, make it possible -to isolate components for testing. - -Eventually, this will also make it possible to have a logical Tendermint node -running in multiple processes or in a collection of containers, although the -usecase of this may be debatable. - -Synchronous Semantics (Paired Request/Response) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -In the current system, all messages are sent with fire-and-forget semantics, -and there's no coupling between a request sent via the p2p layer, and a -response. These kinds of semantics would simplify the implementation of -state and block sync reactors, and make intra-node message passing more -powerful. - -For some interactions, like gossiping transactions between the mempools of -different nodes, fire-and-forget semantics make sense, but for other -operations the missing link between requests/responses leads to either -inefficiency when a node fails to respond or becomes unavailable, or code that -is just difficult to follow. - -To support this kind of work, the protocol would need to accommodate some kind -of request/response ID to allow identifying out-of-order responses over a -single connection. Additionally, expanded the programming model of the -``p2p.Channel`` to accommodate some kind of _future_ or similar paradigm to -make it viable to write reactor code without needing for the reactor developer -to wrestle with lower level concurrency constructs. - - -Timeout Handling (QoS) -~~~~~~~~~~~~~~~~~~~~~~ - -Currently, all timeouts, buffering, and QoS features are handled at the router -layer, and the reactors are implemented in ways that assume/require -asynchronous operation. This both increases the required complexity at the -routing layer, and means that misbehavior at the reactor level is difficult to -detect or attribute. Additionally, the current system provides three main -parameters to control quality of service: - -- buffer sizes for channels and queues. - -- priorities for channels - -- queue implementation details for shedding load. - -These end up being quite coarse controls, and changing the settings are -difficult because as the queues and channels are able to buffer large numbers -of messages it can be hard to see the impact of a given change, particularly -in our extant test environment. In general, we should endeavor to: - -- set real timeouts, via contexts, on most message send operations, so that - senders rather than queues can be responsible for timeout - logic. Additionally, this will make it possible to avoid sending messages - during shutdown. - -- reduce (to the greatest extent possible) the amount of buffering in - channels and the queues, to more readily surface backpressure and reduce the - potential for buildup of stale messages. - -Stream Based Connection Handling -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Currently the transport layer is message based, which makes sense from a -mental model of how the protocol works, but makes it more difficult to -implement transports and connection types, as it forces a higher level view of -the connection and interaction which makes it harder to implement for novel -transport types and makes it more likely that message-based caching and rate -limiting will be implemented at the transport layer rather than at a more -appropriate level. - -The transport then, would be responsible for negotiating the connection and the -handshake and otherwise behave like a socket/file descriptor with ``Read`` and -``Write`` methods. - -While this was included in the initial design for the new P2P layer, it may be -obviated entirely if the transport and peer layer is replaced with libp2p, -which is primarily stream based. - -Service Discovery -~~~~~~~~~~~~~~~~~ - -In the current system, Tendermint assumes that all nodes in a network are -largely equivalent, and nodes tend to be "chatty" making many requests of -large numbers of peers and waiting for peers to (hopefully) respond. While -this works and has allowed Tendermint to get to a certain point, this both -produces a theoretical scaling bottle neck and makes it harder to test and -verify components of the system. - -In addition to peer's identity and connection information, peers should be -able to advertise a number of services or capabilities, and node operators or -developers should be able to specify peer capability requirements (e.g. target -at least -percent of peers with capability.) - -These capabilities may be useful in selecting peers to send messages to, it -may make sense to extend Tendermint's message addressing capability to allow -reactors to send messages to groups of peers based on role rather than only -allowing addressing to one or all peers. - -Having a good service discovery mechanism may pair well with the synchronous -semantics (request/response) work, as it allows reactors to "make a request of -a peer with capability and wait for the response," rather force the -reactors to need to track the capabilities or state of specific peers. - -Solutions ---------- - -Continued Homegrown Implementation -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The current peer system is homegrown and is conceptually compatible with the -needs of the project, and while there are limitations to the system, the p2p -layer is not (currently as of 0.35) a major source of bugs or friction during -development. - -However, the current implementation makes a number of allowances for -interoperability, and there are a collection of iterative improvements that -should be considered in the next couple of releases. To maintain the current -implementation, upcoming work would include: - -- change the ``Transport`` mechanism to facilitate easier implementations. - -- implement different ``Transport`` handlers to be able to manage peer - connections using different protocols (e.g. QUIC, etc.) - -- entirely remove the constructs and implementations of the legacy peer - implementation. - -- establish and enforce clearer chains of responsibility for connection - establishment (e.g. handshaking, setup,) which is currently shared between - three components. - -- report better metrics regarding the into the state of peers and network - connectivity, which are opaque outside of the system. This is constrained at - the moment as a side effect of the split responsibility for connection - establishment. - -- extend the PEX system to include service information so that nodes in the - network weren't necessarily homogeneous. - -While maintaining a bespoke peer management layer would seem to distract from -development of core functionality, the truth is that (once the legacy code is -removed,) the scope of the peer layer is relatively small from a maintenance -perspective, and having control at this layer might actually afford the -project with the ability to more rapidly iterate on some features. - -LibP2P -~~~~~~ - -LibP2P provides components that, approximately, account for the -``PeerManager`` and ``Transport`` components of the current (new) P2P -stack. The Go APIs seem reasonable, and being able to externalize the -implementation details of peer and connection management seems like it could -provide a lot of benefits, particularly in supporting a more active ecosystem. - -In general the API provides the kind of stream-based, multi-protocol -supporting, and idiomatic baseline for implementing a peer layer. Additionally -because it handles peer exchange and connection management at a lower -level, by using libp2p it'd be possible to remove a good deal of code in favor -of just using libp2p. Having said that, Tendermint's P2P layer covers a -greater scope (e.g. message routing to different peers) and that layer is -something that Tendermint might want to retain. - -The are a number of unknowns that require more research including how much of -a peer database the Tendermint engine itself needs to maintain, in order to -support higher level operations (consensus, statesync), but it might be the -case that our internal systems need to know much less about peers than -otherwise specified. Similarly, the current system has a notion of peer -scoring that cannot be communicated to libp2p, which may be fine as this is -only used to support peer exchange (PEX,) which would become a property libp2p -and not expressed in it's current higher-level form. - -In general, the effort to switch to libp2p would involve: - -- timing it during an appropriate protocol-breaking window, as it doesn't seem - viable to support both libp2p *and* the current p2p protocol. - -- providing some in-memory testing network to support the use case that the - current ``p2p.MemoryNetwork`` provides. - -- re-homing the ``p2p.Router`` implementation on top of libp2p components to - be able to maintain the current reactor implementations. - -Open question include: - -- how much local buffering should we be doing? It sort of seems like we should - figure out what the expected behavior is for libp2p for QoS-type - functionality, and if our requirements mean that we should be implementing - this on top of things ourselves? - -- if Tendermint was going to use libp2p, how would libp2p's stability - guarantees (protocol, etc.) impact/constrain Tendermint's stability - guarantees? - -- what kind of introspection does libp2p provide, and to what extend would - this change or constrain the kind of observability that Tendermint is able - to provide? - -- how do efforts to select "the best" (healthy, close, well-behaving, etc.) - peers work out if Tendermint is not maintaining a local peer database? - -- would adding additional higher level semantics (internal message passing, - request/response pairs, service discovery, etc.) facilitate removing some of - the direct linkages between constructs/components in the system and reduce - the need for Tendermint nodes to maintain state about its peers? - -References ----------- - -- `Tracking Ticket for P2P Refactor Project `_ -- `ADR 61: P2P Refactor Scope <../architecture/adr-061-p2p-refactor-scope.md>`_ -- `ADR 62: P2P Architecture and Abstraction <../architecture/adr-061-p2p-architecture.md>`_ diff --git a/docs/rfc/rfc-001-storage-engine.rst b/docs/rfc/rfc-001-storage-engine.rst deleted file mode 100644 index 560e8a8b3..000000000 --- a/docs/rfc/rfc-001-storage-engine.rst +++ /dev/null @@ -1,179 +0,0 @@ -=========================================== -RFC 001: Storage Engines and Database Layer -=========================================== - -Changelog ---------- - -- 2021-04-19: Initial Draft (gist) -- 2021-09-02: Migrated to RFC folder, with some updates - -Abstract --------- - -The aspect of Tendermint that's responsible for persistence and storage (often -"the database" internally) represents a bottle neck in the architecture of the -platform, that the 0.36 release presents a good opportunity to correct. The -current storage engine layer provides a great deal of flexibility that is -difficult for users to leverage or benefit from, while also making it harder -for Tendermint Core developers to deliver improvements on storage engine. This -RFC discusses the possible improvements to this layer of the system. - -Background ----------- - -Tendermint has a very thin common wrapper that makes Tendermint itself -(largely) agnostic to the data storage layer (within the realm of the popular -key-value/embedded databases.) This flexibility is not particularly useful: -the benefits of a specific database engine in the context of Tendermint is not -particularly well understood, and the maintenance burden for multiple backends -is not commensurate with the benefit provided. Additionally, because the data -storage layer is handled generically, and most tests run with an in-memory -framework, it's difficult to take advantage of any higher-level features of a -database engine. - -Ideally, developers within Tendermint will be able to interact with persisted -data via an interface that can function, approximately like an object -store, and this storage interface will be able to accommodate all existing -persistence workloads (e.g. block storage, local peer management information -like the "address book", crash-recovery log like the WAL.) In addition to -providing a more ergonomic interface and new semantics, by selecting a single -storage engine tendermint can use native durability and atomicity features of -the storage engine and simplify its own implementations. - -Data Access Patterns -~~~~~~~~~~~~~~~~~~~~ - -Tendermint's data access patterns have the following characteristics: - -- aggregate data size often exceeds memory. - -- data is rarely mutated after it's written for most data (e.g. blocks), but - small amounts of working data is persisted by nodes and is frequently - mutated (e.g. peer information, validator information.) - -- read patterns can be quite random. - -- crash resistance and crash recovery, provided by write-ahead-logs (in - consensus, and potentially for the mempool) should allow the system to - resume work after an unexpected shut down. - -Project Goals -~~~~~~~~~~~~~ - -As we think about replacing the current persistence layer, we should consider -the following high level goals: - -- drop dependencies on storage engines that have a CGo dependency. - -- encapsulate data format and data storage from higher-level services - (e.g. reactors) within tendermint. - -- select a storage engine that does not incur any additional operational - complexity (e.g. database should be embedded.) - -- provide database semantics with sufficient ACID, snapshots, and - transactional support. - -Open Questions -~~~~~~~~~~~~~~ - -The following questions remain: - -- what kind of data-access concurrency does tendermint require? - -- would tendermint users SDK/etc. benefit from some shared database - infrastructure? - - - In earlier conversations it seemed as if the SDK has selected Badger and - RocksDB for their storage engines, and it might make sense to be able to - (optionally) pass a handle to a Badger instance between the libraries in - some cases. - -- what are typical data sizes, and what kinds of memory sizes can we expect - operators to be able to provide? - -- in addition to simple persistence, what kind of additional semantics would - tendermint like to enjoy (e.g. transactional semantics, unique constraints, - indexes, in-place-updates, etc.)? - -Decision Framework -~~~~~~~~~~~~~~~~~~ - -Given the constraint of removing the CGo dependency, the decision is between -"badger" and "boltdb" (in the form of the etcd/CoreOS fork,) as low level. On -top of this and somewhat orthogonally, we must also decide on the interface to -the database and how the larger application will have to interact with the -database layer. Users of the data layer shouldn't ever need to interact with -raw byte slices from the database, and should mostly have the experience of -interacting with Go-types. - -Badger is more consistently developed and has a broader feature set than -Bolt. At the same time, Badger is likely more memory intensive and may have -more overhead in terms of open file handles given it's model. At first glance, -Badger is the obvious choice: it's actively developed and it has a lot of -features that could be useful. Bolt is not without some benefits: it's stable -and is maintained by the etcd folks, it's simpler model (single memory mapped -file, etc,) may be easier to reason about. - -I propose that we consider the following specific questions about storage -engines: - -- does Badger's evolving development, which may result in data file format - changes in the future, and could restrict our access to using the latest - version of the library between major upgrades, present a problem? - -- do we do we have goals/concerns about memory footprint that Badger may - prevent us from hitting, particularly as data sets grow over time? - -- what kind of additional tooling might we need/like to build (dump/restore, - etc.)? - -- do we want to run unit/integration tests against a data files on disk rather - than relying exclusively on the memory database? - -Project Scope -~~~~~~~~~~~~~ - -This project will consist of the following aspects: - -- selecting a storage engine, and modifying the tendermint codebase to - disallow any configuration of the storage engine outside of the tendermint. - -- remove the dependency on the current tm-db interfaces and replace with some - internalized, safe, and ergonomic interface for data persistence with all - required database semantics. - -- update core tendermint code to use the new interface and data tools. - -Next Steps -~~~~~~~~~~ - -- circulate the RFC, and discuss options with appropriate stakeholders. - -- write brief ADR to summarize decisions around technical decisions reached - during the RFC phase. - -References ----------- - -- `bolddb `_ -- `badger `_ -- `badgerdb overview `_ -- `botldb overview `_ -- `boltdb vs badger `_ -- `bolthold `_ -- `badgerhold `_ -- `Pebble `_ -- `SDK Issue Regarding IVAL `_ -- `SDK Discussion about SMT/IVAL `_ - -Discussion ----------- - -- All things being equal, my tendency would be to use badger, with badgerhold - (if that makes sense) for its ergonomics and indexing capabilities, which - will require some small selection of wrappers for better write transaction - support. This is a weakly held tendency/belief and I think it would be - useful for the RFC process to build consensus (or not) around this basic - assumption. diff --git a/docs/rfc/rfc-002-ipc-ecosystem.md b/docs/rfc/rfc-002-ipc-ecosystem.md deleted file mode 100644 index 9b51beb7f..000000000 --- a/docs/rfc/rfc-002-ipc-ecosystem.md +++ /dev/null @@ -1,420 +0,0 @@ -# RFC 002: Interprocess Communication (IPC) in Tendermint - -## Changelog - -- 08-Sep-2021: Initial draft (@creachadair). - - -## Abstract - -Communication in Tendermint among consensus nodes, applications, and operator -tools all use different message formats and transport mechanisms. In some -cases there are multiple options. Having all these options complicates both the -code and the developer experience, and hides bugs. To support a more robust, -trustworthy, and usable system, we should document which communication paths -are essential, which could be removed or reduced in scope, and what we can -improve for the most important use cases. - -This document proposes a variety of possible improvements of varying size and -scope. Specific design proposals should get their own documentation. - - -## Background - -The Tendermint state replication engine has a complex IPC footprint. - -1. Consensus nodes communicate with each other using a networked peer-to-peer - message-passing protocol. - -2. Consensus nodes communicate with the application whose state is being - replicated via the [Application BlockChain Interface (ABCI)][abci]. - -3. Consensus nodes export a network-accessible [RPC service][rpc-service] to - support operations (bootstrapping, debugging) and synchronization of [light clients][light-client]. - This interface is also used by the [`tendermint` CLI][tm-cli]. - -4. Consensus nodes export a gRPC service exposing a subset of the methods of - the RPC service described by (3). This was intended to simplify the - implementation of tools that already use gRPC to communicate with an - application (via the Cosmos SDK), and wanted to also talk to the consensus - node without implementing yet another RPC protocol. - - The gRPC interface to the consensus node has been deprecated and is slated - for removal in the forthcoming Tendermint v0.36 release. - -5. Consensus nodes may optionally communicate with a "remote signer" that holds - a validator key and can provide public keys and signatures to the consensus - node. One of the stated goals of this configuration is to allow the signer - to be run on a private network, separate from the consensus node, so that a - compromise of the consensus node from the public network would be less - likely to expose validator keys. - -## Discussion: Transport Mechanisms - -### Remote Signer Transport - -A remote signer communicates with the consensus node in one of two ways: - -1. "Raw": Using a TCP or Unix-domain socket which carries varint-prefixed - protocol buffer messages. In this mode, the consensus node is the server, - and the remote signer is the client. - - This mode has been deprecated, and is intended to be removed. - -2. gRPC: This mode uses the same protobuf messages as "Raw" node, but uses a - standard encrypted gRPC HTTP/2 stub as the transport. In this mode, the - remote signer is the server and the consensus node is the client. - - -### ABCI Transport - -In ABCI, the _application_ is the server, and the Tendermint consensus engine -is the client. Most applications implement the server using the [Cosmos SDK][cosmos-sdk], -which handles low-level details of the ABCI interaction and provides a -higher-level interface to the rest of the application. The SDK is written in Go. - -Beneath the SDK, the application communicates with Tendermint core in one of -two ways: - -- In-process direct calls (for applications written in Go and compiled against - the Tendermint code). This is an optimization for the common case where an - application is written in Go, to save on the overhead of marshaling and - unmarshaling requests and responses within the same process: - [`abci/client/local_client.go`][local-client] - -- A custom remote procedure protocol built on wire-format protobuf messages - using a socket (the "socket protocol"): [`abci/server/socket_server.go`][socket-server] - -The SDK also provides a [gRPC service][sdk-grpc] accessible from outside the -application, allowing transactions to be broadcast to the network, look up -transactions, and simulate transaction costs. - - -### RPC Transport - -The consensus node RPC service allows callers to query consensus parameters -(genesis data, transactions, commits), node status (network info, health -checks), application state (abci_query, abci_info), mempool state, and other -attributes of the node and its application. The service also provides methods -allowing transactions and evidence to be injected ("broadcast") into the -blockchain. - -The RPC service is exposed in several ways: - -- HTTP GET: Queries may be sent as URI parameters, with method names in the path. - -- HTTP POST: Queries may be sent as JSON-RPC request messages in the body of an - HTTP POST request. The server uses a custom implementation of JSON-RPC that - is not fully compatible with the [JSON-RPC 2.0 spec][json-rpc], but handles - the common cases. - -- Websocket: Queries may be sent as JSON-RPC request messages via a websocket. - This transport uses more or less the same JSON-RPC plumbing as the HTTP POST - handler. - - The websocket endpoint also includes three methods that are _only_ exported - via websocket, which appear to support event subscription. - -- gRPC: A subset of queries may be issued in protocol buffer format to the gRPC - interface described above under (4). As noted, this endpoint is deprecated - and will be removed in v0.36. - -### Opportunities for Simplification - -**Claim:** There are too many IPC mechanisms. - -The preponderance of ABCI usage is via the Cosmos SDK, which means the -application and the consensus node are compiled together into a single binary, -and the consensus node calls the ABCI methods of the application directly as Go -functions. - -We also need a true IPC transport to support ABCI applications _not_ written in -Go. There are also several known applications written in Rust, for example -(including [Anoma](https://github.com/anoma/anoma), Penumbra, -[Oasis](https://github.com/oasisprotocol/oasis-core), Twilight, and -[Nomic](https://github.com/nomic-io/nomic)). Ideally we will have at most one -such transport "built-in": More esoteric cases can be handled by a custom proxy. -Pragmatically, gRPC is probably the right choice here. - -The primary consumers of the multi-headed "RPC service" today are the light -client and the `tendermint` command-line client. There is probably some local -use via curl, but I expect that is mostly ad hoc. Ethan reports that nodes are -often configured with the ports to the RPC service blocked, which is good for -security but complicates use by the light client. - -### Context: Remote Signer Issues - -Since the remote signer needs a secure communication channel to exchange keys -and signatures, and is expected to run truly remotely from the node (i.e., on a -separate physical server), there is not a whole lot we can do here. We should -finish the deprecation and removal of the "raw" socket protocol between the -consensus node and remote signers, but the use of gRPC is appropriate. - -The main improvement we can make is to simplify the implementation quite a bit, -once we no longer need to support both "raw" and gRPC transports. - -### Context: ABCI Issues - -In the original design of ABCI, the presumption was that all access to the -application should be mediated by the consensus node. The idea is that outside -access could change application state and corrupt the consensus process, which -relies on the application to be deterministic. Of course, even without outside -access an application could behave nondeterministically, but allowing other -programs to send it requests was seen as courting trouble. - -Conversely, users noted that most of the time, tools written for a particular -application don't want to talk to the consensus module directly. The -application "owns" the state machine the consensus engine is replicating, so -tools that care about application state should talk to the application. -Otherwise, they would have to bake in knowledge about Tendermint (e.g., its -interfaces and data structures) just because of the mediation. - -For clients to talk directly to the application, however, there is another -concern: The consensus node is the ABCI _client_, so it is inconvenient for the -application to "push" work into the consensus module via ABCI itself. The -current implementation works around this by calling the consensus node's RPC -service, which exposes an `ABCIQuery` kitchen-sink method that allows the -application a way to poke ABCI messages in the other direction. - -Without this RPC method, you could work around this (at least in principle) by -having the consensus module "poll" the application for work that needs done, -but that has unsatisfactory implications for performance and robustness, as -well as being harder to understand. - -There has apparently been discussion about trying to make a more bidirectional -communication between the consensus node and the application, but this issue -seems to still be unresolved. - -Another complication of ABCI is that it requires the application (server) to -maintain [four separate connections][abci-conn]: One for "consensus" operations -(BeginBlock, EndBlock, DeliverTx, Commit), one for "mempool" operations, one -for "query" operations, and one for "snapshot" (state synchronization) operations. -The rationale seems to have been that these groups of operations should be able -to proceed concurrently with each other. In practice, it results in a very complex -state management problem to coordinate state updates between the separate streams. -While application authors in Go are mostly insulated from that complexity by the -Cosmos SDK, the plumbing to maintain those separate streams is complicated, hard -to understand, and we suspect it contains concurrency bugs and/or lock contention -issues affecting performance that are subtle and difficult to pin down. - -Even without changing the semantics of any ABCI operations, this code could be -made smaller and easier to debug by separating the management of concurrency -and locking from the IPC transport: If all requests and responses are routed -through one connection, the server can explicitly maintain priority queues for -requests and responses, and make less-conservative decisions about when locks -are (or aren't) required to synchronize state access. With independent queues, -the server must lock conservatively, and no optimistic scheduling is practical. - -This would be a tedious implementation change, but should be achievable without -breaking any of the existing interfaces. More importantly, it could potentially -address a lot of difficult concurrency and performance problems we currently -see anecdotally but have difficultly isolating because of how intertwined these -separate message streams are at runtime. - -TODO: Impact of ABCI++ for this topic? - -### Context: RPC Issues - -The RPC system serves several masters, and has a complex surface area. I -believe there are some improvements that can be exposed by separating some of -these concerns. - -The Tendermint light client currently uses the RPC service to look up blocks -and transactions, and to forward ABCI queries to the application. The light -client proxy uses the RPC service via a websocket. The Cosmos IBC relayer also -uses the RPC service via websocket to watch for transaction events, and uses -the `ABCIQuery` method to fetch information and proofs for posted transactions. - -Some work is already underway toward using P2P message passing rather than RPC -to synchronize light client state with the rest of the network. IBC relaying, -however, requires access to the event system, which is currently not accessible -except via the RPC interface. Event subscription _could_ be exposed via P2P, -but that is a larger project since it adds P2P communication load, and might -thus have an impact on the performance of consensus. - -If event subscription can be moved into the P2P network, we could entirely -remove the websocket transport, even for clients that still need access to the -RPC service. Until then, we may still be able to reduce the scope of the -websocket endpoint to _only_ event subscription, by moving uses of the RPC -server as a proxy to ABCI over to the gRPC interface. - -Having the RPC server still makes sense for local bootstrapping and operations, -but can be further simplified. Here are some specific proposals: - -- Remove the HTTP GET interface entirely. - -- Simplify JSON-RPC plumbing to remove unnecessary reflection and wrapping. - -- Remove the gRPC interface (this is already planned for v0.36). - -- Separate the websocket interface from the rest of the RPC service, and - restrict it to only event subscription. - - Eventually we should try to emove the websocket interface entirely, but we - will need to revisit that (probably in a new RFC) once we've done some of the - easier things. - -These changes would preserve the ability of operators to issue queries with -curl (but would require using JSON-RPC instead of URI parameters). That would -be a little less user-friendly, but for a use case that should not be that -prevalent. - -These changes would also preserve compatibility with existing JSON-RPC based -code paths like the `tendermint` CLI and the light client (even ahead of -further work to remove that dependency). - -**Design goal:** An operator should be able to disable non-local access to the -RPC server on any node in the network without impairing the ability of the -network to function for service of state replication, including light clients. - -**Design principle:** All communication required to implement and monitor the -consensus network should use P2P, including the various synchronizations. - -### Options for ABCI Transport - -The majority of current usage is in Go, and the majority of that is mediated by -the Cosmos SDK, which uses the "direct call" interface. There is probably some -opportunity to clean up the implementation of that code, notably by inverting -which interface is at the "top" of the abstraction stack (currently it acts -like an RPC interface, and escape-hatches into the direct call). However, this -general approach works fine and doesn't need to be fundamentally changed. - -For applications _not_ written in Go, the two remaining options are the -"socket" protocol (another variation on varint-prefixed protobuf messages over -an unstructured stream) and gRPC. It would be nice if we could get rid of one -of these to reduce (unneeded?) optionality. - -Since both the socket protocol and gRPC depend on protocol buffers, the -"socket" protocol is the most obvious choice to remove. While gRPC is more -complex, the set of languages that _have_ protobuf support but _lack_ gRPC -support is small. Moreover, gRPC is already widely used in the rest of the -ecosystem (including the Cosmos SDK). - -If some use case did arise later that can't work with gRPC, it would not be too -difficult for that application author to write a little proxy (in Go) that -bridges the convenient SDK APIs into a simpler protocol than gRPC. - -**Design principle:** It is better for an uncommon special case to carry the -burdens of its specialness, than to bake an escape hatch into the infrastructure. - -**Recommendation:** We should deprecate and remove the socket protocol. - -### Options for RPC Transport - -[ADR 057][adr-57] proposes using gRPC for the Tendermint RPC implementation. -This is still possible, but if we are able to simplify and decouple the -concerns as described above, I do not think it should be necessary. - -While JSON-RPC is not the best possible RPC protocol for all situations, it has -some advantages over gRPC for our domain. Specifically: - -- It is easy to call JSON-RPC manually from the command-line, which helps with - a common concern for the RPC service, local debugging and operations. - - Relatedly: JSON is relatively easy for humans to read and write, and it can - be easily copied and pasted to share sample queries and debugging results in - chat, issue comments, and so on. Ideally, the RPC service will not be used - for activities where the costs of a text protocol are important compared to - its legibility and manual usability benefits. - -- gRPC has an enormous dependency footprint for both clients and servers, and - many of the features it provides to support security and performance - (encryption, compression, streaming, etc.) are mostly irrelevant to local - use. Tendermint already needs to include a gRPC client for the remote signer, - but if we can avoid the need for a _client_ to depend on gRPC, that is a win - for usability. - -- If we intend to migrate light clients off RPC to use P2P entirely, there is - no advantage to forcing a temporary migration to gRPC along the way; and once - the light client is not dependent on the RPC service, the efficiency of the - protocol is much less important. - -- We can still get the benefits of generated data types using protocol buffers, even - without using gRPC: - - - Protobuf defines a standard JSON encoding for all message types so - languages with protobuf support do not need to worry about type mapping - oddities. - - - Using JSON means that even languages _without_ good protobuf support can - implement the protocol with a bit more work, and I expect this situation to - be rare. - -Even if a language lacks a good standard JSON-RPC mechanism, the protocol is -lightweight and can be implemented by simple send/receive over TCP or -Unix-domain sockets with no need for code generation, encryption, etc. gRPC -uses a complex HTTP/2 based transport that is not easily replicated. - -### Future Work - -The background and proposals sketched above focus on the existing structure of -Tendermint and improvements we can make in the short term. It is worthwhile to -also consider options for longer-term broader changes to the IPC ecosystem. -The following outlines some ideas at a high level: - -- **Consensus service:** Today, the application and the consensus node are - nominally connected only via ABCI. Tendermint was originally designed with - the assumption that all communication with the application should be mediated - by the consensus node. Based on further experience, however, the design goal - is now that the _application_ should be the mediator of application state. - - As noted above, however, ABCI is a client/server protocol, with the - application as the server. For outside clients that turns out to have been a - good choice, but it complicates the relationship between the application and - the consensus node: Previously transactions were entered via the node, now - they are entered via the app. - - We have worked around this by using the Tendermint RPC service to give the - application a "back channel" to the consensus node, so that it can push - transactions back into the consensus network. But the RPC service exposes a - lot of other functionality, too, including event subscription, block and - transaction queries, and a lot of node status information. - - Even if we can't easily "fix" the orientation of the ABCI relationship, we - could improve isolation by splitting out the parts of the RPC service that - the application needs as a back-channel, and sharing those _only_ with the - application. By defining a "consensus service", we could give the application - a way to talk back limited to only the capabilities it needs. This approach - has the benefit that we could do it without breaking existing use, and if we - later did "fix" the ABCI directionality, we could drop the special case - without disrupting the rest of the RPC interface. - -- **Event service:** Right now, the IBC relayer relies on the Tendermint RPC - service to provide a stream of block and transaction events, which it uses to - discover which transactions need relaying to other chains. While I think - that event subscription should eventually be handled via P2P, we could gain - some immediate benefit by splitting out event subscription from the rest of - the RPC service. - - In this model, an event subscription service would be exposed on the public - network, but on a different endpoint. This would remove the need for the RPC - service to support the websocket protocol, and would allow operators to - isolate potentially sensitive status query results from the public network. - - At the moment the relayers also use the RPC service to get block data for - synchronization, but work is already in progress to handle that concern via - the P2P layer. Once that's done, event subscription could be separated. - -Separating parts of the existing RPC service is not without cost: It might -require additional connection endpoints, for example, though it is also not too -difficult for multiple otherwise-independent services to share a connection. - -In return, though, it would become easier to reduce transport options and for -operators to independently control access to sensitive data. Considering the -viability and implications of these ideas is beyond the scope of this RFC, but -they are documented here since they follow from the background we have already -discussed. - -## References - -[abci]: https://github.com/tendermint/spec/tree/95cf253b6df623066ff7cd4074a94e7a3f147c7a/spec/abci -[rpc-service]: https://docs.tendermint.com/master/rpc/ -[light-client]: https://docs.tendermint.com/master/tendermint-core/light-client.html -[tm-cli]: https://github.com/tendermint/tendermint/tree/master/cmd/tendermint -[cosmos-sdk]: https://github.com/cosmos/cosmos-sdk/ -[local-client]: https://github.com/tendermint/tendermint/blob/master/abci/client/local_client.go -[socket-server]: https://github.com/tendermint/tendermint/blob/master/abci/server/socket_server.go -[sdk-grpc]: https://pkg.go.dev/github.com/cosmos/cosmos-sdk/types/tx#ServiceServer -[json-rpc]: https://www.jsonrpc.org/specification -[abci-conn]: https://github.com/tendermint/spec/blob/master/spec/abci/apps.md#state -[adr-57]: https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-057-RPC.md diff --git a/docs/rfc/rfc-003-performance-questions.md b/docs/rfc/rfc-003-performance-questions.md deleted file mode 100644 index b8111ffa2..000000000 --- a/docs/rfc/rfc-003-performance-questions.md +++ /dev/null @@ -1,283 +0,0 @@ -# RFC 003: Taxonomy of potential performance issues in Tendermint - -## Changelog - -- 2021-09-02: Created initial draft (@wbanfield) -- 2021-09-14: Add discussion of the event system (@wbanfield) - -## Abstract - -This document discusses the various sources of performance issues in Tendermint and -attempts to clarify what work may be required to understand and address them. - -## Background - -Performance, loosely defined as the ability of a software process to perform its work -quickly and efficiently under load and within reasonable resource limits, is a frequent -topic of discussion in the Tendermint project. -To effectively address any issues with Tendermint performance we need to -categorize the various issues, understand their potential sources, and gauge their -impact on users. - -Categorizing the different known performance issues will allow us to discuss and fix them -more systematically. This document proposes a rough taxonomy of performance issues -and highlights areas where more research into potential performance problems is required. - -Understanding Tendermint's performance limitations will also be critically important -as we make changes to many of its subsystems. Performance is a central concern for -upcoming decisions regarding the `p2p` protocol, RPC message encoding and structure, -database usage and selection, and consensus protocol updates. - - -## Discussion - -This section attempts to delineate the different sections of Tendermint functionality -that are often cited as having performance issues. It raises questions and suggests -lines of inquiry that may be valuable for better understanding Tendermint's performance issues. - -As a note: We should avoid quickly adding many microbenchmarks or package level benchmarks. -These are prone to being worse than useless as they can obscure what _should_ be -focused on: performance of the system from the perspective of a user. We should, -instead, tune performance with an eye towards user needs and actions users make. These users comprise -both operators of Tendermint chains and the people generating transactions for -Tendermint chains. Both of these sets of users are largely aligned in wanting an end-to-end -system that operates quickly and efficiently. - -REQUEST: The list below may be incomplete, if there are additional sections that are often -cited as creating poor performance, please comment so that they may be included. - -### P2P - -#### Claim: Tendermint cannot scale to large numbers of nodes - -A complaint has been reported that Tendermint networks cannot scale to large numbers of nodes. -The listed number of nodes a user reported as causing issue was in the thousands. -We don't currently have evidence about what the upper-limit of nodes that Tendermint's -P2P stack can scale to. - -We need to more concretely understand the source of issues and determine what layer -is causing a problem. It's possible that the P2P layer, in the absence of any reactors -sending data, is perfectly capable of managing thousands of peer connections. For -a reasonable networking and application setup, thousands of connections should not present any -issue for the application. - -We need more data to understand the problem directly. We want to drive the popularity -and adoption of Tendermint and this will mean allowing for chains with more validators. -We should follow up with users experiencing this issue. We may then want to add -a series of metrics to the P2P layer to better understand the inefficiencies it produces. - -The following metrics can help us understand the sources of latency in the Tendermint P2P stack: - -* Number of messages sent and received per second -* Time of a message spent on the P2P layer send and receive queues - -The following metrics exist and should be leveraged in addition to those added: - -* Number of peers node's connected to -* Number of bytes per channel sent and received from each peer - -### Sync - -#### Claim: Block Syncing is slow - -Bootstrapping a new node in a network to the height of the rest of the network is believed to -take longer than users would like. Block sync requires fetching all of the blocks from -peers and placing them into the local disk for storage. A useful line of inquiry -is understanding how quickly a perfectly tuned system _could_ fetch all of the state -over a network so that we understand how much overhead Tendermint actually adds. - -The operation is likely to be _incredibly_ dependent on the environment in which -the node is being run. The factors that will influence syncing include: -1. Number of peers that a syncing node may fetch from. -2. Speed of the disk that a validator is writing to. -3. Speed of the network connection between the different peers that node is -syncing from. - -We should calculate how quickly this operation _could possibly_ complete for common chains and nodes. -To calculate how quickly this operation could possibly complete, we should assume that -a node is reading at line-rate of the NIC and writing at the full drive speed to its -local storage. Comparing this theoretical upper-limit to the actual sync times -observed by node operators will give us a good point of comparison for understanding -how much overhead Tendermint incurs. - -We should additionally add metrics to the blocksync operation to more clearly pinpoint -slow operations. The following metrics should be added to the block syncing operation: - -* Time to fetch and validate each block -* Time to execute a block -* Blocks sync'd per unit time - -### Application - -Applications performing complex state transitions have the potential to bottleneck -the Tendermint node. - -#### Claim: ABCI block delivery could cause slowdown - -ABCI delivers blocks in several methods: `BeginBlock`, `DeliverTx`, `EndBlock`, `Commit`. - -Tendermint delivers transactions one-by-one via the `DeliverTx` call. Most of the -transaction delivery in Tendermint occurs asynchronously and therefore appears unlikely to -form a bottleneck in ABCI. - -After delivering all transactions, Tendermint then calls the `Commit` ABCI method. -Tendermint [locks all access to the mempool][abci-commit-description] while `Commit` -proceeds. This means that an application that is slow to execute all of its -transactions or finalize state during the `Commit` method will prevent any new -transactions from being added to the mempool. Apps that are slow to commit will -prevent consensus from proceeded to the next consensus height since Tendermint -cannot validate block proposals or produce block proposals without the -AppHash obtained from the `Commit` method. We should add a metric for each -step in the ABCI protocol to track the amount of time that a node spends communicating -with the application at each step. - -#### Claim: ABCI serialization overhead causes slowdown - -The most common way to run a Tendermint application is using the Cosmos-SDK. -The Cosmos-SDK runs the ABCI application within the same process as Tendermint. -When an application is run in the same process as Tendermint, a serialization penalty -is not paid. This is because the local ABCI client does not serialize method calls -and instead passes the protobuf type through directly. This can be seen -in [local_client.go][abci-local-client-code]. - -Serialization and deserialization in the gRPC and socket protocol ABCI methods -may cause slowdown. While these may cause issue, they are not part of the primary -usecase of Tendermint and do not necessarily need to be addressed at this time. - -### RPC - -#### Claim: The Query API is slow. - -The query API locks a mutex across the ABCI connections. This causes consensus to -slow during queries, as ABCI is no longer able to make progress. This is known -to be causing issue in the cosmos-sdk and is being addressed [in the sdk][sdk-query-fix] -but a more robust solution may be required. Adding metrics to each ABCI client connection -and message as described in the Application section of this document would allow us -to further introspect the issue here. - -#### Claim: RPC Serialization may cause slowdown - -The Tendermint RPC uses a modified version of JSON-RPC. This RPC powers the `broadcast_tx_*` methods, -which is a critical method for adding transactions to Tendermint at the moment. This method is -likely invoked quite frequently on popular networks. Being able to perform efficiently -on this common and critical operation is very important. The current JSON-RPC implementation -relies heavily on type introspection via reflection, which is known to be very slow in -Go. We should therefore produce benchmarks of this method to determine how much overhead -we are adding to what, is likely to be, a very common operation. - -The other JSON-RPC methods are much less critical to the core functionality of Tendermint. -While there may other points of performance consideration within the RPC, methods that do not -receive high volumes of requests should not be prioritized for performance consideration. - -NOTE: Previous discussion of the RPC framework was done in [ADR 57][adr-57] and -there is ongoing work to inspect and alter the JSON-RPC framework in [RFC 002][rfc-002]. -Much of these RPC-related performance considerations can either wait until the work of RFC 002 work is done or be -considered concordantly with the in-flight changes to the JSON-RPC. - -### Protocol - -#### Claim: Gossiping messages is a slow process - -Currently, for any validator to successfully vote in a consensus _step_, it must -receive votes from greater than 2/3 of the validators on the network. In many cases, -it's preferable to receive as many votes as possible from correct validators. - -This produces a quadratic increase in messages that are communicated as more validators join the network. -(Each of the N validators must communicate with all other N-1 validators). - -This large number of messages communicated per step has been identified to impact -performance of the protocol. Given that the number of messages communicated has been -identified as a bottleneck, it would be extremely valuable to gather data on how long -it takes for popular chains with many validators to gather all votes within a step. - -Metrics that would improve visibility into this include: - -* Amount of time for a node to gather votes in a step. -* Amount of time for a node to gather all block parts. -* Number of votes each node sends to gossip (i.e. not its own votes, but votes it is -transmitting for a peer). -* Total number of votes each node sends to receives (A node may receive duplicate votes -so understanding how frequently this occurs will be valuable in evaluating the performance -of the gossip system). - -#### Claim: Hashing Txs causes slowdown in Tendermint - -Using a faster hash algorithm for Tx hashes is currently a point of discussion -in Tendermint. Namely, it is being considered as part of the [modular hashing proposal][modular-hashing]. -It is currently unknown if hashing transactions in the Mempool forms a significant bottleneck. -Although it does not appear to be documented as slow, there are a few open github -issues that indicate a possible user preference for a faster hashing algorithm, -including [issue 2187][issue-2187] and [issue 2186][issue-2186]. - -It is likely worth investigating what order of magnitude Tx hashing takes in comparison to other -aspects of adding a Tx to the mempool. It is not currently clear if the rate of adding Tx -to the mempool is a source of user pain. We should not endeavor to make large changes to -consensus critical components without first being certain that the change is highly -valuable and impactful. - -### Digital Signatures - -#### Claim: Verification of digital signatures may cause slowdown in Tendermint - -Working with cryptographic signatures can be computationally expensive. The cosmos -hub uses [ed25519 signatures][hub-signature]. The library performing signature -verification in Tendermint on votes is [benchmarked][ed25519-bench] to be able to perform an `ed25519` -signature in 75μs on a decently fast CPU. A validator in the Cosmos Hub performs -3 sets of verifications on the signatures of the 140 validators in the Hub -in a consensus round, during block verification, when verifying the prevotes, and -when verifying the precommits. With no batching, this would be roughly `3ms` per -round. It is quite unlikely, therefore, that this accounts for any serious amount -of the ~7 seconds of block time per height in the Hub. - -This may cause slowdown when syncing, since the process needs to constantly verify -signatures. It's possible that improved signature aggregation will lead to improved -light client or other syncing performance. In general, a metric should be added -to track block rate while blocksyncing. - -#### Claim: Our use of digital signatures in the consensus protocol contributes to performance issue - -Currently, Tendermint's digital signature verification requires that all validators -receive all vote messages. Each validator must receive the complete digital signature -along with the vote message that it corresponds to. This means that all N validators -must receive messages from at least 2/3 of the N validators in each consensus -round. Given the potential for oddly shaped network topologies and the expected -variable network roundtrip times of a few hundred milliseconds in a blockchain, -it is highly likely that this amount of gossiping is leading to a significant amount -of the slowdown in the Cosmos Hub and in Tendermint consensus. - -### Tendermint Event System - -#### Claim: The event system is a bottleneck in Tendermint - -The Tendermint Event system is used to communicate and store information about -internal Tendermint execution. The system uses channels internally to send messages -to different subscribers. Sending an event [blocks on the internal channel][event-send]. -The default configuration is to [use an unbuffered channel for event publishes][event-buffer-capacity]. -Several consumers of the event system also use an unbuffered channel for reads. -An example of this is the [event indexer][event-indexer-unbuffered], which takes an -unbuffered subscription to the event system. The result is that these unbuffered readers -can cause writes to the event system to block or slow down depending on contention in the -event system. This has implications for the consensus system, which [publishes events][consensus-event-send]. -To better understand the performance of the event system, we should add metrics to track the timing of -event sends. The following metrics would be a good start for tracking this performance: - -* Time in event send, labeled by Event Type -* Time in event receive, labeled by subscriber -* Event throughput, measured in events per unit time. - -### References -[modular-hashing]: https://github.com/tendermint/tendermint/pull/6773 -[issue-2186]: https://github.com/tendermint/tendermint/issues/2186 -[issue-2187]: https://github.com/tendermint/tendermint/issues/2187 -[rfc-002]: https://github.com/tendermint/tendermint/pull/6913 -[adr-57]: https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-057-RPC.md -[issue-1319]: https://github.com/tendermint/tendermint/issues/1319 -[abci-commit-description]: https://github.com/tendermint/spec/blob/master/spec/abci/apps.md#commit -[abci-local-client-code]: https://github.com/tendermint/tendermint/blob/511bd3eb7f037855a793a27ff4c53c12f085b570/abci/client/local_client.go#L84 -[hub-signature]: https://github.com/cosmos/gaia/blob/0ecb6ed8a244d835807f1ced49217d54a9ca2070/docs/resources/genesis.md#consensus-parameters -[ed25519-bench]: https://github.com/oasisprotocol/curve25519-voi/blob/d2e7fc59fe38c18ca990c84c4186cba2cc45b1f9/PERFORMANCE.md -[event-send]: https://github.com/tendermint/tendermint/blob/5bd3b286a2b715737f6d6c33051b69061d38f8ef/libs/pubsub/pubsub.go#L338 -[event-buffer-capacity]: https://github.com/tendermint/tendermint/blob/5bd3b286a2b715737f6d6c33051b69061d38f8ef/types/event_bus.go#L14 -[event-indexer-unbuffered]: https://github.com/tendermint/tendermint/blob/5bd3b286a2b715737f6d6c33051b69061d38f8ef/state/indexer/indexer_service.go#L39 -[consensus-event-send]: https://github.com/tendermint/tendermint/blob/5bd3b286a2b715737f6d6c33051b69061d38f8ef/internal/consensus/state.go#L1573 -[sdk-query-fix]: https://github.com/cosmos/cosmos-sdk/pull/10045 diff --git a/docs/rfc/rfc-004-e2e-framework.rst b/docs/rfc/rfc-004-e2e-framework.rst deleted file mode 100644 index 8508ca173..000000000 --- a/docs/rfc/rfc-004-e2e-framework.rst +++ /dev/null @@ -1,213 +0,0 @@ -======================================== -RFC 004: E2E Test Framework Enhancements -======================================== - -Changelog ---------- - -- 2021-09-14: started initial draft (@tychoish) - -Abstract --------- - -This document discusses a series of improvements to the e2e test framework -that we can consider during the next few releases to help boost confidence in -Tendermint releases, and improve developer efficiency. - -Background ----------- - -During the 0.35 release cycle, the E2E tests were a source of great -value, helping to identify a number of bugs before release. At the same time, -the tests were not consistently passing during this time, thereby reducing -their value, and forcing the core development team to allocate time and energy -to maintaining and chasing down issues with the e2e tests and the test -harness. The experience of this release cycle calls to mind a series of -improvements to the test framework, and this document attempts to capture -these improvements, along with motivations, and potential for impact. - -Projects --------- - -Flexible Workload Generation -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Presently the e2e suite contains a single workload generation pattern, which -exists simply to ensure that the test networks have some work during their -runs. However, the shape and volume of the work is very consistent and is very -gentle to help ensure test reliability. - -We don't need a complex workload generation framework, but being able to have -a few different workload shapes available for test networks, both generated and -hand-crafted, would be useful. - -Workload patterns/configurations might include: - -- transaction targeting patterns (include light nodes, round robin, target - individual nodes) - -- variable transaction size over time. - -- transaction broadcast option (synchronously, checked, fire-and-forget, - mixed). - -- number of transactions to submit. - -- non-transaction workloads: (evidence submission, query, event subscription.) - -Configurable Generator -~~~~~~~~~~~~~~~~~~~~~~ - -The nightly e2e suite is defined by the `testnet generator -`_, -and it's difficult to add dimensions or change the focus of the test suite in -any way without modifying the implementation of the generator. If the -generator were more configurable, potentially via a file rather than in -the Go implementation, we could modify the focus of the test suite on the -fly. - -Features that we might want to configure: - -- number of test networks to generate of various topologies, to improve - coverage of different configurations. - -- test application configurations (to modify the latency of ABCI calls, etc.) - -- size of test networks. - -- workload shape and behavior. - -- initial sync and catch-up configurations. - -The workload generator currently provides runtime options for limiting the -generator to specific types of P2P stacks, and for generating multiple groups -of test cases to support parallelism. The goal is to extend this pattern and -avoid hardcoding the matrix of test cases in the generator code. Once the -testnet configuration generation behavior is configurable at runtime, -developers may be able to use the e2e framework to validate changes before -landing changes that break e2e tests a day later. - -In addition to the autogenerated suite, it might make sense to maintain a -small collection of hand-crafted cases that exercise configurations of -concern, to run as part of the nightly (or less frequent) loop. - -Implementation Plan Structure -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -As a development team, we should determine the features should impact the e2e -testing early in the development cycle, and if we intend to modify the e2e -tests to exercise a feature, we should identify this early and begin the -integration process as early as possible. - -To facilitate this, we should adopt a practice whereby we exercise specific -features that are currently under development more rigorously in the e2e -suite, and then as development stabilizes we can reduce the number or weight -of these features in the suite. - -As of 0.35 there are essentially two end to end tests: the suite of 64 -generated test networks, and the hand crafted `ci.toml` test case. The -generated test cases help provide systemtic coverage, while the `ci` run -provides coverage for a large number of features. - -Reduce Cycle Time -~~~~~~~~~~~~~~~~~ - -One of the barriers to leveraging the e2e framework, and one of the challenges -in debugging failures, is the cycle time of running a single test iteration is -quite high: 5 minutes to build the docker image, plus the time to run the test -or tests. - -There are a number of improvements and enhancements that can reduce the cycle -time in practice: - -- reduce the amount of time required to build the docker image used in these - tests. Without the dependency on CGo, the tendermint binaries could be - (cross) compiled outside of the docker container and then injected into - them, which would take better advantage of docker's native caching, - although, without the dependency on CGo there would be no hard requirement - for the e2e tests to use docker. - -- support test parallelism. Because of the way the testnets are orchestrated - a single system can really only run one network at a time. For executions - (local or remote) with more resources, there's no reason to run a few - networks in parallel to reduce the feedback time. - -- prune testnet configurations that are unlikely to provide good signal, to - shorten the time to feedback. - -- apply some kind of tiered approach to test execution, to improve the - legibility of the test result. For example order tests by the dependency of - their features, or run test networks without perturbations before running - that configuration with perturbations, to be able to isolate the impact of - specific features. - -- orchestrate the test harness directly from go test rather than via a special - harness and shell scripts so e2e tests may more naively fit into developers - existing workflows. - -Many of these improvements, particularly, reducing the build time will also -reduce the time to get feedback during automated builds. - -Deeper Insights -~~~~~~~~~~~~~~~ - -When a test network fails, it's incredibly difficult to understand _why_ the -network failed, as the current system provides very little insight into the -system outside of the process logs. When a test network stalls or fails -developers should be able to quickly and easily get a sense of the state of -the network and all nodes. - -Improvements in persuit of this goal, include functionality that would help -node operators in production environments by improving the quality and utility -of the logging messages and other reported metrics, but also provide some -tools to collect and aggregate this data for developers in the context of test -networks. - -- Interleave messages from all nodes in the network to be able to correlate - events during the test run. - -- Collect structured metrics of the system operation (CPU/MEM/IO) during the - test run, as well as from each tendermint/application process. - -- Build (simple) tools to be able to render and summarize the data collected - during the test run to answer basic questions about test outcome. - -Flexible Assertions -~~~~~~~~~~~~~~~~~~~ - -Currently, all assertions run for every test network, which makes the -assertions pretty bland, and the framework primarily useful as a smoke-test -framework, but it might be useful to be able to write and run different -tests for different configurations. This could allow us to test outside of the -happy-path. - -In general our existing assertions occupy a fraction of the total test time, -so the relative cost of adding a few extra test assertions would be of limited -cost, and could help build confidence. - -Additional Kinds of Testing -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The existing e2e suite, exercises networks of nodes that have homogeneous -tendermint version, stable configuration, that are expected to make -progress. There are many other possible test configurations that may be -interesting to engage with. These could include dimensions, such as: - -- Multi-version testing to exercise our compatibility guarantees for networks - that might have different tendermint versions. - -- As a flavor or mult-version testing, include upgrade testing, to build - confidence in migration code and procedures. - -- Additional test applications, particularly practical-type applciations - including some that use gaiad and/or the cosmos-sdk. Test-only applications - that simulate other kinds of applications (e.g. variable application - operation latency.) - -- Tests of "non-viable" configurations that ensure that forbidden combinations - lead to halts. - -References ----------- - -- `ADR 66: End-to-End Testing <../architecture/adr-66-e2e-testing.md>`_ diff --git a/docs/rfc/rfc-005-event-system.rst b/docs/rfc/rfc-005-event-system.rst deleted file mode 100644 index b4a00b43d..000000000 --- a/docs/rfc/rfc-005-event-system.rst +++ /dev/null @@ -1,122 +0,0 @@ -===================== -RFC 005: Event System -===================== - -Changelog ---------- - -- 2021-09-17: Initial Draft (@tychoish) - -Abstract --------- - -The event system within Tendermint, which supports a lot of core -functionality, also represents a major infrastructural liability. As part of -our upcoming review of the RPC interfaces and our ongoing thoughts about -stability and performance, as well as the preparation for Tendermint 1.0, we -should revisit the design and implementation of the event system. This -document discusses both the current state of the system and potential -directions for future improvement. - -Background ----------- - -Current State of Events -~~~~~~~~~~~~~~~~~~~~~~~ - -The event system makes it possible for clients, both internal and external, -to receive notifications of state replication events, such as new blocks, -new transactions, validator set changes, as well as intermediate events during -consensus. Because the event system is very cross cutting, the behavior and -performance of the event publication and subscription system has huge impacts -for all of Tendermint. - -The subscription service is exposed over the RPC interface, but also powers -the indexing (e.g. to an external database,) and is the mechanism by which -`BroadcastTxCommit` is able to wait for transactions to land in a block. - -The current pubsub mechanism relies on a couple of buffered channels, -primarily between all event creators and subscribers, but also for each -subscription. The result of this design is that, in some situations with the -right collection of slow subscription consumers the event system can put -backpressure on the consensus state machine and message gossiping in the -network, thereby causing nodes to lag. - -Improvements -~~~~~~~~~~~~ - -The current system relies on implicit, bounded queues built by the buffered channels, -and though threadsafe, can force all activity within Tendermint to serialize, -which does not need to happen. Additionally, timeouts for subscription -consumers related to the implementation of the RPC layer, may complicate the -use of the system. - -References -~~~~~~~~~~ - -- Legacy Implementation - - `publication of events `_ - - `send operation `_ - - `send loop `_ -- Related RFCs - - `RFC 002: IPC Ecosystem <./rfc-002-ipc-ecosystem.md>`_ - - `RFC 003: Performance Questions <./rfc-003-performance-questions.md>`_ - -Discussion ----------- - -Changes to Published Events -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -As part of this process, the Tendermint team should do a study of the existing -event types and ensure that there are viable production use cases for -subscriptions to all event types. Instinctively it seems plausible that some -of the events may not be useable outside of tendermint, (e.g. ``TimeoutWait`` -or ``NewRoundStep``) and it might make sense to remove them. Certainly, it -would be good to make sure that we don't maintain infrastructure for unused or -un-useful message indefinitely. - -Blocking Subscription -~~~~~~~~~~~~~~~~~~~~~ - -The blocking subscription mechanism makes it possible to have *send* -operations into the subscription channel be un-buffered (the event processing -channel is still buffered.) In the blocking case, events from one subscription -can block processing that event for other non-blocking subscriptions. The main -case, it seems for blocking subscriptions is ensuring that a transaction has -been committed to a block for ``BroadcastTxCommit``. Removing blocking -subscriptions entirely, and potentially finding another way to implement -``BroadcastTxCommit``, could lead to important simplifications and -improvements to throughput without requiring large changes. - -Subscription Identification -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Before `#6386 `_, all -subscriptions were identified by the combination of a client ID and a query, -and with that change, it became possible to identify all subscription given -only an ID, but compatibility with the legacy identification means that there's a -good deal of legacy code as well as client side efficiency that could be -improved. - -Pubsub Changes -~~~~~~~~~~~~~~ - -The pubsub core should be implemented in a way that removes the possibility of -backpressure from the event system to impact the core system *or* for one -subscription to impact the behavior of another area of the -system. Additionally, because the current system is implemented entirely in -terms of a collection of buffered channels, the event system (and large -numbers of subscriptions) can be a source of memory pressure. - -These changes could include: - -- explicit cancellation and timeouts promulgated from callers (e.g. RPC end - points, etc,) this should be done using contexts. - -- subscription system should be able to spill to disk to avoid putting memory - pressure on the core behavior of the node (consensus, gossip). - -- subscriptions implemented as cursors rather than channels, with either - condition variables to simulate the existing "push" API or a client side - iterator API with some kind of long polling-type interface. diff --git a/docs/rfc/rfc-template.md b/docs/rfc/rfc-template.md deleted file mode 100644 index b3f404775..000000000 --- a/docs/rfc/rfc-template.md +++ /dev/null @@ -1,35 +0,0 @@ -# RFC {RFC-NUMBER}: {TITLE} - -## Changelog - -- {date}: {changelog} - -## Abstract - -> A brief high-level synopsis of the topic of discussion for this RFC, ideally -> just a few sentences. This should help the reader quickly decide whether the -> rest of the discussion is relevant to their interest. - -## Background - -> Any context or orientation needed for a reader to understand and participate -> in the substance of the Discussion. If necessary, this section may include -> links to other documentation or sources rather than restating existing -> material, but should provide enough detail that the reader can tell what they -> need to read to be up-to-date. - -### References - -> Links to external materials needed to follow the discussion may be added here. -> -> In addition, if the discussion in a request for comments leads to any design -> decisions, it may be helpful to add links to the ADR documents here after the -> discussion has settled. - -## Discussion - -> This section contains the core of the discussion. -> -> There is no fixed format for this section, but ideally changes to this -> section should be updated before merging to reflect any discussion that took -> place on the PR that made those changes.

gpm~g=^_K()cmH@5YDZJw4=^ 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�elNm}}AG55y6{Yfv-l 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 diff --git a/docs/architecture/img/pbts-message.png b/docs/architecture/img/pbts-message.png deleted file mode 100644 index 400f3569021ca719fe06f20e0db17940091751a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32028 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 diff --git a/docs/architecture/img/state-sync.png b/docs/architecture/img/state-sync.png deleted file mode 100644 index 08b6eac43f4af592ca3c1fa9f9003ac0c04f5b12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101084 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