Engineering Decision Records
001-record-engineering-decisions
"By the time one ponders the consequences of a particular decision, the people who made that decision may not be around the table anymore."
002-linux-development-model
"We propose to adopt a development process similar to Linux to encourage decentralized contributions and maintain the project's ethos of decentralization."
003-git-etiquette
"In a large project with multiple contributors, it is necessary to establish some git etiquette to keep the project maintainable."
004-amaru-design-framework
"The ambition of the project is to build a new fully interoperable block-producing node for improving the overall performance the Cardano blockchain."
005-amaru-maintainers-committee
"In order to manage the decision making on the project and have a compelling product oversight, Matthias and Santiago want to extend their maintainers committee's responsibilities to other members."
006-design-phase-documentation
"The Amaru team submitted a proposal with a list of scopes related to the project and describing a specific way of administrating the budget, this is now reflected into the ways of working of the project."
007-observability
"We would like the codebase to organize the metrics it tracks in a simple, consistent and modular way, such that each module or crate can own a subset of the metrics, while at the same time being consistent and discoverable through reading the code."
008-logbook
"Additionally, new developers to the project, or developers that have spent some time away from the project, will have a repository of knowledge to get quickly reacquainted with the progress of the project."
009-avoid-primitive-obsession
"A newtype is recommended where the primitive type has a particular and well-established meaning that exists not only in the local code scope, because this implies that uses of the primitive type will overlap with other semantics that shall remain distinct."
010-ledger-validation-context
"To overcome this, we introduce an extra step which we call preparation, and whose role is to traverse the block once to identify which entities will be needed by the validation rules, thus ensuring that the data needed down the line is identified and fetched from the storage in a single batch."
011-deterministic-simulation-testing
"The state-of-the-art to deal with the testing problem is to generate test"
012-interaction-between-consensus-and-ledger
"On the other hand, the main complexity of the ledger lies in its state management so that it can efficiently support the various required calculations for performing the business function of the Cardano blockchain."
013-error-handling-strategies
"Use #[from] Box<dyn std::error::Error + Send + Sync> if you need to embed arbitrary foreign errors of different kinds;"
014-time-in-amaru
"The current state as well as the history of Cardano do not require us to implement the ability to change the slot length."
015-recording-cardano-metrics
"As a result, we had to compromise and fallback to the MetricsEvent enum solution, which still limits the amount of changes needed to add/remove metrics."
016-treasury-management-acceptance-process
"To complete the transparency aspect of the process, the scope contributor will: Upload a redacted invoice to IPFS, Upload a redacted agreement to IPFS and link the invoice and the agreement in the transaction's metadata"
017-version-and-migrate-db
"Migration tools are rife in the RDBMS world (see this page for a Postgres-centric list) and migration process is typically handled by storing versions and migration scripts results and metadata in the database itself to make it self-checkable, with actual migration code integrated in the executable"
Showing 17 of 17 EDRs