rpc: verify wallet version (#42)
This commit is contained in:
parent
bb416e8bc9
commit
033ac95c33
2
go.mod
2
go.mod
@ -3,7 +3,7 @@ module github.com/jholdstock/dcrvsp
|
||||
go 1.13
|
||||
|
||||
require (
|
||||
decred.org/dcrwallet v1.2.3-0.20200507155221-397dd551e317
|
||||
decred.org/dcrwallet v1.2.3-0.20200519180100-f1aa4c354e05
|
||||
github.com/decred/dcrd/blockchain/stake/v3 v3.0.0-20200511175520-d08cb3f72b3b
|
||||
github.com/decred/dcrd/chaincfg/chainhash v1.0.2
|
||||
github.com/decred/dcrd/chaincfg/v3 v3.0.0-20200511175520-d08cb3f72b3b
|
||||
|
||||
4
go.sum
4
go.sum
@ -1,7 +1,7 @@
|
||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||
decred.org/cspp v0.3.0/go.mod h1:UygjYilC94dER3BEU65Zzyoqy9ngJfWCD2rdJqvUs2A=
|
||||
decred.org/dcrwallet v1.2.3-0.20200507155221-397dd551e317 h1:j1fUXpVowoLVVFlaJO7bibK4aSPeQa0EF+nPFuy76Hg=
|
||||
decred.org/dcrwallet v1.2.3-0.20200507155221-397dd551e317/go.mod h1:V6pzOHJuuWZaUPUZZL2kiyx9Co3lVD0DRqDXJTWA+3c=
|
||||
decred.org/dcrwallet v1.2.3-0.20200519180100-f1aa4c354e05 h1:xongFmW2UgEOGu4zQ4VcQFduExKVBa+dC4aLRQLCCnQ=
|
||||
decred.org/dcrwallet v1.2.3-0.20200519180100-f1aa4c354e05/go.mod h1:V6pzOHJuuWZaUPUZZL2kiyx9Co3lVD0DRqDXJTWA+3c=
|
||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||
github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412 h1:w1UutsfOrms1J05zt7ISrnJIXKzwaspym5BTKGx93EI=
|
||||
github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412/go.mod h1:WPjqKcmVOxf0XSf3YxCJs6N6AOSrOx3obionmG7T0y0=
|
||||
|
||||
@ -4,13 +4,20 @@ import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"crypto/x509"
|
||||
"fmt"
|
||||
"sync"
|
||||
|
||||
wallettypes "decred.org/dcrwallet/rpc/jsonrpc/types"
|
||||
dcrdtypes "github.com/decred/dcrd/rpc/jsonrpc/types/v2"
|
||||
"github.com/jrick/wsrpc/v2"
|
||||
)
|
||||
|
||||
type Client func() (*wsrpc.Client, error)
|
||||
|
||||
const (
|
||||
requiredWalletVersion = "8.1.0"
|
||||
)
|
||||
|
||||
// Setup accepts RPC connection details, creates an RPC client, and returns a
|
||||
// function which can be called to access the client. The returned function will
|
||||
// try to handle any client disconnects by attempting to reconnect, but will
|
||||
@ -72,6 +79,40 @@ func Setup(ctx context.Context, shutdownWg *sync.WaitGroup, user, pass, addr str
|
||||
return nil, err
|
||||
}
|
||||
log.Infof("Dialed RPC websocket %v", addr)
|
||||
|
||||
// Verify dcrwallet at is at the required api version
|
||||
var verMap map[string]dcrdtypes.VersionResult
|
||||
err = c.Call(ctx, "version", &verMap)
|
||||
if err != nil {
|
||||
c.Close()
|
||||
return nil, fmt.Errorf("wallet %v version failed: %v",
|
||||
addr, err)
|
||||
}
|
||||
walletVersion, exists := verMap["dcrwalletjsonrpcapi"]
|
||||
if !exists {
|
||||
c.Close()
|
||||
return nil, fmt.Errorf("wallet %v version response "+
|
||||
"missing 'dcrwalletjsonrpcapi'", addr)
|
||||
}
|
||||
if walletVersion.VersionString != requiredWalletVersion {
|
||||
c.Close()
|
||||
return nil, fmt.Errorf("wallet %v is not at the "+
|
||||
"proper version: %s != %s", addr,
|
||||
walletVersion.VersionString, requiredWalletVersion)
|
||||
}
|
||||
|
||||
// Verify dcrwallet is voting
|
||||
var walletInfo wallettypes.WalletInfoResult
|
||||
err = c.Call(ctx, "walletinfo", &walletInfo)
|
||||
if err != nil {
|
||||
c.Close()
|
||||
return nil, err
|
||||
}
|
||||
if !walletInfo.Voting || !walletInfo.Unlocked {
|
||||
c.Close()
|
||||
return nil, fmt.Errorf("wallet %s has voting disabled", addr)
|
||||
}
|
||||
|
||||
return c, nil
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user