Documentation
¶
Index ¶
- Constants
- Variables
- func MarshalUnitData(u types.UnitData) ([]byte, error)
- func NewRecoveredState(stateData io.Reader, udc UnitDataConstructor, opts ...Option) (*State, *Header, error)
- func NewStateNodeCounter() *stateNodeCounter
- type Action
- func AddDummyUnit(id types.UnitID) Action
- func AddOrPromoteUnit(id types.UnitID, data types.UnitData) Action
- func AddUnit(id types.UnitID, data types.UnitData) Action
- func AddUnitWithLock(id types.UnitID, data types.UnitData, l []byte) Action
- func DeleteUnit(id types.UnitID) Action
- func MarkForDeletion(id types.UnitID, deletionRound uint64) Action
- func RemoveStateLock(id types.UnitID) Action
- func SetStateLock(id types.UnitID, stateLockTx []byte) Action
- func UpdateUnitData(id types.UnitID, f UpdateFunction) Action
- type CRC32Reader
- type CRC32Writer
- type Header
- type Index
- type InorderTraverser
- type KeyExtractor
- type Log
- type Option
- type Options
- type ShardState
- type State
- func (s *State) AddUnitLog(id types.UnitID, txrHash []byte) error
- func (s *State) Apply(actions ...Action) error
- func (s *State) CalculateRoot() (uint64, []byte, error)
- func (s *State) Clone() *State
- func (s *State) Commit(uc *types.UnicityCertificate) error
- func (s *State) CommittedUC() *types.UnicityCertificate
- func (s *State) CreateIndex(ke KeyExtractor[string]) (Index[string], error)
- func (s *State) CreateUnitStateProof(id types.UnitID, logIndex int) (*types.UnitStateProof, error)
- func (s *State) GetUnit(id types.UnitID, committed bool) (Unit, error)
- func (s *State) GetUnits(unitTypeIDPtr *uint32, pdr *types.PartitionDescriptionRecord) ([]types.UnitID, error)
- func (s *State) HashAlgorithm() crypto.Hash
- func (s *State) IsCommitted() (bool, error)
- func (s *State) Prune() error
- func (s *State) ReleaseToSavepoint(id int)
- func (s *State) Revert()
- func (s *State) RollbackToSavepoint(id int)
- func (s *State) Savepoint() (int, error)
- func (s *State) Serialize(writer io.Writer, committed bool, executedTransactions map[string]uint64) error
- func (s *State) Size() (uint64, error)
- func (s *State) Traverse(traverser avl.Traverser[types.UnitID, Unit]) error
- type Unit
- type UnitDataConstructor
- type UnitV1
- func (u *UnitV1) AddUnitLog(hashAlgorithm crypto.Hash, txrHash []byte) error
- func (u *UnitV1) Clone() Unit
- func (u *UnitV1) Data() types.UnitData
- func (u *UnitV1) DeletionRound() uint64
- func (u *UnitV1) GetVersion() types.Version
- func (u *UnitV1) IsDummy() bool
- func (u *UnitV1) IsExpired(currentRoundNumber uint64) bool
- func (u *UnitV1) IsStateLocked() bool
- func (u *UnitV1) LastLogIndex() int
- func (u *UnitV1) Logs() []*Log
- func (u *UnitV1) StateLockTx() []byte
- func (u *UnitV1) String() string
- type UpdateFunction
Constants ¶
const CBORChecksumLength = 5
Variables ¶
var (
ErrUnitAlreadyUnlocked = errors.New("unit already unlocked")
)
Functions ¶
func NewRecoveredState ¶
func NewStateNodeCounter ¶
func NewStateNodeCounter() *stateNodeCounter
Types ¶
type Action ¶
type Action func(s ShardState, hashAlgorithm crypto.Hash) error
func AddDummyUnit ¶
AddDummyUnit adds a new "dummy" unit with the given identifier. A dummy unit is a unit without unit data.
func AddOrPromoteUnit ¶
AddOrPromoteUnit adds a new unit or promotes an existing dummy unit.
func AddUnitWithLock ¶
AddUnitWithLock adds a new unit with given identifier, unit data and lock.
func DeleteUnit ¶
DeleteUnit removes the unit from the state with given identifier.
func MarkForDeletion ¶
MarkForDeletion marks the given unit to be deleted at future round i.e. logical delete. Logically deleted units cannot be used.
func RemoveStateLock ¶
RemoveStateLock removes the existing state lock and increments counter
func SetStateLock ¶
SetStateLock sets new state lock and increments counter
func UpdateUnitData ¶
func UpdateUnitData(id types.UnitID, f UpdateFunction) Action
UpdateUnitData changes the data of the item, leaves owner as is.
type CRC32Reader ¶
type CRC32Reader struct {
// contains filtered or unexported fields
}
func NewCRC32Reader ¶
func NewCRC32Reader(reader io.Reader, checksumLength int) *CRC32Reader
func (*CRC32Reader) Read ¶
func (c *CRC32Reader) Read(p []byte) (n int, err error)
A hacky way to calculate the checksum of a data stream that has checksum appended to the end. Makes sure that the last checksumLength bytes are not included in the checksum calculation.
func (*CRC32Reader) Sum ¶
func (c *CRC32Reader) Sum() uint32
type CRC32Writer ¶
type CRC32Writer struct {
// contains filtered or unexported fields
}
func NewCRC32Writer ¶
func NewCRC32Writer(writer io.Writer) *CRC32Writer
func (*CRC32Writer) Sum ¶
func (c *CRC32Writer) Sum() uint32
type Index ¶
type Index[T comparable] map[T][]types.UnitID
stateIndexer traverses the state tree and constructs an index using the keyExtractor
func CreateIndex ¶
func CreateIndex[T comparable](s *State, ke KeyExtractor[T]) (Index[T], error)
type InorderTraverser ¶
type InorderTraverser struct {
// contains filtered or unexported fields
}
func NewInorderTraverser ¶
func NewInorderTraverser(visitFn func(unitID types.UnitID, unit Unit) error) *InorderTraverser
func (*InorderTraverser) Traverse ¶
func (s *InorderTraverser) Traverse(n *node) error
type KeyExtractor ¶
type KeyExtractor[T comparable] func(unit Unit) (T, error)
stateIndexer traverses the state tree and constructs an index using the keyExtractor
type Log ¶
type Log struct {
TxRecordHash []byte // the hash of the transaction record that brought the unit to the state described by given log entry.
UnitLedgerHeadHash []byte // the new head hash of the unit ledger
NewUnitData types.UnitData
DeletionRound uint64
NewStateLockTx []byte
}
Log contains a state changes of the unit during the transaction execution.
func NewUnitLog ¶
type ShardState ¶
type State ¶
type State struct {
// contains filtered or unexported fields
}
State is a data structure that keeps track of units, unit ledgers, and calculates global state tree root hash.
State can be changed by calling Apply function with one or more Action function. Savepoint method can be used to add a special marker to the state that allows all actions that are executed after savepoint was established to be rolled back. In the other words, savepoint lets you roll back part of the state changes instead of the entire state. Releasing a savepoint does NOT trigger a state root hash calculation. To calculate the root hash of the state use method CalculateRoot. Calling a Commit method commits and releases all savepoints.
func NewEmptyState ¶
func (*State) Apply ¶
Apply applies given actions to the state. All Action functions are executed together as a single atomic operation. If any of the Action functions returns an error all previous state changes made by any of the action function will be reverted.
func (*State) Clone ¶
Clone returns a clone of the state. The original state and the cloned state can be used by different goroutines but can never be merged. The cloned state is usually used by read only operations (e.g. unit proof generation).
func (*State) Commit ¶
func (s *State) Commit(uc *types.UnicityCertificate) error
Commit makes the changes in the latest savepoint permanent.
func (*State) CommittedUC ¶
func (s *State) CommittedUC() *types.UnicityCertificate
CommittedUC returns the Unicity Certificate of the committed state.
func (*State) CreateIndex ¶
func (*State) CreateUnitStateProof ¶
func (*State) HashAlgorithm ¶
func (*State) IsCommitted ¶
Returns true if state is clean and contains no uncommitted changes. Does not care if the committed state is certified with an UC or not.
func (*State) ReleaseToSavepoint ¶
ReleaseToSavepoint destroys all savepoints, keeping all state changes after it was created. If a savepoint with given id does not exist then this method does nothing.
Releasing savepoints does NOT trigger a state root hash calculation. To calculate the root hash of the state a Commit method must be called.
func (*State) RollbackToSavepoint ¶
RollbackToSavepoint destroys savepoints without keeping the changes in the state tree. All actions that were executed after the savepoint was established are rolled back, restoring the state to what it was at the time of the savepoint.
func (*State) Savepoint ¶
Savepoint creates a new savepoint and returns an id of the savepoint. Use RollbackToSavepoint to roll back all changes made after calling Savepoint method. Use ReleaseToSavepoint to save all changes made to the state.
type UnitDataConstructor ¶
UnitDataConstructor is a function that constructs an empty UnitData structure based on UnitID
type UnitV1 ¶
type UnitV1 struct {
// contains filtered or unexported fields
}
UnitV1 is a node in the state tree. It is used to build state tree and unit ledgers.