mana

package
v0.7.5 Latest Latest
Warning

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

Go to latest
Published: Aug 9, 2021 License: Apache-2.0, BSD-2-Clause Imports: 17 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// EventTypePledge defines the type of a pledge event.
	EventTypePledge byte = iota
	// EventTypeRevoke defines the event type of a revoke event.
	EventTypeRevoke
	// EventTypeUpdate defines the event type of an updated event.
	EventTypeUpdate
)
View Source
const (
	// PrefixAccess is the storage prefix for access mana storage.
	PrefixAccess byte = iota

	// PrefixConsensus is the storage prefix for consensus mana storage.
	PrefixConsensus

	// PrefixAccessResearch is the storage prefix for research access mana storage.
	PrefixAccessResearch

	// PrefixConsensusResearch is the storage prefix for research consensus mana storage.
	PrefixConsensusResearch

	// PrefixEventStorage is the storage prefix for consensus mana event storage.
	PrefixEventStorage

	// PrefixConsensusPastVector is the storage prefix for consensus mana past vector storage.
	PrefixConsensusPastVector

	// PrefixConsensusPastMetadata is the storage prefix for consensus mana past vector metadata storage.
	PrefixConsensusPastMetadata
)
View Source
const (

	// OnlyMana1 takes only EBM1 into account when getting the mana values.
	OnlyMana1 float64 = 1.0
	// OnlyMana2 takes only EBM2 into account when getting the mana values.
	OnlyMana2 float64 = 0.0
	// Mixed takes both EBM1 and EBM2 into account (50-50) when getting the mana values.
	Mixed float64 = 0.5

	// DeltaStopUpdate stops the update of the effective mana value if it is in the delta interval of the the base mana
	// value. Base mana can only be an integer, and effective mana tends to this integer value over time if there are no
	// pledges or revokes.
	// It is used primarily for consensus mana, since for access mana, base mana changes wrt to time. The updates for
	// access mana stop when the base mana value AND the effective value is in DeltaStopUpdates interval of 0.
	DeltaStopUpdate float64 = 0.001

	// MinEffectiveMana defines the threshold to consider an effective mana value zero.
	MinEffectiveMana = 0.001
	// MinBaseMana defines the threshold to consider the base mana value zero.
	MinBaseMana = 0.001
)
View Source
const (
	// ConsensusBaseManaPastVectorMetadataStorageKey is the key to the consensus base vector metadata storage.
	ConsensusBaseManaPastVectorMetadataStorageKey = "consensusBaseManaVectorMetadata"
)

Variables

View Source
var (
	// ErrAlreadyUpdated is returned if mana is tried to be updated at a later time.
	ErrAlreadyUpdated = errors.New("already updated to a later timestamp")
	// ErrBaseManaNegative is returned if base mana will become negative.
	ErrBaseManaNegative = errors.New("base mana should never be negative")
	// ErrEffBaseManaNegative is returned if base mana will become negative.
	ErrEffBaseManaNegative = errors.New("effective base mana should never be negative")
	// ErrUnknownManaType is returned if mana type could not be identified.
	ErrUnknownManaType = errors.New("unknown mana type")
	// ErrNodeNotFoundInBaseManaVector is returned if the node is not found in the base mana vector.
	ErrNodeNotFoundInBaseManaVector = errors.New("node not present in base mana vector")
	// ErrInvalidWeightParameter is returned if an invalid weight parameter is passed.
	ErrInvalidWeightParameter = errors.New("invalid weight parameter, outside of [0,1]")
	// ErrInvalidTargetManaType is returned if a research base mana vector can't handle the target mana type.
	ErrInvalidTargetManaType = errors.New("invalid target mana type")
	// ErrUnknownManaEvent is returned if mana event type could not be identified.
	ErrUnknownManaEvent = errors.New("unknown mana event")
)
View Source
var (

	// Decay is the mana decay (gamma) (used in access mana), in 1/sec
	Decay = 0.00003209
)

Functions

func FromEventObjectStorage

