rpcutils

package module
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Mar 25, 2019 License: ISC Imports: 17 Imported by: 142

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrAncestorAtGenesis      = errors.New("no ancestor: at genesis")
	ErrAncestorMaxChainLength = errors.New("no ancestor: max chain length reached")
)

Functions

func APITransaction

func APITransaction(client *rpcclient.Client, 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) *dcrjson.GetBlockHeaderVerboseResult

BuildBlockHeaderVerbose creates a *dcrjson.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 *rpcclient.Client, 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 *rpcclient.Client) (*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 *rpcclient.Client) (*dcrutil.Block, error)

GetBlockByHash gets the block with the given hash from a chain server.

func GetBlockHeaderVerbose

func GetBlockHeaderVerbose(client *rpcclient.Client, idx int64) *dcrjson.GetBlockHeaderVerboseResult

GetBlockHeaderVerbose creates a *dcrjson.GetBlockHeaderVerboseResult for the block at height idx via an RPC connection to a chain server.

func GetBlockHeaderVerboseByString

func GetBlockHeaderVerboseByString(client *rpcclient.Client, hash string) *dcrjson.GetBlockHeaderVerboseResult

GetBlockHeaderVerboseByString creates a *dcrjson.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) *dcrjson.GetBlockVerboseResult

GetBlockVerbose creates a *dcrjson.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) *dcrjson.GetBlockVerboseResult

GetBlockVerboseByHash creates a *dcrjson.GetBlockVerboseResult for the specified block hash via an RPC connection to a chain server.

func GetChainWork

func GetChainWork(client *rpcclient.Client, hash *chainhash.Hash) (string, error)

GetChainWork fetches the dcrjson.BlockHeaderVerbose and returns only the ChainWork field as a string.

func GetStakeDiffEstimates

func GetStakeDiffEstimates(client *rpcclient.Client) *apitypes.StakeDiff

GetStakeDiffEstimates combines the results of EstimateStakeDiff and GetStakeDifficulty into a *apitypes.StakeDiff.

func GetTransactionVerboseByID

func GetTransactionVerboseByID(client *rpcclient.Client, txhash *chainhash.Hash) (*dcrjson.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, count int, address string) ([]*dcrjson.SearchRawTransactionsResult, error)

SearchRawTransaction fetch transactions the belong to an address

func SideChainFull

func SideChainFull(client *rpcclient.Client, 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) ([]dcrjson.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.

func UseLogger

func UseLogger(logger slog.Logger)

UseLogger uses a specified Logger to output package logging info.

Types

type BlockGate

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

BlockGate is an implementation of MasterBlockGetter with cache

func NewBlockGate

func NewBlockGate(client *rpcclient.Client, capacity int) *BlockGate

NewBlockGate constructs a new BlockGate, wrapping an RPC client, with a specified block cache capacity.

func (*BlockGate) BestBlock

func (g *BlockGate) BestBlock() (*dcrutil.Block, error)

BestBlock gets the best block in cache.

func (*BlockGate) BestBlockHash

func (g *BlockGate) BestBlockHash() (chainhash.Hash, int64, error)

BestBlockHash gets the hash and height of the best block in cache.

func (*BlockGate) BestBlockHeight

func (g *BlockGate) BestBlockHeight() int64

BestBlockHeight gets the best block height in the block cache.

func (*BlockGate) Block

func (g *BlockGate) Block(hash chainhash.Hash) (*dcrutil.Block, error)

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

func (g *BlockGate) CachedBlock(hash chainhash.Hash) (*dcrutil.Block, error)

CachedBlock attempts to get the block with the specified hash from cache.

func (*BlockGate) Client

func (g *BlockGate) Client() *rpcclient.Client

Client is just an access function to get the BlockGate's RPC client.

func (*BlockGate) GetChainWork

func (g *BlockGate) GetChainWork(hash *chainhash.Hash) (string, error)

GetChainWork fetches the dcrjson.BlockHeaderVerbose and returns only the ChainWork attribute as a string.

func (*BlockGate) NodeHeight

func (g *BlockGate) NodeHeight() (int64, error)

NodeHeight gets the chain height from dcrd.

func (*BlockGate) SetFetchToHeight

func (g *BlockGate) SetFetchToHeight(height int64)

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

func (g *BlockGate) UpdateToBestBlock() (*dcrutil.Block, error)

UpdateToBestBlock gets the best block via RPC and updates the cache.

func (*BlockGate) UpdateToBlock

func (g *BlockGate) UpdateToBlock(height int64) (*dcrutil.Block, error)

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

func (g *BlockGate) UpdateToNextBlock() (*dcrutil.Block, error)

UpdateToNextBlock gets the next block following the best in cache via RPC and updates the cache.

func (*BlockGate) WaitForHash

func (g *BlockGate) WaitForHash(hash chainhash.Hash) chan int64

WaitForHash provides a notification channel for signaling to the caller when the block with the specified hash is available.

func (*BlockGate) WaitForHeight

func (g *BlockGate) WaitForHeight(height int64) chan chainhash.Hash

WaitForHeight provides a notification channel for signaling to the caller when the block at the specified height 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

type BlockHashGetter interface {
	GetBlockHash(int64) (*chainhash.Hash, error)
}

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.

Jump to

Keyboard shortcuts

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