core

package
v0.6.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 23, 2018 License: Apache-2.0 Imports: 10 Imported by: 0

Documentation

Overview

Package core contains common definitions used by other modules.

Index

Constants

View Source
const (
	// Joined
	NodeJoined = NodeState(iota + 1)
	// Prepared
	NodePrepared
	// Active
	NodeActive
	// Leaved
	NodeLeaved
	// Suspended
	NodeSuspended
)

TODO: document all node states

View Source
const (
	// RoleVirtualExecutor is responsible for current pulse CPU operations.
	RoleVirtualExecutor = JetRole(iota + 1)
	// RoleVirtualValidator is responsible for previous pulse CPU operations.
	RoleVirtualValidator
	// RoleLightExecutor is responsible for current pulse Disk operations.
	RoleLightExecutor
	// RoleLightValidator is responsible for previous pulse Disk operations.
	RoleLightValidator
	// RoleHeavyExecutor is responsible for permanent Disk operations.
	RoleHeavyExecutor
)
View Source
const (
	RoleUnknown = NodeRole(iota)
	RoleVirtual
	RoleHeavyMaterial
	RoleLightMaterial
)
View Source
const (
	// PulseNumberSize declares the number of bytes in the pulse number
	PulseNumberSize = 4
	// EntropySize declares the number of bytes in the pulse entropy
	EntropySize = 64
)
View Source
const (
	// RecordHashSize is a record hash size. We use 224-bit SHA-3 hash (28 bytes).
	RecordHashSize = 28
	// RecordIDSize is relative record address.
	RecordIDSize = PulseNumberSize + RecordHashSize
	// RecordRefSize is absolute records address (including domain ID).
	RecordRefSize = RecordIDSize * 2
)
View Source
const FirstPulseNumber = 65537

FirstPulseNumber is the hardcoded first pulse number. Because first 65536 numbers are saved for the system's needs

Variables

View Source
var (
	// ErrUnknown returned when error type cannot be defined.
	ErrUnknown = errors.New("unknown error")
	// ErrDeactivated returned when requested object is deactivated.
	ErrDeactivated = errors.New("object is deactivated")
)

GenesisPulse is a first pulse for the system because first 2 bits of pulse number and first 65536 pulses a are used by system needs and pulse numbers are related to the seconds of Unix time for calculation pulse numbers we use the formula = unix.Now() - firstPulseDate + 65536

Functions

func UnMarshalResponse added in v0.6.0

func UnMarshalResponse(resp []byte, typeHolders []interface{}) ([]interface{}, error)

UnMarshalResponse unmarshals return values by cbor

Types

type ActiveNode added in v0.4.0

type ActiveNode struct {
	// NodeID is the unique identifier of the node
	NodeID RecordRef
	// PulseNum is the pulse number after which the new state is assigned to the node
	PulseNum PulseNumber
	// State is the node state
	State NodeState
	// JetRoles is the set of candidate JetRoles for the node
	Roles []NodeRole
	// PublicKey is the public key of the node
	PublicKey *ecdsa.PublicKey
	// Addess is the network adress of the node
	Address string
	// Version of node software
	Version string
}

type ActiveNodeComponent added in v0.6.1

type ActiveNodeComponent interface {
	// GetSelf get active node for the current insolard. Returns nil if the current insolard is not an active node.
	GetSelf() *ActiveNode
	// GetActiveNode get active node by its reference. Returns nil if node is not found.
	GetActiveNode(ref RecordRef) *ActiveNode
	// GetActiveNodes get active nodes.
	GetActiveNodes() []*ActiveNode
	// GetActiveNodesByRole get active nodes by role
	GetActiveNodesByRole(role JetRole) []RecordRef
}

type Arguments

type Arguments []byte

Arguments is a dedicated type for arguments, that represented as bynary cbored blob

func MarshalArgs added in v0.6.0

func MarshalArgs(args ...interface{}) (Arguments, error)

MarshalArgs marshals arguments by cbor

type ArtifactManager