func FromEventObjectStorage(_ []byte, data []byte) (result objectstorage.StorableObject, err error)

FromEventObjectStorage unmarshalls bytes into a persistable event.

func FromMetadataObjectStorage

func FromMetadataObjectStorage(_ []byte, data []byte) (result objectstorage.StorableObject, err error)

FromMetadataObjectStorage unmsarshalls bytes into a metadata.

func FromObjectStorage

func FromObjectStorage(key []byte, data []byte) (result objectstorage.StorableObject, err error)

FromObjectStorage is a factory method that creates a new PersistableBaseMana instance from a storage key of the objectstorage.

func IDFromPubKey

func IDFromPubKey(pubKey string) (iID identity.ID, err error)

IDFromPubKey returns the ID from the given public key.

func IDFromStr

func IDFromStr(idStr string) (iID identity.ID, err error)

IDFromStr decodes and returns an ID from base58.

func SetCoefficients

func SetCoefficients(ema1 float64, ema2 float64, dec float64)

SetCoefficients sets the coefficients for mana calculation.

Types

type AccessBaseMana

type AccessBaseMana struct {
	BaseMana2          float64
	EffectiveBaseMana2 float64
	LastUpdated        time.Time
}

AccessBaseMana holds information about the access base mana values of a single node.

func (*AccessBaseMana) BaseValue

func (a *AccessBaseMana) BaseValue() float64

BaseValue returns the base mana value (BM2).

func (*AccessBaseMana) EffectiveValue

func (a *AccessBaseMana) EffectiveValue() float64

EffectiveValue returns the effective base mana value (EBM2).

func (*AccessBaseMana) LastUpdate

func (a *AccessBaseMana) LastUpdate() time.Time

LastUpdate returns the last update time.

type AccessBaseManaVector

type AccessBaseManaVector struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

AccessBaseManaVector represents a base mana vector.

func (*AccessBaseManaVector) Book

func (a *AccessBaseManaVector) Book(txInfo *TxInfo)

Book books mana for a transaction.

func (*AccessBaseManaVector) ForEach

func (a *AccessBaseManaVector) ForEach(callback func(ID identity.ID, bm BaseMana) bool)

ForEach iterates over the vector and calls the provided callback.

func (*AccessBaseManaVector) FromPersistable

func (a *AccessBaseManaVector) FromPersistable(p *PersistableBaseMana) (err error)

FromPersistable fills the AccessBaseManaVector from persistable mana objects.

func (*AccessBaseManaVector) GetHighestManaNodes

func (a *AccessBaseManaVector) GetHighestManaNodes(n uint) (res []Node, t time.Time, err error)

GetHighestManaNodes returns the n highest mana nodes in descending order. It also updates the mana values for each node. If n is zero, it returns all nodes.

func (*AccessBaseManaVector) GetHighestManaNodesFraction added in v0.5.5

func (a *AccessBaseManaVector) GetHighestManaNodesFraction(p float64) (res []Node, t time.Time, err error)

GetHighestManaNodesFraction returns the highest mana that own 'p' percent of total mana. It also updates the mana values for each node. If p is zero or greater than one, it returns all nodes.

func (*AccessBaseManaVector) GetMana

func (a *AccessBaseManaVector) GetMana(nodeID identity.ID, optionalUpdateTime ...time.Time) (float64, time.Time, error)

GetMana returns Effective Base Mana 2.

func (*AccessBaseManaVector) GetManaMap

func (a *AccessBaseManaVector) GetManaMap(optionalUpdateTime ...time.Time) (res NodeMap, t time.Time, err error)

GetManaMap returns mana perception of the node..

func (*AccessBaseManaVector) Has

func (a *AccessBaseManaVector) Has(nodeID identity.ID) bool

Has returns if the given node has mana defined in the vector.

func (*AccessBaseManaVector) LoadSnapshot added in v0.5.7

func (a *AccessBaseManaVector) LoadSnapshot(snapshot map[identity.ID]SnapshotNode)

LoadSnapshot loads the initial mana state into the base mana vector.

