Open source release

This commit is contained in:
Leopold 2021-07-16 19:36:48 +02:00
parent ecd98c6dca
commit b967b720e8
13 changed files with 654 additions and 1 deletions

View File

@ -1 +1,4 @@
# janus
janus
=====
Janus is a Tendermint PrivateValidator wrapper that implements signature step locking using etcd.

17
go.mod Normal file
View File

@ -0,0 +1,17 @@
module github.com/certusone/janus
go 1.16
require (
github.com/google/go-cmp v0.5.1 // indirect
github.com/google/uuid v1.1.1 // indirect
github.com/tendermint/tendermint v0.34.0-rc3.0.20200907055413-3359e0bf2f84
go.etcd.io/etcd/v3 v3.3.0-rc.0.0.20200921161331-205a656cc58b
golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect
golang.org/x/tools v0.0.0-20200806022845-90696ccdc692 // indirect
google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98 // indirect
google.golang.org/protobuf v1.25.0 // indirect
honnef.co/go/tools v0.0.1-2020.1.4 // indirect
)
replace go.etcd.io/etcd/v3 => github.com/hendrikhofstadt/etcd/v3 v3.3.0-rc.0.0.20200923163016-ac81520e9e28

96
locker.go Normal file
View File

@ -0,0 +1,96 @@
package janus
import (
"context"
"fmt"
etcd "go.etcd.io/etcd/v3/clientv3"
"time"
)
type (
// Locker can be used to lock signature steps in Tendermint using etcd to prevent double signing
Locker struct {
client *etcd.Client
timeout time.Duration
}
)
const (
lockKeyFormat = "val_lock/h_%d/r_%d/%s"
)
// NewLocker returns an instance of Locker
func NewLocker(endpoints []string, timeout time.Duration) (*Locker, error) {
c, err := etcd.New(etcd.Config{
Endpoints: endpoints,
DialTimeout: timeout,
})
// etcd etcd >= v3.2.10, grpc/grpc-go >= v1.7.3
if err != nil {
return &Locker{timeout: timeout}, err
}
return &Locker{
c,
timeout,
}, nil
}
// TryLock tries to lock a specific signature step
// Returns false if the signature step is already locked
func (l *Locker) TryLock(validatorName, lockType string, height int64, round int) (bool, error) {
key := fmt.Sprintf(lockKeyFormat, height, round, lockType)
cmp := etcd.Compare(etcd.CreateRevision(key), "=", 0)
put := etcd.OpPut(key, validatorName)
ctx, _ := context.WithTimeout(context.Background(), l.timeout)
resp, err := l.client.Txn(ctx).If(cmp).Then(put).Commit()
if err != nil {
return false, err
}
return resp.Succeeded, nil
}
// TryLockSetHash tries to lock a specific signature step for this h/r pair.
// This should be used for the prevote step.
// Returns false if the signature step is already locked
func (l *Locker) TryLockSetHash(validatorName, lockType string, height int64, round int, blockHash string) (bool, error) {
key := fmt.Sprintf(lockKeyFormat, height, round, lockType)
cmp := etcd.Compare(etcd.CreateRevision(key), "=", 0)
put := etcd.OpPut(key, validatorName)
ctx, _ := context.WithTimeout(context.Background(), l.timeout)
resp, err := l.client.Txn(ctx).If(cmp).Then(put).Commit()
if err != nil {
return false, err
}
return resp.Succeeded, nil
}
// TryLockCheckHash tries to lock a specific signature step.
// This should be used for the precommit step.
// Returns false if the signature step is already locked
func (l *Locker) TryLockCheckHash(validatorName, lockType string, height int64, round int, blockHash string) (bool, error) {
key := fmt.Sprintf(lockKeyFormat, height, round, lockType)
cmp := etcd.Compare(etcd.CreateRevision(key), "=", 0)
put := etcd.OpPut(key, validatorName)
ctx, _ := context.WithTimeout(context.Background(), l.timeout)
resp, err := l.client.Txn(ctx).If(cmp).Then(put).Commit()
if err != nil {
return false, err
}
return resp.Succeeded, nil
}
// Disconnect closes the underlying etcd connection
func (l *Locker) Disconnect() {
l.client.Close()
}

133
main.go Normal file
View File

