state

package
v1.0.5 Latest Latest
Warning

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

Go to latest
Published: Jan 9, 2019 License: LGPL-3.0 Imports: 10 Imported by: 1

Documentation

Overview

Package state manages the main accounts trie. It follows the flow as bellow:

         o
         |
[ revertable state ]
         |
  [ stacked map ] -> [ journal ] -> [ playback(staging) ] -> [ updated trie ]
         |
   [ trie cache ]
         |
  [ read-only trie ]

It's much simpler than Ethereum's statedb. An important difference with statedb is the logic of account suicide. TODO: explain more

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Account

type Account struct {
	Balance     *big.Int
	Energy      *big.Int
	BlockTime   uint64
	Master      []byte // master address
	CodeHash    []byte // hash of code
	StorageRoot []byte // merkle root of the storage trie
}

Account is the Thor consensus representation of an account. RLP encoded objects are stored in main account trie.

func (*Account) CalcEnergy

func (a *Account) CalcEnergy(blockTime uint64) *big.Int

CalcEnergy calculates energy based on current block time.

func (*Account) IsEmpty

func (a *Account) IsEmpty() bool

IsEmpty returns if an account is empty. An empty account has zero balance and zero length code hash.

type Creator

type Creator struct {
	// contains filtered or unexported fields
}

Creator state creator to cut-off kv dependency.

func NewCreator

func NewCreator(kv kv.GetPutter) *Creator

NewCreator create a new state creator.

func (*Creator) NewState

func (c *Creator) NewState(root thor.Bytes32) (*State, error)

NewState create a new state object.

type Stage

type Stage struct {
	// contains filtered or unexported fields
}

Stage abstracts changes on the main accounts trie.

func (*Stage) Commit

func (s *Stage) Commit() (thor.Bytes32, error)

Commit commits all changes into main accounts trie and storage tries.

func (*Stage) Hash

func (s *Stage) Hash() (thor.Bytes32, error)

Hash computes hash of the main accounts trie.

type State

type State struct {
	// contains filtered or unexported fields
}

State manages the main accounts trie.

func New

func New(root thor.Bytes32, kv kv.GetPutter) (*State, error)

New create an state object.

func (*State) BuildStorageTrie added in v1.0.5

func (s *State) BuildStorageTrie(addr thor.Address) (*trie.SecureTrie, error)

BuildStorageTrie build up storage trie for given address with cumulative changes.

func (*State) DecodeStorage

func (s *State) DecodeStorage(addr thor.Address, key thor.Bytes32, dec func([]byte) error)

DecodeStorage get and decode storage value. Error returned by dec will be absorbed by State instance.

func (*State) Delete

func (s *State) Delete(addr thor.Address)

Delete delete an account at the given address. That's set balance, energy and code to zero value.

func (*State) EncodeStorage

func (s *State) EncodeStorage(addr thor.Address, key thor.Bytes32, enc func() ([]byte, error))

EncodeStorage set storage value encoded by given enc method. Error returned by end will be absorbed by State instance.

func (*State) Err

func (s *State) Err() error

Err returns first occurred error.

func (*State) Exists

func (s *State) Exists(addr thor.Address) bool

Exists returns whether an account exists at the given address. See Account.IsEmpty()

func (*State) GetBalance

func (s *State) GetBalance(addr thor.Address) *big.Int

GetBalance returns balance for the given address.

func (*State) GetCode

func (s *State) GetCode(addr thor.Address) []byte

GetCode returns code for the given address.

func (*State) GetCodeHash

func (s *State) GetCodeHash(addr thor.Address) thor.Bytes32

GetCodeHash returns code hash for the given address.

func (*State) GetEnergy

func (s *State) GetEnergy(addr thor.Address, blockTime uint64) *big.Int

GetEnergy get energy for the given address at block number specified.

func (*State) GetMaster

func (s *State) GetMaster(addr thor.Address) thor.Address

GetMaster get master for the given address. Master can move energy, manage users...

func (*State) GetRawStorage

func (s *State) GetRawStorage(addr thor.Address, key thor.Bytes32) rlp.RawValue

GetRawStorage returns storage value in rlp raw for given address and key.

func (*State) GetStorage

func (s *State) GetStorage(addr thor.Address, key thor.Bytes32) thor.Bytes32

GetStorage returns storage value for the given address and key.

func (*State) NewCheckpoint

func (s *State) NewCheckpoint() int

NewCheckpoint makes a checkpoint of current state. It returns revision of the checkpoint.

func (*State) RevertTo

func (s *State) RevertTo(revision int)

RevertTo revert to checkpoint specified by revision.

func (*State) SetBalance

func (s *State) SetBalance(addr thor.Address, balance *big.Int)

SetBalance set balance for the given address.

func (*State) SetCode

func (s *State) SetCode(addr thor.Address, code []byte)

SetCode set code for the given address.

func (*State) SetEnergy

func (s *State) SetEnergy(addr thor.Address, energy *big.Int, blockTime uint64)

SetEnergy set energy at block number for the given address.

func (*State) SetMaster

func (s *State) SetMaster(addr thor.Address, master thor.Address)

SetMaster set master for the given address.

func (*State) SetRawStorage

func (s *State) SetRawStorage(addr thor.Address, key thor.Bytes32, raw rlp.RawValue)

SetRawStorage set storage value in rlp raw.

func (*State) SetStorage

func (s *State) SetStorage(addr thor.Address, key, value thor.Bytes32)

SetStorage set storage value for the given address and key.

func (*State) Spawn

func (s *State) Spawn(root thor.Bytes32) *State

Spawn create a new state object shares current state's underlying db. Also errors will be reported to current state.

func (*State) Stage

func (s *State) Stage() *Stage

Stage makes a stage object to compute hash of trie or commit all changes.

Jump to

Keyboard shortcuts

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