Add wrap tx builder to TxConfig (#6836)

* Add wrap tx builder

* Add tests

* update for StdTx

* fix StdTxConfig

* Update generator

* Add godoc

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
This commit is contained in:
SaReN 2020-07-25 03:54:57 +05:30 committed by GitHub
parent 80f7ff62f7
commit 928f7fccff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 44 additions and 2 deletions

View File

@ -6,12 +6,11 @@ import (
"github.com/stretchr/testify/suite"
"github.com/tendermint/tendermint/crypto"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/crypto/types/multisig"
"github.com/cosmos/cosmos-sdk/testutil/testdata"
"github.com/cosmos/cosmos-sdk/x/auth/signing"
"github.com/cosmos/cosmos-sdk/client"
signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing"
sdk "github.com/cosmos/cosmos-sdk/types"
@ -286,3 +285,22 @@ func (s *TxConfigTestSuite) TestTxEncodeDecode() {
s.Require().Equal([][]byte{dummySig}, tx3.GetSignatures())
s.Require().Equal([]crypto.PubKey{pubkey}, tx3.GetPubKeys())
}
func (s *TxConfigTestSuite) TestWrapTxBuilder() {
_, _, addr := testdata.KeyTestPubAddr()
feeAmount := sdk.Coins{sdk.NewInt64Coin("atom", 150)}
gasLimit := uint64(50000)
memo := "foomemo"
msg := testdata.NewTestMsg(addr)
txBuilder := s.TxConfig.NewTxBuilder()
txBuilder.SetFeeAmount(feeAmount)
txBuilder.SetGasLimit(gasLimit)
txBuilder.SetMemo(memo)
err := txBuilder.SetMsgs(msg)
s.Require().NoError(err)
newTxBldr, err := s.TxConfig.WrapTxBuilder(txBuilder.GetTx())
s.Require().NoError(err)
s.Require().Equal(txBuilder, newTxBldr)
}

View File

@ -12,6 +12,7 @@ type (
// implement TxBuilder.
TxConfig interface {
NewTxBuilder() TxBuilder
WrapTxBuilder(sdk.Tx) (TxBuilder, error)
SignModeHandler() signing.SignModeHandler
TxEncoder() sdk.TxEncoder

View File

@ -1,6 +1,8 @@
package tx
import (
"fmt"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/crypto/types"
@ -35,6 +37,16 @@ func (g generator) NewTxBuilder() client.TxBuilder {
return newBuilder(g.marshaler, g.pubkeyCodec)
}
// WrapTxBuilder returns a builder from provided transaction
func (g generator) WrapTxBuilder(newTx sdk.Tx) (client.TxBuilder, error) {
newBuilder, ok := newTx.(*builder)
if !ok {
return nil, fmt.Errorf("expected %T, got %T", &builder{}, newTx)
}
return newBuilder, nil
}
func (g generator) SignModeHandler() signing.SignModeHandler {
return g.handler
}

View File

@ -1,6 +1,8 @@
package types
import (
"fmt"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/codec/legacy"
@ -92,6 +94,15 @@ func (s StdTxConfig) NewTxBuilder() client.TxBuilder {
}
}
// WrapTxBuilder returns a StdTxBuilder from provided transaction
func (s StdTxConfig) WrapTxBuilder(newTx sdk.Tx) (client.TxBuilder, error) {
stdTx, ok := newTx.(StdTx)
if !ok {
return nil, fmt.Errorf("expected %T, got %T", StdTx{}, newTx)
}
return &StdTxBuilder{StdTx: stdTx, cdc: s.Cdc}, nil
}
// MarshalTx implements TxConfig.MarshalTx
func (s StdTxConfig) TxEncoder() sdk.TxEncoder {
return DefaultTxEncoder(s.Cdc)