func (*AccessBaseManaVector) RemoveZeroNodes

func (a *AccessBaseManaVector) RemoveZeroNodes()

RemoveZeroNodes removes the zero mana nodes from the vector.

func (*AccessBaseManaVector) SetMana

func (a *AccessBaseManaVector) SetMana(nodeID identity.ID, bm BaseMana)

SetMana sets the base mana for a node.

func (*AccessBaseManaVector) Size

func (a *AccessBaseManaVector) Size() int

Size returns the size of this mana vector.

func (*AccessBaseManaVector) ToPersistables

func (a *AccessBaseManaVector) ToPersistables() []*PersistableBaseMana

ToPersistables converts the AccessBaseManaVector to a list of persistable mana objects.

func (*AccessBaseManaVector) Type

func (a *AccessBaseManaVector) Type() Type

Type returns the type of this mana vector.

func (*AccessBaseManaVector) Update

func (a *AccessBaseManaVector) Update(nodeID identity.ID, t time.Time) error

Update updates the mana entries for a particular node wrt time.

func (*AccessBaseManaVector) UpdateAll

func (a *AccessBaseManaVector) UpdateAll(t time.Time) error

UpdateAll updates all entries in the base mana vector wrt to `t`.

type AccessManaSnapshot added in v0.6.2

type AccessManaSnapshot struct {
	Value     float64
	Timestamp time.Time
}

AccessManaSnapshot defines the record for the aMana snapshot of one node

type BaseMana

type BaseMana interface {
	BaseValue() float64
	EffectiveValue() float64
	LastUpdate() time.Time
	// contains filtered or unexported methods
}

BaseMana is an interface for a collection of base mana values of a single node.

type BaseManaJSON

type BaseManaJSON struct {
	BaseMana          float64 `json:"baseMana"`
	EffectiveBaseMana float64 `json:"effectiveBaseMana"`
	LastUpdated       int64   `json:"lastUpdated"`
}

BaseManaJSON is a JSON serializable form of a BaseMana.

type BaseManaVector

type BaseManaVector interface {
	// Type returns the type of the base mana vector (access/consensus).
	Type() Type
	// Size returns the size of the base mana vector.
	Size() int
	// Has tells if a certain node is present in the base mana vactor.
	Has(identity.ID) bool
	// LoadSnapshot loads the initial mana state into the base mana vector.
	LoadSnapshot(map[identity.ID]SnapshotNode)
	// Book books mana into the base mana vector.
	Book(*TxInfo)
	// Update updates the mana entries for a particular node wrt time.
	Update(identity.ID, time.Time) error
	// UpdateAll updates all entries in the base mana vector wrt to time.
	UpdateAll(time.Time) error
	// GetMana returns the mana value of a node with default weights.
	GetMana(identity.ID, ...time.Time) (float64, time.Time, error)
	// GetManaMap returns the map derived from the vector.
	GetManaMap(...time.Time) (NodeMap, time.Time, error)
	// GetHighestManaNodes returns the n highest mana nodes in descending order.
	GetHighestManaNodes(uint) ([]Node, time.Time, error)
	// GetHighestManaNodesFraction returns the highest mana that own 'p' percent of total mana.
	GetHighestManaNodesFraction(p float64) ([]Node, time.Time, error)
	// SetMana sets the base mana for a node.
	SetMana(identity.ID, BaseMana)
	// ForEach executes a callback function for each entry in the vector.
	ForEach(func(identity.ID, BaseMana) bool)
	// ToPersistables converts the BaseManaVector to a list of persistable mana objects.
	ToPersistables() []*PersistableBaseMana
	// FromPersistable fills the BaseManaVector from persistable mana objects.
	FromPersistable(*PersistableBaseMana) error
	// RemoveZeroNodes removes all zero mana nodes from the mana vector.
	RemoveZeroNodes()
}

BaseManaVector is an interface for vectors that store base mana values of nodes in the network.

func NewBaseManaVector

func NewBaseManaVector(vectorType Type) (BaseManaVector, error)

NewBaseManaVector creates and returns a new base mana vector for the specified type.

