storage

package
v0.7.3 Latest Latest
Warning

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

Go to latest
Published: Apr 10, 2018 License: ISC Imports: 9 Imported by: 0

Documentation

Overview

maintain the on-disk data store

maintain separate pools of a number of elements in key->value form

This maintains a LevelDB database split into a series of tables. Each table is defined by a prefix byte that is obtained from the prefix tag in the struct defining the avaiable tables.

Notes: 1. each separate pool has a single byte prefix (to spread the keys in LevelDB) 2. ++ = concatenation of byte data 3. BN = block number as 8 byte big endian (uint64) 4. txId = transaction digest as 32 byte SHA3-256(data) 5. asset index = fingerprint digest as 64 byte SHA3-512(data) 6. count = successive index value as 8 byte big endian (uint64) 7. owner = bitmark account (32 byte public key) 8. 00 = single byte values 00..ff 9. *others* = byte values of various length

Blocks:

B ++ BN               - block store
                        data: header ++ (concat transactions)
H ++ BN               - current block currencies
                        data: map(currency → currency address)
I ++ txId             - current block owner transaction index
                        data: BN

Transactions:

T ++ txId             - confirmed transactions
                        data: BN ++ packed transaction data

Assets:

A ++ asset index      - confirmed asset
                        data: packed asset data

Ownership:

N ++ owner            - next count value to use for appending to owned items
                        data: count
K ++ owner ++ count   - list of owned items
                        data: 00 ++ last transfer txId ++ last transfer BN ++ issue txId ++ issue BN ++ asset index
                        data: 01 ++ last transfer txId ++ last transfer BN ++ issue txId ++ issue BN ++ owned BN
D ++ owner ++ txId    - position in list of owned items, for delete after transfer
                        data: count

Testing:

Z ++ key              - testing data

Index

Constants

This section is empty.

Variables

View Source
var Pool pools

the instance

Functions

func Finalise

func Finalise()

close the database connection

func Initialise

func Initialise(database string) error

open up the database connection

this must be called before any pool.New() is created

Types

type Element

type Element struct {
	Key   []byte
	Value []byte
}

a binary data item

type FetchCursor

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

cursor structure

func (*FetchCursor) Fetch

func (cursor *FetchCursor) Fetch(count int) ([]Element, error)

fetch some elements starting from key

func (*FetchCursor) Seek

func (cursor *FetchCursor) Seek(key []byte) *FetchCursor

type PoolHandle

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

a pool handle

func (*PoolHandle) Delete

func (p *PoolHandle) Delete(key []byte)

remove a key from the database

func (*PoolHandle) Get

func (p *PoolHandle) Get(key []byte) []byte

read a value for a given key

this returns the actual element - copy the result if it must be preserved

func (*PoolHandle) GetSplit2 added in v0.7.0

func (p *PoolHandle) GetSplit2(key []byte, firstLength int) ([]byte, []byte)

read and split value into two pieces for a given key

this returns the actual element - copy the result if it must be preserved

func (*PoolHandle) Has

func (p *PoolHandle) Has(key []byte) bool

Check if a key exists

func (*PoolHandle) LastElement

func (p *PoolHandle) LastElement() (Element, bool)

get the last element in a pool

func (*PoolHandle) NewFetchCursor

func (p *PoolHandle) NewFetchCursor() *FetchCursor

initialise a cursor to the start of a key range

func (*PoolHandle) Put

func (p *PoolHandle) Put(key []byte, value []byte, extra ...[]byte)

store a key/value bytes pair to the database

Jump to

Keyboard shortcuts

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