Status Updates
April, 2020
April 24, 2020
WEEKLY DEVELOPMENT REPORT
Daedalus
Wallet
This week the Daedalus team has been working hard to prepare and release Daedalus 1.0.0, the first release of Daedalus to incorporate Byron reboot improvements, including a completely re-engineered Cardano node and Cardano wallet, which are the core backend components of Daedalus. This release concludes the current series of Daedalus Flight release candidates, with Daedalus Flight 1.0.0-FC5 now being superseded by Daedalus 1.0.0, which all users are encouraged to download.
Daedalus 1.0.0 has a huge number of new features, including background blockchain synchronization, a wallet import feature, mandatory spending passwords, support for Yoroi wallets, a transaction filtering function, a new update mechanism, and redesigned, faster wallet restoration with support for parallel wallet restoration. In conjunction with the new backend components, Daedalus 1.0.0 should mark a significant improvement in user experience for all users of Daedalus on all platforms.
App Platform
There is no update from the application platform team this week, since they’ve been helping with the huge effort involved in the release of Daedalus 1.0.0.
Cardano Explorer
There is no update from the explorer team this week, since they’ve been helping with the huge effort involved in the release of Daedalus 1.0.0.
Wallet backend
This week the wallet backend team has been working on fixing a couple of bugs, as well as removing redundant jobs from the Hydra continuous integration suite. There are now 123 jobs that manage cross-compilation and test the wallet backend on all platforms — and they’re all passing!
The team has also been working on adding code coverage reporting to the continuous integration pipeline, as well as adding tests and increasing test coverage across multiple code repositories. They also created an end-to-end example of using the wallet backend CLIs to build, sign, and submit a transaction to the Cardano network.
Finally, work has also continued to develop the new Haskell API library, adding support for address construction from public keys, hard and soft address derivations, mnemonic to master key generation, and user-facing encoding of addresses.
Networking
The team implemented some timeouts in the networking layer this week, including one for the handshake protocol and one for sending multiplexer messages. They also worked on a new version of the local protocol that will allow wallets to query the ledger state.
The team has also been working on various Shelley features within the Cardano node, its command-line interface, and configuration.
DevOps
This week the DevOps team has been helping the Daedalus team to prepare and release Daedalus 1.0.0. They’ve also been finalizing the faucet for the upcoming Shelley Haskell testnet, which uses the new wallet backend from the Byron reboot, as well as working hard to prepare Haskell node deployments. The team has also been working on packaging and deploying the new Byron explorer frontend.
Cardano Decentralization
This week the team has been working to smooth out some issues with a few of the more extensive property tests. They were previously working, with multiple certificates per transaction and large traces, but a rebase has caused previous heap exhaustion problems to recur. The team is investigating and working on a fix.
The team also had a final review of the CDDL and serialization specifications, which they found very useful. Most of the suggested changes were small and have already been implemented in a pull request. Work has begun on the larger changes, which included adding stake pool relays and overhauling the address serialization format, but is still in progress and waiting on other pull requests.
Finally, more progress was made on adding annotated decoders to the Shelley ledger, with blocks, block headers, and full transactions now accounted for.
Goguen
This week the Plutus team added provenance for inputs and outputs when transactions are balanced, so that information is collected about why the inputs and outputs are present on the transaction. They also added documentation about using materialized package sets and completed the Plutus glossary. Finally, they added Node.js to the list of shell.nix tools.
The Marlowe team continued with its design refinements of the Marlowe Playground. This work included highlighting the active demo tab and improvements to the warning and error text in the Marlowe simulator. They also updated the Marlowe tutorial to match the new version of the Marlowe Playground and added some new if expressions to the Marlowe semantics to help reduce forking.
April 17, 2020
WEEKLY DEVELOPMENT REPORT
Daedalus
Cardano Wallet
This week the Daedalus team worked on the third Daedalus Flight candidate for the 1.0.0 release. The new version introduces a wallet import feature that allows users to import wallets from an earlier version of Daedalus, or from the Daedalus state directory, as well as mandatory spending passwords and improvements to error handling. There have also been significant improvements to blockchain synchronization and memory usage, especially on Windows platforms.
Application Platform
There are no updates from the team this week. They’ve been helping the Daedalus team with the latest Daedalus Flight release candidate.
Cardano Explorer
There are no updates from the team this week. They’ve been helping the Daedalus team with the latest Daedalus Flight release candidate.
WALLET BACKEND
This week the team worked on bug fixes and general improvements, in particular ensuring that the new Hydra implementation was passing tests for both Rust and Haskell nodes. There is also a new set of nightly integration tests, in addition to existing unit tests.
Work was done to streamline the release process, removing some redundancy and automating where possible. The team also spent time scrutinizing the behavior of addresses with soft indexes, which have been causing some issues in the production version of Daedalus. The new wallet backend and node that underpin Daedalus Flight, however, have no such issues, so the problems will be resolved once the production version of Daedalus is updated.
API error messages were also improved this week, in particular when attempting to generate an address for a sequential wallet. The clean shutdown mechanism for Windows was also improved, aligning the command line interface with the new Cardano node for consistency’s sake.
The team also worked on creating a new Haskell library for constructing, signing, and serializing transactions. It is currently limited to simple UTXO payments but is still being worked on and will eventually result in a useful Haskell domain-specific language (DSL). Work on another Haskell DSL was also begun, to support key derivation and address manipulation on the Cardano network. At the moment, only the manipulation of mnemonic sentences is available, but more will be coming soon.
NETWORKING
This week the networking team has been working on performance improvements, including identifying and fixing two significant memory leaks. The first was due to unevaluated thunks that were accumulating binary data, while the second only occurred on high-performance Windows machines.
On Windows, the Haskell compiler (GHC) creates one lightweight thread per timeout. High-performance Windows machines with a good network connection were making network requests too quickly for garbage collection to keep up with collecting the unused threads. This resulted in a memory leak that significantly downgraded performance: the better the network conditions and hardware, the worse the impact was. As a result of this fix, some Windows users will see significant performance improvements, although those with limiting factors such as poor hardware or network connection may never have encountered the issue in the first place.
The team also discovered and fixed an issue with how the IOManager was handling exceptions on Windows, as well as some problems with the simulator, including not handling negative timeouts correctly and issues with scheduling threads and monitoring the progression of time.
Finally, the team also published some Haskell documentation in the GitHub repository.
DEVOPS
This week the DevOps team has been finishing up faucet deployment for the upcoming Shelley Haskell testnet, as well as migrating DNS settings for the testnet to cardano.org. They’ve also been helping out with deploying the 1.10.1 release and assisting the Daedalus team with their Electron upgrade. Finally, the team has also been preparing to load test the Shelley Haskell code.
CARDANO DECENTRALIZATION
This week the team worked on generating canonical examples for the golden tests, as well as improving file locking on Windows. Work was also done to remove a duplicated transaction check in the mempool and to improve the concurrency of the storage layer. The background threads spawned by consensus are now also all labeled, making the output of analysis procedures more useful.
GOGUEN
This week the Plutus team added separate monetary policy scripts to the EUTXO document. They also removed an obsolete overflow error constructor from the PlutusIR parser and fixed some value equality tests that had been failing. Finally, they worked on some improvements to the Nix scripts.
The Marlowe team made some design updates to elements within the Marlowe Playground, such as the icons, buttons, panel widths, text display, and help. They also made updates to the Marlowe Haskell editor to improve the color scheme. No code was affected by these changes.
April 9, 2020
WEEKLY DEVELOPMENT REPORT
Daedalus
Cardano Wallet
This week the team completed and released Daedalus Flight 1.0.0-FC2. The new release fixes an issue with address compatibility, as well as providing general performance improvements.
Application Platform
This week the team worked on implementing changes in the cardano-js library which are required to support a new Daedalus feature that allows users to verify their wallet recovery phrase.
Cardano Explorer
This week the team team added some analytics tracking to the explorer and finished all performance optimization tasks.
WALLET BACKEND
This week the team has been finishing up integration with the new Cardano node. Their most significant achievement has been to fill the remaining gaps in the Byron API to fully enable Daedalus Flight. The API now has a total of 38 endpoints, working as an interface for both the Jörmungandr and Haskell nodes, allowing it to support the Byron mainnet, Icarus, Trezor, Ledger, and Incentivized Testnet wallets.
The team has also finished implementing full command-line support for Byron wallets via the new Cardano node, as well as finalizing the JavaScript launcher library that enables Daedalus to spawn and monitor multiple processes directly. With this new launcher, Daedalus no longer needs to rely on fragile inter-process communication. The launcher is cross-platform compatible and works for both Rust and Haskell nodes.
Finally, the team has improved their continuous integration set up, allowing them to to easily build, test, and distribute the wallet backend with both Rust and Haskell nodes on all supported platforms, as well as run nightly benchmarking and migration tests. They will also be able to monitor the synchronization of the backend with a variety of wallet simulations on the mainnet.
The first draft of the coin selection library has also been started, with the goal of creating a clear specification of the coin selection algorithms that have been implemented in the wallet backed, as well as their properties and clear terminology definitions.
NETWORKING
This week the networking team has been focusing on finishing and testing work required as part of the Byron reboot rollout. A few issues were fixed, including ensuring that the DNS subscription worker times out correctly, and that the Win32 network library can support at least 10,000 connections. The team has also been working on testing and profiling on Windows platforms.
DEVOPS
This week the DevOps team have been assisting the Daedalus team with identifying a stable Daedalus Flight build for release. They’ve also been doing preparatory work on the faucet for the upcoming Shelley Haskell testnet, as well as helping the explorer team with build and deployment for the new Byron explorer.
CARDANO DECENTRALIZATION
This week the team has been working on a hard fork combinator, designed to allow two different network protocols to be combined together so that one can transition into the other with a single hard fork. This has proven to be surprisingly difficult, but the team is working hard and resolving issues at a good pace.
Elsewhere, the team has added a few more tests to the testing suite for Shelley features, as well as working on transaction generators. These transaction generators are designed to generate possible transactions, which can then be passed through the protocol tests to spot errors.
Finally, the team has started work on annotated decoders, which provide a way to avoid serialization and could be widely implemented in the Shelley ledger if they prove to work well with the consensus layer. The team has also improved the performance of the nightly continuous integration testing, and has all but one test running successfully now.
GOGUEN
This week the Plutus team worked on improving the performance of abstract machines, as well as working on a new approach for the error term in the metatheory package. In addition, they removed the notification/current slot constructor and made improvements to the deployment server documentation.
The Marlowe team continued work on the new design for the Marlowe Playground. They made some general UX improvements, including the layout of the input and transaction composer buttons, a clearer distinction between items that can be clicked in the bottom panel, supportive messages for when there are no warnings and errors, and a reduction in the size of the sidebar to improve visual appearance. They also added lint tests and resolved some minor issues.
April 3, 2020
WEEKLY DEVELOPMENT REPORT
Daedalus
Cardano Wallet
This week the team completed and released Daedalus Flight, a pre-release version of Daedalus designed to test functionality and ensure smooth integration with the new Cardano node ahead of Shelley.
Application Platform
This week the team finished all the improvements to the Cardano launcher that were required for the Daedalus Byron reboot release.
Cardano Explorer
This week the team added the finishing touches, and the new Cardano explorer is ready to be released.
WALLET BACKEND
The team has been working hard this week to finalize and test all aspects of the wallet backend ahead of its release as part of the Byron reboot, as well as working on an integration guide for users.
NETWORKING
This week the networking team has been addressing some important issues that needed to be resolved before the latest wallet release. Timeouts were merged, and ΔQ parameters adjusted, which has increased performance when downloading blocks from a distant peer. The delay in DNS worker has also been lowered, making it much more likely that a node will reconnect to a peer on the same continent.
The team also improved the NTP client on Windows, and it’s now using the in-house Win32 network library. This required some refactorization, including moving the IOManager down the stack, but it made it much easier to combine the Win32 network library with the standard networking library. Logging for the NTP client has also been enhanced.
DEVOPS
This week the DevOps team assisted the Daedalus team in configuring and building installers for the new Daedalus Flight client. New relays were also scaled up to handle an expected increase in traffic load.
The team also worked on rewriting the faucet to use the new wallet CLI, which is expected to be live on the testnet by the end of the week. Finally, the team set up a node benchmarking job to run nightly and measure synchronization times.
CARDANO DECENTRALIZATION
This week the team completely removed application versions from the ledger in the Haskell code, as well as greatly simplifying the update system. The formal specification was also updated with recent changes to the Haskell code, namely storing the protocol parameters for reward calculations, which will allow Shelley to start from genesis or Byron.
The team has also been working on establishing nightly tests in Buildkite, after the property tests were temporarily disabled. There are a handful of test failures, but the team has already identified the cause and is working on a solution.
GOGUEN
This week the Plutus team started work on adding a web frontend to the smart contract backend (plutus-scb). They also reorganized the content within some of the modules - the StateMachine content was moved to plutus-contract, the wallet content within the plutus-wallet-api module was moved to plutus-emulator, and finally the plutus-wallet-api module has been renamed to plutus-ledger. In addition, the capitalization of the label in the Blockly block has been changed to lowercase, in line with the smart constructor.
Meanwhile, the Marlowe team are working on a new updated design for the Marlowe Playground and made block explanations more compact within Blockly. They also added a taxonomy of potential problems when designing and using Marlowe contracts to the Marlowe tutorial.