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/stretchr/testify/suite"
|
||||||
"github.com/tendermint/tendermint/crypto"
|
"github.com/tendermint/tendermint/crypto"
|
||||||
|
|
||||||
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
"github.com/cosmos/cosmos-sdk/crypto/types/multisig"
|
"github.com/cosmos/cosmos-sdk/crypto/types/multisig"
|
||||||
"github.com/cosmos/cosmos-sdk/testutil/testdata"
|
"github.com/cosmos/cosmos-sdk/testutil/testdata"
|
||||||
"github.com/cosmos/cosmos-sdk/x/auth/signing"
|
"github.com/cosmos/cosmos-sdk/x/auth/signing"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
|
||||||
|
|
||||||
signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing"
|
signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing"
|
||||||
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
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([][]byte{dummySig}, tx3.GetSignatures())
|
||||||
s.Require().Equal([]crypto.PubKey{pubkey}, tx3.GetPubKeys())
|
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.
|
// implement TxBuilder.
|
||||||
TxConfig interface {
|
TxConfig interface {
|
||||||
NewTxBuilder() TxBuilder
|
NewTxBuilder() TxBuilder
|
||||||
|
WrapTxBuilder(sdk.Tx) (TxBuilder, error)
|
||||||
SignModeHandler() signing.SignModeHandler
|
SignModeHandler() signing.SignModeHandler
|
||||||
|
|
||||||
TxEncoder() sdk.TxEncoder
|
TxEncoder() sdk.TxEncoder
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package tx
|
package tx
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
"github.com/cosmos/cosmos-sdk/crypto/types"
|
"github.com/cosmos/cosmos-sdk/crypto/types"
|
||||||
|
@ -35,6 +37,16 @@ func (g generator) NewTxBuilder() client.TxBuilder {
|
||||||
return newBuilder(g.marshaler, g.pubkeyCodec)
|
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 {
|
func (g generator) SignModeHandler() signing.SignModeHandler {
|
||||||
return g.handler
|
return g.handler
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package types
|
package types
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
"github.com/cosmos/cosmos-sdk/codec/legacy"
|
"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
|
// MarshalTx implements TxConfig.MarshalTx
|
||||||
func (s StdTxConfig) TxEncoder() sdk.TxEncoder {
|
func (s StdTxConfig) TxEncoder() sdk.TxEncoder {
|
||||||
return DefaultTxEncoder(s.Cdc)
|
return DefaultTxEncoder(s.Cdc)
|
||||||
|
|
Loading…
Reference in New Issue