type ArtifactManager interface {
	// GenesisRef returns the root record reference.
	//
	// Root record is the parent for all top-level records.
	GenesisRef() *RecordRef

	// RegisterRequest creates or check call request record and returns it RecordRef.
	// (used by VM on executing side)
	RegisterRequest(ctx Context, message Message) (*RecordID, error)

	// GetCode returns code from code record by provided reference according to provided machine preference.
	//
	// This method is used by VM to fetch code for execution.
	GetCode(ctx Context, ref RecordRef) (CodeDescriptor, error)

	// GetClass returns descriptor for provided state.
	//
	// If provided state is nil, the latest state will be returned (with deactivation check). Returned descriptor will
	// provide methods for fetching all related data.
	GetClass(ctx Context, head RecordRef, state *RecordRef) (ClassDescriptor, error)

	// GetObject returns descriptor for provided state.
	//
	// If provided state is nil, the latest state will be returned (with deactivation check). Returned descriptor will
	// provide methods for fetching all related data.
	GetObject(ctx Context, head RecordRef, state *RecordRef) (ObjectDescriptor, error)

	// GetDelegate returns provided object's delegate reference for provided class.
	//
	// Object delegate should be previously created for this object. If object delegate does not exist, an error will
	// be returned.
	GetDelegate(ctx Context, head, asClass RecordRef) (*RecordRef, error)

	// GetChildren returns children iterator.
	//
	// During iteration children refs will be fetched from remote source (parent object).
	GetChildren(ctx Context, parent RecordRef, pulse *PulseNumber) (RefIterator, error)

	// DeclareType creates new type record in storage.
	//
	// Type is a contract interface. It contains one method signature.
	DeclareType(ctx Context, domain, request RecordRef, typeDec []byte) (*RecordID, error)

	// DeployCode creates new code record in storage.
	//
	// Code records are used to activate class or as migration code for an object.
	DeployCode(ctx Context, domain, request RecordRef, code []byte, machineType MachineType) (*RecordID, error)

	// ActivateClass creates activate class record in storage. Provided code reference will be used as a class code.
	//
	// Request reference will be this class'es identifier and referred as "class head".
	ActivateClass(ctx Context, domain, request, code RecordRef, machineType MachineType) (*RecordID, error)

	// DeactivateClass creates deactivate record in storage. Provided reference should be a reference to the head of
	// the class. If class is already deactivated, an error should be returned.
	//
	// Deactivated class cannot be changed or instantiate objects.
	DeactivateClass(ctx Context, domain, request, class RecordRef, state RecordID) (*RecordID, error)

	// UpdateClass creates amend class record in storage. Provided reference should be a reference to the head of
	// the class. Migrations are references to code records.
	//
	// Returned reference will be the latest class state (exact) reference. Migration code will be executed by VM to
	// migrate objects memory in the order they appear in provided slice.
	UpdateClass(ctx Context, domain, request, class, code RecordRef, machineType MachineType, state RecordID) (*RecordID, error)

	// ActivateObject creates activate object record in storage. Provided class reference will be used as object's class.
	// If memory is not provided, the class default memory will be used.
	//
	// Request reference will be this object's identifier and referred as "object head".
	ActivateObject(ctx Context, domain, request, class, parent RecordRef, memory []byte) (*RecordID, error)

	// ActivateObjectDelegate is similar to ActivateObject but it created object will be parent's delegate of provided class.
	ActivateObjectDelegate(ctx Context, domain, request, class, parent RecordRef, memory []byte) (*RecordID, error)

	// DeactivateObject creates deactivate object record in storage. Provided reference should be a reference to the head
	// of the object. If object is already deactivated, an error should be returned.
	//
	// Deactivated object cannot be changed.
	DeactivateObject(ctx Context, domain, request, obj RecordRef) (*RecordID, error)

	// UpdateObject creates amend object record in storage. Provided reference should be a reference to the head of the
	// object. Provided memory well be the new object memory.
	//
	// Returned reference will be the latest object state (exact) reference.
	UpdateObject(ctx Context, domain, request, obj RecordRef, memory []byte) (*RecordID, error)
}

ArtifactManager is a high level storage interface.

type Bootstrapper added in v0.2.0

type Bootstrapper interface {
	GetRootDomainRef() *RecordRef
	Info() ([]byte, error)
}

Bootstrapper is the global bootstrapper handler. Other system parts communicate with bootstrapper through it.

type Cascade added in v0.2.0

type Cascade struct {
	// NodeIds contains the slice of node identifiers that will receive the message
	NodeIds []RecordRef
	// GeneratedEntropy is used for pseudorandom cascade building
	Entropy Entropy
	// Replication factor is the number of children nodes of the each node of the cascade
	ReplicationFactor uint
}

Cascade contains routing data for cascade sending

type CaseBind added in v0.5.0

type CaseBind struct {
	Records map[RecordRef][]CaseRecord // ordered cases for each object
}

CaseBinder is a whole result of executor efforts on every object it seen on this pulse