type CachedConsensusBasePastManaVectorMetadata

type CachedConsensusBasePastManaVectorMetadata struct {
	objectstorage.CachedObject
}

CachedConsensusBasePastManaVectorMetadata represents cached ConsensusBasePastVectorMetadata.

func (*CachedConsensusBasePastManaVectorMetadata) Consume

Consume unwraps the CachedConsensusBasePastManaVectorMetadata and passes a type-casted version to the consumer (if the object is not empty - it exists). It automatically releases the object when the consumer finishes.

func (*CachedConsensusBasePastManaVectorMetadata) Retain

Retain marks this CachedConsensusBasePastManaVectorMetadata to still be in use by the program.

func (*CachedConsensusBasePastManaVectorMetadata) Unwrap

Unwrap is the type-casted equivalent of Get. It returns nil if the object does not exist.

type CachedPersistableBaseMana

type CachedPersistableBaseMana struct {
	objectstorage.CachedObject
}

CachedPersistableBaseMana represents cached persistable mana.

func (*CachedPersistableBaseMana) Consume

func (cachedPbm *CachedPersistableBaseMana) Consume(consumer func(pbm *PersistableBaseMana)) bool

Consume unwraps the CachedObject and passes a type-casted version to the consumer (if the object is not empty - it exists). It automatically releases the object when the consumer finishes.

func (*CachedPersistableBaseMana) Retain

Retain marks this CachedObject to still be in use by the program.

func (*CachedPersistableBaseMana) Unwrap

func (cachedPbm *CachedPersistableBaseMana) Unwrap() *PersistableBaseMana

Unwrap is the type-casted equivalent of Get. It returns nil if the object does not exist.

type CachedPersistableEvent

type CachedPersistableEvent struct {
	objectstorage.CachedObject
}

CachedPersistableEvent represents cached persistable event.

func (*CachedPersistableEvent) Consume

func (c *CachedPersistableEvent) Consume(consumer func(pbm *PersistableEvent)) bool

Consume unwraps the CachedObject and passes a type-casted version to the consumer (if the object is not empty - it exists). It automatically releases the object when the consumer finishes.

func (*CachedPersistableEvent) Retain

Retain marks this CachedObject to still be in use by the program.

func (*CachedPersistableEvent) Unwrap

Unwrap is the type-casted equivalent of Get. It returns nil if the object does not exist.

type ConsensusBaseMana

type ConsensusBaseMana struct {
	BaseMana1 float64
}

ConsensusBaseMana holds information about the consensus base mana values of a single node.

func (*ConsensusBaseMana) BaseValue

func (c *ConsensusBaseMana) BaseValue() float64

BaseValue returns the base mana value (BM1).

func (*ConsensusBaseMana) EffectiveValue

func (c *ConsensusBaseMana) EffectiveValue() float64

EffectiveValue returns the effective base mana value (EBM1).

func (*ConsensusBaseMana) LastUpdate

func (c *ConsensusBaseMana) LastUpdate() time.Time

LastUpdate returns the last update time.

type ConsensusBaseManaVector

type ConsensusBaseManaVector struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

ConsensusBaseManaVector represents a base mana vector.

func (*ConsensusBaseManaVector) Book

func (c *ConsensusBaseManaVector) Book(txInfo *TxInfo)

Book books mana for a transaction.

func (*ConsensusBaseManaVector) ForEach

func (c *ConsensusBaseManaVector) ForEach(callback func(ID identity.ID, bm BaseMana) bool)

ForEach iterates over the vector and calls the provided callback.

func (*ConsensusBaseManaVector) FromPersistable

func (c *ConsensusBaseManaVector) FromPersistable(p *PersistableBaseMana) (err error)

FromPersistable fills the ConsensusBaseManaVector from persistable mana objects.

func (*ConsensusBaseManaVector) GetHighestManaNodes

func (c *ConsensusBaseManaVector) GetHighestManaNodes(n uint) (res []Node, t time.Time, err error)

