All Types

core.utilities.ANSIProgressRenderer

Knows how to render a ProgressTracker to the terminal using coloured, emoji-fied output. Useful when writing small command line tools, demos, tests etc. Just set the progressTracker field and it will go ahead and start drawing if the terminal supports it. Otherwise it just prints out the name of the step whenever it changes.

core.node.AbstractNode

A base node implementation that can be customised either for production (with real implementations that do real I/O), or a mock implementation suitable for unit test environments.

core.messaging.AllPossibleRecipients

A special base class for the set of all possible recipients, without having to identify who they all are.

core.Amount

Amount represents a positive quantity of currency, measured in pennies, which are the smallest representable units.

core.node.services.ArtemisMessagingService

This class implements the MessagingService API using Apache Artemis, the successor to their ActiveMQ product. Artemis is a message queue broker and here, we embed the entire server inside our own process. Nodes communicate with each other using (by default) an Artemis specific protocol, but it supports other protocols like AQMP/1.0 as well.

core.Attachment

An attachment is a ZIP (or an optionally signed JAR) that contains one or more files. Attachments are meant to contain public static data which can be referenced from transactions and utilised from contracts. Good examples of how attachments are meant to be used include:

core.node.servlets.AttachmentDownloadServlet

Allows the node administrator to either download full attachment zips, or individual files within those zips.

core.node.services.AttachmentStorage

An attachment store records potentially large binary objects, identified by their hash. Note that attachments are immutable and can never be erased once inserted

core.node.servlets.AttachmentUploadServlet
core.AuthenticatedObject

Wraps an object that was signed by a public key, which may be a well known/recognised institutional key.

core.utilities.BriefLogFormatter

A Java logging formatter that writes more compact output than the default.

kotlin.ByteArray (extensions in package core.crypto)
kotlin.ByteArray (extensions in package core.serialization)
contracts.Cash

A cash transaction may split and merge money represented by a set of (issuer, depositRef) pairs, across multiple input and output states. Imagine a Bitcoin transaction but in which all UTXOs had a colour (a blend of issuer+depositRef) and you couldnt merge outputs of two colours together, but you COULD put them in the same transaction.

core.Command

Command data/content plus pubkey pair: the signature is stored at the end of the serialized bytes

core.CommandData

Marker interface for classes that represent commands

contracts.CommercialPaper
core.node.ConfigurationException
core.Contract

Implemented by a program that implements business logic on the shared ledger. All participants run this code for every LedgerTransaction they see on the network, for every input and output state. All contracts must accept the transaction for it to be accepted: failure of any aborts the entire thing. The time is taken from a trusted timestamp attached to the transaction itself i.e. it is NOT necessarily the current time.

core.ContractFactory

A contract factory knows how to lazily load and instantiate contract objects.

core.ContractState

A contract state (or just "state") contains opaque data used by a contract program. It can be thought of as a disk file that the program can use to persist data across transactions. States are immutable: once created they are never updated, instead, any changes must generate a new successor state.

contracts.CrowdFund

This is a basic crowd funding contract. It allows a party to create a funding opportunity, then for others to pledge during the funding period , and then for the party to either accept the funding (if the target has been reached) return the funds to the pledge-makers (if the target has not been reached).

core.node.services.DataVendingService

This class sets up network message handlers for requests from peers for data keyed by hash. It is a piece of simple glue that sits between the network layer and the database layer.

core.crypto.DigitalSignature

A wrapper around a digital signature. The covering field is a generic tag usable by whatever is interpreting the signature. It isnt used currently, but experience from Bitcoin suggests such a feature is useful, especially when building partially signed transactions.

kotlin.Double (extensions in package core)
contracts.DummyContract
core.crypto.DummyPublicKey
core.node.services.DummyTimestampingAuthority
core.node.services.E2ETestKeyManagementService

A simple in-memory KMS that doesnt bother saving keys to disk. A real implementation would:

core.utilities.Emoji

A simple wrapper class that contains icons and support for printing them only when were connected to a terminal.

protocols.FetchAttachmentsProtocol

Given a set of hashes either loads from from local storage or requests them from the other peer. Downloaded attachments are saved to local storage automatically.

protocols.FetchDataProtocol

An abstract protocol for fetching typed data from a remote peer.

protocols.FetchTransactionsProtocol

Given a set of tx hashes (IDs), either loads them from local disk or asks the remote peer to provide them.

core.node.services.FixedIdentityService

Scaffolding: a dummy identity service that just expects to have identities loaded off disk or found elsewhere.

core.node.services.IdentityService

An identity service maintains an bidirectional map of Partys to their associated public keys and thus supports lookup of a party given its key. This is obviously very incomplete and does not reflect everything a real identity service would provide.

core.serialization.ImmutableClassSerializer

Serializes properties and deserializes by using the constructor. This assumes that all backed properties are set via the constructor and the class is immutable.

