Summary

This week we’ve been laying down foundations for some important features, namely, capability-based security, signals, and GraphQL support. Some of this work is still very fresh, while other parts are rapidly maturing.

Highlights

  1. Cycles of Stage-Setting and Action
  2. Two-Way Communications: Groundwork for App-Level Signals
  3. Security: Private Entries are Now Private
  4. Data Integrity: Link Headers Now Retrievable from DHT
  5. Debugging: Better Messaging for Deletion Errors
  6. Releases: n3h Binaries for ia32 and ARM
Holochain Dev Pulse April 15–April 22, 2019

Details

1. Cycles of Stage-Setting and Action

Holochain development. We often have a lot of exciting developer features to talk about, other times we don’t — but as far as we’re concerned, there’s always something exciting going on!

A quiet week simply means we’re planning or building technical foundations for an important part of the framework.

Here are a few things we’re working on behind the scenes:

  • Capability-based security for a general, unified security model of function and private chain data access — between zomes in a DNA, DNA instances over a bridge, and a DNA instance and a UI. Read our design doc to check out our most recent work.
  • Native GraphQL support for querying linked data the DHT — in the Rust HDK or a deeper level.
  • Signals for communicating zome function events to the UI. Read our design doc, as well as the following section, for more information.
  • Robust and painless installation processes for core contributors, app developers, and end-users.
GraphQL Example

2. Two-Way Communications: Groundwork for App-Level Signals

We’ve now completed the groundwork that allows Holochain to receive messages from running DNA instances and send them back to a GUI. Presently this is low-level work — only the RPC interface and the communication pipeline between running instances are ready.

Soon, however, app developers will have API functions that let them create and emit their own signals from their zomes, and GUIs listening over the RPC interface will be able to listen for those signals.

Eventually, other zomes and bridged DNA instances will be able to listen to them as well. This is useful for looking for all sorts of actions. Direct messages, notifications of pending transactions, and content modification updates can all be implemented using a combination of node-to-node messaging and signals.

3. Security: Private Entries are Now Private

Private source chain entries now stay safely on your device where they belong. You could already mark an entry as private when declaring it in your zome definition, but this wasn’t being handled in core yet. As this is an extremely important feature, it’s surrounded by a flock of unit and integration tests to ensure it functions properly.

Link entries now have their ‘provenance’ retrievable from the DHT. Like standard app entries defined by developers, link entries carry their author ID, signature, and timestamp to indicate who created them. This helps users trust the data they’re received — it underpins the agent-centric design of Holochain and prevents things like man-in-the-middle attacks.

Breaking change: The `GetLinksOptions` struct renames the boolean field `sources` boolean field to `headers` to signify getting headers from the DHT, such as `get_links_result()` and `get_links_with_options()`, returns a `GetLinksResult` that has changed. Its `addresses` field has been replaced with a `links` field. This field is a vector of `LinksResult` structs, which contains the address of the link and a vector of headers from the chains of those who published the link.

5. Debugging: Better Messaging for Deletion Errors

This is a small improvement in the debugging experience; now when attempting to delete a non-existent entry, the error message is explicit about what went wrong.

6. Releases: n3h Binaries for ia32 and ARM

For those of you working on ARM or 32-bit Intel architectures, you now have the precompiled binaries of n3h, which is the prototype DHT networking layer for Holochain. We hope this saves you some time if you’ve been compiling from source. It also smooths out kinks in the process for building the HoloPort Nano device images.

Breaking change: In release 0.0.12-alpha1 developers no longer need to rely on an external version of n3h; Holochain core will download and install it, if the correct version of `n3h` is not in the PATH variable. This addresses the potential issues that could have arisen due to version mismatches between n3h and Holochain.

Development Status: