Decouple client/tx from x/auth (#5992)
As part of #5864 part 2), this PR decouples the new client/tx package from x/auth (as an incremental step to deprecating all the tx logic in x/auth) and adds StdFee, StdSignature, StdSignMsgBase and StdTxBase to codec/std, while deprecating the corresponding types in x/auth.
This commit is contained in:
parent
aeee097b2f
commit
bb4642ad0d
|
@ -9,6 +9,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/gogo/protobuf/jsonpb"
|
"github.com/gogo/protobuf/jsonpb"
|
||||||
|
"github.com/tendermint/tendermint/crypto"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client/context"
|
"github.com/cosmos/cosmos-sdk/client/context"
|
||||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||||
|
@ -16,9 +17,8 @@ import (
|
||||||
clientkeys "github.com/cosmos/cosmos-sdk/client/keys"
|
clientkeys "github.com/cosmos/cosmos-sdk/client/keys"
|
||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||||
"github.com/cosmos/cosmos-sdk/types/rest"
|
"github.com/cosmos/cosmos-sdk/types/rest"
|
||||||
"github.com/cosmos/cosmos-sdk/x/auth"
|
|
||||||
"github.com/cosmos/cosmos-sdk/x/auth/types"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type (
|
type (
|
||||||
|
@ -27,6 +27,20 @@ type (
|
||||||
// implement ClientTx.
|
// implement ClientTx.
|
||||||
Generator interface {
|
Generator interface {
|
||||||
NewTx() ClientTx
|
NewTx() ClientTx
|
||||||
|
NewFee() ClientFee
|
||||||
|
NewSignature() ClientSignature
|
||||||
|
}
|
||||||
|
|
||||||
|
ClientFee interface {
|
||||||
|
sdk.Fee
|
||||||
|
SetGas(uint64)
|
||||||
|
SetAmount(sdk.Coins)
|
||||||
|
}
|
||||||
|
|
||||||
|
ClientSignature interface {
|
||||||
|
sdk.Signature
|
||||||
|
SetPubKey(crypto.PubKey) error
|
||||||
|
SetSignature([]byte)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ClientTx defines an interface which an application-defined concrete transaction
|
// ClientTx defines an interface which an application-defined concrete transaction
|
||||||
|
@ -39,9 +53,9 @@ type (
|
||||||
|
|
||||||
SetMsgs(...sdk.Msg) error
|
SetMsgs(...sdk.Msg) error
|
||||||
GetSignatures() []sdk.Signature
|
GetSignatures() []sdk.Signature
|
||||||
SetSignatures(...sdk.Signature)
|
SetSignatures(...ClientSignature) error
|
||||||
GetFee() sdk.Fee
|
GetFee() sdk.Fee
|
||||||
SetFee(sdk.Fee)
|
SetFee(ClientFee) error
|
||||||
GetMemo() string
|
GetMemo() string
|
||||||
SetMemo(string)
|
SetMemo(string)
|
||||||
|
|
||||||
|
@ -176,7 +190,7 @@ func WriteGeneratedTxResponse(
|
||||||
|
|
||||||
if br.Simulate || simAndExec {
|
if br.Simulate || simAndExec {
|
||||||
if gasAdj < 0 {
|
if gasAdj < 0 {
|
||||||
rest.WriteErrorResponse(w, http.StatusBadRequest, types.ErrorInvalidGasAdjustment.Error())
|
rest.WriteErrorResponse(w, http.StatusBadRequest, sdkerrors.ErrorInvalidGasAdjustment.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -233,10 +247,20 @@ func BuildUnsignedTx(txf Factory, msgs ...sdk.Msg) (ClientTx, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clientFee := txf.txGenerator.NewFee()
|
||||||
|
clientFee.SetAmount(fees)
|
||||||
|
clientFee.SetGas(txf.gas)
|
||||||
|
|
||||||
tx := txf.txGenerator.NewTx()
|
tx := txf.txGenerator.NewTx()
|
||||||
tx.SetFee(auth.NewStdFee(txf.gas, fees))
|
|
||||||
tx.SetMemo(txf.memo)
|
tx.SetMemo(txf.memo)
|
||||||
tx.SetSignatures()
|
|
||||||
|
if err := tx.SetFee(clientFee); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := tx.SetSignatures(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
if err := tx.SetMsgs(msgs...); err != nil {
|
if err := tx.SetMsgs(msgs...); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -256,7 +280,11 @@ func BuildSimTx(txf Factory, msgs ...sdk.Msg) ([]byte, error) {
|
||||||
|
|
||||||
// Create an empty signature literal as the ante handler will populate with a
|
// Create an empty signature literal as the ante handler will populate with a
|
||||||
// sentinel pubkey.
|
// sentinel pubkey.
|
||||||
tx.SetSignatures(auth.NewStdSignature(nil, nil))
|
sig := txf.txGenerator.NewSignature()
|
||||||
|
|
||||||
|
if err := tx.SetSignatures(sig); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return tx.Marshal()
|
return tx.Marshal()
|
||||||
}
|
}
|
||||||
|
@ -337,7 +365,17 @@ func Sign(txf Factory, name, passphrase string, tx ClientTx) ([]byte, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
tx.SetSignatures(auth.NewStdSignature(pubkey, sigBytes))
|
sig := txf.txGenerator.NewSignature()
|
||||||
|
sig.SetSignature(sigBytes)
|
||||||
|
|
||||||
|
if err := sig.SetPubKey(pubkey); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := tx.SetSignatures(sig); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return tx.Marshal()
|
return tx.Marshal()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,6 @@ import (
|
||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
"github.com/cosmos/cosmos-sdk/codec/std"
|
"github.com/cosmos/cosmos-sdk/codec/std"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
"github.com/cosmos/cosmos-sdk/x/auth"
|
|
||||||
"github.com/cosmos/cosmos-sdk/x/bank"
|
"github.com/cosmos/cosmos-sdk/x/bank"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -87,7 +86,7 @@ func TestBuildSimTx(t *testing.T) {
|
||||||
|
|
||||||
tx := &std.Transaction{}
|
tx := &std.Transaction{}
|
||||||
require.NoError(t, tx.Unmarshal(bz))
|
require.NoError(t, tx.Unmarshal(bz))
|
||||||
require.Equal(t, []sdk.Signature{sdk.Signature(auth.StdSignature{})}, tx.GetSignatures())
|
require.Equal(t, []sdk.Signature{sdk.Signature(std.StdSignature{})}, tx.GetSignatures())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestBuildUnsignedTx(t *testing.T) {
|
func TestBuildUnsignedTx(t *testing.T) {
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -3,6 +3,7 @@ package cosmos_sdk.codec.std.v1;
|
||||||
|
|
||||||
import "third_party/proto/cosmos-proto/cosmos.proto";
|
import "third_party/proto/cosmos-proto/cosmos.proto";
|
||||||
import "third_party/proto/gogoproto/gogo.proto";
|
import "third_party/proto/gogoproto/gogo.proto";
|
||||||
|
import "types/types.proto";
|
||||||
import "x/auth/types/types.proto";
|
import "x/auth/types/types.proto";
|
||||||
import "x/auth/vesting/types/types.proto";
|
import "x/auth/vesting/types/types.proto";
|
||||||
import "x/bank/types/types.proto";
|
import "x/bank/types/types.proto";
|
||||||
|
@ -106,8 +107,7 @@ message Content {
|
||||||
message Transaction {
|
message Transaction {
|
||||||
option (gogoproto.goproto_getters) = false;
|
option (gogoproto.goproto_getters) = false;
|
||||||
|
|
||||||
cosmos_sdk.x.auth.v1.StdTxBase base = 1
|
StdTxBase base = 1 [(gogoproto.jsontag) = "", (gogoproto.embed) = true, (gogoproto.nullable) = false];
|
||||||
[(gogoproto.jsontag) = "", (gogoproto.embed) = true, (gogoproto.nullable) = false];
|
|
||||||
repeated Message msgs = 2 [(gogoproto.nullable) = false];
|
repeated Message msgs = 2 [(gogoproto.nullable) = false];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,7 +141,45 @@ message Message {
|
||||||
// SignDoc defines a standard application-level signing document to compose
|
// SignDoc defines a standard application-level signing document to compose
|
||||||
// signatures for a Transaction.
|
// signatures for a Transaction.
|
||||||
message SignDoc {
|
message SignDoc {
|
||||||
cosmos_sdk.x.auth.v1.StdSignDocBase base = 1
|
StdSignDocBase base = 1 [(gogoproto.jsontag) = "", (gogoproto.embed) = true, (gogoproto.nullable) = false];
|
||||||
[(gogoproto.jsontag) = "", (gogoproto.embed) = true, (gogoproto.nullable) = false];
|
|
||||||
repeated Message msgs = 2 [(gogoproto.nullable) = false];
|
repeated Message msgs = 2 [(gogoproto.nullable) = false];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StdFee includes the amount of coins paid in fees and the maximum
|
||||||
|
// gas to be used by the transaction. The ratio yields an effective "gasprice",
|
||||||
|
// which must be above some miminum to be accepted into the mempool.
|
||||||
|
message StdFee {
|
||||||
|
option (gogoproto.goproto_getters) = false;
|
||||||
|
option (gogoproto.equal) = true;
|
||||||
|
|
||||||
|
repeated cosmos_sdk.v1.Coin amount = 1
|
||||||
|
[(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"];
|
||||||
|
uint64 gas = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// StdSignature defines a signature structure that contains the signature of a
|
||||||
|
// transaction and an optional public key.
|
||||||
|
message StdSignature {
|
||||||
|
option (gogoproto.goproto_getters) = false;
|
||||||
|
|
||||||
|
bytes pub_key = 1 [(gogoproto.jsontag) = "public_key,omitempty", (gogoproto.moretags) = "yaml:\"public_key\""];
|
||||||
|
bytes signature = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// StdTxBase defines a transaction base which application-level concrete transaction
|
||||||
|
// types can extend.
|
||||||
|
message StdTxBase {
|
||||||
|
StdFee fee = 1 [(gogoproto.nullable) = false];
|
||||||
|
repeated StdSignature signatures = 2 [(gogoproto.nullable) = false];
|
||||||
|
string memo = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// StdSignDocBase defines the base structure for which applications can extend
|
||||||
|
// to define the concrete structure that signers sign over.
|
||||||
|
message StdSignDocBase {
|
||||||
|
string chain_id = 1 [(gogoproto.customname) = "ChainID", (gogoproto.moretags) = "yaml:\"chain_id\""];
|
||||||
|
uint64 account_number = 2 [(gogoproto.moretags) = "yaml:\"account_number\""];
|
||||||
|
uint64 sequence = 3;
|
||||||
|
string memo = 4;
|
||||||
|
StdFee fee = 5 [(gogoproto.nullable) = false];
|
||||||
|
}
|
||||||
|
|
113
codec/std/tx.go
113
codec/std/tx.go
|
@ -1,6 +1,9 @@
|
||||||
package std
|
package std
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/tendermint/go-amino"
|
||||||
|
"github.com/tendermint/tendermint/crypto"
|
||||||
|
|
||||||
clientx "github.com/cosmos/cosmos-sdk/client/tx"
|
clientx "github.com/cosmos/cosmos-sdk/client/tx"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||||
|
@ -8,23 +11,33 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
_ sdk.Tx = (*Transaction)(nil)
|
_ sdk.Tx = (*Transaction)(nil)
|
||||||
_ clientx.ClientTx = (*Transaction)(nil)
|
_ clientx.ClientTx = (*Transaction)(nil)
|
||||||
_ clientx.Generator = TxGenerator{}
|
_ clientx.Generator = TxGenerator{}
|
||||||
|
_ clientx.ClientFee = &StdFee{}
|
||||||
|
_ clientx.ClientSignature = &StdSignature{}
|
||||||
)
|
)
|
||||||
|
|
||||||
// TxGenerator defines a transaction generator that allows clients to construct
|
// TxGenerator defines a transaction generator that allows clients to construct
|
||||||
// transactions.
|
// transactions.
|
||||||
type TxGenerator struct{}
|
type TxGenerator struct{}
|
||||||
|
|
||||||
|
func (g TxGenerator) NewFee() clientx.ClientFee {
|
||||||
|
return &StdFee{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g TxGenerator) NewSignature() clientx.ClientSignature {
|
||||||
|
return &StdSignature{}
|
||||||
|
}
|
||||||
|
|
||||||
// NewTx returns a reference to an empty Transaction type.
|
// NewTx returns a reference to an empty Transaction type.
|
||||||
func (TxGenerator) NewTx() clientx.ClientTx {
|
func (TxGenerator) NewTx() clientx.ClientTx {
|
||||||
return &Transaction{}
|
return &Transaction{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewTransaction(fee auth.StdFee, memo string, sdkMsgs []sdk.Msg) (*Transaction, error) {
|
func NewTransaction(fee StdFee, memo string, sdkMsgs []sdk.Msg) (*Transaction, error) {
|
||||||
tx := &Transaction{
|
tx := &Transaction{
|
||||||
StdTxBase: auth.NewStdTxBase(fee, nil, memo),
|
StdTxBase: NewStdTxBase(fee, nil, memo),
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := tx.SetMsgs(sdkMsgs...); err != nil {
|
if err := tx.SetMsgs(sdkMsgs...); err != nil {
|
||||||
|
@ -121,15 +134,16 @@ func (tx Transaction) GetSignatures() []sdk.Signature {
|
||||||
|
|
||||||
// SetSignatures sets the transaction's signatures. It will overwrite any
|
// SetSignatures sets the transaction's signatures. It will overwrite any
|
||||||
// existing signatures set.
|
// existing signatures set.
|
||||||
func (tx *Transaction) SetSignatures(sdkSigs ...sdk.Signature) {
|
func (tx *Transaction) SetSignatures(sdkSigs ...clientx.ClientSignature) error {
|
||||||
sigs := make([]auth.StdSignature, len(sdkSigs))
|
sigs := make([]StdSignature, len(sdkSigs))
|
||||||
for i, sig := range sdkSigs {
|
for i, sig := range sdkSigs {
|
||||||
if sig != nil {
|
if sig != nil {
|
||||||
sigs[i] = auth.NewStdSignature(sig.GetPubKey(), sig.GetSignature())
|
sigs[i] = NewStdSignature(sig.GetPubKey(), sig.GetSignature())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tx.Signatures = sigs
|
tx.Signatures = sigs
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetFee returns the transaction's fee.
|
// GetFee returns the transaction's fee.
|
||||||
|
@ -138,8 +152,9 @@ func (tx Transaction) GetFee() sdk.Fee {
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetFee sets the transaction's fee. It will overwrite any existing fee set.
|
// SetFee sets the transaction's fee. It will overwrite any existing fee set.
|
||||||
func (tx *Transaction) SetFee(fee sdk.Fee) {
|
func (tx *Transaction) SetFee(fee clientx.ClientFee) error {
|
||||||
tx.Fee = auth.NewStdFee(fee.GetGas(), fee.GetAmount())
|
tx.Fee = NewStdFee(fee.GetGas(), fee.GetAmount())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetMemo returns the transaction's memo.
|
// GetMemo returns the transaction's memo.
|
||||||
|
@ -160,9 +175,9 @@ func (tx Transaction) CanonicalSignBytes(cid string, num, seq uint64) ([]byte, e
|
||||||
return NewSignDoc(num, seq, cid, tx.Memo, tx.Fee, tx.Msgs...).CanonicalSignBytes()
|
return NewSignDoc(num, seq, cid, tx.Memo, tx.Fee, tx.Msgs...).CanonicalSignBytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewSignDoc(num, seq uint64, cid, memo string, fee auth.StdFee, msgs ...Message) *SignDoc {
|
func NewSignDoc(num, seq uint64, cid, memo string, fee StdFee, msgs ...Message) *SignDoc {
|
||||||
return &SignDoc{
|
return &SignDoc{
|
||||||
StdSignDocBase: auth.NewStdSignDocBase(num, seq, cid, memo, fee),
|
StdSignDocBase: NewStdSignDocBase(num, seq, cid, memo, fee),
|
||||||
Msgs: msgs,
|
Msgs: msgs,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -174,3 +189,77 @@ func NewSignDoc(num, seq uint64, cid, memo string, fee auth.StdFee, msgs ...Mess
|
||||||
func (sd *SignDoc) CanonicalSignBytes() ([]byte, error) {
|
func (sd *SignDoc) CanonicalSignBytes() ([]byte, error) {
|
||||||
return sdk.CanonicalSignBytes(sd)
|
return sdk.CanonicalSignBytes(sd)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewStdFee returns a new instance of StdFee
|
||||||
|
func NewStdFee(gas uint64, amount sdk.Coins) StdFee {
|
||||||
|
return StdFee{
|
||||||
|
Amount: amount,
|
||||||
|
Gas: gas,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewStdSignature(pk crypto.PubKey, sig []byte) StdSignature {
|
||||||
|
var pkBz []byte
|
||||||
|
if pk != nil {
|
||||||
|
pkBz = pk.Bytes()
|
||||||
|
}
|
||||||
|
|
||||||
|
return StdSignature{PubKey: pkBz, Signature: sig}
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewStdTxBase(fee StdFee, sigs []StdSignature, memo string) StdTxBase {
|
||||||
|
return StdTxBase{
|
||||||
|
Fee: fee,
|
||||||
|
Signatures: sigs,
|
||||||
|
Memo: memo,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewStdSignDocBase(num, seq uint64, cid, memo string, fee StdFee) StdSignDocBase {
|
||||||
|
return StdSignDocBase{
|
||||||
|
ChainID: cid,
|
||||||
|
AccountNumber: num,
|
||||||
|
Sequence: seq,
|
||||||
|
Memo: memo,
|
||||||
|
Fee: fee,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m StdFee) GetGas() uint64 {
|
||||||
|
return m.Gas
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m StdFee) GetAmount() sdk.Coins {
|
||||||
|
return m.Amount
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *StdFee) SetGas(gas uint64) {
|
||||||
|
m.Gas = gas
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *StdFee) SetAmount(amount sdk.Coins) {
|
||||||
|
m.Amount = amount
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m StdSignature) GetPubKey() crypto.PubKey {
|
||||||
|
var pk crypto.PubKey
|
||||||
|
if len(m.PubKey) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
amino.MustUnmarshalBinaryBare(m.PubKey, &pk)
|
||||||
|
return pk
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m StdSignature) GetSignature() []byte {
|
||||||
|
return m.Signature
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *StdSignature) SetPubKey(pk crypto.PubKey) error {
|
||||||
|
m.PubKey = pk.Bytes()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *StdSignature) SetSignature(signature []byte) {
|
||||||
|
m.Signature = signature
|
||||||
|
}
|
||||||
|
|
|
@ -7,12 +7,11 @@ import (
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/codec/std"
|
"github.com/cosmos/cosmos-sdk/codec/std"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
"github.com/cosmos/cosmos-sdk/x/auth"
|
|
||||||
"github.com/cosmos/cosmos-sdk/x/bank"
|
"github.com/cosmos/cosmos-sdk/x/bank"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestTransaction(t *testing.T) {
|
func TestTransaction(t *testing.T) {
|
||||||
f := auth.NewStdFee(100, sdk.NewCoins(sdk.NewInt64Coin("stake", 50)))
|
f := std.NewStdFee(100, sdk.NewCoins(sdk.NewInt64Coin("stake", 50)))
|
||||||
m := "hello world"
|
m := "hello world"
|
||||||
acc1 := sdk.AccAddress("from")
|
acc1 := sdk.AccAddress("from")
|
||||||
acc2 := sdk.AccAddress("to")
|
acc2 := sdk.AccAddress("to")
|
||||||
|
|
|
@ -88,6 +88,12 @@ var (
|
||||||
// ErrWrongPassword defines an error when the key password is invalid.
|
// ErrWrongPassword defines an error when the key password is invalid.
|
||||||
ErrWrongPassword = Register(RootCodespace, 23, "invalid account password")
|
ErrWrongPassword = Register(RootCodespace, 23, "invalid account password")
|
||||||
|
|
||||||
|
// ErrorInvalidSigner defines an error when the tx intended signer does not match the given signer.
|
||||||
|
ErrorInvalidSigner = Register(RootCodespace, 24, "tx intended signer does not match the given signer")
|
||||||
|
|
||||||
|
// ErrorInvalidGasAdjustment defines an error for an invalid gas adjustment
|
||||||
|
ErrorInvalidGasAdjustment = Register(RootCodespace, 25, "invalid gas adjustment")
|
||||||
|
|
||||||
// ErrPanic is only set when we recover from a panic, so we know to
|
// ErrPanic is only set when we recover from a panic, so we know to
|
||||||
// redact potentially sensitive system info
|
// redact potentially sensitive system info
|
||||||
ErrPanic = Register(UndefinedCodespace, 111222, "panic")
|
ErrPanic = Register(UndefinedCodespace, 111222, "panic")
|
||||||
|
|
|
@ -60,8 +60,6 @@ var (
|
||||||
ValidateGenAccounts = types.ValidateGenAccounts
|
ValidateGenAccounts = types.ValidateGenAccounts
|
||||||
GetGenesisStateFromAppState = types.GetGenesisStateFromAppState
|
GetGenesisStateFromAppState = types.GetGenesisStateFromAppState
|
||||||
NewStdSignature = types.NewStdSignature
|
NewStdSignature = types.NewStdSignature
|
||||||
NewStdTxBase = types.NewStdTxBase
|
|
||||||
NewStdSignDocBase = types.NewStdSignDocBase
|
|
||||||
|
|
||||||
// variable aliases
|
// variable aliases
|
||||||
ModuleCdc = types.ModuleCdc
|
ModuleCdc = types.ModuleCdc
|
||||||
|
@ -91,6 +89,4 @@ type (
|
||||||
TxBuilder = types.TxBuilder
|
TxBuilder = types.TxBuilder
|
||||||
GenesisAccountIterator = types.GenesisAccountIterator
|
GenesisAccountIterator = types.GenesisAccountIterator
|
||||||
Codec = types.Codec
|
Codec = types.Codec
|
||||||
StdSignDocBase = types.StdSignDocBase
|
|
||||||
StdTxBase = types.StdTxBase
|
|
||||||
)
|
)
|
||||||
|
|
|
@ -7,6 +7,7 @@ import (
|
||||||
"github.com/cosmos/cosmos-sdk/client/context"
|
"github.com/cosmos/cosmos-sdk/client/context"
|
||||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
"github.com/cosmos/cosmos-sdk/types/errors"
|
||||||
"github.com/cosmos/cosmos-sdk/types/rest"
|
"github.com/cosmos/cosmos-sdk/types/rest"
|
||||||
"github.com/cosmos/cosmos-sdk/x/auth/types"
|
"github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||||
)
|
)
|
||||||
|
@ -30,7 +31,7 @@ func WriteGenerateStdTxResponse(w http.ResponseWriter, cliCtx context.CLIContext
|
||||||
|
|
||||||
if br.Simulate || simAndExec {
|
if br.Simulate || simAndExec {
|
||||||
if gasAdj < 0 {
|
if gasAdj < 0 {
|
||||||
rest.WriteErrorResponse(w, http.StatusBadRequest, types.ErrorInvalidGasAdjustment.Error())
|
rest.WriteErrorResponse(w, http.StatusBadRequest, errors.ErrorInvalidGasAdjustment.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@ import (
|
||||||
"github.com/cosmos/cosmos-sdk/client/keys"
|
"github.com/cosmos/cosmos-sdk/client/keys"
|
||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -193,7 +194,7 @@ func SignStdTx(
|
||||||
|
|
||||||
// check whether the address is a signer
|
// check whether the address is a signer
|
||||||
if !isTxSigner(sdk.AccAddress(addr), stdTx.GetSigners()) {
|
if !isTxSigner(sdk.AccAddress(addr), stdTx.GetSigners()) {
|
||||||
return signedStdTx, fmt.Errorf("%s: %s", authtypes.ErrorInvalidSigner, name)
|
return signedStdTx, fmt.Errorf("%s: %s", sdkerrors.ErrorInvalidSigner, name)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !offline {
|
if !offline {
|
||||||
|
@ -216,7 +217,7 @@ func SignStdTxWithSignerAddress(
|
||||||
|
|
||||||
// check whether the address is a signer
|
// check whether the address is a signer
|
||||||
if !isTxSigner(addr, stdTx.GetSigners()) {
|
if !isTxSigner(addr, stdTx.GetSigners()) {
|
||||||
return signedStdTx, fmt.Errorf("%s: %s", authtypes.ErrorInvalidSigner, name)
|
return signedStdTx, fmt.Errorf("%s: %s", sdkerrors.ErrorInvalidSigner, name)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !offline {
|
if !offline {
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
package types
|
|
||||||
|
|
||||||
import (
|
|
||||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
ErrorInvalidSigner = sdkerrors.Register(ModuleName, 2, "tx intended signer does not match the given signer")
|
|
||||||
ErrorInvalidGasAdjustment = sdkerrors.Register(ModuleName, 3, "invalid gas adjustment")
|
|
||||||
)
|
|
|
@ -17,7 +17,15 @@ import (
|
||||||
// MaxGasWanted defines the max gas allowed.
|
// MaxGasWanted defines the max gas allowed.
|
||||||
const MaxGasWanted = uint64((1 << 63) - 1)
|
const MaxGasWanted = uint64((1 << 63) - 1)
|
||||||
|
|
||||||
// NewStdFee returns a new instance of StdFee
|
// Deprecated: StdFee includes the amount of coins paid in fees and the maximum
|
||||||
|
// gas to be used by the transaction. The ratio yields an effective "gasprice",
|
||||||
|
// which must be above some miminum to be accepted into the mempool.
|
||||||
|
type StdFee struct {
|
||||||
|
Amount sdk.Coins `json:"amount" yaml:"amount"`
|
||||||
|
Gas uint64 `json:"gas" yaml:"gas"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: NewStdFee returns a new instance of StdFee
|
||||||
func NewStdFee(gas uint64, amount sdk.Coins) StdFee {
|
func NewStdFee(gas uint64, amount sdk.Coins) StdFee {
|
||||||
return StdFee{
|
return StdFee{
|
||||||
Amount: amount,
|
Amount: amount,
|
||||||
|
@ -58,6 +66,7 @@ func (fee StdFee) GasPrices() sdk.DecCoins {
|
||||||
return sdk.NewDecCoinsFromCoins(fee.Amount...).QuoDec(sdk.NewDec(int64(fee.Gas)))
|
return sdk.NewDecCoinsFromCoins(fee.Amount...).QuoDec(sdk.NewDec(int64(fee.Gas)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Deprecated
|
||||||
func NewStdSignature(pk crypto.PubKey, sig []byte) StdSignature {
|
func NewStdSignature(pk crypto.PubKey, sig []byte) StdSignature {
|
||||||
var pkBz []byte
|
var pkBz []byte
|
||||||
if pk != nil {
|
if pk != nil {
|
||||||
|
@ -112,24 +121,6 @@ func (ss StdSignature) MarshalYAML() (interface{}, error) {
|
||||||
return string(bz), err
|
return string(bz), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewStdTxBase(fee StdFee, sigs []StdSignature, memo string) StdTxBase {
|
|
||||||
return StdTxBase{
|
|
||||||
Fee: fee,
|
|
||||||
Signatures: sigs,
|
|
||||||
Memo: memo,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewStdSignDocBase(num, seq uint64, cid, memo string, fee StdFee) StdSignDocBase {
|
|
||||||
return StdSignDocBase{
|
|
||||||
ChainID: cid,
|
|
||||||
AccountNumber: num,
|
|
||||||
Sequence: seq,
|
|
||||||
Memo: memo,
|
|
||||||
Fee: fee,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// CountSubKeys counts the total number of keys for a multi-sig public key.
|
// CountSubKeys counts the total number of keys for a multi-sig public key.
|
||||||
func CountSubKeys(pub crypto.PubKey) int {
|
func CountSubKeys(pub crypto.PubKey) int {
|
||||||
v, ok := pub.(multisig.PubKeyMultisigThreshold)
|
v, ok := pub.(multisig.PubKeyMultisigThreshold)
|
||||||
|
@ -320,6 +311,12 @@ func StdSignBytes(chainID string, accnum uint64, sequence uint64, fee StdFee, ms
|
||||||
return sdk.MustSortJSON(bz)
|
return sdk.MustSortJSON(bz)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Deprecated: StdSignature represents a sig
|
||||||
|
type StdSignature struct {
|
||||||
|
PubKey []byte `json:"pub_key" yaml:"pub_key"` // optional
|
||||||
|
Signature []byte `json:"signature" yaml:"signature"`
|
||||||
|
}
|
||||||
|
|
||||||
// DefaultTxDecoder logic for standard transaction decoding
|
// DefaultTxDecoder logic for standard transaction decoding
|
||||||
func DefaultTxDecoder(cdc *codec.Codec) sdk.TxDecoder {
|
func DefaultTxDecoder(cdc *codec.Codec) sdk.TxDecoder {
|
||||||
return func(txBytes []byte) (sdk.Tx, error) {
|
return func(txBytes []byte) (sdk.Tx, error) {
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -2,7 +2,6 @@ syntax = "proto3";
|
||||||
package cosmos_sdk.x.auth.v1;
|
package cosmos_sdk.x.auth.v1;
|
||||||
|
|
||||||
import "third_party/proto/gogoproto/gogo.proto";
|
import "third_party/proto/gogoproto/gogo.proto";
|
||||||
import "types/types.proto";
|
|
||||||
|
|
||||||
option go_package = "github.com/cosmos/cosmos-sdk/x/auth/types";
|
option go_package = "github.com/cosmos/cosmos-sdk/x/auth/types";
|
||||||
|
|
||||||
|
@ -19,27 +18,6 @@ message BaseAccount {
|
||||||
uint64 sequence = 4;
|
uint64 sequence = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
// StdFee includes the amount of coins paid in fees and the maximum
|
|
||||||
// gas to be used by the transaction. The ratio yields an effective "gasprice",
|
|
||||||
// which must be above some miminum to be accepted into the mempool.
|
|
||||||
message StdFee {
|
|
||||||
option (gogoproto.goproto_getters) = false;
|
|
||||||
option (gogoproto.equal) = true;
|
|
||||||
|
|
||||||
repeated cosmos_sdk.v1.Coin amount = 1
|
|
||||||
[(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"];
|
|
||||||
uint64 gas = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// StdSignature defines a signature structure that contains the signature of a
|
|
||||||
// transaction and an optional public key.
|
|
||||||
message StdSignature {
|
|
||||||
option (gogoproto.goproto_getters) = false;
|
|
||||||
|
|
||||||
bytes pub_key = 1 [(gogoproto.jsontag) = "public_key,omitempty", (gogoproto.moretags) = "yaml:\"public_key\""];
|
|
||||||
bytes signature = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Params defines the parameters for the auth module.
|
// Params defines the parameters for the auth module.
|
||||||
message Params {
|
message Params {
|
||||||
option (gogoproto.equal) = true;
|
option (gogoproto.equal) = true;
|
||||||
|
@ -49,25 +27,8 @@ message Params {
|
||||||
uint64 tx_sig_limit = 2 [(gogoproto.moretags) = "yaml:\"tx_sig_limit\""];
|
uint64 tx_sig_limit = 2 [(gogoproto.moretags) = "yaml:\"tx_sig_limit\""];
|
||||||
uint64 tx_size_cost_per_byte = 3 [(gogoproto.moretags) = "yaml:\"tx_size_cost_per_byte\""];
|
uint64 tx_size_cost_per_byte = 3 [(gogoproto.moretags) = "yaml:\"tx_size_cost_per_byte\""];
|
||||||
uint64 sig_verify_cost_ed25519 = 4
|
uint64 sig_verify_cost_ed25519 = 4
|
||||||
[(gogoproto.customname) = "SigVerifyCostED25519", (gogoproto.moretags) = "yaml:\"sig_verify_cost_ed25519\""];
|
[(gogoproto.customname) = "SigVerifyCostED25519", (gogoproto.moretags) = "yaml:\"sig_verify_cost_ed25519\""];
|
||||||
uint64 sig_verify_cost_secp256k1 = 5
|
uint64 sig_verify_cost_secp256k1 = 5
|
||||||
[(gogoproto.customname) = "SigVerifyCostSecp256k1", (gogoproto.moretags) = "yaml:\"sig_verify_cost_secp256k1\""];
|
[(gogoproto.customname) = "SigVerifyCostSecp256k1", (gogoproto.moretags) = "yaml:\"sig_verify_cost_secp256k1\""];
|
||||||
}
|
}
|
||||||
|
|
||||||
// StdTxBase defines a transaction base which application-level concrete transaction
|
|
||||||
// types can extend.
|
|
||||||
message StdTxBase {
|
|
||||||
StdFee fee = 1 [(gogoproto.nullable) = false];
|
|
||||||
repeated StdSignature signatures = 2 [(gogoproto.nullable) = false];
|
|
||||||
string memo = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
// StdSignDocBase defines the base structure for which applications can extend
|
|
||||||
// to define the concrete structure that signers sign over.
|
|
||||||
message StdSignDocBase {
|
|
||||||
string chain_id = 1 [(gogoproto.customname) = "ChainID", (gogoproto.moretags) = "yaml:\"chain_id\""];
|
|
||||||
uint64 account_number = 2 [(gogoproto.moretags) = "yaml:\"account_number\""];
|
|
||||||
uint64 sequence = 3;
|
|
||||||
string memo = 4;
|
|
||||||
StdFee fee = 5 [(gogoproto.nullable) = false];
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue