core.node.subsystems

Package core.node.subsystems

Types

ArtemisMessagingService class ArtemisMessagingService : MessagingService

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.

DataVendingService class DataVendingService : AbstractNodeService

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.

E2ETestKeyManagementService class E2ETestKeyManagementService : KeyManagementService

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

InMemoryIdentityService class InMemoryIdentityService : IdentityService

Simple identity service which caches parties and provides functionality for efficient lookup.

InMemoryNetworkMapCache open class InMemoryNetworkMapCache : NetworkMapCache

Extremely simple in-memory cache of the network map.

KeyManagementService interface 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.

MonitoringService class MonitoringService

Provides access to various metrics and ways to notify monitoring services of things, for sysadmin purposes. This is not an interface because it is too lightweight to bother mocking out.

NetworkMapCache interface NetworkMapCache

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. The cache wraps around a map fetched from an authoritative service, and adds easy lookup of the data stored within it. Generally it would be initialised with a specified network map service, which it fetches data from and then subscribes to updates of.

NodeWalletService class NodeWalletService : WalletService

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.

StorageService interface 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.

StorageServiceImpl open class StorageServiceImpl : StorageService
Wallet abstract class 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.

WalletImpl class WalletImpl : 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.

WalletService interface 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

Exceptions

NetworkCacheError sealed class NetworkCacheError : Exception

Properties

TOPIC_DEFAULT_POSTFIX val TOPIC_DEFAULT_POSTFIX: String

Postfix for base topics when sending a request to a service.

Functions

linearHeadsOfType fun <T : LinearState> WalletService.linearHeadsOfType(): <ERROR CLASS>