Integrate IBC more and more into basecli

This commit is contained in:
Adrian Brink 2018-03-15 17:26:21 +01:00
parent 8a99041512
commit 1447bcf139
No known key found for this signature in database
GPG Key ID: F61053D3FBD06353
6 changed files with 33 additions and 87 deletions

View File

@ -17,6 +17,7 @@ import (
"github.com/cosmos/cosmos-sdk/version"
authcmd "github.com/cosmos/cosmos-sdk/x/auth/commands"
bankcmd "github.com/cosmos/cosmos-sdk/x/bank/commands"
ibccmd "github.com/cosmos/cosmos-sdk/x/ibc/commands"
"github.com/cosmos/cosmos-sdk/examples/basecoin/app"
"github.com/cosmos/cosmos-sdk/examples/basecoin/types"
@ -64,6 +65,11 @@ func main() {
client.PostCommands(
coolcmd.SetTrendTxCmd(cdc),
)...)
basecliCmd.AddCommand(
client.PostCommands(
ibccmd.IBCTransferCmd(cdc),
)...)
)
// add proxy, version and key info
basecliCmd.AddCommand(

View File

@ -1,4 +1,4 @@
package main
zRckage main
import (
"encoding/json"

View File

@ -1,10 +0,0 @@
package commands
const (
flagTo = "to"
flagAmount = "amount"
flagChain = "chain"
flagChain1 = "chain1"
flagChain2 = "chain2"
flagSequence = "sequence"
)

View File

@ -1,61 +0,0 @@
package commands
import (
"fmt"
"github.com/spf13/viper"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/keys"
sdk "github.com/cosmos/cosmos-sdk/types"
wire "github.com/cosmos/cosmos-sdk/wire"
)
func buildTx(cdc *wire.Codec, msg sdk.Msg) ([]byte, error) {
keybase, err := keys.GetKeyBase()
if err != nil {
return nil, err
}
name := viper.GetString(client.FlagName)
bz := msg.GetSignBytes()
buf := client.BufferStdin()
prompt := fmt.Sprintf("Password to sign with '%s':", name)
passphrase, err := client.GetPassword(prompt, buf)
if err != nil {
return nil, err
}
sig, pubkey, err := keybase.Sign(name, passphrase, bz)
if err != nil {
return nil, err
}
sigs := []sdk.StdSignature{{
PubKey: pubkey,
Signature: sig,
Sequence: viper.GetInt64(flagSequence),
}}
tx := sdk.NewStdTx(msg, sigs)
txBytes, err := cdc.MarshalBinary(tx)
if err != nil {
return nil, err
}
return txBytes, nil
}
func getAddress() []byte {
keybase, err := keys.GetKeyBase()
if err != nil {
panic(err)
}
name := viper.GetString(client.FlagName)
info, err := keybase.Get(name)
if err != nil {
panic(err)
}
return info.Address()
}

View File

@ -16,9 +16,14 @@ import (
"github.com/cosmos/cosmos-sdk/x/ibc"
)
const (
flagTo = "to"
flagAmount = "amount"
flagChain = "chain"
)
func IBCTransferCmd(cdc *wire.Codec) *cobra.Command {
cmdr := sendCommander{cdc}
cmd := &cobra.Command{
Use: "send",
RunE: cmdr.runIBCTransfer,
@ -33,19 +38,18 @@ type sendCommander struct {
cdc *wire.Codec
}
func (c sendCommander) runIBCTransfer(cmd *cobra.Command, args []string) error {
address := getAddress()
msg, err := buildMsg(address)
func (c commander) sendIBCTransfer(cmd *cobra.Command, args []string) error {
from, err := builder.GetFromAddress()
if err != nil {
return err
}
txBytes, err := buildTx(c.cdc, msg)
msg, err := buildMsg(from)
if err != nil {
return err
}
res, err := builder.BroadcastTx(txBytes)
res, err := builder.SignBuildBroadcast(msg, c.cdc)
if err != nil {
return err
}
@ -66,15 +70,10 @@ func buildMsg(from sdk.Address) (sdk.Msg, error) {
if err != nil {
return nil, err
}
to := sdk.Address(bz)
return ibc.IBCTransferMsg{
IBCPacket: ibc.IBCPacket{
SrcAddr: from,
DestAddr: to,
Coins: coins,
SrcChain: viper.GetString(client.FlagNode),
DestChain: viper.GetString(flagChain),
},
}, nil
msg := ibc.NewIBCPacket(from, to, coins, viper.GetString(client.FlagNode),
viper.GetString(flagChain))
return msg, nil
}

View File

@ -19,6 +19,18 @@ type IBCPacket struct {
DestChain string
}
func NewIBCPacket(srcAddr sdk.Address, destAddr sdk.Address, coins sdk.Coins,
srcChain string, destChain string) IBCPacket {
return IBCPacket{
SrcAddr: srcAddr,
DestAddr: destAddr,
Coins: coins,
SrcChain: srcChain,
DestChain: destChain,
}
}
// ----------------------------------
// IBCTransferMsg