feat(x/tx): support bytes field as signer (#21850)

This commit is contained in:
yihuang 2024-09-26 22:27:40 +08:00 committed by GitHub
parent 0ab189cb3e
commit dbf6cdbd92
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 30 additions and 39 deletions

View File

@ -33,6 +33,10 @@ Since v0.13.0, x/tx follows Cosmos SDK semver: https://github.com/cosmos/cosmos-
## [Unreleased]
### Improvements
* [#21850](https://github.com/cosmos/cosmos-sdk/pull/21850) Support bytes field as signer.
## [v0.13.5](https://github.com/cosmos/cosmos-sdk/releases/tag/x/tx/v0.13.5) - 2024-09-18
### Improvements

View File

@ -92,7 +92,7 @@ message DeeplyNestedRepeatedSigner {
message BadSigner {
option (cosmos.msg.v1.signer) = "signer";
bytes signer = 1;
int32 signer = 1;
}
message NoSignerOption {
@ -107,4 +107,4 @@ message ValidatorSigner {
service TestSimpleSigner {
option (cosmos.msg.v1.service) = true;
rpc TestSimpleSigner(SimpleSigner) returns (SimpleSigner) {}
}
}

View File

@ -7900,8 +7900,8 @@ func (x *fastReflection_BadSigner) Interface() protoreflect.ProtoMessage {
// While iterating, mutating operations may only be performed
// on the current field descriptor.
func (x *fastReflection_BadSigner) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
if len(x.Signer) != 0 {
value := protoreflect.ValueOfBytes(x.Signer)
if x.Signer != int32(0) {
value := protoreflect.ValueOfInt32(x.Signer)
if !f(fd_BadSigner_signer, value) {
return
}
@ -7922,7 +7922,7 @@ func (x *fastReflection_BadSigner) Range(f func(protoreflect.FieldDescriptor, pr
func (x *fastReflection_BadSigner) Has(fd protoreflect.FieldDescriptor) bool {
switch fd.FullName() {
case "BadSigner.signer":
return len(x.Signer) != 0
return x.Signer != int32(0)
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: BadSigner"))
@ -7940,7 +7940,7 @@ func (x *fastReflection_BadSigner) Has(fd protoreflect.FieldDescriptor) bool {
func (x *fastReflection_BadSigner) Clear(fd protoreflect.FieldDescriptor) {
switch fd.FullName() {
case "BadSigner.signer":
x.Signer = nil
x.Signer = int32(0)
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: BadSigner"))
@ -7959,7 +7959,7 @@ func (x *fastReflection_BadSigner) Get(descriptor protoreflect.FieldDescriptor)
switch descriptor.FullName() {
case "BadSigner.signer":
value := x.Signer
return protoreflect.ValueOfBytes(value)
return protoreflect.ValueOfInt32(value)
default:
if descriptor.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: BadSigner"))
@ -7981,7 +7981,7 @@ func (x *fastReflection_BadSigner) Get(descriptor protoreflect.FieldDescriptor)
func (x *fastReflection_BadSigner) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) {
switch fd.FullName() {
case "BadSigner.signer":
x.Signer = value.Bytes()
x.Signer = int32(value.Int())
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: BadSigner"))
@ -8018,7 +8018,7 @@ func (x *fastReflection_BadSigner) Mutable(fd protoreflect.FieldDescriptor) prot
func (x *fastReflection_BadSigner) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value {
switch fd.FullName() {
case "BadSigner.signer":
return protoreflect.ValueOfBytes(nil)
return protoreflect.ValueOfInt32(int32(0))
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: BadSigner"))
@ -8088,9 +8088,8 @@ func (x *fastReflection_BadSigner) ProtoMethods() *protoiface.Methods {
var n int
var l int
_ = l
l = len(x.Signer)
if l > 0 {
n += 1 + l + runtime.Sov(uint64(l))
if x.Signer != 0 {
n += 1 + runtime.Sov(uint64(x.Signer))
}
if x.unknownFields != nil {
n += len(x.unknownFields)
@ -8121,12 +8120,10 @@ func (x *fastReflection_BadSigner) ProtoMethods() *protoiface.Methods {
i -= len(x.unknownFields)
copy(dAtA[i:], x.unknownFields)
}
if len(x.Signer) > 0 {
i -= len(x.Signer)
copy(dAtA[i:], x.Signer)
i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Signer)))
if x.Signer != 0 {
i = runtime.EncodeVarint(dAtA, i, uint64(x.Signer))
i--
dAtA[i] = 0xa
dAtA[i] = 0x8
}
if input.Buf != nil {
input.Buf = append(input.Buf, dAtA...)
@ -8178,10 +8175,10 @@ func (x *fastReflection_BadSigner) ProtoMethods() *protoiface.Methods {
}
switch fieldNum {
case 1:
if wireType != 2 {
if wireType != 0 {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType)
}
var byteLen int
x.Signer = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow
@ -8191,26 +8188,11 @@ func (x *fastReflection_BadSigner) ProtoMethods() *protoiface.Methods {
}
b := dAtA[iNdEx]
iNdEx++
byteLen |= int(b&0x7F) << shift
x.Signer |= int32(b&0x7F) << shift
if b < 0x80 {
break
}
}
if byteLen < 0 {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength
}
postIndex := iNdEx + byteLen
if postIndex < 0 {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength
}
if postIndex > l {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
}
x.Signer = append(x.Signer[:0], dAtA[iNdEx:postIndex]...)
if x.Signer == nil {
x.Signer = []byte{}
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := runtime.Skip(dAtA[iNdEx:])
@ -9386,7 +9368,7 @@ type BadSigner struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Signer []byte `protobuf:"bytes,1,opt,name=signer,proto3" json:"signer,omitempty"`
Signer int32 `protobuf:"varint,1,opt,name=signer,proto3" json:"signer,omitempty"`
}
func (x *BadSigner) Reset() {
@ -9409,11 +9391,11 @@ func (*BadSigner) Descriptor() ([]byte, []int) {
return file_signers_proto_rawDescGZIP(), []int{8}
}
func (x *BadSigner) GetSigner() []byte {
func (x *BadSigner) GetSigner() int32 {
if x != nil {
return x.Signer
}
return nil
return 0
}
type NoSignerOption struct {
@ -9885,7 +9867,7 @@ var file_signers_proto_rawDesc = []byte{
0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x3a, 0x0a, 0x82, 0xe7, 0xb0, 0x2a, 0x05, 0x69, 0x6e, 0x6e,
0x65, 0x72, 0x3a, 0x0a, 0x82, 0xe7, 0xb0, 0x2a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x30,
0x0a, 0x09, 0x42, 0x61, 0x64, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x73,
0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x73, 0x69, 0x67,
0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x69, 0x67,
0x6e, 0x65, 0x72, 0x3a, 0x0b, 0x82, 0xe7, 0xb0, 0x2a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72,
0x22, 0x28, 0x0a, 0x0e, 0x4e, 0x6f, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69,
0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01,

View File

@ -301,6 +301,11 @@ func (c *Context) makeGetSignersFunc(descriptor protoreflect.MessageDescriptor)
}
return arr, nil
}
case protoreflect.BytesKind:
fieldGetters[i] = func(msg proto.Message, arr [][]byte) ([][]byte, error) {
addrBz := msg.ProtoReflect().Get(field).Bytes()
return append(arr, addrBz), nil
}
default:
return nil, fmt.Errorf("unexpected field type %s for field %s in message %s", field.Kind(), fieldName, descriptor.FullName())
}