rpc: Do not store contexts in structs.
Documentation for the context package suggests that Contexts should never be stored in structs.
This commit is contained in:
parent
49b9db1a64
commit
e80ebfea13
21
rpc/dcrd.go
21
rpc/dcrd.go
@ -37,7 +37,6 @@ const (
|
|||||||
// of JSON encoding.
|
// of JSON encoding.
|
||||||
type DcrdRPC struct {
|
type DcrdRPC struct {
|
||||||
Caller
|
Caller
|
||||||
ctx context.Context
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type DcrdConnect struct {
|
type DcrdConnect struct {
|
||||||
@ -79,7 +78,7 @@ func (d *DcrdConnect) Client() (*DcrdRPC, string, error) {
|
|||||||
// If this is a reused connection, we don't need to validate the dcrd config
|
// If this is a reused connection, we don't need to validate the dcrd config
|
||||||
// again.
|
// again.
|
||||||
if !newConnection {
|
if !newConnection {
|
||||||
return &DcrdRPC{c, ctx}, d.client.addr, nil
|
return &DcrdRPC{c}, d.client.addr, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verify dcrd is at the required api version.
|
// Verify dcrd is at the required api version.
|
||||||
@ -137,7 +136,7 @@ func (d *DcrdConnect) Client() (*DcrdRPC, string, error) {
|
|||||||
|
|
||||||
d.log.Debugf("Connected to dcrd")
|
d.log.Debugf("Connected to dcrd")
|
||||||
|
|
||||||
return &DcrdRPC{c, ctx}, d.client.addr, nil
|
return &DcrdRPC{c}, d.client.addr, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetRawTransaction uses getrawtransaction RPC to retrieve details about the
|
// GetRawTransaction uses getrawtransaction RPC to retrieve details about the
|
||||||
@ -145,7 +144,7 @@ func (d *DcrdConnect) Client() (*DcrdRPC, string, error) {
|
|||||||
func (c *DcrdRPC) GetRawTransaction(txHash string) (*dcrdtypes.TxRawResult, error) {
|
func (c *DcrdRPC) GetRawTransaction(txHash string) (*dcrdtypes.TxRawResult, error) {
|
||||||
verbose := 1
|
verbose := 1
|
||||||
var resp dcrdtypes.TxRawResult
|
var resp dcrdtypes.TxRawResult
|
||||||
err := c.Call(c.ctx, "getrawtransaction", &resp, txHash, verbose)
|
err := c.Call(context.TODO(), "getrawtransaction", &resp, txHash, verbose)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -155,7 +154,7 @@ func (c *DcrdRPC) GetRawTransaction(txHash string) (*dcrdtypes.TxRawResult, erro
|
|||||||
// DecodeRawTransaction uses decoderawtransaction RPC to decode raw transaction bytes.
|
// DecodeRawTransaction uses decoderawtransaction RPC to decode raw transaction bytes.
|
||||||
func (c *DcrdRPC) DecodeRawTransaction(txHex string) (*dcrdtypes.TxRawDecodeResult, error) {
|
func (c *DcrdRPC) DecodeRawTransaction(txHex string) (*dcrdtypes.TxRawDecodeResult, error) {
|
||||||
var resp dcrdtypes.TxRawDecodeResult
|
var resp dcrdtypes.TxRawDecodeResult
|
||||||
err := c.Call(c.ctx, "decoderawtransaction", &resp, txHex)
|
err := c.Call(context.TODO(), "decoderawtransaction", &resp, txHex)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -167,7 +166,7 @@ func (c *DcrdRPC) DecodeRawTransaction(txHex string) (*dcrdtypes.TxRawDecodeResu
|
|||||||
// the network. It ignores errors caused by duplicate transactions.
|
// the network. It ignores errors caused by duplicate transactions.
|
||||||
func (c *DcrdRPC) SendRawTransaction(txHex string) error {
|
func (c *DcrdRPC) SendRawTransaction(txHex string) error {
|
||||||
const allowHighFees = false
|
const allowHighFees = false
|
||||||
err := c.Call(c.ctx, "sendrawtransaction", nil, txHex, allowHighFees)
|
err := c.Call(context.TODO(), "sendrawtransaction", nil, txHex, allowHighFees)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
||||||
// Ignore errors caused by the transaction already existing in the
|
// Ignore errors caused by the transaction already existing in the
|
||||||
@ -198,7 +197,7 @@ func (c *DcrdRPC) SendRawTransaction(txHex string) error {
|
|||||||
// agenda has activated on the current network.
|
// agenda has activated on the current network.
|
||||||
func (c *DcrdRPC) IsDCP0010Active() (bool, error) {
|
func (c *DcrdRPC) IsDCP0010Active() (bool, error) {
|
||||||
var info dcrdtypes.GetBlockChainInfoResult
|
var info dcrdtypes.GetBlockChainInfoResult
|
||||||
err := c.Call(c.ctx, "getblockchaininfo", &info)
|
err := c.Call(context.TODO(), "getblockchaininfo", &info)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
@ -214,14 +213,14 @@ func (c *DcrdRPC) IsDCP0010Active() (bool, error) {
|
|||||||
|
|
||||||
// NotifyBlocks uses notifyblocks RPC to request new block notifications from dcrd.
|
// NotifyBlocks uses notifyblocks RPC to request new block notifications from dcrd.
|
||||||
func (c *DcrdRPC) NotifyBlocks() error {
|
func (c *DcrdRPC) NotifyBlocks() error {
|
||||||
return c.Call(c.ctx, "notifyblocks", nil)
|
return c.Call(context.TODO(), "notifyblocks", nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetBestBlockHeader uses getbestblockhash RPC, followed by getblockheader RPC,
|
// GetBestBlockHeader uses getbestblockhash RPC, followed by getblockheader RPC,
|
||||||
// to retrieve the header of the best block known to the dcrd instance.
|
// to retrieve the header of the best block known to the dcrd instance.
|
||||||
func (c *DcrdRPC) GetBestBlockHeader() (*dcrdtypes.GetBlockHeaderVerboseResult, error) {
|
func (c *DcrdRPC) GetBestBlockHeader() (*dcrdtypes.GetBlockHeaderVerboseResult, error) {
|
||||||
var bestBlockHash string
|
var bestBlockHash string
|
||||||
err := c.Call(c.ctx, "getbestblockhash", &bestBlockHash)
|
err := c.Call(context.TODO(), "getbestblockhash", &bestBlockHash)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -238,7 +237,7 @@ func (c *DcrdRPC) GetBestBlockHeader() (*dcrdtypes.GetBlockHeaderVerboseResult,
|
|||||||
func (c *DcrdRPC) GetBlockHeaderVerbose(blockHash string) (*dcrdtypes.GetBlockHeaderVerboseResult, error) {
|
func (c *DcrdRPC) GetBlockHeaderVerbose(blockHash string) (*dcrdtypes.GetBlockHeaderVerboseResult, error) {
|
||||||
const verbose = true
|
const verbose = true
|
||||||
var blockHeader dcrdtypes.GetBlockHeaderVerboseResult
|
var blockHeader dcrdtypes.GetBlockHeaderVerboseResult
|
||||||
err := c.Call(c.ctx, "getblockheader", &blockHeader, blockHash, verbose)
|
err := c.Call(context.TODO(), "getblockheader", &blockHeader, blockHash, verbose)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -249,7 +248,7 @@ func (c *DcrdRPC) GetBlockHeaderVerbose(blockHash string) (*dcrdtypes.GetBlockHe
|
|||||||
// hash is a live ticket known to the dcrd instance.
|
// hash is a live ticket known to the dcrd instance.
|
||||||
func (c *DcrdRPC) ExistsLiveTicket(ticketHash string) (bool, error) {
|
func (c *DcrdRPC) ExistsLiveTicket(ticketHash string) (bool, error) {
|
||||||
var exists string
|
var exists string
|
||||||
err := c.Call(c.ctx, "existslivetickets", &exists, []string{ticketHash})
|
err := c.Call(context.TODO(), "existslivetickets", &exists, []string{ticketHash})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,7 +23,6 @@ var (
|
|||||||
// of JSON encoding.
|
// of JSON encoding.
|
||||||
type WalletRPC struct {
|
type WalletRPC struct {
|
||||||
Caller
|
Caller
|
||||||
ctx context.Context
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type WalletConnect struct {
|
type WalletConnect struct {
|
||||||
@ -73,7 +72,7 @@ func (w *WalletConnect) Clients() ([]*WalletRPC, []string) {
|
|||||||
// If this is a reused connection, we don't need to validate the
|
// If this is a reused connection, we don't need to validate the
|
||||||
// dcrwallet config again.
|
// dcrwallet config again.
|
||||||
if !newConnection {
|
if !newConnection {
|
||||||
walletClients = append(walletClients, &WalletRPC{c, ctx})
|
walletClients = append(walletClients, &WalletRPC{c})
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,7 +122,7 @@ func (w *WalletConnect) Clients() ([]*WalletRPC, []string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Verify dcrwallet is voting and unlocked.
|
// Verify dcrwallet is voting and unlocked.
|
||||||
walletRPC := &WalletRPC{c, ctx}
|
walletRPC := &WalletRPC{c}
|
||||||
walletInfo, err := walletRPC.WalletInfo()
|
walletInfo, err := walletRPC.WalletInfo()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
w.log.Errorf("dcrwallet.WalletInfo error (wallet=%s): %v", c.String(), err)
|
w.log.Errorf("dcrwallet.WalletInfo error (wallet=%s): %v", c.String(), err)
|
||||||
@ -160,7 +159,7 @@ func (w *WalletConnect) Clients() ([]*WalletRPC, []string) {
|
|||||||
// dcrwallet instance is configured.
|
// dcrwallet instance is configured.
|
||||||
func (c *WalletRPC) WalletInfo() (*wallettypes.WalletInfoResult, error) {
|
func (c *WalletRPC) WalletInfo() (*wallettypes.WalletInfoResult, error) {
|
||||||
var walletInfo wallettypes.WalletInfoResult
|
var walletInfo wallettypes.WalletInfoResult
|
||||||
err := c.Call(c.ctx, "walletinfo", &walletInfo)
|
err := c.Call(context.TODO(), "walletinfo", &walletInfo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -173,12 +172,12 @@ func (c *WalletRPC) AddTicketForVoting(votingWIF, blockHash, txHex string) error
|
|||||||
const label = "imported"
|
const label = "imported"
|
||||||
const rescan = false
|
const rescan = false
|
||||||
const scanFrom = 0
|
const scanFrom = 0
|
||||||
err := c.Call(c.ctx, "importprivkey", nil, votingWIF, label, rescan, scanFrom)
|
err := c.Call(context.TODO(), "importprivkey", nil, votingWIF, label, rescan, scanFrom)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("importprivkey failed: %w", err)
|
return fmt.Errorf("importprivkey failed: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = c.Call(c.ctx, "addtransaction", nil, blockHash, txHex)
|
err = c.Call(context.TODO(), "addtransaction", nil, blockHash, txHex)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("addtransaction failed: %w", err)
|
return fmt.Errorf("addtransaction failed: %w", err)
|
||||||
}
|
}
|
||||||
@ -189,14 +188,14 @@ func (c *WalletRPC) AddTicketForVoting(votingWIF, blockHash, txHex string) error
|
|||||||
// SetVoteChoice uses setvotechoice RPC to set the vote choice on the given
|
// SetVoteChoice uses setvotechoice RPC to set the vote choice on the given
|
||||||
// agenda, for the given ticket.
|
// agenda, for the given ticket.
|
||||||
func (c *WalletRPC) SetVoteChoice(agenda, choice, ticketHash string) error {
|
func (c *WalletRPC) SetVoteChoice(agenda, choice, ticketHash string) error {
|
||||||
return c.Call(c.ctx, "setvotechoice", nil, agenda, choice, ticketHash)
|
return c.Call(context.TODO(), "setvotechoice", nil, agenda, choice, ticketHash)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetBestBlockHeight uses getblockcount RPC to query the height of the best
|
// GetBestBlockHeight uses getblockcount RPC to query the height of the best
|
||||||
// block known by the dcrwallet instance.
|
// block known by the dcrwallet instance.
|
||||||
func (c *WalletRPC) GetBestBlockHeight() (int64, error) {
|
func (c *WalletRPC) GetBestBlockHeight() (int64, error) {
|
||||||
var height int64
|
var height int64
|
||||||
err := c.Call(c.ctx, "getblockcount", &height)
|
err := c.Call(context.TODO(), "getblockcount", &height)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
@ -207,7 +206,7 @@ func (c *WalletRPC) GetBestBlockHeight() (int64, error) {
|
|||||||
// known by this dcrwallet instance.
|
// known by this dcrwallet instance.
|
||||||
func (c *WalletRPC) TicketInfo(startHeight int64) (map[string]*wallettypes.TicketInfoResult, error) {
|
func (c *WalletRPC) TicketInfo(startHeight int64) (map[string]*wallettypes.TicketInfoResult, error) {
|
||||||
var result []*wallettypes.TicketInfoResult
|
var result []*wallettypes.TicketInfoResult
|
||||||
err := c.Call(c.ctx, "ticketinfo", &result, startHeight)
|
err := c.Call(context.TODO(), "ticketinfo", &result, startHeight)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -225,17 +224,17 @@ func (c *WalletRPC) TicketInfo(startHeight int64) (map[string]*wallettypes.Ticke
|
|||||||
// RescanFrom uses rescanwallet RPC to trigger the wallet to perform a rescan
|
// RescanFrom uses rescanwallet RPC to trigger the wallet to perform a rescan
|
||||||
// from the specified block height.
|
// from the specified block height.
|
||||||
func (c *WalletRPC) RescanFrom(fromHeight int64) error {
|
func (c *WalletRPC) RescanFrom(fromHeight int64) error {
|
||||||
return c.Call(c.ctx, "rescanwallet", nil, fromHeight)
|
return c.Call(context.TODO(), "rescanwallet", nil, fromHeight)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetTreasuryPolicy sets the specified tickets voting policy for all tspends
|
// SetTreasuryPolicy sets the specified tickets voting policy for all tspends
|
||||||
// published by the given treasury key.
|
// published by the given treasury key.
|
||||||
func (c *WalletRPC) SetTreasuryPolicy(key, policy, ticket string) error {
|
func (c *WalletRPC) SetTreasuryPolicy(key, policy, ticket string) error {
|
||||||
return c.Call(c.ctx, "settreasurypolicy", nil, key, policy, ticket)
|
return c.Call(context.TODO(), "settreasurypolicy", nil, key, policy, ticket)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetTSpendPolicy sets the specified tickets voting policy for a single tspend
|
// SetTSpendPolicy sets the specified tickets voting policy for a single tspend
|
||||||
// identified by its hash.
|
// identified by its hash.
|
||||||
func (c *WalletRPC) SetTSpendPolicy(tSpend, policy, ticket string) error {
|
func (c *WalletRPC) SetTSpendPolicy(tSpend, policy, ticket string) error {
|
||||||
return c.Call(c.ctx, "settspendpolicy", nil, tSpend, policy, ticket)
|
return c.Call(context.TODO(), "settspendpolicy", nil, tSpend, policy, ticket)
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user