ledger

package
v0.0.4 Latest Latest
Warning

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

Go to latest
Published: Jan 23, 2019 License: MIT Imports: 18 Imported by: 1

Documentation

Index

Constants

View Source
const (
	Receive byte = iota
	Send
	Open
	Change
	Unknown
)

Variables

View Source
var (
	ErrStoreEmpty             = errors.New("the store is empty")
	ErrBlockExists            = errors.New("block already exists")
	ErrBlockNotFound          = errors.New("block not found")
	ErrUncheckedBlockExists   = errors.New("unchecked block already exists")
	ErrUncheckedBlockNotFound = errors.New("unchecked block not found")
	ErrAccountExists          = errors.New("account already exists")
	ErrAccountNotFound        = errors.New("account not found")
	ErrTokenExists            = errors.New("token already exists")
	ErrTokenNotFound          = errors.New("token not found")
	ErrPendingExists          = errors.New("pending transaction already exists")
	ErrPendingNotFound        = errors.New("pending transaction not found")
	ErrFrontierExists         = errors.New("frontier already exists")
	ErrFrontierNotFound       = errors.New("frontier not found")
	ErrRepresentationNotFound = errors.New("representation not found")
)

Functions

func CloseLedger

func CloseLedger()

CloseLedger force release all ledger instance

Types

type Ledger

type Ledger struct {
	io.Closer
	// contains filtered or unexported fields
}

func NewLedger

func NewLedger(dir string) *Ledger

func (*Ledger) Account

func (l *Ledger) Account(hash types.Hash, txns ...db.StoreTxn) (*types.AccountMeta, error)

func (*Ledger) AddAccountMeta

func (l *Ledger) AddAccountMeta(meta *types.AccountMeta, txns ...db.StoreTxn) error

func (*Ledger) AddBlock

func (l *Ledger) AddBlock(blk types.Block, txns ...db.StoreTxn) error

func (*Ledger) AddFrontier

func (l *Ledger) AddFrontier(frontier *types.Frontier, txns ...db.StoreTxn) error

func (*Ledger) AddOrUpdateAccountMeta

func (l *Ledger) AddOrUpdateAccountMeta(meta *types.AccountMeta, txns ...db.StoreTxn) error

func (*Ledger) AddOrUpdateTokenMeta

func (l *Ledger) AddOrUpdateTokenMeta(address types.Address, meta *types.TokenMeta, txns ...db.StoreTxn) error

func (*Ledger) AddPending

func (l *Ledger) AddPending(pendingKey types.PendingKey, pending *types.PendingInfo, txns ...db.StoreTxn) error

func (*Ledger) AddRepresentation

func (l *Ledger) AddRepresentation(address types.Address, amount types.Balance, txns ...db.StoreTxn) error

func (*Ledger) AddTokenMeta

func (l *Ledger) AddTokenMeta(address types.Address, meta *types.TokenMeta, txns ...db.StoreTxn) error

func (*Ledger) AddUncheckedBlock

func (l *Ledger) AddUncheckedBlock(parentHash types.Hash, blk types.Block, kind types.UncheckedKind, txns ...db.StoreTxn) error

func (*Ledger) Balance

func (l *Ledger) Balance(account types.Address, txns ...db.StoreTxn) (map[types.Hash]types.Balance, error)

func (*Ledger) BatchUpdate

func (l *Ledger) BatchUpdate(fn func(txn db.StoreTxn) error) error

BatchUpdate MUST pass the same txn

func (*Ledger) BlockCheck

func (l *Ledger) BlockCheck(block types.Block) (ProcessResult, error)

func (*Ledger) BlockProcess

func (l *Ledger) BlockProcess(block types.Block) error

func (*Ledger) Close

func (l *Ledger) Close() error

func (*Ledger) CountFrontiers

func (l *Ledger) CountFrontiers(txns ...db.StoreTxn) (uint64, error)

func (*Ledger) CountSmartContrantBlocks added in v0.0.2

func (l *Ledger) CountSmartContrantBlocks(txns ...db.StoreTxn) (uint64, error)

func (*Ledger) CountStateBlocks added in v0.0.2

func (l *Ledger) CountStateBlocks(txns ...db.StoreTxn) (uint64, error)

