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:
parent
80f7ff62f7
commit
928f7fccff
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ type (
|
|||
// implement TxBuilder.
|
||||
TxConfig interface {
|
||||
NewTxBuilder() TxBuilder
|
||||
WrapTxBuilder(sdk.Tx) (TxBuilder, error)
|
||||
SignModeHandler() signing.SignModeHandler
|
||||
|
||||
TxEncoder() sdk.TxEncoder
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue