perf!: Make slashing not write sign info every block (#19458)

Co-authored-by: Adam Tucker <adamleetucker@outlook.com>
This commit is contained in:
Dev Ojha 2024-02-20 10:51:02 -06:00 committed by GitHub
parent adc0f75f62
commit 8cb798d7bf
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
20 changed files with 246 additions and 231 deletions

View File

@ -8,7 +8,6 @@ import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoiface "google.golang.org/protobuf/runtime/protoiface"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
_ "google.golang.org/protobuf/types/known/anypb"
io "io"
reflect "reflect"
sync "sync"
@ -2018,55 +2017,54 @@ var file_cosmos_accounts_interfaces_account_abstraction_v1_interface_proto_rawDe
0x6f, 0x74, 0x6f, 0x12, 0x31, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x63, 0x63, 0x6f,
0x75, 0x6e, 0x74, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e,
0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74,
0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x1a, 0x1a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x74, 0x78, 0x2f, 0x76, 0x31, 0x62,
0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x78, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa6, 0x01,
0x0a, 0x0f, 0x4d, 0x73, 0x67, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74,
0x65, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x06, 0x72,
0x61, 0x77, 0x5f, 0x74, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f,
0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e,
0x54, 0x78, 0x52, 0x61, 0x77, 0x52, 0x05, 0x72, 0x61, 0x77, 0x54, 0x78, 0x12, 0x25, 0x0a, 0x02,
0x74, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f,
0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x78, 0x52,
0x02, 0x74, 0x78, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x6e,
0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x65,
0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x19, 0x0a, 0x17, 0x4d, 0x73, 0x67, 0x41, 0x75, 0x74,
0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x65, 0x22, 0x1c, 0x0a, 0x1a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e,
0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x22,
0x5b, 0x0a, 0x22, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69,
0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x16, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74,
0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x18,
0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x42, 0x86, 0x03, 0x0a,
0x35, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x63, 0x63, 0x6f,
0x75, 0x6e, 0x74, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e,
0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74,
0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x42, 0x0e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x58, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73,
0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f,
0x73, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,
0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x62,
0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x63, 0x63,
0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
0x76, 0x31, 0xa2, 0x02, 0x04, 0x43, 0x41, 0x49, 0x41, 0xaa, 0x02, 0x30, 0x43, 0x6f, 0x73, 0x6d,
0x6f, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65,
0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x62,
0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x30, 0x43,
0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x5c, 0x49,
0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x5c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e,
0x74, 0x41, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0xe2,
0x02, 0x3c, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
0x73, 0x5c, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x5c, 0x41, 0x63, 0x63,
0x6f, 0x75, 0x6e, 0x74, 0x41, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5c,
0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02,
0x34, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
0x73, 0x3a, 0x3a, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x3a, 0x3a, 0x41,
0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x1a, 0x1a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x74,
0x78, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x78, 0x2e, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x22, 0xa6, 0x01, 0x0a, 0x0f, 0x4d, 0x73, 0x67, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e,
0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65,
0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x72,
0x12, 0x2f, 0x0a, 0x06, 0x72, 0x61, 0x77, 0x5f, 0x74, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x18, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62,
0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x78, 0x52, 0x61, 0x77, 0x52, 0x05, 0x72, 0x61, 0x77, 0x54,
0x78, 0x12, 0x25, 0x0a, 0x02, 0x74, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61,
0x31, 0x2e, 0x54, 0x78, 0x52, 0x02, 0x74, 0x78, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x67, 0x6e,
0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b,
0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x19, 0x0a, 0x17, 0x4d,
0x73, 0x67, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x0a, 0x1a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41,
0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74,
0x68, 0x6f, 0x64, 0x73, 0x22, 0x5b, 0x0a, 0x22, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x75, 0x74,
0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x68, 0x6f,
0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x16, 0x61, 0x75,
0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x74,
0x68, 0x6f, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15, 0x61, 0x75, 0x74, 0x68,
0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64,
0x73, 0x42, 0x86, 0x03, 0x0a, 0x35, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73,
0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66,
0x61, 0x63, 0x65, 0x73, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x62, 0x73,
0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x42, 0x0e, 0x49, 0x6e, 0x74,
0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x58, 0x63,
0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f,
0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f,
0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75,
0x6e, 0x74, 0x5f, 0x61, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76,
0x31, 0x3b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x62, 0x73, 0x74, 0x72, 0x61,
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x31, 0xa2, 0x02, 0x04, 0x43, 0x41, 0x49, 0x41, 0xaa, 0x02,
0x30, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73,
0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x6f,
0x75, 0x6e, 0x74, 0x41, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56,
0x31, 0xca, 0x02, 0x30, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x63, 0x63, 0x6f, 0x75,
0x6e, 0x74, 0x73, 0x5c, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x5c, 0x41,
0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f,
0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x6e, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x3c, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x63,
0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x5c, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65,
0x73, 0x5c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63,
0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64,
0x61, 0x74, 0x61, 0xea, 0x02, 0x34, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x41, 0x63,
0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x3a, 0x3a, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
0x65, 0x73, 0x3a, 0x3a, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x62, 0x73, 0x74, 0x72,
0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x33,
}
var (

View File

@ -1418,9 +1418,11 @@ type ValidatorSigningInfo struct {
Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
// Height at which validator was first a candidate OR was un-jailed
StartHeight int64 `protobuf:"varint,2,opt,name=start_height,json=startHeight,proto3" json:"start_height,omitempty"`
// Index which is incremented every time a validator is bonded in a block and
// DEPRECATED: Index which is incremented every time a validator is bonded in a block and
// _may_ have signed a pre-commit or not. This in conjunction with the
// signed_blocks_window param determines the index in the missed block bitmap.
//
// Deprecated: Do not use.
IndexOffset int64 `protobuf:"varint,3,opt,name=index_offset,json=indexOffset,proto3" json:"index_offset,omitempty"`
// Timestamp until which the validator is jailed due to liveness downtime.
JailedUntil *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=jailed_until,json=jailedUntil,proto3" json:"jailed_until,omitempty"`
@ -1467,6 +1469,7 @@ func (x *ValidatorSigningInfo) GetStartHeight() int64 {
return 0
}
// Deprecated: Do not use.
func (x *ValidatorSigningInfo) GetIndexOffset() int64 {
if x != nil {
return x.IndexOffset
@ -1578,7 +1581,7 @@ var file_cosmos_slashing_v1beta1_slashing_proto_rawDesc = []byte{
0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73,
0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc1, 0x02, 0x0a, 0x14, 0x56, 0x61, 0x6c, 0x69, 0x64,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc5, 0x02, 0x0a, 0x14, 0x56, 0x61, 0x6c, 0x69, 0x64,
0x61, 0x74, 0x6f, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12,
0x3b, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x42, 0x21, 0xd2, 0xb4, 0x2d, 0x1d, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x43, 0x6f, 0x6e,
@ -1586,67 +1589,68 @@ var file_cosmos_slashing_v1beta1_slashing_proto_rawDesc = []byte{
0x69, 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x21, 0x0a, 0x0c,
0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01,
0x28, 0x03, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12,
0x21, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18,
0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x66, 0x73,
0x65, 0x74, 0x12, 0x4c, 0x0a, 0x0c, 0x6a, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x75, 0x6e, 0x74,
0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73,
0x74, 0x61, 0x6d, 0x70, 0x42, 0x0d, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0xa8, 0xe7,
0xb0, 0x2a, 0x01, 0x52, 0x0b, 0x6a, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x55, 0x6e, 0x74, 0x69, 0x6c,
0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x6f, 0x6d, 0x62, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x64, 0x18, 0x05,
0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x74, 0x6f, 0x6d, 0x62, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x64,
0x12, 0x32, 0x0a, 0x15, 0x6d, 0x69, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b,
0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52,
0x13, 0x6d, 0x69, 0x73, 0x73, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x43, 0x6f, 0x75,
0x6e, 0x74, 0x65, 0x72, 0x3a, 0x04, 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0x8d, 0x04, 0x0a, 0x06, 0x50,
0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f,
0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x18, 0x01, 0x20,
0x01, 0x28, 0x03, 0x52, 0x12, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b,
0x73, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, 0x69, 0x0a, 0x15, 0x6d, 0x69, 0x6e, 0x5f, 0x73,
0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77,
0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x36, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x1b,
0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74,
0x68, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x44, 0x65, 0x63, 0xd2, 0xb4, 0x2d, 0x0a, 0x63,
0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x12,
0x6d, 0x69, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x50, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x64,
0x6f, 0x77, 0x12, 0x5e, 0x0a, 0x16, 0x64, 0x6f, 0x77, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6a,
0x61, 0x69, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0d, 0xc8,
0xde, 0x1f, 0x00, 0x98, 0xdf, 0x1f, 0x01, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x14, 0x64, 0x6f,
0x77, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x4a, 0x61, 0x69, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x12, 0x73, 0x0a, 0x1a, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x5f, 0x66, 0x72, 0x61, 0x63,
0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e,
0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x36, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x1b,
0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74,
0x68, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x44, 0x65, 0x63, 0xd2, 0xb4, 0x2d, 0x0a, 0x63,
0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x17,
0x73, 0x6c, 0x61, 0x73, 0x68, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x6f, 0x75,
0x62, 0x6c, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x12, 0x6e, 0x0a, 0x17, 0x73, 0x6c, 0x61, 0x73, 0x68,
0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x74, 0x69,
0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x36, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde,
0x1f, 0x1b, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d,
0x61, 0x74, 0x68, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x44, 0x65, 0x63, 0xd2, 0xb4, 0x2d,
0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xa8, 0xe7, 0xb0, 0x2a, 0x01,
0x52, 0x15, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44,
0x6f, 0x77, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x3a, 0x21, 0x8a, 0xe7, 0xb0, 0x2a, 0x1c, 0x63, 0x6f,
0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x78, 0x2f, 0x73, 0x6c, 0x61, 0x73, 0x68,
0x69, 0x6e, 0x67, 0x2f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0xe8, 0x01, 0x0a, 0x1b, 0x63,
0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69,
0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x0d, 0x53, 0x6c, 0x61, 0x73,
0x68, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x63, 0x6f, 0x73,
0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f,
0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31,
0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x76, 0x31,
0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x53, 0x58, 0xaa, 0x02, 0x17, 0x43, 0x6f,
0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x56, 0x31,
0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x17, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53,
0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2,
0x02, 0x23, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e,
0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74,
0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x19, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a,
0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61,
0x31, 0xa8, 0xe2, 0x1e, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x25, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18,
0x03, 0x20, 0x01, 0x28, 0x03, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78,
0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x4c, 0x0a, 0x0c, 0x6a, 0x61, 0x69, 0x6c, 0x65, 0x64,
0x5f, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54,
0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0d, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf,
0x1f, 0x01, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0b, 0x6a, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x55,
0x6e, 0x74, 0x69, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x6f, 0x6d, 0x62, 0x73, 0x74, 0x6f, 0x6e,
0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x74, 0x6f, 0x6d, 0x62, 0x73, 0x74,
0x6f, 0x6e, 0x65, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x69, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x62,
0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x06, 0x20,
0x01, 0x28, 0x03, 0x52, 0x13, 0x6d, 0x69, 0x73, 0x73, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b,
0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x04, 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0x8d,
0x04, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x69, 0x67,
0x6e, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f,
0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42,
0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, 0x69, 0x0a, 0x15, 0x6d,
0x69, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x77, 0x69,
0x6e, 0x64, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x36, 0xc8, 0xde, 0x1f, 0x00,
0xda, 0xde, 0x1f, 0x1b, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f,
0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x44, 0x65, 0x63, 0xd2,
0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xa8, 0xe7, 0xb0,
0x2a, 0x01, 0x52, 0x12, 0x6d, 0x69, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x50, 0x65, 0x72,
0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, 0x5e, 0x0a, 0x16, 0x64, 0x6f, 0x77, 0x6e, 0x74, 0x69,
0x6d, 0x65, 0x5f, 0x6a, 0x61, 0x69, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x42, 0x0d, 0xc8, 0xde, 0x1f, 0x00, 0x98, 0xdf, 0x1f, 0x01, 0xa8, 0xe7, 0xb0, 0x2a, 0x01,
0x52, 0x14, 0x64, 0x6f, 0x77, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x4a, 0x61, 0x69, 0x6c, 0x44, 0x75,
0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x73, 0x0a, 0x1a, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x5f,
0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f,
0x73, 0x69, 0x67, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x36, 0xc8, 0xde, 0x1f, 0x00,
0xda, 0xde, 0x1f, 0x1b, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f,
0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x44, 0x65, 0x63, 0xd2,
0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xa8, 0xe7, 0xb0,
0x2a, 0x01, 0x52, 0x17, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f,
0x6e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x12, 0x6e, 0x0a, 0x17, 0x73,
0x6c, 0x61, 0x73, 0x68, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x6f,
0x77, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x36, 0xc8, 0xde,
0x1f, 0x00, 0xda, 0xde, 0x1f, 0x1b, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e,
0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x44, 0x65,
0x63, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xa8,
0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x15, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x46, 0x72, 0x61, 0x63, 0x74,
0x69, 0x6f, 0x6e, 0x44, 0x6f, 0x77, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x3a, 0x21, 0x8a, 0xe7, 0xb0,
0x2a, 0x1c, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x78, 0x2f, 0x73,
0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0xe8,
0x01, 0x0a, 0x1b, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x6c,
0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x0d,
0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a,
0x38, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70,
0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e,
0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69,
0x6e, 0x67, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x53, 0x58, 0xaa,
0x02, 0x17, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e,
0x67, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x17, 0x43, 0x6f, 0x73, 0x6d,
0x6f, 0x73, 0x5c, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65,
0x74, 0x61, 0x31, 0xe2, 0x02, 0x23, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x6c, 0x61,
0x73, 0x68, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50,
0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x19, 0x43, 0x6f, 0x73, 0x6d,
0x6f, 0x73, 0x3a, 0x3a, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x56, 0x31,
0x62, 0x65, 0x74, 0x61, 0x31, 0xa8, 0xe2, 0x1e, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x33,
}
var (

View File

@ -2,7 +2,6 @@ syntax = "proto3";
package cosmos.accounts.interfaces.account_abstraction.v1;
import "google/protobuf/any.proto";
import "cosmos/tx/v1beta1/tx.proto";
option go_package = "cosmossdk.io/x/accounts/interfaces/account_abstraction/v1";

View File

@ -18,10 +18,10 @@ message ValidatorSigningInfo {
string address = 1 [(cosmos_proto.scalar) = "cosmos.ConsensusAddressString"];
// Height at which validator was first a candidate OR was un-jailed
int64 start_height = 2;
// Index which is incremented every time a validator is bonded in a block and
// DEPRECATED: Index which is incremented every time a validator is bonded in a block and
// _may_ have signed a pre-commit or not. This in conjunction with the
// signed_blocks_window param determines the index in the missed block bitmap.
int64 index_offset = 3;
int64 index_offset = 3 [deprecated = true];
// Timestamp until which the validator is jailed due to liveness downtime.
google.protobuf.Timestamp jailed_until = 4
[(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true];

View File

@ -203,7 +203,7 @@ func TestHandleDoubleSign(t *testing.T) {
consaddrStr, err := f.stakingKeeper.ConsensusAddressCodec().BytesToString(valpubkey.Address())
assert.NilError(t, err)
info := slashingtypes.NewValidatorSigningInfo(consaddrStr, f.sdkCtx.BlockHeight(), int64(0), time.Unix(0, 0), false, int64(0))
info := slashingtypes.NewValidatorSigningInfo(consaddrStr, f.sdkCtx.BlockHeight(), time.Unix(0, 0), false, int64(0))
err = f.slashingKeeper.ValidatorSigningInfo.Set(f.sdkCtx, sdk.ConsAddress(valpubkey.Address()), info)
assert.NilError(t, err)
// handle a signature to set signing info

View File

@ -90,7 +90,7 @@ func TestBeginBlocker(t *testing.T) {
info, err := slashingKeeper.ValidatorSigningInfo.Get(ctx, sdk.ConsAddress(pk.Address()))
require.NoError(t, err)
require.Equal(t, ctx.HeaderInfo().Height, info.StartHeight)
require.Equal(t, int64(1), info.IndexOffset)
require.Equal(t, int64(0), info.IndexOffset)
require.Equal(t, time.Unix(0, 0).UTC(), info.JailedUntil)
require.Equal(t, int64(0), info.MissedBlocksCounter)

View File

@ -127,8 +127,8 @@ func initFixture(tb testing.TB) *fixture {
consaddr1, err := stakingKeeper.ConsensusAddressCodec().BytesToString(addrDels[1])
assert.NilError(tb, err)
info1 := slashingtypes.NewValidatorSigningInfo(consaddr0, int64(4), int64(3), time.Unix(2, 0), false, int64(10))
info2 := slashingtypes.NewValidatorSigningInfo(consaddr1, int64(5), int64(4), time.Unix(2, 0), false, int64(10))
info1 := slashingtypes.NewValidatorSigningInfo(consaddr0, int64(4), time.Unix(2, 0), false, int64(10))
info2 := slashingtypes.NewValidatorSigningInfo(consaddr1, int64(5), time.Unix(2, 0), false, int64(10))
err = slashingKeeper.ValidatorSigningInfo.Set(sdkCtx, sdk.ConsAddress(addrDels[0]), info1)
assert.NilError(tb, err)
@ -167,7 +167,8 @@ func TestUnJailNotBonded(t *testing.T) {
_, err = f.stakingKeeper.EndBlocker(f.ctx)
assert.NilError(t, err)
f.ctx = f.ctx.WithBlockHeight(f.ctx.BlockHeight() + 1)
newHeight := f.ctx.BlockHeight() + 1
f.ctx = f.ctx.WithBlockHeight(newHeight).WithHeaderInfo(coreheader.Info{Height: newHeight})
// create a 6th validator with less power than the cliff validator (won't be bonded)
addr, val := f.valAddrs[5], pks[5]
@ -183,7 +184,8 @@ func TestUnJailNotBonded(t *testing.T) {
_, err = f.stakingKeeper.EndBlocker(f.ctx)
assert.NilError(t, err)
f.ctx = f.ctx.WithBlockHeight(f.ctx.BlockHeight() + 1)
newHeight = f.ctx.BlockHeight() + 1
f.ctx = f.ctx.WithBlockHeight(newHeight).WithHeaderInfo(coreheader.Info{Height: newHeight})
tstaking.CheckValidator(addr, stakingtypes.Unbonded, false)
@ -193,7 +195,8 @@ func TestUnJailNotBonded(t *testing.T) {
_, err = f.stakingKeeper.EndBlocker(f.ctx)
assert.NilError(t, err)
f.ctx = f.ctx.WithBlockHeight(f.ctx.BlockHeight() + 1)
newHeight = f.ctx.BlockHeight() + 1
f.ctx = f.ctx.WithBlockHeight(newHeight).WithHeaderInfo(coreheader.Info{Height: newHeight})
// verify that validator is jailed
tstaking.CheckValidator(addr, -1, true)
@ -211,13 +214,15 @@ func TestUnJailNotBonded(t *testing.T) {
_, err = f.stakingKeeper.EndBlocker(f.ctx)
assert.NilError(t, err)
f.ctx = f.ctx.WithBlockHeight(f.ctx.BlockHeight() + 1)
newHeight = f.ctx.BlockHeight() + 1
f.ctx = f.ctx.WithBlockHeight(newHeight).WithHeaderInfo(coreheader.Info{Height: newHeight})
// bond to meet minimum self-delegation
tstaking.DelegateWithPower(sdk.AccAddress(addr), addr, 1)
_, err = f.stakingKeeper.EndBlocker(f.ctx)
assert.NilError(t, err)
f.ctx = f.ctx.WithBlockHeight(f.ctx.BlockHeight() + 1)
newHeight = f.ctx.BlockHeight() + 1
f.ctx = f.ctx.WithBlockHeight(newHeight).WithHeaderInfo(coreheader.Info{Height: newHeight})
// verify we can immediately unjail
_, err = f.app.RunMsg(
@ -242,15 +247,15 @@ func TestHandleNewValidator(t *testing.T) {
tstaking := stakingtestutil.NewHelper(t, f.ctx, f.stakingKeeper)
signedBlocksWindow, err := f.slashingKeeper.SignedBlocksWindow(f.ctx)
assert.NilError(t, err)
f.ctx = f.ctx.WithBlockHeight(signedBlocksWindow + 1)
f.ctx = f.ctx.WithBlockHeight(signedBlocksWindow + 1).WithHeaderInfo(coreheader.Info{Height: signedBlocksWindow + 1})
assert.NilError(t, f.slashingKeeper.AddrPubkeyRelation.Set(f.ctx, pks[0].Address(), pks[0]))
consaddr, err := f.stakingKeeper.ConsensusAddressCodec().BytesToString(valpubkey.Address())
assert.NilError(t, err)
info := slashingtypes.NewValidatorSigningInfo(consaddr, f.ctx.BlockHeight(), int64(0), time.Unix(0, 0), false, int64(0))
info := slashingtypes.NewValidatorSigningInfo(consaddr, f.ctx.BlockHeight(), time.Unix(0, 0), false, int64(0))
assert.NilError(t, f.slashingKeeper.ValidatorSigningInfo.Set(f.ctx, sdk.ConsAddress(valpubkey.Address()), info))
assert.Equal(t, signedBlocksWindow+1, info.StartHeight)
// Validator created
acc := f.accountKeeper.NewAccountWithAddress(f.ctx, sdk.AccAddress(addr))
@ -274,13 +279,12 @@ func TestHandleNewValidator(t *testing.T) {
// Now a validator, for two blocks
assert.NilError(t, f.slashingKeeper.HandleValidatorSignature(f.ctx, valpubkey.Address(), 100, comet.BlockIDFlagCommit))
f.ctx = f.ctx.WithBlockHeight(signedBlocksWindow + 2)
f.ctx = f.ctx.WithBlockHeight(signedBlocksWindow + 2).WithHeaderInfo(coreheader.Info{Height: signedBlocksWindow + 2})
assert.NilError(t, f.slashingKeeper.HandleValidatorSignature(f.ctx, valpubkey.Address(), 100, comet.BlockIDFlagAbsent))
info, found := f.slashingKeeper.ValidatorSigningInfo.Get(f.ctx, sdk.ConsAddress(valpubkey.Address()))
assert.Assert(t, found)
assert.Equal(t, signedBlocksWindow+1, info.StartHeight)
assert.Equal(t, int64(2), info.IndexOffset)
assert.Equal(t, int64(1), info.MissedBlocksCounter)
assert.Equal(t, time.Unix(0, 0).UTC(), info.JailedUntil)
@ -309,7 +313,7 @@ func TestHandleAlreadyJailed(t *testing.T) {
consaddr, err := f.stakingKeeper.ConsensusAddressCodec().BytesToString(val.Address())
assert.NilError(t, err)
info := slashingtypes.NewValidatorSigningInfo(consaddr, f.ctx.HeaderInfo().Height, int64(0), time.Unix(0, 0), false, int64(0))
info := slashingtypes.NewValidatorSigningInfo(consaddr, f.ctx.HeaderInfo().Height, time.Unix(0, 0), false, int64(0))
assert.NilError(t, f.slashingKeeper.ValidatorSigningInfo.Set(f.ctx, sdk.ConsAddress(val.Address()), info))
acc := f.accountKeeper.NewAccountWithAddress(f.ctx, sdk.AccAddress(addr))
@ -393,7 +397,7 @@ func TestValidatorDippingInAndOut(t *testing.T) {
consaddrStr, err := f.stakingKeeper.ConsensusAddressCodec().BytesToString(addr)
assert.NilError(t, err)
info := slashingtypes.NewValidatorSigningInfo(consaddrStr, f.ctx.BlockHeight(), int64(0), time.Unix(0, 0), false, int64(0))
info := slashingtypes.NewValidatorSigningInfo(consaddrStr, f.ctx.BlockHeight(), time.Unix(0, 0), false, int64(0))
assert.NilError(t, f.slashingKeeper.ValidatorSigningInfo.Set(f.ctx, consAddr, info))
tstaking.CreateValidatorWithValPower(valAddr, val, power, true)
@ -454,7 +458,7 @@ func TestValidatorDippingInAndOut(t *testing.T) {
assert.NilError(t, err)
tstaking.CheckValidator(valAddr, stakingtypes.Unbonding, true)
info = slashingtypes.NewValidatorSigningInfo(consaddrStr, f.ctx.BlockHeight(), int64(0), time.Unix(0, 0), false, int64(0))
info = slashingtypes.NewValidatorSigningInfo(consaddrStr, f.ctx.BlockHeight(), time.Unix(0, 0), false, int64(0))
err = f.slashingKeeper.ValidatorSigningInfo.Set(f.ctx, consAddr, info)
assert.NilError(t, err)
@ -469,7 +473,7 @@ func TestValidatorDippingInAndOut(t *testing.T) {
height = int64(5000)
f.ctx = f.ctx.WithBlockHeight(height).WithHeaderInfo(coreheader.Info{Height: height})
info = slashingtypes.NewValidatorSigningInfo(consaddrStr, f.ctx.BlockHeight(), int64(0), time.Unix(0, 0), false, int64(0))
info = slashingtypes.NewValidatorSigningInfo(consaddrStr, f.ctx.BlockHeight(), time.Unix(0, 0), false, int64(0))
err = f.slashingKeeper.ValidatorSigningInfo.Set(f.ctx, consAddr, info)
assert.NilError(t, err)

View File

@ -167,7 +167,7 @@ func (suite *SimTestSuite) TestSimulateMsgUnjail() {
suite.Require().NoError(err)
val0ConsAddressStr, err := suite.stakingKeeper.ConsensusAddressCodec().BytesToString(val0ConsAddress)
suite.Require().NoError(err)
info := types.NewValidatorSigningInfo(val0ConsAddressStr, int64(4), int64(3),
info := types.NewValidatorSigningInfo(val0ConsAddressStr, int64(4),
time.Unix(2, 0), false, int64(10))
err = suite.slashingKeeper.ValidatorSigningInfo.Set(ctx, val0ConsAddress, info)
suite.Require().NoError(err)

View File

@ -5,7 +5,6 @@ package v1
import (
fmt "fmt"
_ "github.com/cosmos/cosmos-sdk/codec/types"
tx "github.com/cosmos/cosmos-sdk/types/tx"
proto "github.com/cosmos/gogoproto/proto"
io "io"
@ -237,30 +236,29 @@ func init() {
}
var fileDescriptor_56b360422260e9d1 = []byte{
// 357 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0xb1, 0x6e, 0xe2, 0x30,
0x1c, 0xc6, 0x31, 0xdc, 0x71, 0xc2, 0xdc, 0xe9, 0xa4, 0x48, 0xdc, 0x85, 0xe8, 0x14, 0xe5, 0x22,
0x55, 0xca, 0x64, 0x2b, 0xad, 0x3a, 0x74, 0xa4, 0x5b, 0x07, 0x86, 0xa6, 0x4c, 0xed, 0x10, 0x39,
0x89, 0x09, 0x51, 0xc1, 0x46, 0xf6, 0x3f, 0x60, 0xde, 0xa2, 0x4f, 0xd1, 0x67, 0xe9, 0xc8, 0xd8,
0xb1, 0x82, 0x17, 0xa9, 0x4a, 0xa0, 0xb4, 0x15, 0x1d, 0x3a, 0xe6, 0xfb, 0x7e, 0xf9, 0xe9, 0xb3,
0x6c, 0xdc, 0x4b, 0xa5, 0x9e, 0x48, 0x4d, 0x59, 0x9a, 0xca, 0x52, 0x80, 0xa6, 0x85, 0x00, 0xae,
0x86, 0x2c, 0xe5, 0xaf, 0x59, 0xcc, 0x12, 0x0d, 0x8a, 0xa5, 0x50, 0x48, 0x41, 0x67, 0xe1, 0x9e,
0x20, 0x53, 0x25, 0x41, 0x5a, 0x61, 0xa5, 0x20, 0x3b, 0x05, 0xd9, 0x2b, 0xc8, 0x01, 0x05, 0x99,
0x85, 0x4e, 0x37, 0x97, 0x32, 0x1f, 0x73, 0xba, 0x11, 0x24, 0xe5, 0x90, 0x32, 0xb1, 0xa8, 0x6c,
0x8e, 0xb3, 0x1d, 0x04, 0x86, 0xce, 0xc2, 0x84, 0x03, 0x0b, 0x29, 0x98, 0xaa, 0xf3, 0xef, 0x11,
0xfe, 0xdd, 0xd7, 0x79, 0xaf, 0x84, 0x11, 0x17, 0x50, 0xa4, 0x0c, 0xb8, 0x65, 0xe3, 0x1f, 0x49,
0x29, 0xb2, 0x31, 0x57, 0x36, 0xf2, 0x50, 0xd0, 0x8a, 0x76, 0x9f, 0x16, 0xc5, 0x4d, 0xc5, 0xe6,
0x31, 0x18, 0xbb, 0xee, 0xa1, 0xa0, 0x7d, 0x6c, 0x93, 0xed, 0x50, 0x30, 0x64, 0xab, 0x26, 0x03,
0x13, 0xb1, 0x79, 0xf4, 0x5d, 0xb1, 0xf9, 0xc0, 0x58, 0x47, 0xb8, 0x0e, 0xc6, 0x6e, 0x6c, 0xe0,
0xce, 0x61, 0xb8, 0x0e, 0xc6, 0xfa, 0x8f, 0x7f, 0xea, 0x22, 0x17, 0x5c, 0xc5, 0x85, 0xc8, 0xb8,
0xb1, 0xbf, 0x79, 0x28, 0xf8, 0x15, 0xb5, 0xab, 0xec, 0xe2, 0x25, 0xf2, 0xbb, 0xf8, 0xef, 0x87,
0x9d, 0x11, 0xd7, 0x53, 0x29, 0x34, 0xf7, 0xff, 0x61, 0xe7, 0xb2, 0xe4, 0x6a, 0xf1, 0xa6, 0x2c,
0xa4, 0xe8, 0x73, 0x18, 0xc9, 0x4c, 0xfb, 0x37, 0xd8, 0xff, 0xbc, 0xdd, 0x39, 0xac, 0x53, 0xfc,
0x87, 0xbd, 0x03, 0xe2, 0x49, 0x45, 0xd8, 0xc8, 0x6b, 0x04, 0xad, 0xa8, 0xc3, 0x0e, 0xfd, 0x7e,
0x7e, 0xf5, 0xb0, 0x72, 0xd1, 0x72, 0xe5, 0xa2, 0xa7, 0x95, 0x8b, 0xee, 0xd6, 0x6e, 0x6d, 0xb9,
0x76, 0x6b, 0x8f, 0x6b, 0xb7, 0x76, 0x7d, 0x56, 0x1d, 0x56, 0x67, 0xb7, 0xa4, 0x90, 0xd4, 0x7c,
0xe1, 0x35, 0x24, 0xcd, 0xcd, 0xd5, 0x9c, 0x3c, 0x07, 0x00, 0x00, 0xff, 0xff, 0x9a, 0x1c, 0xbd,
0x8a, 0x49, 0x02, 0x00, 0x00,
// 338 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x91, 0xb1, 0x4e, 0xeb, 0x30,
0x14, 0x86, 0xeb, 0xf6, 0xde, 0xa2, 0xba, 0x20, 0xa4, 0x48, 0x85, 0x50, 0xa1, 0x28, 0x44, 0x42,
0xca, 0x64, 0x2b, 0x20, 0x06, 0xc6, 0xb2, 0x31, 0x74, 0x20, 0x74, 0x82, 0x21, 0x72, 0x12, 0xd3,
0x5a, 0x50, 0xbb, 0xb2, 0x4f, 0x5a, 0xf3, 0x16, 0x3c, 0x05, 0xcf, 0xc2, 0xd8, 0x91, 0x11, 0xb5,
0x2f, 0x82, 0x68, 0x5a, 0x0a, 0xa8, 0x0c, 0x8c, 0xfe, 0xcf, 0xe7, 0xcf, 0xc7, 0xfa, 0x71, 0x27,
0x53, 0x66, 0xa8, 0x0c, 0x65, 0x59, 0xa6, 0x0a, 0x09, 0x86, 0x0a, 0x09, 0x5c, 0xdf, 0xb1, 0x8c,
0x7f, 0x66, 0x09, 0x4b, 0x0d, 0x68, 0x96, 0x81, 0x50, 0x92, 0x8e, 0xa3, 0x35, 0x41, 0x46, 0x5a,
0x81, 0x72, 0xa2, 0x52, 0x41, 0x56, 0x0a, 0xb2, 0x56, 0x90, 0x0d, 0x0a, 0x32, 0x8e, 0xda, 0xed,
0xe5, 0xab, 0x60, 0xe9, 0x38, 0x4a, 0x39, 0xb0, 0x88, 0x82, 0x2d, 0x75, 0xc1, 0x33, 0xc2, 0xbb,
0x5d, 0xd3, 0xef, 0x14, 0x30, 0xe0, 0x12, 0x44, 0xc6, 0x80, 0x3b, 0x2e, 0xde, 0x4a, 0x0b, 0x99,
0x3f, 0x70, 0xed, 0x22, 0x1f, 0x85, 0x8d, 0x78, 0x75, 0x74, 0x28, 0xae, 0x6b, 0x36, 0x49, 0xc0,
0xba, 0x55, 0x1f, 0x85, 0xcd, 0x13, 0x97, 0x2c, 0xb7, 0x01, 0x4b, 0x96, 0x6a, 0xd2, 0xb3, 0x31,
0x9b, 0xc4, 0xff, 0x35, 0x9b, 0xf4, 0xac, 0x73, 0x8c, 0xab, 0x60, 0xdd, 0xda, 0x02, 0x6e, 0x6d,
0x86, 0xab, 0x60, 0x9d, 0x23, 0xbc, 0x6d, 0x44, 0x5f, 0x72, 0x9d, 0x08, 0x99, 0x73, 0xeb, 0xfe,
0xf3, 0x51, 0xb8, 0x13, 0x37, 0xcb, 0xec, 0xf2, 0x23, 0x0a, 0x0e, 0xf0, 0xfe, 0x8f, 0x3d, 0x63,
0x6e, 0x46, 0x4a, 0x1a, 0x1e, 0x1c, 0xe2, 0xf6, 0x55, 0xc1, 0xf5, 0xe3, 0x97, 0xa1, 0x50, 0xb2,
0xcb, 0x61, 0xa0, 0x72, 0x13, 0xdc, 0xe2, 0xe0, 0xf7, 0xe9, 0xca, 0xe1, 0x9c, 0xe1, 0x3d, 0xf6,
0x0d, 0x48, 0x86, 0x25, 0xe1, 0x22, 0xbf, 0x16, 0x36, 0xe2, 0x16, 0xdb, 0x74, 0xfd, 0xe2, 0xfa,
0x65, 0xe6, 0xa1, 0xe9, 0xcc, 0x43, 0x6f, 0x33, 0x0f, 0x3d, 0xcd, 0xbd, 0xca, 0x74, 0xee, 0x55,
0x5e, 0xe7, 0x5e, 0xe5, 0xe6, 0xbc, 0xfc, 0xac, 0xc9, 0xef, 0x89, 0x50, 0xd4, 0xfe, 0xa1, 0xf2,
0xb4, 0xbe, 0xa8, 0xe6, 0xf4, 0x3d, 0x00, 0x00, 0xff, 0xff, 0xb2, 0x1c, 0x3d, 0x0e, 0x2e, 0x02,
0x00, 0x00,
}
func (m *MsgAuthenticate) Marshal() (dAtA []byte, err error) {

View File

@ -29,6 +29,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
### Improvements
* [#19458](https://github.com/cosmos/cosmos-sdk/pull/19458) Avoid writing SignInfo's for validator's who did not miss a block. (Every BeginBlock)
* [#18959](https://github.com/cosmos/cosmos-sdk/pull/18959) Avoid deserialization of parameters with every validator lookup
* [#18636](https://github.com/cosmos/cosmos-sdk/pull/18636) `JailUntil` and `Tombstone` methods no longer panics if the signing info does not exist for the validator but instead returns error.
@ -41,5 +42,6 @@ Ref: https://keepachangelog.com/en/1.0.0/
* remove from `types`: `AddrPubkeyRelationKey`
* remove from `Keeper`: `AddPubkey`
* [#19440](https://github.com/cosmos/cosmos-sdk/pull/19440) Slashing Module creation takes `appmodule.Environment` instead of individual services
* [#19458](https://github.com/cosmos/cosmos-sdk/pull/19458) ValidatorSigningInfo.IndexOffset is deprecated, and no longer used. The index is now derived using just the StartHeight.
### Bug Fixes

View File

@ -212,10 +212,11 @@ provisions and rewards.
At the beginning of each block, we update the `ValidatorSigningInfo` for each
validator and check if they've crossed below the liveness threshold over a
sliding window. This sliding window is defined by `SignedBlocksWindow` and the
index in this window is determined by `IndexOffset` found in the validator's
`ValidatorSigningInfo`. For each block processed, the `IndexOffset` is incremented
regardless if the validator signed or not. Once the index is determined, the
`MissedBlocksBitArray` and `MissedBlocksCounter` are updated accordingly.
index in this window is determined by (`height - SignInfo.StartHeight`).
Notice that the position in the sliding window is incremented every block,
independent of whether the validator signed or not.
Once the index is determined, the `MissedBlocksBitArray` and
`MissedBlocksCounter` are updated accordingly.
Finally, in order to determine if a validator crosses below the liveness threshold,
we fetch the maximum number of blocks missed, `maxMissed`, which is
@ -235,10 +236,8 @@ for vote in block.LastCommitInfo.Votes {
signInfo := GetValidatorSigningInfo(vote.Validator.Address)
// This is a relative index, so we counts blocks the validator SHOULD have
// signed. We use the 0-value default signing info if not present, except for
// start height.
index := signInfo.IndexOffset % SignedBlocksWindow()
signInfo.IndexOffset++
// signed. We use the 0-value default signing info if not present.
index := (height - signInfo.StartHeight) % SignedBlocksWindow()
// Update MissedBlocksBitArray and MissedBlocksCounter. The MissedBlocksCounter
// just tracks the sum of MissedBlocksBitArray. That way we avoid needing to

View File

@ -23,9 +23,9 @@ func (s *KeeperTestSuite) TestExportAndInitGenesis() {
consStr2, err := s.stakingKeeper.ConsensusAddressCodec().BytesToString(consAddr2)
require.NoError(err)
info1 := types.NewValidatorSigningInfo(consStr1, int64(4), int64(3),
info1 := types.NewValidatorSigningInfo(consStr1, int64(4),
time.Now().UTC().Add(100000000000), false, int64(10))
info2 := types.NewValidatorSigningInfo(consStr2, int64(5), int64(4),
info2 := types.NewValidatorSigningInfo(consStr2, int64(5),
time.Now().UTC().Add(10000000000), false, int64(10))
s.Require().NoError(keeper.ValidatorSigningInfo.Set(ctx, consAddr1, info1))

View File

@ -36,7 +36,6 @@ func (s *KeeperTestSuite) TestGRPCSigningInfo() {
signingInfo := slashingtypes.NewValidatorSigningInfo(
consStr,
0,
int64(0),
time.Unix(2, 0),
false,
int64(0),
@ -66,7 +65,6 @@ func (s *KeeperTestSuite) TestGRPCSigningInfos() {
signingInfo := slashingtypes.NewValidatorSigningInfo(
consStr1,
0,
int64(0),
time.Unix(2, 0),
false,
int64(0),

View File

@ -39,7 +39,6 @@ func (h Hooks) AfterValidatorBonded(ctx context.Context, consAddr sdk.ConsAddres
signingInfo = types.NewValidatorSigningInfo(
consStr,
blockHeight,
0,
time.Unix(0, 0),
false,
0,

View File

@ -58,12 +58,21 @@ func (k Keeper) HandleValidatorSignatureWithParams(ctx context.Context, params t
signedBlocksWindow := params.SignedBlocksWindow
// Compute the relative index, so we count the blocks the validator *should*
// have signed. We will use the 0-value default signing info if not present,
// except for start height. The index is in the range [0, SignedBlocksWindow)
// have signed. We will also use the 0-value default signing info if not present.
// The index is in the range [0, SignedBlocksWindow)
// and is used to see if a validator signed a block at the given height, which
// is represented by a bit in the bitmap.
index := signInfo.IndexOffset % signedBlocksWindow
signInfo.IndexOffset++
// The validator start height should get mapped to index 0, so we computed index as:
// (height - startHeight) % signedBlocksWindow
//
// NOTE: There is subtle different behavior between genesis validators and non-genesis validators.
// A genesis validator will start at index 0, whereas a non-genesis validator's startHeight will be the block
// they bonded on, but the first block they vote on will be one later. (And thus their first vote is at index 1)
index := (height - signInfo.StartHeight) % signedBlocksWindow
if signInfo.StartHeight > height {
return fmt.Errorf("invalid state, the validator %v has start height %d , which is greater than the current height %d (as parsed from the header)",
signInfo.Address, signInfo.StartHeight, height)
}
// determine if the validator signed the previous block
previous, err := k.GetMissedBlockBitmapValue(ctx, consAddr, index)
@ -71,6 +80,7 @@ func (k Keeper) HandleValidatorSignatureWithParams(ctx context.Context, params t
return errors.Wrap(err, "failed to get the validator's bitmap value")
}
modifiedSignInfo := false
missed := signed == comet.BlockIDFlagAbsent
switch {
case !previous && missed:
@ -81,6 +91,7 @@ func (k Keeper) HandleValidatorSignatureWithParams(ctx context.Context, params t
}
signInfo.MissedBlocksCounter++
modifiedSignInfo = true
case previous && !missed:
// Bitmap value has changed from missed to not missed, so we flip the bit
@ -90,6 +101,7 @@ func (k Keeper) HandleValidatorSignatureWithParams(ctx context.Context, params t
}
signInfo.MissedBlocksCounter--
modifiedSignInfo = true
default:
// bitmap value at this index has not changed, no need to update counter
@ -126,6 +138,7 @@ func (k Keeper) HandleValidatorSignatureWithParams(ctx context.Context, params t
// if we are past the minimum height and the validator has missed too many blocks, punish them
if height > minHeight && signInfo.MissedBlocksCounter > maxMissed {
modifiedSignInfo = true
validator, err := k.sk.ValidatorByConsAddr(ctx, consAddr)
if err != nil {
return err
@ -172,8 +185,9 @@ func (k Keeper) HandleValidatorSignatureWithParams(ctx context.Context, params t
// We need to reset the counter & bitmap so that the validator won't be
// immediately slashed for downtime upon re-bonding.
// We don't set the start height as this will get correctly set
// once they bond again in the AfterValidatorBonded hook!
signInfo.MissedBlocksCounter = 0
signInfo.IndexOffset = 0
err = k.DeleteMissedBlockBitmap(ctx, consAddr)
if err != nil {
return err
@ -198,5 +212,8 @@ func (k Keeper) HandleValidatorSignatureWithParams(ctx context.Context, params t
}
// Set the updated signing info
return k.ValidatorSigningInfo.Set(ctx, consAddr, signInfo)
if modifiedSignInfo {
return k.ValidatorSigningInfo.Set(ctx, consAddr, signInfo)
}
return nil
}

View File

@ -221,7 +221,7 @@ func (s *KeeperTestSuite) TestUnjail() {
s.Require().NoError(err)
info := slashingtypes.NewValidatorSigningInfo(consStr, int64(4), int64(3),
info := slashingtypes.NewValidatorSigningInfo(consStr, int64(4),
time.Unix(2, 0), false, int64(10))
s.Require().NoError(s.slashingKeeper.ValidatorSigningInfo.Set(s.ctx, sdk.ConsAddress(addr), info))
@ -256,7 +256,7 @@ func (s *KeeperTestSuite) TestUnjail() {
s.Require().NoError(err)
info := slashingtypes.NewValidatorSigningInfo(consStr, int64(4), int64(3),
info := slashingtypes.NewValidatorSigningInfo(consStr, int64(4),
time.Unix(2, 0), true, int64(10))
s.Require().NoError(s.slashingKeeper.ValidatorSigningInfo.Set(s.ctx, sdk.ConsAddress(addr), info))
@ -291,7 +291,7 @@ func (s *KeeperTestSuite) TestUnjail() {
s.Require().NoError(err)
info := slashingtypes.NewValidatorSigningInfo(consStr, int64(4), int64(3),
info := slashingtypes.NewValidatorSigningInfo(consStr, int64(4),
s.ctx.HeaderInfo().Time.AddDate(0, 0, 1), false, int64(10))
s.Require().NoError(s.slashingKeeper.ValidatorSigningInfo.Set(s.ctx, sdk.ConsAddress(addr), info))
@ -326,7 +326,7 @@ func (s *KeeperTestSuite) TestUnjail() {
val.Jailed = true
s.Require().NoError(err)
info := slashingtypes.NewValidatorSigningInfo(consStr, int64(4), int64(3),
info := slashingtypes.NewValidatorSigningInfo(consStr, int64(4),
time.Unix(2, 0), false, int64(10))
s.Require().NoError(s.slashingKeeper.ValidatorSigningInfo.Set(s.ctx, sdk.ConsAddress(addr), info))

View File

@ -22,7 +22,6 @@ func (s *KeeperTestSuite) TestValidatorSigningInfo() {
signingInfo := slashingtypes.NewValidatorSigningInfo(
consStr,
ctx.BlockHeight(),
int64(3),
time.Unix(2, 0),
false,
int64(10),
@ -34,7 +33,6 @@ func (s *KeeperTestSuite) TestValidatorSigningInfo() {
info, err := keeper.ValidatorSigningInfo.Get(ctx, consAddr)
require.NoError(err)
require.Equal(info.StartHeight, ctx.BlockHeight())
require.Equal(info.IndexOffset, int64(3))
require.Equal(info.JailedUntil, time.Unix(2, 0).UTC())
require.Equal(info.MissedBlocksCounter, int64(10))
@ -126,7 +124,6 @@ func (s *KeeperTestSuite) TestPerformConsensusPubKeyUpdate() {
newInfo := slashingtypes.NewValidatorSigningInfo(
newConsAddr.String(),
int64(4),
int64(3),
time.Unix(2, 0).UTC(),
false,
int64(10),

View File

@ -31,7 +31,7 @@ func TestDecodeStore(t *testing.T) {
consAddrStr1, err := addresscodec.NewBech32Codec("cosmosvalcons").BytesToString(consAddr1)
require.NoError(t, err)
info := types.NewValidatorSigningInfo(consAddrStr1, 0, 1, time.Now().UTC(), false, 0)
info := types.NewValidatorSigningInfo(consAddrStr1, 0, time.Now().UTC(), false, 0)
kvPairs := kv.Pairs{
Pairs: []kv.Pair{

View File

@ -6,13 +6,12 @@ import (
// NewValidatorSigningInfo creates a new ValidatorSigningInfo instance
func NewValidatorSigningInfo(
consAddr string, startHeight, indexOffset int64,
consAddr string, startHeight int64,
jailedUntil time.Time, tombstoned bool, missedBlocksCounter int64,
) ValidatorSigningInfo {
return ValidatorSigningInfo{
Address: consAddr,
StartHeight: startHeight,
IndexOffset: indexOffset,
JailedUntil: jailedUntil,
Tombstoned: tombstoned,
MissedBlocksCounter: missedBlocksCounter,

View File

@ -37,10 +37,10 @@ type ValidatorSigningInfo struct {
Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
// Height at which validator was first a candidate OR was un-jailed
StartHeight int64 `protobuf:"varint,2,opt,name=start_height,json=startHeight,proto3" json:"start_height,omitempty"`
// Index which is incremented every time a validator is bonded in a block and
// DEPRECATED: Index which is incremented every time a validator is bonded in a block and
// _may_ have signed a pre-commit or not. This in conjunction with the
// signed_blocks_window param determines the index in the missed block bitmap.
IndexOffset int64 `protobuf:"varint,3,opt,name=index_offset,json=indexOffset,proto3" json:"index_offset,omitempty"`
IndexOffset int64 `protobuf:"varint,3,opt,name=index_offset,json=indexOffset,proto3" json:"index_offset,omitempty"` // Deprecated: Do not use.
// Timestamp until which the validator is jailed due to liveness downtime.
JailedUntil time.Time `protobuf:"bytes,4,opt,name=jailed_until,json=jailedUntil,proto3,stdtime" json:"jailed_until"`
// Whether or not a validator has been tombstoned (killed out of validator
@ -99,6 +99,7 @@ func (m *ValidatorSigningInfo) GetStartHeight() int64 {
return 0
}
// Deprecated: Do not use.
func (m *ValidatorSigningInfo) GetIndexOffset() int64 {
if m != nil {
return m.IndexOffset
@ -193,47 +194,47 @@ func init() {
}
var fileDescriptor_1078e5d96a74cc52 = []byte{
// 625 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xcf, 0x4f, 0xd4, 0x40,
0x18, 0xdd, 0x01, 0x44, 0x9d, 0xc5, 0x83, 0xe3, 0x22, 0x65, 0x95, 0xee, 0xc2, 0xc1, 0x6c, 0x48,
0x68, 0x05, 0x13, 0x0f, 0x70, 0x72, 0xd9, 0x18, 0x35, 0x24, 0x92, 0xc5, 0x1f, 0x89, 0x07, 0x9b,
0x69, 0x67, 0xb6, 0x3b, 0xd2, 0xce, 0x6c, 0x3a, 0x53, 0x17, 0xfe, 0x05, 0x13, 0x13, 0x8e, 0x1e,
0x3d, 0x72, 0xe4, 0xc0, 0x3f, 0xe0, 0x8d, 0x23, 0xe1, 0x64, 0x3c, 0xa0, 0xd9, 0x3d, 0xe0, 0x9f,
0x61, 0x3a, 0xd3, 0x2e, 0x08, 0x37, 0x2e, 0x4d, 0xfb, 0xde, 0xfb, 0xde, 0x37, 0xdf, 0x9b, 0x2f,
0x85, 0x8f, 0x02, 0x21, 0x63, 0x21, 0x5d, 0x19, 0x61, 0xd9, 0x65, 0x3c, 0x74, 0x3f, 0x2f, 0xfb,
0x54, 0xe1, 0xe5, 0x11, 0xe0, 0xf4, 0x12, 0xa1, 0x04, 0x9a, 0x31, 0x3a, 0x67, 0x04, 0xe7, 0xba,
0x6a, 0x25, 0x14, 0xa1, 0xd0, 0x1a, 0x37, 0x7b, 0x33, 0xf2, 0xaa, 0x1d, 0x0a, 0x11, 0x46, 0xd4,
0xd5, 0x5f, 0x7e, 0xda, 0x71, 0x49, 0x9a, 0x60, 0xc5, 0x04, 0xcf, 0xf9, 0xda, 0x65, 0x5e, 0xb1,
0x98, 0x4a, 0x85, 0xe3, 0x5e, 0x2e, 0x98, 0x35, 0xfd, 0x3c, 0xe3, 0x9c, 0x37, 0x37, 0xd4, 0x5d,
0x1c, 0x33, 0x2e, 0x5c, 0xfd, 0x34, 0xd0, 0xc2, 0x8f, 0x31, 0x58, 0x79, 0x87, 0x23, 0x46, 0xb0,
0x12, 0xc9, 0x16, 0x0b, 0x39, 0xe3, 0xe1, 0x4b, 0xde, 0x11, 0x68, 0x0d, 0xde, 0xc4, 0x84, 0x24,
0x54, 0x4a, 0x0b, 0xd4, 0x41, 0xe3, 0x76, 0x73, 0xfe, 0xe4, 0x70, 0x69, 0x2e, 0xb7, 0x5b, 0x17,
0x5c, 0x52, 0x2e, 0x53, 0xf9, 0xcc, 0x48, 0xb6, 0x54, 0xc2, 0x78, 0xd8, 0x2e, 0x2a, 0xd0, 0x3c,
0x9c, 0x92, 0x0a, 0x27, 0xca, 0xeb, 0x52, 0x16, 0x76, 0x95, 0x35, 0x56, 0x07, 0x8d, 0xf1, 0x76,
0x59, 0x63, 0x2f, 0x34, 0x94, 0x49, 0x18, 0x27, 0x74, 0xc7, 0x13, 0x9d, 0x8e, 0xa4, 0xca, 0x1a,
0x37, 0x12, 0x8d, 0xbd, 0xd6, 0x10, 0xda, 0x80, 0x53, 0x9f, 0x30, 0x8b, 0x28, 0xf1, 0x52, 0xae,
0x58, 0x64, 0x4d, 0xd4, 0x41, 0xa3, 0xbc, 0x52, 0x75, 0x4c, 0x02, 0x4e, 0x91, 0x80, 0xf3, 0xa6,
0x48, 0xa0, 0x79, 0xe7, 0xe8, 0xb4, 0x56, 0xda, 0xfb, 0x5d, 0x03, 0xfb, 0x67, 0x07, 0x8b, 0xa0,
0x5d, 0x36, 0xe5, 0x6f, 0xb3, 0x6a, 0x64, 0x43, 0xa8, 0x44, 0xec, 0x4b, 0x25, 0x38, 0x25, 0xd6,
0x8d, 0x3a, 0x68, 0xdc, 0x6a, 0x5f, 0x40, 0xd0, 0x0a, 0x9c, 0x8e, 0x99, 0x94, 0x94, 0x78, 0x7e,
0x24, 0x82, 0x6d, 0xe9, 0x05, 0x22, 0xe5, 0x8a, 0x26, 0xd6, 0xa4, 0x3e, 0xd9, 0x3d, 0x43, 0x36,
0x35, 0xb7, 0x6e, 0xa8, 0xd5, 0x89, 0xbf, 0xdf, 0x6b, 0x60, 0xe1, 0xeb, 0x04, 0x9c, 0xdc, 0xc4,
0x09, 0x8e, 0x25, 0x7a, 0x0c, 0x2b, 0x92, 0x85, 0xfc, 0xdc, 0xa4, 0xcf, 0x38, 0x11, 0x7d, 0x1d,
0xe1, 0x78, 0x1b, 0x19, 0xce, 0x78, 0xbc, 0xd7, 0x0c, 0x62, 0x59, 0x5b, 0xee, 0xe5, 0x55, 0x3d,
0x9a, 0x14, 0x25, 0x59, 0x66, 0x53, 0xcd, 0xa7, 0xd9, 0x44, 0xbf, 0x4e, 0x6b, 0x0f, 0x4c, 0xf2,
0x92, 0x6c, 0x3b, 0x4c, 0xb8, 0x31, 0x56, 0x5d, 0x67, 0x83, 0x86, 0x38, 0xd8, 0x6d, 0xd1, 0xe0,
0xe4, 0x70, 0x09, 0xe6, 0x17, 0xd3, 0xa2, 0x81, 0x19, 0x1d, 0xc5, 0x8c, 0x6f, 0x69, 0xcf, 0x4d,
0x9a, 0xe4, 0xad, 0x3e, 0xc2, 0xfb, 0x44, 0xf4, 0x79, 0xb6, 0x30, 0x5e, 0x96, 0x8c, 0x57, 0xac,
0x96, 0x0e, 0xbf, 0xbc, 0x32, 0x7b, 0x25, 0xd9, 0x56, 0x2e, 0x30, 0xc1, 0x7e, 0x1b, 0x05, 0x5b,
0x29, 0x7c, 0x5e, 0x61, 0x16, 0x15, 0x22, 0x24, 0x61, 0x55, 0x2f, 0xb9, 0xd7, 0x49, 0x70, 0x90,
0x21, 0x1e, 0x11, 0xa9, 0x1f, 0x51, 0x3d, 0x9c, 0xbe, 0xbd, 0xeb, 0xcf, 0x33, 0xa3, 0x9d, 0x9f,
0xe7, 0xc6, 0x2d, 0xed, 0x9b, 0xcd, 0x87, 0x38, 0x9c, 0xb9, 0xd2, 0xd4, 0x9c, 0x4d, 0xdf, 0xf1,
0xf5, 0x3b, 0x4e, 0x5f, 0xea, 0x68, 0x4c, 0x57, 0xe7, 0xbf, 0x9c, 0x1d, 0x2c, 0x3e, 0x34, 0xe2,
0x25, 0x49, 0xb6, 0xdd, 0x9d, 0xf3, 0x3f, 0x80, 0x59, 0x82, 0xe6, 0xda, 0xfe, 0xc0, 0x06, 0x47,
0x03, 0x1b, 0x1c, 0x0f, 0x6c, 0xf0, 0x67, 0x60, 0x83, 0xbd, 0xa1, 0x5d, 0x3a, 0x1e, 0xda, 0xa5,
0x9f, 0x43, 0xbb, 0xf4, 0x61, 0xee, 0xbf, 0x73, 0x5c, 0xa8, 0x56, 0xbb, 0x3d, 0x2a, 0xfd, 0x49,
0x1d, 0xfe, 0x93, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x18, 0xd0, 0xfc, 0x71, 0x5f, 0x04, 0x00,
0x00,
// 633 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x4f, 0x4f, 0x13, 0x4f,
0x18, 0xee, 0x00, 0x3f, 0x7e, 0x3a, 0xad, 0x07, 0xc7, 0x22, 0x4b, 0x95, 0x6d, 0x21, 0xd1, 0x34,
0x24, 0xec, 0x0a, 0x26, 0x1e, 0xe0, 0x64, 0x69, 0x8c, 0x1a, 0x12, 0xc9, 0xe2, 0x9f, 0xc4, 0x83,
0x9b, 0xd9, 0x9d, 0xe9, 0x76, 0x64, 0x77, 0xa6, 0xd9, 0x99, 0x15, 0xf8, 0x0a, 0x26, 0x26, 0x1c,
0x3d, 0x7a, 0xe4, 0xc8, 0x81, 0xaf, 0x60, 0xc2, 0x91, 0x70, 0x32, 0x1e, 0xd0, 0x94, 0x03, 0x7e,
0x0c, 0xb3, 0x33, 0xbb, 0x80, 0x70, 0xe3, 0xd2, 0xb4, 0xcf, 0xf3, 0xbc, 0xcf, 0x3b, 0xef, 0xf3,
0xbe, 0x29, 0x7c, 0x18, 0x0a, 0x99, 0x08, 0xe9, 0xca, 0x18, 0xcb, 0x3e, 0xe3, 0x91, 0xfb, 0x69,
0x21, 0xa0, 0x0a, 0x2f, 0x9c, 0x01, 0xce, 0x20, 0x15, 0x4a, 0xa0, 0x49, 0xa3, 0x73, 0xce, 0xe0,
0x42, 0xd7, 0xa8, 0x47, 0x22, 0x12, 0x5a, 0xe3, 0xe6, 0xdf, 0x8c, 0xbc, 0x61, 0x47, 0x42, 0x44,
0x31, 0x75, 0xf5, 0xaf, 0x20, 0xeb, 0xb9, 0x24, 0x4b, 0xb1, 0x62, 0x82, 0x17, 0x7c, 0xf3, 0x32,
0xaf, 0x58, 0x42, 0xa5, 0xc2, 0xc9, 0xa0, 0x10, 0x4c, 0x99, 0x7e, 0xbe, 0x71, 0x2e, 0x9a, 0x1b,
0xea, 0x36, 0x4e, 0x18, 0x17, 0xae, 0xfe, 0x34, 0xd0, 0xec, 0xf7, 0x11, 0x58, 0x7f, 0x8b, 0x63,
0x46, 0xb0, 0x12, 0xe9, 0x3a, 0x8b, 0x38, 0xe3, 0xd1, 0x0b, 0xde, 0x13, 0x68, 0x19, 0xfe, 0x8f,
0x09, 0x49, 0xa9, 0x94, 0x16, 0x68, 0x81, 0xf6, 0xcd, 0xce, 0xcc, 0xd1, 0xfe, 0xfc, 0x74, 0x61,
0xb7, 0x22, 0xb8, 0xa4, 0x5c, 0x66, 0xf2, 0xa9, 0x91, 0xac, 0xab, 0x94, 0xf1, 0xc8, 0x2b, 0x2b,
0xd0, 0x0c, 0xac, 0x49, 0x85, 0x53, 0xe5, 0xf7, 0x29, 0x8b, 0xfa, 0xca, 0x1a, 0x69, 0x81, 0xf6,
0xa8, 0x57, 0xd5, 0xd8, 0x73, 0x0d, 0xa1, 0x07, 0xb0, 0xc6, 0x38, 0xa1, 0x5b, 0xbe, 0xe8, 0xf5,
0x24, 0x55, 0xd6, 0x68, 0x2e, 0xe9, 0x8c, 0x58, 0xc0, 0xab, 0x6a, 0xfc, 0x95, 0x86, 0xd1, 0x2a,
0xac, 0x7d, 0xc4, 0x2c, 0xa6, 0xc4, 0xcf, 0xb8, 0x62, 0xb1, 0x35, 0xd6, 0x02, 0xed, 0xea, 0x62,
0xc3, 0x31, 0x29, 0x38, 0x65, 0x0a, 0xce, 0xeb, 0x32, 0x85, 0xce, 0xad, 0x83, 0xe3, 0x66, 0x65,
0xe7, 0x57, 0x13, 0xec, 0x9e, 0xee, 0xcd, 0x01, 0xaf, 0x6a, 0xca, 0xdf, 0xe4, 0xd5, 0xc8, 0x86,
0x50, 0x89, 0x24, 0x90, 0x4a, 0x70, 0x4a, 0xac, 0xff, 0x5a, 0xa0, 0x7d, 0xc3, 0xbb, 0x80, 0xa0,
0x45, 0x38, 0x91, 0x30, 0x29, 0x29, 0xf1, 0x83, 0x58, 0x84, 0x1b, 0xd2, 0x0f, 0x45, 0xc6, 0x15,
0x4d, 0xad, 0x71, 0x3d, 0xc0, 0x1d, 0x43, 0x76, 0x34, 0xb7, 0x62, 0xa8, 0xa5, 0xb1, 0x3f, 0xdf,
0x9a, 0x60, 0xf6, 0xcb, 0x18, 0x1c, 0x5f, 0xc3, 0x29, 0x4e, 0x24, 0x7a, 0x04, 0xeb, 0x92, 0x45,
0xfc, 0xdc, 0x64, 0x93, 0x71, 0x22, 0x36, 0x75, 0x8c, 0xa3, 0x1e, 0x32, 0x9c, 0xf1, 0x78, 0xa7,
0x19, 0xc4, 0xf2, 0xb6, 0xdc, 0x2f, 0xaa, 0x06, 0x34, 0x2d, 0x4b, 0xf2, 0xdc, 0x6a, 0x9d, 0x27,
0xf9, 0x44, 0x3f, 0x8f, 0x9b, 0xf7, 0x4c, 0xfa, 0x92, 0x6c, 0x38, 0x4c, 0xb8, 0x09, 0x56, 0x7d,
0x67, 0x95, 0x46, 0x38, 0xdc, 0xee, 0xd2, 0xf0, 0x68, 0x7f, 0x1e, 0x16, 0xcb, 0xe9, 0xd2, 0xd0,
0x8c, 0x8e, 0x12, 0xc6, 0xd7, 0xb5, 0xe7, 0x1a, 0x4d, 0x8b, 0x56, 0x1f, 0xe0, 0x5d, 0x22, 0x36,
0x79, 0x7e, 0x34, 0x7e, 0x9e, 0x8c, 0x5f, 0x9e, 0x97, 0x5e, 0x40, 0x75, 0x71, 0xea, 0x4a, 0xb2,
0xdd, 0x42, 0x60, 0x82, 0xfd, 0x7a, 0x16, 0x6c, 0xbd, 0xf4, 0x79, 0x89, 0x59, 0x5c, 0x8a, 0x90,
0x84, 0x0d, 0x7d, 0xe8, 0x7e, 0x2f, 0xc5, 0x61, 0x8e, 0xf8, 0x44, 0x64, 0x41, 0x4c, 0xf5, 0x70,
0x7a, 0x7b, 0xd7, 0x9f, 0x67, 0x52, 0x3b, 0x3f, 0x2b, 0x8c, 0xbb, 0xda, 0x37, 0x9f, 0x0f, 0x71,
0x38, 0x79, 0xa5, 0xa9, 0x79, 0x9b, 0xde, 0xf1, 0xf5, 0x3b, 0x4e, 0x5c, 0xea, 0x68, 0x4c, 0x97,
0x66, 0x3e, 0x9f, 0xee, 0xcd, 0xdd, 0x37, 0xe2, 0x79, 0x49, 0x36, 0xdc, 0xad, 0xf3, 0x7f, 0x01,
0x73, 0x04, 0x9d, 0xe5, 0xdd, 0xa1, 0x0d, 0x0e, 0x86, 0x36, 0x38, 0x1c, 0xda, 0xe0, 0xf7, 0xd0,
0x06, 0x3b, 0x27, 0x76, 0xe5, 0xf0, 0xc4, 0xae, 0xfc, 0x38, 0xb1, 0x2b, 0xef, 0xa7, 0xff, 0x79,
0xc7, 0x85, 0x6a, 0xb5, 0x3d, 0xa0, 0x32, 0x18, 0xd7, 0xe1, 0x3f, 0xfe, 0x1b, 0x00, 0x00, 0xff,
0xff, 0x57, 0xe6, 0xe5, 0x80, 0x63, 0x04, 0x00, 0x00,
}
func (this *ValidatorSigningInfo) Equal(that interface{}) bool {