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 JetCoordinator
- type JetRole
- type Ledger
- type Logger
- type LogicCallContext
- type LogicRunner
- type MachineLogicExecutor
- type MachineType
- type Message
- type MessageRouter
- type Metrics
- type Network
- type ObjectDescriptor
- type Pulse
- type PulseManager
- type PulseNumber
- type RecordRef
- type RefIterator
- type RemoteProcedure
- type Response
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 // 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 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 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 ¶
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 ¶
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 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.