Documentation
¶
Overview ¶
Package core contains common definitions used by other modules.
Index ¶
- Constants
- type Arguments
- type ArtifactManager
- type Bootstrapper
- type Cascade
- type ClassDescriptor
- type CodeDescriptor
- type Component
- type Components
- type Entropy
- type Event
- type EventBus
- type JetCoordinator
- type JetRole
- type Ledger
- type Logger
- type LogicCallContext
- type LogicRunner
- type MachineLogicExecutor
- type MachineType
- type Network
- type ObjectDescriptor
- type Pulse
- type PulseManager
- type PulseNumber
- type Reaction
- type RecordRef
- type RefIterator
- type RemoteProcedure
Constants ¶
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. )
const ( PulseNumberSize = 4 EntropySize = 64 )
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
// GetCode returns code from code record by provided reference.
//
// This method is used by VM to fetch code for execution.
GetCode(ref RecordRef, machinePref []MachineType) (CodeDescriptor, error)
// GetClass 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.
GetClass(head RecordRef, state *RecordRef) (ClassDescriptor, error)
// GetObject 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.
GetObject(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(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)
// 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.
//
// Activation reference will be this object's identifier and referred as "object head".
ActivateObject(domain, request, class, parent RecordRef, memory []byte) (*RecordRef, error)
// ActivateObjectDelegate is similar to ActivateObj but it created object will be parent's delegate of provided class.
ActivateObjectDelegate(domain, request, class, parent RecordRef, memory []byte) (*RecordRef, 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(domain, request, obj RecordRef) (*RecordRef, 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(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 event
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(machinePref []MachineType) (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
// 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
}
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 {
Network Network
Ledger Ledger
LogicRunner LogicRunner
EventBus EventBus
Bootstrapper Bootstrapper
APIRunner Component
Metrics Component
}
Components is a registry for other core interfaces Fields order are important and represent start and stop order in the daemon
type Entropy ¶ added in v0.2.0
type Entropy [EntropySize]byte
Entropy is 64 random bytes used in every pseudo-random calculations.
type Event ¶ added in v0.3.0
type Event interface {
// Serialize serializes event.
Serialize() (io.Reader, error)
// Get reference returns referenced object.
GetReference() RecordRef
// GetOperatingRole returns operating jet role for given event type.
GetOperatingRole() JetRole
// React handles event and returns associated reaction.
React(Components) (Reaction, error)
}
Event is a routable packet, ATM just a method call
type EventBus ¶ added in v0.3.0
type EventBus interface {
// Dispatch an `Event` and get a `Reaction` or error from remote host.
Dispatch(Event) (Reaction, error)
// DispatchAsync dispatches an `Event` to remote host.
DispatchAsync(Event)
}
EventBus interface
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 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
HandleEvent(Event) (Reaction, error)
}
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 event at level Debug.
Debug(...interface{})
// Debugln logs a event at level Debug.
Debugln(...interface{})
// Debugf formatted logs a event at level Debug.
Debugf(string, ...interface{})
// Info logs a event at level Info.
Info(...interface{})
// Infoln logs a event at level Info.
Infoln(...interface{})
// Infof formatted logs a event at level Info.
Infof(string, ...interface{})
// Warn logs a event at level Warn.
Warn(...interface{})
// Warnln logs a event at level Warn.
Warnln(...interface{})
// Warnf formatted logs a event at level Warn.
Warnf(string, ...interface{})
// Error logs a event at level Error.
Error(...interface{})
// Errorln logs a event at level Error.
Errorln(...interface{})
// Errorf formatted logs a event at level Error.
Errorf(string, ...interface{})
// Fatal logs a event at level Fatal and than call os.exit().
Fatal(...interface{})
// Fatalln logs a event at level Fatal and than call os.exit().
Fatalln(...interface{})
// Fatalf formatted logs a event at level Fatal and than call os.exit().
Fatalf(string, ...interface{})
// Panic logs a event at level Panic and than call panic().
Panic(...interface{})
// Panicln logs a event at level Panic and than call panic().
Panicln(...interface{})
// Panicf formatted logs a event at level Panic and than call panic().
Panicf(string, ...interface{})
// SetOutput sets the output destination for the logger.
SetOutput(w io.Writer)
}
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 ¶
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 Network ¶
type Network interface {
// SendEvent sends a event.
SendEvent(nodeID RecordRef, method string, event Event) ([]byte, error)
// SendEvent sends a event.
SendCascadeEvent(data Cascade, method string, event Event) 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
// ClassDescriptor returns descriptor for fetching object's class data.
ClassDescriptor(state *RecordRef) (ClassDescriptor, error)
// Children returns object's children references.
Children() RefIterator
}
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 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
NewRefFromBase58 deserializes reference from base58 encoded string.
func (RecordRef) Domain ¶
func (ref RecordRef) Domain() [RecordIDSize]byte
Domain returns domain ID part of reference.
type RefIterator ¶ added in v0.0.6
type RemoteProcedure ¶
RemoteProcedure is remote procedure call function.