Technical Framework Foundations

Holochain Dev Pulse 25

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

Cycles of Stage-Setting and Action Two-Way Communications: Groundwork for App-Level Signals Security: Private Entries are Now Private Data Integrity: Link Headers Now Retrievable from DHT Debugging: Better Messaging for Deletion Errors 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.

4. Data Integrity: Link Headers Now Retrievable from DHT

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:

Building an App/Platform on Holochain? We want to hear from you!

Are you building on Holochain? We would love to connect and hear more about your app/platform. Please, take a few moments to fill out this survey! Our goal is to list all the projects building on Holochain on our website.

Stack Overflow: Expand the Holochain Knowledge Base

Help us grow the Holochain knowledge base on Stack Overflow!

Submit your Holochain question.

Submit your Holochain Rust question.

Contribute to the Holochain Documentation

Lastly, to all of our readers — we’d like to encourage you to submit an issue or a pull request if you are interested in contributing to code. If you have a passion for, or would like to see, improvements made to the documentation, submit a new issue or add a suggestion to the Holochain Guidebook.

Connect with the developer community: