fix errorlint warnings (#193)

This commit is contained in:
David Hill 2020-11-25 15:14:18 +00:00 committed by GitHub
parent bd6b2e42f4
commit 2a096d81f9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 49 additions and 47 deletions

View File

@ -183,12 +183,12 @@ func loadConfig() (*config, error) {
preParser := flags.NewParser(&preCfg, flags.HelpFlag) preParser := flags.NewParser(&preCfg, flags.HelpFlag)
_, err := preParser.Parse() _, err := preParser.Parse()
if err != nil { if err != nil {
if e, ok := err.(*flags.Error); ok && e.Type != flags.ErrHelp { var e *flags.Error
return nil, err if errors.As(err, &e) && e.Type == flags.ErrHelp {
} else if ok && e.Type == flags.ErrHelp {
fmt.Fprintln(os.Stdout, err) fmt.Fprintln(os.Stdout, err)
os.Exit(0) os.Exit(0)
} }
return nil, err
} }
appName := filepath.Base(os.Args[0]) appName := filepath.Base(os.Args[0])
@ -214,7 +214,7 @@ func loadConfig() (*config, error) {
// Create the home directory if it doesn't already exist. // Create the home directory if it doesn't already exist.
err = os.MkdirAll(cfg.HomeDir, 0700) err = os.MkdirAll(cfg.HomeDir, 0700)
if err != nil { if err != nil {
err := fmt.Errorf("failed to create home directory: %v", err) err := fmt.Errorf("failed to create home directory: %w", err)
fmt.Fprintln(os.Stderr, err) fmt.Fprintln(os.Stderr, err)
return nil, err return nil, err
} }
@ -241,13 +241,14 @@ func loadConfig() (*config, error) {
err = flags.NewIniParser(parser).ParseFile(preCfg.ConfigFile) err = flags.NewIniParser(parser).ParseFile(preCfg.ConfigFile)
if err != nil { if err != nil {
return nil, fmt.Errorf("error parsing config file: %v", err) return nil, fmt.Errorf("error parsing config file: %w", err)
} }
// Parse command line options again to ensure they take precedence. // Parse command line options again to ensure they take precedence.
_, err = parser.Parse() _, err = parser.Parse()
if err != nil { if err != nil {
if e, ok := err.(*flags.Error); !ok || e.Type != flags.ErrHelp { var e *flags.Error
if !errors.As(err, &e) || e.Type != flags.ErrHelp {
fmt.Fprintln(os.Stderr, usageMessage) fmt.Fprintln(os.Stderr, usageMessage)
} }
return nil, err return nil, err
@ -304,7 +305,7 @@ func loadConfig() (*config, error) {
cfg.DcrdCert = cleanAndExpandPath(cfg.DcrdCert) cfg.DcrdCert = cleanAndExpandPath(cfg.DcrdCert)
cfg.dcrdCert, err = ioutil.ReadFile(cfg.DcrdCert) cfg.dcrdCert, err = ioutil.ReadFile(cfg.DcrdCert)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to read dcrd cert file: %v", err) return nil, fmt.Errorf("failed to read dcrd cert file: %w", err)
} }
// Ensure the dcrwallet RPC username is set. // Ensure the dcrwallet RPC username is set.
@ -356,7 +357,7 @@ func loadConfig() (*config, error) {
certs[i] = cleanAndExpandPath(certs[i]) certs[i] = cleanAndExpandPath(certs[i])
cfg.walletCerts[i], err = ioutil.ReadFile(certs[i]) cfg.walletCerts[i], err = ioutil.ReadFile(certs[i])
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to read dcrwallet cert file: %v", err) return nil, fmt.Errorf("failed to read dcrwallet cert file: %w", err)
} }
} }
@ -376,7 +377,7 @@ func loadConfig() (*config, error) {
dataDir := filepath.Join(cfg.HomeDir, "data", cfg.netParams.Name) dataDir := filepath.Join(cfg.HomeDir, "data", cfg.netParams.Name)
err = os.MkdirAll(dataDir, 0700) err = os.MkdirAll(dataDir, 0700)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to create data directory: %v", err) return nil, fmt.Errorf("failed to create data directory: %w", err)
} }
// Initialize loggers and log rotation. // Initialize loggers and log rotation.
@ -398,13 +399,13 @@ func loadConfig() (*config, error) {
// Ensure provided value is a valid key for the selected network. // Ensure provided value is a valid key for the selected network.
_, err = hdkeychain.NewKeyFromString(cfg.FeeXPub, cfg.netParams.Params) _, err = hdkeychain.NewKeyFromString(cfg.FeeXPub, cfg.netParams.Params)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to parse feexpub: %v", err) return nil, fmt.Errorf("failed to parse feexpub: %w", err)
} }
// Create new database. // Create new database.
err = database.CreateNew(cfg.dbPath, cfg.FeeXPub) err = database.CreateNew(cfg.dbPath, cfg.FeeXPub)
if err != nil { if err != nil {
return nil, fmt.Errorf("error creating db file %s: %v", cfg.dbPath, err) return nil, fmt.Errorf("error creating db file %s: %w", cfg.dbPath, err)
} }
// Exit with success // Exit with success

