db

package
v0.4.0 Latest Latest
Warning

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

Go to latest
Published: Feb 1, 2023 License: AGPL-3.0 Imports: 22 Imported by: 5

Documentation

Index

Constants

View Source
const (
	// AddressBalanceDetailNoUTXO returns address balance without utxos
	AddressBalanceDetailNoUTXO = 0
	// AddressBalanceDetailUTXO returns address balance with utxos
	AddressBalanceDetailUTXO = 1
)
View Source
const ContractIndexOffset = 2
View Source
const FiatRatesTimeFormat = "20060102150405" // YYYYMMDDhhmmss

FiatRatesTimeFormat is a format string for storing FiatRates timestamps in rocksdb

View Source
const InternalTxIndexOffset = 1

Variables

View Source
var ErrOperationInterrupted = errors.New("ErrOperationInterrupted")

ErrOperationInterrupted is returned when operation is interrupted by OS signal

Functions

func FiatRatesConvertDate added in v0.3.2

func FiatRatesConvertDate(date string) (*time.Time, error)

FiatRatesConvertDate checks if the date is in correct format and returns the Time object. Possible formats are: YYYYMMDDhhmmss, YYYYMMDDhhmm, YYYYMMDDhh, YYYYMMDD

func RepairRocksDB

func RepairRocksDB(name string) error

RepairRocksDB calls RocksDb db repair function

Types

type AddrBalance added in v0.1.0

type AddrBalance struct {
	Txs        uint32
	SentSat    big.Int
	BalanceSat big.Int
	Utxos      []Utxo
	// contains filtered or unexported fields
}

AddrBalance stores number of transactions and balances of an address

func (*AddrBalance) ReceivedSat added in v0.1.0

func (ab *AddrBalance) ReceivedSat() *big.Int

ReceivedSat computes received amount from total balance and sent amount

type AddrContract added in v0.2.0

type AddrContract struct {
	Type             bchain.TokenType
	Contract         bchain.AddressDescriptor
	Txs              uint
	Value            big.Int                  // single value of ERC20
	Ids              []big.Int                // multiple ERC721 tokens
	MultiTokenValues []bchain.MultiTokenValue // multiple ERC1155 tokens
}

AddrContract is Contract address with number of transactions done by given address

type AddrContracts added in v0.2.0

type AddrContracts struct {
	TotalTxs       uint
	NonContractTxs uint
	InternalTxs    uint
	Contracts      []AddrContract
}

AddrContracts contains number of transactions and contracts for an address

type AddressBalanceDetail added in v0.3.0

type AddressBalanceDetail int

AddressBalanceDetail specifies what data are returned by GetAddressBalance

type BlockInfo added in v0.1.0

type BlockInfo struct {
	Hash   string
	Time   int64
	Txs    uint32
	Size   uint32
	Height uint32 // Height is not packed!
}

BlockInfo holds information about blocks kept in column height

type BulkConnect added in v0.1.0

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

BulkConnect is used to connect blocks in bulk, faster but if interrupted inconsistent way

func (*BulkConnect) Close added in v0.1.0

func (b *BulkConnect) Close() error

Close flushes the cached data and switches DB from inconsistent state open after Close, the BulkConnect cannot be used

func (*BulkConnect) ConnectBlock added in v0.1.0

func (b *BulkConnect) ConnectBlock(block *bchain.Block, storeBlockTxs bool) error

ConnectBlock connects block in bulk mode

type GetTransactionsCallback added in v0.2.0

type GetTransactionsCallback func(txid string, height uint32, indexes []int32) error

GetTransactionsCallback is called by GetTransactions/GetAddrDescTransactions for each found tx indexes contain array of indexes (input negative, output positive) in tx where is given address

type RocksDB

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

RocksDB handle

func NewRocksDB

func NewRocksDB(path string, cacheSize, maxOpenFiles int, parser bchain.BlockChainParser, metrics *common.Metrics) (d *RocksDB, err error)

NewRocksDB opens an internal handle to RocksDB environment. Close needs to be called to release it.

func (*RocksDB) AddrDescForOutpoint added in v0.2.2

func (d *RocksDB) AddrDescForOutpoint(outpoint bchain.Outpoint) (bchain.AddressDescriptor, *big.Int)

AddrDescForOutpoint is a function that returns address descriptor and value for given outpoint or nil if outpoint not found

func (*RocksDB) Close

