You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

115 lines
5.3 KiB

docs: update ADR template (#7789) * Update ADR template The reason for this proposed update to the ADR template is twofold: 1. There's currently no easy way to cross-reference between ADRs and issues/PRs on GitHub. This may be easy to manage for those with context while they're working on implementing an ADR, but after time passes and for complex ADRs it gets more difficult for newcomers to the codebase to track both the implementation status of the ADR or its historical context and discussions. 2. We should not allow for "proposed" ADRs. An ADR is a **decision record**, which implies acceptance, and not a proposal. RFCs provide a mechanism to make proposals. Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add example of one ADR superseding another Signed-off-by: Thane Thomson <connect@thanethomson.com> * Move "Proposed" ToC entries to "Accepted". It's possible some of these should actually be "Implemented", but I did not try to go through each one to distinguish. * Revert "Move "Proposed" ToC entries to "Accepted"." This reverts commit d8d2907e985d0098ba99280fff496711175c529e. Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix Markdown formatting Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add "Deprecated" section to ADR TOC Signed-off-by: Thane Thomson <connect@thanethomson.com> * Expand ADR template to explicitly cater for rejected ADRs Signed-off-by: Thane Thomson <connect@thanethomson.com> Co-authored-by: M. J. Fromberger <fromberger@interchain.io>
2 years ago
  1. ---
  2. order: 1
  3. parent:
  4. order: false
  5. ---
  6. # Architecture Decision Records (ADR)
  7. This is a location to record all high-level architecture decisions in the tendermint project.
  8. You can read more about the ADR concept in this [blog post](https://product.reverb.com/documenting-architecture-decisions-the-reverb-way-a3563bb24bd0#.78xhdix6t).
  9. An ADR should provide:
  10. - Context on the relevant goals and the current state
  11. - Proposed changes to achieve the goals
  12. - Summary of pros and cons
  13. - References
  14. - Changelog
  15. Note the distinction between an ADR and a spec. The ADR provides the context, intuition, reasoning, and
  16. justification for a change in architecture, or for the architecture of something
  17. new. The spec is much more compressed and streamlined summary of everything as
  18. it stands today.
  19. If recorded decisions turned out to be lacking, convene a discussion, record the new decisions here, and then modify the code to match.
  20. Note the context/background should be written in the present tense.
  21. ## Table of Contents
  22. ### Implemented
  23. - [ADR-001: Logging](./adr-001-logging.md)
  24. - [ADR-002: Event-Subscription](./adr-002-event-subscription.md)
  25. - [ADR-003: ABCI-APP-RPC](./adr-003-abci-app-rpc.md)
  26. - [ADR-004: Historical-Validators](./adr-004-historical-validators.md)
  27. - [ADR-005: Consensus-Params](./adr-005-consensus-params.md)
  28. - [ADR-008: Priv-Validator](./adr-008-priv-validator.md)
  29. - [ADR-009: ABCI-Design](./adr-009-ABCI-design.md)
  30. - [ADR-010: Crypto-Changes](./adr-010-crypto-changes.md)
  31. - [ADR-011: Monitoring](./adr-011-monitoring.md)
  32. - [ADR-014: Secp-Malleability](./adr-014-secp-malleability.md)
  33. - [ADR-015: Crypto-Encoding](./adr-015-crypto-encoding.md)
  34. - [ADR-016: Protocol-Versions](./adr-016-protocol-versions.md)
  35. - [ADR-017: Chain-Versions](./adr-017-chain-versions.md)
  36. - [ADR-018: ABCI-Validators](./adr-018-ABCI-Validators.md)
  37. - [ADR-019: Multisigs](./adr-019-multisigs.md)
  38. - [ADR-020: Block-Size](./adr-020-block-size.md)
  39. - [ADR-021: ABCI-Events](./adr-021-abci-events.md)
  40. - [ADR-025: Commit](./adr-025-commit.md)
  41. - [ADR-026: General-Merkle-Proof](./adr-026-general-merkle-proof.md)
  42. - [ADR-033: Pubsub](./adr-033-pubsub.md)
  43. - [ADR-034: Priv-Validator-File-Structure](./adr-034-priv-validator-file-structure.md)
  44. - [ADR-043: Blockchain-RiRi-Org](./adr-043-blockchain-riri-org.md)
  45. - [ADR-044: Lite-Client-With-Weak-Subjectivity](./adr-044-lite-client-with-weak-subjectivity.md)
  46. - [ADR-046: Light-Client-Implementation](./adr-046-light-client-implementation.md)
  47. - [ADR-047: Handling-Evidence-From-Light-Client](./adr-047-handling-evidence-from-light-client.md)
  48. - [ADR-051: Double-Signing-Risk-Reduction](./adr-051-double-signing-risk-reduction.md)
  49. - [ADR-052: Tendermint-Mode](./adr-052-tendermint-mode.md)
  50. - [ADR-053: State-Sync-Prototype](./adr-053-state-sync-prototype.md)
  51. - [ADR-054: Crypto-Encoding-2](./adr-054-crypto-encoding-2.md)
  52. - [ADR-055: Protobuf-Design](./adr-055-protobuf-design.md)
  53. - [ADR-056: Light-Client-Amnesia-Attacks](./adr-056-light-client-amnesia-attacks.md)
  54. - [ADR-059: Evidence-Composition-and-Lifecycle](./adr-059-evidence-composition-and-lifecycle.md)
  55. - [ADR-062: P2P-Architecture](./adr-062-p2p-architecture.md)
  56. - [ADR-063: Privval-gRPC](./adr-063-privval-grpc.md)
  57. - [ADR-066: E2E-Testing](./adr-066-e2e-testing.md)
  58. - [ADR-072: Restore Requests for Comments](./adr-072-request-for-comments.md)
  59. - [ADR-077: Block Retention](./adr-077-block-retention.md)
  60. - [ADR-078: Non-zero Genesis](./adr-078-nonzero-genesis.md)
  61. - [ADR-079: ED25519 Verification](./adr-079-ed25519-verification.md)
  62. - [ADR-080: Reverse Sync](./adr-080-reverse-sync.md)
  63. ### Accepted
  64. - [ADR-006: Trust-Metric](./adr-006-trust-metric.md)
  65. - [ADR-024: Sign-Bytes](./adr-024-sign-bytes.md)
  66. - [ADR-035: Documentation](./adr-035-documentation.md)
  67. - [ADR-039: Peer-Behaviour](./adr-039-peer-behaviour.md)
  68. - [ADR-060: Go-API-Stability](./adr-060-go-api-stability.md)
  69. - [ADR-061: P2P-Refactor-Scope](./adr-061-p2p-refactor-scope.md)
  70. - [ADR-065: Custom Event Indexing](./adr-065-custom-event-indexing.md)
  71. - [ADR-068: Reverse-Sync](./adr-068-reverse-sync.md)
  72. - [ADR-067: Mempool Refactor](./adr-067-mempool-refactor.md)
  73. - [ADR-075: RPC Event Subscription Interface](./adr-075-rpc-subscription.md)
  74. - [ADR-076: Combine Spec and Tendermint Repositories](./adr-076-combine-spec-repo.md)
  75. - [ADR-081: Protocol Buffers Management](./adr-081-protobuf-mgmt.md)
  76. ### Deprecated
  77. None
  78. ### Rejected
  79. - [ADR-023: ABCI-Propose-tx](./adr-023-ABCI-propose-tx.md)
  80. - [ADR-029: Check-Tx-Consensus](./adr-029-check-tx-consensus.md)
  81. - [ADR-058: Event-Hashing](./adr-058-event-hashing.md)
  82. ### Proposed
  83. - [ADR-007: Trust-Metric-Usage](./adr-007-trust-metric-usage.md)
  84. - [ADR-012: Peer-Transport](./adr-012-peer-transport.md)
  85. - [ADR-013: Symmetric-Crypto](./adr-013-symmetric-crypto.md)
  86. - [ADR-022: ABCI-Errors](./adr-022-abci-errors.md)
  87. - [ADR-030: Consensus-Refactor](./adr-030-consensus-refactor.md)
  88. - [ADR-037: Deliver-Block](./adr-037-deliver-block.md)
  89. - [ADR-038: Non-Zero-Start-Height](./adr-038-non-zero-start-height.md)
  90. - [ADR-041: Proposer-Selection-via-ABCI](./adr-041-proposer-selection-via-abci.md)
  91. - [ADR-045: ABCI-Evidence](./adr-045-abci-evidence.md)
  92. - [ADR-057: RPC](./adr-057-RPC.md)
  93. - [ADR-069: Node Initialization](./adr-069-flexible-node-initialization.md)
  94. - [ADR-071: Proposer-Based Timestamps](adr-071-proposer-based-timestamps.md)
  95. - [ADR-074: Migrate Timeout Parameters to Consensus Parameters](./adr-074-timeout-params.md)