mirror of
https://github.com/muun/recovery.git
synced 2025-11-10 22:10:14 -05:00
Release v0.3.0
This commit is contained in:
268
vendor/github.com/btcsuite/btcd/rpcclient/chain.go
generated
vendored
268
vendor/github.com/btcsuite/btcd/rpcclient/chain.go
generated
vendored
@@ -52,14 +52,61 @@ func (c *Client) GetBestBlockHash() (*chainhash.Hash, error) {
|
||||
return c.GetBestBlockHashAsync().Receive()
|
||||
}
|
||||
|
||||
// legacyGetBlockRequest constructs and sends a legacy getblock request which
|
||||
// contains two separate bools to denote verbosity, in contract to a single int
|
||||
// parameter.
|
||||
func (c *Client) legacyGetBlockRequest(hash string, verbose,
|
||||
verboseTx bool) ([]byte, error) {
|
||||
|
||||
hashJSON, err := json.Marshal(hash)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
verboseJSON, err := json.Marshal(btcjson.Bool(verbose))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
verboseTxJSON, err := json.Marshal(btcjson.Bool(verboseTx))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return c.RawRequest("getblock", []json.RawMessage{
|
||||
hashJSON, verboseJSON, verboseTxJSON,
|
||||
})
|
||||
}
|
||||
|
||||
// waitForGetBlockRes waits for the response of a getblock request. If the
|
||||
// response indicates an invalid parameter was provided, a legacy style of the
|
||||
// request is resent and its response is returned instead.
|
||||
func (c *Client) waitForGetBlockRes(respChan chan *response, hash string,
|
||||
verbose, verboseTx bool) ([]byte, error) {
|
||||
|
||||
res, err := receiveFuture(respChan)
|
||||
|
||||
// If we receive an invalid parameter error, then we may be
|
||||
// communicating with a btcd node which only understands the legacy
|
||||
// request, so we'll try that.
|
||||
if err, ok := err.(*btcjson.RPCError); ok &&
|
||||
err.Code == btcjson.ErrRPCInvalidParams.Code {
|
||||
return c.legacyGetBlockRequest(hash, verbose, verboseTx)
|
||||
}
|
||||
|
||||
// Otherwise, we can return the response as is.
|
||||
return res, err
|
||||
}
|
||||
|
||||
// FutureGetBlockResult is a future promise to deliver the result of a
|
||||
// GetBlockAsync RPC invocation (or an applicable error).
|
||||
type FutureGetBlockResult chan *response
|
||||
type FutureGetBlockResult struct {
|
||||
client *Client
|
||||
hash string
|
||||
Response chan *response
|
||||
}
|
||||
|
||||
// Receive waits for the response promised by the future and returns the raw
|
||||
// block requested from the server given its hash.
|
||||
func (r FutureGetBlockResult) Receive() (*wire.MsgBlock, error) {
|
||||
res, err := receiveFuture(r)
|
||||
res, err := r.client.waitForGetBlockRes(r.Response, r.hash, false, false)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -97,8 +144,12 @@ func (c *Client) GetBlockAsync(blockHash *chainhash.Hash) FutureGetBlockResult {
|
||||
hash = blockHash.String()
|
||||
}
|
||||
|
||||
cmd := btcjson.NewGetBlockCmd(hash, btcjson.Bool(false), nil)
|
||||
return c.sendCmd(cmd)
|
||||
cmd := btcjson.NewGetBlockCmd(hash, btcjson.Int(0))
|
||||
return FutureGetBlockResult{
|
||||
client: c,
|
||||
hash: hash,
|
||||
Response: c.sendCmd(cmd),
|
||||
}
|
||||
}
|
||||
|
||||
// GetBlock returns a raw block from the server given its hash.
|
||||
@@ -111,12 +162,16 @@ func (c *Client) GetBlock(blockHash *chainhash.Hash) (*wire.MsgBlock, error) {
|
||||
|
||||
// FutureGetBlockVerboseResult is a future promise to deliver the result of a
|
||||
// GetBlockVerboseAsync RPC invocation (or an applicable error).
|
||||
type FutureGetBlockVerboseResult chan *response
|
||||
type FutureGetBlockVerboseResult struct {
|
||||
client *Client
|
||||
hash string
|
||||
Response chan *response
|
||||
}
|
||||
|
||||
// Receive waits for the response promised by the future and returns the data
|
||||
// structure from the server with information about the requested block.
|
||||
func (r FutureGetBlockVerboseResult) Receive() (*btcjson.GetBlockVerboseResult, error) {
|
||||
res, err := receiveFuture(r)
|
||||
res, err := r.client.waitForGetBlockRes(r.Response, r.hash, true, false)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -140,9 +195,14 @@ func (c *Client) GetBlockVerboseAsync(blockHash *chainhash.Hash) FutureGetBlockV
|
||||
if blockHash != nil {
|
||||
hash = blockHash.String()
|
||||
}
|
||||
|
||||
cmd := btcjson.NewGetBlockCmd(hash, btcjson.Bool(true), nil)
|
||||
return c.sendCmd(cmd)
|
||||
// From the bitcoin-cli getblock documentation:
|
||||
// "If verbosity is 1, returns an Object with information about block ."
|
||||
cmd := btcjson.NewGetBlockCmd(hash, btcjson.Int(1))
|
||||
return FutureGetBlockVerboseResult{
|
||||
client: c,
|
||||
hash: hash,
|
||||
Response: c.sendCmd(cmd),
|
||||
}
|
||||
}
|
||||
|
||||
// GetBlockVerbose returns a data structure from the server with information
|
||||
@@ -154,19 +214,52 @@ func (c *Client) GetBlockVerbose(blockHash *chainhash.Hash) (*btcjson.GetBlockVe
|
||||
return c.GetBlockVerboseAsync(blockHash).Receive()
|
||||
}
|
||||
|
||||
// FutureGetBlockVerboseTxResult is a future promise to deliver the result of a
|
||||
// GetBlockVerboseTxResult RPC invocation (or an applicable error).
|
||||
type FutureGetBlockVerboseTxResult struct {
|
||||
client *Client
|
||||
hash string
|
||||
Response chan *response
|
||||
}
|
||||
|
||||
// Receive waits for the response promised by the future and returns a verbose
|
||||
// version of the block including detailed information about its transactions.
|
||||
func (r FutureGetBlockVerboseTxResult) Receive() (*btcjson.GetBlockVerboseTxResult, error) {
|
||||
res, err := r.client.waitForGetBlockRes(r.Response, r.hash, true, true)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var blockResult btcjson.GetBlockVerboseTxResult
|
||||
err = json.Unmarshal(res, &blockResult)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &blockResult, nil
|
||||
}
|
||||
|
||||
// GetBlockVerboseTxAsync returns an instance of a type that can be used to get
|
||||
// the result of the RPC at some future time by invoking the Receive function on
|
||||
// the returned instance.
|
||||
//
|
||||
// See GetBlockVerboseTx or the blocking version and more details.
|
||||
func (c *Client) GetBlockVerboseTxAsync(blockHash *chainhash.Hash) FutureGetBlockVerboseResult {
|
||||
func (c *Client) GetBlockVerboseTxAsync(blockHash *chainhash.Hash) FutureGetBlockVerboseTxResult {
|
||||
hash := ""
|
||||
if blockHash != nil {
|
||||
hash = blockHash.String()
|
||||
}
|
||||
|
||||
cmd := btcjson.NewGetBlockCmd(hash, btcjson.Bool(true), btcjson.Bool(true))
|
||||
return c.sendCmd(cmd)
|
||||
// From the bitcoin-cli getblock documentation:
|
||||
//
|
||||
// If verbosity is 2, returns an Object with information about block
|
||||
// and information about each transaction.
|
||||
cmd := btcjson.NewGetBlockCmd(hash, btcjson.Int(2))
|
||||
return FutureGetBlockVerboseTxResult{
|
||||
client: c,
|
||||
hash: hash,
|
||||
Response: c.sendCmd(cmd),
|
||||
}
|
||||
}
|
||||
|
||||
// GetBlockVerboseTx returns a data structure from the server with information
|
||||
@@ -174,7 +267,7 @@ func (c *Client) GetBlockVerboseTxAsync(blockHash *chainhash.Hash) FutureGetBloc
|
||||
//
|
||||
// See GetBlockVerbose if only transaction hashes are preferred.
|
||||
// See GetBlock to retrieve a raw block instead.
|
||||
func (c *Client) GetBlockVerboseTx(blockHash *chainhash.Hash) (*btcjson.GetBlockVerboseResult, error) {
|
||||
func (c *Client) GetBlockVerboseTx(blockHash *chainhash.Hash) (*btcjson.GetBlockVerboseTxResult, error) {
|
||||
return c.GetBlockVerboseTxAsync(blockHash).Receive()
|
||||
}
|
||||
|
||||
@@ -214,6 +307,79 @@ func (c *Client) GetBlockCount() (int64, error) {
|
||||
return c.GetBlockCountAsync().Receive()
|
||||
}
|
||||
|
||||
// FutureGetChainTxStatsResult is a future promise to deliver the result of a
|
||||
// GetChainTxStatsAsync RPC invocation (or an applicable error).
|
||||
type FutureGetChainTxStatsResult chan *response
|
||||
|
||||
// Receive waits for the response promised by the future and returns transaction statistics
|
||||
func (r FutureGetChainTxStatsResult) Receive() (*btcjson.GetChainTxStatsResult, error) {
|
||||
res, err := receiveFuture(r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var chainTxStats btcjson.GetChainTxStatsResult
|
||||
err = json.Unmarshal(res, &chainTxStats)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &chainTxStats, nil
|
||||
}
|
||||
|
||||
// GetChainTxStatsAsync returns an instance of a type that can be used to get
|
||||
// the result of the RPC at some future time by invoking the Receive function on
|
||||
// the returned instance.
|
||||
//
|
||||
// See GetChainTxStats for the blocking version and more details.
|
||||
func (c *Client) GetChainTxStatsAsync() FutureGetChainTxStatsResult {
|
||||
cmd := btcjson.NewGetChainTxStatsCmd(nil, nil)
|
||||
return c.sendCmd(cmd)
|
||||
}
|
||||
|
||||
// GetChainTxStatsNBlocksAsync returns an instance of a type that can be used to get
|
||||
// the result of the RPC at some future time by invoking the Receive function on
|
||||
// the returned instance.
|
||||
//
|
||||
// See GetChainTxStatsNBlocks for the blocking version and more details.
|
||||
func (c *Client) GetChainTxStatsNBlocksAsync(nBlocks int32) FutureGetChainTxStatsResult {
|
||||
cmd := btcjson.NewGetChainTxStatsCmd(&nBlocks, nil)
|
||||
return c.sendCmd(cmd)
|
||||
}
|
||||
|
||||
// GetChainTxStatsNBlocksBlockHashAsync returns an instance of a type that can be used to get
|
||||
// the result of the RPC at some future time by invoking the Receive function on
|
||||
// the returned instance.
|
||||
//
|
||||
// See GetChainTxStatsNBlocksBlockHash for the blocking version and more details.
|
||||
func (c *Client) GetChainTxStatsNBlocksBlockHashAsync(nBlocks int32, blockHash chainhash.Hash) FutureGetChainTxStatsResult {
|
||||
hash := blockHash.String()
|
||||
cmd := btcjson.NewGetChainTxStatsCmd(&nBlocks, &hash)
|
||||
return c.sendCmd(cmd)
|
||||
}
|
||||
|
||||
// GetChainTxStats returns statistics about the total number and rate of transactions in the chain.
|
||||
//
|
||||
// Size of the window is one month and it ends at chain tip.
|
||||
func (c *Client) GetChainTxStats() (*btcjson.GetChainTxStatsResult, error) {
|
||||
return c.GetChainTxStatsAsync().Receive()
|
||||
}
|
||||
|
||||
// GetChainTxStatsNBlocks returns statistics about the total number and rate of transactions in the chain.
|
||||
//
|
||||
// The argument specifies size of the window in number of blocks. The window ends at chain tip.
|
||||
func (c *Client) GetChainTxStatsNBlocks(nBlocks int32) (*btcjson.GetChainTxStatsResult, error) {
|
||||
return c.GetChainTxStatsNBlocksAsync(nBlocks).Receive()
|
||||
}
|
||||
|
||||
// GetChainTxStatsNBlocksBlockHash returns statistics about the total number and rate of transactions in the chain.
|
||||
//
|
||||
// First argument specifies size of the window in number of blocks.
|
||||
// Second argument is the hash of the block that ends the window.
|
||||
func (c *Client) GetChainTxStatsNBlocksBlockHash(nBlocks int32, blockHash chainhash.Hash) (*btcjson.GetChainTxStatsResult, error) {
|
||||
return c.GetChainTxStatsNBlocksBlockHashAsync(nBlocks, blockHash).Receive()
|
||||
}
|
||||
|
||||
// FutureGetDifficultyResult is a future promise to deliver the result of a
|
||||
// GetDifficultyAsync RPC invocation (or an applicable error).
|
||||
type FutureGetDifficultyResult chan *response
|
||||
@@ -649,6 +815,41 @@ func (c *Client) EstimateFee(numBlocks int64) (float64, error) {
|
||||
return c.EstimateFeeAsync(numBlocks).Receive()
|
||||
}
|
||||
|
||||
// FutureEstimateFeeResult is a future promise to deliver the result of a
|
||||
// EstimateSmartFeeAsync RPC invocation (or an applicable error).
|
||||
type FutureEstimateSmartFeeResult chan *response
|
||||
|
||||
// Receive waits for the response promised by the future and returns the
|
||||
// estimated fee.
|
||||
func (r FutureEstimateSmartFeeResult) Receive() (*btcjson.EstimateSmartFeeResult, error) {
|
||||
res, err := receiveFuture(r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var verified btcjson.EstimateSmartFeeResult
|
||||
err = json.Unmarshal(res, &verified)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &verified, nil
|
||||
}
|
||||
|
||||
// EstimateSmartFeeAsync returns an instance of a type that can be used to get the
|
||||
// result of the RPC at some future time by invoking the Receive function on the
|
||||
// returned instance.
|
||||
//
|
||||
// See EstimateSmartFee for the blocking version and more details.
|
||||
func (c *Client) EstimateSmartFeeAsync(confTarget int64, mode *btcjson.EstimateSmartFeeMode) FutureEstimateSmartFeeResult {
|
||||
cmd := btcjson.NewEstimateSmartFeeCmd(confTarget, mode)
|
||||
return c.sendCmd(cmd)
|
||||
}
|
||||
|
||||
// EstimateSmartFee requests the server to estimate a fee level based on the given parameters.
|
||||
func (c *Client) EstimateSmartFee(confTarget int64, mode *btcjson.EstimateSmartFeeMode) (*btcjson.EstimateSmartFeeResult, error) {
|
||||
return c.EstimateSmartFeeAsync(confTarget, mode).Receive()
|
||||
}
|
||||
|
||||
// FutureVerifyChainResult is a future promise to deliver the result of a
|
||||
// VerifyChainAsync, VerifyChainLevelAsyncRPC, or VerifyChainBlocksAsync
|
||||
// invocation (or an applicable error).
|
||||
@@ -982,3 +1183,44 @@ func (c *Client) GetCFilterHeader(blockHash *chainhash.Hash,
|
||||
filterType wire.FilterType) (*wire.MsgCFHeaders, error) {
|
||||
return c.GetCFilterHeaderAsync(blockHash, filterType).Receive()
|
||||
}
|
||||
|
||||
// FutureGetBlockStatsResult is a future promise to deliver the result of a
|
||||
// GetBlockStatsAsync RPC invocation (or an applicable error).
|
||||
type FutureGetBlockStatsResult chan *response
|
||||
|
||||
// Receive waits for the response promised by the future and returns statistics
|
||||
// of a block at a certain height.
|
||||
func (r FutureGetBlockStatsResult) Receive() (*btcjson.GetBlockStatsResult, error) {
|
||||
res, err := receiveFuture(r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var blockStats btcjson.GetBlockStatsResult
|
||||
err = json.Unmarshal(res, &blockStats)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &blockStats, nil
|
||||
}
|
||||
|
||||
// GetBlockStatsAsync returns an instance of a type that can be used to get
|
||||
// the result of the RPC at some future time by invoking the Receive function on
|
||||
// the returned instance.
|
||||
//
|
||||
// See GetBlockStats or the blocking version and more details.
|
||||
func (c *Client) GetBlockStatsAsync(hashOrHeight interface{}, stats *[]string) FutureGetBlockStatsResult {
|
||||
if hash, ok := hashOrHeight.(*chainhash.Hash); ok {
|
||||
hashOrHeight = hash.String()
|
||||
}
|
||||
|
||||
cmd := btcjson.NewGetBlockStatsCmd(btcjson.HashOrHeight{Value: hashOrHeight}, stats)
|
||||
return c.sendCmd(cmd)
|
||||
}
|
||||
|
||||
// GetBlockStats returns block statistics. First argument specifies height or hash of the target block.
|
||||
// Second argument allows to select certain stats to return.
|
||||
func (c *Client) GetBlockStats(hashOrHeight interface{}, stats *[]string) (*btcjson.GetBlockStatsResult, error) {
|
||||
return c.GetBlockStatsAsync(hashOrHeight, stats).Receive()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user