WEEKLY DEVELOPMENT REPORT
This week the Daedalus team focused on finishing the hardware wallet integration, which will enable support for Ledger Nano S and Ledger Nano X devices. Support for Trezor devices will be added next week.
Daedalus is now integrated with the latest cardano-wallet version, which requires an update of the transaction fee API endpoint integration.
The team is also working on the integration of the Shelley Cardano node with the cardano-wallet while the upcoming ITN Daedalus release is in its final QA and testing phase.
The dev team fixed a few end user-reported UI issues.
The Adrestia team improved the fee estimation by running multiple selection and providing a better answer based on statistical results. The API now returns a bracket min/max, which should make the fee estimation more reliable. In earlier iterations, the fee could vary drastically from one transaction to another, depending on which UTxO was picked for the estimation, and which was picked for the actual transaction.
The team also worked on refactorings and code reorganizations to allow concurrent support of Jörmungandr and cardano-node with Shelley. The cardano-wallet now supports Shelley addresses, though cardano-wallet implements the final draft for addresses, whereas cardano-node still uses an intermediary, non-compatible format. The team will partially alter this implementation to match the current node's format and enable an early integration.
The team worked on the transaction layer for Shelley, and managed to resolve a problem regarding addresses. A regression found on the fee estimation was also detected and fixed. The issue arose after a recent modification. Nightly benchmark caught the regression right away.
#1647 (Unable to fetch network tip from Jörmungandr ReST API in recent versions) was also fixed .
This week, the networking team worked on the connection manager and produced a draft implementation of a server, based on the connection manager. The team also addressed several issues, such as refactoring of OuroborosApplication (PR #2121), and unbounding delays in threadDelay and registerDelay (PR #2135). The flaky test (PE #2123) was also fixed, and work on the tx-submission function means that the termination message MsgKThxBye is now merged (PR #2090).
The team also resolved PR #2109, which means the cardano-client library is now merged. Work continues on testing mux, as someone unforeseen problems need debugging. Work also continues on the CLI, and the reviewing of network documentation. The team anticipates two more review sessions before publishing it.
Finally, the team held discussions with AUEB researchers on their proposal, and our team presented our design this week, while highlighting some areas where assistance might be needed.
The team managed to get the Friends & Family Network working: Pools are now up and running, and pioneers are accruing rewards. The initial implementation of the Shelley faucet is now complete, and a public URL will be published shortly. Also, Testnet and Mainnet nodes on Cardano Byron have been upgraded to the 1.12.0 release.
And finally, the team implemented nix build process using naersk in jormungandr. This will result in simpler upgrades going forward.
This week, the team focused on technical debt and testing infrastructure (the Shelley test infrastructure has been expanded, for example). More intensive testing now will reduce the possibility of issues appearing later in production. Work is also ongoing on testing Shelley with opcert replacement, and Byron-era addresses can now be serialised by the Shelley ledger. This was required for hard-fork testing.
The team worked on refactoring of the ledger code, which meant that all specifications and implementations across eras now live in a single repository.
Work is also ongoing for making the Shelley ledger STS errors be more descriptive by adding comments. The team spent some time helping with the integration efforts, fixed a couple of bugs, namely the minfee calculation no longer re-serializes anything, and Byron addresses can now be serialized (but not validate witness for them).
This week the Plutus team updated the example project to make it easier to use by referencing more recent versions of the libraries. This also fixed an issue where the cabal.project file of the example project was missing a subdirectory of the Plutus repository. In addition, they upgraded the shell.nix file to use GHC 8.8.3, and removed the configuration.nix file which is no longer required. Finally, a Docker-based virtualized environment was also introduced and Haddock was enabled for the plutus-scb (smart contract backend).
The Marlowe team completed a significant refactoring of the Marlowe Playground to simplify the user experience by separating complex tasks. The playground now uses a Halogen component for the simulation pane, which makes it easier to add a new 'Wallet' pane. Also, the team moved some utility functions to simplify the task of adding new modules that use these functions. MonadApp was removed as part of this refactoring work, to enable these changes. This is not expected to have any impact, as MonadApp was not being used anyway.
WEEKLY DEVELOPMENT REPORT
This week the team continued to work on hardware wallet integration, as well as finishing an overhaul of Japanese translations across the entire Daedalus user interface.
In the scope of regular maintenance tasks, the team has been working on improving the structure of the general dialog component and updating ReactJS dependencies.
The team has also finished the implementation of the wallet recovery phrase verification feature for Incentivized Testnet wallets, which will be released in the next version of Daedalus for the Incentivized Testnet.
This week the Adrestia team has been working on initial integration of the Cardano node in Shelley mode. New functionality includes the partial wiring of the underlying engine to the API, an adjustment to the networking layer to deserialize Shelley-specific data-types, and a test bench for running a self-node with faucets when running integration scenarios.
The team has also been working on implementing transaction support, although the binary formats and other specifics of the implementation are still being finalized on the node.
Work was done this week to reduce code duplication by re-using some addresses within cardano-wallet. However, it is not possible to re-use all of the addresses due to some refinements required to create a more efficient platform.
More progress was made on the API this week, particularly the fee estimation rework. The API now returns a lower and upper bound for fees, backed by a statistical approach to get more reliable results, especially on bigger UTXOs.
The team also significantly reduced both the time and space required to store sequential addresses and reduced the space needed to store random addresses without adding any significant time to the operation. Normal wallets will not notice much difference, but these reductions will have a significant impact on larger wallets.
Finally, the latest Docker tag now references the latest code on the master branch, rather than the latest ‘stable’ release. .
This week the networking team has been fixing an issue that caused high CPU usage on macOS systems, which turned out to be the result of a bug in the Glasgow Haskell Compiler (GHC).
The team also made progress towards a bidirectional multiplexer this week, as well as calculating the bounds of header sizes ahead of the upcoming Shelley release. This allowed the team to verify that the existing ingress queue limits will work with the current set of cryptographic primitives in use for Shelley.
Elsewhere, the team has been working on a server-side termination message for the transaction submission protocol, which allows requests to be made to the consensus layer to cooperatively shut down all mini-protocols.
Finally, the team worked on refactoring the instantiation of the Ouroboros network protocol during consensus. Consensus protocol applications can now make decisions on the negotiated version during the handshake protocol.
The DevOps team supported the deployment of a new explorer version this week, as well as helping the Friends and Family testnet development team with IOHK stake pool registration.
The team worked on the systemd service socket activation integration for Cardano node with NixOS this week. Work has also been done on the initial faucet integration for the Shelley wallet, and the team has been building Rust code with Naersk for Jörmungandr and other Rust libraries. They’ve also been integrating Rust libraries with haskell.nix.
This week the team made improvements based on feedback from the Friends and Family phase of the Shelley Haskell testnet, including updates designed to improve the user experience and interface.
The team also worked on debugging transaction generation, reconstructing the timeline of block creation and diffusion using benchmarking data, and improving the automation of the benchmarking pipeline using Nix.
This week the Plutus team made it easier to update the benchmarks by adding a PLC source file, together with the serialized version. In addition, they upgraded the Nix packages on the deployment machine and made improvements to tidy up line endings within the code. Finally, they made updates to the state transfer during static analysis. The Marlowe team moved static analysis into the Marlowe project and added warnings for empty choice lists in the Marlowe Playground. They also worked on updates to the Isabelle build task for Nix/Hydra.
WEEKLY DEVELOPMENT REPORT
This week the team successfully released Daedalus 1.1.0, as well as working on implementing the new wallet recovery phrase verification feature for Daedalus on the Incentivized Testnet. The team has also been working on building a prototype of hardware wallet features for mainnet Daedalus. Work was also done this week to add full test coverage for the wallet import feature, along with some fixes for smaller UI/UX issues.
This week the Adrestia team worked on support for importing generated addresses, which will allow exchanges that already support ada to more easily migrate to the new codebase. The team also worked on writing an example YAML configuration file to support installation via Docker, allowing technical users to get cardano-wallet functionality running quickly with all supporting services. Users can now get started with the cardano-wallet with just two commands!
Work was also done on mockups of the new metadata aggregation server, which will replace the Cardano Foundation registry for stake pool metadata. The team also reworked the wallet command line as well, allowing key derivation to support pipelining.
Various error messages and error outputs were also improved this week. In particular, Bech32 error detection was implemented, making it possible to identify the exact location of invalid characters in a Bech32 string. The team also finishing the final implementation of the local state query Ouroboros mini-protocol, including additional unit tests.
The team also worked on improvements to the network layer this week, reducing unnecessary logs and block deserialization. Work from last week came to fruition, and the team found that adding support for request pipelining has resulted in a drastic improvement in wallet restoration and syncing time. Optimization work remains to be done to improve outcomes for wallets with a large number of UTXOs.
This week the networking team has been working on Shelley CLI tools and the key-evolving signatures (KES) implementation. They simplified the handshake negotiation interface, reviewed the new multiplexing implementation, and had some design discussions about the connection manager before implementing the results.
The team has also worked on updating the multiplexer tests. They are now using a compatibility layer with the old interface, which simplifies things a little and is a good sign that the refactoring has gone well.
This week the DevOps team supported the launch of the Friends and Family testnet, as well as working with developers and QA to test the command-line parameters and operational procedures required by pool operators.
Elsewhere, they’ve been continuing to work on the Naersk Nix integration for integration into the CI pipeline and working on improving the Grafana dashboards. Work has also been underway to finalize the new explorer release.
This week the team spent some time updating their tools and benchmarking setup to reflect recent changes to the APIs. They’ll soon be integrating those tools into the cardano-haskell repository to future-proof against incompatibility.
The team has also been making changes to the metrics interface, as well as updating the local state query protocol to support some of the additional operations needed for the new Shelley wallet and command-line interface. The work on annotated serialization was also finished this week, which has resulted in some major performance boosts.
Finally, the team undertook a significant refactor of how keys work in the Shelley code, which uncovered a bug – now fixed – that should make the Shelley ledger much easier to interact with.
This week the Plutus team upgraded to the latest PureScript package set and tested that communication is running smoothly. The team also worked on how to handle contract events in the smart contract backend (scb). Specifically, how to handle all the requests that are issued by contracts, as well as how to manage the state of contract instances. They also made updates to the builtins section of the technical report and added a visual diagram.
The Marlowe team made various layout improvements to the Marlowe Playground this week. These included a set of fixes to stabilize icons, the re-positioning of buttons to increase visibility, improvements to the display of the Transaction Composer, toggling of the gist buttons when panels are contracted, prioritizing the display of the "to blockly" button, as well as general sizing changes to panels, to improve their readability. Last but not least, the team added a hover box with simple help text to explain Marlowe constructors.
WEEKLY DEVELOPMENT REPORT
This week the Daedalus team worked on preparing the first Daedalus Flight candidate for the 1.1.0 release, which adds a wallet recovery phrase verification feature and support for Ubuntu 20.04 LTS. It also prevents Daedalus from being installed on unsupported versions of Windows, improves networking reliability and overall performance, and fixes numerous smaller issues, as well as making multiple user experience improvements.
There is no update from the application platform team this week. They’ve been helping out the main Daedalus team with the upcoming release.
This week the team finished fixing the last of the issues that arose as part of final QA. The new Cardano explorer is now ready to be released.
This week the team worked on a number of issues. They removed the force-resync endpoint, which had originally been introduced as a way to recover from an invalid state, but ultimately caused more problems than it solved. They also fixed some caching issues with the CI benchmarks, added command-line support for bech32 input and output encoding, and started the initial implementation of the new metadata aggregation server. The team continued to work on integrating with the Ouroboros mini-protocols, as well as changing some compilation flags in the backend to make compilation during development easier.
Work was also done on the Cardano GraphQL implementation, including integrating Prometheus monitoring metrics into Grafana, as well as improving the initial getting started experience.
Finally, the team worked on polishing documentation ahead of the 1.0.0 release of the Cardano coin selection library, and fixed a few issues that were caused by changes to the compilation flags.
This week the networking team has been working on the Shelley node. A reference implementation of key-evolving signatures (KES) was finished, and the team also completed a systemd integration, as well as continuing to work on the connection manager.
The DevOps team has been working hard this week. They’ve been scale testing Praos block production and improving the CI notification statuses from Hydra, as well as beginning work on Rust cross-compilation support for Naersk, a Nix/Rust build tool.
The team has also been working on fixes to the Cardano GraphQL deployment and general integration in preparation for the new Byron explorer. Some improvements were also made to Docker image pushing this week so that new images will be automatically pushed when new releases are published.
Finally, the team has also been providing continuous support to the Daedalus team as they prepare for a new Daedalus Flight candidate. Work has also been done to plan for a Shelley, Praos-supported faucet, as well as documenting processes surrounding the Shelley self-node.
This week the team has been preparing for the upcoming Shelley Haskell testnet, including undertaking a code audit and contributing to user-facing documentation.
Work has also continued on implementing annotated decoders, which now cover scripts and metadata as well, although the team plans on running some checks and tests to ensure that all aspects have been covered. The team continued to struggle with heap exhaustion problems in the property tests this week, although progress was made by looking at some trace generation from a different perspective.
Finally, the team is almost done with work on the new binary address format, and hopes to have a pull request ready soon.
This week the Plutus team performed some refactoring work in the smart contract backend (SCB). This work included fixing a problem with the chain index startup sequence, changing the all-servers startup order, making some minor code changes, improving the display name of local transactions, adding some missing CLI help strings, as well as removing a redundant definition. They also updated the ContractCLI wrapper to allow a contract to export its schema and added a writeup on builtins. Finally, they reorganized some of the generated Nix files to improve the overall performance of the Nix commands.
The Marlowe team worked on updates to the If expressions within the language syntax, and made some more updates to Blockly.
WEEKLY DEVELOPMENT REPORT
This week the team worked on reimplementing the wallet recovery phrase verification feature to improve the overall user experience. They also improved the delegation fee calculation when delegating or undelegating stake, enhanced the handling of form submission, and added to the automated testing suite. ReactJS dependencies were also updated.
There is no update from the application platform team this week, since they’ve been helping the main Daedalus team with development work.
There is no update from the explorer team this week, since they’ve been helping the main Daedalus team with development work.
This week the team worked on compiling the Adrestia user guide, which is designed to be an informational hub that connects all existing documentation so that users can find what they need easily and effectively. It also includes common definitions and FAQs.
The team also fixed a few small bugs this week, as well as removing password validation for legacy wallets due to the need to be backward compatible. Work was done on support for public key derivation via the wallet command line, and soon it will be possible to pipe commands to make using the CLI easier as well.
Progress was made on the benchmarking tests this week and the team is now getting reliable results across multiple benchmarking runs, allowing them to be plotted over time to identify any potential regressions. The team also began to experiment with request pipelining of Ouroboros mini-protocols, and initial results are positive, indicating a potentially significant reduction in wallet restoration time.
Finally, the team has improved a swathe of documentation related to Cardano GraphQL, as well as improving their CI workflow and reworking the coin selection API package to make it more user-friendly.
This week the networking team has been working on a bug in the handshake codec that manages version negotiation. It was throwing a decoder error when it received an unrecognized version number, but the issue is now fixed, and tests have been added to verify version negotiation in similar scenarios in the future.
The team also fixed some network issues with the DNS subscription manager, as well as adding timeouts for the sending of multiplexer segments. Finally, work began again on integrating the connection manager for the Shelley release and on improving the CLI tooling and the Shelley node itself.
This week the DevOps team has been testing the Shelley CLI tools, ensuring that they can generate genesis blocks and run nodes in Praos. The team has successfully had nodes running and creating blocks in three regions of the world for 48 hours now, although no transactions have been submitted as part of the tests yet.
Elsewhere, the team worked on improvements to the Cardano GraphQL NixOS service so that it supports all configurable environment variables and is able to export performance metrics to Prometheus. They also worked on the Nix packaging and deployment logic for the new explorer frontend.
This week the team ran their first successful tests of a completely decentralized Shelley network, with blocks issued by stake pool operators rather than genesis delegates. The success of this test is a significant milestone, validating the ledger and consensus implementations of the team.
Elsewhere, the team added new annotated decoders in the Shelley ledger for blocks, block headers, and transactions. They also added stake pool relays and made the active slot coefficient a global constant rather than a protocol parameter.
The team also added the cryptographic algorithms used in the implementation to the specification this week, as well as fixing the last of the issues with heap exhaustion in the property tests. Finally, one of the transition rules was reworked slightly due to problems during integration, and the associated pull request is currently going through the CI tests.
This week the Plutus team added a type parameter for contract identifiers to the smart contract backend (SCB). They also worked on the web frontend to plutus-scb and added some multi-agent tests. Finally, they continued to work on an approach for spending policies for currencies.
The Marlowe team finished updating the online tutorial that is part of the Marlowe Playground. In addition, they created a series of educational videos on Marlowe and are working with the education team on ways to use these more widely. They also spent time working on Marlowe contract JSON serialization for Haskell and PureScript interaction.