Integrate wasmcli into wasmd
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -22,7 +22,6 @@ docs/node_modules
|
|||||||
# Data - ideally these don't exist
|
# Data - ideally these don't exist
|
||||||
baseapp/data/*
|
baseapp/data/*
|
||||||
client/lcd/keys/*
|
client/lcd/keys/*
|
||||||
cmd/wasmcli/statik/statik.go
|
|
||||||
mytestnet
|
mytestnet
|
||||||
|
|
||||||
# Testing
|
# Testing
|
||||||
|
|||||||
@@ -39,12 +39,9 @@ RUN LEDGER_ENABLED=false BUILD_TAGS=muslc make build-gaiaflex
|
|||||||
FROM alpine:3.12
|
FROM alpine:3.12
|
||||||
|
|
||||||
COPY --from=go-builder /code/build/wasmd /usr/bin/wasmd
|
COPY --from=go-builder /code/build/wasmd /usr/bin/wasmd
|
||||||
COPY --from=go-builder /code/build/wasmcli /usr/bin/wasmcli
|
|
||||||
|
|
||||||
# testnet
|
# testnet
|
||||||
COPY --from=go-builder /code/build/coral /usr/bin/coral
|
|
||||||
COPY --from=go-builder /code/build/corald /usr/bin/corald
|
COPY --from=go-builder /code/build/corald /usr/bin/corald
|
||||||
COPY --from=go-builder /code/build/gaiaflex /usr/bin/gaiaflex
|
|
||||||
COPY --from=go-builder /code/build/gaiaflexd /usr/bin/gaiaflexd
|
COPY --from=go-builder /code/build/gaiaflexd /usr/bin/gaiaflexd
|
||||||
|
|
||||||
COPY docker/* /opt/
|
COPY docker/* /opt/
|
||||||
|
|||||||
18
Makefile
18
Makefile
@@ -54,7 +54,6 @@ build_tags_comma_sep := $(subst $(empty),$(comma),$(build_tags))
|
|||||||
|
|
||||||
ldflags = -X github.com/cosmos/cosmos-sdk/version.Name=wasm \
|
ldflags = -X github.com/cosmos/cosmos-sdk/version.Name=wasm \
|
||||||
-X github.com/cosmos/cosmos-sdk/version.AppName=wasmd \
|
-X github.com/cosmos/cosmos-sdk/version.AppName=wasmd \
|
||||||
-X github.com/CosmWasm/wasmd/cmd/wasmcli/version.ClientName=wasmcli \
|
|
||||||
-X github.com/cosmos/cosmos-sdk/version.Version=$(VERSION) \
|
-X github.com/cosmos/cosmos-sdk/version.Version=$(VERSION) \
|
||||||
-X github.com/cosmos/cosmos-sdk/version.Commit=$(COMMIT) \
|
-X github.com/cosmos/cosmos-sdk/version.Commit=$(COMMIT) \
|
||||||
-X "github.com/cosmos/cosmos-sdk/version.BuildTags=$(build_tags_comma_sep)"
|
-X "github.com/cosmos/cosmos-sdk/version.BuildTags=$(build_tags_comma_sep)"
|
||||||
@@ -67,10 +66,8 @@ ldflags := $(strip $(ldflags))
|
|||||||
|
|
||||||
coral_ldflags = -X github.com/cosmos/cosmos-sdk/version.Name=coral \
|
coral_ldflags = -X github.com/cosmos/cosmos-sdk/version.Name=coral \
|
||||||
-X github.com/cosmos/cosmos-sdk/version.AppName=corald \
|
-X github.com/cosmos/cosmos-sdk/version.AppName=corald \
|
||||||
-X github.com/CosmWasm/wasmd/cmd/wasmcli/version.ClientName=coral \
|
|
||||||
-X github.com/cosmos/cosmos-sdk/version.Version=$(VERSION) \
|
-X github.com/cosmos/cosmos-sdk/version.Version=$(VERSION) \
|
||||||
-X github.com/cosmos/cosmos-sdk/version.Commit=$(COMMIT) \
|
-X github.com/cosmos/cosmos-sdk/version.Commit=$(COMMIT) \
|
||||||
-X github.com/CosmWasm/wasmd/app.CLIDir=.coral \
|
|
||||||
-X github.com/CosmWasm/wasmd/app.NodeDir=.corald \
|
-X github.com/CosmWasm/wasmd/app.NodeDir=.corald \
|
||||||
-X github.com/CosmWasm/wasmd/app.Bech32Prefix=coral \
|
-X github.com/CosmWasm/wasmd/app.Bech32Prefix=coral \
|
||||||
-X "github.com/cosmos/cosmos-sdk/version.BuildTags=$(build_tags_comma_sep)"
|
-X "github.com/cosmos/cosmos-sdk/version.BuildTags=$(build_tags_comma_sep)"
|
||||||
@@ -82,11 +79,9 @@ coral_ldflags := $(strip $(coral_ldflags))
|
|||||||
|
|
||||||
flex_ldflags = -X github.com/cosmos/cosmos-sdk/version.Name=gaiaflex \
|
flex_ldflags = -X github.com/cosmos/cosmos-sdk/version.Name=gaiaflex \
|
||||||
-X github.com/cosmos/cosmos-sdk/version.AppName=gaiaflexd \
|
-X github.com/cosmos/cosmos-sdk/version.AppName=gaiaflexd \
|
||||||
-X github.com/CosmWasm/wasmd/cmd/wasmcli/version.ClientName=gaiaflex \
|
|
||||||
-X github.com/cosmos/cosmos-sdk/version.Version=$(VERSION) \
|
-X github.com/cosmos/cosmos-sdk/version.Version=$(VERSION) \
|
||||||
-X github.com/cosmos/cosmos-sdk/version.Commit=$(COMMIT) \
|
-X github.com/cosmos/cosmos-sdk/version.Commit=$(COMMIT) \
|
||||||
-X github.com/CosmWasm/wasmd/app.ProposalsEnabled=true \
|
-X github.com/CosmWasm/wasmd/app.ProposalsEnabled=true \
|
||||||
-X github.com/CosmWasm/wasmd/app.CLIDir=.gaiaflex \
|
|
||||||
-X github.com/CosmWasm/wasmd/app.NodeDir=.gaiaflexd \
|
-X github.com/CosmWasm/wasmd/app.NodeDir=.gaiaflexd \
|
||||||
-X github.com/CosmWasm/wasmd/app.Bech32Prefix=cosmos \
|
-X github.com/CosmWasm/wasmd/app.Bech32Prefix=cosmos \
|
||||||
-X "github.com/cosmos/cosmos-sdk/version.BuildTags=$(build_tags_comma_sep)"
|
-X "github.com/cosmos/cosmos-sdk/version.BuildTags=$(build_tags_comma_sep)"
|
||||||
@@ -102,29 +97,23 @@ all: install lint test
|
|||||||
|
|
||||||
build: go.sum
|
build: go.sum
|
||||||
ifeq ($(OS),Windows_NT)
|
ifeq ($(OS),Windows_NT)
|
||||||
# wasmd nodes not supported on windows, maybe the cli?
|
exit 1
|
||||||
go build -mod=readonly $(BUILD_FLAGS) -o build/wasmcli.exe ./cmd/wasmcli
|
|
||||||
else
|
else
|
||||||
go build -mod=readonly $(BUILD_FLAGS) -o build/wasmd ./cmd/wasmd
|
go build -mod=readonly $(BUILD_FLAGS) -o build/wasmd ./cmd/wasmd
|
||||||
go build -mod=readonly $(BUILD_FLAGS) -o build/wasmcli ./cmd/wasmcli
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
build-coral: go.sum
|
build-coral: go.sum
|
||||||
ifeq ($(OS),Windows_NT)
|
ifeq ($(OS),Windows_NT)
|
||||||
# wasmd nodes not supported on windows, maybe the cli?
|
exit 1
|
||||||
go build -mod=readonly $(CORAL_BUILD_FLAGS) -o build/coral.exe ./cmd/wasmcli
|
|
||||||
else
|
else
|
||||||
go build -mod=readonly $(CORAL_BUILD_FLAGS) -o build/corald ./cmd/wasmd
|
go build -mod=readonly $(CORAL_BUILD_FLAGS) -o build/corald ./cmd/wasmd
|
||||||
go build -mod=readonly $(CORAL_BUILD_FLAGS) -o build/coral ./cmd/wasmcli
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
build-gaiaflex: go.sum
|
build-gaiaflex: go.sum
|
||||||
ifeq ($(OS),Windows_NT)
|
ifeq ($(OS),Windows_NT)
|
||||||
# wasmd nodes not supported on windows, maybe the cli?
|
exit 1
|
||||||
go build -mod=readonly $(FLEX_BUILD_FLAGS) -o build/gaiaflex.exe ./cmd/wasmcli
|
|
||||||
else
|
else
|
||||||
go build -mod=readonly $(FLEX_BUILD_FLAGS) -o build/gaiaflexd ./cmd/wasmd
|
go build -mod=readonly $(FLEX_BUILD_FLAGS) -o build/gaiaflexd ./cmd/wasmd
|
||||||
go build -mod=readonly $(FLEX_BUILD_FLAGS) -o build/gaiaflex ./cmd/wasmcli
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
build-linux: go.sum
|
build-linux: go.sum
|
||||||
@@ -139,7 +128,6 @@ endif
|
|||||||
|
|
||||||
install: go.sum
|
install: go.sum
|
||||||
go install -mod=readonly $(BUILD_FLAGS) ./cmd/wasmd
|
go install -mod=readonly $(BUILD_FLAGS) ./cmd/wasmd
|
||||||
go install -mod=readonly $(BUILD_FLAGS) ./cmd/wasmcli
|
|
||||||
|
|
||||||
########################################
|
########################################
|
||||||
### Tools & dependencies
|
### Tools & dependencies
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ docker run --rm -it \
|
|||||||
--mount type=volume,source=wasmd_data,target=/root \
|
--mount type=volume,source=wasmd_data,target=/root \
|
||||||
cosmwasm/wasmd:latest ./setup_wasmd.sh cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6
|
cosmwasm/wasmd:latest ./setup_wasmd.sh cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6
|
||||||
|
|
||||||
# This will start both wasmd and wasmcli rest-server, only wasmcli output is shown on the screen
|
# This will start both wasmd and rest-server, only rest-serve output is shown on the screen
|
||||||
docker run --rm -it -p 26657:26657 -p 26656:26656 -p 1317:1317 \
|
docker run --rm -it -p 26657:26657 -p 26656:26656 -p 1317:1317 \
|
||||||
--mount type=volume,source=wasmd_data,target=/root \
|
--mount type=volume,source=wasmd_data,target=/root \
|
||||||
cosmwasm/wasmd:latest ./run_all.sh
|
cosmwasm/wasmd:latest ./run_all.sh
|
||||||
@@ -126,7 +126,7 @@ sudo chown -R $(id -u):$(id -g) ./template
|
|||||||
# bind to non-/root and pass an argument to run.sh to copy the template into /root
|
# bind to non-/root and pass an argument to run.sh to copy the template into /root
|
||||||
# we need wasmd_data volume mount not just for restart, but also to view logs
|
# we need wasmd_data volume mount not just for restart, but also to view logs
|
||||||
docker volume rm -f wasmd_data
|
docker volume rm -f wasmd_data
|
||||||
docker run --rm -it -p 26657:26657 -p 26656:26656 -p 1317:1317 \
|
docker run --rm -it -p 26657:26657 -p 26656:26656 -p 9090:9090 \
|
||||||
--mount type=bind,source=$(pwd)/template,target=/template \
|
--mount type=bind,source=$(pwd)/template,target=/template \
|
||||||
--mount type=volume,source=wasmd_data,target=/root \
|
--mount type=volume,source=wasmd_data,target=/root \
|
||||||
cosmwasm/wasmd:latest ./run_all.sh /template
|
cosmwasm/wasmd:latest ./run_all.sh /template
|
||||||
@@ -150,7 +150,7 @@ to the configuration.
|
|||||||
|
|
||||||
Available flags:
|
Available flags:
|
||||||
|
|
||||||
* `-X github.com/CosmWasm/wasmd/app.CLIDir=.coral` - set the config directory for the cli (default `~/.wasmcli`)
|
|
||||||
* `-X github.com/CosmWasm/wasmd/app.NodeDir=.corald` - set the config/data directory for the node (default `~/.wasmd`)
|
* `-X github.com/CosmWasm/wasmd/app.NodeDir=.corald` - set the config/data directory for the node (default `~/.wasmd`)
|
||||||
* `-X github.com/CosmWasm/wasmd/app.Bech32Prefix=coral` - set the bech32 prefix for all accounts (default `cosmos`)
|
* `-X github.com/CosmWasm/wasmd/app.Bech32Prefix=coral` - set the bech32 prefix for all accounts (default `cosmos`)
|
||||||
* `-X github.com/CosmWasm/wasmd/app.ProposalsEnabled=true` - enable all x/wasm governance proposals (default `false`)
|
* `-X github.com/CosmWasm/wasmd/app.ProposalsEnabled=true` - enable all x/wasm governance proposals (default `false`)
|
||||||
|
|||||||
@@ -17,9 +17,9 @@ A list of ContractCodeHistoryEntries with following fields:
|
|||||||
* 404 - for an unknown contract
|
* 404 - for an unknown contract
|
||||||
|
|
||||||
### CLI
|
### CLI
|
||||||
`wasmcli query wasm contract-history [bech32_address] to print all the code changes.`
|
`wasmd query wasm contract-history [bech32_address] to print all the code changes.`
|
||||||
Example:
|
Example:
|
||||||
`wasmcli query wasm contract-history cosmos18r5szma8hm93pvx6lwpjwyxruw27e0k5uw835c`
|
`wasmd query wasm contract-history cosmos18r5szma8hm93pvx6lwpjwyxruw27e0k5uw835c`
|
||||||
```json
|
```json
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -95,7 +95,6 @@ const appName = "WasmApp"
|
|||||||
|
|
||||||
// We pull these out so we can set them with LDFLAGS in the Makefile
|
// We pull these out so we can set them with LDFLAGS in the Makefile
|
||||||
var (
|
var (
|
||||||
CLIDir = ".wasmcli"
|
|
||||||
NodeDir = ".wasmd"
|
NodeDir = ".wasmd"
|
||||||
Bech32Prefix = sdk.Bech32MainPrefix
|
Bech32Prefix = sdk.Bech32MainPrefix
|
||||||
|
|
||||||
@@ -129,8 +128,6 @@ func GetEnabledProposals() []wasm.ProposalType {
|
|||||||
// These are the ones we will want to use in the code, based on
|
// These are the ones we will want to use in the code, based on
|
||||||
// any overrides above
|
// any overrides above
|
||||||
var (
|
var (
|
||||||
// DefaultCLIHome default home directories for wasmcli
|
|
||||||
DefaultCLIHome = os.ExpandEnv("$HOME/") + CLIDir
|
|
||||||
// DefaultNodeHome default home directories for wasmd
|
// DefaultNodeHome default home directories for wasmd
|
||||||
DefaultNodeHome = os.ExpandEnv("$HOME/") + NodeDir
|
DefaultNodeHome = os.ExpandEnv("$HOME/") + NodeDir
|
||||||
|
|
||||||
|
|||||||
@@ -1,164 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
|
|
||||||
"github.com/CosmWasm/wasmd/app"
|
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
|
||||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
|
||||||
"github.com/cosmos/cosmos-sdk/client/keys"
|
|
||||||
"github.com/cosmos/cosmos-sdk/client/rpc"
|
|
||||||
"github.com/cosmos/cosmos-sdk/server"
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
||||||
"github.com/cosmos/cosmos-sdk/version"
|
|
||||||
authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli"
|
|
||||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
|
||||||
vestingcli "github.com/cosmos/cosmos-sdk/x/auth/vesting/client/cli"
|
|
||||||
bankcmd "github.com/cosmos/cosmos-sdk/x/bank/client/cli"
|
|
||||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
|
||||||
"github.com/spf13/cobra"
|
|
||||||
"github.com/tendermint/tendermint/libs/cli"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ClientName is set via build process
|
|
||||||
const ClientName = "wasmcli"
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
// Configure cobra to sort commands
|
|
||||||
cobra.EnableCommandSorting = false
|
|
||||||
|
|
||||||
// Read in the configuration file for the sdk
|
|
||||||
config := sdk.GetConfig()
|
|
||||||
config.SetBech32PrefixForAccount(app.Bech32PrefixAccAddr, app.Bech32PrefixAccPub)
|
|
||||||
config.SetBech32PrefixForValidator(app.Bech32PrefixValAddr, app.Bech32PrefixValPub)
|
|
||||||
config.SetBech32PrefixForConsensusNode(app.Bech32PrefixConsAddr, app.Bech32PrefixConsPub)
|
|
||||||
config.Seal()
|
|
||||||
|
|
||||||
// TODO: setup keybase, viper object, etc. to be passed into
|
|
||||||
// the below functions and eliminate global vars, like we do
|
|
||||||
// with the cdc
|
|
||||||
|
|
||||||
encodingConfig := app.MakeEncodingConfig()
|
|
||||||
|
|
||||||
initClientCtx := client.Context{}.
|
|
||||||
WithJSONMarshaler(encodingConfig.Marshaler).
|
|
||||||
WithInterfaceRegistry(encodingConfig.InterfaceRegistry).
|
|
||||||
WithTxConfig(encodingConfig.TxConfig).
|
|
||||||
WithLegacyAmino(encodingConfig.Amino).
|
|
||||||
WithInput(os.Stdin).
|
|
||||||
WithAccountRetriever(authtypes.AccountRetriever{}).
|
|
||||||
WithBroadcastMode(flags.BroadcastBlock).
|
|
||||||
WithHomeDir(app.DefaultCLIHome)
|
|
||||||
|
|
||||||
rootCmd := &cobra.Command{
|
|
||||||
Use: ClientName,
|
|
||||||
Short: "Command line interface for interacting with " + version.AppName,
|
|
||||||
PersistentPreRunE: func(cmd *cobra.Command, _ []string) error {
|
|
||||||
if err := client.SetCmdClientContextHandler(initClientCtx, cmd); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return server.InterceptConfigsPreRunHandler(cmd)
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
// Construct Root Command
|
|
||||||
rootCmd.AddCommand(
|
|
||||||
rpc.StatusCommand(),
|
|
||||||
queryCommand(),
|
|
||||||
txCommand(),
|
|
||||||
flags.LineBreak,
|
|
||||||
flags.LineBreak,
|
|
||||||
keys.Commands(app.DefaultNodeHome),
|
|
||||||
flags.LineBreak,
|
|
||||||
//version.Cmd,
|
|
||||||
cli.NewCompletionCmd(rootCmd, true),
|
|
||||||
)
|
|
||||||
|
|
||||||
// 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.
|
|
||||||
ctx := context.Background()
|
|
||||||
ctx = context.WithValue(ctx, client.ClientContextKey, &client.Context{})
|
|
||||||
ctx = context.WithValue(ctx, server.ServerContextKey, server.NewDefaultContext())
|
|
||||||
|
|
||||||
executor := cli.PrepareBaseCmd(rootCmd, "WM", app.DefaultCLIHome)
|
|
||||||
err := executor.ExecuteContext(ctx)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
fmt.Printf("Failed executing CLI command: %s, exiting...\n", err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func queryCommand() *cobra.Command {
|
|
||||||
cmd := &cobra.Command{
|
|
||||||
Use: "query",
|
|
||||||
Aliases: []string{"q"},
|
|
||||||
Short: "Querying subcommands",
|
|
||||||
DisableFlagParsing: true,
|
|
||||||
SuggestionsMinimumDistance: 2,
|
|
||||||
RunE: client.ValidateCmd,
|
|
||||||
}
|
|
||||||
cmd.AddCommand(
|
|
||||||
authcmd.GetAccountCmd(),
|
|
||||||
flags.LineBreak,
|
|
||||||
rpc.ValidatorCommand(),
|
|
||||||
rpc.BlockCommand(),
|
|
||||||
authcmd.QueryTxsByEventsCmd(),
|
|
||||||
authcmd.QueryTxCmd(),
|
|
||||||
flags.LineBreak,
|
|
||||||
)
|
|
||||||
|
|
||||||
app.ModuleBasics.AddQueryCommands(cmd)
|
|
||||||
cmd.PersistentFlags().String(flags.FlagChainID, "", "The network chain ID")
|
|
||||||
|
|
||||||
return cmd
|
|
||||||
}
|
|
||||||
|
|
||||||
func txCommand() *cobra.Command {
|
|
||||||
cmd := &cobra.Command{
|
|
||||||
Use: "tx",
|
|
||||||
Short: "Transactions subcommands",
|
|
||||||
DisableFlagParsing: true,
|
|
||||||
SuggestionsMinimumDistance: 2,
|
|
||||||
RunE: client.ValidateCmd,
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd.AddCommand(
|
|
||||||
bankcmd.NewSendTxCmd(),
|
|
||||||
flags.LineBreak,
|
|
||||||
authcmd.GetSignCommand(),
|
|
||||||
authcmd.GetSignBatchCommand(),
|
|
||||||
authcmd.GetMultiSignCommand(),
|
|
||||||
authcmd.GetValidateSignaturesCommand(),
|
|
||||||
flags.LineBreak,
|
|
||||||
authcmd.GetBroadcastCommand(),
|
|
||||||
authcmd.GetEncodeCommand(),
|
|
||||||
authcmd.GetDecodeCommand(),
|
|
||||||
flags.LineBreak,
|
|
||||||
vestingcli.GetTxCmd(),
|
|
||||||
)
|
|
||||||
|
|
||||||
// add modules' tx commands
|
|
||||||
app.ModuleBasics.AddTxCommands(cmd)
|
|
||||||
|
|
||||||
// remove auth and bank commands as they're mounted under the root tx command
|
|
||||||
var cmdsToRemove []*cobra.Command
|
|
||||||
|
|
||||||
for _, cmd := range cmd.Commands() {
|
|
||||||
if cmd.Use == authtypes.ModuleName || cmd.Use == banktypes.ModuleName {
|
|
||||||
cmdsToRemove = append(cmdsToRemove, cmd)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd.RemoveCommand(cmdsToRemove...)
|
|
||||||
cmd.PersistentFlags().String(flags.FlagChainID, "", "The network chain ID")
|
|
||||||
|
|
||||||
return cmd
|
|
||||||
}
|
|
||||||
@@ -7,6 +7,9 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
"github.com/CosmWasm/wasmd/x/wasm"
|
"github.com/CosmWasm/wasmd/x/wasm"
|
||||||
|
authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli"
|
||||||
|
vestingcli "github.com/cosmos/cosmos-sdk/x/auth/vesting/client/cli"
|
||||||
|
bankcmd "github.com/cosmos/cosmos-sdk/x/bank/client/cli"
|
||||||
"github.com/spf13/cast"
|
"github.com/spf13/cast"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
tmcli "github.com/tendermint/tendermint/libs/cli"
|
tmcli "github.com/tendermint/tendermint/libs/cli"
|
||||||
@@ -27,7 +30,7 @@ import (
|
|||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
"github.com/cosmos/cosmos-sdk/version"
|
"github.com/cosmos/cosmos-sdk/version"
|
||||||
authclient "github.com/cosmos/cosmos-sdk/x/auth/client"
|
authclient "github.com/cosmos/cosmos-sdk/x/auth/client"
|
||||||
"github.com/cosmos/cosmos-sdk/x/auth/types"
|
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||||
"github.com/cosmos/cosmos-sdk/x/crisis"
|
"github.com/cosmos/cosmos-sdk/x/crisis"
|
||||||
genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli"
|
genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli"
|
||||||
@@ -50,7 +53,7 @@ func NewRootCmd() (*cobra.Command, app.EncodingConfig) {
|
|||||||
WithTxConfig(encodingConfig.TxConfig).
|
WithTxConfig(encodingConfig.TxConfig).
|
||||||
WithLegacyAmino(encodingConfig.Amino).
|
WithLegacyAmino(encodingConfig.Amino).
|
||||||
WithInput(os.Stdin).
|
WithInput(os.Stdin).
|
||||||
WithAccountRetriever(types.AccountRetriever{}).
|
WithAccountRetriever(authtypes.AccountRetriever{}).
|
||||||
WithBroadcastMode(flags.BroadcastBlock).
|
WithBroadcastMode(flags.BroadcastBlock).
|
||||||
WithHomeDir(app.DefaultNodeHome)
|
WithHomeDir(app.DefaultNodeHome)
|
||||||
|
|
||||||
@@ -82,7 +85,7 @@ func Execute(rootCmd *cobra.Command) error {
|
|||||||
srvCtx := server.NewDefaultContext()
|
srvCtx := server.NewDefaultContext()
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
ctx = context.WithValue(ctx, client.ClientContextKey, &client.Context{})
|
ctx = context.WithValue(ctx, client.ClientContextKey, &client.Context{})
|
||||||
ctx = context.WithValue(ctx, server.ServerContextKey, server.NewDefaultContext())
|
ctx = context.WithValue(ctx, server.ServerContextKey, srvCtx)
|
||||||
|
|
||||||
rootCmd.PersistentFlags().String("log_level", srvCtx.Config.LogLevel, "The logging level in the format of <module>:<level>,...")
|
rootCmd.PersistentFlags().String("log_level", srvCtx.Config.LogLevel, "The logging level in the format of <module>:<level>,...")
|
||||||
|
|
||||||
@@ -110,6 +113,8 @@ func initRootCmd(rootCmd *cobra.Command, encodingConfig app.EncodingConfig) {
|
|||||||
// add keybase, auxiliary RPC, query, and tx child commands
|
// add keybase, auxiliary RPC, query, and tx child commands
|
||||||
rootCmd.AddCommand(
|
rootCmd.AddCommand(
|
||||||
rpc.StatusCommand(),
|
rpc.StatusCommand(),
|
||||||
|
queryCommand(),
|
||||||
|
txCommand(),
|
||||||
keys.Commands(app.DefaultNodeHome),
|
keys.Commands(app.DefaultNodeHome),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -119,6 +124,73 @@ func addModuleInitFlags(startCmd *cobra.Command) {
|
|||||||
wasm.AddModuleInitFlags(startCmd)
|
wasm.AddModuleInitFlags(startCmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func queryCommand() *cobra.Command {
|
||||||
|
cmd := &cobra.Command{
|
||||||
|
Use: "query",
|
||||||
|
Aliases: []string{"q"},
|
||||||
|
Short: "Querying subcommands",
|
||||||
|
DisableFlagParsing: true,
|
||||||
|
SuggestionsMinimumDistance: 2,
|
||||||
|
RunE: client.ValidateCmd,
|
||||||
|
}
|
||||||
|
cmd.AddCommand(
|
||||||
|
authcmd.GetAccountCmd(),
|
||||||
|
flags.LineBreak,
|
||||||
|
rpc.ValidatorCommand(),
|
||||||
|
rpc.BlockCommand(),
|
||||||
|
authcmd.QueryTxsByEventsCmd(),
|
||||||
|
authcmd.QueryTxCmd(),
|
||||||
|
flags.LineBreak,
|
||||||
|
)
|
||||||
|
|
||||||
|
app.ModuleBasics.AddQueryCommands(cmd)
|
||||||
|
cmd.PersistentFlags().String(flags.FlagChainID, "", "The network chain ID")
|
||||||
|
|
||||||
|
return cmd
|
||||||
|
}
|
||||||
|
|
||||||
|
func txCommand() *cobra.Command {
|
||||||
|
cmd := &cobra.Command{
|
||||||
|
Use: "tx",
|
||||||
|
Short: "Transactions subcommands",
|
||||||
|
DisableFlagParsing: true,
|
||||||
|
SuggestionsMinimumDistance: 2,
|
||||||
|
RunE: client.ValidateCmd,
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd.AddCommand(
|
||||||
|
bankcmd.NewSendTxCmd(),
|
||||||
|
flags.LineBreak,
|
||||||
|
authcmd.GetSignCommand(),
|
||||||
|
authcmd.GetSignBatchCommand(),
|
||||||
|
authcmd.GetMultiSignCommand(),
|
||||||
|
authcmd.GetValidateSignaturesCommand(),
|
||||||
|
flags.LineBreak,
|
||||||
|
authcmd.GetBroadcastCommand(),
|
||||||
|
authcmd.GetEncodeCommand(),
|
||||||
|
authcmd.GetDecodeCommand(),
|
||||||
|
flags.LineBreak,
|
||||||
|
vestingcli.GetTxCmd(),
|
||||||
|
)
|
||||||
|
|
||||||
|
// add modules' tx commands
|
||||||
|
app.ModuleBasics.AddTxCommands(cmd)
|
||||||
|
|
||||||
|
// remove auth and bank commands as they're mounted under the root tx command
|
||||||
|
var cmdsToRemove []*cobra.Command
|
||||||
|
|
||||||
|
for _, cmd := range cmd.Commands() {
|
||||||
|
if cmd.Use == authtypes.ModuleName || cmd.Use == banktypes.ModuleName {
|
||||||
|
cmdsToRemove = append(cmdsToRemove, cmd)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd.RemoveCommand(cmdsToRemove...)
|
||||||
|
cmd.PersistentFlags().String(flags.FlagChainID, "", "The network chain ID")
|
||||||
|
|
||||||
|
return cmd
|
||||||
|
}
|
||||||
|
|
||||||
func newApp(logger log.Logger, db dbm.DB, traceStore io.Writer, appOpts servertypes.AppOptions) servertypes.Application {
|
func newApp(logger log.Logger, db dbm.DB, traceStore io.Writer, appOpts servertypes.AppOptions) servertypes.Application {
|
||||||
var cache sdk.MultiStorePersistentCache
|
var cache sdk.MultiStorePersistentCache
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +1,18 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -o errexit -o nounset -o pipefail
|
set -o errexit -o nounset -o pipefail
|
||||||
|
|
||||||
BASE_ACCOUNT=$(wasmcli keys show validator -a)
|
BASE_ACCOUNT=$(wasmd keys show validator -a)
|
||||||
wasmcli q account "$BASE_ACCOUNT" -o json | jq
|
wasmd q account "$BASE_ACCOUNT" -o json | jq
|
||||||
|
|
||||||
echo "## Add new account"
|
echo "## Add new account"
|
||||||
wasmcli keys add fred
|
wasmd keys add fred
|
||||||
|
|
||||||
echo "## Check balance"
|
echo "## Check balance"
|
||||||
NEW_ACCOUNT=$(wasmcli keys show fred -a)
|
NEW_ACCOUNT=$(wasmd keys show fred -a)
|
||||||
wasmcli q bank balances "$NEW_ACCOUNT" -o json || true
|
wasmd q bank balances "$NEW_ACCOUNT" -o json || true
|
||||||
|
|
||||||
echo "## Transfer tokens"
|
echo "## Transfer tokens"
|
||||||
wasmcli tx send validator "$NEW_ACCOUNT" 1ustake --gas 1000000 -y --chain-id=testing --node=http://localhost:26657 -b block | jq
|
wasmd tx send validator "$NEW_ACCOUNT" 1ustake --gas 1000000 -y --chain-id=testing --node=http://localhost:26657 -b block | jq
|
||||||
|
|
||||||
echo "## Check balance again"
|
echo "## Check balance again"
|
||||||
wasmcli q bank balances "$NEW_ACCOUNT" -o json | jq
|
wasmd q bank balances "$NEW_ACCOUNT" -o json | jq
|
||||||
|
|||||||
@@ -5,80 +5,80 @@ DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
|
|||||||
|
|
||||||
echo "-----------------------"
|
echo "-----------------------"
|
||||||
echo "## Add new CosmWasm contract"
|
echo "## Add new CosmWasm contract"
|
||||||
RESP=$(wasmcli tx wasm store "$DIR/../../x/wasm/internal/keeper/testdata/hackatom.wasm" \
|
RESP=$(wasmd tx wasm store "$DIR/../../x/wasm/internal/keeper/testdata/hackatom.wasm" \
|
||||||
--from validator --gas 1000000 -y --chain-id=testing --node=http://localhost:26657 -b block)
|
--from validator --gas 1000000 -y --chain-id=testing --node=http://localhost:26657 -b block)
|
||||||
|
|
||||||
CODE_ID=$(echo "$RESP" | jq -r '.logs[0].events[0].attributes[-1].value')
|
CODE_ID=$(echo "$RESP" | jq -r '.logs[0].events[0].attributes[-1].value')
|
||||||
echo "* Code id: $CODE_ID"
|
echo "* Code id: $CODE_ID"
|
||||||
echo "* Download code"
|
echo "* Download code"
|
||||||
TMPDIR=$(mktemp -t wasmcliXXXX)
|
TMPDIR=$(mktemp -t wasmdXXXX)
|
||||||
wasmcli q wasm code "$CODE_ID" "$TMPDIR"
|
wasmd q wasm code "$CODE_ID" "$TMPDIR"
|
||||||
rm -f "$TMPDIR"
|
rm -f "$TMPDIR"
|
||||||
echo "-----------------------"
|
echo "-----------------------"
|
||||||
echo "## List code"
|
echo "## List code"
|
||||||
wasmcli query wasm list-code --node=http://localhost:26657 --chain-id=testing | jq
|
wasmd query wasm list-code --node=http://localhost:26657 --chain-id=testing | jq
|
||||||
|
|
||||||
echo "-----------------------"
|
echo "-----------------------"
|
||||||
echo "## Create new contract instance"
|
echo "## Create new contract instance"
|
||||||
INIT="{\"verifier\":\"$(wasmcli keys show validator -a)\", \"beneficiary\":\"$(wasmcli keys show fred -a)\"}"
|
INIT="{\"verifier\":\"$(wasmd keys show validator -a)\", \"beneficiary\":\"$(wasmd keys show fred -a)\"}"
|
||||||
wasmcli tx wasm instantiate "$CODE_ID" "$INIT" --admin=$(wasmcli keys show validator -a) \
|
wasmd tx wasm instantiate "$CODE_ID" "$INIT" --admin=$(wasmd keys show validator -a) \
|
||||||
--from validator --amount="100ustake" --label "local0.1.0" \
|
--from validator --amount="100ustake" --label "local0.1.0" \
|
||||||
--gas 1000000 -y --chain-id=testing -b block | jq
|
--gas 1000000 -y --chain-id=testing -b block | jq
|
||||||
|
|
||||||
CONTRACT=$(wasmcli query wasm list-contract-by-code "$CODE_ID" -o json | jq -r '.[0].address')
|
CONTRACT=$(wasmd query wasm list-contract-by-code "$CODE_ID" -o json | jq -r '.[0].address')
|
||||||
echo "* Contract address: $CONTRACT"
|
echo "* Contract address: $CONTRACT"
|
||||||
echo "### Query all"
|
echo "### Query all"
|
||||||
RESP=$(wasmcli query wasm contract-state all "$CONTRACT" -o json)
|
RESP=$(wasmd query wasm contract-state all "$CONTRACT" -o json)
|
||||||
echo "$RESP"
|
echo "$RESP"
|
||||||
echo "### Query smart"
|
echo "### Query smart"
|
||||||
wasmcli query wasm contract-state smart "$CONTRACT" '{"verifier":{}}' -o json | jq
|
wasmd query wasm contract-state smart "$CONTRACT" '{"verifier":{}}' -o json | jq
|
||||||
echo "### Query raw"
|
echo "### Query raw"
|
||||||
KEY=$(echo "$RESP" | jq -r ".[0].key")
|
KEY=$(echo "$RESP" | jq -r ".[0].key")
|
||||||
wasmcli query wasm contract-state raw "$CONTRACT" "$KEY" -o json
|
wasmd query wasm contract-state raw "$CONTRACT" "$KEY" -o json
|
||||||
|
|
||||||
|
|
||||||
echo "-----------------------"
|
echo "-----------------------"
|
||||||
echo "## Execute contract $CONTRACT"
|
echo "## Execute contract $CONTRACT"
|
||||||
MSG='{"release":{}}'
|
MSG='{"release":{}}'
|
||||||
wasmcli tx wasm execute "$CONTRACT" "$MSG" \
|
wasmd tx wasm execute "$CONTRACT" "$MSG" \
|
||||||
--from validator \
|
--from validator \
|
||||||
--gas 1000000 -y --chain-id=testing -b block | jq
|
--gas 1000000 -y --chain-id=testing -b block | jq
|
||||||
|
|
||||||
|
|
||||||
echo "-----------------------"
|
echo "-----------------------"
|
||||||
echo "## Set new admin"
|
echo "## Set new admin"
|
||||||
echo "### Query old admin: $(wasmcli q wasm contract $CONTRACT -o json | jq -r '.admin')"
|
echo "### Query old admin: $(wasmd q wasm contract $CONTRACT -o json | jq -r '.admin')"
|
||||||
echo "### Update contract"
|
echo "### Update contract"
|
||||||
wasmcli tx wasm set-contract-admin "$CONTRACT" $(wasmcli keys show fred -a) \
|
wasmd tx wasm set-contract-admin "$CONTRACT" $(wasmd keys show fred -a) \
|
||||||
--from validator -y --chain-id=testing -b block | jq
|
--from validator -y --chain-id=testing -b block | jq
|
||||||
echo "### Query new admin: $(wasmcli q wasm contract $CONTRACT -o json | jq -r '.admin')"
|
echo "### Query new admin: $(wasmd q wasm contract $CONTRACT -o json | jq -r '.admin')"
|
||||||
|
|
||||||
|
|
||||||
echo "-----------------------"
|
echo "-----------------------"
|
||||||
echo "## Migrate contract"
|
echo "## Migrate contract"
|
||||||
echo "### Upload new code"
|
echo "### Upload new code"
|
||||||
RESP=$(wasmcli tx wasm store "$DIR/../../x/wasm/internal/keeper/testdata/burner.wasm" \
|
RESP=$(wasmd tx wasm store "$DIR/../../x/wasm/internal/keeper/testdata/burner.wasm" \
|
||||||
--from validator --gas 1000000 -y --chain-id=testing --node=http://localhost:26657 -b block)
|
--from validator --gas 1000000 -y --chain-id=testing --node=http://localhost:26657 -b block)
|
||||||
|
|
||||||
BURNER_CODE_ID=$(echo "$RESP" | jq -r '.logs[0].events[0].attributes[-1].value')
|
BURNER_CODE_ID=$(echo "$RESP" | jq -r '.logs[0].events[0].attributes[-1].value')
|
||||||
echo "### Migrate to code id: $BURNER_CODE_ID"
|
echo "### Migrate to code id: $BURNER_CODE_ID"
|
||||||
|
|
||||||
DEST_ACCOUNT=$(wasmcli keys show fred -a)
|
DEST_ACCOUNT=$(wasmd keys show fred -a)
|
||||||
wasmcli tx wasm migrate "$CONTRACT" "$BURNER_CODE_ID" "{\"payout\": \"$DEST_ACCOUNT\"}" --from fred \
|
wasmd tx wasm migrate "$CONTRACT" "$BURNER_CODE_ID" "{\"payout\": \"$DEST_ACCOUNT\"}" --from fred \
|
||||||
--chain-id=testing -b block -y | jq
|
--chain-id=testing -b block -y | jq
|
||||||
|
|
||||||
echo "### Query destination account: $BURNER_CODE_ID"
|
echo "### Query destination account: $BURNER_CODE_ID"
|
||||||
wasmcli q bank balances "$DEST_ACCOUNT" -o json | jq
|
wasmd q bank balances "$DEST_ACCOUNT" -o json | jq
|
||||||
echo "### Query contract meta data: $CONTRACT"
|
echo "### Query contract meta data: $CONTRACT"
|
||||||
wasmcli q wasm contract "$CONTRACT" -o json | jq
|
wasmd q wasm contract "$CONTRACT" -o json | jq
|
||||||
|
|
||||||
echo "### Query contract meta history: $CONTRACT"
|
echo "### Query contract meta history: $CONTRACT"
|
||||||
wasmcli q wasm contract-history "$CONTRACT" -o json | jq
|
wasmd q wasm contract-history "$CONTRACT" -o json | jq
|
||||||
|
|
||||||
echo "-----------------------"
|
echo "-----------------------"
|
||||||
echo "## Clear contract admin"
|
echo "## Clear contract admin"
|
||||||
echo "### Query old admin: $(wasmcli q wasm contract $CONTRACT -o json | jq -r '.admin')"
|
echo "### Query old admin: $(wasmd q wasm contract $CONTRACT -o json | jq -r '.admin')"
|
||||||
echo "### Update contract"
|
echo "### Update contract"
|
||||||
wasmcli tx wasm clear-contract-admin "$CONTRACT" \
|
wasmd tx wasm clear-contract-admin "$CONTRACT" \
|
||||||
--from fred -y --chain-id=testing -b block | jq
|
--from fred -y --chain-id=testing -b block | jq
|
||||||
echo "### Query new admin: $(wasmcli q wasm contract $CONTRACT -o json | jq -r '.admin')"
|
echo "### Query new admin: $(wasmd q wasm contract $CONTRACT -o json | jq -r '.admin')"
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ wasmd init --chain-id "$CHAIN_ID" "$MONIKER"
|
|||||||
# staking/governance token is hardcoded in config, change this
|
# staking/governance token is hardcoded in config, change this
|
||||||
## OSX requires: -i.
|
## OSX requires: -i.
|
||||||
sed -i. "s/\"stake\"/\"$STAKE\"/" "$HOME"/.wasmd/config/genesis.json
|
sed -i. "s/\"stake\"/\"$STAKE\"/" "$HOME"/.wasmd/config/genesis.json
|
||||||
if ! wasmcli keys show validator; then
|
if ! wasmd keys show validator; then
|
||||||
(echo "$PASSWORD"; echo "$PASSWORD") | wasmcli keys add validator
|
(echo "$PASSWORD"; echo "$PASSWORD") | wasmd keys add validator
|
||||||
fi
|
fi
|
||||||
# hardcode the validator account for this instance
|
# hardcode the validator account for this instance
|
||||||
echo "$PASSWORD" | wasmd add-genesis-account validator "1000000000$STAKE,1000000000$FEE"
|
echo "$PASSWORD" | wasmd add-genesis-account validator "1000000000$STAKE,1000000000$FEE"
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
tail -f /root/log/wasmd.log
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
#set -euo pipefail
|
|
||||||
|
|
||||||
wasmcli rest-server --laddr tcp://0.0.0.0:1317 --trust-node --unsafe-cors
|
|
||||||
@@ -3,7 +3,6 @@
|
|||||||
if test -n "$1"; then
|
if test -n "$1"; then
|
||||||
# need -R not -r to copy hidden files
|
# need -R not -r to copy hidden files
|
||||||
cp -R "$1/.wasmd" /root
|
cp -R "$1/.wasmd" /root
|
||||||
cp -R "$1/.wasmcli" /root
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mkdir -p /root/log
|
mkdir -p /root/log
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ MONIKER=${MONIKER:-node001}
|
|||||||
wasmd init --chain-id "$CHAIN_ID" "$MONIKER"
|
wasmd init --chain-id "$CHAIN_ID" "$MONIKER"
|
||||||
# staking/governance token is hardcoded in config, change this
|
# staking/governance token is hardcoded in config, change this
|
||||||
sed -i "s/\"stake\"/\"$STAKE\"/" "$HOME"/.wasmd/config/genesis.json
|
sed -i "s/\"stake\"/\"$STAKE\"/" "$HOME"/.wasmd/config/genesis.json
|
||||||
if ! wasmcli keys show validator; then
|
if ! wasmd keys show validator; then
|
||||||
(echo "$PASSWORD"; echo "$PASSWORD") | wasmcli keys add validator
|
(echo "$PASSWORD"; echo "$PASSWORD") | wasmd keys add validator
|
||||||
fi
|
fi
|
||||||
# hardcode the validator account for this instance
|
# hardcode the validator account for this instance
|
||||||
echo "$PASSWORD" | wasmd add-genesis-account validator "1000000000$STAKE,1000000000$FEE"
|
echo "$PASSWORD" | wasmd add-genesis-account validator "1000000000$STAKE,1000000000$FEE"
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ As gov proposals bypass the existing authorzation policy they are diabled and re
|
|||||||
## CLI
|
## CLI
|
||||||
|
|
||||||
```shell script
|
```shell script
|
||||||
wasmcli tx gov submit-proposal [command]
|
wasmd tx gov submit-proposal [command]
|
||||||
|
|
||||||
Available Commands:
|
Available Commands:
|
||||||
wasm-store Submit a wasm binary proposal
|
wasm-store Submit a wasm binary proposal
|
||||||
|
|||||||
Reference in New Issue
Block a user