From b8f5791879260f7ec13b315bc38c674815a2f051 Mon Sep 17 00:00:00 2001 From: David Hill Date: Thu, 29 Aug 2019 18:18:06 -0400 Subject: [PATCH] build: update deps --- .github/workflows/go.yml | 31 ++++++ Gopkg.lock | 176 --------------------------------- Gopkg.toml | 57 ----------- cmd/dcrtumble/config.go | 5 +- cmd/dcrtumble/main.go | 5 +- cmd/dcrtumble/puzzles.go | 13 +-- cmd/dcrtumble/session.go | 4 +- cmd/dcrtumble/tumbler.go | 3 +- cmd/dcrtumble/txscript.go | 2 +- config.go | 9 +- contract/contract.go | 32 +++--- contract/sizeest.go | 2 +- contract/txscript.go | 38 ++++---- go.mod | 24 +++++ go.sum | 187 ++++++++++++++++++++++++++++++++++++ internal/cfgutil/address.go | 33 +++---- internal/cfgutil/amount.go | 2 +- log.go | 14 ++- netparams/params.go | 16 +-- puzzle/puzzle.go | 2 +- rpc/rpcserver/log.go | 11 +-- rpc/rpcserver/server.go | 5 +- rpcserver.go | 1 - shuffle/shuffle.go | 2 +- tumbler/log.go | 10 +- tumbler/puzzlepromise.go | 2 +- tumbler/tumbler.go | 6 +- tumbler/tumbler_test.go | 26 +++-- wallet/wallet.go | 10 +- 29 files changed, 360 insertions(+), 368 deletions(-) create mode 100644 .github/workflows/go.yml delete mode 100644 Gopkg.lock delete mode 100644 Gopkg.toml create mode 100644 go.mod create mode 100644 go.sum diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml new file mode 100644 index 0000000..a8a551d --- /dev/null +++ b/.github/workflows/go.yml @@ -0,0 +1,31 @@ +name: Build and Test +on: [push, pull_request] +jobs: + build: + name: Go CI + runs-on: ubuntu-latest + strategy: + matrix: + go: [1.14, 1.15] + steps: + - name: Set up Go + uses: actions/setup-go@v2 + with: + go-version: ${{ matrix.go }} + - name: Check out source + uses: actions/checkout@v2 + - name: Install Linters + run: "curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin v1.33.0" + - name: Build + env: + GO111MODULE: "on" + run: go build ./... + - name: Test + env: + GO111MODULE: "on" + run: go test ./... + - name: Lint + env: + GO111MODULE: "on" + run: | + golangci-lint run --disable-all --deadline=10m --enable=gofmt --enable=gosimple --enable=unconvert --enable=ineffassign --enable=govet diff --git a/Gopkg.lock b/Gopkg.lock deleted file mode 100644 index 76d451a..0000000 --- a/Gopkg.lock +++ /dev/null @@ -1,176 +0,0 @@ -# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. - - -[[projects]] - branch = "master" - name = "github.com/agl/ed25519" - packages = [ - ".", - "edwards25519" - ] - revision = "5312a61534124124185d41f09206b9fef1d88403" - -[[projects]] - branch = "master" - name = "github.com/btcsuite/btclog" - packages = ["."] - revision = "84c8d2346e9fc8c7b947e243b9c24e6df9fd206a" - -[[projects]] - branch = "master" - name = "github.com/dchest/blake256" - packages = ["."] - revision = "dee3fe6eb0e98dc774a94fc231f85baf7c29d360" - -[[projects]] - branch = "master" - name = "github.com/decred/base58" - packages = ["."] - revision = "56c501706f00d9e1cfacee19a27117e12da24734" - -[[projects]] - branch = "master" - name = "github.com/decred/dcrd" - packages = [ - "blockchain", - "blockchain/internal/dbnamespace", - "blockchain/internal/progresslog", - "blockchain/stake", - "blockchain/stake/internal/dbnamespace", - "blockchain/stake/internal/ticketdb", - "blockchain/stake/internal/tickettreap", - "certgen", - "chaincfg", - "chaincfg/chainec", - "chaincfg/chainhash", - "database", - "dcrec/edwards", - "dcrec/secp256k1", - "dcrec/secp256k1/schnorr", - "dcrjson", - "dcrutil", - "txscript", - "wire" - ] - revision = "4e01f768cb28a138b1b51dc17f0de284703b5f7a" - -[[projects]] - branch = "master" - name = "github.com/decred/dcrwallet" - packages = [ - "internal/helpers", - "rpc/walletrpc", - "wallet/txrules" - ] - revision = "0eced173e139932cf270586cd34b73e35a03a798" - -[[projects]] - branch = "master" - name = "github.com/golang/protobuf" - packages = [ - "proto", - "ptypes", - "ptypes/any", - "ptypes/duration", - "ptypes/timestamp" - ] - revision = "e09c5db296004fbe3f74490e84dcd62c3c5ddb1b" - -[[projects]] - name = "github.com/jessevdk/go-flags" - packages = ["."] - revision = "96dc06278ce32a0e9d957d590bb987c81ee66407" - version = "v1.3.0" - -[[projects]] - branch = "master" - name = "github.com/jrick/logrotate" - packages = ["rotator"] - revision = "a93b200c26cbae3bb09dd0dc2c7c7fe1468a034a" - -[[projects]] - branch = "master" - name = "golang.org/x/crypto" - packages = [ - "blake2s", - "ripemd160" - ] - revision = "88942b9c40a4c9d203b82b3731787b672d6e809b" - -[[projects]] - branch = "master" - name = "golang.org/x/net" - packages = [ - "context", - "http2", - "http2/hpack", - "idna", - "internal/timeseries", - "lex/httplex", - "trace" - ] - revision = "6078986fec03a1dcc236c34816c71b0e05018fda" - -[[projects]] - name = "golang.org/x/text" - packages = [ - "collate", - "collate/build", - "internal/colltab", - "internal/gen", - "internal/tag", - "internal/triegen", - "internal/ucd", - "language", - "secure/bidirule", - "transform", - "unicode/bidi", - "unicode/cldr", - "unicode/norm", - "unicode/rangetable" - ] - revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" - version = "v0.3.0" - -[[projects]] - branch = "master" - name = "google.golang.org/genproto" - packages = ["googleapis/rpc/status"] - revision = "ab0870e398d5dd054b868c0db1481ab029b9a9f2" - -[[projects]] - name = "google.golang.org/grpc" - packages = [ - ".", - "balancer", - "balancer/base", - "balancer/roundrobin", - "codes", - "connectivity", - "credentials", - "encoding", - "encoding/proto", - "grpclb/grpc_lb_v1/messages", - "grpclog", - "internal", - "keepalive", - "metadata", - "naming", - "peer", - "resolver", - "resolver/dns", - "resolver/passthrough", - "stats", - "status", - "tap", - "transport" - ] - revision = "afc05b9e1d36f289ea16ba294894486a3e458246" - version = "v1.11.0" - -[solve-meta] - analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "6ee188da658bd943c60f5a88185fb32cf796ba606ed88a50c6de173fe0407a7c" - solver-name = "gps-cdcl" - solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml deleted file mode 100644 index 9ecfaf4..0000000 --- a/Gopkg.toml +++ /dev/null @@ -1,57 +0,0 @@ -# Gopkg.toml example -# -# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md -# for detailed Gopkg.toml documentation. -# -# required = ["github.com/user/thing/cmd/thing"] -# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] -# -# [[constraint]] -# name = "github.com/user/project" -# version = "1.0.0" -# -# [[constraint]] -# name = "github.com/user/project2" -# branch = "dev" -# source = "github.com/myfork/project2" -# -# [[override]] -# name = "github.com/x/y" -# version = "2.4.0" - - -[[constraint]] - branch = "master" - name = "github.com/btcsuite/btclog" - -[[constraint]] - branch = "master" - name = "github.com/decred/dcrd" - -[[constraint]] - branch = "master" - name = "github.com/decred/dcrwallet" - -[[constraint]] - branch = "master" - name = "github.com/golang/protobuf" - -[[constraint]] - name = "github.com/jessevdk/go-flags" - version = "1.3.0" - -[[constraint]] - branch = "master" - name = "github.com/jrick/logrotate" - -[[constraint]] - branch = "master" - name = "golang.org/x/crypto" - -[[constraint]] - branch = "master" - name = "golang.org/x/net" - -[[constraint]] - name = "google.golang.org/grpc" - version = "1.0.0" diff --git a/cmd/dcrtumble/config.go b/cmd/dcrtumble/config.go index b80de01..5417691 100644 --- a/cmd/dcrtumble/config.go +++ b/cmd/dcrtumble/config.go @@ -16,9 +16,8 @@ import ( "runtime" "strings" - "github.com/decred/dcrd/dcrutil" + "github.com/decred/dcrd/dcrutil/v3" "github.com/decred/tumblebit/netparams" - flags "github.com/jessevdk/go-flags" ) @@ -209,7 +208,7 @@ func loadConfig() (*config, []string, error) { // Multiple networks can't be selected simultaneously. numNets := 0 if cfg.TestNet { - activeNet = &netparams.TestNet2Params + activeNet = &netparams.TestNet3Params numNets++ } if cfg.SimNet { diff --git a/cmd/dcrtumble/main.go b/cmd/dcrtumble/main.go index 406a3f2..8a5264c 100644 --- a/cmd/dcrtumble/main.go +++ b/cmd/dcrtumble/main.go @@ -14,11 +14,10 @@ import ( "path/filepath" "strings" - "google.golang.org/grpc" - "google.golang.org/grpc/credentials" - "github.com/decred/tumblebit/netparams" "github.com/decred/tumblebit/wallet" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials" ) var activeNet = &netparams.MainNetParams diff --git a/cmd/dcrtumble/puzzles.go b/cmd/dcrtumble/puzzles.go index 963ba38..4b2ebd0 100644 --- a/cmd/dcrtumble/puzzles.go +++ b/cmd/dcrtumble/puzzles.go @@ -13,8 +13,9 @@ import ( "math/big" mrand "math/rand" - "github.com/decred/dcrd/chaincfg/chainec" "github.com/decred/dcrd/chaincfg/chainhash" + "github.com/decred/dcrd/dcrec/secp256k1/v3" + "github.com/decred/dcrd/dcrec/secp256k1/v3/ecdsa" "github.com/decred/tumblebit/puzzle" "github.com/decred/tumblebit/shuffle" ) @@ -259,7 +260,7 @@ func validatePuzzlePromiseResponse(c *puzzlePromiseChallenge, r *puzzlePromiseRe for i, j := range fakeTxList { if !puzzle.ValidatePuzzle(&pkey, r.puzzles[j], r.secrets[i]) { - errors.New("obtained secrets didn't verify") + return errors.New("obtained secrets didn't verify") } sig, err := puzzle.RevealSolution(r.promises[j], r.secrets[i]) if err != nil { @@ -276,7 +277,7 @@ func validatePuzzlePromiseResponse(c *puzzlePromiseChallenge, r *puzzlePromiseRe realPuzzles[i] = r.puzzles[idx] } if !puzzle.VerifyQuotients(&pkey, r.quotients, realPuzzles) { - errors.New("failed to verify quotients") + return errors.New("failed to verify quotients") } return nil @@ -324,15 +325,15 @@ out: } func verifySignature(sigBytes []byte, hash []byte, publicKey []byte) error { - pubkey, err := chainec.Secp256k1.ParsePubKey(publicKey) + pubkey, err := secp256k1.ParsePubKey(publicKey) if err != nil { return err } - sig, err := chainec.Secp256k1.ParseSignature(sigBytes) + sig, err := ecdsa.ParseDERSignature(sigBytes) if err != nil { return err } - if !chainec.Secp256k1.Verify(pubkey, hash, sig.GetR(), sig.GetS()) { + if !sig.Verify(hash, pubkey) { return errors.New("failed to verify the signature") } return nil diff --git a/cmd/dcrtumble/session.go b/cmd/dcrtumble/session.go index da24a70..87b8940 100644 --- a/cmd/dcrtumble/session.go +++ b/cmd/dcrtumble/session.go @@ -10,7 +10,7 @@ import ( "errors" "fmt" - "github.com/decred/dcrd/dcrutil" + "github.com/decred/dcrd/dcrutil/v3" "github.com/decred/tumblebit/contract" "github.com/decred/tumblebit/wallet" ) @@ -36,7 +36,7 @@ func (tb *Tumbler) NewEscrow(ctx context.Context, w *wallet.Wallet) (*PaymentPuz recvAddr, recvPubKey, err := w.GetExtAddress(ctx) if err != nil { - fmt.Errorf("Failed to obtain an address for escrow: %v", err) + return nil, fmt.Errorf("Failed to obtain an address for escrow: %v", err) } escrow, err := tb.SetupEscrow(ctx, &EscrowRequest{ diff --git a/cmd/dcrtumble/tumbler.go b/cmd/dcrtumble/tumbler.go index 6961aad..87431b3 100644 --- a/cmd/dcrtumble/tumbler.go +++ b/cmd/dcrtumble/tumbler.go @@ -9,9 +9,8 @@ import ( "context" "fmt" - "github.com/decred/dcrd/chaincfg" + "github.com/decred/dcrd/chaincfg/v3" pb "github.com/decred/tumblebit/rpc/tumblerrpc" - "google.golang.org/grpc" ) diff --git a/cmd/dcrtumble/txscript.go b/cmd/dcrtumble/txscript.go index 1978b12..9b36446 100644 --- a/cmd/dcrtumble/txscript.go +++ b/cmd/dcrtumble/txscript.go @@ -6,7 +6,7 @@ package main import ( - "github.com/decred/dcrd/txscript" + "github.com/decred/dcrd/txscript/v3" "github.com/decred/tumblebit/contract" ) diff --git a/config.go b/config.go index 30e21b9..f9e118b 100644 --- a/config.go +++ b/config.go @@ -16,13 +16,12 @@ import ( "sort" "strings" - "github.com/btcsuite/btclog" - "github.com/decred/dcrd/dcrutil" + "github.com/decred/dcrd/dcrutil/v3" + "github.com/decred/slog" "github.com/decred/tumblebit/internal/cfgutil" "github.com/decred/tumblebit/netparams" "github.com/decred/tumblebit/tumbler" "github.com/decred/tumblebit/version" - flags "github.com/jessevdk/go-flags" ) @@ -127,7 +126,7 @@ func cleanAndExpandPath(path string) string { // validLogLevel returns whether or not logLevel is a valid debug log level. func validLogLevel(logLevel string) bool { - _, ok := btclog.LevelFromString(logLevel) + _, ok := slog.LevelFromString(logLevel) return ok } @@ -300,7 +299,7 @@ func loadConfig(ctx context.Context) (*config, []string, error) { // Multiple networks can't be selected simultaneously. numNets := 0 if cfg.TestNet { - activeNet = &netparams.TestNet2Params + activeNet = &netparams.TestNet3Params numNets++ } if cfg.SimNet { diff --git a/contract/contract.go b/contract/contract.go index 96c2dfb..ed22c9a 100644 --- a/contract/contract.go +++ b/contract/contract.go @@ -10,9 +10,9 @@ import ( "errors" "fmt" - "github.com/decred/dcrd/chaincfg" - "github.com/decred/dcrd/chaincfg/chainec" - "github.com/decred/dcrd/dcrutil" + "github.com/decred/dcrd/chaincfg/v3" + "github.com/decred/dcrd/dcrec" + "github.com/decred/dcrd/dcrutil/v3" "github.com/decred/dcrd/wire" ) @@ -121,23 +121,19 @@ func (c *Contract) SetAddress(t addressRole, a, pk string) error { panic("unknown address role") } - addr, err := dcrutil.DecodeAddress(pk) + addr, err := dcrutil.DecodeAddress(pk, c.ChainParams) if err != nil { return fmt.Errorf("failed to decode %s pubkey: %v", addressName[t], err) } - if !addr.IsForNet(c.ChainParams) { - return fmt.Errorf("address %v is not intended for use on %v", a, - c.ChainParams.Name) - } - check, err := dcrutil.DecodeAddress(a) + check, err := dcrutil.DecodeAddress(a, c.ChainParams) if err != nil { return fmt.Errorf("failed to decode %s address: %v", addressName[t], err) } - if addr.EncodeAddress() != check.EncodeAddress() { + if addr.Address() != check.Address() { return errors.New("address and public key don't match") } @@ -193,7 +189,7 @@ func checkAddressType(addr dcrutil.Address, allowed addressType) bool { case *dcrutil.AddressSecpPubKey: found = PayToPubKey case *dcrutil.AddressPubKeyHash: - if a.DSA(a.Net()) == chainec.ECTypeSecp256k1 { + if a.DSA() == dcrec.STEcdsaSecp256k1 { found = PayToPubKeyHash } case *dcrutil.AddressSecSchnorrPubKey: @@ -203,16 +199,16 @@ func checkAddressType(addr dcrutil.Address, allowed addressType) bool { default: return false } - if found&allowed != 0 { - return true - } - return false + return found&allowed != 0 } -func (c *Contract) String() string { - var str string +func (c *Contract) ParseRedeemTransaction(redeemTx *wire.MsgTx) error { + // TODO + return errors.New("NOT IMPLEMENTED") +} - str = "Contract{ " +func (c *Contract) String() string { + str := "Contract{ " if len(c.EscrowScript) > 0 { str += "Escrow{ " if len(c.SenderAddrStr) > 0 { diff --git a/contract/sizeest.go b/contract/sizeest.go index 3abb11d..1edbbbd 100644 --- a/contract/sizeest.go +++ b/contract/sizeest.go @@ -6,7 +6,7 @@ package contract import ( - "github.com/decred/dcrd/txscript" + "github.com/decred/dcrd/txscript/v3" "github.com/decred/dcrd/wire" ) diff --git a/contract/txscript.go b/contract/txscript.go index 88fce2e..6e22d2e 100644 --- a/contract/txscript.go +++ b/contract/txscript.go @@ -10,23 +10,20 @@ import ( "errors" "fmt" - "github.com/decred/dcrd/dcrutil" - "github.com/decred/dcrd/txscript" + "decred.org/dcrwallet/wallet/txrules" + "github.com/decred/dcrd/dcrutil/v3" + "github.com/decred/dcrd/txscript/v3" "github.com/decred/dcrd/wire" - "github.com/decred/dcrwallet/wallet/txrules" ) +const scriptVersion = 0 + const feePerKb = 1e5 -const verifyFlags = txscript.ScriptBip16 | - txscript.ScriptVerifyDERSignatures | - txscript.ScriptVerifyStrictEncoding | - txscript.ScriptVerifyMinimalData | - txscript.ScriptDiscourageUpgradableNops | +const verifyFlags = txscript.ScriptDiscourageUpgradableNops | txscript.ScriptVerifyCleanStack | txscript.ScriptVerifyCheckLockTimeVerify | txscript.ScriptVerifyCheckSequenceVerify | - txscript.ScriptVerifyLowS | txscript.ScriptVerifySHA256 func (con *Contract) AddEscrowScript() error { @@ -204,7 +201,7 @@ func (con *Contract) BuildRefundTx() error { dcrutil.Amount(tx.TxOut[0].Value)) } - txIn := wire.NewTxIn(&contractOutPoint, nil) + txIn := wire.NewTxIn(&contractOutPoint, 0, nil) txIn.Sequence = 0 tx.AddTxIn(txIn) @@ -251,10 +248,13 @@ func (con *Contract) VerifyRefundTx() error { } } + sigCache, err := txscript.NewSigCache(10) + if err != nil { + return err + } e, err := txscript.NewEngine( con.EscrowTx.TxOut[contractOutPoint.Index].PkScript, - con.RefundTx, 0, verifyFlags, txscript.DefaultScriptVersion, - txscript.NewSigCache(10)) + con.RefundTx, 0, verifyFlags, scriptVersion, sigCache) if err != nil { return err } @@ -293,7 +293,7 @@ func (con *Contract) BuildRedeemTx(sigScriptAddSize int) error { contractOut := -1 for i, out := range con.EscrowTx.TxOut { sc, addrs, _, _ := txscript.ExtractPkScriptAddrs(out.Version, - out.PkScript, con.ChainParams) + out.PkScript, con.ChainParams, true) if sc == txscript.ScriptHashTy && bytes.Equal(addrs[0].Hash160()[:], contractHash) { contractOut = i @@ -318,7 +318,7 @@ func (con *Contract) BuildRedeemTx(sigScriptAddSize int) error { tx := wire.NewMsgTx() tx.LockTime = uint32(con.LockTime) - tx.AddTxIn(wire.NewTxIn(&contractOutPoint, nil)) + tx.AddTxIn(wire.NewTxIn(&contractOutPoint, 0, nil)) tx.AddTxOut(wire.NewTxOut(0, outScript)) // amount set below redeemSize := estimateRedeemSerializeSize(con.EscrowScript, tx.TxOut, sigScriptAddSize) @@ -364,7 +364,7 @@ func (con *Contract) VerifyRedeemTx() error { contractOut := -1 for i, out := range con.EscrowTx.TxOut { sc, addrs, _, _ := txscript.ExtractPkScriptAddrs(out.Version, - out.PkScript, con.ChainParams) + out.PkScript, con.ChainParams, true) if sc == txscript.ScriptHashTy && bytes.Equal(addrs[0].Hash160()[:], contractHash) { contractOut = i @@ -382,10 +382,14 @@ func (con *Contract) VerifyRedeemTx() error { Tree: 0, } + sigCache, err := txscript.NewSigCache(10) + if err != nil { + return err + } + e, err := txscript.NewEngine( con.EscrowTx.TxOut[contractOutPoint.Index].PkScript, - con.RedeemTx, 0, verifyFlags, txscript.DefaultScriptVersion, - txscript.NewSigCache(10)) + con.RedeemTx, 0, verifyFlags, scriptVersion, sigCache) if err != nil { return err } diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..5a23c19 --- /dev/null +++ b/go.mod @@ -0,0 +1,24 @@ +module github.com/decred/tumblebit + +go 1.12 + +require ( + decred.org/dcrwallet v1.6.0-rc4 + github.com/decred/dcrd/certgen v1.1.1 + github.com/decred/dcrd/chaincfg/chainhash v1.0.2 + github.com/decred/dcrd/chaincfg/v3 v3.0.0 + github.com/decred/dcrd/crypto/ripemd160 v1.0.1 + github.com/decred/dcrd/dcrec v1.0.0 + github.com/decred/dcrd/dcrec/secp256k1/v3 v3.0.0 + github.com/decred/dcrd/dcrutil/v3 v3.0.0 + github.com/decred/dcrd/txscript/v3 v3.0.0 + github.com/decred/dcrd/wire v1.4.0 + github.com/decred/slog v1.1.0 + github.com/golang/protobuf v1.4.2 + github.com/jessevdk/go-flags v1.4.1-0.20200711081900-c17162fe8fd7 + github.com/jrick/logrotate v1.0.0 + golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a + golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc + golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208 + google.golang.org/grpc v1.32.0 +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..a343d95 --- /dev/null +++ b/go.sum @@ -0,0 +1,187 @@ +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.6.0-rc4 h1:5IT6mFa+2YMqenu6aE2LetD0N8QSUVFyAFl205PvIIE= +decred.org/dcrwallet v1.6.0-rc4/go.mod h1:lsrNbuKxkPGeHXPufxNTckwQopCEDz0r3t0a8JCKAmU= +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= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dchest/siphash v1.2.1 h1:4cLinnzVJDKxTCl9B01807Yiy+W7ZzVHj/KIroQRvT4= +github.com/dchest/siphash v1.2.1/go.mod h1:q+IRvb2gOSrUnYoPqHiyHXS0FOBBOdl6tONBlVnOnt4= +github.com/decred/base58 v1.0.3 h1:KGZuh8d1WEMIrK0leQRM47W85KqCAdl2N+uagbctdDI= +github.com/decred/base58 v1.0.3/go.mod h1:pXP9cXCfM2sFLb2viz2FNIdeMWmZDBKG3ZBYbiSM78E= +github.com/decred/dcrd/addrmgr v1.2.0/go.mod h1:QlZF9vkzwYh0qs25C76SAFZBRscjETga/K28GEE6qIc= +github.com/decred/dcrd/blockchain/stake/v3 v3.0.0/go.mod h1:5GIUwsrHQCJauacgCegIR6t92SaeVi28Qls/BLN9vOw= +github.com/decred/dcrd/blockchain/standalone/v2 v2.0.0 h1:9gUuH0u/IZNPWBK9K3CxgAWPG7nTqVSsZefpGY4Okns= +github.com/decred/dcrd/blockchain/standalone/v2 v2.0.0/go.mod h1:t2qaZ3hNnxHZ5kzVJDgW5sp47/8T5hYJt7SR+/JtRhI= +github.com/decred/dcrd/blockchain/v3 v3.0.2/go.mod h1:LD5VA95qdb+DlRiPI8VLBimDqvlDCAJsidZ5oD6nc/U= +github.com/decred/dcrd/certgen v1.1.1 h1:MYPG5jCysnbF4OiJ1++YumFEu2p/MsM/zxmmqC9mVFg= +github.com/decred/dcrd/certgen v1.1.1/go.mod h1:ivkPLChfjdAgFh7ZQOtl6kJRqVkfrCq67dlq3AbZBQE= +github.com/decred/dcrd/chaincfg/chainhash v1.0.2 h1:rt5Vlq/jM3ZawwiacWjPa+smINyLRN07EO0cNBV6DGU= +github.com/decred/dcrd/chaincfg/chainhash v1.0.2/go.mod h1:BpbrGgrPTr3YJYRN3Bm+D9NuaFd+zGyNeIKgrhCXK60= +github.com/decred/dcrd/chaincfg/v3 v3.0.0 h1:+TFbu7ZmvBwM+SZz5mrj6cun9ts/6DAL5sqnsaFBHGQ= +github.com/decred/dcrd/chaincfg/v3 v3.0.0/go.mod h1:EspyubQ7D2w6tjP7rBGDIE7OTbuMgBjR2F2kZFnh31A= +github.com/decred/dcrd/connmgr/v3 v3.0.0/go.mod h1:cPI43Aggp1lOhrVG75eJ3c3BwuFx0NhT77FK34ky+ak= +github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/crypto/ripemd160 v1.0.1 h1:TjRL4LfftzTjXzaufov96iDAkbY2R3aTvH2YMYa1IOc= +github.com/decred/dcrd/crypto/ripemd160 v1.0.1/go.mod h1:F0H8cjIuWTRoixr/LM3REB8obcWkmYx0gbxpQWR8RPg= +github.com/decred/dcrd/database/v2 v2.0.2/go.mod h1:S78KbTCCJWUTJDVTByiQuB+HmL0DM2vIMsa2WsrF9KM= +github.com/decred/dcrd/dcrec v1.0.0 h1:W+z6Es+Rai3MXYVoPAxYr5U1DGis0Co33scJ6uH2J6o= +github.com/decred/dcrd/dcrec v1.0.0/go.mod h1:HIaqbEJQ+PDzQcORxnqen5/V1FR3B4VpIfmePklt8Q8= +github.com/decred/dcrd/dcrec/edwards/v2 v2.0.1 h1:V6eqU1crZzuoFT4KG2LhaU5xDSdkHuvLQsj25wd7Wb4= +github.com/decred/dcrd/dcrec/edwards/v2 v2.0.1/go.mod h1:d0H8xGMWbiIQP7gN3v2rByWUcuZPm9YsgmnfoxgbINc= +github.com/decred/dcrd/dcrec/secp256k1/v3 v3.0.0 h1:sgNeV1VRMDzs6rzyPpxyM0jp317hnwiq58Filgag2xw= +github.com/decred/dcrd/dcrec/secp256k1/v3 v3.0.0/go.mod h1:J70FGZSbzsjecRTiTzER+3f1KZLNaXkuv+yeFTKoxM8= +github.com/decred/dcrd/dcrjson/v3 v3.1.0/go.mod h1:fnTHev/ABGp8IxFudDhjGi9ghLiXRff1qZz/wvq12Mg= +github.com/decred/dcrd/dcrutil/v3 v3.0.0 h1:n6uQaTQynIhCY89XsoDk2WQqcUcnbD+zUM9rnZcIOZo= +github.com/decred/dcrd/dcrutil/v3 v3.0.0/go.mod h1:iVsjcqVzLmYFGCZLet2H7Nq+7imV9tYcuY+0lC2mNsY= +github.com/decred/dcrd/gcs/v2 v2.1.0/go.mod h1:MbnJOINFcp42NMRAQ+CjX/xGz+53AwNgMzKZhwBibdM= +github.com/decred/dcrd/hdkeychain/v3 v3.0.0/go.mod h1:Vz7PJSlLzhqmOR2lmjGD9JqAZgmUnM8P6r8hg7U4Zho= +github.com/decred/dcrd/rpc/jsonrpc/types/v2 v2.3.0/go.mod h1:krn89ZOgSa8yc7sA4WpDK95p61NnjNWFkNlMnGrKbMc= +github.com/decred/dcrd/txscript/v3 v3.0.0 h1:74NmirXAIskbGP0g9OWtrmN7OxDbWJ9G73a5uoxTkcM= +github.com/decred/dcrd/txscript/v3 v3.0.0/go.mod h1:pdvnlD4KGdDoc09cvWRJ8EoRQUaiUz41uDevOWuEfII= +github.com/decred/dcrd/wire v1.3.0 h1:X76I2/a8esUmxXmFpJpAvXEi014IA4twgwcOBeIS8lE= +github.com/decred/dcrd/wire v1.3.0/go.mod h1:fnKGlUY2IBuqnpxx5dYRU5Oiq392OBqAuVjRVSkIoXM= +github.com/decred/dcrd/wire v1.4.0 h1:KmSo6eTQIvhXS0fLBQ/l7hG7QLcSJQKSwSyzSqJYDk0= +github.com/decred/dcrd/wire v1.4.0/go.mod h1:WxC/0K+cCAnBh+SKsRjIX9YPgvrjhmE+6pZlel1G7Ro= +github.com/decred/go-socks v1.1.0/go.mod h1:sDhHqkZH0X4JjSa02oYOGhcGHYp12FsY1jQ/meV8md0= +github.com/decred/slog v1.1.0 h1:uz5ZFfmaexj1rEDgZvzQ7wjGkoSPjw2LCh8K+K1VrW4= +github.com/decred/slog v1.1.0/go.mod h1:kVXlGnt6DHy2fV5OjSeuvCJ0OmlmTF6LFpEPMu/fOY0= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jessevdk/go-flags v1.4.1-0.20200711081900-c17162fe8fd7 h1:Ug59miTxVKVg5Oi2S5uHlKOIV5jBx4Hb2u0jIxxDaSs= +github.com/jessevdk/go-flags v1.4.1-0.20200711081900-c17162fe8fd7/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jrick/bitset v1.0.0/go.mod h1:ZOYB5Uvkla7wIEY4FEssPVi3IQXa02arznRaYaAEPe4= +github.com/jrick/logrotate v1.0.0 h1:lQ1bL/n9mBNeIXoTUoYRlK4dHuNJVofX9oWqBtPnSzI= +github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= +github.com/jrick/wsrpc/v2 v2.3.2/go.mod h1:XPYs8BnRWl99lCvXRM5SLpZmTPqWpSOPkDIqYTwDPfU= +github.com/jrick/wsrpc/v2 v2.3.4/go.mod h1:XPYs8BnRWl99lCvXRM5SLpZmTPqWpSOPkDIqYTwDPfU= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/onsi/ginkgo v1.6.0 h1:Ix8l273rp3QzYgXSR+c8d1fTG7UPgYkOSELPhiY/YGw= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= +go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a h1:vclmkQCjlDX5OydZ9wv8rBCcS0QyQY66Mpf/7BZbInM= +golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc h1:zK/HqS5bZxDptfPJNq8v7vJfXtkU7r9TLIoSr1bXaP4= +golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208 h1:qwRHBd0NqMbJxfbotnDhm2ByMI1Shq4Y6oRJo21SGJA= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed h1:J22ig1FUekjjkmZUM7pTKixYm8DvrYsvrBZdunYeIuQ= +golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 h1:gSJIx1SDwno+2ElGhA4+qG2zF97qiUzTM+rQ0klBOcE= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0 h1:AzbTB6ux+okLTzP8Ru1Xs41C303zdcfEht7MQnYJt5A= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.32.0 h1:zWTV+LMdc3kaiJMSTOFz2UgSBgx8RNQoTGiZu3fR9S0= +google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/internal/cfgutil/address.go b/internal/cfgutil/address.go index 7caeaca..6b52a7d 100644 --- a/internal/cfgutil/address.go +++ b/internal/cfgutil/address.go @@ -5,38 +5,35 @@ package cfgutil -import "github.com/decred/dcrd/dcrutil" +import "github.com/decred/dcrd/dcrutil/v3" // AddressFlag embeds a dcrutil.Address and implements the flags.Marshaler and // Unmarshaler interfaces so it can be used as a config struct field. type AddressFlag struct { - dcrutil.Address + str string } // NewAddressFlag creates an AddressFlag with a default dcrutil.Address. -func NewAddressFlag(defaultValue dcrutil.Address) *AddressFlag { - return &AddressFlag{defaultValue} +func NewAddressFlag() *AddressFlag { + return new(AddressFlag) } // MarshalFlag satisifes the flags.Marshaler interface. func (a *AddressFlag) MarshalFlag() (string, error) { - if a.Address != nil { - return a.Address.String(), nil - } - - return "", nil + return a.str, nil } // UnmarshalFlag satisifes the flags.Unmarshaler interface. func (a *AddressFlag) UnmarshalFlag(addr string) error { - if addr == "" { - a.Address = nil - return nil - } - address, err := dcrutil.DecodeAddress(addr) - if err != nil { - return err - } - a.Address = address + a.str = addr return nil } + +// Address decodes the address flag for the network described by params. +// If the flag is the empty string, this returns a nil address. +func (a *AddressFlag) Address(params dcrutil.AddressParams) (dcrutil.Address, error) { + if a.str == "" { + return nil, nil + } + return dcrutil.DecodeAddress(a.str, params) +} diff --git a/internal/cfgutil/amount.go b/internal/cfgutil/amount.go index ef6ecba..b8bac2d 100644 --- a/internal/cfgutil/amount.go +++ b/internal/cfgutil/amount.go @@ -9,7 +9,7 @@ import ( "strconv" "strings" - "github.com/decred/dcrd/dcrutil" + "github.com/decred/dcrd/dcrutil/v3" ) // AmountFlag embeds a dcrutil.Amount and implements the flags.Marshaler and diff --git a/log.go b/log.go index 17eb9bd..aa86396 100644 --- a/log.go +++ b/log.go @@ -10,11 +10,10 @@ import ( "os" "path/filepath" - "github.com/btcsuite/btclog" - "github.com/jrick/logrotate/rotator" - + "github.com/decred/slog" "github.com/decred/tumblebit/rpc/rpcserver" "github.com/decred/tumblebit/tumbler" + "github.com/jrick/logrotate/rotator" ) // logWriter implements an io.Writer that outputs to both standard output and @@ -23,8 +22,7 @@ type logWriter struct{} func (logWriter) Write(p []byte) (n int, err error) { os.Stdout.Write(p) - logRotator.Write(p) - return len(p), nil + return logRotator.Write(p) } // Loggers per subsystem. A single backend logger is created and all subsytem @@ -39,7 +37,7 @@ var ( // backendLog is the logging backend used to create all subsystem loggers. // The backend must not be used before the log rotator has been initialized, // or data races and/or nil pointer dereferences will occur. - backendLog = btclog.NewBackend(logWriter{}) + backendLog = slog.NewBackend(logWriter{}) // logRotator is one of the logging outputs. It should be closed on // application shutdown. @@ -57,7 +55,7 @@ func init() { } // subsystemLoggers maps each subsystem identifier to its associated logger. -var subsystemLoggers = map[string]btclog.Logger{ +var subsystemLoggers = map[string]slog.Logger{ "DCRT": log, "TMBL": tumblerLog, "GRPC": grpcLog, @@ -93,7 +91,7 @@ func setLogLevel(subsystemID string, logLevel string) { } // Defaults to info if the log level is invalid. - level, _ := btclog.LevelFromString(logLevel) + level, _ := slog.LevelFromString(logLevel) logger.SetLevel(level) } diff --git a/netparams/params.go b/netparams/params.go index ba6c86d..0f168af 100644 --- a/netparams/params.go +++ b/netparams/params.go @@ -5,7 +5,7 @@ package netparams -import "github.com/decred/dcrd/chaincfg" +import "github.com/decred/dcrd/chaincfg/v3" // Params is used to group parameters for various networks such as the main // network and test networks. @@ -16,17 +16,17 @@ type Params struct { } // MainNetParams contains parameters specific running tumblebit and -// dcrd on the main network (wire.MainNet). +// dcrd on the main network. var MainNetParams = Params{ - Params: &chaincfg.MainNetParams, + Params: chaincfg.MainNetParams(), WalletClientPort: "9111", TumblerServerPort: "9191", } -// TestNet2Params contains parameters specific running tumblebit and -// dcrd on the test network (version 2) (wire.TestNet2). -var TestNet2Params = Params{ - Params: &chaincfg.TestNet2Params, +// TestNet3Params contains parameters specific running tumblebit and +// dcrd on the test network. +var TestNet3Params = Params{ + Params: chaincfg.TestNet3Params(), WalletClientPort: "19111", TumblerServerPort: "19191", } @@ -34,7 +34,7 @@ var TestNet2Params = Params{ // SimNetParams contains parameters specific to the simulation test network // (wire.SimNet). var SimNetParams = Params{ - Params: &chaincfg.SimNetParams, + Params: chaincfg.SimNetParams(), WalletClientPort: "19558", TumblerServerPort: "19598", } diff --git a/puzzle/puzzle.go b/puzzle/puzzle.go index 0ab533b..19c73fa 100644 --- a/puzzle/puzzle.go +++ b/puzzle/puzzle.go @@ -15,8 +15,8 @@ import ( "fmt" "math/big" + "github.com/decred/dcrd/crypto/ripemd160" "golang.org/x/crypto/blake2s" - "golang.org/x/crypto/ripemd160" ) func NewPuzzlePromise(pk *PuzzleKey, sig []byte) ([]byte, []byte, []byte, error) { diff --git a/rpc/rpcserver/log.go b/rpc/rpcserver/log.go index d25317a..8652712 100644 --- a/rpc/rpcserver/log.go +++ b/rpc/rpcserver/log.go @@ -18,23 +18,22 @@ import ( "os" "strings" + "github.com/decred/slog" "google.golang.org/grpc/grpclog" - - "github.com/btcsuite/btclog" ) // UseLogger sets the logger to use for the gRPC server. -func UseLogger(l btclog.Logger) { +func UseLogger(l slog.Logger) { grpclog.SetLogger(logger{l}) } -// logger uses a btclog.Logger to implement the grpclog.Logger interface. +// logger uses a slog.Logger to implement the grpclog.Logger interface. type logger struct { - btclog.Logger + slog.Logger } // stripGrpcPrefix removes the package prefix for all logs made to the grpc -// logger, since these are already included as the btclog subsystem name. +// logger, since these are already included as the slog subsystem name. func stripGrpcPrefix(logstr string) string { return strings.TrimPrefix(logstr, "grpc: ") } diff --git a/rpc/rpcserver/server.go b/rpc/rpcserver/server.go index 011c471..256580f 100644 --- a/rpc/rpcserver/server.go +++ b/rpc/rpcserver/server.go @@ -20,12 +20,11 @@ import ( "context" "sync/atomic" + pb "github.com/decred/tumblebit/rpc/tumblerrpc" + "github.com/decred/tumblebit/tumbler" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - - pb "github.com/decred/tumblebit/rpc/tumblerrpc" - "github.com/decred/tumblebit/tumbler" ) // Public API version constants diff --git a/rpcserver.go b/rpcserver.go index c0ffd71..304cd76 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -20,7 +20,6 @@ import ( "github.com/decred/dcrd/certgen" "github.com/decred/tumblebit/rpc/rpcserver" - "google.golang.org/grpc" "google.golang.org/grpc/credentials" "google.golang.org/grpc/peer" diff --git a/shuffle/shuffle.go b/shuffle/shuffle.go index dfdf2b9..846eab8 100644 --- a/shuffle/shuffle.go +++ b/shuffle/shuffle.go @@ -31,7 +31,7 @@ func Shuffle(random io.Reader, n int, swap func(i, j int)) *ShuffleMap { // Fisher-Yates shuffle: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle for i := n - 1; i > 0; i-- { j := int(uniformRandom31(random, int32(i+1))) - swap(i, int(j)) + swap(i, j) idx[i], idx[j] = idx[j], idx[i] perm[idx[i]] = i } diff --git a/tumbler/log.go b/tumbler/log.go index a5b705b..a342d82 100644 --- a/tumbler/log.go +++ b/tumbler/log.go @@ -4,12 +4,12 @@ package tumbler -import "github.com/btcsuite/btclog" +import "github.com/decred/slog" // log is a logger that is initialized with no output filters. This // means the package will not perform any logging by default until the caller // requests it. -var log btclog.Logger +var log slog.Logger // The default amount of logging is none. func init() { @@ -19,12 +19,12 @@ func init() { // DisableLog disables all library log output. Logging output is disabled // by default until either UseLogger or SetLogWriter are called. func DisableLog() { - log = btclog.Disabled + log = slog.Disabled } // UseLogger uses a specified Logger to output package logging info. // This should be used in preference to SetLogWriter if the caller is also -// using btclog. -func UseLogger(logger btclog.Logger) { +// using slog. +func UseLogger(logger slog.Logger) { log = logger } diff --git a/tumbler/puzzlepromise.go b/tumbler/puzzlepromise.go index 6b1374f..1ac0748 100644 --- a/tumbler/puzzlepromise.go +++ b/tumbler/puzzlepromise.go @@ -65,7 +65,7 @@ func (s *Session) SetupEscrow(ctx context.Context, er *EscrowRequest) (*EscrowOf Epoch: epoch, LockTime: epoch + s.tb.epochDuration, Address: s.contract.SenderAddrStr, - PublicKey: s.contract.SenderAddr.EncodeAddress(), + PublicKey: s.contract.SenderAddr.Address(), EscrowScript: s.contract.EscrowScript, EscrowTx: s.contract.EscrowBytes, }, nil diff --git a/tumbler/tumbler.go b/tumbler/tumbler.go index 02468d3..15f8089 100644 --- a/tumbler/tumbler.go +++ b/tumbler/tumbler.go @@ -17,11 +17,10 @@ import ( "sync/atomic" "time" - "golang.org/x/sync/errgroup" - - "github.com/decred/dcrd/chaincfg" + "github.com/decred/dcrd/chaincfg/v3" "github.com/decred/tumblebit/puzzle" "github.com/decred/tumblebit/wallet" + "golang.org/x/sync/errgroup" ) const ConfirmationInterval = 5 * time.Minute @@ -408,7 +407,6 @@ func (tb *Tumbler) sessionTicker(ctx context.Context) error { } } } - return g.Wait() } func (tb *Tumbler) deferredActions(ctx context.Context, actions []*deferredAction) error { diff --git a/tumbler/tumbler_test.go b/tumbler/tumbler_test.go index 5005ef8..2ffcb82 100644 --- a/tumbler/tumbler_test.go +++ b/tumbler/tumbler_test.go @@ -12,8 +12,9 @@ import ( "math/big" "testing" - "github.com/decred/dcrd/chaincfg/chainec" "github.com/decred/dcrd/chaincfg/chainhash" + "github.com/decred/dcrd/dcrec/secp256k1/v3" + "github.com/decred/dcrd/dcrec/secp256k1/v3/ecdsa" "github.com/decred/tumblebit/puzzle" "github.com/decred/tumblebit/shuffle" ) @@ -321,32 +322,29 @@ func testPuzzleSolving(t *testing.T, s *Session, pkey *puzzle.PuzzlePubKey, return puzzleSolutions[0] } -var ecpriv chainec.PrivateKey -var ecpub chainec.PublicKey +var ecpriv *secp256k1.PrivateKey +var ecpub *secp256k1.PublicKey func init() { - priv, _, _, err := chainec.Secp256k1.GenerateKey(rand.Reader) + priv, err := secp256k1.GeneratePrivateKey() if err != nil { - panic("failed to generate private key") + panic(err) } - ecpriv, ecpub = chainec.Secp256k1.PrivKeyFromBytes(priv) + ecpriv = priv + ecpub = ecpriv.PubKey() } func secpSign(hash []byte) ([]byte, error) { - r, s, err := chainec.Secp256k1.Sign(ecpriv, hash) - if err != nil { - return nil, err - } - sig := chainec.Secp256k1.NewSignature(r, s) + sig := ecdsa.Sign(ecpriv, hash) return sig.Serialize(), nil } func secpVerify(sigBytes []byte, hash []byte) (bool, error) { - sig, err := chainec.Secp256k1.ParseSignature(sigBytes) + sig, err := ecdsa.ParseDERSignature(sigBytes) if err != nil { return false, err } - if !chainec.Secp256k1.Verify(ecpub, hash, sig.GetR(), sig.GetS()) { + if !sig.Verify(hash, ecpub) { return false, errors.New("failed to verify the signature") } return true, nil @@ -361,5 +359,5 @@ func signChallengeHashes(hashes [][]byte) ([][]byte, []byte, error) { return nil, nil, err } } - return signatures, ecpub.Serialize(), nil + return signatures, ecpub.SerializeCompressed(), nil } diff --git a/wallet/wallet.go b/wallet/wallet.go index 5fc8942..d069ab2 100644 --- a/wallet/wallet.go +++ b/wallet/wallet.go @@ -11,12 +11,11 @@ import ( "errors" "fmt" - "github.com/decred/dcrd/chaincfg" - "github.com/decred/dcrd/txscript" + pb "decred.org/dcrwallet/rpc/walletrpc" + "github.com/decred/dcrd/chaincfg/v3" + "github.com/decred/dcrd/txscript/v3" "github.com/decred/dcrd/wire" - pb "github.com/decred/dcrwallet/rpc/walletrpc" "github.com/decred/tumblebit/contract" - "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -436,8 +435,7 @@ func (w *Wallet) OfferRedeemer(ctx context.Context, con *contract.Contract) (boo return false, nil, fmt.Errorf("Spender %v", err) } - if err = con.ParseTransaction(contract.RedeemTransaction, - sr.SpenderTransaction); err != nil { + if err = con.ParseRedeemTransaction(con.RedeemTx); err != nil { return false, nil, fmt.Errorf("failed to parse redeeming tx: %v", err) }