contracts.InsufficientBalanceException
kotlin.Int (extensions in package core)
kotlin.collections.Iterable (extensions in package core)
kotlin.collections.Iterable (extensions in package contracts)
core.node.services.KeyManagementService

The KMS is responsible for storing and using private keys to sign things. An implementation of this may, for example, call out to a hardware security module that enforces various auditing and frequency-of-use requirements.

java.security.KeyPair (extensions in package core.crypto)
core.LedgerTransaction

A LedgerTransaction wraps the data needed to calculate one or more successor states from a set of input states. It is the first step after extraction from a WireTransaction. The signatures at this point have been lined up with the commands from the wire, and verified/looked up.

core.messaging.LegallyIdentifiableNode

Info about a network node that has is operated by some sort of verified identity.

kotlin.collections.List (extensions in package core)
core.messaging.Message

A message is defined, at this level, to be a (topic, timestamp, byte arrays) triple, where the topic is a string in Java-style reverse dns form, with "platform." being a prefix reserved by the platform for its own use. Vendor specific messages can be defined, but use your domain name as the prefix e.g. "uk.co.bigbank.messages.SomeMessage".

core.messaging.MessageHandlerRegistration
core.messaging.MessageRecipientGroup

A base class for a set of recipients specifically identified by the sender.

core.messaging.MessageRecipients

The interface for a group of message recipients (which may contain only one recipient)

core.messaging.MessagingService

A MessagingService sits at the boundary between a message routing / networking layer and the core platform code.

core.messaging.MessagingServiceBuilder

This class lets you start up a MessagingService. Its purpose is to stop you from getting access to the methods on the messaging service interface until you have successfully started up the system. One of these objects should be the only way to obtain a reference to a MessagingService. Startup may be a slow process: some implementations may let you cast the returned future to an object that lets you get status info.

core.messaging.MockNetworkMap
core.NamedByHash

Implemented by anything that can be named by a secure hash value (e.g. transactions, attachments).

core.messaging.NetworkMap

A network map contains lists of nodes on the network along with information about their identity keys, services they provide and host names or IP addresses where they can be connected to. A reasonable architecture for the network map service might be one like the Tor directory authorities, where several nodes linked by RAFT or Paxos elect a leader and that leader distributes signed documents describing the network layout. Those documents can then be cached by every node and thus a network map can be retrieved given only a single successful peer connection.

core.node.Node

A Node manages a standalone server that takes part in the P2P network. It creates the services found in ServiceHub, loads important data off disk and starts listening for connections.

core.node.services.NodeAttachmentService

Stores attachments in the specified local directory, which must exist. Doesnt allow new attachments to be uploaded.

core.node.NodeConfiguration
core.node.NodeConfigurationFromProperties

A simple wrapper around a plain old Java .properties file. The keys have the same name as in the source code.

core.node.services.NodeTimestamperService

This class implements the server side of the timestamping protocol, using the local clock. A future version might add features like checking against other NTP servers to make sure the clock hasnt drifted by too much.

core.node.services.NodeWalletService

This class implements a simple, in memory wallet that tracks states that are owned by us, and also has a convenience method to auto-generate some self-issued cash states that can be used for test trading. A real wallet would persist states relevant to us into a database and once such a wallet is implemented, this scaffolding can be removed.

core.crypto.NullPublicKey
core.serialization.OpaqueBytes

A simple class that wraps a byte array and makes the equals/hashCode/toString methods work as you actually expect. In an ideal JVM this would be a value type and be completely overhead free. Project Valhalla is adding such functionality to Java, but it wont arrive for a few years yet

core.OwnableState
core.Party

A Party is well known (name, pubkey) pair. In a real system this would probably be an X.509 certificate.

core.PartyReference

Reference to something being stored or issued by a party e.g. in a vault or (more likely) on their normal ledger. The reference is intended to be encrypted so its meaningless to anyone other than the party.

java.nio.file.Path (extensions in package core)
java.security.PrivateKey (extensions in package core.crypto)
core.utilities.ProgressTracker

A progress tracker helps surface information about the progress of an operation to a user interface or API of some kind. It lets you define a set of steps that represent an operation. A step is represented by an object (typically a singleton).

core.protocols.ProtocolLogic

A sub-class of ProtocolLogic implements a protocol flow using direct, straight line blocking code. Thus you can write complex protocol logic in an ordinary fashion, without having to think about callbacks, restarting after a node crash, how many instances of your protocol there are running and so on.

core.protocols.ProtocolStateMachine

A ProtocolStateMachine instance is a suspendable fiber that delegates all actual logic to a ProtocolLogic instance. For any given flow there is only one PSM, even if that protocol invokes subprotocols.

java.security.PublicKey (extensions in package core.crypto)
core.Requirements
protocols.ResolveTransactionsProtocol

This protocol fetches each transaction identified by the given hashes from either disk or network, along with all their dependencies, and verifies them together using a single TransactionGroup. If no exception is thrown, then all the transactions have been successfully verified and inserted into the local database.

core.crypto.SecureHash
core.serialization.SerializedBytes