View File

@ -72,13 +72,13 @@ func writeHotBackupFile(db *bolt.DB) error {
return tx.CopyFile(tempPath, backupFileMode) return tx.CopyFile(tempPath, backupFileMode)
}) })
if err != nil { if err != nil {
return fmt.Errorf("tx.CopyFile: %v", err) return fmt.Errorf("tx.CopyFile: %w", err)
} }
// Rename temporary file to actual backup file. // Rename temporary file to actual backup file.
err = os.Rename(tempPath, backupPath) err = os.Rename(tempPath, backupPath)
if err != nil { if err != nil {
return fmt.Errorf("os.Rename: %v", err) return fmt.Errorf("os.Rename: %w", err)
} }
log.Tracef("Database backup written to %s", backupPath) log.Tracef("Database backup written to %s", backupPath)
@ -95,7 +95,7 @@ func CreateNew(dbFile, feeXPub string) error {
db, err := bolt.Open(dbFile, 0600, &bolt.Options{Timeout: 1 * time.Second}) db, err := bolt.Open(dbFile, 0600, &bolt.Options{Timeout: 1 * time.Second})
if err != nil { if err != nil {
return fmt.Errorf("unable to open db file: %v", err) return fmt.Errorf("unable to open db file: %w", err)
} }
defer db.Close() defer db.Close()
@ -105,7 +105,7 @@ func CreateNew(dbFile, feeXPub string) error {
// Create parent bucket. // Create parent bucket.
vspBkt, err := tx.CreateBucket(vspBktK) vspBkt, err := tx.CreateBucket(vspBktK)
if err != nil { if err != nil {
return fmt.Errorf("failed to create %s bucket: %v", string(vspBktK), err) return fmt.Errorf("failed to create %s bucket: %w", string(vspBktK), err)
} }
// Initialize with database version 1. // Initialize with database version 1.
@ -121,7 +121,7 @@ func CreateNew(dbFile, feeXPub string) error {
// Generate ed25519 key // Generate ed25519 key
_, signKey, err := ed25519.GenerateKey(rand.Reader) _, signKey, err := ed25519.GenerateKey(rand.Reader)
if err != nil { if err != nil {
return fmt.Errorf("failed to generate signing key: %v", err) return fmt.Errorf("failed to generate signing key: %w", err)
} }
err = vspBkt.Put(privateKeyK, signKey.Seed()) err = vspBkt.Put(privateKeyK, signKey.Seed())
if err != nil { if err != nil {
@ -150,13 +150,13 @@ func CreateNew(dbFile, feeXPub string) error {
// Create ticket bucket. // Create ticket bucket.
_, err = vspBkt.CreateBucket(ticketBktK) _, err = vspBkt.CreateBucket(ticketBktK)
if err != nil { if err != nil {
return fmt.Errorf("failed to create %s bucket: %v", string(ticketBktK), err) return fmt.Errorf("failed to create %s bucket: %w", string(ticketBktK), err)
} }
// Create vote change bucket. // Create vote change bucket.
_, err = vspBkt.CreateBucket(voteChangeBktK) _, err = vspBkt.CreateBucket(voteChangeBktK)
if err != nil { if err != nil {
return fmt.Errorf("failed to create %s bucket: %v", string(voteChangeBktK), err) return fmt.Errorf("failed to create %s bucket: %w", string(voteChangeBktK), err)
} }
return nil return nil
@ -185,7 +185,7 @@ func Open(ctx context.Context, shutdownWg *sync.WaitGroup, dbFile string, backup
db, err := bolt.Open(dbFile, 0600, &bolt.Options{Timeout: 1 * time.Second}) db, err := bolt.Open(dbFile, 0600, &bolt.Options{Timeout: 1 * time.Second})
if err != nil { if err != nil {
return nil, fmt.Errorf("unable to open db file: %v", err) return nil, fmt.Errorf("unable to open db file: %w", err)
} }
log.Debugf("Opened database file %s", dbFile) log.Debugf("Opened database file %s", dbFile)

View File

@ -99,7 +99,7 @@ func (vdb *VspDatabase) InsertNewTicket(ticket Ticket) error {
var t Ticket var t Ticket
err := json.Unmarshal(v, &t) err := json.Unmarshal(v, &t)
if err != nil { if err != nil {
return fmt.Errorf("could not unmarshal ticket: %v", err) return fmt.Errorf("could not unmarshal ticket: %w", err)
} }
if t.FeeAddress == ticket.FeeAddress { if t.FeeAddress == ticket.FeeAddress {
@ -118,7 +118,7 @@ func (vdb *VspDatabase) InsertNewTicket(ticket Ticket) error {
ticketBytes, err := json.Marshal(ticket) ticketBytes, err := json.Marshal(ticket)
if err != nil { if err != nil {
return fmt.Errorf("could not marshal ticket: %v", err) return fmt.Errorf("could not marshal ticket: %w", err)
} }
return ticketBkt.Put(hashBytes, ticketBytes) return ticketBkt.Put(hashBytes, ticketBytes)
@ -134,7 +134,7 @@ func (vdb *VspDatabase) DeleteTicket(ticket Ticket) error {
err := ticketBkt.Delete([]byte(ticket.Hash)) err := ticketBkt.Delete([]byte(ticket.Hash))
if err != nil { if err != nil {
return fmt.Errorf("could not delete ticket: %v", err) return fmt.Errorf("could not delete ticket: %w", err)
} }
return nil return nil
@ -156,7 +156,7 @@ func (vdb *VspDatabase) UpdateTicket(ticket Ticket) error {
ticketBytes, err := json.Marshal(ticket) ticketBytes, err := json.Marshal(ticket)
if err != nil { if err != nil {
return fmt.Errorf("could not marshal ticket: %v", err) return fmt.Errorf("could not marshal ticket: %w", err)
} }
return ticketBkt.Put(hashBytes, ticketBytes) return ticketBkt.Put(hashBytes, ticketBytes)
@ -179,7 +179,7 @@ func (vdb *VspDatabase) GetTicketByHash(ticketHash string) (Ticket, bool, error)
err := json.Unmarshal(ticketBytes, &ticket) err := json.Unmarshal(ticketBytes, &ticket)
if err != nil { if err != nil {
return fmt.Errorf("could not unmarshal ticket: %v", err) return fmt.Errorf("could not unmarshal ticket: %w", err)
} }
found = true found = true
@ -202,7 +202,7 @@ func (vdb *VspDatabase) CountTickets() (int64, int64, int64, error) {
var ticket Ticket var ticket Ticket
err := json.Unmarshal(v, &ticket) err := json.Unmarshal(v, &ticket)
if err != nil { if err != nil {
return fmt.Errorf("could not unmarshal ticket: %v", err) return fmt.Errorf("could not unmarshal ticket: %w", err)
} }
if ticket.FeeTxStatus == FeeConfirmed { if ticket.FeeTxStatus == FeeConfirmed {
@ -276,7 +276,7 @@ func (vdb *VspDatabase) filterTickets(filter func(Ticket) bool) ([]Ticket, error
var ticket Ticket var ticket Ticket
err := json.Unmarshal(v, &ticket) err := json.Unmarshal(v, &ticket)
if err != nil { if err != nil {
return fmt.Errorf("could not unmarshal ticket: %v", err) return fmt.Errorf("could not unmarshal ticket: %w", err)
} }
if filter(ticket) { if filter(ticket) {

View File

@ -32,14 +32,14 @@ func (vdb *VspDatabase) SaveVoteChange(ticketHash string, record VoteChangeRecor
// Serialize record for storage in the database. // Serialize record for storage in the database.
recordBytes, err := json.Marshal(record) recordBytes, err := json.Marshal(record)
if err != nil { if err != nil {
return fmt.Errorf("could not marshal vote change record: %v", err) return fmt.Errorf("could not marshal vote change record: %w", err)
} }
// Create or get a bucket for this ticket. // Create or get a bucket for this ticket.
bkt, err := tx.Bucket(vspBktK).Bucket(voteChangeBktK). bkt, err := tx.Bucket(vspBktK).Bucket(voteChangeBktK).
CreateBucketIfNotExists([]byte(ticketHash)) CreateBucketIfNotExists([]byte(ticketHash))
if err != nil { if err != nil {
return fmt.Errorf("failed to create vote change bucket (ticketHash=%s): %v", return fmt.Errorf("failed to create vote change bucket (ticketHash=%s): %w",
ticketHash, err) ticketHash, err)
} }
@ -60,7 +60,7 @@ func (vdb *VspDatabase) SaveVoteChange(ticketHash string, record VoteChangeRecor
return nil return nil
}) })
if err != nil { if err != nil {
return fmt.Errorf("error iterating over vote change bucket: %v", err) return fmt.Errorf("error iterating over vote change bucket: %w", err)
} }
// If bucket is at (or over) the limit of max allowed records, remove // If bucket is at (or over) the limit of max allowed records, remove
@ -70,7 +70,7 @@ func (vdb *VspDatabase) SaveVoteChange(ticketHash string, record VoteChangeRecor
binary.LittleEndian.PutUint32(keyBytes, lowest) binary.LittleEndian.PutUint32(keyBytes, lowest)
err = bkt.Delete(keyBytes) err = bkt.Delete(keyBytes)
if err != nil { if err != nil {
return fmt.Errorf("failed to delete old vote change record: %v", err) return fmt.Errorf("failed to delete old vote change record: %w", err)
} }
} }
@ -87,7 +87,7 @@ func (vdb *VspDatabase) SaveVoteChange(ticketHash string, record VoteChangeRecor
// Insert record. // Insert record.
err = bkt.Put(keyBytes, recordBytes) err = bkt.Put(keyBytes, recordBytes)
if err != nil { if err != nil {
return fmt.Errorf("could not store vote change record: %v", err) return fmt.Errorf("could not store vote change record: %w", err)
} }
return nil return nil
@ -112,7 +112,7 @@ func (vdb *VspDatabase) GetVoteChanges(ticketHash string) (map[uint32]VoteChange
var record VoteChangeRecord var record VoteChangeRecord
err := json.Unmarshal(v, &record) err := json.Unmarshal(v, &record)
if err != nil { if err != nil {
return fmt.Errorf("could not unmarshal vote change record: %v", err) return fmt.Errorf("could not unmarshal vote change record: %w", err)
} }
records[binary.LittleEndian.Uint32(k)] = record records[binary.LittleEndian.Uint32(k)] = record
@ -120,7 +120,7 @@ func (vdb *VspDatabase) GetVoteChanges(ticketHash string) (map[uint32]VoteChange
return nil return nil
}) })
if err != nil { if err != nil {
return fmt.Errorf("error iterating over vote change bucket: %v", err) return fmt.Errorf("error iterating over vote change bucket: %w", err)
} }
return nil return nil

View File

@ -49,7 +49,7 @@ func SetupDcrd(user, pass, addr string, cert []byte, n wsrpc.Notifier) DcrdConne
func (d *DcrdConnect) Client(ctx context.Context, netParams *chaincfg.Params) (*DcrdRPC, error) { func (d *DcrdConnect) Client(ctx context.Context, netParams *chaincfg.Params) (*DcrdRPC, error) {
c, newConnection, err := d.dial(ctx) c, newConnection, err := d.dial(ctx)
if err != nil { if err != nil {
return nil, fmt.Errorf("dcrd connection error: %v", err) return nil, fmt.Errorf("dcrd connection error: %w", err)
} }
// 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
@ -63,7 +63,7 @@ func (d *DcrdConnect) Client(ctx context.Context, netParams *chaincfg.Params) (*
err = c.Call(ctx, "version", &verMap) err = c.Call(ctx, "version", &verMap)
if err != nil { if err != nil {
d.Close() d.Close()
return nil, fmt.Errorf("dcrd version check failed: %v", err) return nil, fmt.Errorf("dcrd version check failed: %w", err)
} }
ver, exists := verMap["dcrdjsonrpcapi"] ver, exists := verMap["dcrdjsonrpcapi"]
@ -84,7 +84,7 @@ func (d *DcrdConnect) Client(ctx context.Context, netParams *chaincfg.Params) (*
err = c.Call(ctx, "getcurrentnet", &netID) err = c.Call(ctx, "getcurrentnet", &netID)
if err != nil { if err != nil {
d.Close() d.Close()
return nil, fmt.Errorf("dcrd getcurrentnet check failed: %v", err) return nil, fmt.Errorf("dcrd getcurrentnet check failed: %w", err)
} }
if netID != netParams.Net { if netID != netParams.Net {
d.Close() d.Close()
@ -96,7 +96,7 @@ func (d *DcrdConnect) Client(ctx context.Context, netParams *chaincfg.Params) (*
err = c.Call(ctx, "getinfo", &info) err = c.Call(ctx, "getinfo", &info)
if err != nil { if err != nil {
d.Close() d.Close()
return nil, fmt.Errorf("dcrd getinfo check failed: %v", err) return nil, fmt.Errorf("dcrd getinfo check failed: %w", err)
} }
if !info.TxIndex { if !info.TxIndex {
d.Close() d.Close()

View File

@ -164,12 +164,12 @@ func (c *WalletRPC) AddTicketForVoting(votingWIF, blockHash, txHex string) error
scanFrom := 0 scanFrom := 0
err := c.Call(c.ctx, "importprivkey", nil, votingWIF, label, rescan, scanFrom) err := c.Call(c.ctx, "importprivkey", nil, votingWIF, label, rescan, scanFrom)
if err != nil { if err != nil {
return fmt.Errorf("importprivkey failed: %v", err) return fmt.Errorf("importprivkey failed: %w", err)
} }
err = c.Call(c.ctx, "addtransaction", nil, blockHash, txHex) err = c.Call(c.ctx, "addtransaction", nil, blockHash, txHex)
if err != nil { if err != nil {
return fmt.Errorf("addtransaction failed: %v", err) return fmt.Errorf("addtransaction failed: %w", err)
} }
return nil return nil

View File

@ -57,7 +57,7 @@ func (m *addressGenerator) NextAddress() (string, uint32, error) {
m.lastUsedIndex++ m.lastUsedIndex++
key, err = m.external.Child(m.lastUsedIndex) key, err = m.external.Child(m.lastUsedIndex)
if err != nil { if err != nil {
if err == hdkeychain.ErrInvalidChild { if errors.Is(err, hdkeychain.ErrInvalidChild) {
invalidChildren++ invalidChildren++
log.Warnf("Generating address for index %d failed: %v", m.lastUsedIndex, err) log.Warnf("Generating address for index %d failed: %v", m.lastUsedIndex, err)
// If this happens 3 times, something is seriously wrong, so // If this happens 3 times, something is seriously wrong, so

View File

@ -9,6 +9,7 @@ import (
"crypto/ed25519" "crypto/ed25519"
"encoding/base64" "encoding/base64"
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"net" "net"
"net/http" "net/http"
@ -62,34 +63,34 @@ func Start(ctx context.Context, requestShutdownChan chan struct{}, shutdownWg *s
// Get keys for signing API responses from the database. // Get keys for signing API responses from the database.
signPrivKey, signPubKey, err = vdb.KeyPair() signPrivKey, signPubKey, err = vdb.KeyPair()
if err != nil { if err != nil {
return fmt.Errorf("db.Keypair error: %v", err) return fmt.Errorf("db.Keypair error: %w", err)
} }
// Populate cached VSP stats before starting webserver. // Populate cached VSP stats before starting webserver.
err = updateVSPStats(vdb, config) err = updateVSPStats(vdb, config)
if err != nil { if err != nil {
return fmt.Errorf("could not initialize VSP stats cache: %v", err) return fmt.Errorf("could not initialize VSP stats cache: %w", err)
} }
// Get the last used address index and the feeXpub from the database, and // Get the last used address index and the feeXpub from the database, and
// use them to initialize the address generator. // use them to initialize the address generator.
idx, err := vdb.GetLastAddressIndex() idx, err := vdb.GetLastAddressIndex()
if err != nil { if err != nil {
return fmt.Errorf("db.GetLastAddressIndex error: %v", err) return fmt.Errorf("db.GetLastAddressIndex error: %w", err)
} }
feeXPub, err := vdb.GetFeeXPub() feeXPub, err := vdb.GetFeeXPub()
if err != nil { if err != nil {
return fmt.Errorf("db.GetFeeXPub error: %v", err) return fmt.Errorf("db.GetFeeXPub error: %w", err)
} }
addrGen, err = newAddressGenerator(feeXPub, config.NetParams, idx) addrGen, err = newAddressGenerator(feeXPub, config.NetParams, idx)
if err != nil { if err != nil {
return fmt.Errorf("failed to initialize fee address generator: %v", err) return fmt.Errorf("failed to initialize fee address generator: %w", err)
} }
// Get the secret key used to initialize the cookie store. // Get the secret key used to initialize the cookie store.
cookieSecret, err := vdb.GetCookieSecret() cookieSecret, err := vdb.GetCookieSecret()
if err != nil { if err != nil {
return fmt.Errorf("db.GetCookieSecret error: %v", err) return fmt.Errorf("db.GetCookieSecret error: %w", err)
} }
// Create TCP listener. // Create TCP listener.
@ -130,7 +131,7 @@ func Start(ctx context.Context, requestShutdownChan chan struct{}, shutdownWg *s
// If the server dies for any reason other than ErrServerClosed (from // If the server dies for any reason other than ErrServerClosed (from
// graceful server.Shutdown), log the error and request vspd be // graceful server.Shutdown), log the error and request vspd be
// shutdown. // shutdown.
if err != nil && err != http.ErrServerClosed { if err != nil && !errors.Is(err, http.ErrServerClosed) {
log.Errorf("Unexpected webserver error: %v", err) log.Errorf("Unexpected webserver error: %v", err)
requestShutdownChan <- struct{}{} requestShutdownChan <- struct{}{}
} }