feat: introduce x/validate and split x/auth/tx/config (#21822)
This commit is contained in:
parent
465ca23154
commit
763e4d68e4
2
.github/CODEOWNERS
vendored
2
.github/CODEOWNERS
vendored
@ -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
|
||||
|
||||
|
||||
2
.github/pr_labeler.yml
vendored
2
.github/pr_labeler.yml
vendored
@ -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":
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
14
UPGRADING.md
14
UPGRADING.md
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 (
|
||||
|
||||
504
api/cosmos/validate/module/v1/module.pulsar.go
Normal file
504
api/cosmos/validate/module/v1/module.pulsar.go
Normal 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
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
|
||||
12
proto/cosmos/validate/module/v1/module.proto
Normal file
12
proto/cosmos/validate/module/v1/module.proto
Normal 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"
|
||||
};
|
||||
}
|
||||
@ -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{}),
|
||||
|
||||
@ -34,6 +34,7 @@ func Test_TestnetCmd(t *testing.T) {
|
||||
configurator.StakingModule(),
|
||||
configurator.ConsensusModule(),
|
||||
configurator.TxModule(),
|
||||
configurator.ValidateModule(),
|
||||
configurator.MintModule(),
|
||||
)
|
||||
var moduleManager *module.Manager
|
||||
|
||||
@ -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{}),
|
||||
|
||||
@ -6,6 +6,7 @@ import (
|
||||
"math/rand"
|
||||
"testing"
|
||||
|
||||
gogoproto "github.com/cosmos/gogoproto/proto"
|
||||
gogoany "github.com/cosmos/gogoproto/types/any"
|
||||
|
||||
"cosmossdk.io/simapp"
|
||||
|
||||
@ -20,6 +20,7 @@ var AppConfig = configurator.NewAppConfig(
|
||||
configurator.VestingModule(),
|
||||
configurator.StakingModule(),
|
||||
configurator.TxModule(),
|
||||
configurator.ValidateModule(),
|
||||
configurator.ConsensusModule(),
|
||||
configurator.GenutilModule(),
|
||||
)
|
||||
|
||||
@ -88,6 +88,7 @@ func TestBaseApp_BlockGas(t *testing.T) {
|
||||
configurator.AccountsModule(),
|
||||
configurator.AuthModule(),
|
||||
configurator.TxModule(),
|
||||
configurator.ValidateModule(),
|
||||
configurator.ConsensusModule(),
|
||||
configurator.BankModule(),
|
||||
configurator.StakingModule(),
|
||||
|
||||
@ -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),
|
||||
|
||||
@ -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(),
|
||||
|
||||
@ -21,6 +21,7 @@ var AppConfig = configurator.NewAppConfig(
|
||||
configurator.BankModule(),
|
||||
configurator.StakingModule(),
|
||||
configurator.TxModule(),
|
||||
configurator.ValidateModule(),
|
||||
configurator.ConsensusModule(),
|
||||
configurator.GenutilModule(),
|
||||
configurator.DistributionModule(),
|
||||
|
||||
@ -21,6 +21,7 @@ var AppConfig = configurator.NewAppConfig(
|
||||
configurator.StakingModule(),
|
||||
configurator.SlashingModule(),
|
||||
configurator.TxModule(),
|
||||
configurator.ValidateModule(),
|
||||
configurator.ConsensusModule(),
|
||||
configurator.EvidenceModule(),
|
||||
configurator.GenutilModule(),
|
||||
|
||||
@ -19,6 +19,7 @@ var AppConfig = configurator.NewAppConfig(
|
||||
configurator.BankModule(),
|
||||
configurator.StakingModule(),
|
||||
configurator.TxModule(),
|
||||
configurator.ValidateModule(),
|
||||
configurator.ConsensusModule(),
|
||||
configurator.GenutilModule(),
|
||||
configurator.MintModule(),
|
||||
|
||||
@ -21,6 +21,7 @@ var AppConfig = configurator.NewAppConfig(
|
||||
configurator.BankModule(),
|
||||
configurator.StakingModule(),
|
||||
configurator.TxModule(),
|
||||
configurator.ValidateModule(),
|
||||
configurator.ConsensusModule(),
|
||||
configurator.GenutilModule(),
|
||||
configurator.MintModule(),
|
||||
|
||||
@ -46,6 +46,7 @@ func initFixture(t assert.TestingT) *fixture {
|
||||
configurator.AccountsModule(),
|
||||
configurator.AuthModule(),
|
||||
configurator.TxModule(),
|
||||
configurator.ValidateModule(),
|
||||
configurator.ConsensusModule(),
|
||||
configurator.BankModule(),
|
||||
configurator.StakingModule(),
|
||||
|
||||
@ -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
|
||||
|
||||
@ -56,6 +56,7 @@ func (s *IntegrationTestSuite) SetupSuite() {
|
||||
configurator.StakingModule(),
|
||||
configurator.ConsensusModule(),
|
||||
configurator.TxModule(),
|
||||
configurator.ValidateModule(),
|
||||
))
|
||||
s.NoError(err)
|
||||
s.cfg.NumValidators = 1
|
||||
|
||||
@ -23,6 +23,7 @@ var AppConfig = configurator.NewAppConfig(
|
||||
configurator.StakingModule(),
|
||||
configurator.SlashingModule(),
|
||||
configurator.TxModule(),
|
||||
configurator.ValidateModule(),
|
||||
configurator.ConsensusModule(),
|
||||
configurator.GenutilModule(),
|
||||
configurator.MintModule(),
|
||||
|
||||
@ -67,6 +67,7 @@ func TestSlashingMsgs(t *testing.T) {
|
||||
configurator.StakingModule(),
|
||||
configurator.SlashingModule(),
|
||||
configurator.TxModule(),
|
||||
configurator.ValidateModule(),
|
||||
configurator.ConsensusModule(),
|
||||
configurator.BankModule(),
|
||||
),
|
||||
|
||||
@ -22,6 +22,7 @@ var AppConfig = configurator.NewAppConfig(
|
||||
configurator.BankModule(),
|
||||
configurator.StakingModule(),
|
||||
configurator.TxModule(),
|
||||
configurator.ValidateModule(),
|
||||
configurator.ConsensusModule(),
|
||||
configurator.GenutilModule(),
|
||||
configurator.MintModule(),
|
||||
|
||||
@ -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{
|
||||
|
||||
@ -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"
|
||||
)
|
||||
|
||||
@ -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).
|
||||
|
||||
|
||||
@ -296,7 +296,7 @@ func (a Account) AuthRetroCompatibility(ctx context.Context, _ *authtypes.QueryL
|
||||
|
||||
return &authtypes.QueryLegacyAccountResponse{
|
||||
Account: baseAccountAny,
|
||||
Info: baseAccount,
|
||||
Base: baseAccount,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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})
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
35
x/validate/README.md
Normal 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
145
x/validate/depinject.go
Normal 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
4
x/validate/keys.go
Normal file
@ -0,0 +1,4 @@
|
||||
package validate
|
||||
|
||||
// ModuleName is the name of the validate module.
|
||||
const ModuleName = "validate"
|
||||
@ -1,4 +1,4 @@
|
||||
package tx
|
||||
package validate
|
||||
|
||||
import (
|
||||
"context"
|
||||
Loading…
Reference in New Issue
Block a user