Engineering Decision Records
39 of 39 EDRs
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."
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."
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."
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."
034-constitutional-committee-management
"A freshly elected member has a non-null epoch mandate; that epoch may or may not be in the future."
033-tracing-stack-span-encoding
"The wrapping span's fields are inlined with the event fields."
032-embedding-amaru
"The supported dependency for running an Amaru node in-process is amaru-node."
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."
030-embedded-terminal-observability-ui
"or metrics changes should update both the producer and the TUI consumer."
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."
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."
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."
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."
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)."
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."
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."
023-code-annotations
"to draw the attention of the reader to a particular design decision or consequence"
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)"
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."
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."
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."
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."
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"
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"
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."
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."
013-error-handling-strategies
"Use #[from] Box<dyn std::error::Error + Send + Sync> if you need to embed arbitrary foreign errors of different kinds;"
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."
011-deterministic-simulation-testing
"The history of the test execution that the simulator produces includes the"
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