GetHighestManaNodes return the n highest mana nodes in descending order. It also updates the mana values for each node. If n is zero, it returns all nodes.

func (*ConsensusBaseManaVector) GetHighestManaNodesFraction added in v0.5.5

func (c *ConsensusBaseManaVector) GetHighestManaNodesFraction(p float64) (res []Node, t time.Time, err error)

GetHighestManaNodesFraction returns the highest mana that own 'p' percent of total mana. It also updates the mana values for each node. If p is zero or greater than one, it returns all nodes.

func (*ConsensusBaseManaVector) GetMana

func (c *ConsensusBaseManaVector) GetMana(nodeID identity.ID, optionalUpdateTime ...time.Time) (float64, time.Time, error)

GetMana returns the Effective Base Mana.

func (*ConsensusBaseManaVector) GetManaMap

func (c *ConsensusBaseManaVector) GetManaMap(optionalUpdateTime ...time.Time) (res NodeMap, t time.Time, err error)

GetManaMap returns mana perception of the node.

func (*ConsensusBaseManaVector) Has

func (c *ConsensusBaseManaVector) Has(nodeID identity.ID) bool

Has returns if the given node has mana defined in the vector.

func (*ConsensusBaseManaVector) LoadSnapshot added in v0.5.7

func (c *ConsensusBaseManaVector) LoadSnapshot(snapshot map[identity.ID]SnapshotNode)

LoadSnapshot loads the snapshot.

func (*ConsensusBaseManaVector) RemoveZeroNodes

func (c *ConsensusBaseManaVector) RemoveZeroNodes()

RemoveZeroNodes removes the zero mana nodes from the vector.

func (*ConsensusBaseManaVector) SetMana

func (c *ConsensusBaseManaVector) SetMana(nodeID identity.ID, bm BaseMana)

SetMana sets the base mana for a node.

func (*ConsensusBaseManaVector) Size

func (c *ConsensusBaseManaVector) Size() int

Size returns the size of this mana vector.

func (*ConsensusBaseManaVector) ToPersistables

func (c *ConsensusBaseManaVector) ToPersistables() []*PersistableBaseMana

ToPersistables converts the baseManaVector to a list of persistable mana objects.

func (*ConsensusBaseManaVector) Type

func (c *ConsensusBaseManaVector) Type() Type

Type returns the type of this mana vector.

func (*ConsensusBaseManaVector) Update

func (c *ConsensusBaseManaVector) Update(nodeID identity.ID, t time.Time) error

Update updates the mana entries for a particular node wrt time.

func (*ConsensusBaseManaVector) UpdateAll

func (c *ConsensusBaseManaVector) UpdateAll(t time.Time) error

UpdateAll updates all entries in the base mana vector wrt to `t`.

type ConsensusBasePastManaVectorMetadata

type ConsensusBasePastManaVectorMetadata struct {
	objectstorage.StorableObjectFlags
	Timestamp time.Time `json:"timestamp"`
	// contains filtered or unexported fields
}

ConsensusBasePastManaVectorMetadata holds metadata for the past consensus mana vector.

func (*ConsensusBasePastManaVectorMetadata) Bytes

Bytes marshals the consensus base past mana vector metadata into a sequence of bytes.

func (*ConsensusBasePastManaVectorMetadata) ObjectStorageKey

func (c *ConsensusBasePastManaVectorMetadata) ObjectStorageKey() []byte

ObjectStorageKey returns the key of the metadata.

func (*ConsensusBasePastManaVectorMetadata) ObjectStorageValue

func (c *ConsensusBasePastManaVectorMetadata) ObjectStorageValue() []byte

ObjectStorageValue returns the bytes of the metadata.

func (*ConsensusBasePastManaVectorMetadata) Update

Update updates the metadata in storage.

type Event

type Event interface {
	// Type returns the type of the event.
	Type() byte
	// ToJSONSerializable returns a struct that can be serialized into JSON object.
	ToJSONSerializable() interface{}
	// ToPersistable returns an event that can be persisted.
	ToPersistable() *PersistableEvent
	// Timestamp returns the time of the event.
	Timestamp() time.Time
	// String returns a human readable version of the event.
	String() string
}

