Module holochain::core

source ·
Expand description

Defines the core Holochain workflows

Modules

  • Include nice string encoding methods and From impls
  • Types related to the genesis process whereby a user commits their initial records and validates them to the best of their ability. Full validation may not be possible if network access is required, so they perform a “self-check” (as in “check yourself before you wreck yourself”) before joining to ensure that they can catch any problems they can before being subject to the scrutiny of their peers and facing possible rejection.
  • Defines the prefixes for the various HashTypes, as well as the traits which unify them
  • A variant of Zome which is defined entirely by native, inline Rust code
  • Dht Operations
  • Manages the spawning of tasks which process the various work queues in the system, as well as notifying subsequent queue processors to pick up the work that was left off.
  • A Ribosome is a structure which knows how to execute hApp code.
  • Workflows are the core building block of Holochain functionality.

Macros

  • Helper for ensuring the the proper number of bytes is used in various situations
  • unidiomatic way to derive default trait implementations of TryFrom in/out of SerializedBytes
  • A default HashableContent implementation, suitable for content which is already TryInto<SerializedBytes>, and uses a PrimitiveHashType

Structs

  • An agents chain records returned from a agent_activity_query
  • The struct containing all information about the executing agent’s identity.
  • Action for an agent validation package, used to determine whether an agent is allowed to participate in this DNA
  • Newtype for the bytes comprising an App entry
  • Information about a class of Entries provided by the DNA
  • The location of an app entry definition.
  • Identifier for an entry definition. This may be removed.
  • A signal emitted by an app via emit_signal
  • Represents a block. Also can represent an unblock. NOT serializable and NOT pub fields by design. try_new MUST be the only entrypoint to build a Block as this enforces that the start/end times are valid according to invariants the SQL queries rely on to avoid corrupting the database.
  • System entry to hold a capability token claim for use as a caller. Stored by a claimant so they can remember what’s necessary to exercise this capability by sending the secret to the grantor.
  • A CapSecret is used by a caller to prove to a callee access to a committed CapGrant.
  • The unique identifier for a Cell. Cells are uniquely determined by this pair - this pair is necessary and sufficient to refer to a cell in a conductor
  • Filter source chain items. Starting from some chain position given as an ActionHash the chain is walked backwards to genesis. The filter can stop early by specifying the number of chain items to take and / or an ActionHash to consume until.
  • The chain has been forked by these two actions
  • The action at the head of the complete chain. This is as far as this authority can see a chain with no gaps.
  • Specifies arguments to a query of the source chain, including ordering and filtering.
  • Identifier of a clone cell, composed of the DNA’s role name and the index of the clone, starting at 0.
  • When migrating to a new version of a DNA, this action is committed to the old chain to declare the migration path taken. Currently unused
  • Error converting a composite hash into a subset composite hash, due to type mismatch
  • A type marker for a coordinator InlineZome.
  • Every countersigning agent must sign against their chain state. The chain must be frozen until each agent decides to sign or exit the session.
  • All the data required for a countersigning session.
  • Every countersigning session must complete a full set of actions between the start and end times to be valid.
  • A action which “speaks” Entry content into being. The same content can be referenced by multiple such actions.
  • Base data for Create actions.
  • Zome input to create an entry.
  • Declares that a metadata Link should be made between two EntryHashes
  • Zome IO inner type for link creation.
  • @todo Ability to forcibly curry payloads into functions that are called with a claim.
  • Declare that a previously published Action should be nullified and considered deleted.
  • Placeholder for future when we want to have deletes on actions Not currently in use.
  • Zome input for all delete operations.
  • Declares that a previously made Link should be nullified and considered removed.
  • Query arguments for the deterministic version of GetAgentActivity
  • The Dna Action is always the first action in a source chain
  • The definition of a DNA: the hash of this data is what produces the DnaHash.
  • Builder for DnaDef.
  • Information about the current DNA.
  • Information about the current DNA.
  • Modifiers of this DNA - the network seed, properties and origin time - as opposed to the actual DNA code. These modifiers are included in the DNA hash computation.
  • Builder for DnaModifiers.
  • DnaModifiers options of which all are optional.
  • An inline zome clonable type object.
  • All definitions for all entry types in an integrity zome.
  • An Entry with all its metadata.
  • A newtype for a collection of EntryHashes, needed for some wasm return types.
  • Combination of the three main rate limiting data types, for convenience
  • The output of ephemeral signing. The private key for this public key has been discarded by this point. The signatures match the public key provided but cannot be reproduced or forged because the private key no longer exists. The signatures match the input items positionally in the vector, it is up to the caller to reconstruct/align/zip them back together.
  • A single function name.
  • Data passed into the genesis_self_check callback for verifying the initial chain entries
  • Data passed into the genesis_self_check callback for verifying the initial chain entries. DnaInfo can be read with a call to dna_info within the self check callback, it is elided here to minimise/stabilise the callback function signature.
  • Zome input for get and get_details calls.
  • Options for controlling how get works
  • Parameters for granting a zome call capability.
  • 256 Bit generic hash.
  • 512 Bit generic hash.
  • Error converting a composite hash into a primitive one, due to type mismatch
  • The highest action sequence observed by this authority. This also includes the actions at this sequence. If there is more then one then there is a fork.
  • A HoloHash contains a vector of 36 bytes representing a 32-byte blake2b hash plus 4 bytes representing a DHT location. It also contains a zero-sized type which specifies what it is a hash of.
  • A wrapper around HoloHash that Serializes into a base64 string rather than a raw byte array.
  • Represents some piece of content along with its hash representation, so that hashes need not be calculated multiple times. Provides an easy constructor which consumes the content.
  • It’s an interval bounded by timestamps that are not infinite.
  • Allows you to send an op to the incoming_dht_ops_workflow if you found it on the network and were supposed to be holding it.
  • A action which declares that all zome init functions have successfully completed, and the chain is ready for commits. Contains no explicit data.
  • An “inline” zome definition in pure Rust, as opposed to a zome defined in Wasm.
  • A type marker for an integrity InlineZome.
  • Data with an optional validation status.
  • CreateLinks with and DeleteLinks on them [CreateLink, [DeleteLink]]
  • A query for links to be used with host functions that support filtering links
  • Opaque tag for the link applied at the app layer, used to differentiate between different semantics and validation rules for different links
  • Metadata that can be requested on a basis
  • Zome input for must_get_action.
  • Input to the must_get_agent_activity call.
  • Zome input for must_get_entry.
  • Zome input for must_get_valid_record.
  • When migrating to a new version of a DNA, this action is committed to the new chain to declare the migration path taken. Currently unused
  • Every preflight request can have optional arbitrary bytes that can be agreed to.
  • The same PreflightRequest is sent to every agent. Each agent signs this data as part of their PreflightResponse. Every preflight must be identical and signed by every agent for a session to be valid.
  • Every agent must send back a preflight response. All the preflight response data is signed by each agent and included in the session data.
  • Context information for an invalid action to make it easier to trace in errors.
  • Specifies arguments to a query of the source chain, including ordering and filtering.
  • Combination of two rate limiting data types, for convenience
  • a chain record containing the signed action along with the entry if the action type has one.
  • A specific Record with any updates and deletes. This is all the metadata available for a record.
  • Registers a new Action on an agent source chain. This is the act of creating any Action and publishing it to the DHT.
  • Registers a link between two Entrys. This is the act of creating a Action::CreateLink and publishing it to the DHT. The authority is the entry authority for the base Entry.
  • Registers a deletion of an instance of an Entry in the DHT. This is the act of creating a Action::Delete and publishing it to the DHT.
  • Deletes a link between two Entrys. This is the act of creating a Action::DeleteLink and publishing it to the DHT. The delete always references a specific Action::CreateLink.
  • Registers an update from an instance of an Entry in the DHT. This is the act of creating a Action::Update and publishing it to the DHT. Note that the Action::Update stores an new instance of an Entry and registers it as an update to the original Entry. This operation is only concerned with registering the update.
  • Remote signal many agents without waiting for responses.
  • The number of validations required for an entry to be considered published.
  • Agents can have a role specific to each countersigning session. The role is app defined and opaque to the subconscious.
  • A fully qualified scheduled function.
  • A type with the zome that it is defined in.
  • zome types that are in scope for the calling zome.
  • The set of EntryDefIndex and LinkTypes in scope for the calling zome.
  • A Canonical Serialized Bytes representation for data If you have a data structure that needs a canonical byte representation use this Always round-trip through SerializedBytes via. a single TryFrom implementation. This ensures that the internal bytes of SerializedBytes are indeed canonical. The corrolary is that if bytes are NOT wrapped in SerializedBytes we can assume they are NOT canonical. Typically we need a canonical serialization when data is to be handled at the byte level by independently implemented and maintained systems.
  • Input structure for creating a signature.
  • Ephemerally sign a vector of bytes (i.e. a Vec<Vec<u8>>) Each of the items of the outer vector represents something to sign and will have a corresponding Signature in the output. The public key for the ephemeral operation will be returned in the output. Structurally mirrors/complements the Signature struct as a new type. There we know the key on the input side, here we receive the key on the output.
  • The raw bytes of a signature.
  • A combination of an action and its signature.
  • Any content that has been hashed and signed.
  • Stores a new Entry in the DHT. This is the act of creating a either a Action::Create or a Action::Update and publishing it to the DHT. These actions create a new instance of an Entry.
  • Stores a new Record in the DHT. This is the act of creating a new Action and publishing it to the DHT. Note that not all Actions contain an Entry.
  • A microsecond-precision UTC timestamp for use in Holochain’s actions.
  • Representation of message to be logged via the debug host function
  • UnsafeBytes the only way to implement a custom round trip through bytes for SerializedBytes It is intended to be an internal implementation in TryFrom implementations The assumption is that any code using UnsafeBytes is NOT valid messagepack data This allows us to enforce that all data round-tripping through SerializedBytes is via TryFrom and also allow for custom non-messagepack canonical representations of data types.
  • A action which specifies that some new Entry content is intended to be an update to some old Entry.
  • Placeholder for future when we want to have updates on actions Not currently in use.
  • Base data for Update actions.
  • Zome input type for all update operations.
  • Mirror struct for Sign that includes a signature to verify against a key and data.
  • Placeholder for warrant type
  • A zome defined by Wasm bytecode
  • Data that can be encrypted with secretbox.
  • Key refs represent shared secrets stored in the keystore. They can either be user-specified, or auto-generated at time of secret creation, or ingestion.
  • A type to allow json values to be used as SerializedBytes
  • A Holochain Zome. Includes the ZomeDef as well as the name of the Zome.
  • The entry for the ZomeCall capability grant. This data is committed to the callee’s source chain as a private entry. The remote calling agent must provide a secret and we source their pubkey from the active network connection. This must match the strictness of the CapAccess.
  • Zome calls need to be signed regardless of how they are called. This defines exactly what needs to be signed.
  • The index into the ZomeIndex vec.
  • this id is an internal reference, which also serves as a canonical ordering for zome initialization. The value should be auto-generated from the Zome Bundle def
  • The properties of the current dna/zome being called.
  • ZomeName as a String.
  • A key to the ScopedZomeTypes container.

