core

package
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: Sep 18, 2018 License: Apache-2.0 Imports: 5 Imported by: 0

Documentation

Overview

Package core contains common definitions used by other modules.

Index

Constants

View Source
const (
	RoleVirtualExecutor  = JetRole(iota + 1) // Role responsible for current pulse CPU operations.
	RoleVirtualValidator                     // Role responsible for previous pulse CPU operations.
	RoleLightExecutor                        // Role responsible for current pulse Disk operations.
	RoleLightValidator                       // Role responsible for previous pulse Disk operations.
	RoleHeavyExecutor                        // Role responsible for permanent Disk operations.
)
View Source
const (
	PulseNumberSize = 4
	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
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Arguments

type Arguments []byte

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

type ArtifactManager

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

	// SetArchPref stores a list of preferred VM architectures memory.
	//
	// When returning classes storage will return compiled code according to this preferences. VM is responsible for
	// calling this method before fetching object in a new process. If preference is not provided, object getters will
	// return an error.
	SetArchPref(pref []MachineType)

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

	// GetLatestClass returns descriptor for latest state of the class known to storage.
	// If the class is deactivated, an error should be returned.
	//
	// Returned descriptor will provide methods for fetching all related data.
	GetLatestClass(head RecordRef) (ClassDescriptor, error)

	// GetLatestObj returns descriptor for latest state of the object known to storage.
	// If the object or the class is deactivated, an error should be returned.
	//
	// Returned descriptor will provide methods for fetching all related data.
	GetLatestObj(head RecordRef) (ObjectDescriptor, error)

	// GetObjChildren returns provided object's children references.
	GetObjChildren(head RecordRef) (RefIterator, error)

	// GetObjDelegate 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.
	GetObjDelegate(head, asClass RecordRef) (*RecordRef, error)

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

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

	// ActivateClass creates activate class record in storage. Provided code reference will be used as a class code.
	//
	// Activation reference will be this class'es identifier and referred as "class head".
	ActivateClass(domain, request RecordRef) (*RecordRef, 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(domain, request, class RecordRef) (*RecordRef, 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(domain, request, class, code RecordRef, migrationRefs []RecordRef) (*RecordRef, error)

	// ActivateObj 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.
	//
	// Activation reference will be this object's identifier and referred as "object head".
	ActivateObj(domain, request, class, parent RecordRef, memory []byte) (*RecordRef, error)

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

	// DeactivateObj 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.
	DeactivateObj(domain, request, obj RecordRef) (*RecordRef, error)

	// UpdateObj 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.
	UpdateObj(domain, request, obj RecordRef, memory []byte) (*RecordRef, error)
}

ArtifactManager is a high level storage interface.

type Bootstrapper added in v0.2.0

type Bootstrapper interface {
	GetRootDomainRef() *RecordRef
}

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
	// Entropy 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 ClassDescriptor

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

	// StateRef returns reference to represented class state record.
	StateRef() *RecordRef

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

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 fetches code from storage and returns first available machine type according to architecture
	// preferences.
	//
	// Code for returned machine type will be fetched by Code method.
	MachineType() (MachineType, error)

	// Code fetches code from storage. Code will be fetched according to architecture preferences
	// set via SetArchPref in artifact manager. If preferences are not provided, an error will be returned.
	Code() ([]byte, error)
}

CodeDescriptor represents meta info required to fetch all code data.

type Component

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

type Components

type Components map[string]Component

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)
}

type JetRole added in v0.0.6

type JetRole int

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

	// 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{})
}

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
	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  uint64     // Number of the pulse
}

LogicCallContext is a context of contract execution

type LogicRunner

type LogicRunner interface {
	Execute(msg Message) (res Response, err 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 {
	// Serialize serializes message.
	Serialize() (io.Reader, error)
	// Get reference returns referenced object.
	GetReference() RecordRef
	// GetOperatingRole returns operating jet role for given message type.
	GetOperatingRole() JetRole
}

Message is a routable packet, ATM just a method call

type MessageRouter

type MessageRouter interface {
	Route(msg Message) (resp Response, err error)
}

MessageRouter interface

type Metrics added in v0.2.0

type Metrics interface {
	// AddCounter adds new counter to metrics registry.
	AddCounter(name, componentName, help string) (prometheus.Counter, error)
	// AddGauge adds new gauge to metrics registry.
	AddGauge(name, componentName, help string) (prometheus.Gauge, error)
}

Metrics management interface.

type Network

type Network interface {
	// SendMessage sends a message.
	SendMessage(nodeID RecordRef, method string, msg Message) ([]byte, error)
	// SendMessage 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
}

Network is interface for network modules facade.

type ObjectDescriptor

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

	// StateRef returns reference to object state record.
	StateRef() *RecordRef

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

	// CodeDescriptor returns descriptor for fetching object's code data.
	CodeDescriptor() (CodeDescriptor, error)

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

ObjectDescriptor represents meta info required to fetch all object data.

type Pulse added in v0.2.0

type Pulse struct {
	PulseNumber PulseNumber
	Entropy     Entropy
}

Pulse is base data structure for a pulse.

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 Pulse) error
}

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 deserializes pulse number.

func (PulseNumber) Bytes added in v0.2.0

func (pn PulseNumber) Bytes() []byte

Bytes serializes pulse number.

type RecordRef

type RecordRef [RecordRefSize]byte

RecordRef is unified record reference.

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() [RecordIDSize]byte

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) String

func (ref RecordRef) String() string

type RefIterator added in v0.0.6

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

type RemoteProcedure

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

RemoteProcedure is remote procedure call function.

type Response

type Response interface {
	// Serialize serializes message.
	Serialize() (io.Reader, error)
}

Response to a `Message`

Jump to

Keyboard shortcuts

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