Categorygithub.com/metacurrency/holochain
modulepackage
0.1.0-alpha-26
Repository: https://github.com/metacurrency/holochain.git
Documentation: pkg.go.dev

# README

Holochain

Code Status Travis Codecov Go Report Card In Progress License: GPL v3 Twitter Follow

Holographic storage for distributed applications. A holochain is a monotonic distributed hash table (DHT) where every node enforces validation rules on data before publishing that data against the signed chains where the data originated.

In other words, a holochain functions very much like a blockchain without bottlenecks when it comes to enforcing validation rules, but is designed to be fully distributed with each node only needing to hold a small portion of the data instead of everything needing a full copy of a global ledger. This makes it feasible to run blockchain-like applications on devices as lightweight as mobile phones.

Code Status: Alpha. Not for production use. The code has not yet undergone a security audit. We expect to destructively restructure code APIs and data chains until Beta. Proof-of-concept was unveiled at our first hackathon (March 2017). Alpha 0 was released October 2017. Alpha 1 was released May 2018.

Holochain Links:FAQDeveloper WikiWhite PaperGoDocs

Table of Contents

Installation

Developers Only: At this stage, holochain is only for use by developers (either developers of applications to run on holochains, or developers of the holochain software itself). App developers should bundle their app in an installer as either approach below is not for non-technical folks.

There are two approaches to installing holochain:

  1. as a standard Go language application for direct execution on your machine
  2. using docker for execution in a container.

Which you choose depends on your preference and your purpose. If you intend to develop holochain applications, then you should almost certainly use the docker approach as we provide a testing harness for running multiple holochain instances in a docker cluster. If you will be developing in Go on holochain itself then you will probably end up doing both.

Go Based Install

Unix

(Unix includes macOS and Linux.)

  1. Download Go. Download the "Archive" or "Installer" for version 1.8 or later for your CPU and OS. The "Source" download does not contain an executable and step 3 will fail.

  2. Install Go on your system. See platform specific instructions and hints below for making this work.

  3. Setup your path (Almost all installation problems that have been reported stem from skipping this step.)

    • Export the $GOPATH variable in your shell profile.
    • Add $GOPATH/bin to your $PATH in your shell profile.

    For example, add the following to the end of your shell profile (usually ~/.bashrc or ~/.bash_profile):

        export GOPATH="$HOME/go"
        export PATH="$GOPATH/bin:$PATH"
  1. Install the command line tool suite with:
$ go get -d -v github.com/holochain/holochain-proto
$ cd $GOPATH/src/github.com/holochain/holochain-proto
$ make
  1. Test that it works (should look something like this):
$ hcadmin -v
hcadmin version 0.0.x (holochain y)

Windows

First you'll need to install some necessary programs if you don't already have them.

  • Download Go. Download the "Archive" or "Installer" for version 1.8 or later for Windows and your CPU. The "Source" download does not contain an executable.
  • Install Windows git. Be sure to select the appropriate options so that git is accessible from the Windows command line.
  • Optional: Install GnuWin32 make.

Next, in your Control Panel, select System>Advanced system settings>Environment Variables... and under System Variables do the following:

  1. Add a new entry with the name GOPATH and the value %USERPROFILE%\go (Or your Go workspace folder).
  2. Double-click Path, and in the window that pops up add the following entries:
    • %GOPATH%\bin
    • C:\Go\bin (Or wherever you installed Go to+\bin).
    • C:\Program Files (x86)\GnuWin32\bin (Or wherever you installed GnuWin32 make to+\bin).

Docker Based Install

