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
|
go 1.13
|
||||||
|
|
||||||
require (
|
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/blockchain/stake/v3 v3.0.0-20200511175520-d08cb3f72b3b
|
||||||
github.com/decred/dcrd/chaincfg/chainhash v1.0.2
|
github.com/decred/dcrd/chaincfg/chainhash v1.0.2
|
||||||
github.com/decred/dcrd/chaincfg/v3 v3.0.0-20200511175520-d08cb3f72b3b
|
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=
|
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/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.20200519180100-f1aa4c354e05 h1:xongFmW2UgEOGu4zQ4VcQFduExKVBa+dC4aLRQLCCnQ=
|
||||||
decred.org/dcrwallet v1.2.3-0.20200507155221-397dd551e317/go.mod h1:V6pzOHJuuWZaUPUZZL2kiyx9Co3lVD0DRqDXJTWA+3c=
|
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/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 h1:w1UutsfOrms1J05zt7ISrnJIXKzwaspym5BTKGx93EI=
|
||||||
github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412/go.mod h1:WPjqKcmVOxf0XSf3YxCJs6N6AOSrOx3obionmG7T0y0=
|
github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412/go.mod h1:WPjqKcmVOxf0XSf3YxCJs6N6AOSrOx3obionmG7T0y0=
|
||||||
|
|||||||
@ -4,13 +4,20 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"crypto/x509"
|
"crypto/x509"
|
||||||
|
"fmt"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
wallettypes "decred.org/dcrwallet/rpc/jsonrpc/types"
|
||||||
|
dcrdtypes "github.com/decred/dcrd/rpc/jsonrpc/types/v2"
|
||||||
"github.com/jrick/wsrpc/v2"
|
"github.com/jrick/wsrpc/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Client func() (*wsrpc.Client, error)
|
type Client func() (*wsrpc.Client, error)
|
||||||
|
|
||||||
|
const (
|
||||||
|
requiredWalletVersion = "8.1.0"
|
||||||
|
)
|
||||||
|
|
||||||
// Setup accepts RPC connection details, creates an RPC client, and returns a
|
// 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
|
// 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
|
// 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
|
return nil, err
|
||||||
}
|
}
|
||||||
log.Infof("Dialed RPC websocket %v", addr)
|
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
|
return c, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user