Event is the interface definition of an event.

func FromPersistableEvent

func FromPersistableEvent(p *PersistableEvent) (Event, error)

FromPersistableEvent parses a persistable event to a regular event.

type EventDefinitions

type EventDefinitions struct {
	// Fired when mana was pledged to a node.
	Pledged *events.Event
	// Fired when mana was revoked from a node.
	Revoked *events.Event
	// Fired when mana of a node was updated.
	Updated *events.Event
}

EventDefinitions represents events happening in the mana package.

func Events

func Events() *EventDefinitions

Events returns the events defined in the package.

type EventSlice

type EventSlice []Event

EventSlice is a slice of events.

func (EventSlice) Sort

func (e EventSlice) Sort()

Sort sorts a slice of events ASC by their timestamp with preference for RevokedEvent.

type InputInfo

type InputInfo struct {
	// Timestamp is the timestamp of the transaction that created this output (input).
	TimeStamp time.Time
	// Amount is the balance of the input.
	Amount float64
	// PledgeID is a map of mana types and the node to which the transaction that created the output pledges its mana type to.
	PledgeID map[Type]identity.ID
	// InputID is the input consumed.
	InputID ledgerstate.OutputID
}

InputInfo holds mana related info about an input within a transaction.

type Node

type Node struct {
	ID   identity.ID
	Mana float64
}

Node represents a node and its mana value.

func (Node) ToNodeStr

func (n Node) ToNodeStr() NodeStr

ToNodeStr converts a Node to a Nodestr

type NodeMap

type NodeMap map[identity.ID]float64

NodeMap is a map of nodeID and mana value.

func (NodeMap) GetPercentile

func (n NodeMap) GetPercentile(node identity.ID) (float64, error)

GetPercentile returns the top percentile the node belongs to relative to the network in terms of mana.

func (NodeMap) ToNodeStrList

func (n NodeMap) ToNodeStrList() []NodeStr

ToNodeStrList converts a NodeMap to list of NodeStr.

type NodeMapStr

type NodeMapStr map[string]float64

NodeMapStr is a NodeMap but with string id.

type NodeStr

type NodeStr struct {
	ShortNodeID string  `json:"shortNodeID"`
	NodeID      string  `json:"nodeID"`
	Mana        float64 `json:"mana"`
}

NodeStr defines a node and its mana value. The node ID is stringified.

type PersistableBaseMana

type PersistableBaseMana struct {
	objectstorage.StorableObjectFlags
	ManaType        Type
	BaseValues      []float64
	EffectiveValues []float64
	LastUpdated     time.Time
	NodeID          identity.ID
	// contains filtered or unexported fields
}

PersistableBaseMana represents a base mana vector that can be persisted.

func FromBytes

func FromBytes(bytes []byte) (result *PersistableBaseMana, consumedBytes int, err error)

FromBytes unmarshals a Persistable Base Mana from a sequence of bytes.

func Parse

func Parse(marshalUtil *marshalutil.MarshalUtil) (result *PersistableBaseMana, err error)

Parse unmarshals a persistableBaseMana using the given marshalUtil (for easier marshaling/unmarshaling).

func (*PersistableBaseMana) Bytes

func (persistableBaseMana *PersistableBaseMana) Bytes() []byte

Bytes marshals the persistable mana into a sequence of bytes.

func (*PersistableBaseMana) ObjectStorageKey

func (persistableBaseMana *PersistableBaseMana) ObjectStorageKey() []byte

ObjectStorageKey returns the key of the persistable mana.

func (*PersistableBaseMana) ObjectStorageValue

func (persistableBaseMana *PersistableBaseMana) ObjectStorageValue() []byte

ObjectStorageValue returns the bytes of the persistable mana.

func (*PersistableBaseMana) String

func (persistableBaseMana *PersistableBaseMana) String() string

String returns a human readable version of the PersistableBaseMana.

func (*PersistableBaseMana) Update