Using docker, you don't have to install Go first. Our docker scripts manage installation of Go, holochain dependencies and holochain. The docker installation can run alongside Local ("Go") installation of holochain, sharing config directories. See docker usage on our wiki for more on how this works.

  1. Install the latest version of Docker on your machine

    1. Docker Installation. The Community edition; stable is sufficient.
    2. See Docker Getting Started for help.
    3. It is recommended to add your user to the docker group as in: Post Installation Steps, rather than use sudo before all script commands. Holochain Apps cannot exploit the kinds of security concerns mentioned in the Post Installation Steps document.  
  2. Confirm that docker installation and permissions are working by running:

    	$ docker info
    
  3. Pull our holochain image from docker hub:

    	$ docker pull holochain/holochain-proto:develop
    
  4. To run holochain in your new environment, suitable to continue the walkthrough below in usage

    	$ docker run --rm -it --name clutter -p 3141:3141 holochain/holochain-proto:develop
    
  5. This will put you into an new command shell that may behave differently than what you're used to. To exit this holochain (Alpine) shell, press Ctrl-D or type exit

Usage

These instructions are for using the holochain command line tool suite: hcadmin, hcdev and hcd. They should work equally well for Go based or docker based installation.

(Note that since Holochain is intended to be used behind distributed applications, end users should not have to do much through the command or may not have it installed at all, as the application will probably have wrapped up the holochain library internally.)

Each of the tools includes a help command, e.g., run hcadmin help or for sub-commands run hcadmin <COMMAND> help. For more detailed information, see the wiki page

The tool suite include these commands:

  • hcadmin for administering your installed holochain applications
  • hcd for running and serving a holochain application
  • hcdev for developing and testing holochain applications

Getting Started

The instructions below walk you through the basic steps necessary to run a holochain application.

Initializing the Holochain environment

	$ hcadmin init '[email protected]'

This command creates a ~/.holochain directory for storing all chain data, along with initial public/private key pairs based on the identity string provided as the second argument.

Joining a Holochain

You can use the hcadmin tool to join a pre-existing Holochain application by running the following command (replacing SOURCE_PATH with a path to an application's DNA and CHAIN_NAME with the name you'd like it to be stored as).

For example: hcadmin join ./examples/chat chat

Note: this command will be replaced by a package management command still in development.

Running a Holochain

Holochains run and serve their UI via local web sockets. This allows interface developers lots of freedom to build HTML/JavaScript files and drop them in that chain's UI directory. You start a holochain and activate it's UI with the hcd command:

$ hcd <CHAIN_NAME> [PORT]

Developing a Holochain

The hcdev tool allows you to:

  1. generate new holochain application source files by cloning from an existing application, from a package file, or a simple empty template.
  2. run stand-alone or multi-node scenario tests
  3. run a holochain and serve it's UI for testing purposes
  4. dump out chain and dht data for inspection

Please see the docs for more detailed documentation.

Note that the hcdev command creates a separate ~/.holochaindev directory for serving and managing chains, so your dev work won't interfere with any running holochain apps you may be using.

Test-driven Application Development

We have designed Holochain around test-driven development, so the DNA should contain tests to confirm that the rest of the DNA is functional. Our testing harness includes two types of testing, stand-alone and multi-instance scenarios. Stand-alone tests allow you to tests the functions you create in your application. However, testing a distributed application requires being able to spin up many instances of it and have them interact. Our docker cluster testing harness automates that process, and enables app developers to specify scenarios and roles and test instructions to run on multiple docker containers.

Please see the App Testing documentation for details.

File Locations

By default holochain data and configuration files are assumed to be stored in the ~/.holochain directory. You can override this with the -path flag or by setting the HOLOPATH environment variable, e.g.:

$ hcadmin -path ~/mychains init '<[email protected]>'
$ HOLOPATH=~/mychains hcadmin

You can use the form: hcadmin -path=/your/path/here but you must use the absolute path, as shell substitutions will not happen.

Logging

All the commands take a --debug flag which will turn on a number of different kinds of debugging. For running chains, you can also control exactly which of these logging types you wish to see in the chain's config.json file. You can also set the HCDEBUG environment variable to 0 or 1 to temporarily override your settings to turn everything on or off. See also the Environment Variable documentation for more granular logging control.

Architecture Overview and Documentation

Architecture information and application developer documentation is in our developer.holochain.org.

You can also look through auto-generated reference API on GoDocs

Holochain Core Development

We accept Pull Requests and welcome your participation. Please make sure to include the issue number your branch names and use descriptive commit messages.