@ -0,0 +1,133 @@
package janus
import (
"fmt"
"github.com/tendermint/tendermint/libs/service"
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
"time"
"github.com/tendermint/tendermint/crypto"
"github.com/tendermint/tendermint/libs/log"
"errors"
"github.com/tendermint/tendermint/types"
)
var (
// ErrSignatureRejected indicates that the signature is already locked or locking failed
ErrSignatureRejected = errors.New("signature rejected")
)
// EtcdSigningWrapper implements PrivValidator by wrapping the etcd locking around a PrivValidator
type EtcdSigningWrapper struct {
service.BaseService
privVal types.PrivValidator
locker *Locker
timeout time.Duration
validatorName string
lockerEndpoints []string
}
// NewEtcdSigningWrapper returns an instance of EtcdSigningWrapper.
func NewEtcdSigningWrapper(
logger log.Logger,
privVal types.PrivValidator,
timeout time.Duration,
validatorName string,
lockerEndpoints []string,
) *EtcdSigningWrapper {
rs := &EtcdSigningWrapper{
privVal: privVal,
timeout: timeout,
validatorName: validatorName,
lockerEndpoints: lockerEndpoints,
}
rs.BaseService = *service.NewBaseService(logger, "EtcdSigningWrapper", rs)
return rs
}
// OnStart implements cmn.Service.
func (es *EtcdSigningWrapper) OnStart() error {
// Start etcd ?
locker, err := NewLocker(es.lockerEndpoints, es.timeout)
if err != nil {
return err
}
es.locker = locker
return nil
}
// OnStop implements cmn.Service.
func (es *EtcdSigningWrapper) OnStop() {
es.locker.Disconnect()
es.locker = nil
}
// GetPubKey returns the public key of the validator.
// Implements PrivValidator.
func (es *EtcdSigningWrapper) GetPubKey() (crypto.PubKey, error) {
return es.privVal.GetPubKey()
}
// SignVote signs a canonical representation of the vote, along with the
// chainID. Implements PrivValidator.
func (es *EtcdSigningWrapper) SignVote(chainID string, vote *tmproto.Vote) error {
if err := es.privVal.SignVote(chainID, vote); err != nil {
return fmt.Errorf("error signing vote: %v", err)
}
var voteType string
switch vote.Type {
case tmproto.PrevoteType:
voteType = "prevote"
case tmproto.PrecommitType:
voteType = "precommit"
default:
return errors.New("invalid vote type")
}
var err error
lockAcquired := false
if vote.Type == tmproto.PrevoteType {
lockAcquired, err = es.locker.TryLockSetHash(es.validatorName, fmt.Sprintf("vote_%s", voteType), vote.Height, int(vote.Round), vote.BlockID.String())
} else {
lockAcquired, err = es.locker.TryLockCheckHash(es.validatorName, fmt.Sprintf("vote_%s", voteType), vote.Height, int(vote.Round), vote.BlockID.String())
}
if err != nil {
vote.Signature = nil
return err
}
if !lockAcquired {
vote.Signature = nil
return ErrSignatureRejected
}
return nil
}
// SignProposal signs a canonical representation of the proposal, along with
// the chainID. Implements PrivValidator.
func (es *EtcdSigningWrapper) SignProposal(chainID string, proposal *tmproto.Proposal) error {
if err := es.privVal.SignProposal(chainID, proposal); err != nil {
return fmt.Errorf("error signing proposal: %v", err)
}
lockAcquired, err := es.locker.TryLock(es.validatorName, "proposal", proposal.Height, int(proposal.Round))
if err != nil {
proposal.Signature = nil
return err
}
if !lockAcquired {
proposal.Signature = nil
return ErrSignatureRejected
}
return nil
}

View File