type CaseBindReplay added in v0.5.0

type CaseBindReplay struct {
	Pulse      Pulse
	Records    []CaseRecord
	RecordsLen int
	Step       int
	Fail       int
}

type CaseRecord added in v0.5.0

type CaseRecord struct {
	Type   CaseRecordType
	ReqSig []byte
	Resp   interface{}
}

CaseRecord is one record of validateable object calling history

type CaseRecordType added in v0.5.0

type CaseRecordType int

CaseRecordType is a type of caserecord

const (
	CaseRecordTypeStart CaseRecordType
	CaseRecordTypeResult
	CaseRecordTypeRequest
	CaseRecordTypeGetObject
	CaseRecordTypeRouteCall
	CaseRecordTypeSaveAsChild
	CaseRecordTypeGetObjChildren
	CaseRecordTypeSaveAsDelegate
	CaseRecordTypeGetDelegate
	CaseRecordTypeDeactivateObject
)

Types of records

type Certificate added in v0.6.1

type Certificate interface {
	GetPublicKey() (string, error)

	// TODO should be removed
	GetPrivateKey() (string, error)

	// TODO should be removed
	GetEcdsaPrivateKey() *ecdsa.PrivateKey
}

Certificate interface provides methods to manage keys

type ClassDescriptor

type ClassDescriptor interface {
	// HeadRef returns head reference to represented class record.
	HeadRef() *RecordRef

	// StateID returns reference to represented class state record.
	StateID() *RecordID

	// CodeDescriptor returns descriptor for fetching class's code data.
	CodeDescriptor() CodeDescriptor
}

ClassDescriptor represents meta info required to fetch all object data.

type CodeDescriptor

type CodeDescriptor interface {
	// Ref returns reference to represented code record.
	Ref() *RecordRef

	// MachineType returns code machine type for represented code.
	MachineType() MachineType

	// Code returns code data.
	Code() ([]byte, error)
}

CodeDescriptor represents meta info required to fetch all code data.

type Component

type Component interface {
	Start(components Components) error
	Stop() error
}

Component controller methods

type Components

type Components struct {
	Certificate         Certificate
	ActiveNodeComponent ActiveNodeComponent
	LogicRunner         LogicRunner
	Ledger              Ledger
	Network             Network
	MessageBus          MessageBus
	Metrics             Component
	Bootstrapper        Bootstrapper
	APIRunner           Component
	NetworkCoordinator  NetworkCoordinator
}

Components is a registry for other core interfaces Fields order are important and represent start and stop order in the daemon

type Context added in v0.6.1

type Context interface {
	context.Context
	// Log returns provided Logger.
	Log() Logger
	// TraceID returns current TraceID.
	TraceID() string
}

A Context wraps context.Context, add provides util helpers.

type Entropy added in v0.2.0

type Entropy [EntropySize]byte

Entropy is 64 random bytes used in every pseudo-random calculations.

type JetCoordinator added in v0.0.6

type JetCoordinator interface {
	// IsAuthorized checks for role on concrete pulse for the address.
	IsAuthorized(role JetRole, obj RecordRef, pulse PulseNumber, node RecordRef) (bool, error)

	// QueryRole returns node refs responsible for role bound operations for given object and pulse.
	QueryRole(role JetRole, obj RecordRef, pulse PulseNumber) ([]RecordRef, error)
}

JetCoordinator provides methods for calculating Jet affinity (e.g. to which Jet a message should be sent).

type JetRole added in v0.0.6

type JetRole int

JetRole is number representing a node role.

type Ledger

type Ledger interface {
	// GetArtifactManager returns artifact manager to work with.
	GetArtifactManager() ArtifactManager

	// GetJetCoordinator returns jet coordinator to work with.
	GetJetCoordinator() JetCoordinator

	// GetPulseManager returns pulse manager to work with.
	GetPulseManager() PulseManager
}

Ledger is the global ledger handler. Other system parts communicate with ledger through it.

type Logger added in v0.0.6