Enums

  • Action contains variants for each type of action.
  • Enum to mirror Action for all the shared data required to build session actions. Does NOT hold any agent specific information.
  • A unit enum which just maps onto the different Action variants, without containing any extra data
  • Get either the full activity or just the status of the chain
  • The primitive hash types represented by this composite hash
  • The primitive hash types represented by this composite hash
  • Target of a block. Each target type has an ID and associated reason.
  • Represents access requirements for capability grants.
  • Represents a potentially valid access grant to a zome call. Zome call response will be Unauthorized without a valid grant.
  • Reason why we might want to block a cell.
  • Specify which Actions to allow through this filter.
  • Defines several ways that queries can be restricted to a range. Notably hash bounded ranges disambiguate forks whereas sequence indexes do not as the same position can be found in many forks. The reason that this does NOT use native rust range traits is that the hash bounded queries MUST be inclusive otherwise the integrity and fork disambiguation logic is impossible. An exclusive range bound that does not include the final action tells us nothing about which fork to select between N forks of equal length that proceed it. With an inclusive hash bounded range the final action always points unambiguously at the “correct” fork that the range is over. Start hashes are not needed to provide this property so ranges can be hash terminated with a length of preceeding records to return only. Technically the seq bounded ranges do not imply any fork disambiguation and so could be a range but for simplicity we left the API symmetrical in boundedness across all enum variants. @TODO It may be possible to provide/implement RangeBounds in the case that a full sequence of records/actions is provided but it would need to be handled as inclusive first, to enforce the integrity of the query, then the exclusiveness achieved by simply removing the final record after the fact.
  • Status of the agent activity chain
  • Errors during conversion from RoleName to CloneId.
  • Errors related to the secure primitive macro.
  • Return type for get_details calls. ActionHash returns a Record. EntryHash returns an Entry.
  • Structure holding the entry portion of a chain record.
  • Either a Action::Create or a Action::Update. These actions both create a new instance of an Entry.
  • Either an EntryDefIndex or one of:
  • The status of an Entry in the Dht
  • Errors involving app entry creation
  • Allows Actions which reference Entries to know what type of Entry it is referencing. Useful for examining Actions without needing to fetch the corresponding Entries.
  • Describes the get call and what information the caller is concerned about. This helps the subconscious avoid unnecessary network calls.
  • A collection of zome/function pairs
  • Input to holochain hash function.
  • Output from the holochain hashing host function.
  • HashableContent can be expressed as “content”, or “prehashed”, which affects how a HoloHashed type will be constructed from it.
  • Anything that can go wrong while calling a HostFnApi method
  • A human-readable timestamp which is represented/serialized as an RFC3339 when possible, and a microsecond integer count otherwise. Both representations can be deserialized to this type.
  • The result of the DNA initialization callback.
  • Reason why we might want to block an IP.
  • Maps directly to the tracing Levels but here to define the interface. See https://docs.rs/tracing-core/0.1.17/tracing_core/struct.Level.html
  • Filter on a set of LinkTypes.
  • Reason why we might want to block a node.
  • These are the operations that can be applied to Holochain data. Every Action produces a set of operations. These operations are each sent to an authority for validation.
  • A preflight request can be accepted, or invalid, or valid but the local agent cannot accept it.
  • Represents the different ways the entry_address reference within an action can be intepreted
  • The level of validation package required by an entry.
  • Defines either a persisted or ephemeral schedule for a schedule function. Persisted schedules survive a conductor reboot, ephemeral will not. Persisted schedules continue beyond irrecoverable errors, ephemeral do not.
  • Scheduling errors.
  • Validation can result in either
  • A full UnitEnum, or just the unit type of that UnitEnum
  • Unresolved dependencies that are either a set of hashes or an agent activity query.
  • All the outcomes that can come from validation This is not an error type it is the outcome of failed validation.
  • The validation status for an op or record much of this happens in the subconscious an entry missing validation dependencies may cycle through Pending many times before finally reaching a final validation state or being abandoned
  • Input to the weigh callback. Includes an “unweighed” action, and Entry if applicable.
  • Response to a zome call.
  • Just the definition of a Zome, without the name included. This exists mainly for use in HashMaps where ZomeDefs are keyed by ZomeName.
  • Anything that can go wrong while calling a HostFnApi method

