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.