func (d *RocksDB) Close() error

Close releases the RocksDB environment opened in NewRocksDB.

func (*RocksDB) ComputeInternalStateColumnStats

func (d *RocksDB) ComputeInternalStateColumnStats(stopCompute chan os.Signal) error

ComputeInternalStateColumnStats computes stats of all db columns and sets them to internal state can be very slow operation

func (*RocksDB) ConnectBlock

func (d *RocksDB) ConnectBlock(block *bchain.Block) error

ConnectBlock indexes addresses in the block and stores them in db

func (*RocksDB) DatabaseSizeOnDisk

func (d *RocksDB) DatabaseSizeOnDisk() int64

DatabaseSizeOnDisk returns size of the database in bytes

func (*RocksDB) DeleteTx

func (d *RocksDB) DeleteTx(txid string) error

DeleteTx removes transactions from db

func (*RocksDB) DisconnectBlockRangeBitcoinType added in v0.2.0

func (d *RocksDB) DisconnectBlockRangeBitcoinType(lower uint32, higher uint32) error

DisconnectBlockRangeBitcoinType removes all data belonging to blocks in range lower-higher it is able to disconnect only blocks for which there are data in the blockTxs column

func (*RocksDB) DisconnectBlockRangeEthereumType added in v0.2.0

func (d *RocksDB) DisconnectBlockRangeEthereumType(lower uint32, higher uint32) error

DisconnectBlockRangeEthereumType removes all data belonging to blocks in range lower-higher it is able to disconnect only blocks for which there are data in the blockTxs column

func (*RocksDB) FiatRatesFindLastTicker added in v0.3.2

func (d *RocksDB) FiatRatesFindLastTicker(vsCurrency string, token string) (*common.CurrencyRatesTicker, error)

FiatRatesFindLastTicker gets the last FiatRates record, of the base currency, vsCurrency or the token if specified

func (*RocksDB) FiatRatesFindTicker added in v0.3.2

func (d *RocksDB) FiatRatesFindTicker(tickerTime *time.Time, vsCurrency string, token string) (*common.CurrencyRatesTicker, error)

FiatRatesFindTicker gets FiatRates data closest to the specified timestamp, of the base currency, vsCurrency or the token if specified

func (*RocksDB) FiatRatesGetTicker added in v0.4.0

func (d *RocksDB) FiatRatesGetTicker(tickerTime *time.Time) (*common.CurrencyRatesTicker, error)

FiatRatesGetTicker gets FiatRates ticker at the specified timestamp if it exist

func (*RocksDB) FiatRatesStoreTicker added in v0.3.2

func (d *RocksDB) FiatRatesStoreTicker(wb *grocksdb.WriteBatch, ticker *common.CurrencyRatesTicker) error

FiatRatesStoreTicker stores ticker data at the specified time

func (*RocksDB) FixUtxos added in v0.3.2

func (d *RocksDB) FixUtxos(stop chan os.Signal) error

FixUtxos checks and fixes possible

func (*RocksDB) GetAddrDescBalance added in v0.1.0

func (d *RocksDB) GetAddrDescBalance(addrDesc bchain.AddressDescriptor, detail AddressBalanceDetail) (*AddrBalance, error)

GetAddrDescBalance returns AddrBalance for given addrDesc

func (*RocksDB) GetAddrDescContracts added in v0.2.0

func (d *RocksDB) GetAddrDescContracts(addrDesc bchain.AddressDescriptor) (*AddrContracts, error)

GetAddrDescContracts returns AddrContracts for given addrDesc

func (*RocksDB) GetAddrDescTransactions added in v0.1.0

func (d *RocksDB) GetAddrDescTransactions(addrDesc bchain.AddressDescriptor, lower uint32, higher uint32, fn GetTransactionsCallback) (err error)

GetAddrDescTransactions finds all input/output transactions for address descriptor Transaction are passed to callback function in the order from newest block to the oldest

func (*RocksDB) GetAddressAlias added in v0.4.0

func (d *RocksDB) GetAddressAlias(address string) string

func (*RocksDB) GetAddressBalance added in v0.1.0

func (d *RocksDB) GetAddressBalance(address string, detail AddressBalanceDetail) (*AddrBalance, error)

GetAddressBalance returns address balance for an address or nil if address not found

func (*RocksDB) GetAndResetConnectBlockStats added in v0.1.0