func (persistableBaseMana *PersistableBaseMana) Update(objectstorage.StorableObject)

Update updates the persistable mana in storage.

type PersistableEvent

type PersistableEvent struct {
	objectstorage.StorableObjectFlags
	Type          byte // pledge or revoke
	NodeID        identity.ID
	Amount        float64
	Time          time.Time
	ManaType      Type // access or consensus
	TransactionID ledgerstate.TransactionID
	InputID       ledgerstate.OutputID // for revoke event
	// contains filtered or unexported fields
}

PersistableEvent is a persistable event.

func (*PersistableEvent) Bytes

func (p *PersistableEvent) Bytes() []byte

Bytes marshals the persistable event into a sequence of bytes.

func (*PersistableEvent) ObjectStorageKey

func (p *PersistableEvent) ObjectStorageKey() []byte

ObjectStorageKey returns the key of the persistable mana.

func (*PersistableEvent) ObjectStorageValue

func (p *PersistableEvent) ObjectStorageValue() []byte

ObjectStorageValue returns the bytes of the event.

func (*PersistableEvent) ToStringKeys

func (p *PersistableEvent) ToStringKeys() []string

ToStringKeys returns the keys (properties) of the persistable event as a list of strings.

func (*PersistableEvent) ToStringValues

func (p *PersistableEvent) ToStringValues() []string

ToStringValues returns the persistableEvents values as a string array.

func (*PersistableEvent) Update

Update updates the event in storage.

type PledgedEvent

type PledgedEvent struct {
	NodeID        identity.ID
	Amount        float64
	Time          time.Time
	ManaType      Type // access or consensus
	TransactionID ledgerstate.TransactionID
}

PledgedEvent is the struct that is passed along with triggering a Pledged event.

func (*PledgedEvent) String added in v0.5.7

func (p *PledgedEvent) String() string

String returns a human readable version of the event.

func (*PledgedEvent) Timestamp

func (p *PledgedEvent) Timestamp() time.Time

Timestamp returns time the event was fired.

func (*PledgedEvent) ToJSONSerializable

func (p *PledgedEvent) ToJSONSerializable() interface{}

ToJSONSerializable returns a struct that can be serialized into JSON object.

func (*PledgedEvent) ToPersistable

func (p *PledgedEvent) ToPersistable() *PersistableEvent

ToPersistable returns an event that can be persisted.

func (*PledgedEvent) Type

func (p *PledgedEvent) Type() byte

Type returns the type of the event.

type PledgedEventJSON

type PledgedEventJSON struct {
	ManaType string  `json:"manaType"`
	NodeID   string  `json:"nodeID"`
	Time     int64   `json:"time"`
	TxID     string  `json:"txID"`
	Amount   float64 `json:"amount"`
}

PledgedEventJSON is a JSON serializable form of a PledgedEvent.

type RevokedEvent

type RevokedEvent struct {
	NodeID        identity.ID
	Amount        float64
	Time          time.Time
	ManaType      Type // shall only be consensus for now
	TransactionID ledgerstate.TransactionID
	InputID       ledgerstate.OutputID
}

RevokedEvent is the struct that is passed along with triggering a Revoked event.

func (*RevokedEvent) String added in v0.5.7

func (r *RevokedEvent) String() string

String returns a human readable version of the event.

func (*RevokedEvent) Timestamp

func (r *RevokedEvent) Timestamp() time.Time

Timestamp returns time the event was fired.

func (*RevokedEvent) ToJSONSerializable

func (r *RevokedEvent) ToJSONSerializable() interface{}

ToJSONSerializable returns a struct that can be serialized into JSON object.

func (*RevokedEvent) ToPersistable

func (r *RevokedEvent) ToPersistable() *PersistableEvent

ToPersistable returns an event that can be persisted.

func (*RevokedEvent) Type

func (r *RevokedEvent) Type() byte

Type returns the type of the event.

type RevokedEventJSON

