116 lines
3.2 KiB
Go
116 lines
3.2 KiB
Go
package context
|
|
|
|
import (
|
|
"io"
|
|
|
|
"github.com/cosmos/cosmos-sdk/client"
|
|
"github.com/cosmos/cosmos-sdk/wire"
|
|
"github.com/cosmos/cosmos-sdk/x/auth"
|
|
|
|
"github.com/spf13/viper"
|
|
|
|
rpcclient "github.com/tendermint/tendermint/rpc/client"
|
|
)
|
|
|
|
const ctxAccStoreName = "acc"
|
|
|
|
// CLIContext implements a typical CLI context created in SDK modules for
|
|
// transaction handling and queries.
|
|
type CLIContext struct {
|
|
Codec *wire.Codec
|
|
AccDecoder auth.AccountDecoder
|
|
Client rpcclient.Client
|
|
Logger io.Writer
|
|
Height int64
|
|
NodeURI string
|
|
FromAddressName string
|
|
AccountStore string
|
|
TrustNode bool
|
|
UseLedger bool
|
|
Async bool
|
|
JSON bool
|
|
PrintResponse bool
|
|
}
|
|
|
|
// NewCLIContext returns a new initialized CLIContext with parameters from the
|
|
// command line using Viper.
|
|
func NewCLIContext() CLIContext {
|
|
var rpc rpcclient.Client
|
|
|
|
nodeURI := viper.GetString(client.FlagNode)
|
|
if nodeURI != "" {
|
|
rpc = rpcclient.NewHTTP(nodeURI, "/websocket")
|
|
}
|
|
|
|
return CLIContext{
|
|
Client: rpc,
|
|
NodeURI: nodeURI,
|
|
AccountStore: ctxAccStoreName,
|
|
FromAddressName: viper.GetString(client.FlagFrom),
|
|
Height: viper.GetInt64(client.FlagHeight),
|
|
TrustNode: viper.GetBool(client.FlagTrustNode),
|
|
UseLedger: viper.GetBool(client.FlagUseLedger),
|
|
Async: viper.GetBool(client.FlagAsync),
|
|
JSON: viper.GetBool(client.FlagJson),
|
|
PrintResponse: viper.GetBool(client.FlagPrintResponse),
|
|
}
|
|
}
|
|
|
|
// WithCodec returns a copy of the context with an updated codec.
|
|
func (ctx CLIContext) WithCodec(cdc *wire.Codec) CLIContext {
|
|
ctx.Codec = cdc
|
|
return ctx
|
|
}
|
|
|
|
// WithAccountDecoder returns a copy of the context with an updated account
|
|
// decoder.
|
|
func (ctx CLIContext) WithAccountDecoder(decoder auth.AccountDecoder) CLIContext {
|
|
ctx.AccDecoder = decoder
|
|
return ctx
|
|
}
|
|
|
|
// WithLogger returns a copy of the context with an updated logger.
|
|
func (ctx CLIContext) WithLogger(w io.Writer) CLIContext {
|
|
ctx.Logger = w
|
|
return ctx
|
|
}
|
|
|
|
// WithAccountStore returns a copy of the context with an updated AccountStore.
|
|
func (ctx CLIContext) WithAccountStore(accountStore string) CLIContext {
|
|
ctx.AccountStore = accountStore
|
|
return ctx
|
|
}
|
|
|
|
// WithFromAddressName returns a copy of the context with an updated from
|
|
// address.
|
|
func (ctx CLIContext) WithFromAddressName(addrName string) CLIContext {
|
|
ctx.FromAddressName = addrName
|
|
return ctx
|
|
}
|
|
|
|
// WithTrustNode returns a copy of the context with an updated TrustNode flag.
|
|
func (ctx CLIContext) WithTrustNode(trustNode bool) CLIContext {
|
|
ctx.TrustNode = trustNode
|
|
return ctx
|
|
}
|
|
|
|
// WithNodeURI returns a copy of the context with an updated node URI.
|
|
func (ctx CLIContext) WithNodeURI(nodeURI string) CLIContext {
|
|
ctx.NodeURI = nodeURI
|
|
ctx.Client = rpcclient.NewHTTP(nodeURI, "/websocket")
|
|
return ctx
|
|
}
|
|
|
|
// WithClient returns a copy of the context with an updated RPC client
|
|
// instance.
|
|
func (ctx CLIContext) WithClient(client rpcclient.Client) CLIContext {
|
|
ctx.Client = client
|
|
return ctx
|
|
}
|
|
|
|
// WithUseLedger returns a copy of the context with an updated UseLedger flag.
|
|
func (ctx CLIContext) WithUseLedger(useLedger bool) CLIContext {
|
|
ctx.UseLedger = useLedger
|
|
return ctx
|
|
}
|