Status Updates
February, 2020
February 28, 2020
WEEKLY DEVELOPMENT REPORT
Daedalus
Wallet
This week, the team successfully released Daedalus 2.2.0-ITN1 and, in the scope of regular maintenance tasks, continued working on adding more automated tests for Shelley features. These are now complete, and the team has reached its goal of 100% test coverage. The team also started work on updating third-party packages that are used in Daedalus.
App Platform
The team continued working on the implementation of the new Cardano Launcher.
Cardano Explorer
Elsewhere, the QA team is nearly done fixing the issues identified during the QA testing phase, in preparation for the upcoming Cardano Explorer Byron release.
Wallet backend
The wallet backend team is starting to extract, document, and expose, in a more developer-friendly way, various components of its internal architecture. This work is part of the Adrestia project.
Meanwhile, the team are upgrading numerous dependencies in order to leverage more from the Haskell ecosystem, but also – and mainly – in order to finalize the integration with the latest release of cardano-node.
Networking
The networking team has merged snockets, which is an important milestone for Windows users as it provides reliable networking for both local clients and the node. The team identified performance regression between versions 1.6 and 1.5, and are continuing the work on the connection manager and mux refactoring towards the Shelley release.
DevOps
After a lot of work, the DevOps team launched OBFT on mainnet this week, and has also finished migrating all the repositories, including the cardano-wallet, to the new haskell.nix/iohk-nix overlay structure. Additionally, the team is continuing to improve the caching of haskell.nix, so fewer things need to be built to download the binaries.
Cardano Decentralization
The team has spent the last week mostly on refactoring and reorganising the consensus codebase (#1674, #1657, #1671). These changes make it easier to use consensus as a library for other ledgers, not only those used by Cardano (and cardano-node). The refactoring also separated some concerns and lowered the coupling. Moreover, the reorganisation facilitates the upcoming integration with the Shelley ledger.
Goguen
This week, the team made some updates to the fix1 and fixBy recursive functions to increase optimization. They also updated the merkelization documentation and made further updates to the multicurrency paper.
Meanwhile, the Marlowe team continued work on the display of the new Marlowe Playground warnings and explored the possibility of having an interactive tutorial in the Marlowe Playground
February 21, 2020
WEEKLY DEVELOPMENT REPORT
Daedalus
Wallet
This week the team worked on preparing the next release of Daedalus for the Incentivized Testnet, Daedalus 2.1.0-ITN1, which includes better representation of pending delegation preferences, a new tooltip to identify experimental features, and improved display of delegation status while restoring a wallet. The team also implemented a few small copy changes and general UI improvements.
App Platform
This week the team worked on the implementation of the new Cardano launcher, an orchestration library for full-node Node.js applications, using Daedalus as a test-bed. The initial focus is on logging output domains, but the eventual goal of the library is to lift application-agonistic behavior from Daedalus, making it accessible for other full-node applications, including the Application Platform itself.
Cardano Explorer
The QA team completed a first pass over the application this week, and the development team has been working in tandem to resolve the issues that were discovered.
Wallet backend
This week the team has been continuing to improve and integrate bug fixes to ensure the most stable release possible. Work has also continued on the new Haskell node integration, closing the gap on the missing API endpoints from the integrated wallet. It is now a matter of performing in-depth integration tests and analysis to ensure that the integration is indeed a full success.
Networking
Last week the networking team continued their refactoring of the mux layer, and the handshake protocol was improved to support the version negotiation parameters required for peer-to-peer release. This change introduces a handshake negotiation that announces a peer as initiator (or client) only.
A substantial refactoring of the Windows asynchronous network library was also completed this week, which removed almost all C wrappers, ensuring that everything is now in Haskell. Work also continued on the connection manager, and the team is more confident now that they’ve had the chance to test the new changes in a local branch of cardano-node.
DevOps
This week the DevOps team has been preparing for the OBFT hard fork. The team has also been finalizing the haskell.nix transition to the latest version across all repositories and started testing the new 1.6 Cardano release. Work is also progressing on an Amazon Machine Imagine (AMI) builder that can be used to simulate 10K Daedalus connections, to help identify any performance syncing issues at scale before the new Daedalus and wallet backend are ready.
Cardano Decentralization
After a lot of work, the team got the generation of update proposals working this week. Now that the generators are producing chains that span multiple epochs, the team is encountering a new layer of predicate failures that need to be resolved, since epoch boundaries place much higher demands on the generators to produce valid chain data. These failures are most likely the result of the generators needing a few tweaks. There is an outside chance that testing will reveal bugs in the specification, although the team considers this unlikely.
The team has finished up the pull request that introduced transaction metadata to the Shelley ledger, which included several discussions about how it will integrate with Plutus in the future.
Elsewhere, a new check to ensure that the block number in the block body is always increased by precisely one was added to the formal specification and executable model. Prior to that, the calculations were using the previous header hash and increasing slots to achieve the same, but it became apparent that this needs to be explicit for the consensus layer.
The team has also made a lot of progress towards being able to guarantee that the Shelley CDDL (wire format) is correct (i.e. that what the Ruby tool generates from our CDDL file can be deserialized by the Haskell code). There is still a good bit of work to do, however. So far, most of the inconsistencies stem from using a mock cryptocurrency for testing purposes. The team has also been removing the canonicity constraints that were imposed by cardano-base.
Goguen
This week the team added a slot number field to the chain state so that it’s easier to query the current slot. They also updated the oracle implementation to verify the cryptographic signatures of messages. Additionally, they continued work on spending policies for currencies and started a draft of a comprehensive glossary of Plutus concepts.
The Marlowe team started work on the display of new warnings in the Marlowe Playground to warn users about negative payments and negative deposits, as well as the use of bindings that have not been initialized. In addition, they investigated the possibility of having an interactive tutorial in the Marlowe Playground.
February 14, 2020
WEEKLY DEVELOPMENT REPORT
Daedalus
Wallet
This week the team has been working on integrating pending delegation preferences into the API, as well as adding an ‘experimental feature’ notification and UI tooltip to alert users to potentially unreliable features that have yet to be stabilized. The team has also improved the coverage of the end-to-end automated tests for Daedalus by introducing acceptance tests for wallet delegation features.
App Platform
There is no update from the app platform team this week since they’ve been helping out with general Daedalus development.
Cardano Explorer
The team has been working on QA and testing tasks this week to prepare for the upcoming Cardano Explorer Byron release.
Wallet backend
The team has been doing some housekeeping and maintenance this week, including finding a proper, reliable fix for a longstanding bug. Improvements have also been made to the reporting of wallet delegation statuses. Changes to delegation preferences only take effect after a delay of one epoch, and this is now properly reflected in the wallet backend, allowing the Daedalus frontend team to create a better end-user experience.
Networking
The networking team continued to work on the connection manager this week, finishing the refactoring of the NTP client and merging the refactored mux layer, which allows on-demand starting of mini-protocols. An external reviewer found an issue with the Windows API, which has now been fixed, and the team is currently working on adding functionality to cancel asynchronous I/O requests on Windows.
DevOps
This week the DevOps team completed the deployment and testing of the new Cardano node (1.5.0) and explorer (1.3.0) releases. They’ve also been working on upgrading all the repositories involved in the new stack to the latest haskell.nix version.
To better stress test the new node, the team started working on a custom Amazon Machine Imagine (AMI) for Amazon Web Services (AWS) this week. It will allow the emulation of around 10,000 Daedalus clients connecting to the new node, which will enable the team to identify any potential issues that might arise with high loads. Some automation that will push Docker images to Docker Hub for the new node has also been created, with plans to do the same for the explorer components next week.
Finally, the team has scheduled the OBFT transition on mainnet for February 20, 2020 at 21:44:51 UTC. With the latest 1.5.0 release, all remaining memory leaks have been resolved, and the node staging clusters that have been migrated have remained stable since their initial deployment. The OBFT transition on February 20 will mark the first significant step to a Shelley mainnet launch.
Cardano Decentralization
The team continued work on the generators this week, which are getting tricky now that they’ve reached a significant level of complexity as the team pushes for more and more realistic generation. Work is being done to better represent key-evolving signatures and how they evolve over time, as well as ensure that transactions that generate multiple certificates do so in a valid way.
Elsewhere, work has been progressing on adding transaction metadata to the Shelley ledger, with a pull request now waiting for review. Some of the details of how best to format the metadata still need to be ironed out, and the team plans to discuss this next week.
Goguen
This week the Plutus team made improvements to the performance of the PureScript parser and pretty printer, as well as unifying the Haskell default-extensions to ensure consistency. The team also reorganized the presentation of validity rules within the EUTXO paper to improve navigation and readability.
The Marlowe team investigated ways to improve the performance of large Marlowe contracts within the Marlowe Playground. They also worked on how to effectively calculate constant negative payments in the Marlowe editor, so that warnings can be provided to the user in real-time. Last but not least, the team also studied how to include a Marlowe version in a contract, as well as a way to identify a Marlowe validator from its address, so that a node can implement the interpreter natively and increase the speed of contract execution.
February 7, 2020
WEEKLY DEVELOPMENT REPORT
Daedalus
Wallet
This week the team has been mostly focused on maintenance and test-coverage tasks. As well as polishing some elements of the UI, the team fixed an issue with the ‘Low disk space’ warning screen, which was not showing up in some cases. They also fixed the stake pool description info display, which was clipped after a certain length. The Daedalus end-to-end automated tests also now include full coverage of stake pool data loading and handling of both balance and rewards wallets.
App Platform
There is no update from the app platform team this week since they’ve been helping out with other Daedalus development work.
Cardano Explorer
A custom 404 page was added to the explorer this week, footer styling was refined to match a new design based on content changes, and the final set of background visuals were implemented. The list of supported networks and associated themes were also updated this week, and a major framework upgrade successfully performed. Development and testing service dependencies are now also sourced directly from an upstream repository, an improvement compared to using wrapped Docker images published to an external registry.
Wallet backend
A new version of the wallet backend was finished at the beginning of this week. Changes included listing stake pools by desirability, as well as introducing a saturation indicator for each stake pool. The release also introduces a new endpoint, which allows users to force a resync of the wallet without needing to delete and restore, which might be useful for resolving potential wallet issues.
On the development side, the team finished implementing the network parameters endpoint, which allows users to fetch blockchain parameters for a particular epoch. The team has also started on the implementation of CLI utilities for key derivation, as well as progressing work on more detailed delegation reporting to show current and future delegation targets for a particular wallet.
Networking
The networking team has been working on Windows support this week, and the ouroboros-network library now supports local clients on Windows, which is an important milestone for supporting Daedalus wallet users on Windows. The team also implemented vectored I/O on Windows and continued work on development of the peer-to-peer components: the connection manager and on-demand mux.
DevOps
The DevOps team has been working closely with other development teams this week to improve performance on the Incentivized Testnet.
Cardano Decentralization
The team discovered some bugs in the test KES implementation this week and spent time tracking down and fixing them, as well as moving some global constants to a more appropriate location. Some issues were also found in the overlay schedule generation, which the team expects to have fixed soon.
As for the generators, reward withdrawals in the property testing are now being successfully generated, and the remaining properties are now connected to the new chain generator. Progress was also made on adding update proposal generation to transactions, which the team will continue to work on next week.
Goguen
This week the Plutus team investigated how to add an event-based server model, and they also removed value restriction from the metatheory, as it was not enforced. The team also made improvements to error messages for incorrect server calls. Additionally, the Plutus and Marlowe Playground servers now show usage and help details if a wrong command is entered.
The Marlowe team worked on identifying a language subset for Marlowe embedding and also spent time looking at how to optimize refunds. They also investigated how to move Marlowe execution from the browser to the backend, as the current implementation does not perform well enough for large contracts.