Documentation ¶
Index ¶
- Variables
- func APITransaction(client txhelpers.VerboseTransactionGetter, txid *chainhash.Hash) (tx *apitypes.Tx, hex string, err error)
- func BuildBlockHeaderVerbose(header *wire.BlockHeader, params *chaincfg.Params, currentHeight int64, ...) *chainjson.GetBlockHeaderVerboseResult
- func CommonAncestor(client BlockFetcher, hashA, hashB chainhash.Hash) (*chainhash.Hash, []chainhash.Hash, []chainhash.Hash, error)
- func ConnectNodeRPC(host, user, pass, cert string, disableTLS, disableReconnect bool, ...) (*rpcclient.Client, semver.Semver, error)
- func DisableLog()
- func GetBlock(ind int64, client BlockFetcher) (*dcrutil.Block, *chainhash.Hash, error)
- func GetBlockByHash(blockhash *chainhash.Hash, client BlockFetcher) (*dcrutil.Block, error)
- func GetBlockHeaderVerbose(client BlockFetcher, idx int64) *chainjson.GetBlockHeaderVerboseResult
- func GetBlockHeaderVerboseByString(client BlockFetcher, hash string) *chainjson.GetBlockHeaderVerboseResult
- func GetBlockVerbose(client *rpcclient.Client, idx int64, verboseTx bool) *chainjson.GetBlockVerboseResult
- func GetBlockVerboseByHash(client *rpcclient.Client, hash string, verboseTx bool) *chainjson.GetBlockVerboseResult
- func GetChainWork(client BlockFetcher, hash *chainhash.Hash) (string, error)
- func GetStakeDiffEstimates(client *rpcclient.Client) *apitypes.StakeDiff
- func GetTransactionVerboseByID(client txhelpers.VerboseTransactionGetter, txhash *chainhash.Hash) (*chainjson.TxRawResult, error)
- func OrphanedTipLength(ctx context.Context, client BlockHashGetter, tipHeight int64, ...) (int64, error)
- func SearchRawTransaction(client *rpcclient.Client, params *chaincfg.Params, count int, address string) ([]*chainjson.SearchRawTransactionsResult, error)
- func SideChainFull(client BlockFetcher, tipHash string) ([]string, error)
- func SideChains(client *rpcclient.Client) ([]chainjson.GetChainTipsResult, error)
- func UnconfirmedTxnsForAddress(client *rpcclient.Client, address string, params *chaincfg.Params) (*txhelpers.AddressOutpoints, int64, error)
- func UseLogger(logger slog.Logger)
- type BlockFetcher
- type BlockGate
- func (g *BlockGate) BestBlock() (*dcrutil.Block, error)
- func (g *BlockGate) BestBlockHash() (chainhash.Hash, int64, error)
- func (g *BlockGate) BestBlockHeight() int64
- func (g *BlockGate) Block(hash chainhash.Hash) (*dcrutil.Block, error)
- func (g *BlockGate) CachedBlock(hash chainhash.Hash) (*dcrutil.Block, error)
- func (g *BlockGate) Client() BlockFetcher
- func (g *BlockGate) GetChainWork(hash *chainhash.Hash) (string, error)
- func (g *BlockGate) NodeHeight() (int64, error)
- func (g *BlockGate) SetFetchToHeight(height int64)
- func (g *BlockGate) UpdateToBestBlock() (*dcrutil.Block, error)
- func (g *BlockGate) UpdateToBlock(height int64) (*dcrutil.Block, error)
- func (g *BlockGate) UpdateToNextBlock() (*dcrutil.Block, error)
- func (g *BlockGate) WaitForHash(hash chainhash.Hash) chan int64
- func (g *BlockGate) WaitForHeight(height int64) chan chainhash.Hash
- type BlockGetter
- type BlockHashGetter
- type BlockPrefetchClient
- func (p *BlockPrefetchClient) GetBestBlock() (*chainhash.Hash, int64, error)
- func (p *BlockPrefetchClient) GetBlock(hash *chainhash.Hash) (*wire.MsgBlock, error)
- func (p *BlockPrefetchClient) GetBlockData(hash *chainhash.Hash) (*wire.MsgBlock, *chainjson.GetBlockHeaderVerboseResult, error)
- func (p *BlockPrefetchClient) GetBlockHash(blockHeight int64) (*chainhash.Hash, error)
- func (p *BlockPrefetchClient) GetBlockHeaderVerbose(hash *chainhash.Hash) (*chainjson.GetBlockHeaderVerboseResult, error)
- func (p *BlockPrefetchClient) HaveBlockHash(hash chainhash.Hash) bool
- func (p *BlockPrefetchClient) HaveBlockHeight(height uint32) bool
- func (p *BlockPrefetchClient) Hits() uint64
- func (p *BlockPrefetchClient) Misses() uint64
- func (p *BlockPrefetchClient) RetrieveAndStoreNext(nextHash *chainhash.Hash)
- func (p *BlockPrefetchClient) Stop()
- type MasterBlockGetter
- type MempoolAddressChecker
Constants ¶
This section is empty.
Variables ¶
var ( ErrAncestorAtGenesis = errors.New("no ancestor: at genesis") ErrAncestorMaxChainLength = errors.New("no ancestor: max chain length reached") )
Functions ¶
func APITransaction ¶
func APITransaction(client txhelpers.VerboseTransactionGetter, txid *chainhash.Hash) (tx *apitypes.Tx, hex string, err error)
APITransaction uses the RPC client to retrieve the specified transaction, and convert the data into a *apitypes.Tx.
func BuildBlockHeaderVerbose ¶
func BuildBlockHeaderVerbose(header *wire.BlockHeader, params *chaincfg.Params, currentHeight int64, nextHash ...string) *chainjson.GetBlockHeaderVerboseResult
BuildBlockHeaderVerbose creates a *chainjson.GetBlockHeaderVerboseResult from an input *wire.BlockHeader and current best block height, which is used to compute confirmations. The next block hash may optionally be provided.
func CommonAncestor ¶
func CommonAncestor(client BlockFetcher, hashA, hashB chainhash.Hash) (*chainhash.Hash, []chainhash.Hash, []chainhash.Hash, error)
CommonAncestor attempts to determine the common ancestor block for two chains specified by the hash of the chain tip block. The full chains from the tips back to but not including the common ancestor are also returned. The first element in the chain slices is the lowest block following the common ancestor, while the last element is the chain tip. The common ancestor will never by one of the chain tips. Thus, if one of the chain tips is on the other chain, that block will be shared between the two chains, and the common ancestor will be the previous block. However, the intended use of this function is to find a common ancestor for two chains with no common blocks.
func ConnectNodeRPC ¶
func ConnectNodeRPC(host, user, pass, cert string, disableTLS, disableReconnect bool, ntfnHandlers ...*rpcclient.NotificationHandlers) (*rpcclient.Client, semver.Semver, error)
ConnectNodeRPC attempts to create a new websocket connection to a dcrd node, with the given credentials and optional notification handlers.
func DisableLog ¶
func DisableLog()
DisableLog disables all library log output. Logging output is disabled by default until UseLogger is called.
func GetBlock ¶
func GetBlock(ind int64, client BlockFetcher) (*dcrutil.Block, *chainhash.Hash, error)
GetBlock gets a block at the given height from a chain server.
func GetBlockByHash ¶
func GetBlockByHash(blockhash *chainhash.Hash, client BlockFetcher) (*dcrutil.Block, error)
GetBlockByHash gets the block with the given hash from a chain server.
func GetBlockHeaderVerbose ¶
func GetBlockHeaderVerbose(client BlockFetcher, idx int64) *chainjson.GetBlockHeaderVerboseResult
GetBlockHeaderVerbose creates a *chainjson.GetBlockHeaderVerboseResult for the block at height idx via an RPC connection to a chain server.
func GetBlockHeaderVerboseByString ¶
func GetBlockHeaderVerboseByString(client BlockFetcher, hash string) *chainjson.GetBlockHeaderVerboseResult
GetBlockHeaderVerboseByString creates a *chainjson.GetBlockHeaderVerboseResult for the block specified by hash via an RPC connection to a chain server.
func GetBlockVerbose ¶
func GetBlockVerbose(client *rpcclient.Client, idx int64, verboseTx bool) *chainjson.GetBlockVerboseResult
GetBlockVerbose creates a *chainjson.GetBlockVerboseResult for the block index specified by idx via an RPC connection to a chain server.
func GetBlockVerboseByHash ¶
func GetBlockVerboseByHash(client *rpcclient.Client, hash string, verboseTx bool) *chainjson.GetBlockVerboseResult
GetBlockVerboseByHash creates a *chainjson.GetBlockVerboseResult for the specified block hash via an RPC connection to a chain server.
func GetChainWork ¶
func GetChainWork(client BlockFetcher, hash *chainhash.Hash) (string, error)
GetChainWork fetches the chainjson.BlockHeaderVerbose and returns only the ChainWork field as a string.
func GetStakeDiffEstimates ¶
GetStakeDiffEstimates combines the results of EstimateStakeDiff and GetStakeDifficulty into a *apitypes.StakeDiff.
func GetTransactionVerboseByID ¶
func GetTransactionVerboseByID(client txhelpers.VerboseTransactionGetter, txhash *chainhash.Hash) (*chainjson.TxRawResult, error)
GetTransactionVerboseByID get a transaction by transaction id
func OrphanedTipLength ¶
func OrphanedTipLength(ctx context.Context, client BlockHashGetter, tipHeight int64, hashFunc func(int64) (string, error)) (int64, error)
OrphanedTipLength finds a common ancestor by iterating block heights backwards until a common block hash is found. Unlike CommonAncestor, an orphaned DB tip whose corresponding block is not known to dcrd will not cause an error. The number of blocks that have been orphaned is returned. Realistically, this should rarely be anything but 0 or 1, but no limits are placed here on the number of blocks checked.
func SearchRawTransaction ¶
func SearchRawTransaction(client *rpcclient.Client, params *chaincfg.Params, count int, address string) ([]*chainjson.SearchRawTransactionsResult, error)
SearchRawTransaction fetch transactions pertaining to an address.
func SideChainFull ¶
func SideChainFull(client BlockFetcher, tipHash string) ([]string, error)
SideChainFull gets all of the blocks in the side chain with the specified tip block hash. The first block in the slice is the lowest height block in the side chain, and its previous block is the main/side common ancestor, which is not included in the slice since it is main chain. The last block in the slice is thus the side chain tip.
func SideChains ¶
func SideChains(client *rpcclient.Client) ([]chainjson.GetChainTipsResult, error)
SideChains gets a slice of known side chain tips. This corresponds to the results of the getchaintips node RPC where the block tip "status" is either "valid-headers" or "valid-fork".
func UnconfirmedTxnsForAddress ¶
func UnconfirmedTxnsForAddress(client *rpcclient.Client, address string, params *chaincfg.Params) (*txhelpers.AddressOutpoints, int64, error)
UnconfirmedTxnsForAddress returns the chainhash.Hash of all transactions in mempool that (1) pay to the given address, or (2) spend a previous outpoint that paid to the address.
Types ¶
type BlockFetcher ¶
type BlockFetcher interface { GetBestBlock() (*chainhash.Hash, int64, error) GetBlock(blockHash *chainhash.Hash) (*wire.MsgBlock, error) GetBlockHash(blockHeight int64) (*chainhash.Hash, error) GetBlockHeaderVerbose(hash *chainhash.Hash) (*chainjson.GetBlockHeaderVerboseResult, error) }
BlockFetcher implements a few basic block data retrieval functions.
type BlockGate ¶
type BlockGate struct {
// contains filtered or unexported fields
}
BlockGate is an implementation of MasterBlockGetter with cache
func NewBlockGate ¶
func NewBlockGate(client BlockFetcher, capacity int) *BlockGate
NewBlockGate constructs a new BlockGate, wrapping an RPC client, with a specified block cache capacity.
func (*BlockGate) BestBlockHash ¶
BestBlockHash gets the hash and height of the best block in cache.
func (*BlockGate) BestBlockHeight ¶
BestBlockHeight gets the best block height in the block cache.
func (*BlockGate) Block ¶
Block first attempts to get the block with the specified hash from cache. In the event of a cache miss, the block is retrieved from dcrd via RPC.
func (*BlockGate) CachedBlock ¶
CachedBlock attempts to get the block with the specified hash from cache.
func (*BlockGate) Client ¶
func (g *BlockGate) Client() BlockFetcher
Client is just an access function to get the BlockGate's RPC client.
func (*BlockGate) GetChainWork ¶
GetChainWork fetches the chainjson.BlockHeaderVerbose and returns only the ChainWork attribute as a string.
func (*BlockGate) NodeHeight ¶
NodeHeight gets the chain height from dcrd.
func (*BlockGate) SetFetchToHeight ¶
SetFetchToHeight sets the height up to which WaitForHeight will trigger an RPC to retrieve the block immediately. For the given height and up, WaitForHeight will only return a notification channel.
func (*BlockGate) UpdateToBestBlock ¶
UpdateToBestBlock gets the best block via RPC and updates the cache.
func (*BlockGate) UpdateToBlock ¶
UpdateToBlock gets the block at the specified height on the main chain from dcrd, stores it in cache, and signals any waiters. This is the thread-safe version of updateToBlock.
func (*BlockGate) UpdateToNextBlock ¶
UpdateToNextBlock gets the next block following the best in cache via RPC and updates the cache.
func (*BlockGate) WaitForHash ¶
WaitForHash provides a notification channel for signaling to the caller when the block with the specified hash is available.
type BlockGetter ¶
type BlockGetter interface { NodeHeight() (int64, error) BestBlockHeight() int64 BestBlockHash() (chainhash.Hash, int64, error) BestBlock() (*dcrutil.Block, error) Block(chainhash.Hash) (*dcrutil.Block, error) WaitForHeight(int64) chan chainhash.Hash WaitForHash(chainhash.Hash) chan int64 GetChainWork(*chainhash.Hash) (string, error) }
BlockGetter is an interface for requesting blocks
type BlockHashGetter ¶
BlockHashGetter is an interface implementing GetBlockHash to retrieve a block hash from a height.
type BlockPrefetchClient ¶
type BlockPrefetchClient struct { // The next block data is protected by a Mutex so the fetcher goroutine and // the exported methods may safely access the data concurrently. sync.Mutex // contains filtered or unexported fields }
BlockPrefetchClient uses a BlockFetcher to prefetch the next block after a block request. It implements the BlockFetcher for retrieving block data.
func NewBlockPrefetchClient ¶
func NewBlockPrefetchClient(f BlockFetcher) *BlockPrefetchClient
NewBlockPrefetchClient constructs a new BlockPrefetchClient configured to prefetch the next block after a request using the given BlockFetcher (e.g. an *rpcclient.Client).
func (*BlockPrefetchClient) GetBestBlock ¶
func (p *BlockPrefetchClient) GetBestBlock() (*chainhash.Hash, int64, error)
GetBestBlock is a passthrough to the client. It does not retarget the prefetch range since it does not request the actual block, just the hash and height of the best block.
func (*BlockPrefetchClient) GetBlock ¶
GetBlock retrieves the wire.MsgBlock for the block with the specified hash. See GetBlockData for details on how this interacts with the prefetcher.
func (*BlockPrefetchClient) GetBlockData ¶
func (p *BlockPrefetchClient) GetBlockData(hash *chainhash.Hash) (*wire.MsgBlock, *chainjson.GetBlockHeaderVerboseResult, error)
GetBlockData attempts to get the specified block and retargets the prefetcher with the next block's hash. If the block was not already fetched, it is retrieved immediately and stored following retargeting.
func (*BlockPrefetchClient) GetBlockHash ¶
func (p *BlockPrefetchClient) GetBlockHash(blockHeight int64) (*chainhash.Hash, error)
GetBlockHash is a passthrough to the client.
func (*BlockPrefetchClient) GetBlockHeaderVerbose ¶
func (p *BlockPrefetchClient) GetBlockHeaderVerbose(hash *chainhash.Hash) (*chainjson.GetBlockHeaderVerboseResult, error)
GetBlockHeaderVerbose retrieves the chainjson.GetBlockHeaderVerboseResult for the block with the specified hash. See GetBlockData for details on how this interacts with the prefetcher
func (*BlockPrefetchClient) HaveBlockHash ¶
func (p *BlockPrefetchClient) HaveBlockHash(hash chainhash.Hash) bool
HaveBlockHash checks if the current or prefetched next block is for a block with the specified hash.
func (*BlockPrefetchClient) HaveBlockHeight ¶
func (p *BlockPrefetchClient) HaveBlockHeight(height uint32) bool
HaveBlockHeight checks if the current or prefetched next block is for a block with the specified height. Use HaveBlockHash to be sure it is the desired block.
func (*BlockPrefetchClient) Hits ¶
func (p *BlockPrefetchClient) Hits() uint64
Hits safely returns the number of prefetch hits.
func (*BlockPrefetchClient) Misses ¶
func (p *BlockPrefetchClient) Misses() uint64
Misses safely returns the number of prefetch misses.
func (*BlockPrefetchClient) RetrieveAndStoreNext ¶
func (p *BlockPrefetchClient) RetrieveAndStoreNext(nextHash *chainhash.Hash)
RetrieveAndStoreNext retrieves the next block specified by the Hash, if it is not already the stored next block, and stores the block data. The existing "next" becomes "current".
func (*BlockPrefetchClient) Stop ¶
func (p *BlockPrefetchClient) Stop()
Stop shuts down the fetcher goroutine. The BlockPrefetchClient may not be used after this.
type MasterBlockGetter ¶
type MasterBlockGetter interface { BlockGetter UpdateToBestBlock() (*dcrutil.Block, error) UpdateToNextBlock() (*dcrutil.Block, error) UpdateToBlock(height int64) (*dcrutil.Block, error) }
MasterBlockGetter builds on BlockGetter, adding functions that fetch blocks directly from dcrd via RPC and subsequently update the internal block cache with the retrieved block.
type MempoolAddressChecker ¶
type MempoolAddressChecker interface {
UnconfirmedTxnsForAddress(address string) (*txhelpers.AddressOutpoints, int64, error)
}
MempoolAddressChecker is an interface implementing UnconfirmedTxnsForAddress
func NewMempoolAddressChecker ¶
func NewMempoolAddressChecker(client *rpcclient.Client, params *chaincfg.Params) MempoolAddressChecker
NewMempoolAddressChecker creates a new MempoolAddressChecker from an RPC client for the given network.