func (d *RocksDB) GetAndResetConnectBlockStats() string

GetAndResetConnectBlockStats gets statistics about cache usage in connect blocks and resets the counters

func (*RocksDB) GetBestBlock

func (d *RocksDB) GetBestBlock() (uint32, string, error)

GetBestBlock returns the block hash of the block with highest height in the db

func (*RocksDB) GetBlockHash

func (d *RocksDB) GetBlockHash(height uint32) (string, error)

GetBlockHash returns block hash at given height or empty string if not found

func (*RocksDB) GetBlockInfo added in v0.1.0

func (d *RocksDB) GetBlockInfo(height uint32) (*BlockInfo, error)

GetBlockInfo returns block info stored in db

func (*RocksDB) GetContractInfo added in v0.4.0

func (d *RocksDB) GetContractInfo(contract bchain.AddressDescriptor, typeFromContext bchain.TokenTypeName) (*bchain.ContractInfo, error)

GetContractInfo gets contract from cache or DB and possibly updates the type from typeFromContext it is hard to guess the type of the contract using API, it is easier to set it the first time the contract is processed in a tx

func (*RocksDB) GetContractInfoForAddress added in v0.4.0

func (d *RocksDB) GetContractInfoForAddress(address string) (*bchain.ContractInfo, error)

func (*RocksDB) GetEthereumInternalData added in v0.4.0

func (d *RocksDB) GetEthereumInternalData(txid string) (*bchain.EthereumInternalData, error)

GetEthereumInternalData gets transaction internal data from DB

func (*RocksDB) GetFourByteSignature added in v0.4.0

func (d *RocksDB) GetFourByteSignature(fourBytes uint32, id uint32) (*bchain.FourByteSignature, error)

GetFourByteSignature gets all 4byte signature of given fourBytes and id

func (*RocksDB) GetFourByteSignatures added in v0.4.0

func (d *RocksDB) GetFourByteSignatures(fourBytes uint32) (*[]bchain.FourByteSignature, error)

GetFourByteSignatures gets all 4byte signatures of given fourBytes (there may be more than one signature starting with the same four bytes)

func (*RocksDB) GetInternalState added in v0.4.0

func (d *RocksDB) GetInternalState() *common.InternalState

GetInternalState gets the InternalState

func (*RocksDB) GetMemoryStats added in v0.1.0

func (d *RocksDB) GetMemoryStats() string

GetMemoryStats returns memory usage statistics as reported by RocksDB

func (*RocksDB) GetTransactions

func (d *RocksDB) GetTransactions(address string, lower uint32, higher uint32, fn GetTransactionsCallback) (err error)

GetTransactions finds all input/output transactions for address Transaction are passed to callback function.

func (*RocksDB) GetTx

func (d *RocksDB) GetTx(txid string) (*bchain.Tx, uint32, error)

GetTx returns transaction stored in db and height of the block containing it

func (*RocksDB) GetTxAddresses added in v0.1.0

func (d *RocksDB) GetTxAddresses(txid string) (*TxAddresses, error)

GetTxAddresses returns TxAddresses for given txid or nil if not found

func (*RocksDB) InitAddressAliasRecords added in v0.4.0

func (d *RocksDB) InitAddressAliasRecords() (int, error)

InitAddressAliasRecords loads all records to cache

func (*RocksDB) InitBulkConnect added in v0.1.0

func (d *RocksDB) InitBulkConnect() (*BulkConnect, error)

InitBulkConnect initializes bulk connect and switches DB to inconsistent state

func (*RocksDB) LoadInternalState

func (d *RocksDB) LoadInternalState(rpcCoin string) (*common.InternalState, error)

LoadInternalState loads from db internal state or initializes a new one if not yet stored

func (*RocksDB) PutTx

func (d *RocksDB) PutTx(tx *bchain.Tx, height uint32, blockTime int64) error

PutTx stores transactions in db

func (*RocksDB) Reopen

func (d *RocksDB) Reopen() error

Reopen reopens the database It closes and reopens db, nobody can access the database during the operation!

func (*RocksDB) SetInconsistentState added in v0.1.0

func (d *RocksDB) SetInconsistentState(inconsistent bool) error

SetInconsistentState sets the internal state to DbStateInconsistent or DbStateOpen based on inconsistent parameter db in left in DbStateInconsistent state cannot be used and must be recreated

func (*RocksDB) SetInternalState