@ -0,0 +1,141 @@
From 08ca317c6a059b8ffbdc38e92a1aa3fc5bba81b5 Mon Sep 17 00:00:00 2001
From: Hendrik Hofstadt <hendrik@nexantic.com>
Date: Wed, 23 Sep 2020 17:47:52 +0200
Subject: [PATCH 1/2] ADD JANUS
Company: nexantic GmbH
---
server/start.go | 88 ++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 87 insertions(+), 1 deletion(-)
diff --git a/server/start.go b/server/start.go
index 0763996d89..d6ba82a138 100644
--- a/server/start.go
+++ b/server/start.go
@@ -4,8 +4,12 @@ package server
import (
"fmt"
+ "github.com/pkg/errors"
+ "github.com/tendermint/tendermint/libs/log"
+ types2 "github.com/tendermint/tendermint/types"
"os"
"runtime/pprof"
+ "strings"
"time"
"github.com/spf13/cobra"
@@ -26,6 +30,8 @@ import (
servergrpc "github.com/cosmos/cosmos-sdk/server/grpc"
"github.com/cosmos/cosmos-sdk/server/types"
storetypes "github.com/cosmos/cosmos-sdk/store/types"
+
+ "github.com/certusone/janus"
)
// Tendermint full-node start flags
@@ -49,6 +55,17 @@ const (
FlagPruningInterval = "pruning-interval"
FlagIndexEvents = "index-events"
FlagMinRetainBlocks = "min-retain-blocks"
+
+ // JANUS specific
+ envJanusActive = "JANUS_ACTIVE"
+ envJanusEtcdEndpoints = "JANUS_ETCD_ENDPOINTS"
+ envJanusTimeout = "JANUS_TIMEOUT"
+ // KMS specific
+ envKMSAddr = "KMS_ADDR"
+ // Signing method
+ envSigningMethod = "SIGNING_METHOD"
+ SigningMethodPV = "PV"
+ SigningMethodKMS = "KMS"
)
// GRPC-related flags.
@@ -241,9 +258,61 @@ func startInProcess(ctx *Context, clientCtx client.Context, appCreator types.App
}
genDocProvider := node.DefaultGenesisDocProviderFunc(cfg)
+
+ var (
+ validator, innerValidator types2.PrivValidator
+ )
+
+ if cfg.PrivValidatorListenAddr != "" {
+ return fmt.Errorf("please unset priv_validator_laddr in the config or arguments - this will overwrite JANUS and cause double-signing")
+ }
+
+ if os.Getenv(envJanusActive) != "TRUE" && os.Getenv(envJanusActive) != "FALSE" {
+ return fmt.Errorf("please set %s", envJanusActive)
+ }
+
+ if os.Getenv(envSigningMethod) == SigningMethodKMS {
+ if os.Getenv(envKMSAddr) == "" {
+ return fmt.Errorf("no KMS address specified. Please set %s", envKMSAddr)
+ }
+ innerValidator, err = createAndStartPrivValidatorSocketClient(os.Getenv(envKMSAddr), ctx.Logger, cfg.ChainID())
+ if err != nil {
+ return err
+ }
+ } else if os.Getenv(envSigningMethod) == SigningMethodPV {
+ innerValidator = pvm.LoadOrGenFilePV(cfg.PrivValidatorKeyFile(), cfg.PrivValidatorStateFile())
+ } else {
+ return fmt.Errorf("no valid signing method specified. Please set %s to AIAKOS/KMS/PV", envSigningMethod)
+ }
+
+ if os.Getenv(envJanusActive) == "TRUE" {
+ // Check and parse etcd endpoints from env
+ if os.Getenv(envJanusEtcdEndpoints) == "" {
+ return fmt.Errorf("no janus etcd endpoints specified. Please set %s", envJanusEtcdEndpoints)
+ }
+
+ etcdEndpoints := strings.Split(os.Getenv(envJanusEtcdEndpoints), ",")
+ if os.Getenv(envJanusTimeout) == "" {
+ return fmt.Errorf("no janus lock timeout specified. Please set %s", envJanusTimeout)
+ }
+ janusTimeout, err := time.ParseDuration(os.Getenv(envJanusTimeout))
+ if err != nil {
+ return fmt.Errorf("invalid janus timeout: %v", err)
+ }
+ // Initialize Janus
+ pv := janus.NewEtcdSigningWrapper(ctx.Logger.With("module", "janus"), innerValidator, janusTimeout, cfg.Moniker, etcdEndpoints)
+ err = pv.Start()
+ if err != nil {
+ return err
+ }
+ validator = pv
+ } else {
+ validator = innerValidator
+ }
+
tmNode, err := node.NewNode(
cfg,
- pvm.LoadOrGenFilePV(cfg.PrivValidatorKeyFile(), cfg.PrivValidatorStateFile()),
+ validator,
nodeKey,
proxy.NewLocalClientCreator(app),
genDocProvider,
@@ -333,3 +402,20 @@ func startInProcess(ctx *Context, clientCtx client.Context, appCreator types.App
// Wait for SIGINT or SIGTERM signal
return WaitForQuitSignals()
}
+
+// Copied from Tendermint
+func createAndStartPrivValidatorSocketClient(
+ listenAddr string,
+ logger log.Logger,
+ chainID string,
+) (types2.PrivValidator, error) {
+ pve, err := pvm.NewSignerListener(listenAddr, logger)
+ if err != nil {
+ return nil, errors.Wrap(err, "failed to start private validator")
+ }
+ pvsc, err := pvm.NewSignerClient(pve, chainID)
+ if err != nil {
+ return nil, errors.Wrap(err, "failed to start private validator")
+ }
+ return pvsc, nil
+}
--
2.31.1

View File

@ -0,0 +1,25 @@
From 4571177bfca578a570ad7b60aff66087ada40131 Mon Sep 17 00:00:00 2001
From: Hendrik Hofstadt <hendrik@nexantic.com>
Date: Mon, 12 Jul 2021 12:37:38 +0200
Subject: [PATCH 2/2] update go mod
Company: nexantic GmbH
---
go.mod | 1 +
1 file changed, 1 insertion(+)
diff --git a/go.mod b/go.mod
index 95d4e94ed1..182076b160 100644
--- a/go.mod
+++ b/go.mod
@@ -57,6 +57,7 @@ require (
google.golang.org/protobuf v1.26.0
gopkg.in/ini.v1 v1.61.0 // indirect
gopkg.in/yaml.v2 v2.4.0
+ github.com/certusone/janus v0.37.9-janus-1.0.20200923163128-71f345a4cb07
)
replace google.golang.org/grpc => google.golang.org/grpc v1.33.2
--
2.31.1

View File

@ -0,0 +1,15 @@
#!/bin/bash
# Usage:
# cd cosmos-sdk
# ~/certus/janus/patches/cosmos-sdk/dump_patches.sh upstream/v0.29.1
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
rm ${DIR}/*.patch
git format-patch $1 -o ${DIR}
echo "$(git describe --tags)" > ${DIR}/ref
echo "$(git describe --tags $1)" > ${DIR}/upstream_ref
echo "Wrote patch files to ${DIR}."

1
patches/cosmos-sdk/ref Normal file
View File

@ -0,0 +1 @@
v0.42.6-2-g4571177bfc

View File

@ -0,0 +1 @@
v0.42.6

View File

@ -0,0 +1,204 @@
From 627f85332555bb17086d3202c7ce278909d6540a Mon Sep 17 00:00:00 2001
From: Hendrik Hofstadt <hendrik@nexantic.com>
Date: Mon, 12 Jul 2021 12:37:57 +0200
Subject: [PATCH] ADD JANUS
Company: nexantic GmbH
---
go.mod | 4 ++++
go.sum | 34 ++++++++++++++++++++++++++++++++--
2 files changed, 36 insertions(+), 2 deletions(-)
diff --git a/go.mod b/go.mod
index ee17f4da..3859f6ab 100644
--- a/go.mod
+++ b/go.mod
@@ -18,3 +18,7 @@ require (
replace google.golang.org/grpc => google.golang.org/grpc v1.33.2
replace github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1
+
+replace github.com/cosmos/cosmos-sdk => ./cosmos-sdk
+
+replace go.etcd.io/etcd/v3 => github.com/hendrikhofstadt/etcd/v3 v3.3.0-rc.0.0.20200923165723-d669243f0eb2
diff --git a/go.sum b/go.sum
index 03a09766..db84fda0 100644
--- a/go.sum
+++ b/go.sum
@@ -31,8 +31,11 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
+github.com/certusone/janus v0.37.9-janus-1.0.20200923163128-71f345a4cb07 h1:rXWRVaIo1OxK7LGzRrHrTtHV5DFANquW19BIFg6sU8E=
+github.com/certusone/janus v0.37.9-janus-1.0.20200923163128-71f345a4cb07/go.mod h1:DKrgFfmQjABBoCedRlvYF4RgqnNEpOFmqHn6SJAVNdY=
github.com/99designs/keyring v1.1.6 h1:kVDC2uCgVwecxCk+9zoCt2uEL6dt+dfVzMvGgnVcIuM=
github.com/99designs/keyring v1.1.6/go.mod h1:16e0ds7LGQQcT59QqkTg72Hh5ShM51Byv5PEmW6uoRU=
+github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg=
@@ -107,6 +110,7 @@ github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6D
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa h1:OaNxuTZr7kxeODyLWsRMC+OD03aFUH+mW6r2d+MWa5Y=
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
github.com/confio/ics23/go v0.0.0-20200817220745-f173e6211efb/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg=
@@ -118,13 +122,15 @@ github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc
github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
+github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8=
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
+github.com/coreos/go-systemd/v22 v22.0.0 h1:XJIw/+VlJ+87J+doOxznsAWIdmWuViOVhkQamW5YV28=
+github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
-github.com/cosmos/cosmos-sdk v0.42.6 h1:ps1QWfvaX6VLNcykA7wzfii/5IwBfYgTIik6NOVDq/c=
-github.com/cosmos/cosmos-sdk v0.42.6/go.mod h1:kh37gwYQoWdgR7N/9zeqW2rJ7cnP2W4A7nqIaf6m3zg=
github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y=
github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY=
github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw=
@@ -141,6 +147,7 @@ github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwc
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
+github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/danieljoos/wincred v1.0.2 h1:zf4bhty2iLuwgjgpraD2E9UbvO+fe54XXGJbOwe23fU=
github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U=
github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -172,6 +179,7 @@ github.com/enigmampc/btcutil v1.0.3-0.20200723161021-e2fb6adb2a25 h1:2vLKys4RBU4
github.com/enigmampc/btcutil v1.0.3-0.20200723161021-e2fb6adb2a25/go.mod h1:hTr8+TLQmkUkgcuh3mcr5fjrT9c64ZzsBCdCEC6UppY=
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/etcd-io/gofail v0.0.0-20190801230047-ad7f989257ca/go.mod h1:49H/RkXP8pKaZy4h0d+NW16rSLhyVBt4o6VLJbmOqDE=
github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51 h1:0JZ+dUmQeA8IIVUMzysrX4/AKuQwWhV2dYQuPZdvdSQ=
github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64=
github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A=
@@ -205,6 +213,7 @@ github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0=
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4=
+github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0=
github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
@@ -273,6 +282,8 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
@@ -343,6 +354,8 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO
github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
+github.com/hendrikhofstadt/etcd/v3 v3.3.0-rc.0.0.20200923165723-d669243f0eb2 h1:EF6Xn+VZ2mPF5580ZSRFmdvFeGBTtAcbIifaczqqwoo=
+github.com/hendrikhofstadt/etcd/v3 v3.3.0-rc.0.0.20200923165723-d669243f0eb2/go.mod h1:YD2Odnpsfaq5j/h9VgEfR85HgoeFzTxhGJO07seE7/Q=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
@@ -401,6 +414,7 @@ github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 h1:hLDRPB66XQT/8+wG9WsDpiCvZf1yKO7sz7scAjSlBa0=
github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM=
+github.com/minio/highwayhash v1.0.0/go.mod h1:xQboMTeM9nY9v/LlAOxFctujiv5+Aq2hR5dxBpaMbdc=
github.com/minio/highwayhash v1.0.1 h1:dZ6IIu8Z14VlC0VpfKofAhCy74wu/Qb5gcn52yWoz/0=
github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY=
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
@@ -610,6 +624,7 @@ github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 h1:hqAk8riJvK4RM
github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk=
github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E=
github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME=
+github.com/tendermint/tendermint v0.34.0-rc3.0.20200907055413-3359e0bf2f84/go.mod h1:ZgOz3PoriH5yHRJmUmhDTVX8ps4+hzFvhmDq6MDUHxU=
github.com/tendermint/tendermint v0.34.0-rc4/go.mod h1:yotsojf2C1QBOw4dZrTcxbyxmPUrT4hNuOQWX9XUwB4=
github.com/tendermint/tendermint v0.34.0-rc6/go.mod h1:ugzyZO5foutZImv0Iyx/gOFCX6mjJTgbLHTwi17VDVg=
github.com/tendermint/tendermint v0.34.0/go.mod h1:Aj3PIipBFSNO21r+Lq3TtzQ+uKESxkbA3yo/INM4QwQ=
@@ -639,6 +654,7 @@ go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0=
go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
+go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738 h1:VcrIfasaLFkyjk6KNlXQSzO+B0fZcnECiDrKJsfxka0=
go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
@@ -650,11 +666,18 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
+go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk=
+go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
+go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A=
+go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
+go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4=
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
+go.uber.org/zap v1.15.0 h1:ZZCA22JRF2gQE5FoNmhmrf7jeJJ2uhqDUNRYKm8dvmM=
+go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc=
golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
@@ -664,6 +687,7 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -697,6 +721,7 @@ golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHl
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
@@ -705,6 +730,7 @@ golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -875,8 +901,10 @@ golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roY
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
+golang.org/x/tools v0.0.0-20200806022845-90696ccdc692/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -939,6 +967,7 @@ google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEY
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201111145450-ac7456db90a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
@@ -997,6 +1026,7 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
+honnef.co/go/tools v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
--
2.31.1

15
patches/gaia/dump_patches.sh Executable file
View File

@ -0,0 +1,15 @@
#!/bin/bash
# Usage:
# cd gaia
# ~/certus/janus/patches/gaia/dump_patches.sh upstream/v0.2.3
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
rm ${DIR}/*.patch
git format-patch $1 -o ${DIR}
echo "$(git describe --tags)" > ${DIR}/ref
echo "$(git describe --tags $1)" > ${DIR}/upstream_ref
echo "Wrote patch files to ${DIR}."

1
patches/gaia/ref Normal file
View File

@ -0,0 +1 @@
v5.0.0-1-g627f8533

View File

@ -0,0 +1 @@
v5.0.0