Merge branch 'develop' into bucky/gaiadebug-bech32

This commit is contained in:
Rigel 2018-06-28 15:25:32 -04:00 committed by GitHub
commit b07a4654ff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 54 additions and 3 deletions

View File

@ -45,6 +45,7 @@ FEATURES
* [types] Switches internal representation of Int/Uint/Rat to use pointers * [types] Switches internal representation of Int/Uint/Rat to use pointers
* [gaiad] unsafe_reset_all now resets addrbook.json * [gaiad] unsafe_reset_all now resets addrbook.json
* [democoin] add x/oracle, x/assoc * [democoin] add x/oracle, x/assoc
* [gaiacli] added an --async flag to the cli to deliver transactions without waiting for a tendermint response
FIXES FIXES
* [gaia] Added self delegation for validators in the genesis creation * [gaia] Added self delegation for validators in the genesis creation

View File

@ -44,6 +44,22 @@ func (ctx CoreContext) BroadcastTx(tx []byte) (*ctypes.ResultBroadcastTxCommit,
return res, err return res, err
} }
// Broadcast the transaction bytes to Tendermint
func (ctx CoreContext) BroadcastTxAsync(tx []byte) (*ctypes.ResultBroadcastTx, error) {
node, err := ctx.GetNode()
if err != nil {
return nil, err
}
res, err := node.BroadcastTxAsync(tx)
if err != nil {
return res, err
}
return res, err
}
// Query information about the connected node // Query information about the connected node
func (ctx CoreContext) Query(path string) (res []byte, err error) { func (ctx CoreContext) Query(path string) (res []byte, err error) {
return ctx.query(path, nil) return ctx.query(path, nil)
@ -160,8 +176,7 @@ func (ctx CoreContext) SignAndBuild(name, passphrase string, msgs []sdk.Msg, cdc
} }
// sign and build the transaction from the msg // sign and build the transaction from the msg
func (ctx CoreContext) EnsureSignBuildBroadcast(name string, msgs []sdk.Msg, cdc *wire.Codec) (res *ctypes.ResultBroadcastTxCommit, err error) { func (ctx CoreContext) ensureSignBuild(name string, msgs []sdk.Msg, cdc *wire.Codec) (tyBytes []byte, err error) {
ctx, err = EnsureAccountNumber(ctx) ctx, err = EnsureAccountNumber(ctx)
if err != nil { if err != nil {
return nil, err return nil, err
@ -182,9 +197,31 @@ func (ctx CoreContext) EnsureSignBuildBroadcast(name string, msgs []sdk.Msg, cdc
return nil, err return nil, err
} }
return txBytes, err
}
// sign and build the transaction from the msg
func (ctx CoreContext) EnsureSignBuildBroadcast(name string, msgs []sdk.Msg, cdc *wire.Codec) (res *ctypes.ResultBroadcastTxCommit, err error) {
txBytes, err := ctx.ensureSignBuild(name, msgs, cdc)
if err != nil {
return nil, err
}
return ctx.BroadcastTx(txBytes) return ctx.BroadcastTx(txBytes)
} }
// sign and build the async transaction from the msg
func (ctx CoreContext) EnsureSignBuildBroadcastAsync(name string, msgs []sdk.Msg, cdc *wire.Codec) (res *ctypes.ResultBroadcastTx, err error) {
txBytes, err := ctx.ensureSignBuild(name, msgs, cdc)
if err != nil {
return nil, err
}
return ctx.BroadcastTxAsync(txBytes)
}
// get the next sequence for the account address // get the next sequence for the account address
func (ctx CoreContext) GetAccountNumber(address []byte) (int64, error) { func (ctx CoreContext) GetAccountNumber(address []byte) (int64, error) {
if ctx.Decoder == nil { if ctx.Decoder == nil {

View File

@ -56,7 +56,7 @@ func defaultChainID() (string, error) {
return doc.ChainID, nil return doc.ChainID, nil
} }
// EnsureSequence - automatically set sequence number if none provided // EnsureAccount - automatically set account number if none provided
func EnsureAccountNumber(ctx CoreContext) (CoreContext, error) { func EnsureAccountNumber(ctx CoreContext) (CoreContext, error) {
// Should be viper.IsSet, but this does not work - https://github.com/spf13/viper/pull/331 // Should be viper.IsSet, but this does not work - https://github.com/spf13/viper/pull/331
if viper.GetInt64(client.FlagAccountNumber) != 0 { if viper.GetInt64(client.FlagAccountNumber) != 0 {

View File

@ -16,6 +16,7 @@ import (
const ( const (
flagTo = "to" flagTo = "to"
flagAmount = "amount" flagAmount = "amount"
flagAsync = "async"
) )
// SendTxCommand will create a send tx and sign it with the given key // SendTxCommand will create a send tx and sign it with the given key
@ -47,16 +48,28 @@ func SendTxCmd(cdc *wire.Codec) *cobra.Command {
// build and sign the transaction, then broadcast to Tendermint // build and sign the transaction, then broadcast to Tendermint
msg := client.BuildMsg(from, to, coins) msg := client.BuildMsg(from, to, coins)
if viper.GetBool(flagAsync) {
res, err := ctx.EnsureSignBuildBroadcastAsync(ctx.FromAddressName, []sdk.Msg{msg}, cdc)
if err != nil {
return err
}
fmt.Println("Async tx sent. tx hash: ", res.Hash.String())
return nil
}
res, err := ctx.EnsureSignBuildBroadcast(ctx.FromAddressName, []sdk.Msg{msg}, cdc) res, err := ctx.EnsureSignBuildBroadcast(ctx.FromAddressName, []sdk.Msg{msg}, cdc)
if err != nil { if err != nil {
return err return err
} }
fmt.Printf("Committed at block %d. Hash: %s\n", res.Height, res.Hash.String()) fmt.Printf("Committed at block %d. Hash: %s\n", res.Height, res.Hash.String())
return nil return nil
}, },
} }
cmd.Flags().String(flagTo, "", "Address to send coins") cmd.Flags().String(flagTo, "", "Address to send coins")
cmd.Flags().String(flagAmount, "", "Amount of coins to send") cmd.Flags().String(flagAmount, "", "Amount of coins to send")
cmd.Flags().Bool(flagAsync, false, "Pass the async flag to send a tx without waiting for the tx to be included in a block")
return cmd return cmd
} }