Status Update

June 7, 2019

Status Updates (June, 2019) > June 7, 2019

Weekly Development Report

DAEDALUS

Wallet

This week the team continued working on the implementation of UI designs for Shelley features.

The implementation of the 'Staking pools' screen has been finalized, while the implementation of the 'Current and previous epoch info' screen and the 'Delegation setup wizard' UI is in progress.

The team has added an additional Daedalus log file that keeps track of which versions of Daedalus have been used with any given account. This file will help in debugging Daedalus update issues and will be primarily used by the Technical Support Desk.

In the scope of regular maintenance tasks, the team has fixed a minor UI issue with a truncated 'active restoration' message on the 'Add wallet' screen, as well as truncated addresses on the 'Receive' screen in the case where a user’s wallet has a spending password set.

A theme and language selector has been added to the Daedalus Storybook implementation. This allows QA engineers to manually test different themes and languages in Storybook itself, which is essential for testing the new Shelley screens which are not available in the Daedalus UI.

App Platform

This week the team completed a security assessment for the Chromium-based JavaScript execution engine, including the development of a test suite to cover resource consumption attacks, restriction of network access, isolation from the host, and memory isolation from other contracts running in the engine. A load test was also written to analyze the performance of the design, and the API server refactored to consolidate the service functionality with the contract HTTP interface using GraphQL.

In coordination with the Plutus and tools teams, progress was made on finalizing the compiled contract interface, determining the boundary for where the HTTP layer should be applied. Work on support for the first hardware wallet key manager in the Cardano SDK has also started and will continue into next week.

BACKEND OPTIMIZATION

More progress towards the integration with Jörmungandr was made this week. With a node running in the CI environment and a network layer skeleton, the team was able to talk to Jörmungandr and perform the first integration tests with the new node.

Meanwhile, the last phase of development and testing for the SQLite backend has begun, and the team is looking into benchmarking the now heavily tested implementation. Benchmarks also function as stress tests to see whether the new backend can survive a heavy workload and if any errors due to heavy load arise. The team has also achieved support for the new address format in Shelley, comparing our result with the Rust implementation and giving birth to a battle-tested library for doing bech32 encoding and decoding in Haskell.

NETWORKING

The networking team has been working on the transaction submission protocol, ensuring it works with the new mempool implementation. The team also extended the pipelined client in typed-protocols so that it can wait for messages when no outstanding requests are made, which turns out to be useful for the transaction submission protocol. After an extensive review of the design of the protocol, the team has concluded that it will meet safety criteria in adversarial scenarios, as well as allowing the submission of transactions in a manner which will maximize available bandwidth.

The Byron proxy, the networking demo, and the consensus demo are now all using the full network stack, including version negotiation and a multiplexing layer over a TCP connection. This is an important milestone since it is now possible to run a consensus node in real network conditions.

The team has also started to work on DNS-based connection management, which will be modeled soon. The GitHub README file has also been updated, a wiki page was written about the network demo, and finally, various parts of the design document have been updated.

DEVOPS

This week the team's focus has been on updating the proposed integration with ouroboros-network, as well as OBFT improvements that will aid in the transition to Shelley. A new repo has been created, jormungandr-nix, that will contain scripts for running stake pools. The team has also implemented an open-source VPN to be able to connect different parts of a NixOps deployment between bare metal machines and multiple cloud providers securely, without having to depend on cloud provider specific VPNs, security groups, and firewall rules.

CARDANO DECENTRALIZATION

This week the team has been mainly focused on property testing both the executable specification and the concrete implementation. Some positive progress has been made on generating chains for testing, and the team has uncovered some subtle bugs in a few of the new property tests. Work has also started on a significant performance optimization for the consensus layer. Sometimes the same transaction is run through the ledger rules more than once, and in that case it is safe to ignore some of the checks, so the team is adding a way of selecting different validation modes, with different amounts of work. This should see a reasonable boost in performance, since repeating some expensive cryptographic operations will be avoided.

Additionally, the team has adapted the code such that it can be verified with LiquidHaskell (LH), a language extension to annotate Haskell types with logical predicates (termed 'refinement types'). LH derives these refinements from Haskell source code, its own refinements of basic types, and from annotations in code comments. The refinements are translated to logic terms and fed into an SMT solver. It can test for totality (e.g. pattern matching) and termination of functions (normally by proofing that its first argument is monotonically decreasing). The team has identified a handful of locations in the code that will benefit from these refinements and the explicit 'proofs'. On this basis, it is now possible to express more complex invariants in these refinement types.

GOGUEN

This week the Plutus team worked on updates to the extended UTXO specification and the plutus-wallet-api, as well as some minor refactoring within the Plutus transaction functions. Support was added to the Plutus Playground for dynamic endpoints, which results in a new error type that is available for use. Changes were also made to ensure that contracts can feed information about the contract state back to the user interface.

This week the Marlowe team worked on some simplifications to the code, as well as refactoring the frontend Nix code where they removed duplicate Nix definitions between Meadow and Plutus Playground.

The Education team are preparing for their presentation to the executive team next week. The working group continued efforts on the Plutus ebook.

ANNOUNCEMENTS

IOHK is currently looking for talented people to work with us. Please see the IOHK Careers page for more details.