type Logger interface {
	// SetLevel sets log level.
	SetLevel(string) error
	// GetLevel gets log level.
	GetLevel() string

	// Debug logs a message at level Debug.
	Debug(...interface{})
	// Debugln logs a message at level Debug.
	Debugln(...interface{})
	// Debugf formatted logs a message at level Debug.
	Debugf(string, ...interface{})

	// Info logs a message at level Info.
	Info(...interface{})
	// Infoln logs a message at level Info.
	Infoln(...interface{})
	// Infof formatted logs a message at level Info.
	Infof(string, ...interface{})

	// Warn logs a message at level Warn.
	Warn(...interface{})
	// Warnln logs a message at level Warn.
	Warnln(...interface{})
	// Warnf formatted logs a message at level Warn.
	Warnf(string, ...interface{})

	// Error logs a message at level Error.
	Error(...interface{})
	// Errorln logs a message at level Error.
	Errorln(...interface{})
	// Errorf formatted logs a message at level Error.
	Errorf(string, ...interface{})

	// Fatal logs a message at level Fatal and than call os.exit().
	Fatal(...interface{})
	// Fatalln logs a message at level Fatal and than call os.exit().
	Fatalln(...interface{})
	// Fatalf formatted logs a message at level Fatal and than call os.exit().
	Fatalf(string, ...interface{})

	// Panic logs a message at level Panic and than call panic().
	Panic(...interface{})
	// Panicln logs a message at level Panic and than call panic().
	Panicln(...interface{})
	// Panicf formatted logs a message at level Panic and than call panic().
	Panicf(string, ...interface{})

	// SetOutput sets the output destination for the logger.
	SetOutput(w io.Writer)
	// WithFields return copy of Logger with predefined fields.
	WithFields(map[string]interface{}) Logger
	// WithField return copy of Logger with predefined single field.
	WithField(string, interface{}) Logger
}

Logger is the interface for loggers used in the Insolar components.

type LogicCallContext added in v0.0.6

type LogicCallContext struct {
	Callee  *RecordRef // Contract that was called
	Request *RecordRef // ref of request
	Class   *RecordRef // Class of the callee
	Parent  *RecordRef // Parent of the callee
	Caller  *RecordRef // Contract that made the call
	Time    time.Time  // Time when call was made
	Pulse   Pulse      // Number of the pulse
}

LogicCallContext is a context of contract execution

type LogicRunner

type LogicRunner interface {
	Execute(Context, Message) (res Reply, err error)
	ValidateCaseBind(Context, Message) (res Reply, err error)
	ProcessValidationResults(Context, Message) (res Reply, err error)
	ExecutorResults(Context, Message) (res Reply, err error)
	Validate(ref RecordRef, p Pulse, cr []CaseRecord) (int, error) // TODO hide?
	OnPulse(Pulse) error
}

LogicRunner is an interface that should satisfy logic executor

type MachineLogicExecutor

type MachineLogicExecutor interface {
	CallMethod(ctx *LogicCallContext, code RecordRef, data []byte, method string, args Arguments) (newObjectState []byte, methodResults Arguments, err error)
	CallConstructor(ctx *LogicCallContext, code RecordRef, name string, args Arguments) (objectState []byte, err error)
	Stop() error
}

MachineLogicExecutor is an interface for implementers of one particular machine type

type MachineType

type MachineType int

MachineType is a type of virtual machine

const (
	MachineTypeNotExist             = 0
	MachineTypeBuiltin  MachineType = iota + 1
	MachineTypeGoPlugin

	MachineTypesLastID
)

Real constants of MachineType

type Message

type Message interface {
	// Type returns message type.
	Type() MessageType
	// Target returns target for this message. If nil, Message will be sent for all actors for the role returned by
	// Role method.
	Target() *RecordRef
	// TargetRole returns jet role to actors of which Message should be sent.
	TargetRole() JetRole
	// GetCaller returns initiator of this event.
	GetCaller() *RecordRef
}

Message is a routable packet, ATM just a method call

type MessageBus added in v0.4.0

type MessageBus interface {
	// Send an `Message` and get a `Reply` or error from remote host.
	Send(Context, Message) (Reply, error)
	// Register saves message handler in the registry. Only one handler can be registered for a message type.
	Register(p MessageType, handler MessageHandler) error
	// MustRegister is a Register wrapper that panics if an error was returned.
	MustRegister(p MessageType, handler MessageHandler)
}

MessageBus interface

type MessageHandler added in v0.4.0

type MessageHandler func(Context, Message) (Reply, error)

MessageHandler is a function for message handling. It should be registered via Register method.

type MessageType added in v0.4.0

type MessageType byte

MessageType is an enum type of message.

