Documentation
¶
Index ¶
- Constants
- Variables
- func GetUniqueTxids(txids []string) []string
- func IsZeroBigInt(b *big.Int) bool
- func NewAPIError(s string, public bool) error
- type APIError
- type AccountDetails
- type Address
- type AddressFilter
- type AddressUtxoV1
- type AddressV1
- type Amount
- type BalanceHistories
- type BalanceHistory
- type Block
- type BlockInfo
- type BlockRaw
- type BlockV1
- type BlockbookInfo
- type Blocks
- type EthereumSpecific
- type FeeStats
- type MempoolTxid
- type MempoolTxids
- type Paging
- type ScriptPubKeyV1
- type ScriptSigV1
- type SystemInfo
- type Token
- type TokenTransfer
- type TokenType
- type TokensToReturn
- type Tx
- type TxV1
- type Utxo
- type Utxos
- type Vin
- type VinV1
- type Vout
- type VoutV1
- type Worker
- func (w *Worker) AddressToV1(a *Address) *AddressV1
- func (w *Worker) AddressUtxoToV1(au Utxos) []AddressUtxoV1
- func (w *Worker) BitcoinTypeEstimateFee(blocks int, conservative bool) (big.Int, error)
- func (w *Worker) BlockToV1(b *Block) *BlockV1
- func (w *Worker) ComputeFeeStats(blockFrom, blockTo int, stopCompute chan os.Signal) error
- func (w *Worker) GetAddress(address string, page int, txsOnPage int, option AccountDetails, ...) (*Address, error)
- func (w *Worker) GetAddressUtxo(address string, onlyConfirmed bool) (Utxos, error)
- func (w *Worker) GetBalanceHistory(address string, fromTimestamp, toTimestamp int64, currencies []string, ...) (BalanceHistories, error)
- func (w *Worker) GetBlock(bid string, page int, txsOnPage int) (*Block, error)
- func (w *Worker) GetBlockRaw(bid string) (*BlockRaw, error)
- func (w *Worker) GetBlocks(page int, blocksOnPage int) (*Blocks, error)
- func (w *Worker) GetCurrentFiatRates(currencies []string) (*db.ResultTickerAsString, error)
- func (w *Worker) GetFeeStats(bid string) (*FeeStats, error)
- func (w *Worker) GetFiatRatesForBlockID(bid string, currencies []string) (*db.ResultTickerAsString, error)
- func (w *Worker) GetFiatRatesForTimestamps(timestamps []int64, currencies []string) (*db.ResultTickersAsString, error)
- func (w *Worker) GetFiatRatesTickersList(timestamp int64) (*db.ResultTickerListAsString, error)
- func (w *Worker) GetMempool(page int, itemsOnPage int) (*MempoolTxids, error)
- func (w *Worker) GetSpendingTxid(txid string, n int) (string, error)
- func (w *Worker) GetSystemInfo(internal bool) (*SystemInfo, error)
- func (w *Worker) GetTransaction(txid string, spendingTxs bool, specificJSON bool) (*Tx, error)
- func (w *Worker) GetTransactionFromBchainTx(bchainTx *bchain.Tx, height int, spendingTxs bool, specificJSON bool) (*Tx, error)
- func (w *Worker) GetTransactionFromMempoolTx(mempoolTx *bchain.MempoolTx) (*Tx, error)
- func (w *Worker) GetXpubAddress(xpub string, page int, txsOnPage int, option AccountDetails, ...) (*Address, error)
- func (w *Worker) GetXpubBalanceHistory(xpub string, fromTimestamp, toTimestamp int64, currencies []string, gap int, ...) (BalanceHistories, error)
- func (w *Worker) GetXpubUtxo(xpub string, onlyConfirmed bool, gap int) (Utxos, error)
- func (w *Worker) TxToV1(tx *Tx) *TxV1
Constants ¶
const ( // AddressFilterVoutOff disables filtering of transactions by vout AddressFilterVoutOff = -1 // AddressFilterVoutInputs specifies that only txs where the address is as input are returned AddressFilterVoutInputs = -2 // AddressFilterVoutOutputs specifies that only txs where the address is as output are returned AddressFilterVoutOutputs = -3 // AddressFilterVoutQueryNotNecessary signals that query for transactions is not necessary as there are no transactions for specified contract filter AddressFilterVoutQueryNotNecessary = -4 // TokensToReturnNonzeroBalance - return only tokens with nonzero balance TokensToReturnNonzeroBalance TokensToReturn = 0 // TokensToReturnUsed - return tokens with some transfers (even if they have zero balance now) TokensToReturnUsed TokensToReturn = 1 // TokensToReturnDerived - return all derived tokens TokensToReturnDerived TokensToReturn = 2 )
Variables ¶
var ErrUnsupportedXpub = errors.New("XPUB not supported")
ErrUnsupportedXpub is returned when coin type does not support xpub address derivation or provided string is not an xpub
var Text struct { BlockbookAbout, TOSLink string }
Text contains static overridable texts used in explorer
Functions ¶
func GetUniqueTxids ¶
GetUniqueTxids removes duplicate transactions
Types ¶
type APIError ¶
APIError extends error by information if the error details should be returned to the end user
type AccountDetails ¶
type AccountDetails int
AccountDetails specifies what data returns GetAddress and GetXpub calls
const ( // AccountDetailsBasic - only that address is indexed and some basic info AccountDetailsBasic AccountDetails = iota // AccountDetailsTokens - basic info + tokens AccountDetailsTokens // AccountDetailsTokenBalances - basic info + token with balance AccountDetailsTokenBalances // AccountDetailsTxidHistory - basic + token balances + txids, subject to paging AccountDetailsTxidHistory // AccountDetailsTxHistoryLight - basic + tokens + easily obtained tx data (not requiring requests to backend), subject to paging AccountDetailsTxHistoryLight // AccountDetailsTxHistory - basic + tokens + full tx data, subject to paging AccountDetailsTxHistory )
type Address ¶
type Address struct {
Paging
AddrStr string `json:"address"`
BalanceSat *Amount `json:"balance"`
TotalReceivedSat *Amount `json:"totalReceived,omitempty"`
TotalSentSat *Amount `json:"totalSent,omitempty"`
UnconfirmedBalanceSat *Amount `json:"unconfirmedBalance"`
UnconfirmedTxs int `json:"unconfirmedTxs"`
Txs int `json:"txs"`
NonTokenTxs int `json:"nonTokenTxs,omitempty"`
Transactions []*Tx `json:"transactions,omitempty"`
Txids []string `json:"txids,omitempty"`
Nonce string `json:"nonce,omitempty"`
UsedTokens int `json:"usedTokens,omitempty"`
Tokens []Token `json:"tokens,omitempty"`
Erc20Contract *bchain.Erc20Contract `json:"erc20Contract,omitempty"`
// helpers for explorer
Filter string `json:"-"`
XPubAddresses map[string]struct{} `json:"-"`
}
Address holds information about address and its transactions
type AddressFilter ¶
type AddressFilter struct {
Vout int
Contract string
FromHeight uint32
ToHeight uint32
TokensToReturn TokensToReturn
// OnlyConfirmed set to true will ignore mempool transactions; mempool is also ignored if FromHeight/ToHeight filter is specified
OnlyConfirmed bool
}
AddressFilter is used to filter data returned from GetAddress api method
type AddressUtxoV1 ¶
type AddressUtxoV1 struct {
Txid string `json:"txid"`
Vout uint32 `json:"vout"`
Amount string `json:"amount"`
AmountSat big.Int `json:"satoshis"`
Height int `json:"height,omitempty"`
Confirmations int `json:"confirmations"`
}
AddressUtxoV1 is used for legacy api v1
type AddressV1 ¶
type AddressV1 struct {
Paging
AddrStr string `json:"addrStr"`
Balance string `json:"balance"`
TotalReceived string `json:"totalReceived"`
TotalSent string `json:"totalSent"`
UnconfirmedBalance string `json:"unconfirmedBalance"`
UnconfirmedTxApperances int `json:"unconfirmedTxApperances"`
TxApperances int `json:"txApperances"`
Transactions []*TxV1 `json:"txs,omitempty"`
Txids []string `json:"transactions,omitempty"`
}
AddressV1 is used for legacy api v1
type Amount ¶
Amount is datatype holding amounts
func (*Amount) AsInt64 ¶
AsInt64 returns Amount as int64 (0 if Amount is nil). It is used only for legacy interfaces (socket.io) and generally not recommended to use for possible loss of precision.
func (*Amount) DecimalString ¶
DecimalString returns amount with decimal point placed according to parameter d
func (*Amount) MarshalJSON ¶
MarshalJSON Amount serialization
type BalanceHistories ¶
type BalanceHistories []BalanceHistory
BalanceHistories is array of BalanceHistory
func (BalanceHistories) Len ¶
func (a BalanceHistories) Len() int
func (BalanceHistories) Less ¶
func (a BalanceHistories) Less(i, j int) bool
func (BalanceHistories) SortAndAggregate ¶
func (a BalanceHistories) SortAndAggregate(groupByTime uint32) BalanceHistories
SortAndAggregate sums BalanceHistories to groups defined by parameter groupByTime
func (BalanceHistories) Swap ¶
func (a BalanceHistories) Swap(i, j int)
type BalanceHistory ¶
type BalanceHistory struct {
Time uint32 `json:"time"`
Txs uint32 `json:"txs"`
ReceivedSat *Amount `json:"received"`
SentSat *Amount `json:"sent"`
SentToSelfSat *Amount `json:"sentToSelf"`
FiatRates map[string]float64 `json:"rates,omitempty"`
Txid string `json:"txid,omitempty"`
}
BalanceHistory contains info about one point in time of balance history
type Block ¶
type Block struct {
Paging
BlockInfo
TxCount int `json:"txCount"`
Transactions []*Tx `json:"txs,omitempty"`
}
Block contains information about block
type BlockInfo ¶
type BlockInfo struct {
Hash string `json:"hash"`
Prev string `json:"previousBlockHash,omitempty"`
Next string `json:"nextBlockHash,omitempty"`
Height uint32 `json:"height"`
Confirmations int `json:"confirmations"`
Size int `json:"size"`
Time int64 `json:"time,omitempty"`
Version common.JSONNumber `json:"version"`
MerkleRoot string `json:"merkleRoot"`
Nonce string `json:"nonce"`
Bits string `json:"bits"`
Difficulty string `json:"difficulty"`
Txids []string `json:"tx,omitempty"`
}
BlockInfo contains extended block header data and a list of block txids
type BlockV1 ¶
type BlockV1 struct {
Paging
BlockInfo
TxCount int `json:"txCount"`
Transactions []*TxV1 `json:"txs,omitempty"`
}
BlockV1 contains information about block
type BlockbookInfo ¶
type BlockbookInfo struct {
Coin string `json:"coin"`
Host string `json:"host"`
Version string `json:"version"`
GitCommit string `json:"gitCommit"`
BuildTime string `json:"buildTime"`
SyncMode bool `json:"syncMode"`
InitialSync bool `json:"initialSync"`
InSync bool `json:"inSync"`
BestHeight uint32 `json:"bestHeight"`
LastBlockTime time.Time `json:"lastBlockTime"`
InSyncMempool bool `json:"inSyncMempool"`
LastMempoolTime time.Time `json:"lastMempoolTime"`
MempoolSize int `json:"mempoolSize"`
Decimals int `json:"decimals"`
DbSize int64 `json:"dbSize"`
DbSizeFromColumns int64 `json:"dbSizeFromColumns,omitempty"`
DbColumns []common.InternalStateColumn `json:"dbColumns,omitempty"`
About string `json:"about"`
}
BlockbookInfo contains information about the running blockbook instance
type EthereumSpecific ¶
type EthereumSpecific struct {
Status eth.TxStatus `json:"status"` // 1 OK, 0 Fail, -1 pending
Nonce uint64 `json:"nonce"`
GasLimit *big.Int `json:"gasLimit"`
GasUsed *big.Int `json:"gasUsed"`
GasPrice *Amount `json:"gasPrice"`
Data string `json:"data,omitempty"`
}
EthereumSpecific contains ethereum specific transaction data
type FeeStats ¶
type FeeStats struct {
TxCount int `json:"txCount"`
TotalFeesSat *Amount `json:"totalFeesSat"`
AverageFeePerKb int64 `json:"averageFeePerKb"`
DecilesFeePerKb [11]int64 `json:"decilesFeePerKb"`
}
FeeStats contains detailed block fee statistics
type MempoolTxid ¶
MempoolTxid contains information about a transaction in mempool
type MempoolTxids ¶
type MempoolTxids struct {
Paging
Mempool []MempoolTxid `json:"mempool"`
MempoolSize int `json:"mempoolSize"`
}
MempoolTxids contains a list of mempool txids with paging information
type Paging ¶
type Paging struct {
Page int `json:"page,omitempty"`
TotalPages int `json:"totalPages,omitempty"`
ItemsOnPage int `json:"itemsOnPage,omitempty"`
}
Paging contains information about paging for address, blocks and block
type ScriptPubKeyV1 ¶
type ScriptPubKeyV1 struct {
Hex string `json:"hex,omitempty"`
Asm string `json:"asm,omitempty"`
AddrDesc bchain.AddressDescriptor `json:"-"`
Addresses []string `json:"addresses"`
IsAddress bool `json:"-"`
Type string `json:"type,omitempty"`
}
ScriptPubKeyV1 is used for legacy api v1
type ScriptSigV1 ¶
ScriptSigV1 is used for legacy api v1
type SystemInfo ¶
type SystemInfo struct {
Blockbook *BlockbookInfo `json:"blockbook"`
Backend *common.BackendInfo `json:"backend"`
}
SystemInfo contains information about the running blockbook and backend instance
type Token ¶
type Token struct {
Type TokenType `json:"type"`
Name string `json:"name"`
Path string `json:"path,omitempty"`
Contract string `json:"contract,omitempty"`
Transfers int `json:"transfers"`
Symbol string `json:"symbol,omitempty"`
Decimals int `json:"decimals,omitempty"`
BalanceSat *Amount `json:"balance,omitempty"`
TotalReceivedSat *Amount `json:"totalReceived,omitempty"`
TotalSentSat *Amount `json:"totalSent,omitempty"`
ContractIndex string `json:"-"`
}
Token contains info about tokens held by an address
type TokenTransfer ¶
type TokenTransfer struct {
Type TokenType `json:"type"`
From string `json:"from"`
To string `json:"to"`
Token string `json:"token"`
Name string `json:"name"`
Symbol string `json:"symbol"`
Decimals int `json:"decimals"`
Value *Amount `json:"value"`
}
TokenTransfer contains info about a token transfer done in a transaction
type TokenType ¶
type TokenType string
TokenType specifies type of token
const ERC20TokenType TokenType = "ERC20"
ERC20TokenType is Ethereum ERC20 token
const XPUBAddressTokenType TokenType = "XPUBAddress"
XPUBAddressTokenType is address derived from xpub
type TokensToReturn ¶
type TokensToReturn int
TokensToReturn specifies what tokens are returned by GetAddress and GetXpubAddress
type Tx ¶
type Tx struct {
Txid string `json:"txid"`
Version int32 `json:"version,omitempty"`
Locktime uint32 `json:"lockTime,omitempty"`
Vin []Vin `json:"vin"`
Vout []Vout `json:"vout"`
Blockhash string `json:"blockHash,omitempty"`
Blockheight int `json:"blockHeight"`
Confirmations uint32 `json:"confirmations"`
Blocktime int64 `json:"blockTime"`
Size int `json:"size,omitempty"`
ValueOutSat *Amount `json:"value"`
ValueInSat *Amount `json:"valueIn,omitempty"`
FeesSat *Amount `json:"fees,omitempty"`
Hex string `json:"hex,omitempty"`
Rbf bool `json:"rbf,omitempty"`
CoinSpecificData json.RawMessage `json:"coinSpecificData,omitempty"`
TokenTransfers []TokenTransfer `json:"tokenTransfers,omitempty"`
EthereumSpecific *EthereumSpecific `json:"ethereumSpecific,omitempty"`
}
Tx holds information about a transaction
type TxV1 ¶
type TxV1 struct {
Txid string `json:"txid"`
Version int32 `json:"version,omitempty"`
Locktime uint32 `json:"locktime,omitempty"`
Vin []VinV1 `json:"vin"`
Vout []VoutV1 `json:"vout"`
Blockhash string `json:"blockhash,omitempty"`
Blockheight int `json:"blockheight"`
Confirmations uint32 `json:"confirmations"`
Time int64 `json:"time,omitempty"`
Blocktime int64 `json:"blocktime"`
ValueOut string `json:"valueOut"`
ValueOutSat big.Int `json:"-"`
Size int `json:"size,omitempty"`
ValueIn string `json:"valueIn"`
ValueInSat big.Int `json:"-"`
Fees string `json:"fees"`
FeesSat big.Int `json:"-"`
Hex string `json:"hex"`
}
TxV1 is used for legacy api v1
type Utxo ¶
type Utxo struct {
Txid string `json:"txid"`
Vout int32 `json:"vout"`
AmountSat *Amount `json:"value"`
Height int `json:"height,omitempty"`
Confirmations int `json:"confirmations"`
Address string `json:"address,omitempty"`
Path string `json:"path,omitempty"`
Locktime uint32 `json:"lockTime,omitempty"`
Coinbase bool `json:"coinbase,omitempty"`
}
Utxo is one unspent transaction output
type Vin ¶
type Vin struct {
Txid string `json:"txid,omitempty"`
Vout uint32 `json:"vout,omitempty"`
Sequence int64 `json:"sequence,omitempty"`
N int `json:"n"`
AddrDesc bchain.AddressDescriptor `json:"-"`
Addresses []string `json:"addresses,omitempty"`
IsAddress bool `json:"isAddress"`
IsOwn bool `json:"isOwn,omitempty"`
ValueSat *Amount `json:"value,omitempty"`
Hex string `json:"hex,omitempty"`
Asm string `json:"asm,omitempty"`
Coinbase string `json:"coinbase,omitempty"`
}
Vin contains information about single transaction input
type VinV1 ¶
type VinV1 struct {
Txid string `json:"txid"`
Vout uint32 `json:"vout"`
Sequence int64 `json:"sequence,omitempty"`
N int `json:"n"`
ScriptSig ScriptSigV1 `json:"scriptSig"`
AddrDesc bchain.AddressDescriptor `json:"-"`
Addresses []string `json:"addresses"`
IsAddress bool `json:"-"`
Value string `json:"value"`
ValueSat big.Int `json:"-"`
}
VinV1 is used for legacy api v1
type Vout ¶
type Vout struct {
ValueSat *Amount `json:"value,omitempty"`
N int `json:"n"`
Spent bool `json:"spent,omitempty"`
SpentTxID string `json:"spentTxId,omitempty"`
SpentIndex int `json:"spentIndex,omitempty"`
SpentHeight int `json:"spentHeight,omitempty"`
Hex string `json:"hex,omitempty"`
Asm string `json:"asm,omitempty"`
AddrDesc bchain.AddressDescriptor `json:"-"`
Addresses []string `json:"addresses"`
IsAddress bool `json:"isAddress"`
IsOwn bool `json:"isOwn,omitempty"`
Type string `json:"type,omitempty"`
}
Vout contains information about single transaction output
type VoutV1 ¶
type VoutV1 struct {
Value string `json:"value"`
ValueSat big.Int `json:"-"`
N int `json:"n"`
ScriptPubKey ScriptPubKeyV1 `json:"scriptPubKey"`
Spent bool `json:"spent"`
SpentTxID string `json:"spentTxId,omitempty"`
SpentIndex int `json:"spentIndex,omitempty"`
SpentHeight int `json:"spentHeight,omitempty"`
}
VoutV1 is used for legacy api v1
type Worker ¶
type Worker struct {
// contains filtered or unexported fields
}
Worker is handle to api worker
func NewWorker ¶
func NewWorker(db *db.RocksDB, chain bchain.BlockChain, mempool bchain.Mempool, txCache *db.TxCache, metrics *common.Metrics, is *common.InternalState) (*Worker, error)
NewWorker creates new api worker
func (*Worker) AddressToV1 ¶
AddressToV1 converts Address to AddressV1
func (*Worker) AddressUtxoToV1 ¶
func (w *Worker) AddressUtxoToV1(au Utxos) []AddressUtxoV1
AddressUtxoToV1 converts []AddressUtxo to []AddressUtxoV1
func (*Worker) BitcoinTypeEstimateFee ¶
BitcoinTypeEstimateFee returns a fee estimation for given number of blocks it uses 10 second cache to reduce calls to the backend
func (*Worker) ComputeFeeStats ¶
ComputeFeeStats computes fee distribution in defined blocks and logs them to log
func (*Worker) GetAddress ¶
func (w *Worker) GetAddress(address string, page int, txsOnPage int, option AccountDetails, filter *AddressFilter) (*Address, error)
GetAddress computes address value and gets transactions for given address
func (*Worker) GetAddressUtxo ¶
GetAddressUtxo returns unspent outputs for given address
func (*Worker) GetBalanceHistory ¶
func (w *Worker) GetBalanceHistory(address string, fromTimestamp, toTimestamp int64, currencies []string, groupBy uint32) (BalanceHistories, error)
GetBalanceHistory returns history of balance for given address
func (*Worker) GetBlockRaw ¶
GetBlock returns paged data about block
func (*Worker) GetCurrentFiatRates ¶
func (w *Worker) GetCurrentFiatRates(currencies []string) (*db.ResultTickerAsString, error)
GetCurrentFiatRates returns last available fiat rates
func (*Worker) GetFeeStats ¶
GetFeeStats returns statistics about block fees
func (*Worker) GetFiatRatesForBlockID ¶
func (w *Worker) GetFiatRatesForBlockID(bid string, currencies []string) (*db.ResultTickerAsString, error)
GetFiatRatesForBlockID returns fiat rates for block height or block hash
func (*Worker) GetFiatRatesForTimestamps ¶
func (w *Worker) GetFiatRatesForTimestamps(timestamps []int64, currencies []string) (*db.ResultTickersAsString, error)
GetFiatRatesForTimestamps returns fiat rates for each of the provided dates
func (*Worker) GetFiatRatesTickersList ¶
func (w *Worker) GetFiatRatesTickersList(timestamp int64) (*db.ResultTickerListAsString, error)
GetFiatRatesTickersList returns the list of available fiatRates tickers
func (*Worker) GetMempool ¶
func (w *Worker) GetMempool(page int, itemsOnPage int) (*MempoolTxids, error)
GetMempool returns a page of mempool txids
func (*Worker) GetSpendingTxid ¶
GetSpendingTxid returns transaction id of transaction that spent given output
func (*Worker) GetSystemInfo ¶
func (w *Worker) GetSystemInfo(internal bool) (*SystemInfo, error)
GetSystemInfo returns information about system
func (*Worker) GetTransaction ¶
GetTransaction reads transaction data from txid
func (*Worker) GetTransactionFromBchainTx ¶
func (w *Worker) GetTransactionFromBchainTx(bchainTx *bchain.Tx, height int, spendingTxs bool, specificJSON bool) (*Tx, error)
GetTransactionFromBchainTx reads transaction data from txid
func (*Worker) GetTransactionFromMempoolTx ¶
GetTransactionFromMempoolTx converts bchain.MempoolTx to Tx, with limited amount of data it is not doing any request to backend or to db
func (*Worker) GetXpubAddress ¶
func (w *Worker) GetXpubAddress(xpub string, page int, txsOnPage int, option AccountDetails, filter *AddressFilter, gap int) (*Address, error)
GetXpubAddress computes address value and gets transactions for given address
func (*Worker) GetXpubBalanceHistory ¶
func (w *Worker) GetXpubBalanceHistory(xpub string, fromTimestamp, toTimestamp int64, currencies []string, gap int, groupBy uint32) (BalanceHistories, error)
GetXpubBalanceHistory returns history of balance for given xpub
func (*Worker) GetXpubUtxo ¶
GetXpubUtxo returns unspent outputs for given xpub