A type safe wrapper around a byte array that contains a serialised object. You can call SerializedBytes.deserialize to get the original object back.

core.node.services.ServiceHub

A service hub simply vends references to the other services a node has. Some of those services may be missing or mocked out. This class is useful to pass to chunks of pluggable code that might have need of many different kinds of functionality and you dont want to hard-code which types in the interface.

core.SignedTransaction

Container for a WireTransaction and attached signatures.

core.messaging.SingleMessageRecipient

A base class for the case of point-to-point messages

core.StateAndRef

A StateAndRef is simply a (state, ref) pair. For instance, a wallet (which holds available assets) contains these.

core.messaging.StateMachineManager

A StateMachineManager is responsible for coordination and persistence of multiple ProtocolStateMachine objects. Each such object represents an instantiation of a (two-party) protocol that has reached a particular point.

core.StateRef

A stateref is a pointer (reference) to a state, this is an equivalent of an "outpoint" in Bitcoin. It records which transaction defined the state and where in that transaction it was.

core.node.services.StorageService

A sketch of an interface to a simple key/value storage system. Intended for persistence of simple blobs like transactions, serialised protocol state machines and so on. Again, this isnt intended to imply lack of SQL or anything like that, this interface is only big enough to support the prototyping work.

kotlin.String (extensions in package core)
java.time.temporal.Temporal (extensions in package core)
core.ThreadBox

A threadbox is a simple utility that makes it harder to forget to take a lock before accessing some shared state. Simply define a private class to hold the data that must be grouped under the same lock, and then pass the only instance to the ThreadBox constructor. You can now use the locked method with a lambda to take the lock in a way that ensures itll be released if theres an exception.

core.TimestampCommand

If present in a transaction, contains a time that was verified by the timestamping authority/authorities whose public keys are identified in the containing Command object. The true time must be between (after, before)

core.node.services.TimestamperService

Simple interface (for testing) to an abstract timestamping service. Note that this is not "timestamping" in the blockchain sense of a total ordering of transactions, but rather, a signature from a well known/trusted timestamping service over a transaction that indicates the timestamp in it is accurate. Such a signature may not always be necessary: if there are multiple parties involved in a transaction then they can cross-check the timestamp themselves.

core.node.services.TimestampingError
protocols.TimestampingProtocol

The TimestampingProtocol class is the client code that talks to a NodeTimestamperService on some remote node. It is a ProtocolLogic, meaning it can either be a sub-protocol of some other protocol, or be driven independently.

core.messaging.TopicStringValidator

A singleton thats useful for validating topic strings

demos.TraderDemoProtocolBuyer
demos.TraderDemoProtocolSeller
core.TransactionBuilder

A mutable transaction thats in the process of being built, before all signatures are present.

core.TransactionConflictException
core.TransactionForVerification

A transaction in fully resolved and sig-checked form, ready for passing as input to a verification function.

core.TransactionGraphSearch

Given a map of transaction id to SignedTransaction, performs a breadth first search of the dependency graph from the starting point down in order to find transactions that match the given query criteria.

core.TransactionGroup

A TransactionGroup defines a directed acyclic graph of transactions that can be resolved with each other and then verified. Successful verification does not imply the non-existence of other conflicting transactions: simply that this subgraph does not contain conflicts and is accepted by the involved contracts.

core.TransactionResolutionException
core.TransactionVerificationException

Thrown if a verification fails due to a contract rejection.

core.TransientProperty

A simple wrapper that enables the use of Kotlins "val x by TransientProperty { ... }" syntax. Such a property will not be serialized to disk, and if its missing (or the first time its accessed), the initializer will be used to set it up. Note that the initializer will be called with the TransientProperty object locked.

protocols.TwoPartyTradeProtocol

This asset trading protocol implements a "delivery vs payment" type swap. It has two parties (B and S for buyer and seller) and the following steps:

core.TypeOnlyCommandData

Commands that inherit from this are intended to have no data items: its only their presence that matters.

core.UnknownContractException
core.utilities.UntrustworthyData

A small utility to approximate taint tracking: if a method gives you back one of these, it means the data came from a remote source that may be incentivised to pass us junk that violates basic assumptions and thus must be checked first. The wrapper helps you to avoid forgetting this vital step. Things you might want to check are:

core.node.services.Wallet

A wallet (name may be temporary) wraps a set of states that are useful for us to keep track of, for instance, because we own them. This class represents an immutable, stable state of a wallet: it is guaranteed not to change out from underneath you, even though the canonical currently-best-known wallet may change as we learn about new transactions from our peers and generate new transactions that consume states ourselves.

core.node.services.WalletService

A WalletService is responsible for securely and safely persisting the current state of a wallet to storage. The wallet service vends immutable snapshots of the current wallet for working with: if you build a transaction based on a wallet that isnt current, be aware that it may end up being invalid if the states that were used have been consumed by someone else first

core.WireTransaction

Transaction ready for serialisation, without any signatures attached.