In Progress

Some helpful links:

Current Throughput graph:

Throughput Graph

Contribute

Contributors to this project are expected to follow our development protocols & practices.

Getting started

Once you have followed the basic "getting started" guide above you will have the CLI tools installed locally.

All the commands (hcadmin, hcd, hcdev, etc.) are built from the same repo:

$ cd $GOPATH/src/github.com/holochain/holochain-proto

Go will throw errors complaining about not being on the $GOPATH if you try to run make from a separate copy of the holochain-proto repository. If you want to contribute to Holochain core you must work in the repository created by Go.

The Makefile contains all the build commands for Holochain. If you make an update to a command you will need to rebuild it before the changes take effect at the command line.

E.g. After making an update to cmd/hcdev/hcdev.go run $ make hcdev then run $ hcdev as normal.

Dependencies

This project depends on various parts of libp2p, which uses the gx package manager. All of which will be automatically installed by make by following the setup instructions above.

The package manager rewrites files that are tracked by git to configure imports. Be careful not to commit the generated imports to git!

make work adds the imports to the repository and make pub reverts them.

Every make command should automatically add and remove imports for you. If a make command is leaving mess behind in the repo, please open a bug report.

If you want to use go commands directly (e.g. go test) then you need to run make work manually first and remember to make pub before committing any changes.

Tests

To compile and run all the tests:

$ cd $GOPATH/src/github.com/holochain/holochain-proto
$ make test

go test can be used instead of make test, but only after make work.

The docker setup runs tests automatically during builds.

License

License: GPL v3

Copyright (C) 2017, The MetaCurrency Project (Eric Harris-Braun, Arthur Brock, et. al.)

This program is free software: you can redistribute it and/or modify it under the terms of the license provided in the LICENSE file (GPLv3). This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Note: We are considering other 'looser' licensing options (like MIT license) but at this stage are using GPL while we're getting the matter sorted out.

Acknowledgements

  • MetaCurrency & Ceptr: Holochains are a sub-project of Ceptr which is a semantic, distributed computing platform under development by the MetaCurrency Project.  
  • Ian Grigg: Some of our initial plans for this architecture were inspired in 2006 by his paper about Triple Entry Accounting and his work on Ricardian Contracts.  
  • Juan Benet & the IPFS team: For all their work on IPFS, libp2p, and various cool tools like multihash, multiaddress, etc. We use libP2P library for our transport layer and kademlia dht.  
  • Crypto Pioneers And of course the people who paved the road before us by writing good crypto libraries and preaching the blockchain gospel. Back in 2008, nobody understood what we were talking about when we started sharing our designs. The main reason people want it now, is because blockchains have opened their eyes to the power of decentralized architectures.

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Functions