Constants

  • The number of bits we want for a comfy secret.
  • The number of bytes we want for a comfy secret.
  • Delimiter in a clone id that separates the base cell’s role name from the clone index.
  • Entries larger than this number of bytes cannot be created
  • Length of the core bytes (32)
  • Length of the full HoloHash bytes (39 = 3 + 32 + 4)
  • Length of the location bytes (4)
  • Length of the prefix bytes (3)
  • Length of the core bytes + the loc bytes (36 = 32 + 4), i.e. everything except the type prefix
  • 8 seems like a reasonable limit of agents to countersign.
  • 16mb limit on Entries due to websocket limits. 4mb limit to constrain bandwidth usage on uploading. (Assuming a baseline 5mbps upload for now… update this as consumer internet connections trend toward more upload) Consider splitting large entries up.
  • The maximum size to hash synchronously. Anything larger than this will take too long to hash within a single tokio context
  • 1kb limit on LinkTags. Tags are used as keys to the database to allow fast lookup so they should be small.
  • Need at least two to countersign.
  • One million
  • Expire persisted schedules after this long.
  • Any action with a action_seq less than this value is part of a record created during genesis. Anything with this seq or higher was created after genesis.
  • Tick the scheduler every this many millis.
  • The timestamps on actions for a session use this offset relative to the session start time. This makes it easier for agents to accept a preflight request with actions that are after their current chain top, after network latency.
  • Maximum time in the future the session start can be in the opinion of the participating agent. As the action will be SESSION_ACTION_TIME_OFFSET after the session start we include that here.
  • Ed25519 signatures are always the same length, 64 bytes.

