Upgrade to cosmos-sdk v0.40.0-rc5 (#345)
* Upgrade to cosmos-sdk v0.40.0-rc5 * Migrate cli queries * Update changelog * Remove DONTCOVER filter for coverage
This commit is contained in:
@@ -103,15 +103,6 @@ jobs:
|
|||||||
for prof in $(ls /tmp/workspace/profiles/); do
|
for prof in $(ls /tmp/workspace/profiles/); do
|
||||||
tail -n +2 /tmp/workspace/profiles/"$prof" >> coverage.txt
|
tail -n +2 /tmp/workspace/profiles/"$prof" >> coverage.txt
|
||||||
done
|
done
|
||||||
- run:
|
|
||||||
name: filter out DONTCOVER
|
|
||||||
command: |
|
|
||||||
excludelist="$(find . -type f -name '*.go' | xargs grep -l 'DONTCOVER')"
|
|
||||||
for filename in ${excludelist}; do
|
|
||||||
filename=$(echo $filename | sed 's/^./github.com\/CosmWasm\/wasmd/g')
|
|
||||||
echo "Excluding ${filename} from coverage report..."
|
|
||||||
sed -i.bak "/$(echo $filename | sed 's/\//\\\//g')/d" coverage.txt
|
|
||||||
done
|
|
||||||
- run:
|
- run:
|
||||||
name: upload
|
name: upload
|
||||||
command: bash <(curl -s https://codecov.io/bash) -f coverage.txt
|
command: bash <(curl -s https://codecov.io/bash) -f coverage.txt
|
||||||
|
|||||||
14
CHANGELOG.md
14
CHANGELOG.md
@@ -4,22 +4,16 @@
|
|||||||
|
|
||||||
[Full Changelog](https://github.com/CosmWasm/wasmd/compare/v0.13.0...HEAD)
|
[Full Changelog](https://github.com/CosmWasm/wasmd/compare/v0.13.0...HEAD)
|
||||||
|
|
||||||
|
**Features:**
|
||||||
|
- Upgrade to cosmos-sdk v0.40.0-rc5 [\#344](https://github.com/CosmWasm/wasmd/issues/344)
|
||||||
|
- Add Dependabot to keep dependencies secure and up-to-date [\#336](https://github.com/CosmWasm/wasmd/issues/336)
|
||||||
|
|
||||||
**Fixed bugs:**
|
**Fixed bugs:**
|
||||||
|
|
||||||
- Dependabot can't resolve your Go dependency files [\#339](https://github.com/CosmWasm/wasmd/issues/339)
|
- Dependabot can't resolve your Go dependency files [\#339](https://github.com/CosmWasm/wasmd/issues/339)
|
||||||
- Errors in `InitGenesis` [\#335](https://github.com/CosmWasm/wasmd/issues/335)
|
- Errors in `InitGenesis` [\#335](https://github.com/CosmWasm/wasmd/issues/335)
|
||||||
- Invalid homeDir for export command [\#334](https://github.com/CosmWasm/wasmd/issues/334)
|
- Invalid homeDir for export command [\#334](https://github.com/CosmWasm/wasmd/issues/334)
|
||||||
|
|
||||||
**Closed issues:**
|
|
||||||
|
|
||||||
- Add Dependabot to keep dependencies secure and up-to-date [\#336](https://github.com/CosmWasm/wasmd/issues/336)
|
|
||||||
|
|
||||||
**Merged pull requests:**
|
|
||||||
|
|
||||||
- Upgrade grpc lib to v1.34.0 [\#340](https://github.com/CosmWasm/wasmd/pull/340) ([alpe](https://github.com/alpe))
|
|
||||||
- Fix param usage issue in genesis import [\#338](https://github.com/CosmWasm/wasmd/pull/338) ([alpe](https://github.com/alpe))
|
|
||||||
- Fix home dir issue in export command [\#337](https://github.com/CosmWasm/wasmd/pull/337) ([alpe](https://github.com/alpe))
|
|
||||||
|
|
||||||
## [v0.13.0](https://github.com/CosmWasm/wasmd/tree/v0.13.0) (2020-12-04)
|
## [v0.13.0](https://github.com/CosmWasm/wasmd/tree/v0.13.0) (2020-12-04)
|
||||||
|
|
||||||
[Full Changelog](https://github.com/CosmWasm/wasmd/compare/v0.12.1...v0.13.0)
|
[Full Changelog](https://github.com/CosmWasm/wasmd/compare/v0.12.1...v0.13.0)
|
||||||
|
|||||||
25
app/app.go
25
app/app.go
@@ -7,6 +7,7 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/cosmos/cosmos-sdk/client/grpc/tmservice"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/rakyll/statik/fs"
|
"github.com/rakyll/statik/fs"
|
||||||
"github.com/spf13/cast"
|
"github.com/spf13/cast"
|
||||||
@@ -315,7 +316,7 @@ func NewWasmApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest b
|
|||||||
|
|
||||||
// Create IBC Keeper
|
// Create IBC Keeper
|
||||||
app.ibcKeeper = ibckeeper.NewKeeper(
|
app.ibcKeeper = ibckeeper.NewKeeper(
|
||||||
appCodec, keys[ibchost.StoreKey], app.stakingKeeper, scopedIBCKeeper,
|
appCodec, keys[ibchost.StoreKey], app.getSubspace(ibchost.ModuleName), app.stakingKeeper, scopedIBCKeeper,
|
||||||
)
|
)
|
||||||
|
|
||||||
// register the proposal types
|
// register the proposal types
|
||||||
@@ -397,7 +398,8 @@ func NewWasmApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest b
|
|||||||
app.mm = module.NewManager(
|
app.mm = module.NewManager(
|
||||||
genutil.NewAppModule(
|
genutil.NewAppModule(
|
||||||
app.accountKeeper, app.stakingKeeper, app.BaseApp.DeliverTx,
|
app.accountKeeper, app.stakingKeeper, app.BaseApp.DeliverTx,
|
||||||
encodingConfig.TxConfig),
|
encodingConfig.TxConfig,
|
||||||
|
),
|
||||||
auth.NewAppModule(appCodec, app.accountKeeper, authsims.RandomGenesisAccounts),
|
auth.NewAppModule(appCodec, app.accountKeeper, authsims.RandomGenesisAccounts),
|
||||||
vesting.NewAppModule(app.accountKeeper, app.bankKeeper),
|
vesting.NewAppModule(app.accountKeeper, app.bankKeeper),
|
||||||
bank.NewAppModule(appCodec, app.bankKeeper, app.accountKeeper),
|
bank.NewAppModule(appCodec, app.bankKeeper, app.accountKeeper),
|
||||||
@@ -552,7 +554,10 @@ func (app *WasmApp) BlockedAddrs() map[string]bool {
|
|||||||
return blockedAddrs
|
return blockedAddrs
|
||||||
}
|
}
|
||||||
|
|
||||||
// LegacyAmino returns the application's sealed codec.
|
// LegacyAmino returns SimApp's amino codec.
|
||||||
|
//
|
||||||
|
// NOTE: This is solely to be used for testing purposes as it may be desirable
|
||||||
|
// for modules to register their own custom testing types.
|
||||||
func (app *WasmApp) LegacyAmino() *codec.LegacyAmino {
|
func (app *WasmApp) LegacyAmino() *codec.LegacyAmino {
|
||||||
return app.legacyAmino
|
return app.legacyAmino
|
||||||
}
|
}
|
||||||
@@ -575,12 +580,16 @@ func (app *WasmApp) getSubspace(moduleName string) paramstypes.Subspace {
|
|||||||
func (app *WasmApp) RegisterAPIRoutes(apiSvr *api.Server, apiConfig config.APIConfig) {
|
func (app *WasmApp) RegisterAPIRoutes(apiSvr *api.Server, apiConfig config.APIConfig) {
|
||||||
clientCtx := apiSvr.ClientCtx
|
clientCtx := apiSvr.ClientCtx
|
||||||
rpc.RegisterRoutes(clientCtx, apiSvr.Router)
|
rpc.RegisterRoutes(clientCtx, apiSvr.Router)
|
||||||
|
// Register legacy tx routes.
|
||||||
authrest.RegisterTxRoutes(clientCtx, apiSvr.Router)
|
authrest.RegisterTxRoutes(clientCtx, apiSvr.Router)
|
||||||
// Register new tx routes from grpc-gateway.
|
// Register new tx routes from grpc-gateway.
|
||||||
authtx.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCRouter)
|
authtx.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)
|
||||||
|
// Register new tendermint queries routes from grpc-gateway.
|
||||||
|
tmservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)
|
||||||
|
|
||||||
|
// Register legacy and grpc-gateway routes for all modules.
|
||||||
ModuleBasics.RegisterRESTRoutes(clientCtx, apiSvr.Router)
|
ModuleBasics.RegisterRESTRoutes(clientCtx, apiSvr.Router)
|
||||||
ModuleBasics.RegisterGRPCGatewayRoutes(apiSvr.ClientCtx, apiSvr.GRPCRouter)
|
ModuleBasics.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)
|
||||||
|
|
||||||
// register swagger API from root so that other applications can override easily
|
// register swagger API from root so that other applications can override easily
|
||||||
if apiConfig.Swagger {
|
if apiConfig.Swagger {
|
||||||
@@ -593,6 +602,11 @@ func (app *WasmApp) RegisterTxService(clientCtx client.Context) {
|
|||||||
authtx.RegisterTxService(app.BaseApp.GRPCQueryRouter(), clientCtx, app.BaseApp.Simulate, app.interfaceRegistry)
|
authtx.RegisterTxService(app.BaseApp.GRPCQueryRouter(), clientCtx, app.BaseApp.Simulate, app.interfaceRegistry)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RegisterTendermintService implements the Application.RegisterTendermintService method.
|
||||||
|
func (app *WasmApp) RegisterTendermintService(clientCtx client.Context) {
|
||||||
|
tmservice.RegisterTendermintService(app.BaseApp.GRPCQueryRouter(), clientCtx, app.interfaceRegistry)
|
||||||
|
}
|
||||||
|
|
||||||
// RegisterSwaggerAPI registers swagger route with API Server
|
// RegisterSwaggerAPI registers swagger route with API Server
|
||||||
func RegisterSwaggerAPI(_ client.Context, rtr *mux.Router) {
|
func RegisterSwaggerAPI(_ client.Context, rtr *mux.Router) {
|
||||||
statikFS, err := fs.New()
|
statikFS, err := fs.New()
|
||||||
@@ -626,6 +640,7 @@ func initParamsKeeper(appCodec codec.BinaryMarshaler, legacyAmino *codec.LegacyA
|
|||||||
paramsKeeper.Subspace(govtypes.ModuleName).WithKeyTable(govtypes.ParamKeyTable())
|
paramsKeeper.Subspace(govtypes.ModuleName).WithKeyTable(govtypes.ParamKeyTable())
|
||||||
paramsKeeper.Subspace(crisistypes.ModuleName)
|
paramsKeeper.Subspace(crisistypes.ModuleName)
|
||||||
paramsKeeper.Subspace(ibctransfertypes.ModuleName)
|
paramsKeeper.Subspace(ibctransfertypes.ModuleName)
|
||||||
|
paramsKeeper.Subspace(ibchost.ModuleName)
|
||||||
paramsKeeper.Subspace(wasm.ModuleName)
|
paramsKeeper.Subspace(wasm.ModuleName)
|
||||||
|
|
||||||
return paramsKeeper
|
return paramsKeeper
|
||||||
|
|||||||
@@ -16,20 +16,31 @@ import (
|
|||||||
|
|
||||||
func TestWasmdExport(t *testing.T) {
|
func TestWasmdExport(t *testing.T) {
|
||||||
db := db.NewMemDB()
|
db := db.NewMemDB()
|
||||||
gapp := NewWasmApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, "", 0, wasm.EnableAllProposals, EmptyAppOptions{})
|
gapp := NewWasmApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, wasm.EnableAllProposals, EmptyAppOptions{})
|
||||||
err := setGenesis(gapp)
|
|
||||||
|
genesisState := NewDefaultGenesisState()
|
||||||
|
stateBytes, err := json.MarshalIndent(genesisState, "", " ")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// Initialize the chain
|
||||||
|
gapp.InitChain(
|
||||||
|
abci.RequestInitChain{
|
||||||
|
Validators: []abci.ValidatorUpdate{},
|
||||||
|
AppStateBytes: stateBytes,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
gapp.Commit()
|
||||||
|
|
||||||
// Making a new app object with the db, so that initchain hasn't been called
|
// Making a new app object with the db, so that initchain hasn't been called
|
||||||
newGapp := NewWasmApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, "", 0, wasm.EnableAllProposals, EmptyAppOptions{})
|
newGapp := NewWasmApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, wasm.EnableAllProposals, EmptyAppOptions{})
|
||||||
_, err = newGapp.ExportAppStateAndValidators(false, []string{})
|
_, err = newGapp.ExportAppStateAndValidators(false, []string{})
|
||||||
require.NoError(t, err, "ExportAppStateAndValidators should not have an error")
|
require.NoError(t, err, "ExportAppStateAndValidators should not have an error")
|
||||||
}
|
}
|
||||||
|
|
||||||
// ensure that black listed addresses are properly set in bank keeper
|
// ensure that blocked addresses are properly set in bank keeper
|
||||||
func TestBlackListedAddrs(t *testing.T) {
|
func TestBlockedAddrs(t *testing.T) {
|
||||||
db := db.NewMemDB()
|
db := db.NewMemDB()
|
||||||
gapp := NewWasmApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, "", 0, wasm.EnableAllProposals, EmptyAppOptions{})
|
gapp := NewWasmApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, wasm.EnableAllProposals, EmptyAppOptions{})
|
||||||
|
|
||||||
for acc := range maccPerms {
|
for acc := range maccPerms {
|
||||||
require.Equal(t, !allowedReceivingModAcc[acc], gapp.bankKeeper.BlockedAddr(gapp.accountKeeper.GetModuleAddress(acc)))
|
require.Equal(t, !allowedReceivingModAcc[acc], gapp.bankKeeper.BlockedAddr(gapp.accountKeeper.GetModuleAddress(acc)))
|
||||||
|
|||||||
@@ -1,210 +0,0 @@
|
|||||||
package integration
|
|
||||||
|
|
||||||
/**
|
|
||||||
This file is full of test helper functions, taken from simapp
|
|
||||||
**/
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"testing"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
wasmd "github.com/CosmWasm/wasmd/app"
|
|
||||||
"github.com/CosmWasm/wasmd/x/wasm"
|
|
||||||
bam "github.com/cosmos/cosmos-sdk/baseapp"
|
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
|
||||||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
|
||||||
"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
|
|
||||||
"github.com/cosmos/cosmos-sdk/simapp/helpers"
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
||||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
|
||||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
|
||||||
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
|
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
abci "github.com/tendermint/tendermint/abci/types"
|
|
||||||
"github.com/tendermint/tendermint/crypto"
|
|
||||||
"github.com/tendermint/tendermint/libs/log"
|
|
||||||
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
|
|
||||||
tmtypes "github.com/tendermint/tendermint/types"
|
|
||||||
dbm "github.com/tendermint/tm-db"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Setup initializes a new wasmd.WasmApp. A Nop logger is set in WasmApp.
|
|
||||||
func Setup(isCheckTx bool, homeDir string) *wasmd.WasmApp {
|
|
||||||
db := dbm.NewMemDB()
|
|
||||||
app := wasmd.NewWasmApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, homeDir, 5, wasm.EnableAllProposals, wasmd.EmptyAppOptions{})
|
|
||||||
// app := wasmd.NewWasmApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, 0)
|
|
||||||
if !isCheckTx {
|
|
||||||
// init chain must be called to stop deliverState from being nil
|
|
||||||
genesisState := wasmd.NewDefaultGenesisState()
|
|
||||||
stateBytes, err := json.Marshal(genesisState)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initialize the chain
|
|
||||||
app.InitChain(
|
|
||||||
abci.RequestInitChain{
|
|
||||||
Validators: []abci.ValidatorUpdate{},
|
|
||||||
AppStateBytes: stateBytes,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
return app
|
|
||||||
}
|
|
||||||
|
|
||||||
type GenesisState map[string]json.RawMessage
|
|
||||||
|
|
||||||
// NewDefaultGenesisState generates the default state for the application.
|
|
||||||
func NewDefaultGenesisState() GenesisState {
|
|
||||||
encCfg := wasmd.MakeEncodingConfig()
|
|
||||||
return wasmd.ModuleBasics.DefaultGenesis(encCfg.Marshaler)
|
|
||||||
}
|
|
||||||
|
|
||||||
func SetupWithGenesisValSet(t *testing.T, homeDir string, valSet *tmtypes.ValidatorSet, genAccs []authtypes.GenesisAccount, balances ...banktypes.Balance) *wasmd.WasmApp {
|
|
||||||
db := dbm.NewMemDB()
|
|
||||||
app := wasmd.NewWasmApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, homeDir, 5, wasm.EnableAllProposals, wasmd.EmptyAppOptions{})
|
|
||||||
genesisState := NewDefaultGenesisState()
|
|
||||||
|
|
||||||
// set genesis accounts
|
|
||||||
authGenesis := authtypes.NewGenesisState(authtypes.DefaultParams(), genAccs)
|
|
||||||
appCodec := wasmd.NewTestSupport(t, app).AppCodec()
|
|
||||||
genesisState[authtypes.ModuleName] = appCodec.MustMarshalJSON(authGenesis)
|
|
||||||
|
|
||||||
validators := make([]stakingtypes.Validator, 0, len(valSet.Validators))
|
|
||||||
delegations := make([]stakingtypes.Delegation, 0, len(valSet.Validators))
|
|
||||||
|
|
||||||
bondAmt := sdk.NewInt(1000000)
|
|
||||||
|
|
||||||
for _, val := range valSet.Validators {
|
|
||||||
// Currently validator requires tmcrypto.ed25519 keys, which don't support
|
|
||||||
// our Marshaling interfaces, so we need to pack them into our version of ed25519.
|
|
||||||
// There is ongoing work to add secp256k1 keys (https://github.com/cosmos/cosmos-sdk/pull/7604).
|
|
||||||
pk, err := ed25519.FromTmEd25519(val.PubKey)
|
|
||||||
require.NoError(t, err)
|
|
||||||
pkAny, err := codectypes.PackAny(pk)
|
|
||||||
require.NoError(t, err)
|
|
||||||
validator := stakingtypes.Validator{
|
|
||||||
OperatorAddress: sdk.ValAddress(val.Address).String(),
|
|
||||||
ConsensusPubkey: pkAny,
|
|
||||||
Jailed: false,
|
|
||||||
Status: stakingtypes.Bonded,
|
|
||||||
Tokens: bondAmt,
|
|
||||||
DelegatorShares: sdk.OneDec(),
|
|
||||||
Description: stakingtypes.Description{},
|
|
||||||
UnbondingHeight: int64(0),
|
|
||||||
UnbondingTime: time.Unix(0, 0).UTC(),
|
|
||||||
Commission: stakingtypes.NewCommission(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()),
|
|
||||||
MinSelfDelegation: sdk.ZeroInt(),
|
|
||||||
}
|
|
||||||
validators = append(validators, validator)
|
|
||||||
delegations = append(delegations, stakingtypes.NewDelegation(genAccs[0].GetAddress(), val.Address.Bytes(), sdk.OneDec()))
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// set validators and delegations
|
|
||||||
stakingGenesis := stakingtypes.NewGenesisState(stakingtypes.DefaultParams(), validators, delegations)
|
|
||||||
genesisState[stakingtypes.ModuleName] = appCodec.MustMarshalJSON(stakingGenesis)
|
|
||||||
|
|
||||||
totalSupply := sdk.NewCoins()
|
|
||||||
for _, b := range balances {
|
|
||||||
// add genesis acc tokens and delegated tokens to total supply
|
|
||||||
totalSupply = totalSupply.Add(b.Coins.Add(sdk.NewCoin(sdk.DefaultBondDenom, bondAmt))...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// update total supply
|
|
||||||
bankGenesis := banktypes.NewGenesisState(banktypes.DefaultGenesisState().Params, balances, totalSupply, []banktypes.Metadata{})
|
|
||||||
genesisState[banktypes.ModuleName] = appCodec.MustMarshalJSON(bankGenesis)
|
|
||||||
|
|
||||||
stateBytes, err := json.MarshalIndent(genesisState, "", " ")
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
// init chain will set the validator set and initialize the genesis accounts
|
|
||||||
app.InitChain(
|
|
||||||
abci.RequestInitChain{
|
|
||||||
Validators: []abci.ValidatorUpdate{},
|
|
||||||
ConsensusParams: DefaultConsensusParams,
|
|
||||||
AppStateBytes: stateBytes,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
// commit genesis changes
|
|
||||||
app.Commit()
|
|
||||||
app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{
|
|
||||||
Height: app.LastBlockHeight() + 1,
|
|
||||||
AppHash: app.LastCommitID().Hash,
|
|
||||||
ValidatorsHash: valSet.Hash(),
|
|
||||||
NextValidatorsHash: valSet.Hash(),
|
|
||||||
}})
|
|
||||||
|
|
||||||
return app
|
|
||||||
}
|
|
||||||
|
|
||||||
var DefaultConsensusParams = &abci.ConsensusParams{
|
|
||||||
Block: &abci.BlockParams{
|
|
||||||
MaxBytes: 200000,
|
|
||||||
MaxGas: 2000000,
|
|
||||||
},
|
|
||||||
Evidence: &tmproto.EvidenceParams{
|
|
||||||
MaxAgeNumBlocks: 302400,
|
|
||||||
MaxAgeDuration: 1814400,
|
|
||||||
},
|
|
||||||
Validator: &tmproto.ValidatorParams{
|
|
||||||
PubKeyTypes: []string{
|
|
||||||
tmtypes.ABCIPubKeyTypeEd25519,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
// SignCheckDeliver checks a generated signed transaction and simulates a
|
|
||||||
// block commitment with the given transaction. A test assertion is made using
|
|
||||||
// the parameter 'expPass' against the result. A corresponding result is
|
|
||||||
// returned.
|
|
||||||
func SignCheckDeliver(
|
|
||||||
t *testing.T, txCfg client.TxConfig, app *bam.BaseApp, header tmproto.Header, msgs []sdk.Msg,
|
|
||||||
chainID string, accNums, accSeqs []uint64, expSimPass, expPass bool, priv ...crypto.PrivKey,
|
|
||||||
) (sdk.GasInfo, *sdk.Result, error) {
|
|
||||||
|
|
||||||
tx, err := helpers.GenTx(
|
|
||||||
txCfg,
|
|
||||||
msgs,
|
|
||||||
sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 0)},
|
|
||||||
helpers.DefaultGenTxGas,
|
|
||||||
chainID,
|
|
||||||
accNums,
|
|
||||||
accSeqs,
|
|
||||||
priv...,
|
|
||||||
)
|
|
||||||
require.NoError(t, err)
|
|
||||||
txBytes, err := txCfg.TxEncoder()(tx)
|
|
||||||
require.Nil(t, err)
|
|
||||||
|
|
||||||
// Must simulate now as CheckTx doesn't run Msgs anymore
|
|
||||||
_, res, err := app.Simulate(txBytes)
|
|
||||||
|
|
||||||
if expSimPass {
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.NotNil(t, res)
|
|
||||||
} else {
|
|
||||||
require.Error(t, err)
|
|
||||||
require.Nil(t, res)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Simulate a sending a transaction and committing a block
|
|
||||||
app.BeginBlock(abci.RequestBeginBlock{Header: header})
|
|
||||||
gInfo, res, err := app.Deliver(txCfg.TxEncoder(), tx)
|
|
||||||
|
|
||||||
if expPass {
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.NotNil(t, res)
|
|
||||||
} else {
|
|
||||||
require.Error(t, err)
|
|
||||||
require.Nil(t, res)
|
|
||||||
}
|
|
||||||
|
|
||||||
app.EndBlock(abci.RequestEndBlock{})
|
|
||||||
app.Commit()
|
|
||||||
|
|
||||||
return gInfo, res, err
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
package app
|
|
||||||
|
|
||||||
// Simulation parameter constants
|
|
||||||
const (
|
|
||||||
StakePerAccount = "stake_per_account"
|
|
||||||
InitiallyBondedValidators = "initially_bonded_validators"
|
|
||||||
OpWeightDeductFee = "op_weight_deduct_fee"
|
|
||||||
OpWeightMsgSend = "op_weight_msg_send"
|
|
||||||
OpWeightMsgMultiSend = "op_weight_msg_multisend"
|
|
||||||
OpWeightMsgSetWithdrawAddress = "op_weight_msg_set_withdraw_address"
|
|
||||||
OpWeightMsgWithdrawDelegationReward = "op_weight_msg_withdraw_delegation_reward"
|
|
||||||
OpWeightMsgWithdrawValidatorCommission = "op_weight_msg_withdraw_validator_commission"
|
|
||||||
OpWeightSubmitTextProposal = "op_weight_submit_text_proposal"
|
|
||||||
OpWeightSubmitCommunitySpendProposal = "op_weight_submit_community_spend_proposal"
|
|
||||||
OpWeightSubmitParamChangeProposal = "op_weight_submit_param_change_proposal"
|
|
||||||
OpWeightMsgDeposit = "op_weight_msg_deposit"
|
|
||||||
OpWeightMsgVote = "op_weight_msg_vote"
|
|
||||||
OpWeightMsgCreateValidator = "op_weight_msg_create_validator"
|
|
||||||
OpWeightMsgEditValidator = "op_weight_msg_edit_validator"
|
|
||||||
OpWeightMsgDelegate = "op_weight_msg_delegate"
|
|
||||||
OpWeightMsgUndelegate = "op_weight_msg_undelegate"
|
|
||||||
OpWeightMsgBeginRedelegate = "op_weight_msg_begin_redelegate"
|
|
||||||
OpWeightMsgUnjail = "op_weight_msg_unjail"
|
|
||||||
)
|
|
||||||
@@ -1,122 +0,0 @@
|
|||||||
package app
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
|
|
||||||
|
|
||||||
"github.com/CosmWasm/wasmd/x/wasm"
|
|
||||||
"github.com/cosmos/cosmos-sdk/simapp"
|
|
||||||
simtypes "github.com/cosmos/cosmos-sdk/types/simulation"
|
|
||||||
"github.com/cosmos/cosmos-sdk/x/simulation"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Profile with:
|
|
||||||
// /usr/local/go/bin/go test -benchmem -run=^$ github.com/cosmos/cosmos-sdk/simapp -bench ^BenchmarkFullAppSimulation$ -Commit=true -cpuprofile cpu.out
|
|
||||||
func BenchmarkFullAppSimulation(b *testing.B) {
|
|
||||||
config, db, dir, logger, _, err := simapp.SetupSimulation("goleveldb-app-sim", "Simulation")
|
|
||||||
if err != nil {
|
|
||||||
b.Fatalf("simulation setup failed: %s", err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
defer func() {
|
|
||||||
db.Close()
|
|
||||||
err = os.RemoveAll(dir)
|
|
||||||
if err != nil {
|
|
||||||
b.Fatal(err)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
app := NewWasmApp(logger, db, nil, true, map[int64]bool{}, "", simapp.FlagPeriodValue, wasm.EnableAllProposals, EmptyAppOptions{}, interBlockCacheOpt())
|
|
||||||
|
|
||||||
// run randomized simulation
|
|
||||||
_, simParams, simErr := simulation.SimulateFromSeed(
|
|
||||||
b,
|
|
||||||
os.Stdout,
|
|
||||||
app.BaseApp,
|
|
||||||
simapp.AppStateFn(app.appCodec, app.SimulationManager()),
|
|
||||||
simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1
|
|
||||||
simapp.SimulationOperations(app, app.appCodec, config),
|
|
||||||
app.ModuleAccountAddrs(),
|
|
||||||
config,
|
|
||||||
app.appCodec,
|
|
||||||
)
|
|
||||||
|
|
||||||
// export state and simParams before the simulation error is checked
|
|
||||||
if err = simapp.CheckExportSimulation(app, config, simParams); err != nil {
|
|
||||||
b.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if simErr != nil {
|
|
||||||
b.Fatal(simErr)
|
|
||||||
}
|
|
||||||
|
|
||||||
if config.Commit {
|
|
||||||
simapp.PrintStats(db)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func BenchmarkInvariants(b *testing.B) {
|
|
||||||
config, db, dir, logger, _, err := simapp.SetupSimulation("leveldb-app-invariant-bench", "Simulation")
|
|
||||||
if err != nil {
|
|
||||||
b.Fatalf("simulation setup failed: %s", err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
config.AllInvariants = false
|
|
||||||
|
|
||||||
defer func() {
|
|
||||||
db.Close()
|
|
||||||
err = os.RemoveAll(dir)
|
|
||||||
if err != nil {
|
|
||||||
b.Fatal(err)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
app := NewWasmApp(logger, db, nil, true, map[int64]bool{}, "", simapp.FlagPeriodValue, wasm.EnableAllProposals, EmptyAppOptions{}, interBlockCacheOpt())
|
|
||||||
|
|
||||||
// run randomized simulation
|
|
||||||
_, simParams, simErr := simulation.SimulateFromSeed(
|
|
||||||
b,
|
|
||||||
os.Stdout,
|
|
||||||
app.BaseApp,
|
|
||||||
simapp.AppStateFn(app.appCodec, app.SimulationManager()),
|
|
||||||
simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1
|
|
||||||
simapp.SimulationOperations(app, app.appCodec, config),
|
|
||||||
app.ModuleAccountAddrs(),
|
|
||||||
config,
|
|
||||||
app.appCodec,
|
|
||||||
)
|
|
||||||
|
|
||||||
// export state and simParams before the simulation error is checked
|
|
||||||
if err = simapp.CheckExportSimulation(app, config, simParams); err != nil {
|
|
||||||
b.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if simErr != nil {
|
|
||||||
b.Fatal(simErr)
|
|
||||||
}
|
|
||||||
|
|
||||||
if config.Commit {
|
|
||||||
simapp.PrintStats(db)
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx := app.NewContext(true, tmproto.Header{Height: app.LastBlockHeight() + 1})
|
|
||||||
|
|
||||||
// 3. Benchmark each invariant separately
|
|
||||||
//
|
|
||||||
// NOTE: We use the crisis keeper as it has all the invariants registered with
|
|
||||||
// their respective metadata which makes it useful for testing/benchmarking.
|
|
||||||
for _, cr := range app.crisisKeeper.Routes() {
|
|
||||||
cr := cr
|
|
||||||
b.Run(fmt.Sprintf("%s/%s", cr.ModuleName, cr.Route), func(b *testing.B) {
|
|
||||||
if res, stop := cr.Invar(ctx); stop {
|
|
||||||
b.Fatalf(
|
|
||||||
"broken invariant at block %d of %d\n%s",
|
|
||||||
ctx.BlockHeight()-1, config.NumBlocks, res,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
338
app/sim_test.go
338
app/sim_test.go
@@ -1,338 +0,0 @@
|
|||||||
package app
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
|
||||||
"math/rand"
|
|
||||||
"os"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"github.com/CosmWasm/wasmd/x/wasm"
|
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
abci "github.com/tendermint/tendermint/abci/types"
|
|
||||||
"github.com/tendermint/tendermint/libs/log"
|
|
||||||
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
|
|
||||||
dbm "github.com/tendermint/tm-db"
|
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/baseapp"
|
|
||||||
"github.com/cosmos/cosmos-sdk/simapp"
|
|
||||||
"github.com/cosmos/cosmos-sdk/simapp/helpers"
|
|
||||||
"github.com/cosmos/cosmos-sdk/store"
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
||||||
simtypes "github.com/cosmos/cosmos-sdk/types/simulation"
|
|
||||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
|
||||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
|
||||||
capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types"
|
|
||||||
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
|
|
||||||
evidencetypes "github.com/cosmos/cosmos-sdk/x/evidence/types"
|
|
||||||
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
|
|
||||||
ibctransfertypes "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/types"
|
|
||||||
ibchost "github.com/cosmos/cosmos-sdk/x/ibc/core/24-host"
|
|
||||||
minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
|
|
||||||
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
|
|
||||||
"github.com/cosmos/cosmos-sdk/x/simulation"
|
|
||||||
slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types"
|
|
||||||
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Get flags every time the simulator is run
|
|
||||||
func init() {
|
|
||||||
simapp.GetSimulatorFlags()
|
|
||||||
}
|
|
||||||
|
|
||||||
type StoreKeysPrefixes struct {
|
|
||||||
A sdk.StoreKey
|
|
||||||
B sdk.StoreKey
|
|
||||||
Prefixes [][]byte
|
|
||||||
}
|
|
||||||
|
|
||||||
// fauxMerkleModeOpt returns a BaseApp option to use a dbStoreAdapter instead of
|
|
||||||
// an IAVLStore for faster simulation speed.
|
|
||||||
func fauxMerkleModeOpt(bapp *baseapp.BaseApp) {
|
|
||||||
bapp.SetFauxMerkleMode()
|
|
||||||
}
|
|
||||||
|
|
||||||
// interBlockCacheOpt returns a BaseApp option function that sets the persistent
|
|
||||||
// inter-block write-through cache.
|
|
||||||
func interBlockCacheOpt() func(*baseapp.BaseApp) {
|
|
||||||
return baseapp.SetInterBlockCache(store.NewCommitKVStoreCacheManager())
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestFullAppSimulation(t *testing.T) {
|
|
||||||
config, db, dir, logger, skip, err := simapp.SetupSimulation("leveldb-app-sim", "Simulation")
|
|
||||||
if skip {
|
|
||||||
t.Skip("skipping application simulation")
|
|
||||||
}
|
|
||||||
require.NoError(t, err, "simulation setup failed")
|
|
||||||
|
|
||||||
defer func() {
|
|
||||||
db.Close()
|
|
||||||
require.NoError(t, os.RemoveAll(dir))
|
|
||||||
}()
|
|
||||||
|
|
||||||
app := NewWasmApp(logger, db, nil, true, map[int64]bool{}, "", simapp.FlagPeriodValue, wasm.EnableAllProposals, EmptyAppOptions{}, fauxMerkleModeOpt)
|
|
||||||
require.Equal(t, appName, app.Name())
|
|
||||||
|
|
||||||
// run randomized simulation
|
|
||||||
_, simParams, simErr := simulation.SimulateFromSeed(
|
|
||||||
t,
|
|
||||||
os.Stdout,
|
|
||||||
app.BaseApp,
|
|
||||||
simapp.AppStateFn(app.appCodec, app.SimulationManager()),
|
|
||||||
simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1
|
|
||||||
simapp.SimulationOperations(app, app.appCodec, config),
|
|
||||||
app.ModuleAccountAddrs(),
|
|
||||||
config,
|
|
||||||
app.appCodec,
|
|
||||||
)
|
|
||||||
|
|
||||||
// export state and simParams before the simulation error is checked
|
|
||||||
err = simapp.CheckExportSimulation(app, config, simParams)
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.NoError(t, simErr)
|
|
||||||
|
|
||||||
if config.Commit {
|
|
||||||
simapp.PrintStats(db)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestAppImportExport(t *testing.T) {
|
|
||||||
config, db, dir, logger, skip, err := simapp.SetupSimulation("leveldb-app-sim", "Simulation")
|
|
||||||
if skip {
|
|
||||||
t.Skip("skipping application import/export simulation")
|
|
||||||
}
|
|
||||||
require.NoError(t, err, "simulation setup failed")
|
|
||||||
|
|
||||||
defer func() {
|
|
||||||
db.Close()
|
|
||||||
require.NoError(t, os.RemoveAll(dir))
|
|
||||||
}()
|
|
||||||
|
|
||||||
app := NewWasmApp(logger, db, nil, true, map[int64]bool{}, "", simapp.FlagPeriodValue, wasm.EnableAllProposals, EmptyAppOptions{}, fauxMerkleModeOpt)
|
|
||||||
require.Equal(t, appName, app.Name())
|
|
||||||
|
|
||||||
// Run randomized simulation
|
|
||||||
_, simParams, simErr := simulation.SimulateFromSeed(
|
|
||||||
t,
|
|
||||||
os.Stdout,
|
|
||||||
app.BaseApp,
|
|
||||||
simapp.AppStateFn(app.appCodec, app.SimulationManager()),
|
|
||||||
simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1
|
|
||||||
simapp.SimulationOperations(app, app.appCodec, config),
|
|
||||||
app.ModuleAccountAddrs(),
|
|
||||||
config,
|
|
||||||
app.appCodec,
|
|
||||||
)
|
|
||||||
|
|
||||||
// export state and simParams before the simulation error is checked
|
|
||||||
err = simapp.CheckExportSimulation(app, config, simParams)
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.NoError(t, simErr)
|
|
||||||
|
|
||||||
if config.Commit {
|
|
||||||
simapp.PrintStats(db)
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Printf("exporting genesis...\n")
|
|
||||||
|
|
||||||
exported, err := app.ExportAppStateAndValidators(false, []string{})
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
fmt.Printf("importing genesis...\n")
|
|
||||||
|
|
||||||
_, newDB, newDir, _, _, err := simapp.SetupSimulation("leveldb-app-sim-2", "Simulation-2")
|
|
||||||
require.NoError(t, err, "simulation setup failed")
|
|
||||||
|
|
||||||
defer func() {
|
|
||||||
newDB.Close()
|
|
||||||
require.NoError(t, os.RemoveAll(newDir))
|
|
||||||
}()
|
|
||||||
|
|
||||||
newApp := NewWasmApp(log.NewNopLogger(), newDB, nil, true, map[int64]bool{}, "", simapp.FlagPeriodValue, wasm.EnableAllProposals, EmptyAppOptions{}, fauxMerkleModeOpt)
|
|
||||||
require.Equal(t, appName, newApp.Name())
|
|
||||||
|
|
||||||
var genesisState GenesisState
|
|
||||||
err = json.Unmarshal(exported.AppState, &genesisState)
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
ctxA := app.NewContext(true, tmproto.Header{Height: app.LastBlockHeight()})
|
|
||||||
ctxB := newApp.NewContext(true, tmproto.Header{Height: app.LastBlockHeight()})
|
|
||||||
newApp.mm.InitGenesis(ctxB, app.appCodec, genesisState)
|
|
||||||
newApp.StoreConsensusParams(ctxB, exported.ConsensusParams)
|
|
||||||
|
|
||||||
fmt.Printf("comparing stores...\n")
|
|
||||||
|
|
||||||
storeKeysPrefixes := []StoreKeysPrefixes{
|
|
||||||
{app.keys[authtypes.StoreKey], newApp.keys[authtypes.StoreKey], [][]byte{}},
|
|
||||||
{app.keys[stakingtypes.StoreKey], newApp.keys[stakingtypes.StoreKey],
|
|
||||||
[][]byte{
|
|
||||||
stakingtypes.UnbondingQueueKey, stakingtypes.RedelegationQueueKey, stakingtypes.ValidatorQueueKey,
|
|
||||||
stakingtypes.HistoricalInfoKey,
|
|
||||||
}}, // ordering may change but it doesn't matter
|
|
||||||
{app.keys[slashingtypes.StoreKey], newApp.keys[slashingtypes.StoreKey], [][]byte{}},
|
|
||||||
{app.keys[minttypes.StoreKey], newApp.keys[minttypes.StoreKey], [][]byte{}},
|
|
||||||
{app.keys[distrtypes.StoreKey], newApp.keys[distrtypes.StoreKey], [][]byte{}},
|
|
||||||
{app.keys[banktypes.StoreKey], newApp.keys[banktypes.StoreKey], [][]byte{banktypes.BalancesPrefix}},
|
|
||||||
{app.keys[paramtypes.StoreKey], newApp.keys[paramtypes.StoreKey], [][]byte{}},
|
|
||||||
{app.keys[govtypes.StoreKey], newApp.keys[govtypes.StoreKey], [][]byte{}},
|
|
||||||
{app.keys[evidencetypes.StoreKey], newApp.keys[evidencetypes.StoreKey], [][]byte{}},
|
|
||||||
{app.keys[capabilitytypes.StoreKey], newApp.keys[capabilitytypes.StoreKey], [][]byte{}},
|
|
||||||
{app.keys[ibchost.StoreKey], newApp.keys[ibchost.StoreKey], [][]byte{}},
|
|
||||||
{app.keys[ibctransfertypes.StoreKey], newApp.keys[ibctransfertypes.StoreKey], [][]byte{}},
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, skp := range storeKeysPrefixes {
|
|
||||||
storeA := ctxA.KVStore(skp.A)
|
|
||||||
storeB := ctxB.KVStore(skp.B)
|
|
||||||
|
|
||||||
failedKVAs, failedKVBs := sdk.DiffKVStores(storeA, storeB, skp.Prefixes)
|
|
||||||
require.Equal(t, len(failedKVAs), len(failedKVBs), "unequal sets of key-values to compare")
|
|
||||||
|
|
||||||
fmt.Printf("compared %d different key/value pairs between %s and %s\n", len(failedKVAs), skp.A, skp.B)
|
|
||||||
require.Equal(t, len(failedKVAs), 0, simapp.GetSimulationLog(skp.A.Name(), app.SimulationManager().StoreDecoders, failedKVAs, failedKVBs))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestAppSimulationAfterImport(t *testing.T) {
|
|
||||||
config, db, dir, logger, skip, err := simapp.SetupSimulation("leveldb-app-sim", "Simulation")
|
|
||||||
if skip {
|
|
||||||
t.Skip("skipping application simulation after import")
|
|
||||||
}
|
|
||||||
require.NoError(t, err, "simulation setup failed")
|
|
||||||
|
|
||||||
defer func() {
|
|
||||||
db.Close()
|
|
||||||
require.NoError(t, os.RemoveAll(dir))
|
|
||||||
}()
|
|
||||||
|
|
||||||
app := NewWasmApp(logger, db, nil, true, map[int64]bool{}, "", simapp.FlagPeriodValue, wasm.EnableAllProposals, EmptyAppOptions{}, fauxMerkleModeOpt)
|
|
||||||
require.Equal(t, appName, app.Name())
|
|
||||||
|
|
||||||
// Run randomized simulation
|
|
||||||
stopEarly, simParams, simErr := simulation.SimulateFromSeed(
|
|
||||||
t,
|
|
||||||
os.Stdout,
|
|
||||||
app.BaseApp,
|
|
||||||
simapp.AppStateFn(app.appCodec, app.SimulationManager()),
|
|
||||||
simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1
|
|
||||||
simapp.SimulationOperations(app, app.appCodec, config),
|
|
||||||
app.ModuleAccountAddrs(),
|
|
||||||
config,
|
|
||||||
app.appCodec,
|
|
||||||
)
|
|
||||||
|
|
||||||
// export state and simParams before the simulation error is checked
|
|
||||||
err = simapp.CheckExportSimulation(app, config, simParams)
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.NoError(t, simErr)
|
|
||||||
|
|
||||||
if config.Commit {
|
|
||||||
simapp.PrintStats(db)
|
|
||||||
}
|
|
||||||
|
|
||||||
if stopEarly {
|
|
||||||
fmt.Println("can't export or import a zero-validator genesis, exiting test...")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Printf("exporting genesis...\n")
|
|
||||||
|
|
||||||
exported, err := app.ExportAppStateAndValidators(true, []string{})
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
fmt.Printf("importing genesis...\n")
|
|
||||||
|
|
||||||
_, newDB, newDir, _, _, err := simapp.SetupSimulation("leveldb-app-sim-2", "Simulation-2")
|
|
||||||
require.NoError(t, err, "simulation setup failed")
|
|
||||||
|
|
||||||
defer func() {
|
|
||||||
newDB.Close()
|
|
||||||
require.NoError(t, os.RemoveAll(newDir))
|
|
||||||
}()
|
|
||||||
|
|
||||||
newApp := NewWasmApp(log.NewNopLogger(), newDB, nil, true, map[int64]bool{}, "", simapp.FlagPeriodValue, wasm.EnableAllProposals, EmptyAppOptions{}, fauxMerkleModeOpt)
|
|
||||||
require.Equal(t, appName, newApp.Name())
|
|
||||||
|
|
||||||
newApp.InitChain(abci.RequestInitChain{
|
|
||||||
AppStateBytes: exported.AppState,
|
|
||||||
})
|
|
||||||
|
|
||||||
_, _, err = simulation.SimulateFromSeed(
|
|
||||||
t,
|
|
||||||
os.Stdout,
|
|
||||||
newApp.BaseApp,
|
|
||||||
simapp.AppStateFn(app.appCodec, app.SimulationManager()),
|
|
||||||
simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1
|
|
||||||
simapp.SimulationOperations(newApp, newApp.appCodec, config),
|
|
||||||
newApp.ModuleAccountAddrs(),
|
|
||||||
config,
|
|
||||||
app.appCodec,
|
|
||||||
)
|
|
||||||
require.NoError(t, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestAppStateDeterminism(t *testing.T) {
|
|
||||||
if !simapp.FlagEnabledValue {
|
|
||||||
t.Skip("skipping application simulation")
|
|
||||||
}
|
|
||||||
|
|
||||||
config := simapp.NewConfigFromFlags()
|
|
||||||
config.InitialBlockHeight = 1
|
|
||||||
config.ExportParamsPath = ""
|
|
||||||
config.OnOperation = false
|
|
||||||
config.AllInvariants = false
|
|
||||||
config.ChainID = helpers.SimAppChainID
|
|
||||||
|
|
||||||
numSeeds := 3
|
|
||||||
numTimesToRunPerSeed := 5
|
|
||||||
appHashList := make([]json.RawMessage, numTimesToRunPerSeed)
|
|
||||||
|
|
||||||
for i := 0; i < numSeeds; i++ {
|
|
||||||
config.Seed = rand.Int63()
|
|
||||||
|
|
||||||
for j := 0; j < numTimesToRunPerSeed; j++ {
|
|
||||||
var logger log.Logger
|
|
||||||
if simapp.FlagVerboseValue {
|
|
||||||
logger = log.TestingLogger()
|
|
||||||
} else {
|
|
||||||
logger = log.NewNopLogger()
|
|
||||||
}
|
|
||||||
|
|
||||||
db := dbm.NewMemDB()
|
|
||||||
|
|
||||||
app := NewWasmApp(logger, db, nil, true, map[int64]bool{}, "", simapp.FlagPeriodValue, wasm.EnableAllProposals, EmptyAppOptions{}, interBlockCacheOpt())
|
|
||||||
|
|
||||||
fmt.Printf(
|
|
||||||
"running non-determinism simulation; seed %d: %d/%d, attempt: %d/%d\n",
|
|
||||||
config.Seed, i+1, numSeeds, j+1, numTimesToRunPerSeed,
|
|
||||||
)
|
|
||||||
|
|
||||||
_, _, err := simulation.SimulateFromSeed(
|
|
||||||
t,
|
|
||||||
os.Stdout,
|
|
||||||
app.BaseApp,
|
|
||||||
simapp.AppStateFn(app.appCodec, app.SimulationManager()),
|
|
||||||
simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1
|
|
||||||
simapp.SimulationOperations(app, app.appCodec, config),
|
|
||||||
app.ModuleAccountAddrs(),
|
|
||||||
config,
|
|
||||||
app.appCodec,
|
|
||||||
)
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
if config.Commit {
|
|
||||||
simapp.PrintStats(db)
|
|
||||||
}
|
|
||||||
|
|
||||||
appHash := app.LastCommitID().Hash
|
|
||||||
appHashList[j] = appHash
|
|
||||||
|
|
||||||
if j != 0 {
|
|
||||||
require.Equal(
|
|
||||||
t, string(appHashList[0]), string(appHashList[j]),
|
|
||||||
"non-determinism in seed %d: %d/%d, attempt: %d/%d\n", config.Seed, i+1, numSeeds, j+1, numTimesToRunPerSeed,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
39
cmd/wasmd/execute.go
Normal file
39
cmd/wasmd/execute.go
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/rs/zerolog"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
tmcfg "github.com/tendermint/tendermint/config"
|
||||||
|
tmcli "github.com/tendermint/tendermint/libs/cli"
|
||||||
|
|
||||||
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
|
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||||
|
"github.com/cosmos/cosmos-sdk/server"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Execute executes the root command of an application. It handles creating a
|
||||||
|
// server context object with the appropriate server and client objects injected
|
||||||
|
// into the underlying stdlib Context. It also handles adding core CLI flags,
|
||||||
|
// specifically the logging flags. It returns an error upon execution failure.
|
||||||
|
func Execute(rootCmd *cobra.Command, defaultHome string) error {
|
||||||
|
// NOTE: file copied from cosmos-sdk/server/cmd
|
||||||
|
|
||||||
|
// Create and set a client.Context on the command's Context. During the pre-run
|
||||||
|
// of the root command, a default initialized client.Context is provided to
|
||||||
|
// seed child command execution with values such as AccountRetriver, Keyring,
|
||||||
|
// and a Tendermint RPC. This requires the use of a pointer reference when
|
||||||
|
// getting and setting the client.Context. Ideally, we utilize
|
||||||
|
// https://github.com/spf13/cobra/pull/1118.
|
||||||
|
srvCtx := server.NewDefaultContext()
|
||||||
|
ctx := context.Background()
|
||||||
|
ctx = context.WithValue(ctx, client.ClientContextKey, &client.Context{})
|
||||||
|
ctx = context.WithValue(ctx, server.ServerContextKey, srvCtx)
|
||||||
|
|
||||||
|
rootCmd.PersistentFlags().String(flags.FlagLogLevel, zerolog.InfoLevel.String(), "The logging level (trace|debug|info|warn|error|fatal|panic)")
|
||||||
|
rootCmd.PersistentFlags().String(flags.FlagLogFormat, tmcfg.LogFormatPlain, "The logging format (json|plain)")
|
||||||
|
|
||||||
|
executor := tmcli.PrepareBaseCmd(rootCmd, "WM", defaultHome)
|
||||||
|
return executor.ExecuteContext(ctx)
|
||||||
|
}
|
||||||
@@ -67,7 +67,7 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa
|
|||||||
addr = info.GetAddress()
|
addr = info.GetAddress()
|
||||||
}
|
}
|
||||||
|
|
||||||
coins, err := sdk.ParseCoins(args[1])
|
coins, err := sdk.ParseCoinsNormalized(args[1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to parse coins: %w", err)
|
return fmt.Errorf("failed to parse coins: %w", err)
|
||||||
}
|
}
|
||||||
@@ -76,7 +76,7 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa
|
|||||||
vestingEnd, _ := cmd.Flags().GetInt64(flagVestingEnd)
|
vestingEnd, _ := cmd.Flags().GetInt64(flagVestingEnd)
|
||||||
vestingAmtStr, _ := cmd.Flags().GetString(flagVestingAmt)
|
vestingAmtStr, _ := cmd.Flags().GetString(flagVestingAmt)
|
||||||
|
|
||||||
vestingAmt, err := sdk.ParseCoins(vestingAmtStr)
|
vestingAmt, err := sdk.ParseCoinsNormalized(vestingAmtStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to parse vesting amount: %w", err)
|
return fmt.Errorf("failed to parse vesting amount: %w", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,17 +2,21 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
"github.com/CosmWasm/wasmd/app"
|
||||||
|
"github.com/cosmos/cosmos-sdk/server"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
rootCmd, _ := NewRootCmd()
|
rootCmd, _ := NewRootCmd()
|
||||||
if err := Execute(rootCmd); err != nil {
|
|
||||||
// TODO: enable this for 0.41
|
if err := Execute(rootCmd, app.DefaultNodeHome); err != nil {
|
||||||
//switch e := err.(type) {
|
switch e := err.(type) {
|
||||||
//case server.ErrorCode:
|
case server.ErrorCode:
|
||||||
// os.Exit(e.Code)
|
os.Exit(e.Code)
|
||||||
//default:
|
|
||||||
os.Exit(1)
|
default:
|
||||||
//}
|
os.Exit(1)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
"errors"
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
@@ -37,7 +36,7 @@ import (
|
|||||||
genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli"
|
genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewRootCmd creates a new root command for simd. It is called once in the
|
// NewRootCmd creates a new root command for wasmd. It is called once in the
|
||||||
// main function.
|
// main function.
|
||||||
func NewRootCmd() (*cobra.Command, app.EncodingConfig) {
|
func NewRootCmd() (*cobra.Command, app.EncodingConfig) {
|
||||||
encodingConfig := app.MakeEncodingConfig()
|
encodingConfig := app.MakeEncodingConfig()
|
||||||
@@ -75,25 +74,6 @@ func NewRootCmd() (*cobra.Command, app.EncodingConfig) {
|
|||||||
return rootCmd, encodingConfig
|
return rootCmd, encodingConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
// Execute executes the root command.
|
|
||||||
func Execute(rootCmd *cobra.Command) error {
|
|
||||||
// Create and set a client.Context on the command's Context. During the pre-run
|
|
||||||
// of the root command, a default initialized client.Context is provided to
|
|
||||||
// seed child command execution with values such as AccountRetriver, Keyring,
|
|
||||||
// and a Tendermint RPC. This requires the use of a pointer reference when
|
|
||||||
// getting and setting the client.Context. Ideally, we utilize
|
|
||||||
// https://github.com/spf13/cobra/pull/1118.
|
|
||||||
srvCtx := server.NewDefaultContext()
|
|
||||||
ctx := context.Background()
|
|
||||||
ctx = context.WithValue(ctx, client.ClientContextKey, &client.Context{})
|
|
||||||
ctx = context.WithValue(ctx, server.ServerContextKey, srvCtx)
|
|
||||||
|
|
||||||
rootCmd.PersistentFlags().String("log_level", srvCtx.Config.LogLevel, "The logging level in the format of <module>:<level>,...")
|
|
||||||
|
|
||||||
executor := tmcli.PrepareBaseCmd(rootCmd, "WM", app.DefaultNodeHome)
|
|
||||||
return executor.ExecuteContext(ctx)
|
|
||||||
}
|
|
||||||
|
|
||||||
func initRootCmd(rootCmd *cobra.Command, encodingConfig app.EncodingConfig) {
|
func initRootCmd(rootCmd *cobra.Command, encodingConfig app.EncodingConfig) {
|
||||||
authclient.Codec = encodingConfig.Marshaler
|
authclient.Codec = encodingConfig.Marshaler
|
||||||
|
|
||||||
@@ -102,7 +82,7 @@ func initRootCmd(rootCmd *cobra.Command, encodingConfig app.EncodingConfig) {
|
|||||||
genutilcli.CollectGenTxsCmd(banktypes.GenesisBalancesIterator{}, app.DefaultNodeHome),
|
genutilcli.CollectGenTxsCmd(banktypes.GenesisBalancesIterator{}, app.DefaultNodeHome),
|
||||||
genutilcli.MigrateGenesisCmd(),
|
genutilcli.MigrateGenesisCmd(),
|
||||||
genutilcli.GenTxCmd(app.ModuleBasics, encodingConfig.TxConfig, banktypes.GenesisBalancesIterator{}, app.DefaultNodeHome),
|
genutilcli.GenTxCmd(app.ModuleBasics, encodingConfig.TxConfig, banktypes.GenesisBalancesIterator{}, app.DefaultNodeHome),
|
||||||
genutilcli.ValidateGenesisCmd(app.ModuleBasics, encodingConfig.TxConfig),
|
genutilcli.ValidateGenesisCmd(app.ModuleBasics),
|
||||||
AddGenesisAccountCmd(app.DefaultNodeHome),
|
AddGenesisAccountCmd(app.DefaultNodeHome),
|
||||||
tmcli.NewCompletionCmd(rootCmd, true),
|
tmcli.NewCompletionCmd(rootCmd, true),
|
||||||
// testnetCmd(app.ModuleBasics, banktypes.GenesisBalancesIterator{}),
|
// testnetCmd(app.ModuleBasics, banktypes.GenesisBalancesIterator{}),
|
||||||
@@ -141,7 +121,6 @@ func queryCommand() *cobra.Command {
|
|||||||
rpc.BlockCommand(),
|
rpc.BlockCommand(),
|
||||||
authcmd.QueryTxsByEventsCmd(),
|
authcmd.QueryTxsByEventsCmd(),
|
||||||
authcmd.QueryTxCmd(),
|
authcmd.QueryTxCmd(),
|
||||||
flags.LineBreak,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
app.ModuleBasics.AddQueryCommands(cmd)
|
app.ModuleBasics.AddQueryCommands(cmd)
|
||||||
|
|||||||
@@ -1,397 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
// DONTCOVER
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bufio"
|
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
|
||||||
"net"
|
|
||||||
"os"
|
|
||||||
"path/filepath"
|
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
|
||||||
tmconfig "github.com/tendermint/tendermint/config"
|
|
||||||
"github.com/tendermint/tendermint/crypto"
|
|
||||||
tmos "github.com/tendermint/tendermint/libs/os"
|
|
||||||
tmrand "github.com/tendermint/tendermint/libs/rand"
|
|
||||||
"github.com/tendermint/tendermint/types"
|
|
||||||
tmtime "github.com/tendermint/tendermint/types/time"
|
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
|
||||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
|
||||||
"github.com/cosmos/cosmos-sdk/client/tx"
|
|
||||||
"github.com/cosmos/cosmos-sdk/crypto/hd"
|
|
||||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
|
||||||
"github.com/cosmos/cosmos-sdk/server"
|
|
||||||
srvconfig "github.com/cosmos/cosmos-sdk/server/config"
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
||||||
"github.com/cosmos/cosmos-sdk/types/module"
|
|
||||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
|
||||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
|
||||||
"github.com/cosmos/cosmos-sdk/x/genutil"
|
|
||||||
genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types"
|
|
||||||
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
flagNodeDirPrefix = "node-dir-prefix"
|
|
||||||
flagNumValidators = "v"
|
|
||||||
flagOutputDir = "output-dir"
|
|
||||||
flagNodeDaemonHome = "node-daemon-home"
|
|
||||||
flagStartingIPAddress = "starting-ip-address"
|
|
||||||
)
|
|
||||||
|
|
||||||
// get cmd to initialize all files for tendermint testnet and application
|
|
||||||
func testnetCmd(mbm module.BasicManager, genBalIterator banktypes.GenesisBalancesIterator) *cobra.Command {
|
|
||||||
cmd := &cobra.Command{
|
|
||||||
Use: "testnet",
|
|
||||||
Short: "Initialize files for a testnet",
|
|
||||||
Long: `testnet will create "v" number of directories and populate each with
|
|
||||||
necessary files (private validator, genesis, config, etc.).
|
|
||||||
|
|
||||||
Note, strict routability for addresses is turned off in the config file.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
wasmd testnet --v 4 --output-dir ./output --starting-ip-address 192.168.10.2
|
|
||||||
`,
|
|
||||||
RunE: func(cmd *cobra.Command, _ []string) error {
|
|
||||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
|
||||||
|
|
||||||
serverCtx := server.GetServerContextFromCmd(cmd)
|
|
||||||
config := serverCtx.Config
|
|
||||||
|
|
||||||
outputDir, _ := cmd.Flags().GetString(flagOutputDir)
|
|
||||||
keyringBackend, _ := cmd.Flags().GetString(flags.FlagKeyringBackend)
|
|
||||||
chainID, _ := cmd.Flags().GetString(flags.FlagChainID)
|
|
||||||
minGasPrices, _ := cmd.Flags().GetString(server.FlagMinGasPrices)
|
|
||||||
nodeDirPrefix, _ := cmd.Flags().GetString(flagNodeDirPrefix)
|
|
||||||
nodeDaemonHome, _ := cmd.Flags().GetString(flagNodeDaemonHome)
|
|
||||||
startingIPAddress, _ := cmd.Flags().GetString(flagStartingIPAddress)
|
|
||||||
numValidators, _ := cmd.Flags().GetInt(flagNumValidators)
|
|
||||||
algo, _ := cmd.Flags().GetString(flags.FlagKeyAlgorithm)
|
|
||||||
|
|
||||||
return InitTestnet(
|
|
||||||
clientCtx, cmd, config, mbm, genBalIterator, outputDir, chainID, minGasPrices,
|
|
||||||
nodeDirPrefix, nodeDaemonHome, startingIPAddress, keyringBackend, algo, numValidators,
|
|
||||||
)
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd.Flags().Int(flagNumValidators, 4, "Number of validators to initialize the testnet with")
|
|
||||||
cmd.Flags().StringP(flagOutputDir, "o", "./mytestnet", "Directory to store initialization data for the testnet")
|
|
||||||
cmd.Flags().String(flagNodeDirPrefix, "node", "Prefix the directory name for each node with (node results in node0, node1, ...)")
|
|
||||||
cmd.Flags().String(flagNodeDaemonHome, "simd", "Home directory of the node's daemon configuration")
|
|
||||||
cmd.Flags().String(flagStartingIPAddress, "192.168.0.1", "Starting IP address (192.168.0.1 results in persistent peers list ID0@192.168.0.1:46656, ID1@192.168.0.2:46656, ...)")
|
|
||||||
cmd.Flags().String(flags.FlagChainID, "", "genesis file chain-id, if left blank will be randomly created")
|
|
||||||
cmd.Flags().String(server.FlagMinGasPrices, fmt.Sprintf("0.000006%s", sdk.DefaultBondDenom), "Minimum gas prices to accept for transactions; All fees in a tx must meet this minimum (e.g. 0.01photino,0.001stake)")
|
|
||||||
cmd.Flags().String(flags.FlagKeyringBackend, flags.DefaultKeyringBackend, "Select keyring's backend (os|file|test)")
|
|
||||||
cmd.Flags().String(flags.FlagKeyAlgorithm, string(hd.Secp256k1Type), "Key signing algorithm to generate keys for")
|
|
||||||
|
|
||||||
return cmd
|
|
||||||
}
|
|
||||||
|
|
||||||
const nodeDirPerm = 0755
|
|
||||||
|
|
||||||
// Initialize the testnet
|
|
||||||
func InitTestnet(
|
|
||||||
clientCtx client.Context,
|
|
||||||
cmd *cobra.Command,
|
|
||||||
nodeConfig *tmconfig.Config,
|
|
||||||
mbm module.BasicManager,
|
|
||||||
genBalIterator banktypes.GenesisBalancesIterator,
|
|
||||||
outputDir,
|
|
||||||
chainID,
|
|
||||||
minGasPrices,
|
|
||||||
nodeDirPrefix,
|
|
||||||
nodeDaemonHome,
|
|
||||||
startingIPAddress,
|
|
||||||
keyringBackend,
|
|
||||||
algoStr string,
|
|
||||||
numValidators int,
|
|
||||||
) error {
|
|
||||||
|
|
||||||
if chainID == "" {
|
|
||||||
chainID = "chain-" + tmrand.NewRand().Str(6)
|
|
||||||
}
|
|
||||||
|
|
||||||
nodeIDs := make([]string, numValidators)
|
|
||||||
valPubKeys := make([]crypto.PubKey, numValidators)
|
|
||||||
|
|
||||||
simappConfig := srvconfig.DefaultConfig()
|
|
||||||
simappConfig.MinGasPrices = minGasPrices
|
|
||||||
simappConfig.API.Enable = true
|
|
||||||
simappConfig.Telemetry.Enabled = true
|
|
||||||
simappConfig.Telemetry.PrometheusRetentionTime = 60
|
|
||||||
simappConfig.Telemetry.EnableHostnameLabel = false
|
|
||||||
simappConfig.Telemetry.GlobalLabels = [][]string{{"chain_id", chainID}}
|
|
||||||
|
|
||||||
var (
|
|
||||||
genAccounts []authtypes.GenesisAccount
|
|
||||||
genBalances []banktypes.Balance
|
|
||||||
genFiles []string
|
|
||||||
)
|
|
||||||
|
|
||||||
inBuf := bufio.NewReader(cmd.InOrStdin())
|
|
||||||
// generate private keys, node IDs, and initial transactions
|
|
||||||
for i := 0; i < numValidators; i++ {
|
|
||||||
nodeDirName := fmt.Sprintf("%s%d", nodeDirPrefix, i)
|
|
||||||
nodeDir := filepath.Join(outputDir, nodeDirName, nodeDaemonHome)
|
|
||||||
gentxsDir := filepath.Join(outputDir, "gentxs")
|
|
||||||
|
|
||||||
nodeConfig.SetRoot(nodeDir)
|
|
||||||
nodeConfig.RPC.ListenAddress = "tcp://0.0.0.0:26657"
|
|
||||||
|
|
||||||
if err := os.MkdirAll(filepath.Join(nodeDir, "config"), nodeDirPerm); err != nil {
|
|
||||||
_ = os.RemoveAll(outputDir)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
nodeConfig.Moniker = nodeDirName
|
|
||||||
|
|
||||||
ip, err := getIP(i, startingIPAddress)
|
|
||||||
if err != nil {
|
|
||||||
_ = os.RemoveAll(outputDir)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
nodeIDs[i], valPubKeys[i], err = genutil.InitializeNodeValidatorFiles(nodeConfig)
|
|
||||||
if err != nil {
|
|
||||||
_ = os.RemoveAll(outputDir)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
memo := fmt.Sprintf("%s@%s:26656", nodeIDs[i], ip)
|
|
||||||
genFiles = append(genFiles, nodeConfig.GenesisFile())
|
|
||||||
|
|
||||||
kb, err := keyring.New(sdk.KeyringServiceName(), keyringBackend, nodeDir, inBuf)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
keyringAlgos, _ := kb.SupportedAlgorithms()
|
|
||||||
algo, err := keyring.NewSigningAlgoFromString(algoStr, keyringAlgos)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
addr, secret, err := server.GenerateSaveCoinKey(kb, nodeDirName, true, algo)
|
|
||||||
if err != nil {
|
|
||||||
_ = os.RemoveAll(outputDir)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
info := map[string]string{"secret": secret}
|
|
||||||
|
|
||||||
cliPrint, err := json.Marshal(info)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// save private key seed words
|
|
||||||
if err := writeFile(fmt.Sprintf("%v.json", "key_seed"), nodeDir, cliPrint); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
accTokens := sdk.TokensFromConsensusPower(1000)
|
|
||||||
accStakingTokens := sdk.TokensFromConsensusPower(500)
|
|
||||||
coins := sdk.Coins{
|
|
||||||
sdk.NewCoin(fmt.Sprintf("%stoken", nodeDirName), accTokens),
|
|
||||||
sdk.NewCoin(sdk.DefaultBondDenom, accStakingTokens),
|
|
||||||
}
|
|
||||||
|
|
||||||
genBalances = append(genBalances, banktypes.Balance{Address: addr.String(), Coins: coins.Sort()})
|
|
||||||
genAccounts = append(genAccounts, authtypes.NewBaseAccount(addr, nil, 0, 0))
|
|
||||||
|
|
||||||
valTokens := sdk.TokensFromConsensusPower(100)
|
|
||||||
createValMsg, err := stakingtypes.NewMsgCreateValidator(
|
|
||||||
sdk.ValAddress(addr),
|
|
||||||
valPubKeys[i],
|
|
||||||
sdk.NewCoin(sdk.DefaultBondDenom, valTokens),
|
|
||||||
stakingtypes.NewDescription(nodeDirName, "", "", "", ""),
|
|
||||||
stakingtypes.NewCommissionRates(sdk.OneDec(), sdk.OneDec(), sdk.OneDec()),
|
|
||||||
sdk.OneInt(),
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
txBuilder := clientCtx.TxConfig.NewTxBuilder()
|
|
||||||
if err := txBuilder.SetMsgs(createValMsg); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
txBuilder.SetMemo(memo)
|
|
||||||
|
|
||||||
txFactory := tx.Factory{}
|
|
||||||
txFactory = txFactory.
|
|
||||||
WithChainID(chainID).
|
|
||||||
WithMemo(memo).
|
|
||||||
WithKeybase(kb).
|
|
||||||
WithTxConfig(clientCtx.TxConfig)
|
|
||||||
|
|
||||||
if err := tx.Sign(txFactory, nodeDirName, txBuilder); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
txBz, err := clientCtx.TxConfig.TxJSONEncoder()(txBuilder.GetTx())
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := writeFile(fmt.Sprintf("%v.json", nodeDirName), gentxsDir, txBz); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
srvconfig.WriteConfigFile(filepath.Join(nodeDir, "config/app.toml"), simappConfig)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := initGenFiles(clientCtx, mbm, chainID, genAccounts, genBalances, genFiles, numValidators); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
err := collectGenFiles(
|
|
||||||
clientCtx, nodeConfig, chainID, nodeIDs, valPubKeys, numValidators,
|
|
||||||
outputDir, nodeDirPrefix, nodeDaemonHome, genBalIterator,
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd.PrintErrf("Successfully initialized %d node directories\n", numValidators)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func initGenFiles(
|
|
||||||
clientCtx client.Context, mbm module.BasicManager, chainID string,
|
|
||||||
genAccounts []authtypes.GenesisAccount, genBalances []banktypes.Balance,
|
|
||||||
genFiles []string, numValidators int,
|
|
||||||
) error {
|
|
||||||
|
|
||||||
appGenState := mbm.DefaultGenesis(clientCtx.JSONMarshaler)
|
|
||||||
|
|
||||||
// set the accounts in the genesis state
|
|
||||||
var authGenState authtypes.GenesisState
|
|
||||||
clientCtx.JSONMarshaler.MustUnmarshalJSON(appGenState[authtypes.ModuleName], &authGenState)
|
|
||||||
|
|
||||||
accounts, err := authtypes.PackAccounts(genAccounts)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
authGenState.Accounts = accounts
|
|
||||||
appGenState[authtypes.ModuleName] = clientCtx.JSONMarshaler.MustMarshalJSON(&authGenState)
|
|
||||||
|
|
||||||
// set the balances in the genesis state
|
|
||||||
var bankGenState banktypes.GenesisState
|
|
||||||
clientCtx.JSONMarshaler.MustUnmarshalJSON(appGenState[banktypes.ModuleName], &bankGenState)
|
|
||||||
|
|
||||||
bankGenState.Balances = genBalances
|
|
||||||
appGenState[banktypes.ModuleName] = clientCtx.JSONMarshaler.MustMarshalJSON(&bankGenState)
|
|
||||||
|
|
||||||
appGenStateJSON, err := json.MarshalIndent(appGenState, "", " ")
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
genDoc := types.GenesisDoc{
|
|
||||||
ChainID: chainID,
|
|
||||||
AppState: appGenStateJSON,
|
|
||||||
Validators: nil,
|
|
||||||
}
|
|
||||||
|
|
||||||
// generate empty genesis files for each validator and save
|
|
||||||
for i := 0; i < numValidators; i++ {
|
|
||||||
if err := genDoc.SaveAs(genFiles[i]); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func collectGenFiles(
|
|
||||||
clientCtx client.Context, nodeConfig *tmconfig.Config, chainID string,
|
|
||||||
nodeIDs []string, valPubKeys []crypto.PubKey, numValidators int,
|
|
||||||
outputDir, nodeDirPrefix, nodeDaemonHome string, genBalIterator banktypes.GenesisBalancesIterator,
|
|
||||||
) error {
|
|
||||||
|
|
||||||
var appState json.RawMessage
|
|
||||||
genTime := tmtime.Now()
|
|
||||||
|
|
||||||
for i := 0; i < numValidators; i++ {
|
|
||||||
nodeDirName := fmt.Sprintf("%s%d", nodeDirPrefix, i)
|
|
||||||
nodeDir := filepath.Join(outputDir, nodeDirName, nodeDaemonHome)
|
|
||||||
gentxsDir := filepath.Join(outputDir, "gentxs")
|
|
||||||
nodeConfig.Moniker = nodeDirName
|
|
||||||
|
|
||||||
nodeConfig.SetRoot(nodeDir)
|
|
||||||
|
|
||||||
nodeID, valPubKey := nodeIDs[i], valPubKeys[i]
|
|
||||||
initCfg := genutiltypes.NewInitConfig(chainID, gentxsDir, nodeID, valPubKey)
|
|
||||||
|
|
||||||
genDoc, err := types.GenesisDocFromFile(nodeConfig.GenesisFile())
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
nodeAppState, err := genutil.GenAppStateFromConfig(clientCtx.JSONMarshaler, clientCtx.TxConfig, nodeConfig, initCfg, *genDoc, genBalIterator)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if appState == nil {
|
|
||||||
// set the canonical application state (they should not differ)
|
|
||||||
appState = nodeAppState
|
|
||||||
}
|
|
||||||
|
|
||||||
genFile := nodeConfig.GenesisFile()
|
|
||||||
|
|
||||||
// overwrite each validator's genesis file to have a canonical genesis time
|
|
||||||
if err := genutil.ExportGenesisFileWithTime(genFile, chainID, nil, appState, genTime); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func getIP(i int, startingIPAddr string) (ip string, err error) {
|
|
||||||
if len(startingIPAddr) == 0 {
|
|
||||||
ip, err = server.ExternalIP()
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
return ip, nil
|
|
||||||
}
|
|
||||||
return calculateIP(startingIPAddr, i)
|
|
||||||
}
|
|
||||||
|
|
||||||
func calculateIP(ip string, i int) (string, error) {
|
|
||||||
ipv4 := net.ParseIP(ip).To4()
|
|
||||||
if ipv4 == nil {
|
|
||||||
return "", fmt.Errorf("%v: non ipv4 address", ip)
|
|
||||||
}
|
|
||||||
|
|
||||||
for j := 0; j < i; j++ {
|
|
||||||
ipv4[3]++
|
|
||||||
}
|
|
||||||
|
|
||||||
return ipv4.String(), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func writeFile(name string, dir string, contents []byte) error {
|
|
||||||
writePath := filepath.Join(dir)
|
|
||||||
file := filepath.Join(writePath, name)
|
|
||||||
|
|
||||||
err := tmos.EnsureDir(writePath, 0755)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
err = tmos.WriteFile(file, contents, 0644)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -eu
|
set -eu
|
||||||
|
|
||||||
wasmd start --rpc.laddr tcp://0.0.0.0:26657 --trace # does not work anymore: --log_level="main:info,state:debug,*:error"
|
wasmd start --rpc.laddr tcp://0.0.0.0:26657 --log_level=info --trace # --trace # does not work anymore: --log_level="main:info,state:debug,*:error"
|
||||||
11
go.mod
11
go.mod
@@ -4,24 +4,25 @@ go 1.15
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/CosmWasm/wasmvm v0.12.0
|
github.com/CosmWasm/wasmvm v0.12.0
|
||||||
github.com/cosmos/cosmos-sdk v0.40.0-rc3
|
github.com/cosmos/cosmos-sdk v0.40.0-rc5
|
||||||
github.com/cosmos/iavl v0.15.0-rc4
|
github.com/cosmos/iavl v0.15.0-rc5
|
||||||
github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b
|
github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b
|
||||||
github.com/gogo/protobuf v1.3.1
|
github.com/gogo/protobuf v1.3.1
|
||||||
github.com/golang/protobuf v1.4.3
|
github.com/golang/protobuf v1.4.3
|
||||||
github.com/google/gofuzz v1.0.0
|
github.com/google/gofuzz v1.0.0
|
||||||
github.com/gorilla/mux v1.8.0
|
github.com/gorilla/mux v1.8.0
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.15.2
|
github.com/grpc-ecosystem/grpc-gateway v1.16.0
|
||||||
github.com/pkg/errors v0.9.1
|
github.com/pkg/errors v0.9.1
|
||||||
github.com/rakyll/statik v0.1.7
|
github.com/rakyll/statik v0.1.7
|
||||||
|
github.com/rs/zerolog v1.20.0
|
||||||
github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa
|
github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa
|
||||||
github.com/spf13/cast v1.3.1
|
github.com/spf13/cast v1.3.1
|
||||||
github.com/spf13/cobra v1.1.1
|
github.com/spf13/cobra v1.1.1
|
||||||
github.com/spf13/pflag v1.0.5
|
github.com/spf13/pflag v1.0.5
|
||||||
github.com/spf13/viper v1.7.1
|
github.com/spf13/viper v1.7.1
|
||||||
github.com/stretchr/testify v1.6.1
|
github.com/stretchr/testify v1.6.1
|
||||||
github.com/tendermint/tendermint v0.34.0-rc6
|
github.com/tendermint/tendermint v0.34.0
|
||||||
github.com/tendermint/tm-db v0.6.2
|
github.com/tendermint/tm-db v0.6.3
|
||||||
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11 // indirect
|
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11 // indirect
|
||||||
golang.org/x/sys v0.0.0-20201211090839-8ad439b19e0f // indirect
|
golang.org/x/sys v0.0.0-20201211090839-8ad439b19e0f // indirect
|
||||||
golang.org/x/text v0.3.4 // indirect
|
golang.org/x/text v0.3.4 // indirect
|
||||||
|
|||||||
38
go.sum
38
go.sum
@@ -104,13 +104,15 @@ github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7
|
|||||||
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||||
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
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/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
||||||
github.com/cosmos/cosmos-sdk v0.40.0-rc3 h1:sS9BZ82dOxXiZPZdfrzSniEAzLLN0oTP5lFVyjnq2x4=
|
github.com/cosmos/cosmos-sdk v0.40.0-rc5 h1:oUuo/9MtPcH8t/I+wgtqAV9Ad7DjiLOT7VMF/9zQNQc=
|
||||||
github.com/cosmos/cosmos-sdk v0.40.0-rc3/go.mod h1:eKgbkQO4FEvC+a1+eyRuL7UgluGK1ad4PufPTpQc6ZA=
|
github.com/cosmos/cosmos-sdk v0.40.0-rc5/go.mod h1:+oR3VJg5puOc6IDdw5MIKdhjXW+HgBzd5zTfGMjDmNQ=
|
||||||
github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d h1:49RLWk1j44Xu4fjHb6JFYmeUnDORVwHNkDxaQ0ctCVU=
|
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/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=
|
||||||
github.com/cosmos/iavl v0.15.0-rc3.0.20201009144442-230e9bdf52cd/go.mod h1:3xOIaNNX19p0QrX0VqWa6voPRoJRGGYtny+DH8NEPvE=
|
github.com/cosmos/iavl v0.15.0-rc3.0.20201009144442-230e9bdf52cd/go.mod h1:3xOIaNNX19p0QrX0VqWa6voPRoJRGGYtny+DH8NEPvE=
|
||||||
github.com/cosmos/iavl v0.15.0-rc4 h1:P1wmET7BueqCzfxsn+BzVkDWDLY9ij2JNwkbIdM7RG8=
|
github.com/cosmos/iavl v0.15.0-rc5 h1:AMKgaAjXwGANWv56NL4q4hV+a0puSkLYD6cCQAv3i44=
|
||||||
github.com/cosmos/iavl v0.15.0-rc4/go.mod h1:5CsecJdh44Uj4vZ6WSPeWq84hNW5BwRI36ZsAbfJvRw=
|
github.com/cosmos/iavl v0.15.0-rc5/go.mod h1:WqoPL9yPTQ85QBMT45OOUzPxG/U/JcJoN7uMjgxke/I=
|
||||||
github.com/cosmos/ledger-cosmos-go v0.11.1 h1:9JIYsGnXP613pb2vPjFeMMjBI5lEDsEaF6oYorTy6J4=
|
github.com/cosmos/ledger-cosmos-go v0.11.1 h1:9JIYsGnXP613pb2vPjFeMMjBI5lEDsEaF6oYorTy6J4=
|
||||||
github.com/cosmos/ledger-cosmos-go v0.11.1/go.mod h1:J8//BsAGTo3OC/vDLjMRFLW6q0WAaXvHnVc7ZmE8iUY=
|
github.com/cosmos/ledger-cosmos-go v0.11.1/go.mod h1:J8//BsAGTo3OC/vDLjMRFLW6q0WAaXvHnVc7ZmE8iUY=
|
||||||
github.com/cosmos/ledger-go v0.9.2 h1:Nnao/dLwaVTk1Q5U9THldpUMMXU94BOTWPddSmVB6pI=
|
github.com/cosmos/ledger-go v0.9.2 h1:Nnao/dLwaVTk1Q5U9THldpUMMXU94BOTWPddSmVB6pI=
|
||||||
@@ -256,14 +258,15 @@ github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/ad
|
|||||||
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
||||||
github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
||||||
github.com/grpc-ecosystem/go-grpc-middleware v1.2.1/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI=
|
github.com/grpc-ecosystem/go-grpc-middleware v1.2.1/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI=
|
||||||
|
github.com/grpc-ecosystem/go-grpc-middleware v1.2.2 h1:FlFbCRLd5Jr4iYXZufAvgWN6Ao0JrI5chLINnUXDDr0=
|
||||||
github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI=
|
github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI=
|
||||||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
|
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.14.7/go.mod h1:oYZKL012gGh6LMyg/xA7Q2yq6j8bu0wa+9w14EEthWU=
|
github.com/grpc-ecosystem/grpc-gateway v1.14.7/go.mod h1:oYZKL012gGh6LMyg/xA7Q2yq6j8bu0wa+9w14EEthWU=
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.15.2 h1:HC+hWRWf+v5zTMPyoaYTKIJih+4sd4XRWmj0qlG87Co=
|
github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.15.2/go.mod h1:vO11I9oWA+KsxmfFQPhLnnIb1VDE24M+pdxZFiuZcA8=
|
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
|
||||||
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU=
|
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU=
|
||||||
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0=
|
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0=
|
||||||
github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s=
|
github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s=
|
||||||
@@ -466,6 +469,8 @@ github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8b
|
|||||||
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
|
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
|
||||||
github.com/prometheus/common v0.14.0 h1:RHRyE8UocrbjU+6UvRzwi6HjiDfxrrBU91TtbKzkGp4=
|
github.com/prometheus/common v0.14.0 h1:RHRyE8UocrbjU+6UvRzwi6HjiDfxrrBU91TtbKzkGp4=
|
||||||
github.com/prometheus/common v0.14.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
|
github.com/prometheus/common v0.14.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
|
||||||
|
github.com/prometheus/common v0.15.0 h1:4fgOnadei3EZvgRwxJ7RMpG1k1pOZth5Pc13tyspaKM=
|
||||||
|
github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
|
||||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||||
@@ -490,6 +495,9 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L
|
|||||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||||
github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik=
|
github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik=
|
||||||
github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
|
github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
|
||||||
|
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
|
||||||
|
github.com/rs/zerolog v1.20.0 h1:38k9hgtUBdxFwE34yS8rTHmHBa4eN16E4DJlv177LNs=
|
||||||
|
github.com/rs/zerolog v1.20.0/go.mod h1:IzD0RJ65iWH0w97OQQebJEvTZYvsCUm9WVLWBQrJRjo=
|
||||||
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
|
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
|
||||||
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
||||||
@@ -564,9 +572,13 @@ github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoM
|
|||||||
github.com/tendermint/tendermint v0.34.0-rc4/go.mod h1:yotsojf2C1QBOw4dZrTcxbyxmPUrT4hNuOQWX9XUwB4=
|
github.com/tendermint/tendermint v0.34.0-rc4/go.mod h1:yotsojf2C1QBOw4dZrTcxbyxmPUrT4hNuOQWX9XUwB4=
|
||||||
github.com/tendermint/tendermint v0.34.0-rc6 h1:SVuKGvvE22KxfuK8QUHctUrmOWJsncZSYXIYtcnoKN0=
|
github.com/tendermint/tendermint v0.34.0-rc6 h1:SVuKGvvE22KxfuK8QUHctUrmOWJsncZSYXIYtcnoKN0=
|
||||||
github.com/tendermint/tendermint v0.34.0-rc6/go.mod h1:ugzyZO5foutZImv0Iyx/gOFCX6mjJTgbLHTwi17VDVg=
|
github.com/tendermint/tendermint v0.34.0-rc6/go.mod h1:ugzyZO5foutZImv0Iyx/gOFCX6mjJTgbLHTwi17VDVg=
|
||||||
|
github.com/tendermint/tendermint v0.34.0 h1:eXCfMgoqVSzrjzOj6clI9GAejcHH0LvOlRjpCmMJksU=
|
||||||
|
github.com/tendermint/tendermint v0.34.0/go.mod h1:Aj3PIipBFSNO21r+Lq3TtzQ+uKESxkbA3yo/INM4QwQ=
|
||||||
github.com/tendermint/tm-db v0.5.1/go.mod h1:g92zWjHpCYlEvQXvy9M168Su8V1IBEeawpXVVBaK4f4=
|
github.com/tendermint/tm-db v0.5.1/go.mod h1:g92zWjHpCYlEvQXvy9M168Su8V1IBEeawpXVVBaK4f4=
|
||||||
github.com/tendermint/tm-db v0.6.2 h1:DOn8jwCdjJblrCFJbtonEIPD1IuJWpbRUUdR8GWE4RM=
|
github.com/tendermint/tm-db v0.6.2 h1:DOn8jwCdjJblrCFJbtonEIPD1IuJWpbRUUdR8GWE4RM=
|
||||||
github.com/tendermint/tm-db v0.6.2/go.mod h1:GYtQ67SUvATOcoY8/+x6ylk8Qo02BQyLrAs+yAcLvGI=
|
github.com/tendermint/tm-db v0.6.2/go.mod h1:GYtQ67SUvATOcoY8/+x6ylk8Qo02BQyLrAs+yAcLvGI=
|
||||||
|
github.com/tendermint/tm-db v0.6.3 h1:ZkhQcKnB8/2jr5EaZwGndN4owkPsGezW2fSisS9zGbg=
|
||||||
|
github.com/tendermint/tm-db v0.6.3/go.mod h1:lfA1dL9/Y/Y8wwyPp2NMLyn5P5Ptr/gvDFNWtrCWSf8=
|
||||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
||||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
||||||
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
|
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
|
||||||
@@ -610,9 +622,10 @@ golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPh
|
|||||||
golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
|
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee h1:4yd7jl+vXjalO5ztz6Vc1VADv+S/80LGJmyl1ROJ2AI=
|
golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 h1:pLI5jrR7OSLijeIDcmRxNmw2api+jEfxLoykJVice/E=
|
||||||
golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
||||||
@@ -661,6 +674,7 @@ golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/
|
|||||||
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||||
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||||
golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||||
|
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||||
golang.org/x/net v0.0.0-20200930145003-4acb6c075d10 h1:YfxMZzv3PjGonQYNUaeU2+DhAdqOxerQ30JFB6WgAXo=
|
golang.org/x/net v0.0.0-20200930145003-4acb6c075d10 h1:YfxMZzv3PjGonQYNUaeU2+DhAdqOxerQ30JFB6WgAXo=
|
||||||
golang.org/x/net v0.0.0-20200930145003-4acb6c075d10/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
golang.org/x/net v0.0.0-20200930145003-4acb6c075d10/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||||
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11 h1:lwlPPsmjDKK0J6eG6xDWd5XPehI0R024zxjDnw3esPA=
|
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11 h1:lwlPPsmjDKK0J6eG6xDWd5XPehI0R024zxjDnw3esPA=
|
||||||
@@ -746,6 +760,7 @@ golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgw
|
|||||||
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
||||||
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
||||||
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
|
golang.org/x/tools v0.0.0-20190828213141-aed303cbaa74/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
@@ -786,8 +801,7 @@ google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfG
|
|||||||
google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
||||||
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/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-20201014134559-03b6142f0dc9 h1:fG84H9C3EXfuDlzkG+VEPDYHHExklP6scH1QZ5gQTqU=
|
google.golang.org/genproto v0.0.0-20201111145450-ac7456db90a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
google.golang.org/genproto v0.0.0-20201014134559-03b6142f0dc9/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
|
||||||
google.golang.org/genproto v0.0.0-20201211151036-40ec1c210f7a h1:GnJAhasbD8HiT8DZMvsEx3QLVy/X0icq/MGr0MqRJ2M=
|
google.golang.org/genproto v0.0.0-20201211151036-40ec1c210f7a h1:GnJAhasbD8HiT8DZMvsEx3QLVy/X0icq/MGr0MqRJ2M=
|
||||||
google.golang.org/genproto v0.0.0-20201211151036-40ec1c210f7a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
google.golang.org/genproto v0.0.0-20201211151036-40ec1c210f7a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
||||||
@@ -809,8 +823,8 @@ google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM
|
|||||||
google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
|
google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
|
||||||
google.golang.org/grpc v1.32.0 h1:zWTV+LMdc3kaiJMSTOFz2UgSBgx8RNQoTGiZu3fR9S0=
|
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/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
|
||||||
google.golang.org/grpc v1.33.0 h1:IBKSUNL2uBS2DkJBncPP+TwT0sp9tgA8A75NjHt6umg=
|
google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
|
||||||
google.golang.org/grpc v1.33.0/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
|
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
|
||||||
google.golang.org/grpc v1.34.0 h1:raiipEjMOIC/TO2AvyTxP25XFdLxNIBwzDh3FM3XztI=
|
google.golang.org/grpc v1.34.0 h1:raiipEjMOIC/TO2AvyTxP25XFdLxNIBwzDh3FM3XztI=
|
||||||
google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
|
google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
|
||||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||||
|
|||||||
@@ -18,8 +18,7 @@ func ProposalStoreCodeCmd() *cobra.Command {
|
|||||||
Short: "Submit a wasm binary proposal",
|
Short: "Submit a wasm binary proposal",
|
||||||
Args: cobra.ExactArgs(1),
|
Args: cobra.ExactArgs(1),
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
clientCtx, err := client.GetClientTxContext(cmd)
|
||||||
clientCtx, err := client.ReadTxCommandFlags(clientCtx, cmd.Flags())
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -41,7 +40,7 @@ func ProposalStoreCodeCmd() *cobra.Command {
|
|||||||
InstantiatePermission: src.InstantiatePermission,
|
InstantiatePermission: src.InstantiatePermission,
|
||||||
}
|
}
|
||||||
|
|
||||||
deposit, err := sdk.ParseCoins(viper.GetString(cli.FlagDeposit))
|
deposit, err := sdk.ParseCoinsNormalized(viper.GetString(cli.FlagDeposit))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -79,8 +78,7 @@ func ProposalInstantiateContractCmd() *cobra.Command {
|
|||||||
Short: "Submit an instantiate wasm contract proposal",
|
Short: "Submit an instantiate wasm contract proposal",
|
||||||
Args: cobra.ExactArgs(2),
|
Args: cobra.ExactArgs(2),
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
clientCtx, err := client.GetClientTxContext(cmd)
|
||||||
clientCtx, err := client.ReadTxCommandFlags(clientCtx, cmd.Flags())
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -103,7 +101,7 @@ func ProposalInstantiateContractCmd() *cobra.Command {
|
|||||||
InitFunds: src.InitFunds,
|
InitFunds: src.InitFunds,
|
||||||
}
|
}
|
||||||
|
|
||||||
deposit, err := sdk.ParseCoins(viper.GetString(cli.FlagDeposit))
|
deposit, err := sdk.ParseCoinsNormalized(viper.GetString(cli.FlagDeposit))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -140,8 +138,7 @@ func ProposalMigrateContractCmd() *cobra.Command {
|
|||||||
Short: "Submit a migrate wasm contract to a new code version proposal",
|
Short: "Submit a migrate wasm contract to a new code version proposal",
|
||||||
Args: cobra.ExactArgs(3),
|
Args: cobra.ExactArgs(3),
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
clientCtx, err := client.GetClientTxContext(cmd)
|
||||||
clientCtx, err := client.ReadTxCommandFlags(clientCtx, cmd.Flags())
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -164,7 +161,7 @@ func ProposalMigrateContractCmd() *cobra.Command {
|
|||||||
RunAs: viper.GetString(flagRunAs),
|
RunAs: viper.GetString(flagRunAs),
|
||||||
}
|
}
|
||||||
|
|
||||||
deposit, err := sdk.ParseCoins(viper.GetString(cli.FlagDeposit))
|
deposit, err := sdk.ParseCoinsNormalized(viper.GetString(cli.FlagDeposit))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -198,8 +195,7 @@ func ProposalUpdateContractAdminCmd() *cobra.Command {
|
|||||||
Short: "Submit a new admin for a contract proposal",
|
Short: "Submit a new admin for a contract proposal",
|
||||||
Args: cobra.ExactArgs(2),
|
Args: cobra.ExactArgs(2),
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
clientCtx, err := client.GetClientTxContext(cmd)
|
||||||
clientCtx, err := client.ReadTxCommandFlags(clientCtx, cmd.Flags())
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -216,7 +212,7 @@ func ProposalUpdateContractAdminCmd() *cobra.Command {
|
|||||||
NewAdmin: src.NewAdmin,
|
NewAdmin: src.NewAdmin,
|
||||||
}
|
}
|
||||||
|
|
||||||
deposit, err := sdk.ParseCoins(viper.GetString(cli.FlagDeposit))
|
deposit, err := sdk.ParseCoinsNormalized(viper.GetString(cli.FlagDeposit))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -248,8 +244,7 @@ func ProposalClearContractAdminCmd() *cobra.Command {
|
|||||||
Short: "Submit a clear admin for a contract to prevent further migrations proposal",
|
Short: "Submit a clear admin for a contract to prevent further migrations proposal",
|
||||||
Args: cobra.ExactArgs(1),
|
Args: cobra.ExactArgs(1),
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
clientCtx, err := client.GetClientTxContext(cmd)
|
||||||
clientCtx, err := client.ReadTxCommandFlags(clientCtx, cmd.Flags())
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -260,7 +255,7 @@ func ProposalClearContractAdminCmd() *cobra.Command {
|
|||||||
Contract: args[0],
|
Contract: args[0],
|
||||||
}
|
}
|
||||||
|
|
||||||
deposit, err := sdk.ParseCoins(viper.GetString(cli.FlagDeposit))
|
deposit, err := sdk.ParseCoinsNormalized(viper.GetString(cli.FlagDeposit))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,8 +18,7 @@ func MigrateContractCmd() *cobra.Command {
|
|||||||
Short: "Migrate a wasm contract to a new code version",
|
Short: "Migrate a wasm contract to a new code version",
|
||||||
Args: cobra.ExactArgs(3),
|
Args: cobra.ExactArgs(3),
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
clientCtx, err := client.GetClientTxContext(cmd)
|
||||||
clientCtx, err := client.ReadTxCommandFlags(clientCtx, cmd.Flags())
|
|
||||||
|
|
||||||
msg, err := parseMigrateContractArgs(args, clientCtx)
|
msg, err := parseMigrateContractArgs(args, clientCtx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -60,8 +59,7 @@ func UpdateContractAdminCmd() *cobra.Command {
|
|||||||
Short: "Set new admin for a contract",
|
Short: "Set new admin for a contract",
|
||||||
Args: cobra.ExactArgs(2),
|
Args: cobra.ExactArgs(2),
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
clientCtx, err := client.GetClientTxContext(cmd)
|
||||||
clientCtx, err := client.ReadTxCommandFlags(clientCtx, cmd.Flags())
|
|
||||||
|
|
||||||
msg, err := parseUpdateContractAdminArgs(args, clientCtx)
|
msg, err := parseUpdateContractAdminArgs(args, clientCtx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -93,8 +91,7 @@ func ClearContractAdminCmd() *cobra.Command {
|
|||||||
Short: "Clears admin for a contract to prevent further migrations",
|
Short: "Clears admin for a contract to prevent further migrations",
|
||||||
Args: cobra.ExactArgs(1),
|
Args: cobra.ExactArgs(1),
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
clientCtx, err := client.GetClientTxContext(cmd)
|
||||||
clientCtx, err := client.ReadTxCommandFlags(clientCtx, cmd.Flags())
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import (
|
|||||||
"github.com/CosmWasm/wasmd/x/wasm/internal/types"
|
"github.com/CosmWasm/wasmd/x/wasm/internal/types"
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||||
|
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
"github.com/gogo/protobuf/proto"
|
"github.com/gogo/protobuf/proto"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
@@ -46,8 +47,8 @@ func GetCmdListCode() *cobra.Command {
|
|||||||
Long: "List all wasm bytecode on the chain",
|
Long: "List all wasm bytecode on the chain",
|
||||||
Args: cobra.ExactArgs(0),
|
Args: cobra.ExactArgs(0),
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
|
||||||
clientCtx, err := client.ReadQueryCommandFlags(clientCtx, cmd.Flags())
|
clientCtx, err := client.GetClientQueryContext(cmd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -66,7 +67,7 @@ func GetCmdListCode() *cobra.Command {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return clientCtx.WithJSONMarshaler(&VanillaStdJsonMarshaller{}).PrintOutput(res)
|
return clientCtx.WithJSONMarshaler(&VanillaStdJsonMarshaller{}).PrintProto(res)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
flags.AddQueryFlagsToCmd(cmd)
|
flags.AddQueryFlagsToCmd(cmd)
|
||||||
@@ -82,8 +83,8 @@ func GetCmdListContractByCode() *cobra.Command {
|
|||||||
Long: "List wasm all bytecode on the chain for given code id",
|
Long: "List wasm all bytecode on the chain for given code id",
|
||||||
Args: cobra.ExactArgs(1),
|
Args: cobra.ExactArgs(1),
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
|
||||||
clientCtx, err := client.ReadQueryCommandFlags(clientCtx, cmd.Flags())
|
clientCtx, err := client.GetClientQueryContext(cmd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -108,7 +109,7 @@ func GetCmdListContractByCode() *cobra.Command {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return clientCtx.WithJSONMarshaler(&VanillaStdJsonMarshaller{}).PrintOutput(res)
|
return clientCtx.WithJSONMarshaler(&VanillaStdJsonMarshaller{}).PrintProto(res)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
flags.AddQueryFlagsToCmd(cmd)
|
flags.AddQueryFlagsToCmd(cmd)
|
||||||
@@ -124,8 +125,8 @@ func GetCmdQueryCode() *cobra.Command {
|
|||||||
Long: "Downloads wasm bytecode for given code id",
|
Long: "Downloads wasm bytecode for given code id",
|
||||||
Args: cobra.ExactArgs(2),
|
Args: cobra.ExactArgs(2),
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
|
||||||
clientCtx, err := client.ReadQueryCommandFlags(clientCtx, cmd.Flags())
|
clientCtx, err := client.GetClientQueryContext(cmd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -165,8 +166,8 @@ func GetCmdGetContractInfo() *cobra.Command {
|
|||||||
Long: "Prints out metadata of a contract given its address",
|
Long: "Prints out metadata of a contract given its address",
|
||||||
Args: cobra.ExactArgs(1),
|
Args: cobra.ExactArgs(1),
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
|
||||||
clientCtx, err := client.ReadQueryCommandFlags(clientCtx, cmd.Flags())
|
clientCtx, err := client.GetClientQueryContext(cmd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -185,7 +186,7 @@ func GetCmdGetContractInfo() *cobra.Command {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return clientCtx.WithJSONMarshaler(&VanillaStdJsonMarshaller{}).PrintOutput(res)
|
return clientCtx.WithJSONMarshaler(&VanillaStdJsonMarshaller{}).PrintProto(res)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
flags.AddQueryFlagsToCmd(cmd)
|
flags.AddQueryFlagsToCmd(cmd)
|
||||||
@@ -217,8 +218,8 @@ func GetCmdGetContractStateAll() *cobra.Command {
|
|||||||
Long: "Prints out all internal state of a contract given its address",
|
Long: "Prints out all internal state of a contract given its address",
|
||||||
Args: cobra.ExactArgs(1),
|
Args: cobra.ExactArgs(1),
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
|
||||||
clientCtx, err := client.ReadQueryCommandFlags(clientCtx, cmd.Flags())
|
clientCtx, err := client.GetClientQueryContext(cmd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -243,7 +244,7 @@ func GetCmdGetContractStateAll() *cobra.Command {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return clientCtx.WithJSONMarshaler(&VanillaStdJsonMarshaller{}).PrintOutput(res)
|
return clientCtx.WithJSONMarshaler(&VanillaStdJsonMarshaller{}).PrintProto(res)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
flags.AddQueryFlagsToCmd(cmd)
|
flags.AddQueryFlagsToCmd(cmd)
|
||||||
@@ -259,8 +260,8 @@ func GetCmdGetContractStateRaw() *cobra.Command {
|
|||||||
Long: "Prints out internal state for of a contract given its address",
|
Long: "Prints out internal state for of a contract given its address",
|
||||||
Args: cobra.ExactArgs(2),
|
Args: cobra.ExactArgs(2),
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
|
||||||
clientCtx, err := client.ReadQueryCommandFlags(clientCtx, cmd.Flags())
|
clientCtx, err := client.GetClientQueryContext(cmd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -285,7 +286,7 @@ func GetCmdGetContractStateRaw() *cobra.Command {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return clientCtx.WithJSONMarshaler(&VanillaStdJsonMarshaller{}).PrintOutput(res)
|
return clientCtx.WithJSONMarshaler(&VanillaStdJsonMarshaller{}).PrintProto(res)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
decoder.RegisterFlags(cmd.PersistentFlags(), "key argument")
|
decoder.RegisterFlags(cmd.PersistentFlags(), "key argument")
|
||||||
@@ -301,8 +302,8 @@ func GetCmdGetContractStateSmart() *cobra.Command {
|
|||||||
Long: "Calls contract with given address with query data and prints the returned result",
|
Long: "Calls contract with given address with query data and prints the returned result",
|
||||||
Args: cobra.ExactArgs(2),
|
Args: cobra.ExactArgs(2),
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
|
||||||
clientCtx, err := client.ReadQueryCommandFlags(clientCtx, cmd.Flags())
|
clientCtx, err := client.GetClientQueryContext(cmd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -334,7 +335,7 @@ func GetCmdGetContractStateSmart() *cobra.Command {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return clientCtx.WithJSONMarshaler(&VanillaStdJsonMarshaller{}).PrintOutput(res)
|
return clientCtx.WithJSONMarshaler(&VanillaStdJsonMarshaller{}).PrintProto(res)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
decoder.RegisterFlags(cmd.PersistentFlags(), "query argument")
|
decoder.RegisterFlags(cmd.PersistentFlags(), "query argument")
|
||||||
@@ -350,14 +351,13 @@ func GetCmdGetContractHistory() *cobra.Command {
|
|||||||
Long: "Prints out the code history for a contract given its address",
|
Long: "Prints out the code history for a contract given its address",
|
||||||
Args: cobra.ExactArgs(1),
|
Args: cobra.ExactArgs(1),
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
clientCtx, err := client.GetClientQueryContext(cmd)
|
||||||
clientCtx, err := client.ReadQueryCommandFlags(clientCtx, cmd.Flags())
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = sdk.AccAddressFromBech32(args[0])
|
_, err = sdk.AccAddressFromBech32(args[0])
|
||||||
if err == nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -377,7 +377,7 @@ func GetCmdGetContractHistory() *cobra.Command {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return clientCtx.WithJSONMarshaler(&VanillaStdJsonMarshaller{}).PrintOutput(res)
|
return clientCtx.WithJSONMarshaler(&VanillaStdJsonMarshaller{}).PrintProto(res)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -432,8 +432,16 @@ func asciiDecodeString(s string) ([]byte, error) {
|
|||||||
type VanillaStdJsonMarshaller struct {
|
type VanillaStdJsonMarshaller struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x VanillaStdJsonMarshaller) MarshalInterfaceJSON(i proto.Message) ([]byte, error) {
|
||||||
|
any, err := codectypes.NewAnyWithValue(i)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return x.MarshalJSON(any)
|
||||||
|
}
|
||||||
|
|
||||||
func (x VanillaStdJsonMarshaller) MarshalJSON(o proto.Message) ([]byte, error) {
|
func (x VanillaStdJsonMarshaller) MarshalJSON(o proto.Message) ([]byte, error) {
|
||||||
return json.Marshal(o)
|
return json.MarshalIndent(o, "", " ")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x VanillaStdJsonMarshaller) MustMarshalJSON(o proto.Message) []byte {
|
func (x VanillaStdJsonMarshaller) MustMarshalJSON(o proto.Message) []byte {
|
||||||
@@ -444,6 +452,10 @@ func (x VanillaStdJsonMarshaller) MustMarshalJSON(o proto.Message) []byte {
|
|||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x VanillaStdJsonMarshaller) UnmarshalInterfaceJSON(bz []byte, ptr interface{}) error {
|
||||||
|
panic("not supported")
|
||||||
|
}
|
||||||
|
|
||||||
func (x VanillaStdJsonMarshaller) UnmarshalJSON(bz []byte, ptr proto.Message) error {
|
func (x VanillaStdJsonMarshaller) UnmarshalJSON(bz []byte, ptr proto.Message) error {
|
||||||
panic("not supported")
|
panic("not supported")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,8 +55,7 @@ func StoreCodeCmd() *cobra.Command {
|
|||||||
Short: "Upload a wasm binary",
|
Short: "Upload a wasm binary",
|
||||||
Args: cobra.ExactArgs(1),
|
Args: cobra.ExactArgs(1),
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
clientCtx, err := client.GetClientTxContext(cmd)
|
||||||
clientCtx, err := client.ReadTxCommandFlags(clientCtx, cmd.Flags())
|
|
||||||
|
|
||||||
msg, err := parseStoreCodeArgs(args, clientCtx)
|
msg, err := parseStoreCodeArgs(args, clientCtx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -124,8 +123,8 @@ func InstantiateContractCmd() *cobra.Command {
|
|||||||
Short: "Instantiate a wasm contract",
|
Short: "Instantiate a wasm contract",
|
||||||
Args: cobra.ExactArgs(2),
|
Args: cobra.ExactArgs(2),
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
|
||||||
clientCtx, err := client.ReadTxCommandFlags(clientCtx, cmd.Flags())
|
clientCtx, err := client.GetClientTxContext(cmd)
|
||||||
|
|
||||||
msg, err := parseInstantiateArgs(args, clientCtx)
|
msg, err := parseInstantiateArgs(args, clientCtx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -153,7 +152,7 @@ func parseInstantiateArgs(args []string, cliCtx client.Context) (types.MsgInstan
|
|||||||
}
|
}
|
||||||
|
|
||||||
amounstStr := viper.GetString(flagAmount)
|
amounstStr := viper.GetString(flagAmount)
|
||||||
amount, err := sdk.ParseCoins(amounstStr)
|
amount, err := sdk.ParseCoinsNormalized(amounstStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return types.MsgInstantiateContract{}, err
|
return types.MsgInstantiateContract{}, err
|
||||||
}
|
}
|
||||||
@@ -184,12 +183,12 @@ func ExecuteContractCmd() *cobra.Command {
|
|||||||
Short: "Execute a command on a wasm contract",
|
Short: "Execute a command on a wasm contract",
|
||||||
Args: cobra.ExactArgs(2),
|
Args: cobra.ExactArgs(2),
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
|
||||||
clientCtx, err := client.ReadTxCommandFlags(clientCtx, cmd.Flags())
|
clientCtx, err := client.GetClientTxContext(cmd)
|
||||||
|
|
||||||
// get the id of the code to instantiate
|
// get the id of the code to instantiate
|
||||||
amounstStr := viper.GetString(flagAmount)
|
amounstStr := viper.GetString(flagAmount)
|
||||||
amount, err := sdk.ParseCoins(amounstStr)
|
amount, err := sdk.ParseCoinsNormalized(amounstStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import (
|
|||||||
|
|
||||||
wasmvmtypes "github.com/CosmWasm/wasmvm/types"
|
wasmvmtypes "github.com/CosmWasm/wasmvm/types"
|
||||||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||||
"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
|
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper"
|
authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper"
|
||||||
bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper"
|
bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper"
|
||||||
@@ -610,17 +610,14 @@ func TestQueryStakingPlugin(t *testing.T) {
|
|||||||
|
|
||||||
// adds a few validators and returns a list of validators that are registered
|
// adds a few validators and returns a list of validators that are registered
|
||||||
func addValidator(t *testing.T, ctx sdk.Context, stakingKeeper stakingkeeper.Keeper, accountKeeper authkeeper.AccountKeeper, bankKeeper bankkeeper.Keeper, value sdk.Coin) sdk.ValAddress {
|
func addValidator(t *testing.T, ctx sdk.Context, stakingKeeper stakingkeeper.Keeper, accountKeeper authkeeper.AccountKeeper, bankKeeper bankkeeper.Keeper, value sdk.Coin) sdk.ValAddress {
|
||||||
_, pub, accAddr := keyPubAddr()
|
|
||||||
|
|
||||||
addr := sdk.ValAddress(accAddr)
|
|
||||||
|
|
||||||
owner := createFakeFundedAccount(t, ctx, accountKeeper, bankKeeper, sdk.Coins{value})
|
owner := createFakeFundedAccount(t, ctx, accountKeeper, bankKeeper, sdk.Coins{value})
|
||||||
|
|
||||||
pk, err := ed25519.FromTmEd25519(pub)
|
privKey := secp256k1.GenPrivKey()
|
||||||
require.NoError(t, err)
|
pubKey := privKey.PubKey()
|
||||||
pkAny, err := codectypes.PackAny(pk)
|
addr := sdk.ValAddress(pubKey.Address())
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
|
pkAny, err := codectypes.PackAny(pubKey)
|
||||||
|
require.NoError(t, err)
|
||||||
msg := stakingtypes.MsgCreateValidator{
|
msg := stakingtypes.MsgCreateValidator{
|
||||||
Description: types.Description{
|
Description: types.Description{
|
||||||
Moniker: "Validator power",
|
Moniker: "Validator power",
|
||||||
|
|||||||
Reference in New Issue
Block a user