func (*Ledger) CountUncheckedBlocks

func (l *Ledger) CountUncheckedBlocks(txns ...db.StoreTxn) (uint64, error)

func (*Ledger) DeleteAccountMeta

func (l *Ledger) DeleteAccountMeta(address types.Address, txns ...db.StoreTxn) error

func (*Ledger) DeleteFrontier

func (l *Ledger) DeleteFrontier(hash types.Hash, txns ...db.StoreTxn) error

func (*Ledger) DeletePending

func (l *Ledger) DeletePending(pendingKey types.PendingKey, txns ...db.StoreTxn) error

func (*Ledger) DeleteStateBlock added in v0.0.2

func (l *Ledger) DeleteStateBlock(hash types.Hash, txns ...db.StoreTxn) error

func (*Ledger) DeleteTokenMeta

func (l *Ledger) DeleteTokenMeta(address types.Address, tokenType types.Hash, txns ...db.StoreTxn) error

func (*Ledger) DeleteUncheckedBlock

func (l *Ledger) DeleteUncheckedBlock(parentHash types.Hash, kind types.UncheckedKind, txns ...db.StoreTxn) error

func (*Ledger) Empty

func (l *Ledger) Empty(txns ...db.StoreTxn) (bool, error)

Empty reports whether the database is empty or not.

func (*Ledger) GetAccountMeta

func (l *Ledger) GetAccountMeta(address types.Address, txns ...db.StoreTxn) (*types.AccountMeta, error)

func (*Ledger) GetFrontier

func (l *Ledger) GetFrontier(hash types.Hash, txns ...db.StoreTxn) (*types.Frontier, error)

func (*Ledger) GetFrontiers

func (l *Ledger) GetFrontiers(txns ...db.StoreTxn) ([]*types.Frontier, error)

func (*Ledger) GetPending

func (l *Ledger) GetPending(pendingKey types.PendingKey, txns ...db.StoreTxn) (*types.PendingInfo, error)

func (*Ledger) GetRandomStateBlock added in v0.0.2

func (l *Ledger) GetRandomStateBlock(txns ...db.StoreTxn) (types.Block, error)

func (*Ledger) GetRepresentation

func (l *Ledger) GetRepresentation(address types.Address, txns ...db.StoreTxn) (types.Balance, error)

func (*Ledger) GetSmartContrantBlock added in v0.0.2

func (l *Ledger) GetSmartContrantBlock(hash types.Hash, txns ...db.StoreTxn) (*types.SmartContractBlock, error)

func (*Ledger) GetSmartContrantBlocks added in v0.0.2

func (l *Ledger) GetSmartContrantBlocks(txns ...db.StoreTxn) ([]*types.SmartContractBlock, error)

func (*Ledger) GetStateBlock added in v0.0.2

func (l *Ledger) GetStateBlock(hash types.Hash, txns ...db.StoreTxn) (*types.StateBlock, error)

func (*Ledger) GetStateBlocks added in v0.0.2

func (l *Ledger) GetStateBlocks(txns ...db.StoreTxn) ([]*types.StateBlock, error)

func (*Ledger) GetTokenMeta

func (l *Ledger) GetTokenMeta(address types.Address, tokenType types.Hash, txns ...db.StoreTxn) (*types.TokenMeta, error)

func (*Ledger) GetUncheckedBlock

func (l *Ledger) GetUncheckedBlock(parentHash types.Hash, kind types.UncheckedKind, txns ...db.StoreTxn) (types.Block, error)

func (*Ledger) HasAccountMeta

func (l *Ledger) HasAccountMeta(address types.Address, txns ...db.StoreTxn) (bool, error)

func (*Ledger) HasStateBlock added in v0.0.2

func (l *Ledger) HasStateBlock(hash types.Hash, txns ...db.StoreTxn) (bool, error)

func (*Ledger) HasTokenMeta

func (l *Ledger) HasTokenMeta(address types.Address, tokenType types.Hash, txns ...db.StoreTxn) (bool, error)

func (*Ledger) HasUncheckedBlock

func (l *Ledger) HasUncheckedBlock(hash types.Hash, kind types.UncheckedKind, txns ...db.StoreTxn) (bool, error)