Traits

  • Builder for non-genesis Actions
  • A trait to unify the “inner” parts of an Action, i.e. the structs inside the Action enum’s variants. This trait is used for the “unweighed” version of each struct, i.e. the version with weight information erased.
  • A trait to unify the “inner” parts of an Action, i.e. the structs inside the Action enum’s variants. This trait is used for the “weighed” version of each struct, i.e. the version without weight information erased.
  • A data structure that can be deserialized from any data format supported by Serde.
  • Trait for binding static EntryDef property access for a type. This trait maps a type to its corresponding EntryDef property at compile time.
  • Helper trait for deserializing Entrys to the correct type.
  • Anything which has an owned HoloHashOf.
  • Data that requires a validation status.
  • Every HoloHash is generic over HashType. Additionally, every HashableContent has an associated HashType. The HashType is the glue that binds together HashableContent with its hash.
  • Any implementor of HashableContent may be used in a HoloHashed to pair data with its HoloHash representation. It also has an associated HashType.
  • Adds convenience methods for constructing HoloHash and HoloHashed from some HashableContent
  • Adds convenience methods for constructing HoloHash and HoloHashed from some HashableContent
  • A helper trait for finding the app defined link type from a ZomeIndex and LinkType.
  • A PrimitiveHashType is one with a multihash prefix. In contrast, a non-primitive hash type could be one of several primitive types, e.g. an AnyDhtHash can represent one of three primitive types.
  • A data structure that can be serialized into any data format supported by Serde.
  • Simple and safe type conversions that may fail in a controlled way under some circumstances. It is the reciprocal of TryInto.
  • An attempted conversion that consumes self, which may or may not be expensive.
  • Helper trait for types that are internally represented as u8 but need to be used as indicies into containers.
  • A utility trait for associating a data enum with a unit enum that has the same variants.

Functions

Type Aliases

Derive Macros