diff --git a/demo-apps/auth-chain/Makefile b/demo-apps/auth-chain/Makefile index 7fcc100..2edc16b 100644 --- a/demo-apps/auth-chain/Makefile +++ b/demo-apps/auth-chain/Makefile @@ -1,5 +1,18 @@ all: build +init-dev: init-chain init-validator + +start-dev: + go run cmd/auth-chaind/main.go cmd/auth-chaind/genaccounts.go start --home ./build/.auth-chaind + +init-chain: + go run cmd/auth-chaind/main.go cmd/auth-chaind/genaccounts.go init --chain-id=auth auth --home ./build/.auth-chaind + echo "y" | go run cmd/auth-chaincli/main.go keys add auth-chain1 --home ./build/.auth-chaind + +init-validator: + go run cmd/auth-chaind/main.go cmd/auth-chaind/genaccounts.go add-genesis-account $(shell go run cmd/auth-chaincli/main.go keys show auth-chain1 -a --home ./build/.auth-chaind) 1000000000stake --home ./build/.auth-chaind + go run cmd/auth-chaind/main.go cmd/auth-chaind/genaccounts.go gentx --name auth-chain1 --home ./build/.auth-chaind --moniker authchain --website test.com --identity test --security-contact test@test.com --details atest + go run cmd/auth-chaind/main.go cmd/auth-chaind/genaccounts.go collect-gentxs --home ./build/.auth-chaind build: @mkdir -p build/ diff --git a/demo-apps/auth-chain/app/app.go b/demo-apps/auth-chain/app/app.go index a2b85d1..b7dc426 100644 --- a/demo-apps/auth-chain/app/app.go +++ b/demo-apps/auth-chain/app/app.go @@ -10,6 +10,12 @@ import ( tmos "github.com/tendermint/tendermint/libs/os" dbm "github.com/tendermint/tm-db" + "github.com/allinbits/modules/demo-apps/auth-chain/x/authchain" + authchainkeeper "github.com/allinbits/modules/demo-apps/auth-chain/x/authchain/keeper" + authchaintypes "github.com/allinbits/modules/demo-apps/auth-chain/x/authchain/types" + "github.com/allinbits/modules/x/poa" + poakeeper "github.com/allinbits/modules/x/poa/keeper" + poatypes "github.com/allinbits/modules/x/poa/types" bam "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" @@ -20,34 +26,28 @@ import ( "github.com/cosmos/cosmos-sdk/x/bank" "github.com/cosmos/cosmos-sdk/x/genutil" "github.com/cosmos/cosmos-sdk/x/params" - "github.com/cosmos/cosmos-sdk/x/staking" "github.com/cosmos/cosmos-sdk/x/supply" - "github.com/allinbits/modules/demo-apps/auth-chain/x/authchain" - authchainkeeper "github.com/allinbits/modules/demo-apps/auth-chain/x/authchain/keeper" - authchaintypes "github.com/allinbits/modules/demo-apps/auth-chain/x/authchain/types" - // this line is used by starport scaffolding # 1 + // this line is used by starport scaffolding # 1 ) const appName = "authchain" var ( - DefaultCLIHome = os.ExpandEnv("$HOME/.authchaincli") + DefaultCLIHome = os.ExpandEnv("$HOME/.authchaincli") DefaultNodeHome = os.ExpandEnv("$HOME/.authchaind") - ModuleBasics = module.NewBasicManager( + ModuleBasics = module.NewBasicManager( genutil.AppModuleBasic{}, auth.AppModuleBasic{}, bank.AppModuleBasic{}, - staking.AppModuleBasic{}, + poa.AppModuleBasic{}, params.AppModuleBasic{}, supply.AppModuleBasic{}, authchain.AppModuleBasic{}, - // this line is used by starport scaffolding # 2 + // this line is used by starport scaffolding # 2 ) maccPerms = map[string][]string{ - auth.FeeCollectorName: nil, - staking.BondedPoolName: {supply.Burner, supply.Staking}, - staking.NotBondedPoolName: {supply.Burner, supply.Staking}, + auth.FeeCollectorName: nil, } ) @@ -72,13 +72,13 @@ type NewApp struct { subspaces map[string]params.Subspace - accountKeeper auth.AccountKeeper - bankKeeper bank.Keeper - stakingKeeper staking.Keeper - supplyKeeper supply.Keeper - paramsKeeper params.Keeper + accountKeeper auth.AccountKeeper + bankKeeper bank.Keeper + poaKeeper poakeeper.Keeper + supplyKeeper supply.Keeper + paramsKeeper params.Keeper authchainKeeper authchainkeeper.Keeper - // this line is used by starport scaffolding # 3 + // this line is used by starport scaffolding # 3 mm *module.Manager sm *module.SimulationManager @@ -97,16 +97,16 @@ func NewInitApp( bApp.SetAppVersion(version.Version) keys := sdk.NewKVStoreKeys( - bam.MainStoreKey, - auth.StoreKey, - staking.StoreKey, + bam.MainStoreKey, + auth.StoreKey, + poatypes.StoreKey, supply.StoreKey, - params.StoreKey, - authchaintypes.StoreKey, - // this line is used by starport scaffolding # 5 - ) + params.StoreKey, + authchaintypes.StoreKey, + // this line is used by starport scaffolding # 5 + ) - tKeys := sdk.NewTransientStoreKeys(staking.TStoreKey, params.TStoreKey) + tKeys := sdk.NewTransientStoreKeys(params.TStoreKey) var app = &NewApp{ BaseApp: bApp, @@ -120,7 +120,7 @@ func NewInitApp( app.paramsKeeper = params.NewKeeper(app.cdc, keys[params.StoreKey], tKeys[params.TStoreKey]) app.subspaces[auth.ModuleName] = app.paramsKeeper.Subspace(auth.DefaultParamspace) app.subspaces[bank.ModuleName] = app.paramsKeeper.Subspace(bank.DefaultParamspace) - app.subspaces[staking.ModuleName] = app.paramsKeeper.Subspace(staking.DefaultParamspace) + app.subspaces[poatypes.ModuleName] = app.paramsKeeper.Subspace(poakeeper.DefaultParamspace) app.accountKeeper = auth.NewAccountKeeper( app.cdc, @@ -143,15 +143,11 @@ func NewInitApp( maccPerms, ) - stakingKeeper := staking.NewKeeper( + app.poaKeeper = poakeeper.NewKeeper( + app.bankKeeper, app.cdc, - keys[staking.StoreKey], - app.supplyKeeper, - app.subspaces[staking.ModuleName], - ) - - app.stakingKeeper = *stakingKeeper.SetHooks( - staking.NewMultiStakingHooks(), + keys[authchaintypes.StoreKey], + app.subspaces[poatypes.ModuleName], ) app.authchainKeeper = authchainkeeper.NewKeeper( @@ -160,28 +156,30 @@ func NewInitApp( keys[authchaintypes.StoreKey], ) - // this line is used by starport scaffolding # 4 + // this line is used by starport scaffolding # 4 app.mm = module.NewManager( - genutil.NewAppModule(app.accountKeeper, app.stakingKeeper, app.BaseApp.DeliverTx), + genutil.NewAppModule(app.accountKeeper, app.poaKeeper, app.BaseApp.DeliverTx), auth.NewAppModule(app.accountKeeper), bank.NewAppModule(app.bankKeeper, app.accountKeeper), supply.NewAppModule(app.supplyKeeper, app.accountKeeper), authchain.NewAppModule(app.authchainKeeper, app.bankKeeper), - staking.NewAppModule(app.stakingKeeper, app.accountKeeper, app.supplyKeeper), - // this line is used by starport scaffolding # 6 + poa.NewAppModule(app.poaKeeper, app.bankKeeper), + // this line is used by starport scaffolding # 6 ) - app.mm.SetOrderEndBlockers(staking.ModuleName) + app.mm.SetOrderEndBlockers(poatypes.ModuleName) + + genutil.ModuleCdc = app.cdc app.mm.SetOrderInitGenesis( - staking.ModuleName, + poatypes.ModuleName, auth.ModuleName, bank.ModuleName, authchaintypes.ModuleName, supply.ModuleName, genutil.ModuleName, - // this line is used by starport scaffolding # 7 + // this line is used by starport scaffolding # 7 ) app.mm.RegisterRoutes(app.Router(), app.QueryRouter()) diff --git a/demo-apps/auth-chain/app/export.go b/demo-apps/auth-chain/app/export.go index d999aa2..e7ae5a8 100644 --- a/demo-apps/auth-chain/app/export.go +++ b/demo-apps/auth-chain/app/export.go @@ -2,14 +2,12 @@ package app import ( "encoding/json" - "log" abci "github.com/tendermint/tendermint/abci/types" tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/staking" ) // ExportAppStateAndValidators exports the state of the application for a genesis @@ -31,7 +29,6 @@ func (app *NewApp) ExportAppStateAndValidators( return nil, nil, err } - validators = staking.WriteValidators(ctx, app.stakingKeeper) return appState, validators, nil } @@ -39,78 +36,5 @@ func (app *NewApp) ExportAppStateAndValidators( // NOTE zero height genesis is a temporary feature which will be deprecated // in favour of export at a block height func (app *NewApp) prepForZeroHeightGenesis(ctx sdk.Context, jailWhiteList []string) { - applyWhiteList := false - - //Check if there is a whitelist - if len(jailWhiteList) > 0 { - applyWhiteList = true - } - - whiteListMap := make(map[string]bool) - - for _, addr := range jailWhiteList { - _, err := sdk.ValAddressFromBech32(addr) - if err != nil { - log.Fatal(err) - } - whiteListMap[addr] = true - } - - // set context height to zero - height := ctx.BlockHeight() - ctx = ctx.WithBlockHeight(0) - - // reinitialize all validators - app.stakingKeeper.IterateValidators(ctx, func(_ int64, val staking.ValidatorI) (stop bool) { - return false - }) - - // reset context height - ctx = ctx.WithBlockHeight(height) - - /* Handle staking state. */ - - // iterate through redelegations, reset creation height - app.stakingKeeper.IterateRedelegations(ctx, func(_ int64, red staking.Redelegation) (stop bool) { - for i := range red.Entries { - red.Entries[i].CreationHeight = 0 - } - app.stakingKeeper.SetRedelegation(ctx, red) - return false - }) - - // iterate through unbonding delegations, reset creation height - app.stakingKeeper.IterateUnbondingDelegations(ctx, func(_ int64, ubd staking.UnbondingDelegation) (stop bool) { - for i := range ubd.Entries { - ubd.Entries[i].CreationHeight = 0 - } - app.stakingKeeper.SetUnbondingDelegation(ctx, ubd) - return false - }) - - // Iterate through validators by power descending, reset bond heights, and - // update bond intra-tx counters. - store := ctx.KVStore(app.keys[staking.StoreKey]) - iter := sdk.KVStoreReversePrefixIterator(store, staking.ValidatorsKey) - counter := int16(0) - - for ; iter.Valid(); iter.Next() { - addr := sdk.ValAddress(iter.Key()[1:]) - validator, found := app.stakingKeeper.GetValidator(ctx, addr) - if !found { - panic("expected validator, not found") - } - - validator.UnbondingHeight = 0 - if applyWhiteList && !whiteListMap[addr.String()] { - validator.Jailed = true - } - - app.stakingKeeper.SetValidator(ctx, validator) - counter++ - } - - iter.Close() - - _ = app.stakingKeeper.ApplyAndReturnValidatorSetUpdates(ctx) + _ = app.poaKeeper.ApplyAndReturnValidatorSetUpdates(ctx) } diff --git a/demo-apps/auth-chain/cmd/auth-chaind/main.go b/demo-apps/auth-chain/cmd/auth-chaind/main.go index f9cd555..073399c 100644 --- a/demo-apps/auth-chain/cmd/auth-chaind/main.go +++ b/demo-apps/auth-chain/cmd/auth-chaind/main.go @@ -15,6 +15,8 @@ import ( "github.com/allinbits/modules/demo-apps/auth-chain/app" + "github.com/allinbits/modules/x/poa" + poacli "github.com/allinbits/modules/x/poa/client/cli" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client/debug" "github.com/cosmos/cosmos-sdk/client/flags" @@ -23,7 +25,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/auth" genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli" - "github.com/cosmos/cosmos-sdk/x/staking" ) const flagInvCheckPeriod = "inv-check-period" @@ -44,11 +45,11 @@ func main() { } rootCmd.AddCommand(genutilcli.InitCmd(ctx, cdc, app.ModuleBasics, app.DefaultNodeHome)) - rootCmd.AddCommand(genutilcli.CollectGenTxsCmd(ctx, cdc, auth.GenesisAccountIterator{}, app.DefaultNodeHome)) + rootCmd.AddCommand(poacli.CollectGenTxsCmd(ctx, cdc, auth.GenesisAccountIterator{}, app.DefaultNodeHome)) rootCmd.AddCommand(genutilcli.MigrateGenesisCmd(ctx, cdc)) rootCmd.AddCommand( - genutilcli.GenTxCmd( - ctx, cdc, app.ModuleBasics, staking.AppModuleBasic{}, + poacli.GenTxCmd( + ctx, cdc, app.ModuleBasics, poa.AppModuleBasic{}, auth.GenesisAccountIterator{}, app.DefaultNodeHome, app.DefaultCLIHome, ), ) diff --git a/demo-apps/auth-chain/go.mod b/demo-apps/auth-chain/go.mod index 2a34fdb..1ef985f 100644 --- a/demo-apps/auth-chain/go.mod +++ b/demo-apps/auth-chain/go.mod @@ -3,17 +3,19 @@ module github.com/allinbits/modules/demo-apps/auth-chain go 1.15 require ( + github.com/allinbits/modules/poa v0.0.0-20201006081502-d144cbfb0613 + github.com/allinbits/modules/x/poa v0.0.0-20201009193500-337b33a517b1 github.com/cosmos/cosmos-sdk v0.39.1 github.com/golang/mock v1.4.3 // indirect github.com/google/uuid v1.0.0 - github.com/gorilla/mux v1.7.4 + github.com/gorilla/mux v1.8.0 github.com/onsi/ginkgo v1.8.0 // indirect github.com/onsi/gomega v1.5.0 // indirect github.com/spf13/afero v1.2.2 // indirect github.com/spf13/cobra v1.0.0 - github.com/spf13/viper v1.7.0 + github.com/spf13/viper v1.7.1 github.com/tendermint/go-amino v0.15.1 - github.com/tendermint/tendermint v0.33.6 + github.com/tendermint/tendermint v0.33.7 github.com/tendermint/tm-db v0.5.1 golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2 // indirect ) diff --git a/demo-apps/auth-chain/go.sum b/demo-apps/auth-chain/go.sum index 49b1ec2..96eb9fe 100644 --- a/demo-apps/auth-chain/go.sum +++ b/demo-apps/auth-chain/go.sum @@ -32,6 +32,12 @@ github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuy github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/allinbits/modules v0.0.0-20201006081502-d144cbfb0613 h1:x4TsoEyAtoL2o9h+RBZILevutOXQT2E0ryKNcWRl3JQ= +github.com/allinbits/modules v0.0.0-20201008171309-338f3edb758b h1:J97r6dFwbW1L1QWxWovBPHd1WTE0Lbgg/x/KZeGCT58= +github.com/allinbits/modules/poa v0.0.0-20201006081502-d144cbfb0613 h1:UNhTZEpGpI1ihFe7ajf5fug08zcOFn6tYMXiEMN/b9g= +github.com/allinbits/modules/poa v0.0.0-20201006081502-d144cbfb0613/go.mod h1:zJs4nxx0cK3cvrVq13lHtmvwCYw8yPPD78io/Pi1+xU= +github.com/allinbits/modules/x/poa v0.0.0-20201009193500-337b33a517b1 h1:t4yY0spGDLQYmgk9FOIDaqU3AiJ7UcXwcfo/vbWnueI= +github.com/allinbits/modules/x/poa v0.0.0-20201009193500-337b33a517b1/go.mod h1:E6F888iR9HZbtMansKFQXAPo9JXz3JcEgSvmaEVZqdM= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= @@ -87,6 +93,8 @@ github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfc github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/cosmos-sdk v0.39.0 h1:lWZQLFxLYQ4ydD01cDZF7tRF8IN2xclDmoNPIJ5Kw44= github.com/cosmos/cosmos-sdk v0.39.0/go.mod h1:3iKiqnQ48T0UG4IDw9EM8utQSwItutLUkmGkRSWpS5U= +github.com/cosmos/cosmos-sdk v0.39.1 h1:vhjf9PZh9ph8btAj9aBpHoVITgVVjNBpM3x5Gl/Vwac= +github.com/cosmos/cosmos-sdk v0.39.1/go.mod h1:ry2ROl5n+f2/QXpKJo3rdWNJwll00z7KhIVcxNcl16M= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d h1:49RLWk1j44Xu4fjHb6JFYmeUnDORVwHNkDxaQ0ctCVU= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/ledger-cosmos-go v0.11.1 h1:9JIYsGnXP613pb2vPjFeMMjBI5lEDsEaF6oYorTy6J4= @@ -196,10 +204,14 @@ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5m github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg= +github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc= github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= @@ -427,6 +439,8 @@ github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/y github.com/spf13/viper v1.6.3/go.mod h1:jUMtyi0/lB5yZH/FjyGAoH7IMNrIhlBf6pXZmbMDvzw= github.com/spf13/viper v1.7.0 h1:xVKxvI7ouOI5I+U9s2eeiUfMaWBVoXA3AWskkrqK0VM= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= +github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= @@ -458,6 +472,8 @@ github.com/tendermint/iavl v0.14.0/go.mod h1:QmfViflFiXzxKLQE4tAUuWQHq+RSuQFxabl github.com/tendermint/tendermint v0.33.5/go.mod h1:0yUs9eIuuDq07nQql9BmI30FtYGcEC60Tu5JzB5IezM= github.com/tendermint/tendermint v0.33.6 h1:W4UOsXY4ROJZ3TLLGVVv71VXD4WK2gJRb3gzeced+mg= github.com/tendermint/tendermint v0.33.6/go.mod h1:0yUs9eIuuDq07nQql9BmI30FtYGcEC60Tu5JzB5IezM= +github.com/tendermint/tendermint v0.33.7 h1:b5CQD8ggDtl4u0EbXzabi0MaOw9NrcXker6ijEkAE74= +github.com/tendermint/tendermint v0.33.7/go.mod h1:0yUs9eIuuDq07nQql9BmI30FtYGcEC60Tu5JzB5IezM= github.com/tendermint/tm-db v0.5.1 h1:H9HDq8UEA7Eeg13kdYckkgwwkQLBnJGgX4PgLJRhieY= github.com/tendermint/tm-db v0.5.1/go.mod h1:g92zWjHpCYlEvQXvy9M168Su8V1IBEeawpXVVBaK4f4= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=