ActionReceiver handles messages on the action protocol.
No description provided by the author
BootstrapRefreshTask refreshes our node and gets nodes from the bootstrap server.
No description provided by the author
No description provided by the author
ByteDecoder decodes data encoded by ByteEncoder.
ByteEncoder encodes anything using gob.
No description provided by the author
No description provided by the author
CopyDir recursively copies a directory tree, attempting to preserve permissions.
CopyFile copies file source to destination dest.
CreateRibosome returns a new Ribosome of the given type.
Debug sends a string to the standard debug log.
Debugf sends a formatted string to the global debug log.
DebuggingRequestedViaEnv determines whether an environment var was set to enable or disable debugging.
Decode extracts data from the reader according to the type.
DecodeFile decodes a file based on the extension and the data type.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Encode encodes data to the writer according to the given format.
EncodingFormat returns the files format if supported otherwise "".
EscapeJSONValue removed characters from a JSON value to avoid parsing issues.
No description provided by the author
No description provided by the author
GetAllTestRoles retuns a list of the roles in a scenario.
GetTestScenarioRoles returns a list of scenario roles.
TestScenarioList returns a list of paths to scenario directories.
GossipReceiver implements the handler for the gossip protocol.
GossipTask runs a gossip and logs any errors.
No description provided by the author
Info sends a string to the global info log.
Infof sends a formatted string to the standard info log.
Init initializes service defaults including a signing key pair for an agent and writes them out to configuration files in the root path (making the directory if necessary).
InitializeHolochain setup function that must be called once at startup by the application that uses this holochain library.
IsInitialized checks a path for a correctly set up .holochain directory.
No description provided by the author
KademliaReceiver implements the handler for the kademlia RPC protocol messages.
No description provided by the author
LoadAgent gets the agent identity and private key from the specified directory TODO confirm against chain?.
LoadAppPackage decodes DNA and other appPackage data from appPackage file (via an io.reader).
LoadService creates a service object from a configuration file.
LoadTestConfig unmarshals test json data.
LoadTestFile unmarshals test json data.
LoadTestFiles searches a path for .json test files and loads them into an array.
MakeActionFromMessage generates an action from an action protocol messsage.
MakeDirs creates the directory structure of an application.
MakePackage converts a package request into a package, loading chain data as necessary this is the package that gets sent over the wire.
MakeReceiptData converts a message and a code into signable data.
No description provided by the author
No description provided by the author
MakeValidationPackage converts a received Package into a ValidationPackage and validates any chain data that was included.
MarshalEntry serializes an entry to a writer.
MarshalHeader writes a header to a binary stream.
MarshalSignature writes a signature to a binary stream.
No description provided by the author
NewAgent creates an agent structure of the given type Note: currently only IPFS agents are implemented.
NewCapability returns and registers a capability of a type, for a specific or anyone if who is nil.
NewChain creates and empty chain.
NewChainFromFile creates a chain from a file, loading any data there, and setting it to be persisted to.
No description provided by the author
No description provided by the author
NewDHT creates a new DHT structure.
NewErrorResponse encodes standard errors for transmitting.
No description provided by the author
NewHolochain creates a new holochain structure with a randomly generated ID and default values.
NewJSRibosome factory function to build a javascript execution environment for a zome.
No description provided by the author
No description provided by the author
No description provided by the author
NewNode creates a new node with given multiAddress listener string and identity.
NewNucleus creates a new Nucleus structure.
No description provided by the author
NewRoutingTable creates a new routing table with a given bucketsize, local ID, and latency tolerance.
No description provided by the author
No description provided by the author
No description provided by the author
NewWorld creates and empty world model.
NewZygoRibosome factory function to build a zygo execution environment for a zome.
No description provided by the author
No description provided by the author
No description provided by the author
PrettyPrintJSON for human reability.
No description provided by the author
RegisterBultinRibosomes adds the built in ribosome types to the factory hash.
RegisterRibosome sets up a Ribosome to be used by the CreateRibosome function.
RetryTask checks to see if there are any received puts that need retrying and does one if so.
RoutingRefreshTask fills the routing table by searching for a random node.
No description provided by the author
SaveAgent saves out the keys and agent name to the given directory.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
SignatureFromB58String encodes a signature as a b58string.
No description provided by the author
No description provided by the author
Ticker runs a function on an interval that can be stopped with the returned bool channel.
UnmarshalChain unserializes a chain from a reader.
UnmarshalEntry unserializes an entry from a reader.
UnmarshalHeader reads a Header from a binary stream.
UnmarshalSignature reads a Signature from a binary stream.
ValidateReceiver handles messages on the Validate protocol.
ValidationFailed creates a validation failed error message.
No description provided by the author