func (*Ledger) JudgeBlockKind added in v0.0.2

func (l *Ledger) JudgeBlockKind(hash types.Hash, txn ...db.StoreTxn) (byte, error)

func (*Ledger) Latest

func (l *Ledger) Latest(account types.Address, token types.Hash, txns ...db.StoreTxn) types.Hash

func (*Ledger) Pending

func (l *Ledger) Pending(account types.Address, txns ...db.StoreTxn) ([]*types.PendingKey, error)

func (*Ledger) Process

func (l *Ledger) Process(block types.Block) (ProcessResult, error)

func (*Ledger) Rollback

func (l *Ledger) Rollback(hash types.Hash) error

TODO: implement

func (*Ledger) SubRepresentation

func (l *Ledger) SubRepresentation(address types.Address, amount types.Balance, txns ...db.StoreTxn) error

func (*Ledger) Token

func (l *Ledger) Token(hash types.Hash, txns ...db.StoreTxn) (*types.TokenMeta, error)

func (*Ledger) TokenBalance

func (l *Ledger) TokenBalance(account types.Address, token types.Hash, txns ...db.StoreTxn) (types.Balance, error)

func (*Ledger) TokenPending

func (l *Ledger) TokenPending(account types.Address, token types.Hash, txns ...db.StoreTxn) ([]*types.PendingKey, error)

func (*Ledger) TokenPendingInfo added in v0.0.2

func (l *Ledger) TokenPendingInfo(account types.Address, token types.Hash, txns ...db.StoreTxn) ([]*types.PendingInfo, error)

func (*Ledger) UpdateAccountMeta

func (l *Ledger) UpdateAccountMeta(meta *types.AccountMeta, txns ...db.StoreTxn) error

func (*Ledger) UpdateTokenMeta

func (l *Ledger) UpdateTokenMeta(address types.Address, meta *types.TokenMeta, txns ...db.StoreTxn) error

func (*Ledger) WalkUncheckedBlocks

func (l *Ledger) WalkUncheckedBlocks(visit types.UncheckedBlockWalkFunc, txns ...db.StoreTxn) error

func (*Ledger) Weight

func (l *Ledger) Weight(account types.Address, txns ...db.StoreTxn) types.Balance

type LedgerService

type LedgerService struct {
	common.ServiceLifecycle
	Ledger *Ledger
}

func NewLedgerService

func NewLedgerService(cfg *config.Config) *LedgerService

func (*LedgerService) Init

func (ls *LedgerService) Init() error

func (*LedgerService) Start

func (ls *LedgerService) Start() error

func (*LedgerService) Status

func (ls *LedgerService) Status() int32

func (*LedgerService) Stop

func (ls *LedgerService) Stop() error

type ProcessResult

type ProcessResult byte
const (
	Progress ProcessResult = iota
	BadWork
	BadSignature
	Old
	Fork
	GapPrevious
	GapSource
	BalanceMismatch
	UnReceivable
	Other
)

type Store

