feat: introduce x/validate and split x/auth/tx/config (#21822)

This commit is contained in:
Julien Robert 2024-09-20 17:05:46 +02:00 committed by GitHub
parent 465ca23154
commit 763e4d68e4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
50 changed files with 948 additions and 500 deletions

2
.github/CODEOWNERS vendored
View File

@ -44,6 +44,7 @@
/x/accounts/ @testinginprod @sontrinh16 @cosmos/sdk-core-dev
/x/auth/ @facundomedica @testinginprod @aaronc @cosmos/sdk-core-dev
/x/auth/tx/config @julienrbrt @akhilkumarpilli @kocubinski @cosmos/sdk-core-dev
/x/authz/ @akhilkumarpilli @raynaudoe @cosmos/sdk-core-dev
/x/bank/ @julienrbrt @sontrinh16 @cosmos/sdk-core-dev
/x/bank/v2 @julienrbrt @hieuvubk @akhilkumarpilli @cosmos/sdk-core-dev
@ -65,6 +66,7 @@
/x/staking/ @facundomedica @testinginprod @JulianToledano @ziscky @cosmos/sdk-core-dev
/x/tx/ @kocubinski @testinginprod @aaronc @cosmos/sdk-core-dev
/x/upgrade/ @facundomedica @cool-develope @akhilkumarpilli @lucaslopezf @cosmos/sdk-core-dev
/x/validate @julienrbrt @akhilkumarpilli @kocubinski @cosmos/sdk-core-dev
# go mods

View File

@ -80,6 +80,8 @@
- x/upgrade/**/*
"C:x/epochs":
- x/epochs/**/*
"C:x/validate":
- x/validate/**/*
"C:server/v2":
- server/v2/**/*
"C:server/v2 stf":

View File

@ -46,6 +46,8 @@ Every module contains its own CHANGELOG.md. Please refer to the module you are i
* (crypto/keyring) [#21653](https://github.com/cosmos/cosmos-sdk/pull/21653) New Linux-only backend that adds Linux kernel's `keyctl` support.
* (runtime) [#21704](https://github.com/cosmos/cosmos-sdk/pull/21704) Add StoreLoader in simappv2.
* (client/keys) [#21829](https://github.com/cosmos/cosmos-sdk/pull/21829) Add support for importing hex key using standard input.
* (x/validate) [#21822](https://github.com/cosmos/cosmos-sdk/pull/21822) New module solely responsible for providing ante/post handlers and tx validators for v2. It can be extended by the app developer to provide extra tx validators.
* In comparison to x/auth/tx/config, there is no app config to skip ante/post handlers, as overwriting them in baseapp or not injecting the x/validate module has the same effect.
### Improvements
@ -56,6 +58,8 @@ Every module contains its own CHANGELOG.md. Please refer to the module you are i
### API Breaking Changes
* (types/mempool) [#21744](https://github.com/cosmos/cosmos-sdk/pull/21744) Update types/mempool.Mempool interface to take decoded transactions. This avoid to decode the transaction twice.
* (x/auth/tx/config) [#21822](https://github.com/cosmos/cosmos-sdk/pull/21822) Sign mode textual is no more automatically added to tx config when using runtime. Should be added manually on the server side.
* (x/auth/tx/config) [#21822](https://github.com/cosmos/cosmos-sdk/pull/21822) This depinject module now only provide txconfig and tx config options. `x/validate` now handles the providing of ante/post handlers, alongside tx validators for v2. The corresponding app config options have been removed from the depinject module config.
### Deprecated

View File

@ -106,7 +106,7 @@ For non depinject users, simply call `RegisterLegacyAminoCodec` and `RegisterInt
Additionally, thanks to the genesis simplification, as explained in [the genesis interface update](#genesis-interface), the module manager `InitGenesis` and `ExportGenesis` methods do not require the codec anymore.
##### GRPC WEB
##### gRPC Web
Grpc-web embedded client has been removed from the server. If you would like to use grpc-web, you can use the [envoy proxy](https://www.envoyproxy.io/docs/envoy/latest/start/start). Here's how to set it up:
@ -319,6 +319,11 @@ used as a TTL for the transaction and is used to provide replay protection. See
[ADR-070](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-070-unordered-transactions.md)
for more details.
#### Sign Mode Textual
With the split of `x/auth/tx/config` in two (x/auth/tx/config as depinject module for txconfig and tx options) and `x/validate`, sign mode textual is no more automatically configured when using runtime (it was previously the case).
For the same instructions than for legacy app wiring to enable sign mode textual (see in v0.50 UPGRADING documentation).
### Depinject `app_config.go` / `app.yml`
With the introduction of [environment in modules](#core-api), depinject automatically creates the environment for all modules.
@ -459,7 +464,7 @@ if err != nil {
}
```
### `x/crisis`
#### `x/crisis`
The `x/crisis` module was removed due to it not being supported or functional any longer.
@ -503,6 +508,11 @@ storetypes.StoreUpgrades{
}
```
#### `x/validate`
Introducing `x/validate` a module that is solely used for registering default ante/post handlers and global tx validators when using runtime and runtime/v2. If you wish to set your custom ante/post handlers, no need to use this module.
You can however always extend them by adding extra tx validators (see `x/validate` documentation).
## [v0.50.x](https://github.com/cosmos/cosmos-sdk/releases/tag/v0.50.0-alpha.0)
### Migration to CometBFT (Part 2)

View File

@ -372,14 +372,14 @@ func (x *fastReflection_QueryLegacyAccount) ProtoMethods() *protoiface.Methods {
var (
md_QueryLegacyAccountResponse protoreflect.MessageDescriptor
fd_QueryLegacyAccountResponse_account protoreflect.FieldDescriptor
fd_QueryLegacyAccountResponse_info protoreflect.FieldDescriptor
fd_QueryLegacyAccountResponse_base protoreflect.FieldDescriptor
)
func init() {
file_cosmos_auth_v1beta1_accounts_proto_init()
md_QueryLegacyAccountResponse = File_cosmos_auth_v1beta1_accounts_proto.Messages().ByName("QueryLegacyAccountResponse")
fd_QueryLegacyAccountResponse_account = md_QueryLegacyAccountResponse.Fields().ByName("account")
fd_QueryLegacyAccountResponse_info = md_QueryLegacyAccountResponse.Fields().ByName("info")
fd_QueryLegacyAccountResponse_base = md_QueryLegacyAccountResponse.Fields().ByName("base")
}
var _ protoreflect.Message = (*fastReflection_QueryLegacyAccountResponse)(nil)
@ -453,9 +453,9 @@ func (x *fastReflection_QueryLegacyAccountResponse) Range(f func(protoreflect.Fi
return
}
}
if x.Info != nil {
value := protoreflect.ValueOfMessage(x.Info.ProtoReflect())
if !f(fd_QueryLegacyAccountResponse_info, value) {
if x.Base != nil {
value := protoreflect.ValueOfMessage(x.Base.ProtoReflect())
if !f(fd_QueryLegacyAccountResponse_base, value) {
return
}
}
@ -476,8 +476,8 @@ func (x *fastReflection_QueryLegacyAccountResponse) Has(fd protoreflect.FieldDes
switch fd.FullName() {
case "cosmos.auth.v1beta1.QueryLegacyAccountResponse.account":
return x.Account != nil
case "cosmos.auth.v1beta1.QueryLegacyAccountResponse.info":
return x.Info != nil
case "cosmos.auth.v1beta1.QueryLegacyAccountResponse.base":
return x.Base != nil
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.auth.v1beta1.QueryLegacyAccountResponse"))
@ -496,8 +496,8 @@ func (x *fastReflection_QueryLegacyAccountResponse) Clear(fd protoreflect.FieldD
switch fd.FullName() {
case "cosmos.auth.v1beta1.QueryLegacyAccountResponse.account":
x.Account = nil
case "cosmos.auth.v1beta1.QueryLegacyAccountResponse.info":
x.Info = nil
case "cosmos.auth.v1beta1.QueryLegacyAccountResponse.base":
x.Base = nil
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.auth.v1beta1.QueryLegacyAccountResponse"))
@ -517,8 +517,8 @@ func (x *fastReflection_QueryLegacyAccountResponse) Get(descriptor protoreflect.
case "cosmos.auth.v1beta1.QueryLegacyAccountResponse.account":
value := x.Account
return protoreflect.ValueOfMessage(value.ProtoReflect())
case "cosmos.auth.v1beta1.QueryLegacyAccountResponse.info":
value := x.Info
case "cosmos.auth.v1beta1.QueryLegacyAccountResponse.base":
value := x.Base
return protoreflect.ValueOfMessage(value.ProtoReflect())
default:
if descriptor.IsExtension() {
@ -542,8 +542,8 @@ func (x *fastReflection_QueryLegacyAccountResponse) Set(fd protoreflect.FieldDes
switch fd.FullName() {
case "cosmos.auth.v1beta1.QueryLegacyAccountResponse.account":
x.Account = value.Message().Interface().(*anypb.Any)
case "cosmos.auth.v1beta1.QueryLegacyAccountResponse.info":
x.Info = value.Message().Interface().(*BaseAccount)
case "cosmos.auth.v1beta1.QueryLegacyAccountResponse.base":
x.Base = value.Message().Interface().(*BaseAccount)
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.auth.v1beta1.QueryLegacyAccountResponse"))
@ -569,11 +569,11 @@ func (x *fastReflection_QueryLegacyAccountResponse) Mutable(fd protoreflect.Fiel
x.Account = new(anypb.Any)
}
return protoreflect.ValueOfMessage(x.Account.ProtoReflect())
case "cosmos.auth.v1beta1.QueryLegacyAccountResponse.info":
if x.Info == nil {
x.Info = new(BaseAccount)
case "cosmos.auth.v1beta1.QueryLegacyAccountResponse.base":
if x.Base == nil {
x.Base = new(BaseAccount)
}
return protoreflect.ValueOfMessage(x.Info.ProtoReflect())
return protoreflect.ValueOfMessage(x.Base.ProtoReflect())
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.auth.v1beta1.QueryLegacyAccountResponse"))
@ -590,7 +590,7 @@ func (x *fastReflection_QueryLegacyAccountResponse) NewField(fd protoreflect.Fie
case "cosmos.auth.v1beta1.QueryLegacyAccountResponse.account":
m := new(anypb.Any)
return protoreflect.ValueOfMessage(m.ProtoReflect())
case "cosmos.auth.v1beta1.QueryLegacyAccountResponse.info":
case "cosmos.auth.v1beta1.QueryLegacyAccountResponse.base":
m := new(BaseAccount)
return protoreflect.ValueOfMessage(m.ProtoReflect())
default:
@ -666,8 +666,8 @@ func (x *fastReflection_QueryLegacyAccountResponse) ProtoMethods() *protoiface.M
l = options.Size(x.Account)
n += 1 + l + runtime.Sov(uint64(l))
}
if x.Info != nil {
l = options.Size(x.Info)
if x.Base != nil {
l = options.Size(x.Base)
n += 1 + l + runtime.Sov(uint64(l))
}
if x.unknownFields != nil {
@ -699,8 +699,8 @@ func (x *fastReflection_QueryLegacyAccountResponse) ProtoMethods() *protoiface.M
i -= len(x.unknownFields)
copy(dAtA[i:], x.unknownFields)
}
if x.Info != nil {
encoded, err := options.Marshal(x.Info)
if x.Base != nil {
encoded, err := options.Marshal(x.Base)
if err != nil {
return protoiface.MarshalOutput{
NoUnkeyedLiterals: input.NoUnkeyedLiterals,
@ -814,7 +814,7 @@ func (x *fastReflection_QueryLegacyAccountResponse) ProtoMethods() *protoiface.M
iNdEx = postIndex
case 2:
if wireType != 2 {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Info", wireType)
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Base", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@ -841,10 +841,10 @@ func (x *fastReflection_QueryLegacyAccountResponse) ProtoMethods() *protoiface.M
if postIndex > l {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
}
if x.Info == nil {
x.Info = &BaseAccount{}
if x.Base == nil {
x.Base = &BaseAccount{}
}
if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Info); err != nil {
if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Base); err != nil {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err
}
iNdEx = postIndex
@ -938,9 +938,9 @@ type QueryLegacyAccountResponse struct {
// sdk.AccountI interface.
Account *anypb.Any `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"`
// info represents the account as a BaseAccount, this can return
// nil if the account cannot be represented as a base account.
// nil if the account cannot be represented as a BaseAccount.
// This is used in the gRPC QueryAccountInfo method.
Info *BaseAccount `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"`
Base *BaseAccount `protobuf:"bytes,2,opt,name=base,proto3" json:"base,omitempty"`
}
func (x *QueryLegacyAccountResponse) Reset() {
@ -970,9 +970,9 @@ func (x *QueryLegacyAccountResponse) GetAccount() *anypb.Any {
return nil
}
func (x *QueryLegacyAccountResponse) GetInfo() *BaseAccount {
func (x *QueryLegacyAccountResponse) GetBase() *BaseAccount {
if x != nil {
return x.Info
return x.Base
}
return nil
}
@ -993,10 +993,10 @@ var file_cosmos_auth_v1beta1_accounts_proto_rawDesc = []byte{
0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x61, 0x63, 0x63,
0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79,
0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x04, 0x69, 0x6e, 0x66,
0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73,
0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x04, 0x62, 0x61, 0x73,
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73,
0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x42, 0x61,
0x73, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x42,
0x73, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x42,
0xc8, 0x01, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x61,
0x75, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x0d, 0x41, 0x63, 0x63,
0x6f, 0x75, 0x6e, 0x74, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x63, 0x6f,
@ -1034,7 +1034,7 @@ var file_cosmos_auth_v1beta1_accounts_proto_goTypes = []interface{}{
}
var file_cosmos_auth_v1beta1_accounts_proto_depIdxs = []int32{
2, // 0: cosmos.auth.v1beta1.QueryLegacyAccountResponse.account:type_name -> google.protobuf.Any
3, // 1: cosmos.auth.v1beta1.QueryLegacyAccountResponse.info:type_name -> cosmos.auth.v1beta1.BaseAccount
3, // 1: cosmos.auth.v1beta1.QueryLegacyAccountResponse.base:type_name -> cosmos.auth.v1beta1.BaseAccount
2, // [2:2] is the sub-list for method output_type
2, // [2:2] is the sub-list for method input_type
2, // [2:2] is the sub-list for extension type_name

View File

@ -14,16 +14,12 @@ import (
)
var (
md_Config protoreflect.MessageDescriptor
fd_Config_skip_ante_handler protoreflect.FieldDescriptor
fd_Config_skip_post_handler protoreflect.FieldDescriptor
md_Config protoreflect.MessageDescriptor
)
func init() {
file_cosmos_tx_config_v1_config_proto_init()
md_Config = File_cosmos_tx_config_v1_config_proto.Messages().ByName("Config")
fd_Config_skip_ante_handler = md_Config.Fields().ByName("skip_ante_handler")
fd_Config_skip_post_handler = md_Config.Fields().ByName("skip_post_handler")
}
var _ protoreflect.Message = (*fastReflection_Config)(nil)
@ -91,18 +87,6 @@ func (x *fastReflection_Config) Interface() protoreflect.ProtoMessage {
// While iterating, mutating operations may only be performed
// on the current field descriptor.
func (x *fastReflection_Config) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
if x.SkipAnteHandler != false {
value := protoreflect.ValueOfBool(x.SkipAnteHandler)
if !f(fd_Config_skip_ante_handler, value) {
return
}
}
if x.SkipPostHandler != false {
value := protoreflect.ValueOfBool(x.SkipPostHandler)
if !f(fd_Config_skip_post_handler, value) {
return
}
}
}
// Has reports whether a field is populated.
@ -118,10 +102,6 @@ func (x *fastReflection_Config) Range(f func(protoreflect.FieldDescriptor, proto
// a repeated field is populated if it is non-empty.
func (x *fastReflection_Config) Has(fd protoreflect.FieldDescriptor) bool {
switch fd.FullName() {
case "cosmos.tx.config.v1.Config.skip_ante_handler":
return x.SkipAnteHandler != false
case "cosmos.tx.config.v1.Config.skip_post_handler":
return x.SkipPostHandler != false
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.config.v1.Config"))
@ -138,10 +118,6 @@ func (x *fastReflection_Config) Has(fd protoreflect.FieldDescriptor) bool {
// Clear is a mutating operation and unsafe for concurrent use.
func (x *fastReflection_Config) Clear(fd protoreflect.FieldDescriptor) {
switch fd.FullName() {
case "cosmos.tx.config.v1.Config.skip_ante_handler":
x.SkipAnteHandler = false
case "cosmos.tx.config.v1.Config.skip_post_handler":
x.SkipPostHandler = false
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.config.v1.Config"))
@ -158,12 +134,6 @@ func (x *fastReflection_Config) Clear(fd protoreflect.FieldDescriptor) {
// of the value; to obtain a mutable reference, use Mutable.
func (x *fastReflection_Config) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value {
switch descriptor.FullName() {
case "cosmos.tx.config.v1.Config.skip_ante_handler":
value := x.SkipAnteHandler
return protoreflect.ValueOfBool(value)
case "cosmos.tx.config.v1.Config.skip_post_handler":
value := x.SkipPostHandler
return protoreflect.ValueOfBool(value)
default:
if descriptor.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.config.v1.Config"))
@ -184,10 +154,6 @@ func (x *fastReflection_Config) Get(descriptor protoreflect.FieldDescriptor) pro
// Set is a mutating operation and unsafe for concurrent use.
func (x *fastReflection_Config) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) {
switch fd.FullName() {
case "cosmos.tx.config.v1.Config.skip_ante_handler":
x.SkipAnteHandler = value.Bool()
case "cosmos.tx.config.v1.Config.skip_post_handler":
x.SkipPostHandler = value.Bool()
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.config.v1.Config"))
@ -208,10 +174,6 @@ func (x *fastReflection_Config) Set(fd protoreflect.FieldDescriptor, value proto
// Mutable is a mutating operation and unsafe for concurrent use.
func (x *fastReflection_Config) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value {
switch fd.FullName() {
case "cosmos.tx.config.v1.Config.skip_ante_handler":
panic(fmt.Errorf("field skip_ante_handler of message cosmos.tx.config.v1.Config is not mutable"))
case "cosmos.tx.config.v1.Config.skip_post_handler":
panic(fmt.Errorf("field skip_post_handler of message cosmos.tx.config.v1.Config is not mutable"))
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.config.v1.Config"))
@ -225,10 +187,6 @@ func (x *fastReflection_Config) Mutable(fd protoreflect.FieldDescriptor) protore
// For lists, maps, and messages, this returns a new, empty, mutable value.
func (x *fastReflection_Config) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value {
switch fd.FullName() {
case "cosmos.tx.config.v1.Config.skip_ante_handler":
return protoreflect.ValueOfBool(false)
case "cosmos.tx.config.v1.Config.skip_post_handler":
return protoreflect.ValueOfBool(false)
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.config.v1.Config"))
@ -298,12 +256,6 @@ func (x *fastReflection_Config) ProtoMethods() *protoiface.Methods {
var n int
var l int
_ = l
if x.SkipAnteHandler {
n += 2
}
if x.SkipPostHandler {
n += 2
}
if x.unknownFields != nil {
n += len(x.unknownFields)
}
@ -333,26 +285,6 @@ func (x *fastReflection_Config) ProtoMethods() *protoiface.Methods {
i -= len(x.unknownFields)
copy(dAtA[i:], x.unknownFields)
}
if x.SkipPostHandler {
i--
if x.SkipPostHandler {
dAtA[i] = 1
} else {
dAtA[i] = 0
}
i--
dAtA[i] = 0x10
}
if x.SkipAnteHandler {
i--
if x.SkipAnteHandler {
dAtA[i] = 1
} else {
dAtA[i] = 0
}
i--
dAtA[i] = 0x8
}
if input.Buf != nil {
input.Buf = append(input.Buf, dAtA...)
} else {
@ -402,46 +334,6 @@ func (x *fastReflection_Config) ProtoMethods() *protoiface.Methods {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Config: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 0 {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field SkipAnteHandler", wireType)
}
var v int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow
}
if iNdEx >= l {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
x.SkipAnteHandler = bool(v != 0)
case 2:
if wireType != 0 {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field SkipPostHandler", wireType)
}
var v int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow
}
if iNdEx >= l {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
x.SkipPostHandler = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := runtime.Skip(dAtA[iNdEx:])
@ -495,13 +387,6 @@ type Config struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// skip_ante_handler defines whether the ante handler registration should be skipped in case an app wants to override
// this functionality.
SkipAnteHandler bool `protobuf:"varint,1,opt,name=skip_ante_handler,json=skipAnteHandler,proto3" json:"skip_ante_handler,omitempty"`
// skip_post_handler defines whether the post handler registration should be skipped in case an app wants to override
// this functionality.
SkipPostHandler bool `protobuf:"varint,2,opt,name=skip_post_handler,json=skipPostHandler,proto3" json:"skip_post_handler,omitempty"`
}
func (x *Config) Reset() {
@ -524,20 +409,6 @@ func (*Config) Descriptor() ([]byte, []int) {
return file_cosmos_tx_config_v1_config_proto_rawDescGZIP(), []int{0}
}
func (x *Config) GetSkipAnteHandler() bool {
if x != nil {
return x.SkipAnteHandler
}
return false
}
func (x *Config) GetSkipPostHandler() bool {
if x != nil {
return x.SkipPostHandler
}
return false
}
var File_cosmos_tx_config_v1_config_proto protoreflect.FileDescriptor
var file_cosmos_tx_config_v1_config_proto_rawDesc = []byte{
@ -546,29 +417,24 @@ var file_cosmos_tx_config_v1_config_proto_rawDesc = []byte{
0x74, 0x6f, 0x12, 0x13, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x63, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x1a, 0x20, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f,
0x61, 0x70, 0x70, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x6d, 0x6f, 0x64,
0x75, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x90, 0x01, 0x0a, 0x06, 0x43, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x61, 0x6e, 0x74,
0x65, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52,
0x0f, 0x73, 0x6b, 0x69, 0x70, 0x41, 0x6e, 0x74, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72,
0x12, 0x2a, 0x0a, 0x11, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x68, 0x61,
0x6e, 0x64, 0x6c, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x73, 0x6b, 0x69,
0x70, 0x50, 0x6f, 0x73, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x3a, 0x2e, 0xba, 0xc0,
0x96, 0xda, 0x01, 0x28, 0x0a, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73,
0x64, 0x6b, 0x2f, 0x78, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x78, 0x42, 0xc4, 0x01, 0x0a,
0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x63,
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73,
0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73,
0x2f, 0x74, 0x78, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x54, 0x43, 0xaa, 0x02, 0x13, 0x43,
0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x54, 0x78, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e,
0x56, 0x31, 0xca, 0x02, 0x13, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x54, 0x78, 0x5c, 0x43,
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1f, 0x43, 0x6f, 0x73, 0x6d, 0x6f,
0x73, 0x5c, 0x54, 0x78, 0x5c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5c, 0x56, 0x31, 0x5c, 0x47,
0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x16, 0x43, 0x6f, 0x73,
0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x54, 0x78, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x3a,
0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x75, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x38, 0x0a, 0x06, 0x43, 0x6f, 0x6e,
0x66, 0x69, 0x67, 0x3a, 0x2e, 0xba, 0xc0, 0x96, 0xda, 0x01, 0x28, 0x0a, 0x26, 0x67, 0x69, 0x74,
0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63,
0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x78, 0x2f, 0x61, 0x75, 0x74, 0x68,
0x2f, 0x74, 0x78, 0x42, 0xc4, 0x01, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d,
0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x42,
0x0b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d,
0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69,
0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x74, 0x78, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x76, 0x31, 0xa2, 0x02, 0x03,
0x43, 0x54, 0x43, 0xaa, 0x02, 0x13, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x54, 0x78, 0x2e,
0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x13, 0x43, 0x6f, 0x73, 0x6d,
0x6f, 0x73, 0x5c, 0x54, 0x78, 0x5c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5c, 0x56, 0x31, 0xe2,
0x02, 0x1f, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x54, 0x78, 0x5c, 0x43, 0x6f, 0x6e, 0x66,
0x69, 0x67, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
0x61, 0xea, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x54, 0x78, 0x3a, 0x3a,
0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x33,
}
var (

View File

@ -0,0 +1,504 @@
// Code generated by protoc-gen-go-pulsar. DO NOT EDIT.
package modulev1
import (
_ "cosmossdk.io/api/cosmos/app/v1alpha1"
fmt "fmt"
runtime "github.com/cosmos/cosmos-proto/runtime"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoiface "google.golang.org/protobuf/runtime/protoiface"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
io "io"
reflect "reflect"
sync "sync"
)
var (
md_Module protoreflect.MessageDescriptor
)
func init() {
file_cosmos_validate_module_v1_module_proto_init()
md_Module = File_cosmos_validate_module_v1_module_proto.Messages().ByName("Module")
}
var _ protoreflect.Message = (*fastReflection_Module)(nil)
type fastReflection_Module Module
func (x *Module) ProtoReflect() protoreflect.Message {
return (*fastReflection_Module)(x)
}
func (x *Module) slowProtoReflect() protoreflect.Message {
mi := &file_cosmos_validate_module_v1_module_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
var _fastReflection_Module_messageType fastReflection_Module_messageType
var _ protoreflect.MessageType = fastReflection_Module_messageType{}
type fastReflection_Module_messageType struct{}
func (x fastReflection_Module_messageType) Zero() protoreflect.Message {
return (*fastReflection_Module)(nil)
}
func (x fastReflection_Module_messageType) New() protoreflect.Message {
return new(fastReflection_Module)
}
func (x fastReflection_Module_messageType) Descriptor() protoreflect.MessageDescriptor {
return md_Module
}
// Descriptor returns message descriptor, which contains only the protobuf
// type information for the message.
func (x *fastReflection_Module) Descriptor() protoreflect.MessageDescriptor {
return md_Module
}
// Type returns the message type, which encapsulates both Go and protobuf
// type information. If the Go type information is not needed,
// it is recommended that the message descriptor be used instead.
func (x *fastReflection_Module) Type() protoreflect.MessageType {
return _fastReflection_Module_messageType
}
// New returns a newly allocated and mutable empty message.
func (x *fastReflection_Module) New() protoreflect.Message {
return new(fastReflection_Module)
}
// Interface unwraps the message reflection interface and
// returns the underlying ProtoMessage interface.
func (x *fastReflection_Module) Interface() protoreflect.ProtoMessage {
return (*Module)(x)
}
// Range iterates over every populated field in an undefined order,
// calling f for each field descriptor and value encountered.
// Range returns immediately if f returns false.
// While iterating, mutating operations may only be performed
// on the current field descriptor.
func (x *fastReflection_Module) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
}
// Has reports whether a field is populated.
//
// Some fields have the property of nullability where it is possible to
// distinguish between the default value of a field and whether the field
// was explicitly populated with the default value. Singular message fields,
// member fields of a oneof, and proto2 scalar fields are nullable. Such
// fields are populated only if explicitly set.
//
// In other cases (aside from the nullable cases above),
// a proto3 scalar field is populated if it contains a non-zero value, and
// a repeated field is populated if it is non-empty.
func (x *fastReflection_Module) Has(fd protoreflect.FieldDescriptor) bool {
switch fd.FullName() {
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.validate.module.v1.Module"))
}
panic(fmt.Errorf("message cosmos.validate.module.v1.Module does not contain field %s", fd.FullName()))
}
}
// Clear clears the field such that a subsequent Has call reports false.
//
// Clearing an extension field clears both the extension type and value
// associated with the given field number.
//
// Clear is a mutating operation and unsafe for concurrent use.
func (x *fastReflection_Module) Clear(fd protoreflect.FieldDescriptor) {
switch fd.FullName() {
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.validate.module.v1.Module"))
}
panic(fmt.Errorf("message cosmos.validate.module.v1.Module does not contain field %s", fd.FullName()))
}
}
// Get retrieves the value for a field.
//
// For unpopulated scalars, it returns the default value, where
// the default value of a bytes scalar is guaranteed to be a copy.
// For unpopulated composite types, it returns an empty, read-only view
// of the value; to obtain a mutable reference, use Mutable.
func (x *fastReflection_Module) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value {
switch descriptor.FullName() {
default:
if descriptor.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.validate.module.v1.Module"))
}
panic(fmt.Errorf("message cosmos.validate.module.v1.Module does not contain field %s", descriptor.FullName()))
}
}
// Set stores the value for a field.
//
// For a field belonging to a oneof, it implicitly clears any other field
// that may be currently set within the same oneof.
// For extension fields, it implicitly stores the provided ExtensionType.
// When setting a composite type, it is unspecified whether the stored value
// aliases the source's memory in any way. If the composite value is an
// empty, read-only value, then it panics.
//
// Set is a mutating operation and unsafe for concurrent use.
func (x *fastReflection_Module) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) {
switch fd.FullName() {
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.validate.module.v1.Module"))
}
panic(fmt.Errorf("message cosmos.validate.module.v1.Module does not contain field %s", fd.FullName()))
}
}
// Mutable returns a mutable reference to a composite type.
//
// If the field is unpopulated, it may allocate a composite value.
// For a field belonging to a oneof, it implicitly clears any other field
// that may be currently set within the same oneof.
// For extension fields, it implicitly stores the provided ExtensionType
// if not already stored.
// It panics if the field does not contain a composite type.
//
// Mutable is a mutating operation and unsafe for concurrent use.
func (x *fastReflection_Module) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value {
switch fd.FullName() {
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.validate.module.v1.Module"))
}
panic(fmt.Errorf("message cosmos.validate.module.v1.Module does not contain field %s", fd.FullName()))
}
}
// NewField returns a new value that is assignable to the field
// for the given descriptor. For scalars, this returns the default value.
// For lists, maps, and messages, this returns a new, empty, mutable value.
func (x *fastReflection_Module) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value {
switch fd.FullName() {
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.validate.module.v1.Module"))
}
panic(fmt.Errorf("message cosmos.validate.module.v1.Module does not contain field %s", fd.FullName()))
}
}
// WhichOneof reports which field within the oneof is populated,
// returning nil if none are populated.
// It panics if the oneof descriptor does not belong to this message.
func (x *fastReflection_Module) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor {
switch d.FullName() {
default:
panic(fmt.Errorf("%s is not a oneof field in cosmos.validate.module.v1.Module", d.FullName()))
}
panic("unreachable")
}
// GetUnknown retrieves the entire list of unknown fields.
// The caller may only mutate the contents of the RawFields
// if the mutated bytes are stored back into the message with SetUnknown.
func (x *fastReflection_Module) GetUnknown() protoreflect.RawFields {
return x.unknownFields
}
// SetUnknown stores an entire list of unknown fields.
// The raw fields must be syntactically valid according to the wire format.
// An implementation may panic if this is not the case.
// Once stored, the caller must not mutate the content of the RawFields.
// An empty RawFields may be passed to clear the fields.
//
// SetUnknown is a mutating operation and unsafe for concurrent use.
func (x *fastReflection_Module) SetUnknown(fields protoreflect.RawFields) {
x.unknownFields = fields
}
// IsValid reports whether the message is valid.
//
// An invalid message is an empty, read-only value.
//
// An invalid message often corresponds to a nil pointer of the concrete
// message type, but the details are implementation dependent.
// Validity is not part of the protobuf data model, and may not
// be preserved in marshaling or other operations.
func (x *fastReflection_Module) IsValid() bool {
return x != nil
}
// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations.
// This method may return nil.
//
// The returned methods type is identical to
// "google.golang.org/protobuf/runtime/protoiface".Methods.
// Consult the protoiface package documentation for details.
func (x *fastReflection_Module) ProtoMethods() *protoiface.Methods {
size := func(input protoiface.SizeInput) protoiface.SizeOutput {
x := input.Message.Interface().(*Module)
if x == nil {
return protoiface.SizeOutput{
NoUnkeyedLiterals: input.NoUnkeyedLiterals,
Size: 0,
}
}
options := runtime.SizeInputToOptions(input)
_ = options
var n int
var l int
_ = l
if x.unknownFields != nil {
n += len(x.unknownFields)
}
return protoiface.SizeOutput{
NoUnkeyedLiterals: input.NoUnkeyedLiterals,
Size: n,
}
}
marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) {
x := input.Message.Interface().(*Module)
if x == nil {
return protoiface.MarshalOutput{
NoUnkeyedLiterals: input.NoUnkeyedLiterals,
Buf: input.Buf,
}, nil
}
options := runtime.MarshalInputToOptions(input)
_ = options
size := options.Size(x)
dAtA := make([]byte, size)
i := len(dAtA)
_ = i
var l int
_ = l
if x.unknownFields != nil {
i -= len(x.unknownFields)
copy(dAtA[i:], x.unknownFields)
}
if input.Buf != nil {
input.Buf = append(input.Buf, dAtA...)
} else {
input.Buf = dAtA
}
return protoiface.MarshalOutput{
NoUnkeyedLiterals: input.NoUnkeyedLiterals,
Buf: input.Buf,
}, nil
}
unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) {
x := input.Message.Interface().(*Module)
if x == nil {
return protoiface.UnmarshalOutput{
NoUnkeyedLiterals: input.NoUnkeyedLiterals,
Flags: input.Flags,
}, nil
}
options := runtime.UnmarshalInputToOptions(input)
_ = options
dAtA := input.Buf
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow
}
if iNdEx >= l {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Module: wiretype end group for non-group")
}
if fieldNum <= 0 {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Module: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
default:
iNdEx = preIndex
skippy, err := runtime.Skip(dAtA[iNdEx:])
if err != nil {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err
}
if (skippy < 0) || (iNdEx+skippy) < 0 {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength
}
if (iNdEx + skippy) > l {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
}
if !options.DiscardUnknown {
x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
}
iNdEx += skippy
}
}
if iNdEx > l {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
}
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil
}
return &protoiface.Methods{
NoUnkeyedLiterals: struct{}{},
Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown,
Size: size,
Marshal: marshal,
Unmarshal: unmarshal,
Merge: nil,
CheckInitialized: nil,
}
}
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.27.0
// protoc (unknown)
// source: cosmos/validate/module/v1/module.proto
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// Module is the config object of the x/validate module.
type Module struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
func (x *Module) Reset() {
*x = Module{}
if protoimpl.UnsafeEnabled {
mi := &file_cosmos_validate_module_v1_module_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Module) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Module) ProtoMessage() {}
// Deprecated: Use Module.ProtoReflect.Descriptor instead.
func (*Module) Descriptor() ([]byte, []int) {
return file_cosmos_validate_module_v1_module_proto_rawDescGZIP(), []int{0}
}
var File_cosmos_validate_module_v1_module_proto protoreflect.FileDescriptor
var file_cosmos_validate_module_v1_module_proto_rawDesc = []byte{
0x0a, 0x26, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
0x65, 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x75,
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73,
0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65,
0x2e, 0x76, 0x31, 0x1a, 0x20, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x61, 0x70, 0x70, 0x2f,
0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x39, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3a,
0x2f, 0xba, 0xc0, 0x96, 0xda, 0x01, 0x29, 0x0a, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f,
0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x78, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65,
0x42, 0xe8, 0x01, 0x0a, 0x1d, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e,
0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e,
0x76, 0x31, 0x42, 0x0b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50,
0x01, 0x5a, 0x33, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f,
0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64,
0x61, 0x74, 0x65, 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x6f,
0x64, 0x75, 0x6c, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x56, 0x4d, 0xaa, 0x02, 0x19, 0x43,
0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x4d,
0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x19, 0x43, 0x6f, 0x73, 0x6d, 0x6f,
0x73, 0x5c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x5c, 0x4d, 0x6f, 0x64, 0x75, 0x6c,
0x65, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x25, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x56, 0x61,
0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x5c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5c, 0x56, 0x31,
0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1c, 0x43,
0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x3a,
0x3a, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x33,
}
var (
file_cosmos_validate_module_v1_module_proto_rawDescOnce sync.Once
file_cosmos_validate_module_v1_module_proto_rawDescData = file_cosmos_validate_module_v1_module_proto_rawDesc
)
func file_cosmos_validate_module_v1_module_proto_rawDescGZIP() []byte {
file_cosmos_validate_module_v1_module_proto_rawDescOnce.Do(func() {
file_cosmos_validate_module_v1_module_proto_rawDescData = protoimpl.X.CompressGZIP(file_cosmos_validate_module_v1_module_proto_rawDescData)
})
return file_cosmos_validate_module_v1_module_proto_rawDescData
}
var file_cosmos_validate_module_v1_module_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
var file_cosmos_validate_module_v1_module_proto_goTypes = []interface{}{
(*Module)(nil), // 0: cosmos.validate.module.v1.Module
}
var file_cosmos_validate_module_v1_module_proto_depIdxs = []int32{
0, // [0:0] is the sub-list for method output_type
0, // [0:0] is the sub-list for method input_type
0, // [0:0] is the sub-list for extension type_name
0, // [0:0] is the sub-list for extension extendee
0, // [0:0] is the sub-list for field type_name
}
func init() { file_cosmos_validate_module_v1_module_proto_init() }
func file_cosmos_validate_module_v1_module_proto_init() {
if File_cosmos_validate_module_v1_module_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_cosmos_validate_module_v1_module_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Module); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_cosmos_validate_module_v1_module_proto_rawDesc,
NumEnums: 0,
NumMessages: 1,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_cosmos_validate_module_v1_module_proto_goTypes,
DependencyIndexes: file_cosmos_validate_module_v1_module_proto_depIdxs,
MessageInfos: file_cosmos_validate_module_v1_module_proto_msgTypes,
}.Build()
File_cosmos_validate_module_v1_module_proto = out.File
file_cosmos_validate_module_v1_module_proto_rawDesc = nil
file_cosmos_validate_module_v1_module_proto_goTypes = nil
file_cosmos_validate_module_v1_module_proto_depIdxs = nil
}

View File

@ -9,12 +9,4 @@ message Config {
option (cosmos.app.v1alpha1.module) = {
go_import: "github.com/cosmos/cosmos-sdk/x/auth/tx"
};
// skip_ante_handler defines whether the ante handler registration should be skipped in case an app wants to override
// this functionality.
bool skip_ante_handler = 1;
// skip_post_handler defines whether the post handler registration should be skipped in case an app wants to override
// this functionality.
bool skip_post_handler = 2;
}

View File

@ -0,0 +1,12 @@
syntax = "proto3";
package cosmos.validate.module.v1;
import "cosmos/app/v1alpha1/module.proto";
// Module is the config object of the x/validate module.
message Module {
option (cosmos.app.v1alpha1.module) = {
go_import: "github.com/cosmos/cosmos-sdk/x/validate"
};
}

View File

@ -28,6 +28,7 @@ import (
stakingmodulev1 "cosmossdk.io/api/cosmos/staking/module/v1"
txconfigv1 "cosmossdk.io/api/cosmos/tx/config/v1"
upgrademodulev1 "cosmossdk.io/api/cosmos/upgrade/module/v1"
validatemodulev1 "cosmossdk.io/api/cosmos/validate/module/v1"
vestingmodulev1 "cosmossdk.io/api/cosmos/vesting/module/v1"
"cosmossdk.io/depinject/appconfig"
"cosmossdk.io/x/accounts"
@ -69,11 +70,12 @@ import (
"github.com/cosmos/cosmos-sdk/runtime"
_ "github.com/cosmos/cosmos-sdk/testutil/x/counter" // import for side-effects
_ "github.com/cosmos/cosmos-sdk/x/auth/tx/config" // import for side-effects
authtxconfig "github.com/cosmos/cosmos-sdk/x/auth/tx/config"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
_ "github.com/cosmos/cosmos-sdk/x/auth/vesting" // import for side-effects
vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types"
genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types"
"github.com/cosmos/cosmos-sdk/x/validate"
)
var (
@ -181,10 +183,19 @@ var (
// SkipStoreKeys is an optional list of store keys to skip when constructing the
// module's keeper. This is useful when a module does not have a store key.
SkipStoreKeys: []string{
"tx",
authtxconfig.DepinjectModuleName,
validate.ModuleName,
},
}),
},
{
Name: authtxconfig.DepinjectModuleName, // x/auth/tx/config depinject module (not app module), use to provide tx configuration
Config: appconfig.WrapAny(&txconfigv1.Config{}),
},
{
Name: validate.ModuleName,
Config: appconfig.WrapAny(&validatemodulev1.Module{}),
},
{
Name: authtypes.ModuleName,
Config: appconfig.WrapAny(&authmodulev1.Module{
@ -218,12 +229,6 @@ var (
Name: slashingtypes.ModuleName,
Config: appconfig.WrapAny(&slashingmodulev1.Module{}),
},
{
Name: "tx",
Config: appconfig.WrapAny(&txconfigv1.Config{
SkipAnteHandler: true, // SimApp is using non default AnteHandler such as circuit and unorderedtx decorators
}),
},
{
Name: genutiltypes.ModuleName,
Config: appconfig.WrapAny(&genutilmodulev1.Module{}),

View File

@ -34,6 +34,7 @@ func Test_TestnetCmd(t *testing.T) {
configurator.StakingModule(),
configurator.ConsensusModule(),
configurator.TxModule(),
configurator.ValidateModule(),
configurator.MintModule(),
)
var moduleManager *module.Manager

View File

@ -28,6 +28,7 @@ import (
stakingmodulev1 "cosmossdk.io/api/cosmos/staking/module/v1"
txconfigv1 "cosmossdk.io/api/cosmos/tx/config/v1"
upgrademodulev1 "cosmossdk.io/api/cosmos/upgrade/module/v1"
validatemodulev1 "cosmossdk.io/api/cosmos/validate/module/v1"
vestingmodulev1 "cosmossdk.io/api/cosmos/vesting/module/v1"
"cosmossdk.io/depinject/appconfig"
"cosmossdk.io/x/accounts"
@ -68,12 +69,13 @@ import (
upgradetypes "cosmossdk.io/x/upgrade/types"
"github.com/cosmos/cosmos-sdk/runtime"
_ "github.com/cosmos/cosmos-sdk/x/auth" // import for side-effects
_ "github.com/cosmos/cosmos-sdk/x/auth/tx/config" // import for side-effects
_ "github.com/cosmos/cosmos-sdk/x/auth" // import for side-effects
authtxconfig "github.com/cosmos/cosmos-sdk/x/auth/tx/config"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
_ "github.com/cosmos/cosmos-sdk/x/auth/vesting" // import for side-effects
vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types"
genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types"
"github.com/cosmos/cosmos-sdk/x/validate"
)
var (
@ -183,8 +185,22 @@ var (
QueryGasLimit: 100_000,
SimulationGasLimit: 100_000,
},
// SkipStoreKeys is an optional list of store keys to skip when constructing the
// module's keeper. This is useful when a module does not have a store key.
SkipStoreKeys: []string{
authtxconfig.DepinjectModuleName,
validate.ModuleName,
},
}),
},
{
Name: authtxconfig.DepinjectModuleName, // x/auth/tx/config depinject module (not app module), use to provide tx configuration
Config: appconfig.WrapAny(&txconfigv1.Config{}),
},
{
Name: validate.ModuleName,
Config: appconfig.WrapAny(&validatemodulev1.Module{}),
},
{
Name: authtypes.ModuleName,
Config: appconfig.WrapAny(&authmodulev1.Module{
@ -218,10 +234,6 @@ var (
Name: slashingtypes.ModuleName,
Config: appconfig.WrapAny(&slashingmodulev1.Module{}),
},
{
Name: "tx",
Config: appconfig.WrapAny(&txconfigv1.Config{}),
},
{
Name: genutiltypes.ModuleName,
Config: appconfig.WrapAny(&genutilmodulev1.Module{}),

View File

@ -6,6 +6,7 @@ import (
"math/rand"
"testing"
gogoproto "github.com/cosmos/gogoproto/proto"
gogoany "github.com/cosmos/gogoproto/types/any"
"cosmossdk.io/simapp"

View File

@ -20,6 +20,7 @@ var AppConfig = configurator.NewAppConfig(
configurator.VestingModule(),
configurator.StakingModule(),
configurator.TxModule(),
configurator.ValidateModule(),
configurator.ConsensusModule(),
configurator.GenutilModule(),
)

View File

@ -88,6 +88,7 @@ func TestBaseApp_BlockGas(t *testing.T) {
configurator.AccountsModule(),
configurator.AuthModule(),
configurator.TxModule(),
configurator.ValidateModule(),
configurator.ConsensusModule(),
configurator.BankModule(),
configurator.StakingModule(),

View File

@ -46,7 +46,7 @@ func TestAuthToAccountsGRPCCompat(t *testing.T) {
valid := &mockRetroCompatAccount{
retroCompat: &authtypes.QueryLegacyAccountResponse{
Account: &codectypes.Any{},
Info: &authtypes.BaseAccount{
Base: &authtypes.BaseAccount{
Address: "test",
PubKey: nil,
AccountNumber: 10,
@ -86,7 +86,7 @@ func TestAuthToAccountsGRPCCompat(t *testing.T) {
Address: f.mustAddr(valid.address),
})
require.NoError(t, err)
require.Equal(t, infoResp.Info, valid.retroCompat.Info)
require.Equal(t, infoResp.Info, valid.retroCompat.Base)
accountResp, err := qs.Account(f.ctx, &authtypes.QueryAccountRequest{
Address: f.mustAddr(noInfo.address),

View File

@ -97,6 +97,7 @@ func createTestSuite(t *testing.T, genesisAccounts []authtypes.GenesisAccount) s
configurator.AuthModule(),
configurator.StakingModule(),
configurator.TxModule(),
configurator.ValidateModule(),
configurator.ConsensusModule(),
configurator.BankModule(),
configurator.GovModule(),

View File

@ -21,6 +21,7 @@ var AppConfig = configurator.NewAppConfig(
configurator.BankModule(),
configurator.StakingModule(),
configurator.TxModule(),
configurator.ValidateModule(),
configurator.ConsensusModule(),
configurator.GenutilModule(),
configurator.DistributionModule(),

View File

@ -21,6 +21,7 @@ var AppConfig = configurator.NewAppConfig(
configurator.StakingModule(),
configurator.SlashingModule(),
configurator.TxModule(),
configurator.ValidateModule(),
configurator.ConsensusModule(),
configurator.EvidenceModule(),
configurator.GenutilModule(),

View File

@ -19,6 +19,7 @@ var AppConfig = configurator.NewAppConfig(
configurator.BankModule(),
configurator.StakingModule(),
configurator.TxModule(),
configurator.ValidateModule(),
configurator.ConsensusModule(),
configurator.GenutilModule(),
configurator.MintModule(),

View File

@ -21,6 +21,7 @@ var AppConfig = configurator.NewAppConfig(
configurator.BankModule(),
configurator.StakingModule(),
configurator.TxModule(),
configurator.ValidateModule(),
configurator.ConsensusModule(),
configurator.GenutilModule(),
configurator.MintModule(),

View File

@ -46,6 +46,7 @@ func initFixture(t assert.TestingT) *fixture {
configurator.AccountsModule(),
configurator.AuthModule(),
configurator.TxModule(),
configurator.ValidateModule(),
configurator.ConsensusModule(),
configurator.BankModule(),
configurator.StakingModule(),

View File

@ -45,6 +45,7 @@ func (s *IntegrationTestOutOfGasSuite) SetupSuite() {
configurator.StakingModule(),
configurator.ConsensusModule(),
configurator.TxModule(),
configurator.ValidateModule(),
), baseapp.SetQueryGasLimit(10))
s.NoError(err)
s.cfg.NumValidators = 1

View File

@ -56,6 +56,7 @@ func (s *IntegrationTestSuite) SetupSuite() {
configurator.StakingModule(),
configurator.ConsensusModule(),
configurator.TxModule(),
configurator.ValidateModule(),
))
s.NoError(err)
s.cfg.NumValidators = 1

View File

@ -23,6 +23,7 @@ var AppConfig = configurator.NewAppConfig(
configurator.StakingModule(),
configurator.SlashingModule(),
configurator.TxModule(),
configurator.ValidateModule(),
configurator.ConsensusModule(),
configurator.GenutilModule(),
configurator.MintModule(),

View File

@ -67,6 +67,7 @@ func TestSlashingMsgs(t *testing.T) {
configurator.StakingModule(),
configurator.SlashingModule(),
configurator.TxModule(),
configurator.ValidateModule(),
configurator.ConsensusModule(),
configurator.BankModule(),
),

View File

@ -22,6 +22,7 @@ var AppConfig = configurator.NewAppConfig(
configurator.BankModule(),
configurator.StakingModule(),
configurator.TxModule(),
configurator.ValidateModule(),
configurator.ConsensusModule(),
configurator.GenutilModule(),
configurator.MintModule(),

View File

@ -24,11 +24,16 @@ import (
slashingmodulev1 "cosmossdk.io/api/cosmos/slashing/module/v1"
stakingmodulev1 "cosmossdk.io/api/cosmos/staking/module/v1"
txconfigv1 "cosmossdk.io/api/cosmos/tx/config/v1"
validatemodulev1 "cosmossdk.io/api/cosmos/validate/module/v1"
vestingmodulev1 "cosmossdk.io/api/cosmos/vesting/module/v1"
"cosmossdk.io/depinject"
"cosmossdk.io/depinject/appconfig"
"github.com/cosmos/cosmos-sdk/testutil"
_ "github.com/cosmos/cosmos-sdk/x/auth" // import as blank for app wiring
_ "github.com/cosmos/cosmos-sdk/x/auth/tx/config" // import as blank for app wiring
_ "github.com/cosmos/cosmos-sdk/x/genutil" // import as blank for app wiring
_ "github.com/cosmos/cosmos-sdk/x/validate" // import as blank for app wiring
)
// Config should never need to be instantiated manually and is solely used for ModuleOption.
@ -183,13 +188,22 @@ func ParamsModule() ModuleOption {
func TxModule() ModuleOption {
return func(config *Config) {
config.ModuleConfigs[testutil.TxModuleName] = &appv1alpha1.ModuleConfig{
Name: testutil.TxModuleName,
config.ModuleConfigs[testutil.AuthTxConfigDepinjectModuleName] = &appv1alpha1.ModuleConfig{
Name: testutil.AuthTxConfigDepinjectModuleName,
Config: appconfig.WrapAny(&txconfigv1.Config{}),
}
}
}
func ValidateModule() ModuleOption {
return func(config *Config) {
config.ModuleConfigs[testutil.ValidateModuleName] = &appv1alpha1.ModuleConfig{
Name: testutil.ValidateModuleName,
Config: appconfig.WrapAny(&validatemodulev1.Module{}),
}
}
}
func StakingModule() ModuleOption {
return func(config *Config) {
config.ModuleConfigs[testutil.StakingModuleName] = &appv1alpha1.ModuleConfig{

View File

@ -4,23 +4,24 @@ package testutil
// Those constants are defined here to be used in the SDK without importing those modules.
const (
AccountsModuleName = "accounts"
AuthModuleName = "auth"
AuthzModuleName = "authz"
BankModuleName = "bank"
CircuitModuleName = "circuit"
DistributionModuleName = "distribution"
EvidenceModuleName = "evidence"
FeegrantModuleName = "feegrant"
GovModuleName = "gov"
GroupModuleName = "group"
MintModuleName = "mint"
NFTModuleName = "nft"
ParamsModuleName = "params"
ProtocolPoolModuleName = "protocolpool"
SlashingModuleName = "slashing"
StakingModuleName = "staking"
TxModuleName = "tx"
UpgradeModuleName = "upgrade"
EpochsModuleName = "epochs"
AccountsModuleName = "accounts"
AuthModuleName = "auth"
AuthzModuleName = "authz"
BankModuleName = "bank"
CircuitModuleName = "circuit"
DistributionModuleName = "distribution"
EvidenceModuleName = "evidence"
FeegrantModuleName = "feegrant"
GovModuleName = "gov"
GroupModuleName = "group"
MintModuleName = "mint"
NFTModuleName = "nft"
ParamsModuleName = "params"
ProtocolPoolModuleName = "protocolpool"
SlashingModuleName = "slashing"
StakingModuleName = "staking"
AuthTxConfigDepinjectModuleName = "tx"
UpgradeModuleName = "upgrade"
EpochsModuleName = "epochs"
ValidateModuleName = "validate"
)

View File

@ -26,6 +26,7 @@ Here are some production-grade modules that can be used in Cosmos SDK applicatio
* [Staking](./staking/README.md) - Proof-of-Stake layer for public blockchains.
* [Tx](./tx/README.md) - Tx utilities for the Cosmos SDK.
* [Upgrade](./upgrade/README.md) - Software upgrades handling and coordination.
* [Validate](./validate/README.md) - Global ante/post handlers and tx validator setup.
To learn more about the process of building modules, visit the [building modules reference documentation](https://docs.cosmos.network/main/building-modules/intro).

View File

@ -296,7 +296,7 @@ func (a Account) AuthRetroCompatibility(ctx context.Context, _ *authtypes.QueryL
return &authtypes.QueryLegacyAccountResponse{
Account: baseAccountAny,
Info: baseAccount,
Base: baseAccount,
}, nil
}

View File

@ -231,10 +231,10 @@ func (s queryServer) AccountInfo(ctx context.Context, req *types.QueryAccountInf
xAccount, err := s.getFromXAccounts(ctx, addr)
// account info is nil it means that the account can be encapsulated into a
// legacy account representation but not a base account one.
if err != nil || xAccount.Info == nil {
if err != nil || xAccount.Base == nil {
return nil, status.Errorf(codes.NotFound, "account %s not found", req.Address)
}
return &types.QueryAccountInfoResponse{Info: xAccount.Info}, nil
return &types.QueryAccountInfoResponse{Info: xAccount.Base}, nil
}
// if there is no public key, avoid serializing the nil value

View File

@ -1,8 +0,0 @@
version: v1
plugins:
- name: gocosmos
out: ..
opt: plugins=grpc,Mgoogle/protobuf/any.proto=github.com/cosmos/gogoproto/types/any
- name: grpc-gateway
out: ..
opt: logtostderr=true,allow_colon_final_segments=true

View File

@ -1,18 +0,0 @@
version: v1
managed:
enabled: true
go_package_prefix:
default: cosmossdk.io/api
except:
- buf.build/googleapis/googleapis
- buf.build/cosmos/gogo-proto
- buf.build/cosmos/cosmos-proto
override:
buf.build/cosmos/cosmos-sdk: cosmossdk.io/api
plugins:
- name: go-pulsar
out: ..
opt: paths=source_relative
- name: go-grpc
out: ..
opt: paths=source_relative

View File

@ -1,28 +0,0 @@
# Generated by buf. DO NOT EDIT.
version: v1
deps:
- remote: buf.build
owner: cosmos
repository: cosmos-proto
commit: 04467658e59e44bbb22fe568206e1f70
digest: shake256:73a640bd60e0c523b0f8237ff34eab67c45a38b64bbbde1d80224819d272dbf316ac183526bd245f994af6608b025f5130483d0133c5edd385531326b5990466
- remote: buf.build
owner: cosmos
repository: cosmos-sdk
commit: cf13c7d232dd405180c2af616fa8a075
digest: shake256:769a38e306a98339b549bc96991c97fae8bd3ceb1a7646c7bfe9a74e406ab068372970fbc5abda1891e2f3c36527cf2d3a25f631739d36900787226e564bb612
- remote: buf.build
owner: cosmos
repository: gogo-proto
commit: 5e5b9fdd01804356895f8f79a6f1ddc1
digest: shake256:0b85da49e2e5f9ebc4806eae058e2f56096ff3b1c59d1fb7c190413dd15f45dd456f0b69ced9059341c80795d2b6c943de15b120a9e0308b499e43e4b5fc2952
- remote: buf.build
owner: googleapis
repository: googleapis
commit: 28151c0d0a1641bf938a7672c500e01d
digest: shake256:49215edf8ef57f7863004539deff8834cfb2195113f0b890dd1f67815d9353e28e668019165b9d872395871eeafcbab3ccfdb2b5f11734d3cca95be9e8d139de
- remote: buf.build
owner: protocolbuffers
repository: wellknowntypes
commit: 657250e6a39648cbb169d079a60bd9ba
digest: shake256:00de25001b8dd2e29d85fc4bcc3ede7aed886d76d67f5e0f7a9b320b90f871d3eb73507d50818d823a0512f3f8db77a11c043685528403e31ff3fef18323a9fb

View File

@ -1,18 +0,0 @@
version: v1
name: buf.build/mods/auth
deps:
- buf.build/cosmos/cosmos-sdk # pin the Cosmos SDK version
- buf.build/cosmos/cosmos-proto
- buf.build/cosmos/gogo-proto
- buf.build/googleapis/googleapis
lint:
use:
- DEFAULT
- COMMENTS
- FILE_LOWER_SNAKE_CASE
except:
- UNARY_RPC
- COMMENT_FIELD
- SERVICE_SUFFIX
- PACKAGE_VERSION_SUFFIX
- RPC_REQUEST_STANDARD_NAME

View File

@ -17,18 +17,28 @@ This document specifies the `x/auth/tx` package of the Cosmos SDK.
This package represents the Cosmos SDK implementation of the `client.TxConfig`, `client.TxBuilder`, `client.TxEncoder` and `client.TxDecoder` interfaces.
It contains as well a depinject module and app module the registration of ante/post handler via `runtime` and tx validator via `runtime/v2`.
## Contents
* [Transactions](#transactions)
* [`x/auth/tx`](#xauthtx)
* [Abstract](#abstract)
* [Contents](#contents)
* [Transactions](#transactions)
* [`TxConfig`](#txconfig)
* [`TxBuilder`](#txbuilder)
* [`TxEncoder`/ `TxDecoder`](#txencoder-txdecoder)
* [Depinject \& App Module](#depinject--app-module)
* [Client](#client)
* [`x/auth/tx/config`](#xauthtxconfig)
* [Storage](#storage)
* [Client](#client)
* [CLI](#cli)
* [Query](#query)
* [Transactions](#transactions-1)
* [`encode`](#encode)
* [`decode`](#decode)
* [gRPC](#grpc)
* [`TxDecode`](#txdecode)
* [`TxEncode`](#txencode)
* [`TxDecodeAmino`](#txdecodeamino)
* [`TxEncodeAmino`](#txencodeamino)
## Transactions
@ -60,12 +70,21 @@ A `client.TxBuilder` can be accessed with `TxConfig.NewTxBuilder()`.
More information about `TxEncoder` and `TxDecoder` can be found [here](https://docs.cosmos.network/main/core/encoding#transaction-encoding).
## Depinject & App Module
## `x/auth/tx/config`
The `x/auth/tx/config` contains a depinject module and app module.
The depinject module is there to setup ante/post handlers on an runtime app (via baseapp options) and the tx validator on the runtime/v2 app (via app module). It as well outputs the `TxConfig` and `TxConfigOptions` for the app.
The `x/auth/tx/config` contains a depinject module.
The depinject module is to outputs the `TxConfig` and `TxConfigOptions` for the app.
The app module is purely there for registering tx validators, due to the design of tx validators (tx validator belong to modules).
### Storage
This module has no store key. Do not forget to add the module name in the `SkipStoreKeys` runtime config present in the app config.
```go
SkipStoreKeys: []string{
authtxconfig.DepinjectModuleName,
validate.ModuleName,
},
```
## Client

View File

@ -2,8 +2,6 @@ package tx
import (
"context"
"errors"
"fmt"
gogoproto "github.com/cosmos/gogoproto/proto"
"google.golang.org/grpc"
@ -14,9 +12,6 @@ import (
bankv1beta1 "cosmossdk.io/api/cosmos/bank/v1beta1"
txconfigv1 "cosmossdk.io/api/cosmos/tx/config/v1"
"cosmossdk.io/core/address"
appmodulev2 "cosmossdk.io/core/appmodule/v2"
"cosmossdk.io/core/server"
"cosmossdk.io/core/transaction"
"cosmossdk.io/depinject"
"cosmossdk.io/depinject/appconfig"
txsigning "cosmossdk.io/x/tx/signing"
@ -26,17 +21,11 @@ import (
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/runtime"
sdk "github.com/cosmos/cosmos-sdk/types"
signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing"
"github.com/cosmos/cosmos-sdk/x/auth/ante"
"github.com/cosmos/cosmos-sdk/x/auth/ante/unorderedtx"
"github.com/cosmos/cosmos-sdk/x/auth/posthandler"
"github.com/cosmos/cosmos-sdk/x/auth/tx"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
)
// flagMinGasPricesV2 is the flag name for the minimum gas prices in the main server v2 component.
const flagMinGasPricesV2 = "server.minimum-gas-prices"
// DepinjectModuleName is the module name used for depinject.
const DepinjectModuleName = "tx"
func init() {
appconfig.RegisterModule(&txconfigv1.Config{},
@ -48,32 +37,19 @@ func init() {
type ModuleInputs struct {
depinject.In
Config *txconfigv1.Config
AddressCodec address.Codec
ValidatorAddressCodec address.ValidatorAddressCodec
Codec codec.Codec
ProtoFileResolver txsigning.ProtoFileResolver
Environment appmodulev2.Environment
// BankKeeper is the expected bank keeper to be passed to AnteHandlers / Tx Validators
ConsensusKeeper ante.ConsensusKeeper
BankKeeper authtypes.BankKeeper `optional:"true"`
MetadataBankKeeper BankKeeper `optional:"true"`
AccountKeeper ante.AccountKeeper `optional:"true"`
FeeGrantKeeper ante.FeegrantKeeper `optional:"true"`
AccountAbstractionKeeper ante.AccountAbstractionKeeper `optional:"true"`
CustomSignModeHandlers func() []txsigning.SignModeHandler `optional:"true"`
CustomGetSigners []txsigning.CustomGetSigner `optional:"true"`
ExtraTxValidators []appmodulev2.TxValidator[transaction.Tx] `optional:"true"`
UnorderedTxManager *unorderedtx.Manager `optional:"true"`
TxFeeChecker ante.TxFeeChecker `optional:"true"`
DynamicConfig server.DynamicConfig `optional:"true"`
Config *txconfigv1.Config
AddressCodec address.Codec
ValidatorAddressCodec address.ValidatorAddressCodec
Codec codec.Codec
ProtoFileResolver txsigning.ProtoFileResolver
CustomSignModeHandlers func() []txsigning.SignModeHandler `optional:"true"`
CustomGetSigners []txsigning.CustomGetSigner `optional:"true"`
}
type ModuleOutputs struct {
depinject.Out
Module appmodulev2.AppModule // This is only useful for chains using server/v2. It setup tx validators that don't belong to other modules.
BaseAppOption runtime.BaseAppOption // This is only useful for chains using baseapp. Server/v2 chains use TxValidator.
BaseAppOption runtime.BaseAppOption // This is only useful for chains using baseapp.
TxConfig client.TxConfig
TxConfigOptions tx.ConfigOptions
}
@ -103,123 +79,22 @@ func ProvideModule(in ModuleInputs) ModuleOutputs {
txConfigOptions.SigningOptions.CustomGetSigners[mode.MsgType] = mode.Fn
}
// enable SIGN_MODE_TEXTUAL only if bank keeper is available
if in.MetadataBankKeeper != nil {
txConfigOptions.EnabledSignModes = append(txConfigOptions.EnabledSignModes, signingtypes.SignMode_SIGN_MODE_TEXTUAL)
txConfigOptions.TextualCoinMetadataQueryFn = NewBankKeeperCoinMetadataQueryFn(in.MetadataBankKeeper)
}
txConfig, err := tx.NewTxConfigWithOptions(in.Codec, txConfigOptions)
if err != nil {
panic(err)
}
svd := ante.NewSigVerificationDecorator(
in.AccountKeeper,
txConfig.SignModeHandler(),
ante.DefaultSigVerificationGasConsumer,
in.AccountAbstractionKeeper,
)
var (
minGasPrices sdk.DecCoins
feeTxValidator *ante.DeductFeeDecorator
unorderedTxValidator *ante.UnorderedTxDecorator
)
if in.AccountKeeper != nil && in.BankKeeper != nil && in.DynamicConfig != nil {
minGasPricesStr := in.DynamicConfig.GetString(flagMinGasPricesV2)
minGasPrices, err = sdk.ParseDecCoins(minGasPricesStr)
if err != nil {
panic(fmt.Sprintf("invalid minimum gas prices: %v", err))
}
feeTxValidator = ante.NewDeductFeeDecorator(in.AccountKeeper, in.BankKeeper, in.FeeGrantKeeper, in.TxFeeChecker)
feeTxValidator.SetMinGasPrices(minGasPrices) // set min gas price in deduct fee decorator
}
if in.UnorderedTxManager != nil {
unorderedTxValidator = ante.NewUnorderedTxDecorator(unorderedtx.DefaultMaxTimeoutDuration, in.UnorderedTxManager, in.Environment, ante.DefaultSha256Cost)
}
return ModuleOutputs{
Module: NewAppModule(svd, feeTxValidator, unorderedTxValidator, in.ExtraTxValidators...),
BaseAppOption: newBaseAppOption(txConfig, in),
BaseAppOption: func(app *baseapp.BaseApp) {
app.SetTxDecoder(txConfig.TxDecoder())
app.SetTxEncoder(txConfig.TxEncoder())
},
TxConfig: txConfig,
TxConfigOptions: txConfigOptions,
}
}
// newBaseAppOption returns baseapp option that sets the ante handler and post handler
// and set the tx encoder and decoder on baseapp.
func newBaseAppOption(txConfig client.TxConfig, in ModuleInputs) func(app *baseapp.BaseApp) {
return func(app *baseapp.BaseApp) {
// AnteHandlers
if !in.Config.SkipAnteHandler {
anteHandler, err := newAnteHandler(txConfig, in)
if err != nil {
panic(err)
}
app.SetAnteHandler(anteHandler)
}
// PostHandlers
if !in.Config.SkipPostHandler {
// In v0.46, the SDK introduces _postHandlers_. PostHandlers are like
// antehandlers, but are run _after_ the `runMsgs` execution. They are also
// defined as a chain, and have the same signature as antehandlers.
//
// In baseapp, postHandlers are run in the same store branch as `runMsgs`,
// meaning that both `runMsgs` and `postHandler` state will be committed if
// both are successful, and both will be reverted if any of the two fails.
//
// The SDK exposes a default empty postHandlers chain.
//
// Please note that changing any of the anteHandler or postHandler chain is
// likely to be a state-machine breaking change, which needs a coordinated
// upgrade.
postHandler, err := posthandler.NewPostHandler(
posthandler.HandlerOptions{},
)
if err != nil {
panic(err)
}
app.SetPostHandler(postHandler)
}
// TxDecoder/TxEncoder
app.SetTxDecoder(txConfig.TxDecoder())
app.SetTxEncoder(txConfig.TxEncoder())
}
}
func newAnteHandler(txConfig client.TxConfig, in ModuleInputs) (sdk.AnteHandler, error) {
if in.BankKeeper == nil {
return nil, errors.New("both AccountKeeper and BankKeeper are required")
}
anteHandler, err := ante.NewAnteHandler(
ante.HandlerOptions{
Environment: in.Environment,
AccountKeeper: in.AccountKeeper,
ConsensusKeeper: in.ConsensusKeeper,
BankKeeper: in.BankKeeper,
SignModeHandler: txConfig.SignModeHandler(),
FeegrantKeeper: in.FeeGrantKeeper,
SigGasConsumer: ante.DefaultSigVerificationGasConsumer,
UnorderedTxManager: in.UnorderedTxManager,
},
)
if err != nil {
return nil, fmt.Errorf("failed to create ante handler: %w", err)
}
return anteHandler, nil
}
// NewBankKeeperCoinMetadataQueryFn creates a new Textual struct using the given
// BankKeeper to retrieve coin metadata.
//
// This function should be used in the server (app.go) and is already injected thanks to app wiring for app_di.
// NewBankKeeperCoinMetadataQueryFn creates a new Textual struct using the given BankKeeper to retrieve coin metadata.
func NewBankKeeperCoinMetadataQueryFn(bk BankKeeper) textual.CoinMetadataQueryFn {
return func(ctx context.Context, denom string) (*bankv1beta1.Metadata, error) {
res, err := bk.DenomMetadataV2(ctx, &bankv1beta1.QueryDenomMetadataRequest{Denom: denom})

View File

@ -71,9 +71,9 @@ type QueryLegacyAccountResponse struct {
// sdk.AccountI interface.
Account *any.Any `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"`
// info represents the account as a BaseAccount, this can return
// nil if the account cannot be represented as a base account.
// nil if the account cannot be represented as a BaseAccount.
// This is used in the gRPC QueryAccountInfo method.
Info *BaseAccount `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"`
Base *BaseAccount `protobuf:"bytes,2,opt,name=base,proto3" json:"base,omitempty"`
}
func (m *QueryLegacyAccountResponse) Reset() { *m = QueryLegacyAccountResponse{} }
@ -116,9 +116,9 @@ func (m *QueryLegacyAccountResponse) GetAccount() *any.Any {
return nil
}
func (m *QueryLegacyAccountResponse) GetInfo() *BaseAccount {
func (m *QueryLegacyAccountResponse) GetBase() *BaseAccount {
if m != nil {
return m.Info
return m.Base
}
return nil
}
@ -133,23 +133,23 @@ func init() {
}
var fileDescriptor_25696478f9b3e7f4 = []byte{
// 247 bytes of a gzipped FileDescriptorProto
// 246 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0xcf, 0xb1, 0x4e, 0xc3, 0x30,
0x10, 0x06, 0xe0, 0x18, 0x21, 0x90, 0xcc, 0x16, 0x3a, 0x94, 0x0c, 0x56, 0x95, 0x09, 0x06, 0xce,
0x2a, 0xf0, 0x02, 0x2d, 0x2b, 0x0b, 0x1d, 0xd9, 0x1c, 0xe3, 0xa6, 0x15, 0xd4, 0x17, 0xf5, 0x6c,
0x84, 0x57, 0x9e, 0x80, 0xc7, 0x62, 0xec, 0xc8, 0x88, 0x92, 0x17, 0x41, 0xb5, 0x93, 0xa9, 0x9d,
0x2c, 0xd9, 0x9f, 0xef, 0xfe, 0x9f, 0x97, 0x1a, 0x69, 0x83, 0x24, 0x95, 0x77, 0x2b, 0xf9, 0x31,
0xad, 0x8c, 0x53, 0x53, 0xa9, 0xb4, 0x46, 0x6f, 0x1d, 0x41, 0xb3, 0x45, 0x87, 0xf9, 0x65, 0x32,
0xb0, 0x37, 0xd0, 0x9b, 0xe2, 0xaa, 0x46, 0xac, 0xdf, 0x8d, 0x8c, 0xa4, 0xf2, 0x4b, 0xa9, 0x6c,
0x48, 0xbe, 0x10, 0x47, 0x67, 0xee, 0x3f, 0xc7, 0xf7, 0x72, 0xc4, 0xf3, 0x67, 0x6f, 0xb6, 0xe1,
0xc9, 0xd4, 0x4a, 0x87, 0x59, 0x5a, 0x56, 0x7e, 0x31, 0x5e, 0x1c, 0x5e, 0x2f, 0x0c, 0x35, 0x68,
0xc9, 0xe4, 0xc0, 0xcf, 0xfb, 0x58, 0x63, 0x36, 0x61, 0xd7, 0x17, 0x77, 0x23, 0x48, 0x09, 0x60,
0x48, 0x00, 0x33, 0x1b, 0x16, 0x03, 0xca, 0x1f, 0xf8, 0xe9, 0xda, 0x2e, 0x71, 0x7c, 0x12, 0xf1,
0x04, 0x8e, 0x74, 0x80, 0xb9, 0x22, 0x33, 0xec, 0x89, 0x7a, 0xfe, 0xf8, 0xd3, 0x0a, 0xb6, 0x6b,
0x05, 0xfb, 0x6b, 0x05, 0xfb, 0xee, 0x44, 0xb6, 0xeb, 0x44, 0xf6, 0xdb, 0x89, 0xec, 0xe5, 0xa6,
0x5e, 0xbb, 0x95, 0xaf, 0x40, 0xe3, 0x46, 0xf6, 0xfd, 0xd2, 0x71, 0x4b, 0xaf, 0x6f, 0xf2, 0x33,
0x95, 0x75, 0xa1, 0x31, 0x54, 0x9d, 0xc5, 0x44, 0xf7, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0xdf,
0x0d, 0xc9, 0xcb, 0x5c, 0x01, 0x00, 0x00,
0x2a, 0xf0, 0x02, 0x2d, 0x2b, 0x0b, 0x1d, 0xd9, 0x6c, 0x63, 0x52, 0x04, 0xcd, 0x45, 0x3d, 0x1b,
0xe1, 0x95, 0x27, 0xe0, 0xb1, 0x18, 0x3b, 0x32, 0xa2, 0xe4, 0x45, 0x50, 0xed, 0x64, 0x6a, 0x26,
0x4b, 0xf6, 0xe7, 0xbb, 0xff, 0xe7, 0xa5, 0x41, 0xda, 0x20, 0x49, 0xe5, 0xdd, 0x5a, 0x7e, 0xcc,
0xb5, 0x75, 0x6a, 0x2e, 0x95, 0x31, 0xe8, 0x6b, 0x47, 0xd0, 0x6c, 0xd1, 0x61, 0x7e, 0x9e, 0x0c,
0xec, 0x0d, 0xf4, 0xa6, 0xb8, 0xa8, 0x10, 0xab, 0x77, 0x2b, 0x23, 0xd1, 0xfe, 0x45, 0xaa, 0x3a,
0x24, 0x5f, 0x88, 0xd1, 0x99, 0xfb, 0xcf, 0xf1, 0xbd, 0x9c, 0xf0, 0xfc, 0xd1, 0xdb, 0x6d, 0x78,
0xb0, 0x95, 0x32, 0x61, 0x91, 0x96, 0x95, 0x5f, 0x8c, 0x17, 0x87, 0xd7, 0x2b, 0x4b, 0x0d, 0xd6,
0x64, 0x73, 0xe0, 0xa7, 0x7d, 0xac, 0x29, 0x9b, 0xb1, 0xcb, 0xb3, 0x9b, 0x09, 0xa4, 0x04, 0x30,
0x24, 0x80, 0x45, 0x1d, 0x56, 0x03, 0xca, 0xef, 0xf8, 0xb1, 0x56, 0x64, 0xa7, 0x47, 0x11, 0xcf,
0x60, 0xa4, 0x03, 0x2c, 0x15, 0xd9, 0x61, 0x4f, 0xd4, 0xcb, 0xfb, 0x9f, 0x56, 0xb0, 0x5d, 0x2b,
0xd8, 0x5f, 0x2b, 0xd8, 0x77, 0x27, 0xb2, 0x5d, 0x27, 0xb2, 0xdf, 0x4e, 0x64, 0x4f, 0x57, 0xd5,
0xab, 0x5b, 0x7b, 0x0d, 0x06, 0x37, 0xb2, 0xef, 0x97, 0x8e, 0x6b, 0x7a, 0x7e, 0x93, 0x9f, 0xa9,
0xac, 0x0b, 0x8d, 0x25, 0x7d, 0x12, 0x13, 0xdd, 0xfe, 0x07, 0x00, 0x00, 0xff, 0xff, 0x5c, 0xc3,
0xec, 0xca, 0x5c, 0x01, 0x00, 0x00,
}
func (m *QueryLegacyAccount) Marshal() (dAtA []byte, err error) {
@ -195,9 +195,9 @@ func (m *QueryLegacyAccountResponse) MarshalToSizedBuffer(dAtA []byte) (int, err
_ = i
var l int
_ = l
if m.Info != nil {
if m.Base != nil {
{
size, err := m.Info.MarshalToSizedBuffer(dAtA[:i])
size, err := m.Base.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
@ -252,8 +252,8 @@ func (m *QueryLegacyAccountResponse) Size() (n int) {
l = m.Account.Size()
n += 1 + l + sovAccounts(uint64(l))
}
if m.Info != nil {
l = m.Info.Size()
if m.Base != nil {
l = m.Base.Size()
n += 1 + l + sovAccounts(uint64(l))
}
return n
@ -382,7 +382,7 @@ func (m *QueryLegacyAccountResponse) Unmarshal(dAtA []byte) error {
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Info", wireType)
return fmt.Errorf("proto: wrong wireType = %d for field Base", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@ -409,10 +409,10 @@ func (m *QueryLegacyAccountResponse) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
if m.Info == nil {
m.Info = &BaseAccount{}
if m.Base == nil {
m.Base = &BaseAccount{}
}
if err := m.Info.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
if err := m.Base.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex

View File

@ -19,18 +19,17 @@ custom signer definitions, allowing developers to tailor the signing process to
## Contents
- [x/tx](#xtx)
- [Abstract](#abstract)
- [Contents](#contents)
- [Signing](#signing)
- [Key Features](#key-features)
- [Decode](#decode)
- [Key Features](#key-features-1)
- [DecodedTx](#decodedtx)
- [Class Diagram](#class-diagram)
- [Decode Sequence Diagram](#decode-sequence-diagram)
- [Disambiguation Note](#disambiguation-note)
- [Disclaimer](#disclaimer)
* [x/tx](#xtx)
* [Abstract](#abstract)
* [Contents](#contents)
* [Signing](#signing)
* [Key Features](#key-features)
* [Decode](#decode)
* [Key Features](#key-features-1)
* [DecodedTx](#decodedtx)
* [Class Diagram](#class-diagram)
* [Decode Sequence Diagram](#decode-sequence-diagram)
* [Disclaimer](#disclaimer)
## Signing
@ -42,6 +41,7 @@ In summary, the signing package is responsible for preparing the data to be sign
but doesn't handle the actual signing process (i.e., applying a cryptographic signature to these bytes).
### Key Features
1. SignModeHandler Interface: this is the core interface that defines how different signing modes should be implemented.
2. SignModeHandler Implementations:
* [aminojson](https://github.com/cosmos/cosmos-sdk/blob/v0.50.7/docs/architecture/adr-020-protobuf-transaction-encoding.md#sign_mode_legacy_amino)
@ -60,6 +60,7 @@ designed to work with transactions that follow the [ADR-027](https://github.com/
specification for application-defined raw transaction serialization.
### Key Features
1. Transaction Decoding: Parses raw transaction bytes into a structured `DecodedTx` object.
2. ADR-027 Compatibility: Ensures compatibility with the ADR-027 specification.
3. Unknown Field Handling: Rejects unknown fields in TxRaw and AuthInfo, while allowing non-critical unknown fields in TxBody.
@ -72,6 +73,7 @@ specification for application-defined raw transaction serialization.
components of a transaction after it has been parsed from its raw bytes. Here's a breakdown of its structure:
The `DecodedTx` struct has the following fields:
1. DynamicMessages: A slice of proto.Message interfaces, representing the transaction messages in a dynamic format.
2. Messages: A slice of gogoproto.Message interfaces, representing the transaction messages in the gogo protobuf format.
3. Tx: A pointer to a v1beta1.Tx struct, which represents the full transaction in the Cosmos SDK v1beta1 format.
@ -167,5 +169,5 @@ It's important to clarify that `x/tx` is distinct from `x/auth/tx`:
* `x/auth/tx`: This is a separate package and is typically used in the context of building a complete tx is that is going to be broadcast in Cosmos SDK applications.
When you see a "tx" module referenced in `app_config.go` or similar application configuration files, it refers to
`x/auth/tx`, not `x/tx` (as it's not an Appmodule). This naming similarity can be confusing, so it's crucial to pay
attention to the import paths and context when working with these packages.
`x/auth/tx/config`, not `x/tx` (as it's not an Appmodule). This naming similarity can be confusing, so it's crucial to pay
attention to the import paths and context when working with these packages.

35
x/validate/README.md Normal file
View File

@ -0,0 +1,35 @@
# x/validate
:::tip
This module is only required when using runtime and runtime v2 and you want to make use of the pre-defined ante/poste handlers or tx validators.
:::
The `x/validate` is an app module solely there to setup ante/post handlers on a runtime app (via baseapp options) and the global tx validators on a runtime/v2 app (via app module). Depinject will automatically inject the ante/post handlers and tx validators into the app. Module specific tx validators should be registered on their own modules.
## Extra TxValidators
It is possible to add extra tx validators to the app. This is useful when you want to add extra tx validators that do not belong to one specific module. For example, you can add a tx validator that checks if the tx is signed by a specific address.
In your `app.go`, when using runtime/v2, supply the extra tx validators using `depinject`:
```go
appConfig = depinject.Configs(
AppConfig(),
depinject.Supply(
[]appmodulev2.TxValidator[transaction.Tx]{
// Add extra tx validators here
}
),
)
```
## Storage
This module has no store key. Do not forget to add the module name in the `SkipStoreKeys` runtime config present in the app config.
```go
SkipStoreKeys: []string{
authtxconfig.DepinjectModuleName,
validate.ModuleName,
},
```

145
x/validate/depinject.go Normal file
View File

@ -0,0 +1,145 @@
package validate
import (
"fmt"
modulev1 "cosmossdk.io/api/cosmos/validate/module/v1"
appmodulev2 "cosmossdk.io/core/appmodule/v2"
"cosmossdk.io/core/server"
"cosmossdk.io/core/transaction"
"cosmossdk.io/depinject"
"cosmossdk.io/depinject/appconfig"
"github.com/cosmos/cosmos-sdk/baseapp"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/runtime"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/auth/ante"
"github.com/cosmos/cosmos-sdk/x/auth/ante/unorderedtx"
"github.com/cosmos/cosmos-sdk/x/auth/posthandler"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
)
// flagMinGasPricesV2 is the flag name for the minimum gas prices in the main server v2 component.
const flagMinGasPricesV2 = "server.minimum-gas-prices"
func init() {
appconfig.RegisterModule(&modulev1.Module{},
appconfig.Provide(ProvideModule),
)
}
type ModuleInputs struct {
depinject.In
ModuleConfig *modulev1.Module
Environment appmodulev2.Environment
TxConfig client.TxConfig
DynamicConfig server.DynamicConfig `optional:"true"`
AccountKeeper ante.AccountKeeper
BankKeeper authtypes.BankKeeper
ConsensusKeeper ante.ConsensusKeeper
FeeGrantKeeper ante.FeegrantKeeper `optional:"true"`
AccountAbstractionKeeper ante.AccountAbstractionKeeper `optional:"true"`
ExtraTxValidators []appmodulev2.TxValidator[transaction.Tx] `optional:"true"`
UnorderedTxManager *unorderedtx.Manager `optional:"true"`
TxFeeChecker ante.TxFeeChecker `optional:"true"`
}
type ModuleOutputs struct {
depinject.Out
Module appmodulev2.AppModule // Only useful for chains using server/v2. It setup tx validators that don't belong to other modules.
BaseAppOption runtime.BaseAppOption // Only useful for chains using baseapp. Server/v2 chains use TxValidator.
}
func ProvideModule(in ModuleInputs) ModuleOutputs {
svd := ante.NewSigVerificationDecorator(
in.AccountKeeper,
in.TxConfig.SignModeHandler(),
ante.DefaultSigVerificationGasConsumer,
in.AccountAbstractionKeeper, // can be nil
)
var (
err error
minGasPrices sdk.DecCoins
feeTxValidator *ante.DeductFeeDecorator
unorderedTxValidator *ante.UnorderedTxDecorator
)
if in.DynamicConfig != nil {
minGasPricesStr := in.DynamicConfig.GetString(flagMinGasPricesV2)
minGasPrices, err = sdk.ParseDecCoins(minGasPricesStr)
if err != nil {
panic(fmt.Sprintf("invalid minimum gas prices: %v", err))
}
feeTxValidator = ante.NewDeductFeeDecorator(in.AccountKeeper, in.BankKeeper, in.FeeGrantKeeper, in.TxFeeChecker)
feeTxValidator.SetMinGasPrices(minGasPrices) // set min gas price in deduct fee decorator
}
if in.UnorderedTxManager != nil {
unorderedTxValidator = ante.NewUnorderedTxDecorator(unorderedtx.DefaultMaxTimeoutDuration, in.UnorderedTxManager, in.Environment, ante.DefaultSha256Cost)
}
return ModuleOutputs{
Module: NewAppModule(svd, feeTxValidator, unorderedTxValidator, in.ExtraTxValidators...),
BaseAppOption: newBaseAppOption(in),
}
}
// newBaseAppOption returns baseapp option that sets the ante handler and post handler
// and set the tx encoder and decoder on baseapp.
func newBaseAppOption(in ModuleInputs) func(app *baseapp.BaseApp) {
return func(app *baseapp.BaseApp) {
anteHandler, err := newAnteHandler(in)
if err != nil {
panic(err)
}
app.SetAnteHandler(anteHandler)
// PostHandlers
// In v0.46, the SDK introduces _postHandlers_. PostHandlers are like
// antehandlers, but are run _after_ the `runMsgs` execution. They are also
// defined as a chain, and have the same signature as antehandlers.
//
// In baseapp, postHandlers are run in the same store branch as `runMsgs`,
// meaning that both `runMsgs` and `postHandler` state will be committed if
// both are successful, and both will be reverted if any of the two fails.
//
// The SDK exposes a default empty postHandlers chain.
//
// Please note that changing any of the anteHandler or postHandler chain is
// likely to be a state-machine breaking change, which needs a coordinated
// upgrade.
postHandler, err := posthandler.NewPostHandler(
posthandler.HandlerOptions{},
)
if err != nil {
panic(err)
}
app.SetPostHandler(postHandler)
}
}
func newAnteHandler(in ModuleInputs) (sdk.AnteHandler, error) {
anteHandler, err := ante.NewAnteHandler(
ante.HandlerOptions{
Environment: in.Environment,
AccountKeeper: in.AccountKeeper,
ConsensusKeeper: in.ConsensusKeeper,
BankKeeper: in.BankKeeper,
SignModeHandler: in.TxConfig.SignModeHandler(),
FeegrantKeeper: in.FeeGrantKeeper,
SigGasConsumer: ante.DefaultSigVerificationGasConsumer,
UnorderedTxManager: in.UnorderedTxManager,
},
)
if err != nil {
return nil, fmt.Errorf("failed to create ante handler: %w", err)
}
return anteHandler, nil
}

4
x/validate/keys.go Normal file
View File

@ -0,0 +1,4 @@
package validate
// ModuleName is the name of the validate module.
const ModuleName = "validate"

View File

@ -1,4 +1,4 @@
package tx
package validate
import (
"context"