mirror of
https://github.com/muun/recovery.git
synced 2025-11-11 06:20:16 -05:00
fix vendor folder
This commit is contained in:
75
vendor/github.com/btcsuite/btcd/rpcclient/chain.go
generated
vendored
75
vendor/github.com/btcsuite/btcd/rpcclient/chain.go
generated
vendored
@@ -253,16 +253,15 @@ func (c *Client) GetDifficulty() (float64, error) {
|
||||
|
||||
// FutureGetBlockChainInfoResult is a promise to deliver the result of a
|
||||
// GetBlockChainInfoAsync RPC invocation (or an applicable error).
|
||||
type FutureGetBlockChainInfoResult chan *response
|
||||
|
||||
// Receive waits for the response promised by the future and returns chain info
|
||||
// result provided by the server.
|
||||
func (r FutureGetBlockChainInfoResult) Receive() (*btcjson.GetBlockChainInfoResult, error) {
|
||||
res, err := receiveFuture(r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
type FutureGetBlockChainInfoResult struct {
|
||||
client *Client
|
||||
Response chan *response
|
||||
}
|
||||
|
||||
// unmarshalPartialGetBlockChainInfoResult unmarshals the response into an
|
||||
// instance of GetBlockChainInfoResult without populating the SoftForks and
|
||||
// UnifiedSoftForks fields.
|
||||
func unmarshalPartialGetBlockChainInfoResult(res []byte) (*btcjson.GetBlockChainInfoResult, error) {
|
||||
var chainInfo btcjson.GetBlockChainInfoResult
|
||||
if err := json.Unmarshal(res, &chainInfo); err != nil {
|
||||
return nil, err
|
||||
@@ -270,6 +269,59 @@ func (r FutureGetBlockChainInfoResult) Receive() (*btcjson.GetBlockChainInfoResu
|
||||
return &chainInfo, nil
|
||||
}
|
||||
|
||||
// unmarshalGetBlockChainInfoResultSoftForks properly unmarshals the softforks
|
||||
// related fields into the GetBlockChainInfoResult instance.
|
||||
func unmarshalGetBlockChainInfoResultSoftForks(chainInfo *btcjson.GetBlockChainInfoResult,
|
||||
version BackendVersion, res []byte) error {
|
||||
|
||||
switch version {
|
||||
// Versions of bitcoind on or after v0.19.0 use the unified format.
|
||||
case BitcoindPost19:
|
||||
var softForks btcjson.UnifiedSoftForks
|
||||
if err := json.Unmarshal(res, &softForks); err != nil {
|
||||
return err
|
||||
}
|
||||
chainInfo.UnifiedSoftForks = &softForks
|
||||
|
||||
// All other versions use the original format.
|
||||
default:
|
||||
var softForks btcjson.SoftForks
|
||||
if err := json.Unmarshal(res, &softForks); err != nil {
|
||||
return err
|
||||
}
|
||||
chainInfo.SoftForks = &softForks
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Receive waits for the response promised by the future and returns chain info
|
||||
// result provided by the server.
|
||||
func (r FutureGetBlockChainInfoResult) Receive() (*btcjson.GetBlockChainInfoResult, error) {
|
||||
res, err := receiveFuture(r.Response)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
chainInfo, err := unmarshalPartialGetBlockChainInfoResult(res)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Inspect the version to determine how we'll need to parse the
|
||||
// softforks from the response.
|
||||
version, err := r.client.BackendVersion()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = unmarshalGetBlockChainInfoResultSoftForks(chainInfo, version, res)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return chainInfo, nil
|
||||
}
|
||||
|
||||
// GetBlockChainInfoAsync 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.
|
||||
@@ -277,7 +329,10 @@ func (r FutureGetBlockChainInfoResult) Receive() (*btcjson.GetBlockChainInfoResu
|
||||
// See GetBlockChainInfo for the blocking version and more details.
|
||||
func (c *Client) GetBlockChainInfoAsync() FutureGetBlockChainInfoResult {
|
||||
cmd := btcjson.NewGetBlockChainInfoCmd()
|
||||
return c.sendCmd(cmd)
|
||||
return FutureGetBlockChainInfoResult{
|
||||
client: c,
|
||||
Response: c.sendCmd(cmd),
|
||||
}
|
||||
}
|
||||
|
||||
// GetBlockChainInfo returns information related to the processing state of
|
||||
|
||||
109
vendor/github.com/btcsuite/btcd/rpcclient/infrastructure.go
generated
vendored
109
vendor/github.com/btcsuite/btcd/rpcclient/infrastructure.go
generated
vendored
@@ -19,6 +19,7 @@ import (
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
@@ -103,6 +104,22 @@ type jsonRequest struct {
|
||||
responseChan chan *response
|
||||
}
|
||||
|
||||
// BackendVersion represents the version of the backend the client is currently
|
||||
// connected to.
|
||||
type BackendVersion uint8
|
||||
|
||||
const (
|
||||
// BitcoindPre19 represents a bitcoind version before 0.19.0.
|
||||
BitcoindPre19 BackendVersion = iota
|
||||
|
||||
// BitcoindPost19 represents a bitcoind version equal to or greater than
|
||||
// 0.19.0.
|
||||
BitcoindPost19
|
||||
|
||||
// Btcd represents a catch-all btcd version.
|
||||
Btcd
|
||||
)
|
||||
|
||||
// Client represents a Bitcoin RPC client which allows easy access to the
|
||||
// various RPC methods available on a Bitcoin RPC server. Each of the wrapper
|
||||
// functions handle the details of converting the passed and return types to and
|
||||
@@ -129,6 +146,11 @@ type Client struct {
|
||||
// POST mode.
|
||||
httpClient *http.Client
|
||||
|
||||
// backendVersion is the version of the backend the client is currently
|
||||
// connected to. This should be retrieved through GetVersion.
|
||||
backendVersionMu sync.Mutex
|
||||
backendVersion *BackendVersion
|
||||
|
||||
// mtx is a mutex to protect access to connection related fields.
|
||||
mtx sync.Mutex
|
||||
|
||||
@@ -659,6 +681,12 @@ out:
|
||||
log.Infof("Reestablished connection to RPC server %s",
|
||||
c.config.Host)
|
||||
|
||||
// Reset the version in case the backend was
|
||||
// disconnected due to an upgrade.
|
||||
c.backendVersionMu.Lock()
|
||||
c.backendVersion = nil
|
||||
c.backendVersionMu.Unlock()
|
||||
|
||||
// Reset the connection state and signal the reconnect
|
||||
// has happened.
|
||||
c.wsConn = wsConn
|
||||
@@ -1332,3 +1360,84 @@ func (c *Client) Connect(tries int) error {
|
||||
// All connection attempts failed, so return the last error.
|
||||
return err
|
||||
}
|
||||
|
||||
const (
|
||||
// bitcoind19Str is the string representation of bitcoind v0.19.0.
|
||||
bitcoind19Str = "0.19.0"
|
||||
|
||||
// bitcoindVersionPrefix specifies the prefix included in every bitcoind
|
||||
// version exposed through GetNetworkInfo.
|
||||
bitcoindVersionPrefix = "/Satoshi:"
|
||||
|
||||
// bitcoindVersionSuffix specifies the suffix included in every bitcoind
|
||||
// version exposed through GetNetworkInfo.
|
||||
bitcoindVersionSuffix = "/"
|
||||
)
|
||||
|
||||
// parseBitcoindVersion parses the bitcoind version from its string
|
||||
// representation.
|
||||
func parseBitcoindVersion(version string) BackendVersion {
|
||||
// Trim the version of its prefix and suffix to determine the
|
||||
// appropriate version number.
|
||||
version = strings.TrimPrefix(
|
||||
strings.TrimSuffix(version, bitcoindVersionSuffix),
|
||||
bitcoindVersionPrefix,
|
||||
)
|
||||
switch {
|
||||
case version < bitcoind19Str:
|
||||
return BitcoindPre19
|
||||
default:
|
||||
return BitcoindPost19
|
||||
}
|
||||
}
|
||||
|
||||
// BackendVersion retrieves the version of the backend the client is currently
|
||||
// connected to.
|
||||
func (c *Client) BackendVersion() (BackendVersion, error) {
|
||||
c.backendVersionMu.Lock()
|
||||
defer c.backendVersionMu.Unlock()
|
||||
|
||||
if c.backendVersion != nil {
|
||||
return *c.backendVersion, nil
|
||||
}
|
||||
|
||||
// We'll start by calling GetInfo. This method doesn't exist for
|
||||
// bitcoind nodes as of v0.16.0, so we'll assume the client is connected
|
||||
// to a btcd backend if it does exist.
|
||||
info, err := c.GetInfo()
|
||||
|
||||
switch err := err.(type) {
|
||||
// Parse the btcd version and cache it.
|
||||
case nil:
|
||||
log.Debugf("Detected btcd version: %v", info.Version)
|
||||
version := Btcd
|
||||
c.backendVersion = &version
|
||||
return *c.backendVersion, nil
|
||||
|
||||
// Inspect the RPC error to ensure the method was not found, otherwise
|
||||
// we actually ran into an error.
|
||||
case *btcjson.RPCError:
|
||||
if err.Code != btcjson.ErrRPCMethodNotFound.Code {
|
||||
return 0, fmt.Errorf("unable to detect btcd version: "+
|
||||
"%v", err)
|
||||
}
|
||||
|
||||
default:
|
||||
return 0, fmt.Errorf("unable to detect btcd version: %v", err)
|
||||
}
|
||||
|
||||
// Since the GetInfo method was not found, we assume the client is
|
||||
// connected to a bitcoind backend, which exposes its version through
|
||||
// GetNetworkInfo.
|
||||
networkInfo, err := c.GetNetworkInfo()
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf("unable to detect bitcoind version: %v", err)
|
||||
}
|
||||
|
||||
// Parse the bitcoind version and cache it.
|
||||
log.Debugf("Detected bitcoind version: %v", networkInfo.SubVersion)
|
||||
version := parseBitcoindVersion(networkInfo.SubVersion)
|
||||
c.backendVersion = &version
|
||||
|
||||
return *c.backendVersion, nil
|
||||
}
|
||||
|
||||
37
vendor/github.com/btcsuite/btcd/rpcclient/net.go
generated
vendored
37
vendor/github.com/btcsuite/btcd/rpcclient/net.go
generated
vendored
@@ -244,6 +244,43 @@ func (c *Client) Ping() error {
|
||||
return c.PingAsync().Receive()
|
||||
}
|
||||
|
||||
// FutureGetNetworkInfoResult is a future promise to deliver the result of a
|
||||
// GetNetworkInfoAsync RPC invocation (or an applicable error).
|
||||
type FutureGetNetworkInfoResult chan *response
|
||||
|
||||
// Receive waits for the response promised by the future and returns data about
|
||||
// the current network.
|
||||
func (r FutureGetNetworkInfoResult) Receive() (*btcjson.GetNetworkInfoResult, error) {
|
||||
res, err := receiveFuture(r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Unmarshal result as an array of getpeerinfo result objects.
|
||||
var networkInfo btcjson.GetNetworkInfoResult
|
||||
err = json.Unmarshal(res, &networkInfo)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &networkInfo, nil
|
||||
}
|
||||
|
||||
// GetNetworkInfoAsync 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 GetNetworkInfo for the blocking version and more details.
|
||||
func (c *Client) GetNetworkInfoAsync() FutureGetNetworkInfoResult {
|
||||
cmd := btcjson.NewGetNetworkInfoCmd()
|
||||
return c.sendCmd(cmd)
|
||||
}
|
||||
|
||||
// GetNetworkInfo returns data about the current network.
|
||||
func (c *Client) GetNetworkInfo() (*btcjson.GetNetworkInfoResult, error) {
|
||||
return c.GetNetworkInfoAsync().Receive()
|
||||
}
|
||||
|
||||
// FutureGetPeerInfoResult is a future promise to deliver the result of a
|
||||
// GetPeerInfoAsync RPC invocation (or an applicable error).
|
||||
type FutureGetPeerInfoResult chan *response
|
||||
|
||||
32
vendor/github.com/btcsuite/btcd/rpcclient/rawtransactions.go
generated
vendored
32
vendor/github.com/btcsuite/btcd/rpcclient/rawtransactions.go
generated
vendored
@@ -15,6 +15,12 @@ import (
|
||||
"github.com/btcsuite/btcutil"
|
||||
)
|
||||
|
||||
const (
|
||||
// defaultMaxFeeRate is the default maximum fee rate in sat/KB enforced
|
||||
// by bitcoind v0.19.0 or after for transaction broadcast.
|
||||
defaultMaxFeeRate = btcutil.SatoshiPerBitcoin / 10
|
||||
)
|
||||
|
||||
// SigHashType enumerates the available signature hashing types that the
|
||||
// SignRawTransaction function accepts.
|
||||
type SigHashType string
|
||||
@@ -296,7 +302,31 @@ func (c *Client) SendRawTransactionAsync(tx *wire.MsgTx, allowHighFees bool) Fut
|
||||
txHex = hex.EncodeToString(buf.Bytes())
|
||||
}
|
||||
|
||||
cmd := btcjson.NewSendRawTransactionCmd(txHex, &allowHighFees)
|
||||
// Due to differences in the sendrawtransaction API for different
|
||||
// backends, we'll need to inspect our version and construct the
|
||||
// appropriate request.
|
||||
version, err := c.BackendVersion()
|
||||
if err != nil {
|
||||
return newFutureError(err)
|
||||
}
|
||||
|
||||
var cmd *btcjson.SendRawTransactionCmd
|
||||
switch version {
|
||||
// Starting from bitcoind v0.19.0, the MaxFeeRate field should be used.
|
||||
case BitcoindPost19:
|
||||
// Using a 0 MaxFeeRate is interpreted as a maximum fee rate not
|
||||
// being enforced by bitcoind.
|
||||
var maxFeeRate int32
|
||||
if !allowHighFees {
|
||||
maxFeeRate = defaultMaxFeeRate
|
||||
}
|
||||
cmd = btcjson.NewBitcoindSendRawTransactionCmd(txHex, maxFeeRate)
|
||||
|
||||
// Otherwise, use the AllowHighFees field.
|
||||
default:
|
||||
cmd = btcjson.NewSendRawTransactionCmd(txHex, &allowHighFees)
|
||||
}
|
||||
|
||||
return c.sendCmd(cmd)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user