Status Updates
July, 2019
July 26, 2019
Weekly Development Report
DAEDALUS
Wallet
This week the team began the integration of the V2 API and worked on the UI changes required as a result of the BIP-44 address implementation.
The work for the upcoming Cardano Wallet 1.6.0 release, which includes Daedalus 0.14.0 and CardanoSL 3.0.3, is almost done with only the new visual themes implementation left to finish. Everything else, including the work on Daedalus logging improvements, has been completed.
In the scope of regular maintenance tasks, the team improved the support request data handling and fixed broken 'wallet' Storybook stories. Additionally, a couple of minor improvements have been implemented on the delegation screen: a search and filter feature has been added to the 'Stake pools' screen, and a new and improved scrollbar has been introduced on the 'Wallet list' navigation.
App Platform
This week the team completed their initial contribution to the Daedalus backend upgrade project, and are in a position to complete the application changes to align with the new API. The work has been completed in a parallel development branch, which will be merged once upstream dependencies are completed. In other work, a service management prototype was developed for the application platform, and Electron auto-updating and packaging mechanics introduced.
BACKEND OPTIMIZATION
This week the team continued polishing and cleared some of the technical debt accumulated over the past few weeks, which involves making small improvements to internal aspects of the code that aren't externally obvious but make for a better and easier to maintain code base. Meanwhile, work is wrapping up on the API and the implementation of the remaining endpoints that will be released soon. This release will also include the ability to play with the wallet backend on top of a Jörmungandr BFT self-node!
NETWORKING
This week the team continued to improve subscription management and drafted a pull request which integrates DNS-based subscription management with cardano-node. The team is also working on the Byron proxy's ability to sync from mainnet, with promising initial results. Work has also begun on on IPv6 support in cardano-node.
DEVOPS
There is no update this week.
CARDANO DECENTRALIZATION
Work has continued on property testing the new and improved Byron code to ensure high assurance before release to mainnet. The team has been improving test coverage to make sure that as many edge cases as possible are covered by testing. In other news, the Goblins framework is nearly in place, which will allow the introduction of known failures in the chain to ensure that the implementation also fails as expected.
GOGUEN
This week the Plutus team upgraded the integration of PureScript and PurtyScript and fixed some code compilation issues within the Plutus Playground.
The Marlowe team updated the Purty Marlowe Playground code and made updates to the Blockly code. They also started work on a help side pane within the Marlowe Playground.
The education team made some updates to the glossary and exercise chapters of the Plutus ebook and also incorporated some general minor edits.
ANNOUNCEMENTS
IOHK is currently looking for talented people to work with us. Please see the IOHK Careers page for more details.
July 19, 2019
Weekly Development Report
DAEDALUS
Wallet
This week the team worked on the implementation of process management for the decoupled cardano-wallet and node. Once this work is done, the team will start with the integration of the V2 API and all of the BIP-44 related UI changes.
Work has also been completed to improve checks for clock synchronization. For Daedalus to work and the Cardano node to process blocks and synchronize with the blockchain, the clock on the user's machine needs to be synchronized with global time. Before reporting an issue with clock synchronization and stopping operation, Daedalus will now perform two additional tests for a total of three confirmations that the clock is not synchronized. This will reduce the number of false reports.
The team has put a lot of effort into completing the work planned for the upcoming Cardano Wallet 1.6.0 release, which includes Daedalus 0.14.0 and CardanoSL 3.0.2.
Finally, the work on Daedalus logging improvements is in the final testing and review stage.
App Platform
This week the team completed tasks for the Daedalus backend upgrade project, refined the platform’s full-node application stack design with optimizations now deferred from the Daedalus upgrade, and improved the smart contract stack JavaScript client.
The focus of the backend upgrade tasks was refactoring the API to align with cardano-wallet and process management changes. Initial work to enable frontend development against the new backend was also completed, including the development of a JavaScript launcher that will be used within the full-node application stack.
The smart contract stack JavaScript client previously handled transaction signing and network submission, but this week, the design was simplified to abstract the complexity of connecting and receiving signing requests. The client now expects the application to handle transaction signing and submission. The Cardano JavaScript SDK provides the functionality for this part of the process for Plutus-based implementations. The client also now wraps the GraphQL API with a simplified interface for convenience; however, the instance of ApolloClient is still exposed for standard integration into modern web apps.
BACKEND OPTIMIZATION
The team is investigating a more complete software solution which can be cross-compiled into several platforms with Linux, OSX, and Windows as primary targets. A lot of work was also done this week towards feature completeness. A handful of features that were judged as low priority were initially left out, and the time has come for their implementation to ensure that the new wallet backend is a genuine, equivalent-or-better replacement for the existing software currently deployed and distributed to the community.
NETWORKING
This week the networking team has been working on subscription management and its first integration with cardano-node. The function has been demonstrated in an internal meeting. The team has been doing some refactoring: changing the point type which is used to explicitly reflect the genesis point, as well as refactoring the network-mux package. The team also worked on improving tracing, and a pull request has been prepared which extends typed protocol trace messages with peer id.
DEVOPS
The team continued work on a number of items this week. The jormungandr-nix implementation now has added helper scripts for sending transactions and creating stake pool certificates, and can generate Windows Chocolatey packages. As a result, the 0.2.4 update has been pushed to chocolatey.org and passed automated review, although it's still pending final manual review before it will be published.
In other work, the cardano-node genesis creation tool has been completed, and the iohk-ops repository now has integrated cardano-node and can deploy an OBFT cluster using the new Haskell node.
CARDANO DECENTRALIZATION
This week the team finished the implementation of the ChainDB, which now enables the node to write to disk, a significant milestone. Elsewhere, the focus this week has been on the integration into cardano-node and preparation for the upcoming internal demonstration. The setup now shows consolidated logging in one terminal and the running nodes in another. The nodes also have a textual user-interface with live indication of CPU and memory usage taken from the node's process state. More indicators and metrics like chain quality and progress of block creation will be added in the future.
In collaboration with DevOps, the team has implemented a unified configuration that includes parameters from CLI arguments, from loading configuration files, and the preset constants in the shell. Work has also started on the updater, which involves many other teams including backend, frontend, and DevOps.
GOGUEN
This week the Marlowe team discussed their draft for the third version of Marlowe with researchers, as well as discussing the future of Marlowe and Blockly with the wider team. The new version of Marlowe is based on feedback from the educational course in Ethiopia and the Miami summit, as well as general user feedback received elsewhere.
The education team has been adding the finishing touches to the upcoming Plutus ebook, as well as coordinating and planning what to write next.
ANNOUNCEMENTS
IOHK is currently looking for talented people to work with us. Please see the IOHK Careers page for more details.
July 12, 2019
Weekly Development Report
DAEDALUS
Wallet
This week the team finished the implementation of UI designs for Shelley features, which include two new UI/UX improvements: first, a button to open the Daedalus state directory, available on the ‘Daedalus diagnostics’ screen and next to the state directory path; and second, an external link icon which has been applied to all links in the Daedalus UI which open external resources such as support articles.
The work on Daedalus logging improvements is progressing nicely, and it is expected that both the Daedalus state snapshot log and the Daedalus log file rotation improvements will be done by the end of next week.
App Platform
This week the team have been concentrating on the Daedalus backend upgrade project, which is a critical aspect of the platform infrastructure. The project presents an opportunity to refactor some elements of the design to support a generic full-node application, in particular with improved launching and update mechanics. Work on a proof of concept which will implement key functionality of the Cardano JavaScript SDK in Daedalus has begun and will be used to assess the solution before proceeding with a full implementation.
BACKEND OPTIMIZATION
This week the team successfully integrated the new wallet backend with a BFT Jörmungandr node. As a result, Jörmungandr is now offered as a target option in the command-line interface which powers the wallet backend. The team is now taking a small breath before working on integration with the new Haskell nodes: polishing some implementation details, adding some more tests where necessary and implementing some low-priority small features to make the API a bit more complete. This will also leave time to correctly plan the work for the Haskell integration and work on a small prototype to highlight potential integration issues.
NETWORKING
This week the team has implemented a connection table which tracks the state of ongoing connections, as well as creating associated QuickCheck property tests. Additionally, work was done to refactor one of the core types which describes points on a chain. Progress was also made towards a graph simulation of the peer discovery layer, working on operators which represent ΔQ.
The team also worked towards a significant development milestone: the implementation of a template wallet application, which will mark the start of integration between the Shelley node and the wallet backend. Refactoring work was also undertaken to separate the mux-network package and make it independent of typed protocols, which allows it to be used as a standalone package for any other network application.
Finally, the team improved the logging of typed protocols to include decoding failures in the traces, as well as working on documentation in conjunction with other IOHK engineers.
DEVOPS
This week the team has been making improvements in the jormungandr-nix repository, bumping the version number to 0.2.4. As of this version, the self-node can now run up to three faucets and stake pools.
The Snappy package has already been updated to 0.2.4, and the build for the Chocolatey package is complete and will be made available next week. A genesis creation tool has also been created for cardano-node and will be merged into the repository next week.
CARDANO DECENTRALIZATION
This week work has continued on the implementation of the ChainDB, and is expected to be completed next week. The team has also started to implement a 'live view' of the node's state, showing resource usage (CPU, memory, I/O), and other benchmarking metrics such mempool fullness level. The log output has been redirected to a central logging process that captures the logged items from all nodes and displays them in its terminal. For this, the team has extended the federated logging to accept log forwarders on multiple endpoints. Implementation of the 'live view' is made possible by user-defined backends that can connect to the switchboard and receive observed values according to the configuration, as if they were internal backends (e.g. katip, aggregation). In the future, the team may reimplement some backends in their own libraries to further reduce the number of dependencies in the framework.
GOGUEN
This week the Plutus team updated the code for the executable contracts and also made updates to the seal and unseal dynamic builtins. They also fixed some Haddock errors and some JSON serialization issues. Updates were also made in the Plutus Playground to use the new contract API.
The Marlowe team finished the Meadow to Marlowe Playground rebrand effort and updated any redirects to the production URL. They also fixed some minor bugs in the Marlowe Playground.
The Education team presented their 2019 strategy to the executives, which includes planning for various courses and materials for Plutus and Marlowe. This received good feedback. They were also busy finalizing the first draft of the Plutus ebook which will be delivered this week.
ANNOUNCEMENTS
IOHK is currently looking for talented people to work with us. Please see the IOHK Careers page for more details.
July 5, 2019
Weekly Development Report
DAEDALUS
Wallet
This week the team reviewed and tested the implementation of UI designs for Shelley features. The review exposed some UI/UX imperfections in the 'Delegation setup wizard' UI and the 'Delegation center' screen, which will be resolved next week, marking the end of the implementation process.
In the scope of regular maintenance tasks, the team removed all references to the discontinued report server from the Daedalus code base. The team also added a couple of improvements to the 'Loading' screen status icons, since there were some minor discrepancies between the implementation and the design specification. The status icons now have a click action which opens the 'Daedalus diagnostics' dialog.
Finally, work has started on Daedalus logging improvements. A new log file will be added which contains the Daedalus state snapshot at the moment log files are downloaded. Daedalus log file rotation will be improved by reducing the log rotation file size limit from 20MB to 5MB, and up to three of the old log files will also be kept and downloaded as part of the logs archive.
App Platform
This week the team remodeled the Cardano JavaScript SDK to include the concept of a remote wallet, to add an HTTP request interface, and complete the unrestrained aspects of the Cardano wallet provider implementation. This work establishes the SDK as a suitable library for Daedalus to use in the upcoming node and backend upgrade by abstracting the HTTP API and keeping the generic interactions out of the application codebase. The smart contract backend triggers service was also completed to enable a trigger definition to be passed in for execution when conditions are met. Additionally, further research was conducted into the Plutus interface requirements since a gap in the GraphQL type language raised a blocking issue. After discussion with the team, a path forward to explore has been established.
BACKEND OPTIMIZATION
Some significant steps were completed this week, working towards the end of the first phase of integration with a Rust BFT self-node. The team has successfully enabled and passed all the API integration test scenarios for the http-bridge using Jörmungandr as a backend target. This means that the integration of the wallet core engine with Jörmungandr is complete. In other words, it is now possible to support two backend targets with maximum code re-use between both implementations. The team is currently working on making this available to users via the command-line interface, allowing anyone to start a wallet server on top of a running Rust BFT self-node.
NETWORKING
This week the networking team made good progress with DNS management, adding useful logging information. The team took some time to refactor various parts of the code base: in the byron-proxy repository work was done to split various clients and servers into different modules, while in the ouroboros-network repository a separate network-mux
package was created.
The team has also been involved in working out a new representation of the mempool transaction sequence. Also this week, engineers reviewed the documentation and added a new section with a description of all mini-protocols. Finally, the team worked on an initial wallet client template, which is a starting point for the integration of the wallet backend with a Shelley core node.
DEVOPS
This week the team worked on improving the jormungandr-nix implementation by providing more information to the user on bootstrap. Additionally, the Jörmungandr snappy package now has a jormungandr.bootstrap script that can autostart the node and send logs using the Graylog Extended Log Format (GELF) to our logging server.
In other areas, work on Genesis CLI tooling has been started to create a proper genesis file for new testnets and devnets, and the team is also working on improving upstream NixOps to make it easier to support platforms other than AWS for iohk-ops deployment scripts.
CARDANO DECENTRALIZATION
Work was completed this week for the implementation of the cryptography abstraction layer, and the final updates were made to the executable specification. Next, the team will work with the director of engineering to align the implementation approach by creating delivery checkpoints, which will ensure work moves forward efficiently and to a high standard.
The team is also finishing the implementation of the ChainDB, a crucial component that stores the current chain's and candidate forks' blocks on disk along with a corresponding ledger. Moreover, it is also responsible for chain selection based on the blocks that it is given.
GOGUEN
The Plutus team worked on dynamic built-in types and integrated support for GraphQL. They also rearranged the structure of some modules in Plutus Tx and made usability improvements to the Plutus Playgrounds use cases. Benchmarks for signature verification and multi signatures were also added to these use cases as well as some PIR tests. Some fixes were also made to the stack.yaml configuration file.
The Marlowe team have renamed Meadow to Marlowe Playground. They also worked on some Marlowe Playground front end logic tests.
The Education team are finishing the initial chapters of the Plutus ebook, which are expected to be delivered next week.
ANNOUNCEMENTS
IOHK is currently looking for talented people to work with us. Please see the IOHK Careers page for more details.