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 id = 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 id - confirmed asset identifier 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 id 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
- Variables
- func Finalise()
- func Initialise(database string, readOnly bool) (bool, error)
- func ReindexDone() error
- type Element
- type FetchCursor
- type PoolHandle
- func (p *PoolHandle) Delete(key []byte)
- func (p *PoolHandle) Get(key []byte) []byte
- func (p *PoolHandle) GetN(key []byte) (uint64, bool)
- func (p *PoolHandle) GetNB(key []byte) (uint64, []byte)
- func (p *PoolHandle) Has(key []byte) bool
- func (p *PoolHandle) LastElement() (Element, bool)
- func (p *PoolHandle) NewFetchCursor() *FetchCursor
- func (p *PoolHandle) Put(key []byte, value []byte)
- type PoolNB
Constants ¶
const ( ReadOnly = true ReadWrite = false )
Variables ¶
var Pool pools
the instance
Functions ¶
Types ¶
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) Map ¶ added in v0.8.0
func (cursor *FetchCursor) Map(f func(key []byte, value []byte) error) error
map a function over all elements in the range
func (*FetchCursor) Seek ¶
func (cursor *FetchCursor) Seek(key []byte) *FetchCursor
type PoolHandle ¶
type PoolHandle struct {
// contains filtered or unexported fields
}
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) GetN ¶ added in v0.8.0
func (p *PoolHandle) GetN(key []byte) (uint64, bool)
read a record and decode first 8 bytes as big endian uint64
second parameter is false if record was not found panics if not 8 (or more) bytes in the record
func (*PoolHandle) GetNB ¶ added in v0.8.0
func (p *PoolHandle) GetNB(key []byte) (uint64, []byte)
read a record and decode first 8 bytes as big endian uint64 and return the rest of the record as byte slice
second parameter is nil if record was not found panics if not 9 (or more) bytes in the record this returns the actual element in the second parameter - copy the result if it must be preserved
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)
store a key/value bytes pair to the database
type PoolNB ¶ added in v0.8.0
type PoolNB struct {
// contains filtered or unexported fields
}
func (*PoolNB) GetNB ¶ added in v0.8.0
read a record and decode first 8 bytes as big endian uint64 and return the rest of the record as byte slice
second parameter is nil if record was not found panics if not 9 (or more) bytes in the record this returns the actual element in the second parameter - copy the result if it must be preserved
func (*PoolNB) NewFetchCursor ¶ added in v0.8.0
func (p *PoolNB) NewFetchCursor() *FetchCursor
initialise a cursor to the start of a key range