const (

	// TypeCallMethod calls method and returns result
	TypeCallMethod MessageType = iota
	// TypeCallConstructor is a message for calling constructor and obtain its reply
	TypeCallConstructor
	// TypeExecutorResults message that goes to new Executor to validate previous Executor actions through CaseBind
	TypeExecutorResults
	// TypeValidateCaseBind sends CaseBind form Executor to Validators for redo all actions
	TypeValidateCaseBind
	// TypeValidationResult sends from Validator to new Executor with results of validation actions of previous Executor
	TypeValidationResults

	// TypeRequestCall registers call on storage.
	TypeRequestCall
	// TypeGetCode retrieves code from storage.
	TypeGetCode
	// TypeGetClass retrieves class from storage.
	TypeGetClass
	// TypeGetObject retrieves object from storage.
	TypeGetObject
	// TypeGetDelegate retrieves object represented as provided class.
	TypeGetDelegate
	// TypeGetChildren retrieves object represented as provided class.
	TypeGetChildren
	// TypeDeclareType creates new type.
	TypeDeclareType
	// TypeDeployCode creates new code.
	TypeDeployCode
	// TypeActivateClass activates class.
	TypeActivateClass
	// TypeDeactivateClass deactivates class.
	TypeDeactivateClass
	// TypeUpdateClass amends class.
	TypeUpdateClass
	// TypeActivateObject activates object.
	TypeActivateObject
	// TypeActivateObjectDelegate similar to ActivateObjType but it creates object as parent's delegate of provided class.
	TypeActivateObjectDelegate
	// TypeDeactivateObject deactivates object.
	TypeDeactivateObject
	// TypeUpdateObject amends object.
	TypeUpdateObject
	// TypeRegisterChild registers child on the parent object.
	TypeRegisterChild
	// TypeJetDrop carries jet drop to validators
	TypeJetDrop
	// TypeSetRecord saves record in storage.
	TypeSetRecord

	// TypeBootstrapRequest used for bootstrap object generation.
	TypeBootstrapRequest
)

func (MessageType) String added in v0.5.0

func (i MessageType) String() string

type Network

type Network interface {
	// SendMessage sends a message.
	SendMessage(nodeID RecordRef, method string, msg Message) ([]byte, error)
	// SendCascadeMessage sends a message.
	SendCascadeMessage(data Cascade, method string, msg Message) error
	// GetAddress returns an origin address.
	GetAddress() string
	// RemoteProcedureRegister is remote procedure register func.
	RemoteProcedureRegister(name string, method RemoteProcedure)
	// GetNodeID returns current node id.
	GetNodeID() RecordRef
	// GetPrivateKey returns a private key.
	GetPrivateKey() *ecdsa.PrivateKey
}

Network is interface for network modules facade.

type NetworkCoordinator added in v0.6.0

type NetworkCoordinator interface {
	// Authorize authorizes node by verifying it's signature
	Authorize(nodeRef RecordRef, seed []byte, signatureRaw []byte) (string, []NodeRole, error)
	// RegisterNode registers node in nodedomain
	RegisterNode(publicKey string, numberOfBootstrapNodes int, majorityRule int, roles []string, ip string) ([]byte, error)
	// WriteActiveNodes write active nodes to ledger
	WriteActiveNodes(number PulseNumber, activeNodes []*ActiveNode) error
}

NetworkCoordinator encapsulates logic of network configuration

type NodeRole added in v0.6.0

type NodeRole int

NodeRole holds role of node

func GetRoleFromString added in v0.6.0

func GetRoleFromString(role string) NodeRole

GetRoleFromString converts role from string to NodeRole

type NodeState added in v0.4.0

type NodeState uint8

NodeState is the state of the node

type ObjectDescriptor

type ObjectDescriptor interface {
	// HeadRef returns head reference to represented object record.
	HeadRef() *RecordRef

	// StateID returns reference to object state record.
	StateID() *RecordID

	// Memory fetches object memory from storage.
	Memory() []byte

	// ClassDescriptor returns descriptor for fetching object's class data.
	ClassDescriptor(state *RecordRef) (ClassDescriptor, error)

	// Children returns object's children references.
	Children(pulse *PulseNumber) (RefIterator, error)
}

ObjectDescriptor represents meta info required to fetch all object data.

type Pulse added in v0.2.0

type Pulse struct {
	PulseNumber     PulseNumber
	NextPulseNumber PulseNumber
	Entropy         Entropy
	Signs           map[string]PulseSenderConfirmation
}

Pulse is base data structure for a pulse.

func (*Pulse) PulseDuration added in v0.4.0

func (p *Pulse) PulseDuration() time.Duration

type PulseManager added in v0.2.0