type RevokedEventJSON struct {
	ManaType string  `json:"manaType"`
	NodeID   string  `json:"nodeID"`
	Time     int64   `json:"time"`
	TxID     string  `json:"txID"`
	Amount   float64 `json:"amount"`
	InputID  string  `json:"inputID"`
}

RevokedEventJSON is a JSON serializable form of a RevokedEvent.

type SnapshotNode added in v0.6.2

type SnapshotNode struct {
	AccessMana       AccessManaSnapshot
	SortedTxSnapshot SortedTxSnapshot
}

SnapshotNode defines the record for the mana snapshot of one node.

type SortedTxSnapshot added in v0.6.2

type SortedTxSnapshot []*TxSnapshot

SortedTxSnapshot defines a list of SnapshotInfo sorted by timestamp.

func (SortedTxSnapshot) Len added in v0.6.2

func (s SortedTxSnapshot) Len() int

func (SortedTxSnapshot) Less added in v0.6.2

func (s SortedTxSnapshot) Less(i, j int) bool

func (SortedTxSnapshot) Swap added in v0.6.2

func (s SortedTxSnapshot) Swap(i, j int)

type TxInfo

type TxInfo struct {
	// Timestamp is the timestamp of the transaction.
	TimeStamp time.Time
	// TransactionID is the ID of the transaction.
	TransactionID ledgerstate.TransactionID
	// TotalBalance is the amount of funds being transferred via the transaction.
	TotalBalance float64
	// PledgeID is a map of mana types and the node to which this transaction pledges its mana type to.
	PledgeID map[Type]identity.ID
	// InputInfos is a slice of InputInfo that holds mana related info about each input within the transaction.
	InputInfos []InputInfo
}

TxInfo holds information related to the transaction which we are processing for mana calculation.

type TxSnapshot added in v0.6.2

type TxSnapshot struct {
	Value     float64
	TxID      ledgerstate.TransactionID
	Timestamp time.Time
}

TxSnapshot defines the record of one transaction.

type Type

type Type byte

Type is the mana type.

const (
	// AccessMana is mana associated with access to the network.
	AccessMana Type = iota
	// ConsensusMana is mana associated with consensus weights in the network.
	ConsensusMana
	// WeightedMana is a weighted combination of Mana 1 (consensus) and Mana 2 (access) for research purposes.
	WeightedMana
	// ResearchAccess is a special type of WeightedMana, that targets access pledges.
	ResearchAccess
	// ResearchConsensus is a special type of WeightedMana, that targets consensus pledges.
	ResearchConsensus
)

func TypeFromString

func TypeFromString(stringType string) (Type, error)

TypeFromString parses a string and returns the type of mana it defines.

func (Type) String

func (t Type) String() string

String returns a string representation of the type of mana.

type UpdatedEvent

type UpdatedEvent struct {
	NodeID   identity.ID
	OldMana  BaseMana
	NewMana  BaseMana
	ManaType Type // access or consensus
}

UpdatedEvent is the struct that is passed along with triggering an Updated event.

func (*UpdatedEvent) String added in v0.5.7

func (u *UpdatedEvent) String() string

String returns a human readable version of the event.

func (*UpdatedEvent) Timestamp

func (u *UpdatedEvent) Timestamp() time.Time

Timestamp returns time the event was fired.

func (*UpdatedEvent) ToJSONSerializable

func (u *UpdatedEvent) ToJSONSerializable() interface{}

ToJSONSerializable returns a struct that can be serialized into JSON object.

func (*UpdatedEvent) ToPersistable

func (u *UpdatedEvent) ToPersistable() *PersistableEvent

ToPersistable converts the event to a persistable event.

func (*UpdatedEvent) Type

func (u *UpdatedEvent) Type() byte

Type returns the type of the event.

type UpdatedEventJSON

type UpdatedEventJSON struct {
	NodeID   string      `json:"nodeID"`
	OldMana  interface{} `json:"oldMana"`
	NewMana  interface{} `json:"newMana"`
	ManaType string      `json:"manaType"`
}

UpdatedEventJSON is a JSON serializable form of an UpdatedEvent.

Jump to

Keyboard shortcuts

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