# Constants

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
User ID info.
@TODO don't have order dependant constants https://github.com/holochain/holochain-proto/issues/713.
No description provided by the author
special arg type for arguments passed to the call action.
AUTHENTICATED_EXPOSURE means that the function is only available after authentication (TODO).
No description provided by the author
No description provided by the author
these constants define the argument types for actions, i.e.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Filname for storing bridge keys.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Sub-directory for all chain content files.
Sub-directory for all chain definition files.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Sub-directory for all chain test files.
Sub-directory for all chain user interface files.
System settings, directory, and file names.
System settings, directory, and file names.
Settings of the Holochain.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
System settings, directory, and file names.
No description provided by the author
System settings, directory, and file names.
Directory for storing config data.
No description provided by the author
default hashing algo if not provided in DNA.
No description provided by the author
No description provided by the author
No description provided by the author
DefaultSendTimeout a time.Duration to wait by default for send to complete.
@TODO don't have order dependant constants https://github.com/holochain/holochain-proto/issues/713.
No description provided by the author
No description provided by the author
@TODO don't have order dependant constants https://github.com/holochain/holochain-proto/issues/713.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Filname for storing the dht.
No description provided by the author
Definition of the Holochain.
Filename for storing the hash of the holochain.
special arg type for entries, can be a string or a hash.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
@TODO don't have order dependant constants https://github.com/holochain/holochain-proto/issues/713.
No description provided by the author
@TODO don't have order dependant constants https://github.com/holochain/holochain-proto/issues/713.
@TODO don't have order dependant constants https://github.com/holochain/holochain-proto/issues/713.
@TODO don't have order dependant constants https://github.com/holochain/holochain-proto/issues/713.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
@TODO don't have order dependant constants https://github.com/holochain/holochain-proto/issues/713.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
these constants define the argument types for actions, i.e.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
System settings, directory, and file names.
these constants define the argument types for actions, i.e.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
virtual entry type, not actually on the chain.
No description provided by the author
@TODO don't have order dependant constants https://github.com/holochain/holochain-proto/issues/713.
@TODO don't have order dependant constants https://github.com/holochain/holochain-proto/issues/713.
these constants define the argument types for actions, i.e.
No description provided by the author
currently both to/from have the same schema.
No description provided by the author
Type can only be one of two things..
No description provided by the author
@TODO don't have order dependant constants https://github.com/holochain/holochain-proto/issues/713.
@TODO don't have order dependant constants https://github.com/holochain/holochain-proto/issues/713.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
PkgReqChain is the key who value is one of the PkgReqChainOptX masks.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
PkgReqEntryTypes is the key who value is an array of entry types to limit the chain to.
No description provided by the author
Signing key - private.
No description provided by the author
PUBLIC_EXPOSURE means that the function is callable by anyone.
@TODO don't have order dependant constants https://github.com/holochain/holochain-proto/issues/713.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
System settings, directory, and file names.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Filename for local data store.
No description provided by the author
these constants define the argument types for actions, i.e.
No description provided by the author
Server & System settings.
No description provided by the author
System settings, directory, and file names.
No description provided by the author
special arg type that converts anything to a string, used for the debug action.
@TODO don't have order dependant constants https://github.com/holochain/holochain-proto/issues/713.
@TODO don't have order dependant constants https://github.com/holochain/holochain-proto/issues/713.
@TODO don't have order dependant constants https://github.com/holochain/holochain-proto/issues/713.
@TODO don't have order dependant constants https://github.com/holochain/holochain-proto/issues/713.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Version is the numeric version number of the holochain library.
VersionStr is the textual version number of the holochain library.
No description provided by the author
No description provided by the author
ZOME_EXPOSURE is the default and means the function is only exposed for use by other zomes in the app.
These are the zygo implementations of the library functions that must available in all Ribosome implementations.
No description provided by the author

