Status Updates
April, 2019
April 12, 2019
Weekly Development Report
DAEDALUS
Wallet
This week the team finished the implementation of a new screen named 'Wallet's UTXO distribution'. The redesign of the 'About Daedalus' screen has also been completed, while the 'Block consolidation status' and 'Network status' screens are in the final code review and testing phase.
The team has improved the validation logic of the spending password format. Since the introduction of support for non-Latin characters, the validation rule which was supposed to enforce the use of at least one upper and one lower case character has been ignored. This issue is now resolved.
A small issue with the Japanese content of the 'Support' screen has been fixed. The link to download logs was set on the wrong part of the text.
In the scope of regular maintenance, the team fixed a minor loading-logic issue which allowed the wallet 'Settings' page to be displayed before the wallet data had been fully loaded. The team is also working on the optimization of the visual theming setup, which should reduce complexity when it comes to visual theme management and allow the team to implement new themes in the future more easily.
App Platform
This week the team configured a specialized build pipeline for the smart contract backend to support the current Docker-execution engine, refactored the server to include repositories and a contract controller to better express the model, and completed features assigned to the first milestone. This included upgrading the GraphQL pubsub infrastructure to use Redis for supporting multi-process event origins, preparing the Plutus execution call routing for state and trigger handling, and development of a bundle server as a standalone web service for contract developers to deploy.
BACKEND OPTIMIZATION
This week the team focused on transactions and related operations, starting by extending the core model used to identify and keep track of known transactions as blocks get applied. Along the way, the wallet backend computes some metadata (refined from the previous implementation, but still very similar) and stores the transactions and their metadata in a dedicated location. Work has been done to port and reimplement coin selection from the previous backend version, resulting in an implementation that is closer to the wallet specification and better tested.
Meanwhile, engineers also worked on extending the command-line interface to include more commands reflecting the underlying wallet backend API. The command-line interface will make local HTTP calls to a running server, and offer a human-friendly channel of communication with the API. The commands and CLI specification have been implemented and now only require the API handlers be implemented to be fully functional.
NETWORKING
This week the team ran the first test of the Byron proxy, which was a great success. Blocks were successfully streamed through the protocol on the first run, and the team will soon be adding more functionality to the proxy. Engineers prepared a version negotiation protocol, which has been submitted for review. Work has also been progressing on implementing byte limits for the multiplexing layer, which will aid the detection of malicious actors.
The team finished the Concise Data Definition Language (CDDL) description of cborg codecs for data structures which are passed through a wire. Additionally, the team has been working on block fetch logic tests and will continue with this task next week.
DEVOPS
Continuous Integration
The team continued work on integrating nix-tools with the new repositories, including cardano-shell and plutus.
Monitoring
The team continued with monitoring tooling migration and tested the changes in an isolated environment. The changes are being finalized for merging and will be rolled out to all environments by the end of the month.
Rust-Nix Overlay
The team created a Rust-Nix overlay for the Rust tools: cardano-cli, cardano-http-bridge, and jormungandr. The overlay will be merged into iohk-nix soon.
CARDANO DECENTRALIZATION
Research and Design
The team has nearly finished off work on the engineering design specification for delegation and incentives in the upcoming Shelley release and will be presenting the full document at the IOHK Summit 2019 in a few weeks. Work is currently underway to incorporate the new design specification into the official formal specification.
Development
Permissive OBFT has been implemented and tested in the consensus layer, has undergone review, and feedback is currently being incorporated. Integration of the ledger and consensus layers is proceeding. The rules for the update system have been implemented. A final pull request to implement bulk chain validation within the node-shell has been submitted. The work on optimizing the memory footprint of the UTXO has been successful, reducing the size of the UTXO in memory by more than 50%.
GOGUEN
This week the Plutus team worked on updates to the ledger rules as well as improvements for signature and transaction encoding. Updates were also made to the Plutus Transaction tutorials, sizing of the editor pane, and alignment of the Login button in the Plutus Playgrounds.
The Marlowe team were busy again this week working on functional and usability improvements in Meadow. The online Marlowe Udemy course was reviewed and finalized and is now ready to be rolled out. Content creation continued on both the Plutus Udemy course and Plutus ebook.
ANNOUNCEMENTS
IOHK is currently looking for talented people to work with us. Please see the IOHK Careers page for more details.
April 5, 2019
Weekly Development Report
DAEDALUS
Wallet
This week the team worked on the redesign of screens which are available through the application menu: 'About Daedalus', 'Block consolidation status' and 'Network status' screens. The goal of this process is to have a more uniform UX/UI across the application.
The team is finishing the implementation of a new screen named 'Wallet's UTXO distribution'. The code review process exposed a couple of minor code style issues which are to be addressed.
A minor issue was identified on the React-Polymorph dropdown component - in case of large lists, the dropdown used to get cut-off, which prevented the users from viewing all the options. The team fixed this issue by introducing a scrolling feature to the dropdown element.
In the scope of regular maintenance tasks, the team has decided to reorganize the structure of automated tests to unify both acceptance and unit tests under the same directory.
App Platform
This week the team refined the solution for handling Plutus off-chain state in the smart contract backend by diffing the returned state, rather than using the more complicated event sourcing approach. The latter method will be revisited for a network sync scenario.
Work was completed on the pluggable key store interface for the smart contract platform JS client, using an adapter pattern to enable natural extension while only including client-side libraries specific to the project.
Additionally, a new service was added to the smart contract backend, called the 'bundle server'. The bundle server is intended to be self-hosted by contract developers initially and used as a reference file server to distribute Plutus off-chain assets, but could also run on the node in a more integrated fashion. The first use case will be as part of the development stack, to deploy to and retrieve bundles when developing DApps.
In continued collaboration with the Plutus team, a refinement was made to the HTTP API for communication between the smart contract server and execution engine. It was also decided that the output of the initial Plutus compilation for a Docker engine will be an image contained in the bundle, using nix dockerTools. Initial refactoring to support this simpler model began, which simplifies the design of the contract controller to just orchestration of containers.
The team Dockerized the smart contract backend using a multi-stage Dockerfile, defining services as server, docker execution engine, and bundle server. Docker Compose files were produced for development, production, and CI/CD environments, and research into continuous deployment build tools capable of testing the Docker execution engine was completed.
BACKEND OPTIMIZATION
This week the team has been focused on two significant pieces of work: implementing the new API layer for the wallet, and testing that API layer. It is now possible to serve a subset of the final API, connecting the wallet, network, and database layers. Meanwhile, the team has finished porting and upgrading the integration test framework, enabling them to perform in-depth testing on UTXO tracking and transaction creation in the coming weeks.
NETWORKING
The network team has been finishing the byron-proxy's chain synchronization server and writing a codec for running it over a TCP socket. Engineers also made progress with a CDDL (Concise Data Definition Language) specification of serializable types in ouroboros-network.
The review of block fetch logic was completed, and the results will be merged soon. The team also reviewed the available documentation and have been making progress on version negotiation and interface.
Engineers have also been analyzing the performance model of Praos, and the impact of NTP clock skew. The team will be analyzing the effect of leap seconds on the 2s slot time.
DEVOPS
Continuous Integration
The team continued work on integrating nix-tools with the new repositories, including cardano-shell and plutus.
Monitoring
The team continued with monitoring tooling migration. Engineers have also been working on upstreaming changes to NixOS for Prometheus 2. A working environment should be achieved some time this week.
CARDANO DECENTRALIZATION
Research and Design
The team has nearly finished off work on the engineering design specification for delegation and incentives in the upcoming Shelley release and will be presenting the full document at the IOHK Summit 2019 in a few weeks. Work is currently underway to incorporate the new design specification into the official formal specification.
Development
The team is making steady progress. Property-based tests that test the Byron compatibility code against its executable specification will soon be complete. Work has been done on the integration of various components, and on reducing the in-memory size of the UTXO set.
GOGUEN
This week the Plutus team worked on usability issues in the Playground. Updates were made to signature implementations, and state-machine-based tests were also added. The Marlowe team were busy working on Meadow functional and usability improvements, as well as presentation updates and edits to the samples that are provided.
Good progress was made on the content for the Marlowe Udemy course, which is now in its pre-launch review phase. Content creation has started for both the Plutus Udemy course and Plutus ebook.
ANNOUNCEMENTS
IOHK is currently looking for talented people to work with us. Please see the IOHK Careers page for more details.