cosmos-sdk/cmd/basecli/counter/counter.go

86 lines
2.1 KiB
Go
Raw Normal View History

2017-05-16 16:14:31 -07:00
package counter
import (
2017-05-16 14:53:58 -07:00
flag "github.com/spf13/pflag"
"github.com/spf13/viper"
2017-05-16 16:14:31 -07:00
crypto "github.com/tendermint/go-crypto"
wire "github.com/tendermint/go-wire"
2017-05-16 14:53:58 -07:00
lightclient "github.com/tendermint/light-client"
"github.com/tendermint/light-client/commands"
"github.com/tendermint/light-client/commands/txs"
2017-05-16 16:14:31 -07:00
bcmd "github.com/tendermint/basecoin/cmd/basecli/commands"
"github.com/tendermint/basecoin/plugins/counter"
2017-05-16 14:53:58 -07:00
btypes "github.com/tendermint/basecoin/types"
)
type CounterPresenter struct{}
func (_ CounterPresenter) MakeKey(str string) ([]byte, error) {
key := counter.New().StateKey()
return key, nil
}
func (_ CounterPresenter) ParseData(raw []byte) (interface{}, error) {
var cp counter.CounterPluginState
err := wire.ReadBinaryBytes(raw, &cp)
return cp, err
}
2017-05-16 14:53:58 -07:00
/**** build out the tx ****/
var (
_ txs.ReaderMaker = CounterTxMaker{}
_ lightclient.TxReader = CounterTxReader{}
)
type CounterTxMaker struct{}
func (m CounterTxMaker) MakeReader() (lightclient.TxReader, error) {
chainID := viper.GetString(commands.ChainFlag)
2017-05-16 16:14:31 -07:00
return CounterTxReader{bcmd.AppTxReader{ChainID: chainID}}, nil
2017-05-16 14:53:58 -07:00
}
// define flags
type CounterFlags struct {
2017-05-16 16:14:31 -07:00
bcmd.AppFlags `mapstructure:",squash"`
Valid bool
CountFee string
2017-05-16 14:53:58 -07:00
}
func (m CounterTxMaker) Flags() (*flag.FlagSet, interface{}) {
2017-05-16 16:14:31 -07:00
fs, app := bcmd.AppFlagSet()
2017-05-16 14:53:58 -07:00
fs.String("countfee", "", "Coins to send in the format <amt><coin>,<amt><coin>...")
fs.Bool("valid", false, "Is count valid?")
return fs, &CounterFlags{AppFlags: app}
}
// parse flags
type CounterTxReader struct {
2017-05-16 16:14:31 -07:00
App bcmd.AppTxReader
2017-05-16 14:53:58 -07:00
}
2017-05-16 16:14:31 -07:00
func (t CounterTxReader) ReadTxJSON(data []byte, pk crypto.PubKey) (interface{}, error) {
2017-05-16 14:53:58 -07:00
// TODO: something. maybe?
2017-05-16 16:14:31 -07:00
return t.App.ReadTxJSON(data, pk)
2017-05-16 14:53:58 -07:00
}
2017-05-16 16:14:31 -07:00
func (t CounterTxReader) ReadTxFlags(flags interface{}, pk crypto.PubKey) (interface{}, error) {
2017-05-16 14:53:58 -07:00
data := flags.(*CounterFlags)
countFee, err := btypes.ParseCoins(data.CountFee)
if err != nil {
return nil, err
}
ctx := counter.CounterTx{
Valid: viper.GetBool("valid"),
Fee: countFee,
}
txBytes := wire.BinaryBytes(ctx)
2017-05-16 16:14:31 -07:00
return t.App.ReadTxFlags(&data.AppFlags, counter.New().Name(), txBytes, pk)
2017-05-16 14:53:58 -07:00
}