# Variables

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
The number of closer peers to send on requests.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Structs

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
AgentEntry structure for building AgentEntryType entries.
AgentFixture defines an agent for the purposes of tests.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Arg holds the definition of an API function argument.
Bridge holds data returned by GetBridges.
BridgeApp describes a data necessary for bridging.
No description provided by the author
No description provided by the author
Bucket holds a list of peers.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Chain structure for providing in-memory access to chain data, entries headers and hashes.
No description provided by the author
Change represents a semantic change that needs to be reported.
.
No description provided by the author
Config holds the non-DNA configuration for a holo-chain, from config file or environment variables.
DelEntry struct holds the record of an entry's deletion.
DHT struct holds the data necessary to run the distributed hash table.
Holds the dht configuration options.
No description provided by the author
No description provided by the author
EntryDef struct holds an entry definition.
No description provided by the author
No description provided by the author
No description provided by the author
FunctionDef holds the name and calling type of an DNA exposed function.
GetLinksOptions options to holochain level GetLinks functions.
GetOptions options to holochain level Get functions.
GetReq holds the data of a get request.
GetResp holds the data of a get response.
GobEntry is a structure for implementing Gob encoding of Entry content.
Gossip holds a gossip message.
No description provided by the author
GossipReq holds a gossip request.
Header holds chain links, type, timestamp and signature.
HoldReq holds the data of a change.
HoldResp holds the signature and code of how a hold request was treated.
Holochain struct holds the full "DNA" of the holochain (all your app code for managing distributed data integrity).
JSONEntry is a structure for implementing JSON encoding of Entry content.
No description provided by the author
JSRibosome holds data needed for the Javascript VM.
No description provided by the author
Link structure for holding meta tagging of linking entry.
LinkQuery holds a getLinks query.
LinkQueryResp holds response to getLinks query.
LinksEntry holds one or more links.
No description provided by the author
Logger holds logger configuration.
Loggers holds the logging structures for the different parts of the system.
Message represents data that can be sent to node in the network.
MigrateEntry struct is the record of a chain opening or closing.
No description provided by the author
Node represents a node in the network.
NodeRecord stores the necessary information about other nodes in the world model.
Nucleus encapsulates Application parts: Ribosomes to run code in Zomes, plus application validation and direct message passing protocols.
Package holds app specified data needed for validation (wire package).
an encodable version of pstore.PeerInfo which gob doesn't like also libp2p encodes other stuff like connection type into this which we may have to do too.
No description provided by the author
No description provided by the author
Progenitor holds data on the creator of the DNA.
Protocol encapsulates data for our different protocols.
Put holds a put or link for gossiping.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
RoutingTable defines the routing table.
SelfRevocation holds the old key being revoked and the new key, other revocation data and the two cryptographic signatures of that data by the two keys to confirm the revocation.
SelfRevocationWarrant warrants that the first party revoked its own key in favor of the second.
No description provided by the author
A Service is a Holochain service data structure.
ServiceConfig holds the service settings.
No description provided by the author
TaggedHash holds associated entries for the LinkQueryResponse.
TestConfig holds the configuration options for a test.
TestData holds a test entry for a chain.
TestFixtures defines data needed to run tests.
TestSet holds a set of tests plus configuration and fixture data for those tests.
ValidateQuery holds the data from a validation query on the Source protocol.
ValidateResponse holds the response to committing validates (PUT/MOD/DEL).
ValidationPackage holds app specified data needed for validation.
World holds the data of a nodes' world model.
Zome struct encapsulates logically related code, from a "chromosome".
No description provided by the author
ZygoRibosome holds data needed for the Zygo VM.

# Interfaces

Action provides an abstraction for handling node interaction.
Agent abstracts the key behaviors and connection to a holochain node address Note that this is currently only a partial abstraction because the NodeID is always a libp2p peer.ID to complete the abstraction so we could use other libraries for p2p2 network transaction we would need to also abstract a matching NodeID type.
APIFunction abstracts the argument structure and the calling of an api function.
CommittingAction provides an abstraction for grouping actions which carry Entry data.
Entry
Entry describes serialization and deserialziation of entry data.
HashTable provides an abstraction for storing the necessary DHT data.
No description provided by the author
Ribosome type abstracts the functions of code execution environments.
SchemaValidator interface for schema validation.
ValidatingAction provides an abstraction for grouping all the actions that participate in validation loop.
Warrant abstracts the notion of a multi-party cryptographically verifiable signed claim the meaning of the warrant is understood by the warrant name an/or by properties contained in it.

# Type aliases

AgentIdentity is the user's unique identity information in context of this holochain.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
PackagingReq holds a request from an app for data to be included in the validation response.
we also gossip about peers too, keeping lists of different peers e.g.
No description provided by the author
No description provided by the author
WalkerFn a function type for call Walk.