type Store interface {
	Empty(txns ...db.StoreTxn) (bool, error)
	BatchUpdate(fn func(txn db.StoreTxn) error) error

	// account meta CURD
	AddAccountMeta(meta *types.AccountMeta, txns ...db.StoreTxn) error
	GetAccountMeta(address types.Address, txns ...db.StoreTxn) (*types.AccountMeta, error)
	UpdateAccountMeta(meta *types.AccountMeta, txns ...db.StoreTxn) error
	DeleteAccountMeta(address types.Address, txns ...db.StoreTxn) error
	HasAccountMeta(address types.Address, txns ...db.StoreTxn) (bool, error)
	// token meta CURD
	AddTokenMeta(address types.Address, meta *types.TokenMeta, txns ...db.StoreTxn) error
	GetTokenMeta(address types.Address, tokenType types.Hash, txns ...db.StoreTxn) (*types.TokenMeta, error)
	UpdateTokenMeta(address types.Address, meta *types.TokenMeta, txns ...db.StoreTxn) error
	DeleteTokenMeta(address types.Address, tokenType types.Hash, txns ...db.StoreTxn) error
	// state block CURD
	AddBlock(blk types.Block, txns ...db.StoreTxn) error
	GetStateBlock(hash types.Hash, txns ...db.StoreTxn) (*types.StateBlock, error)
	GetStateBlocks(txns ...db.StoreTxn) ([]*types.StateBlock, error)
	DeleteStateBlock(hash types.Hash, txns ...db.StoreTxn) error
	HasStateBlock(hash types.Hash, txns ...db.StoreTxn) (bool, error)
	CountStateBlocks(txns ...db.StoreTxn) (uint64, error)
	GetRandomStateBlock(txns ...db.StoreTxn) (types.Block, error)
	// smartcontrant block CURD
	GetSmartContrantBlock(hash types.Hash, txns ...db.StoreTxn) (*types.SmartContractBlock, error)
	GetSmartContrantBlocks(txns ...db.StoreTxn) ([]*types.SmartContractBlock, error)
	CountSmartContrantBlocks(txns ...db.StoreTxn) (uint64, error)
	// representation CURD
	AddRepresentation(address types.Address, amount types.Balance, txns ...db.StoreTxn) error
	SubRepresentation(address types.Address, amount types.Balance, txns ...db.StoreTxn) error
	GetRepresentation(address types.Address, txns ...db.StoreTxn) (types.Balance, error)
	// unchecked CURD
	AddUncheckedBlock(parentHash types.Hash, blk types.Block, kind types.UncheckedKind, txns ...db.StoreTxn) error
	GetUncheckedBlock(parentHash types.Hash, kind types.UncheckedKind, txns ...db.StoreTxn) (types.Block, error)
	DeleteUncheckedBlock(parentHash types.Hash, kind types.UncheckedKind, txns ...db.StoreTxn) error
	HasUncheckedBlock(hash types.Hash, kind types.UncheckedKind, txns ...db.StoreTxn) (bool, error)
	WalkUncheckedBlocks(visit types.UncheckedBlockWalkFunc, txns ...db.StoreTxn) error
	CountUncheckedBlocks(txns ...db.StoreTxn) (uint64, error)
	// pending CURD
	AddPending(pendingKey types.PendingKey, pending *types.PendingInfo, txns ...db.StoreTxn) error
	GetPending(pendingKey types.PendingKey, txns ...db.StoreTxn) (*types.PendingInfo, error)
	DeletePending(pendingKey types.PendingKey, txns ...db.StoreTxn) error
	// frontier CURD
	AddFrontier(frontier *types.Frontier, txns ...db.StoreTxn) error
	GetFrontier(hash types.Hash, txns ...db.StoreTxn) (*types.Frontier, error)
	GetFrontiers(txns ...db.StoreTxn) ([]*types.Frontier, error)
	DeleteFrontier(hash types.Hash, txns ...db.StoreTxn) error
	CountFrontiers(txns ...db.StoreTxn) (uint64, error)

	//Latest block hash by account and token type, if not exist, return zero hash
	Latest(account types.Address, token types.Hash, txns ...db.StoreTxn) types.Hash
	//Account get account meta by block hash
	Account(hash types.Hash, txns ...db.StoreTxn) (*types.AccountMeta, error)
	//Token get token meta by block hash
	Token(hash types.Hash, txns ...db.StoreTxn) (*types.TokenMeta, error)
	//Pending get account pending (token_hash->pending)
	Pending(account types.Address, txns ...db.StoreTxn) ([]*types.PendingKey, error)
	//Balance get account balance (token_hash->pending)
	Balance(account types.Address, txns ...db.StoreTxn) (map[types.Hash]types.Balance, error)
	//TokenPending get account token pending
	TokenPending(account types.Address, token types.Hash, txns ...db.StoreTxn) ([]*types.PendingKey, error)
	//TokenBalance get account token balance
	TokenBalance(account types.Address, token types.Hash, txns ...db.StoreTxn) (types.Balance, error)
	//Weight get vote weight for PoS
	Weight(account types.Address, txns ...db.StoreTxn) types.Balance
	//Rollback blocks until `hash' doesn't exist
	Rollback(hash types.Hash) error
	//Process check block and process block to badger
	Process(block types.Block) (ProcessResult, error)
	//BlockCheck check block valid
	BlockCheck(block types.Block) (ProcessResult, error)
	//BlockProcess process block to badger
	BlockProcess(block types.Block) error
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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