func (d *RocksDB) SetInternalState(is *common.InternalState)

SetInternalState sets the InternalState to be used by db to collect internal state

func (*RocksDB) StoreContractInfo added in v0.4.0

func (d *RocksDB) StoreContractInfo(contractInfo *bchain.ContractInfo) error

StoreContractInfo stores contractInfo in DB if CreatedInBlock==0 and DestructedInBlock!=0, it is evaluated as a destruction of a contract, the contract info is updated in all other cases the contractInfo overwrites previously stored data in DB (however it should not really happen as contract is created only once)

func (*RocksDB) StoreFourByteSignature added in v0.4.0

func (d *RocksDB) StoreFourByteSignature(wb *grocksdb.WriteBatch, fourBytes uint32, id uint32, signature *bchain.FourByteSignature) error

StoreFourByteSignature stores 4byte signature in DB

func (*RocksDB) StoreInternalState

func (d *RocksDB) StoreInternalState(is *common.InternalState) error

StoreInternalState stores the internal state to db

func (*RocksDB) WriteBatch added in v0.4.0

func (d *RocksDB) WriteBatch(wb *grocksdb.WriteBatch) error

type StopIteration added in v0.1.0

type StopIteration struct{}

StopIteration is returned by callback function to signal stop of iteration

func (*StopIteration) Error added in v0.1.0

func (e *StopIteration) Error() string

type SyncWorker

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

SyncWorker is handle to SyncWorker

func NewSyncWorker

func NewSyncWorker(db *RocksDB, chain bchain.BlockChain, syncWorkers, syncChunk int, minStartHeight int, dryRun bool, chanOsSignal chan os.Signal, metrics *common.Metrics, is *common.InternalState) (*SyncWorker, error)

NewSyncWorker creates new SyncWorker and returns its handle

func (*SyncWorker) ConnectBlocksParallel

func (w *SyncWorker) ConnectBlocksParallel(lower, higher uint32) error

ConnectBlocksParallel uses parallel goroutines to get data from blockchain daemon

func (*SyncWorker) DisconnectBlocks

func (w *SyncWorker) DisconnectBlocks(lower uint32, higher uint32, hashes []string) error

DisconnectBlocks removes all data belonging to blocks in range lower-higher,

func (*SyncWorker) ResyncIndex

func (w *SyncWorker) ResyncIndex(onNewBlock bchain.OnNewBlockFunc, initialSync bool) error

ResyncIndex synchronizes index to the top of the blockchain onNewBlock is called when new block is connected, but not in initial parallel sync

type TxAddresses added in v0.1.0

type TxAddresses struct {
	Height  uint32
	Inputs  []TxInput
	Outputs []TxOutput
}

TxAddresses stores transaction inputs and outputs with amounts

type TxCache

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

TxCache is handle to TxCacheServer

func NewTxCache

func NewTxCache(db *RocksDB, chain bchain.BlockChain, metrics *common.Metrics, is *common.InternalState, enabled bool) (*TxCache, error)

NewTxCache creates new TxCache interface and returns its handle

func (*TxCache) GetTransaction

func (c *TxCache) GetTransaction(txid string) (*bchain.Tx, int, error)

GetTransaction returns transaction either from RocksDB or if not present from blockchain it the transaction is confirmed, it is stored in the RocksDB

type TxInput added in v0.1.0

type TxInput struct {
	AddrDesc bchain.AddressDescriptor
	ValueSat big.Int
}

TxInput holds input data of the transaction in TxAddresses

func (*TxInput) Addresses added in v0.1.0

func (ti *TxInput) Addresses(p bchain.BlockChainParser) ([]string, bool, error)

Addresses converts AddressDescriptor of the input to array of strings

type TxOutput added in v0.1.0

type TxOutput struct {
	AddrDesc bchain.AddressDescriptor
	Spent    bool
	ValueSat big.Int
}

TxOutput holds output data of the transaction in TxAddresses

func (*TxOutput) Addresses added in v0.1.0

func (to *TxOutput) Addresses(p bchain.BlockChainParser) ([]string, bool, error)

Addresses converts AddressDescriptor of the output to array of strings

type Utxo added in v0.3.0

type Utxo struct {
	BtxID    []byte
	Vout     int32
	Height   uint32
	ValueSat big.Int
}

Utxo holds information about unspent transaction output

Jump to

Keyboard shortcuts

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