Engineering Decision Records

39 of 39 EDRs

architecture
accepted

037-kes-key-handling

"The SPO uses amaru keys hot create to generate a new KES key and print the corresponding certificate request to stdout; it optionally asks the SPO for a password to encrypt the key."

architecture
proposed

036-session-types-typestate-projection

"The BlockFetch responder still needs to return to the initial state as per the network spec, so that it can receive a new message once the other side starts using the bearer again, which it does by manually setting the state to initial_state::<Idle>() — mini-protocol lifecycle is not modelled using typestate."

architecture
proposed

035-session-types-typestate-projection

"The BlockFetch responder still needs to return to the initial state as per the network spec, so that it can receive a new message once the other side starts using the bearer again, which it does by manually setting the state to initial_state::<Idle>() — mini-protocol lifecycle is not modelled using typestate."

architecture
proposed

035-block-forging

"For example: the led slots still ahead in this epoch and the next, the time to the next one, how many of the k blocks since the freeze have been adopted (whether the schedule is settled), the KES period in use and how many remain on the certificate, and the outcome of each led slot, whether the block was adopted, lost to a competitor, or missed and why."

architecture
accepted

034-constitutional-committee-management

"A freshly elected member has a non-null epoch mandate; that epoch may or may not be in the future."

architecture
accepted

033-tracing-stack-span-encoding

"The wrapping span's fields are inlined with the event fields."

architecture
accepted

032-embedding-amaru

"The supported dependency for running an Amaru node in-process is amaru-node."

architecture
accepted

031-peer-source-mix

"A worse score is used once every better candidate in the bucket has a slot, so a connect failure is not preferred while a healthier candidate remains, but it is dialled when the bucket would otherwise stay short."

architecture
accepted

030-embedded-terminal-observability-ui

"or metrics changes should update both the producer and the TUI consumer."

architecture
accepted

030-consensus-performance-resource

"Activity is the latest instant a peer was observed: a handshake, a close, a dial failure, a dial note, a local-use update, a remote initiator bit, a header or block claim, a fetch result, a keep-alive sample, a share request this node answered, a share ingest (the donor), an intersection-not-found mark, or an adversarial mark."

architecture
accepted

029-runtime-stake-summaries-and-on-demand-rewards-distributions

"The ledger pays an additional reconstruction cost when rewards start, but that cost is isolated to the rewards path and avoids carrying large maps for the rest of the epoch."

process
accepted

028-contingency-allocation

"167$ for the minimum ₳ value that can secure us the scopes mentioned, every scope owner has to trade (at least) to that level to secure the amounts to be paid to our partners."

process
accepted

027-ada-only-contracts-with-amaru

"While this is "part of the game" when being paid in ada, we are also conscious of the risks that come with using ada as a mean of payment."

architecture
accepted

026-tracing-span-design

"forward on target amaru::network, opened upon successful decoding of the header in the trackpeers stage and closed in the selectchain stage, either upon seeing that the header is not on the best chain candidate or upon receiving the block validation result (which is slightly after adopting the block but typically before communicating the new tip to downstream peers)."

process
accepted

025-release-and-distribution-workflow

"If a same-version draft release already exists, the workflow shall delete the stale draft release and its tag before creating a fresh draft."

architecture
accepted

024-peer-handling-infrastructure

"The default behaviour is to bind to the server port for outbound connections, which is the same as the Haskell implementation and the only currently supported way of communicating our listen socket address to peers in an expedient manner."

process
accepted

023-code-annotations

"to draw the attention of the reader to a particular design decision or consequence"

process
accepted

022-treasury-management-acceptance-process

"The acceptance process is deemed finished when the scope owner (accountable of the work done) updates the [amaru-treasury Journal][] with an entry stating that he accepts the work done and includes all the details related to the payment in the metadata of the transaction (IPFS of the contract, IPFS of the invoice, description of the intent)"

architecture
accepted

021-switching-to-own-mini-protocols

"Conformance of the network part is statically ensured by the underlying state machine structure, while proper interaction of the decision-making part with the network is regulated by runtime checks."

architecture
accepted

020-bump-arenas-and-workarounds

"It is similar to Bump in that you can push/alloc with only a shared reference, and in that it never moves items once they've been allocated so it can have long lived shared references to items."

architecture
accepted

019-guidelines-for-writing-cli

"This EDRs defines guidelines to follow when building CLI in the context of the Amaru project to keep the CLIs tidy and maximise the user experience."

process
accepted

018-amaru-maintainers-committee

"Each committee member shall own a budget pertaining to its scope, and administrate that budget over the course of the year alongside other members of the committee."

architecture
accepted

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"

process
obsolete

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"

architecture
accepted

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."

architecture
accepted

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."

architecture
proposed

013-error-handling-strategies

"Use #[from] Box<dyn std::error::Error + Send + Sync> if you need to embed arbitrary foreign errors of different kinds;"

architecture
obsolete

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."

architecture
accepted

011-deterministic-simulation-testing

"The history of the test execution that the simulator produces includes the"

architecture
accepted

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."

Showing 30 of 39 EDRs