type PulseManager interface {
	// Current returns current pulse structure.
	Current() (*Pulse, error)

	// Set set's new pulse and closes current jet drop.
	Set(Pulse) error
}

PulseManager provides Ledger's methods related to Pulse.

type PulseNumber added in v0.0.6

type PulseNumber uint32

PulseNumber is a sequential number of Pulse. Upper 2 bits are reserved for use in references (scope), must be zero otherwise. Valid Absolute PulseNum must be >65536. If PulseNum <65536 it is a relative PulseNum

func Bytes2PulseNumber added in v0.2.0

func Bytes2PulseNumber(buf []byte) PulseNumber

Bytes2PulseNumber deserialize pulse number.

func CalculatePulseNumber added in v0.4.0

func CalculatePulseNumber(now time.Time) PulseNumber

CalculatePulseNumber is helper for calculating next pulse number, when a network is being started

func (PulseNumber) Bytes added in v0.2.0

func (pn PulseNumber) Bytes() []byte

Bytes serializes pulse number.

type PulseSenderConfirmation added in v0.4.0

type PulseSenderConfirmation struct {
	PulseNumber     PulseNumber
	ChosenPublicKey string
	Entropy         Entropy
	Signature       []byte
}

PulseSenderConfirmation contains confirmations of the pulse from other pulsars Because the system is using BFT for consensus between pulsars, because of it All pulsar send to the chosen pulsar their confirmations Every node in the network can verify the signatures

type RecordID added in v0.4.0

type RecordID [RecordIDSize]byte

RecordID is a unified record ID.

func GenRecordID added in v0.5.0

func GenRecordID(pn PulseNumber, h []byte) (recid RecordID)

GenRecordID generates RecordID byte representation.

func (*RecordID) Bytes added in v0.5.0

func (id *RecordID) Bytes() []byte

Bytes returns byte slice of RecordID.

type RecordRef

type RecordRef [RecordRefSize]byte

RecordRef is a unified record reference.

func ComposeRecordRef added in v0.5.0

func ComposeRecordRef(domain RecordID, record RecordID) (ref RecordRef)

ComposeRecordRef returns RecordRef composed from domain and record

func GenRequest added in v0.5.0

func GenRequest(pn PulseNumber, payload []byte) *RecordRef

GenRequest calculates RecordRef for request message from pulse number and request's payload.

func NewRefFromBase58 added in v0.2.0

func NewRefFromBase58(str string) RecordRef

NewRefFromBase58 deserializes reference from base58 encoded string.

func (RecordRef) Domain

func (ref RecordRef) Domain() RecordID

Domain returns domain ID part of reference.

func (RecordRef) Equal

func (ref RecordRef) Equal(other RecordRef) bool

Equal checks if reference points to the same record.

func (*RecordRef) GetDomainID added in v0.5.0

func (ref *RecordRef) GetDomainID() (id RecordID)

GetDomainID returns domain's RecordID.

func (*RecordRef) GetRecordID added in v0.5.0

func (ref *RecordRef) GetRecordID() (id RecordID)

GetRecordID returns record's RecordID.

func (*RecordRef) SetDomain added in v0.5.0

func (ref *RecordRef) SetDomain(recID RecordID)

SetDomain set domain's RecordID.

func (*RecordRef) SetRecord added in v0.5.0

func (ref *RecordRef) SetRecord(recID RecordID)

SetRecord set record's RecordID.

func (RecordRef) String

func (ref RecordRef) String() string

String outputs base58 RecordRef representation.

type RefIterator added in v0.0.6

type RefIterator interface {
	Next() (*RecordRef, error)
	HasNext() bool
}

RefIterator is used for iteration over affined children(parts) of container.

type RemoteProcedure

type RemoteProcedure func(args [][]byte) ([]byte, error)

RemoteProcedure is remote procedure call function.

type Reply added in v0.4.0

type Reply interface {
	// Type returns message type.
	Type() ReplyType
}

Reply for an `Message`

type ReplyType added in v0.4.0

type ReplyType byte

ReplyType is an enum type of message reply.

type Signature added in v0.6.1

type Signature interface {
	GetSign() []byte
	GetSender() RecordRef
	IsValid(key *ecdsa.PublicKey) bool
}

type SignedMessage added in v0.6.1

type SignedMessage interface {
	Message
	Signature

	Message() Message
}

SignedMessage by senders private key.

Directories

Path Synopsis
Package message represents message that messagebus can route
Package message represents message that messagebus can route
Package reply represents responses to messages of the messagebus
Package reply represents responses to messages of the messagebus

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL