From 121f0d3fcf6224b46aa78ec8dc704fa224c2c9c3 Mon Sep 17 00:00:00 2001 From: Emmanuel T Odeke Date: Mon, 12 Mar 2018 14:43:15 -0700 Subject: [PATCH 01/40] types: compile time assert to, and document sort.Interface Fixes #212 Declare the purpose of the Less, Len, Swap methods so that readers can see why they are defined. Raised by an auditor in their report, as it looked like a security concern but actually sort.Interface requires those methods implemented. --- types/util.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/types/util.go b/types/util.go index 39a24e02..da5bc726 100644 --- a/types/util.go +++ b/types/util.go @@ -3,6 +3,7 @@ package types import ( "bytes" "encoding/json" + "sort" ) //------------------------------------------------------------------------------ @@ -10,6 +11,14 @@ import ( // Validators is a list of validators that implements the Sort interface type Validators []Validator +var _ sort.Interface = (Validators)(nil) + +// All these methods for Validators: +// Len, Less and Swap +// are for Validators to implement sort.Interface +// which will be used by the sort package. +// See Issue https://github.com/tendermint/abci/issues/212 + func (v Validators) Len() int { return len(v) } From ef67705524f6decb0d57c11ebafaf711f02e0d75 Mon Sep 17 00:00:00 2001 From: Adrian Brink Date: Sun, 13 May 2018 19:04:03 -0400 Subject: [PATCH 02/40] Allow ResponseInitChain to return the initial validator set ResponseInitChain should be able to return an initial validator set that is determined by some logic within the genesis.json file. --- .gitignore | 1 + types/types.pb.go | 216 ++++++++++++++++++++++++---------------------- types/types.proto | 1 + 3 files changed, 114 insertions(+), 104 deletions(-) diff --git a/.gitignore b/.gitignore index f1fa5d41..3cfc8e04 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ vendor types/types.pb.go *.sw[op] abci-cli +coverage.txt \ No newline at end of file diff --git a/types/types.pb.go b/types/types.pb.go index 92cbe7d8..b0e88d46 100644 --- a/types/types.pb.go +++ b/types/types.pb.go @@ -1238,6 +1238,7 @@ func (m *ResponseSetOption) GetInfo() string { } type ResponseInitChain struct { + Validators []Validator `protobuf:"bytes,1,rep,name=validators" json:"validators"` } func (m *ResponseInitChain) Reset() { *m = ResponseInitChain{} } @@ -1245,6 +1246,13 @@ func (m *ResponseInitChain) String() string { return proto.CompactTex func (*ResponseInitChain) ProtoMessage() {} func (*ResponseInitChain) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{18} } +func (m *ResponseInitChain) GetValidators() []Validator { + if m != nil { + return m.Validators + } + return nil +} + type ResponseQuery struct { Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` // bytes data = 2; // use "value" instead. @@ -2240,115 +2248,115 @@ var _ABCIApplication_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("types/types.proto", fileDescriptorTypes) } var fileDescriptorTypes = []byte{ - // 1757 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0xcd, 0x6e, 0x1b, 0xc9, - 0x11, 0x16, 0xff, 0x39, 0x45, 0x89, 0x94, 0x5a, 0xb2, 0x4d, 0x73, 0x11, 0x58, 0x18, 0x04, 0x5e, - 0x3a, 0xf6, 0x8a, 0x89, 0x36, 0x36, 0x6c, 0x6f, 0xb0, 0x88, 0x29, 0x39, 0x26, 0xb1, 0x49, 0xd6, - 0x19, 0x7b, 0x1d, 0x20, 0x17, 0xa2, 0xc9, 0x69, 0x91, 0x03, 0x73, 0x7e, 0x76, 0xba, 0xa9, 0xa5, - 0x7c, 0xcb, 0x7d, 0xef, 0x39, 0xe7, 0x94, 0x27, 0xc8, 0x2b, 0x04, 0x09, 0xf2, 0x0e, 0x3a, 0xec, - 0x31, 0x2f, 0x91, 0xa0, 0xba, 0x7b, 0x7e, 0x35, 0xb3, 0x58, 0xe4, 0xba, 0x17, 0xb2, 0xab, 0xeb, - 0xab, 0xee, 0xae, 0xee, 0xea, 0xaf, 0x6a, 0x1a, 0x0e, 0xc4, 0x55, 0xc0, 0xf8, 0x48, 0xfe, 0x9e, - 0x04, 0xa1, 0x2f, 0x7c, 0xd2, 0x90, 0xc2, 0xe0, 0x93, 0xa5, 0x23, 0x56, 0x9b, 0xf9, 0xc9, 0xc2, - 0x77, 0x47, 0x4b, 0x7f, 0xe9, 0x8f, 0xa4, 0x76, 0xbe, 0xb9, 0x90, 0x92, 0x14, 0x64, 0x4b, 0x59, - 0x0d, 0x46, 0x29, 0xb8, 0x60, 0x9e, 0xcd, 0x42, 0xd7, 0xf1, 0xc4, 0x48, 0xb8, 0x6b, 0x67, 0xce, - 0x47, 0x0b, 0xdf, 0x75, 0x7d, 0x2f, 0x3d, 0x8d, 0xf9, 0x8f, 0x3a, 0xb4, 0x2c, 0xf6, 0xf5, 0x86, - 0x71, 0x41, 0x86, 0x50, 0x67, 0x8b, 0x95, 0xdf, 0xaf, 0x1e, 0x57, 0x86, 0x9d, 0x53, 0x72, 0xa2, - 0x70, 0x5a, 0xfb, 0x72, 0xb1, 0xf2, 0x27, 0x3b, 0x96, 0x44, 0x90, 0x87, 0xd0, 0xb8, 0x58, 0x6f, - 0xf8, 0xaa, 0x5f, 0x93, 0xd0, 0xc3, 0x2c, 0xf4, 0x37, 0xa8, 0x9a, 0xec, 0x58, 0x0a, 0x83, 0xc3, - 0x3a, 0xde, 0x85, 0xdf, 0xaf, 0x17, 0x0d, 0x3b, 0xf5, 0x2e, 0xe4, 0xb0, 0x88, 0x20, 0x4f, 0x01, - 0x38, 0x13, 0x33, 0x3f, 0x10, 0x8e, 0xef, 0xf5, 0x1b, 0x12, 0x7f, 0x27, 0x8b, 0x7f, 0xc3, 0xc4, - 0x97, 0x52, 0x3d, 0xd9, 0xb1, 0x0c, 0x1e, 0x09, 0x68, 0xe9, 0x78, 0x8e, 0x98, 0x2d, 0x56, 0xd4, - 0xf1, 0xfa, 0xcd, 0x22, 0xcb, 0xa9, 0xe7, 0x88, 0x33, 0x54, 0xa3, 0xa5, 0x13, 0x09, 0xe8, 0xca, - 0xd7, 0x1b, 0x16, 0x5e, 0xf5, 0x5b, 0x45, 0xae, 0xfc, 0x01, 0x55, 0xe8, 0x8a, 0xc4, 0x90, 0xcf, - 0xa0, 0x33, 0x67, 0x4b, 0xc7, 0x9b, 0xcd, 0xd7, 0xfe, 0xe2, 0x7d, 0xbf, 0x2d, 0x4d, 0xfa, 0x59, - 0x93, 0x31, 0x02, 0xc6, 0xa8, 0x9f, 0xec, 0x58, 0x30, 0x8f, 0x25, 0x72, 0x0a, 0xed, 0xc5, 0x8a, - 0x2d, 0xde, 0xcf, 0xc4, 0xb6, 0x6f, 0x48, 0xcb, 0x5b, 0x59, 0xcb, 0x33, 0xd4, 0xbe, 0xdd, 0x4e, - 0x76, 0xac, 0xd6, 0x42, 0x35, 0xd1, 0x2f, 0x9b, 0xad, 0x9d, 0x4b, 0x16, 0xa2, 0xd5, 0x61, 0x91, - 0x5f, 0xe7, 0x4a, 0x2f, 0xed, 0x0c, 0x3b, 0x12, 0xc8, 0x63, 0x30, 0x98, 0x67, 0xeb, 0x85, 0x76, - 0xa4, 0xe1, 0xed, 0xdc, 0x89, 0x7a, 0x76, 0xb4, 0xcc, 0x36, 0xd3, 0x6d, 0x72, 0x02, 0x4d, 0x8c, + // 1758 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0xcd, 0x8e, 0x1b, 0xb9, + 0x11, 0x1e, 0xfd, 0xab, 0x4b, 0x33, 0xd2, 0x0c, 0x67, 0x6c, 0xcb, 0x5a, 0x04, 0x1e, 0x34, 0x02, + 0xaf, 0x1c, 0x7b, 0x47, 0xc9, 0x6c, 0x6c, 0xd8, 0xde, 0x60, 0x11, 0x6b, 0xec, 0x58, 0x82, 0x93, + 0xac, 0xd3, 0xf6, 0x3a, 0x40, 0x2e, 0x02, 0xa5, 0xe6, 0x48, 0x0d, 0xab, 0x7f, 0xb6, 0x49, 0xcd, + 0x6a, 0x7c, 0xcb, 0x7d, 0xef, 0x39, 0xe7, 0x94, 0x27, 0xc8, 0x2b, 0x04, 0x09, 0xf2, 0x0e, 0x73, + 0xd8, 0x63, 0x5e, 0x22, 0x41, 0x91, 0xec, 0xdf, 0xe9, 0x5e, 0x18, 0xc9, 0x31, 0x17, 0x89, 0xc5, + 0xfa, 0x8a, 0x64, 0x91, 0xc5, 0xaf, 0xaa, 0x09, 0x07, 0xe2, 0x32, 0x60, 0x7c, 0x24, 0x7f, 0x4f, + 0x82, 0xd0, 0x17, 0x3e, 0x69, 0x48, 0x61, 0xf0, 0xd9, 0xd2, 0x11, 0xab, 0xcd, 0xfc, 0x64, 0xe1, + 0xbb, 0xa3, 0xa5, 0xbf, 0xf4, 0x47, 0x52, 0x3b, 0xdf, 0x9c, 0x4b, 0x49, 0x0a, 0xb2, 0xa5, 0xac, + 0x06, 0xa3, 0x14, 0x5c, 0x30, 0xcf, 0x66, 0xa1, 0xeb, 0x78, 0x62, 0x24, 0xdc, 0xb5, 0x33, 0xe7, + 0xa3, 0x85, 0xef, 0xba, 0xbe, 0x97, 0x9e, 0xc6, 0xfc, 0x5b, 0x1d, 0x5a, 0x16, 0xfb, 0x66, 0xc3, + 0xb8, 0x20, 0x43, 0xa8, 0xb3, 0xc5, 0xca, 0xef, 0x57, 0x8f, 0x2b, 0xc3, 0xce, 0x29, 0x39, 0x51, + 0x38, 0xad, 0x7d, 0xb1, 0x58, 0xf9, 0x93, 0x1d, 0x4b, 0x22, 0xc8, 0x7d, 0x68, 0x9c, 0xaf, 0x37, + 0x7c, 0xd5, 0xaf, 0x49, 0xe8, 0x61, 0x16, 0xfa, 0x2b, 0x54, 0x4d, 0x76, 0x2c, 0x85, 0xc1, 0x61, + 0x1d, 0xef, 0xdc, 0xef, 0xd7, 0x8b, 0x86, 0x9d, 0x7a, 0xe7, 0x72, 0x58, 0x44, 0x90, 0xc7, 0x00, + 0x9c, 0x89, 0x99, 0x1f, 0x08, 0xc7, 0xf7, 0xfa, 0x0d, 0x89, 0xbf, 0x95, 0xc5, 0xbf, 0x61, 0xe2, + 0x2b, 0xa9, 0x9e, 0xec, 0x58, 0x06, 0x8f, 0x04, 0xb4, 0x74, 0x3c, 0x47, 0xcc, 0x16, 0x2b, 0xea, + 0x78, 0xfd, 0x66, 0x91, 0xe5, 0xd4, 0x73, 0xc4, 0x19, 0xaa, 0xd1, 0xd2, 0x89, 0x04, 0x74, 0xe5, + 0x9b, 0x0d, 0x0b, 0x2f, 0xfb, 0xad, 0x22, 0x57, 0x7e, 0x87, 0x2a, 0x74, 0x45, 0x62, 0xc8, 0x17, + 0xd0, 0x99, 0xb3, 0xa5, 0xe3, 0xcd, 0xe6, 0x6b, 0x7f, 0xf1, 0xbe, 0xdf, 0x96, 0x26, 0xfd, 0xac, + 0xc9, 0x18, 0x01, 0x63, 0xd4, 0x4f, 0x76, 0x2c, 0x98, 0xc7, 0x12, 0x39, 0x85, 0xf6, 0x62, 0xc5, + 0x16, 0xef, 0x67, 0x62, 0xdb, 0x37, 0xa4, 0xe5, 0x8d, 0xac, 0xe5, 0x19, 0x6a, 0xdf, 0x6e, 0x27, + 0x3b, 0x56, 0x6b, 0xa1, 0x9a, 0xe8, 0x97, 0xcd, 0xd6, 0xce, 0x05, 0x0b, 0xd1, 0xea, 0xb0, 0xc8, + 0xaf, 0xe7, 0x4a, 0x2f, 0xed, 0x0c, 0x3b, 0x12, 0xc8, 0x43, 0x30, 0x98, 0x67, 0xeb, 0x85, 0x76, + 0xa4, 0xe1, 0xcd, 0xdc, 0x89, 0x7a, 0x76, 0xb4, 0xcc, 0x36, 0xd3, 0x6d, 0x72, 0x02, 0x4d, 0x8c, 0x12, 0x47, 0xf4, 0x77, 0xa5, 0xcd, 0x51, 0x6e, 0x89, 0x52, 0x37, 0xd9, 0xb1, 0x34, 0x6a, 0xdc, - 0x82, 0xc6, 0x25, 0x5d, 0x6f, 0x98, 0xf9, 0x31, 0x74, 0x52, 0x91, 0x42, 0xfa, 0xd0, 0x72, 0x19, + 0x82, 0xc6, 0x05, 0x5d, 0x6f, 0x98, 0xf9, 0x29, 0x74, 0x52, 0x91, 0x42, 0xfa, 0xd0, 0x72, 0x19, 0xe7, 0x74, 0xc9, 0xfa, 0x95, 0xe3, 0xca, 0xd0, 0xb0, 0x22, 0xd1, 0xec, 0xc2, 0x6e, 0x3a, 0x4e, - 0x52, 0x86, 0x18, 0x0b, 0x68, 0x78, 0xc9, 0x42, 0x8e, 0x01, 0xa0, 0x0d, 0xb5, 0x68, 0x3e, 0x87, - 0xfd, 0x7c, 0x10, 0x90, 0x7d, 0xa8, 0xbd, 0x67, 0x57, 0x1a, 0x89, 0x4d, 0x72, 0xa4, 0x17, 0x24, - 0xa3, 0xd8, 0xb0, 0xf4, 0xea, 0xc2, 0xd8, 0x36, 0x0e, 0x03, 0xf2, 0x04, 0xe0, 0x92, 0xae, 0x1d, + 0x52, 0x86, 0x18, 0x0b, 0x68, 0x78, 0xc1, 0x42, 0x8e, 0x01, 0xa0, 0x0d, 0xb5, 0x68, 0x3e, 0x85, + 0xfd, 0x7c, 0x10, 0x90, 0x7d, 0xa8, 0xbd, 0x67, 0x97, 0x1a, 0x89, 0x4d, 0x72, 0xa4, 0x17, 0x24, + 0xa3, 0xd8, 0xb0, 0xf4, 0xea, 0xc2, 0xd8, 0x36, 0x0e, 0x03, 0xf2, 0x08, 0xe0, 0x82, 0xae, 0x1d, 0x9b, 0x0a, 0x3f, 0xe4, 0xfd, 0xca, 0x71, 0x6d, 0xd8, 0x39, 0xdd, 0xd7, 0xee, 0xbe, 0x8b, 0x14, - 0xe3, 0xfa, 0x3f, 0xaf, 0xef, 0xed, 0x58, 0x29, 0x24, 0xb9, 0x0f, 0x3d, 0x1a, 0x04, 0x33, 0x2e, - 0xa8, 0x60, 0xb3, 0xf9, 0x95, 0x60, 0x5c, 0xce, 0xb5, 0x6b, 0xed, 0xd1, 0x20, 0x78, 0x83, 0xbd, + 0xe3, 0xfa, 0xdf, 0xaf, 0xee, 0xec, 0x58, 0x29, 0x24, 0xb9, 0x0b, 0x3d, 0x1a, 0x04, 0x33, 0x2e, + 0xa8, 0x60, 0xb3, 0xf9, 0xa5, 0x60, 0x5c, 0xce, 0xb5, 0x6b, 0xed, 0xd1, 0x20, 0x78, 0x83, 0xbd, 0x63, 0xec, 0x34, 0xed, 0xd8, 0x51, 0x19, 0x45, 0x84, 0x40, 0xdd, 0xa6, 0x82, 0xca, 0xc5, 0xee, - 0x5a, 0xb2, 0x8d, 0x7d, 0x01, 0x15, 0x2b, 0xbd, 0x58, 0xd9, 0x26, 0xb7, 0xa1, 0xb9, 0x62, 0xce, - 0x72, 0x25, 0xe4, 0xed, 0xaa, 0x59, 0x5a, 0x42, 0xcf, 0x82, 0xd0, 0xbf, 0x64, 0xf2, 0x22, 0xb5, - 0x2d, 0x25, 0x98, 0xff, 0xae, 0xc0, 0xc1, 0x8d, 0xc8, 0xc3, 0x71, 0x57, 0x94, 0xaf, 0xa2, 0xb9, - 0xb0, 0x4d, 0x1e, 0xe2, 0xb8, 0xd4, 0x66, 0xa1, 0xbe, 0xe0, 0x7b, 0xda, 0xd7, 0x89, 0xec, 0xd4, - 0x8e, 0x6a, 0x08, 0x79, 0x08, 0x07, 0x74, 0xce, 0x99, 0x27, 0x66, 0xa9, 0x3d, 0xaa, 0x1d, 0xd7, - 0x86, 0x0d, 0x6b, 0x5f, 0x29, 0xde, 0x25, 0x3b, 0x32, 0x81, 0xa3, 0xf9, 0xd5, 0x07, 0xea, 0x09, - 0xc7, 0x63, 0x69, 0x7c, 0x5d, 0xee, 0x69, 0x4f, 0xcf, 0xf3, 0xf2, 0xd2, 0xb1, 0x99, 0xb7, 0x60, + 0x5a, 0xb2, 0x8d, 0x7d, 0x01, 0x15, 0x2b, 0xbd, 0x58, 0xd9, 0x26, 0x37, 0xa1, 0xb9, 0x62, 0xce, + 0x72, 0x25, 0xe4, 0xed, 0xaa, 0x59, 0x5a, 0x42, 0xcf, 0x82, 0xd0, 0xbf, 0x60, 0xf2, 0x22, 0xb5, + 0x2d, 0x25, 0x98, 0xff, 0xac, 0xc0, 0xc1, 0xb5, 0xc8, 0xc3, 0x71, 0x57, 0x94, 0xaf, 0xa2, 0xb9, + 0xb0, 0x4d, 0xee, 0xe3, 0xb8, 0xd4, 0x66, 0xa1, 0xbe, 0xe0, 0x7b, 0xda, 0xd7, 0x89, 0xec, 0xd4, + 0x8e, 0x6a, 0x08, 0xb9, 0x0f, 0x07, 0x74, 0xce, 0x99, 0x27, 0x66, 0xa9, 0x3d, 0xaa, 0x1d, 0xd7, + 0x86, 0x0d, 0x6b, 0x5f, 0x29, 0xde, 0x25, 0x3b, 0x32, 0x81, 0xa3, 0xf9, 0xe5, 0x07, 0xea, 0x09, + 0xc7, 0x63, 0x69, 0x7c, 0x5d, 0xee, 0x69, 0x4f, 0xcf, 0xf3, 0xe2, 0xc2, 0xb1, 0x99, 0xb7, 0x60, 0x7a, 0xa6, 0xc3, 0xd8, 0x24, 0x19, 0xc9, 0x3c, 0x86, 0x6e, 0xf6, 0x32, 0x90, 0x2e, 0x54, 0xc5, - 0x56, 0xfb, 0x51, 0x15, 0x5b, 0xd3, 0x8c, 0x4f, 0x32, 0x0e, 0xfc, 0x1b, 0x98, 0x07, 0xd0, 0xcb, - 0xc5, 0x78, 0x6a, 0x53, 0x2b, 0xe9, 0x4d, 0x35, 0x7b, 0xb0, 0x97, 0x09, 0x6d, 0xf3, 0xdb, 0x06, - 0xb4, 0x2d, 0xc6, 0x03, 0xdf, 0xe3, 0x8c, 0x3c, 0x05, 0x83, 0x6d, 0x17, 0x4c, 0xf1, 0x51, 0x25, - 0x77, 0xdb, 0x15, 0xe6, 0x65, 0xa4, 0xc7, 0xeb, 0x17, 0x83, 0xc9, 0x83, 0x0c, 0x97, 0x1e, 0xe6, - 0x8d, 0xd2, 0x64, 0xfa, 0x28, 0x4b, 0xa6, 0x47, 0x39, 0x6c, 0x8e, 0x4d, 0x1f, 0x64, 0xd8, 0x34, - 0x3f, 0x70, 0x86, 0x4e, 0x9f, 0x15, 0xd0, 0x69, 0x7e, 0xf9, 0x25, 0x7c, 0xfa, 0xac, 0x80, 0x4f, - 0xfb, 0x37, 0xe6, 0x2a, 0x24, 0xd4, 0x47, 0x59, 0x42, 0xcd, 0xbb, 0x93, 0x63, 0xd4, 0x5f, 0x15, - 0x31, 0xea, 0xdd, 0x9c, 0x4d, 0x29, 0xa5, 0x7e, 0x7a, 0x83, 0x52, 0x6f, 0xe7, 0x4c, 0x0b, 0x38, - 0xf5, 0x59, 0x86, 0x53, 0xa1, 0xd0, 0xb7, 0x12, 0x52, 0x7d, 0x72, 0x93, 0x54, 0xef, 0xe4, 0x8f, - 0xb6, 0x88, 0x55, 0x47, 0x39, 0x56, 0xbd, 0x95, 0x5f, 0x65, 0x29, 0xad, 0x3e, 0xc0, 0xdb, 0x9d, + 0x56, 0xfb, 0x51, 0x15, 0x5b, 0xd3, 0x8c, 0x4f, 0x32, 0x0e, 0xfc, 0x6b, 0x98, 0x7b, 0xd0, 0xcb, + 0xc5, 0x78, 0x6a, 0x53, 0x2b, 0xe9, 0x4d, 0x35, 0x7b, 0xb0, 0x97, 0x09, 0x6d, 0xf3, 0xbb, 0x06, + 0xb4, 0x2d, 0xc6, 0x03, 0xdf, 0xe3, 0x8c, 0x3c, 0x06, 0x83, 0x6d, 0x17, 0x4c, 0xf1, 0x51, 0x25, + 0x77, 0xdb, 0x15, 0xe6, 0x45, 0xa4, 0xc7, 0xeb, 0x17, 0x83, 0xc9, 0xbd, 0x0c, 0x97, 0x1e, 0xe6, + 0x8d, 0xd2, 0x64, 0xfa, 0x20, 0x4b, 0xa6, 0x47, 0x39, 0x6c, 0x8e, 0x4d, 0xef, 0x65, 0xd8, 0x34, + 0x3f, 0x70, 0x86, 0x4e, 0x9f, 0x14, 0xd0, 0x69, 0x7e, 0xf9, 0x25, 0x7c, 0xfa, 0xa4, 0x80, 0x4f, + 0xfb, 0xd7, 0xe6, 0x2a, 0x24, 0xd4, 0x07, 0x59, 0x42, 0xcd, 0xbb, 0x93, 0x63, 0xd4, 0x5f, 0x14, + 0x31, 0xea, 0xed, 0x9c, 0x4d, 0x29, 0xa5, 0x7e, 0x7e, 0x8d, 0x52, 0x6f, 0xe6, 0x4c, 0x0b, 0x38, + 0xf5, 0x49, 0x86, 0x53, 0xa1, 0xd0, 0xb7, 0x12, 0x52, 0x7d, 0x74, 0x9d, 0x54, 0x6f, 0xe5, 0x8f, + 0xb6, 0x88, 0x55, 0x47, 0x39, 0x56, 0xbd, 0x91, 0x5f, 0x65, 0x29, 0xad, 0xde, 0xc3, 0xdb, 0x9d, 0x8b, 0x34, 0x64, 0x02, 0x16, 0x86, 0x7e, 0xa8, 0x79, 0x4f, 0x09, 0xe6, 0x10, 0xf9, 0x26, 0x89, - 0xaf, 0xef, 0xa1, 0x60, 0x19, 0xf4, 0xa9, 0xe8, 0x32, 0xff, 0x52, 0x49, 0x6c, 0x25, 0x0b, 0xa7, - 0xb9, 0xca, 0xd0, 0x5c, 0x95, 0x62, 0xe6, 0x6a, 0x86, 0x99, 0xc9, 0xcf, 0xe0, 0x60, 0x4d, 0xb9, - 0x50, 0xfb, 0x32, 0xcb, 0x90, 0x57, 0x0f, 0x15, 0x6a, 0x43, 0x14, 0x8b, 0x7d, 0x02, 0x87, 0x29, - 0x2c, 0x12, 0xa9, 0x24, 0xaa, 0xba, 0xbc, 0xbc, 0xfb, 0x31, 0xfa, 0x45, 0x10, 0x4c, 0x28, 0x5f, - 0x99, 0xbf, 0x4b, 0xfc, 0x4f, 0x58, 0x9f, 0x40, 0x7d, 0xe1, 0xdb, 0xca, 0xad, 0x3d, 0x4b, 0xb6, + 0xaf, 0x1f, 0xa0, 0x60, 0x19, 0xf4, 0xa9, 0xe8, 0x32, 0xff, 0x54, 0x49, 0x6c, 0x25, 0x0b, 0xa7, + 0xb9, 0xca, 0xd0, 0x5c, 0x95, 0x62, 0xe6, 0x6a, 0x86, 0x99, 0xc9, 0x4f, 0xe0, 0x60, 0x4d, 0xb9, + 0x50, 0xfb, 0x32, 0xcb, 0x90, 0x57, 0x0f, 0x15, 0x6a, 0x43, 0x14, 0x8b, 0x7d, 0x06, 0x87, 0x29, + 0x2c, 0x12, 0xa9, 0x24, 0xaa, 0xba, 0xbc, 0xbc, 0xfb, 0x31, 0xfa, 0x59, 0x10, 0x4c, 0x28, 0x5f, + 0x99, 0xbf, 0x49, 0xfc, 0x4f, 0x58, 0x9f, 0x40, 0x7d, 0xe1, 0xdb, 0xca, 0xad, 0x3d, 0x4b, 0xb6, 0x31, 0x13, 0xac, 0xfd, 0xa5, 0x9c, 0xd5, 0xb0, 0xb0, 0x89, 0xa8, 0xf8, 0xa6, 0x18, 0xea, 0x4a, - 0x98, 0x87, 0xc9, 0x70, 0x71, 0xf8, 0x9a, 0x7f, 0xaf, 0x24, 0xfb, 0x11, 0x53, 0xf5, 0xff, 0x37, - 0x01, 0x1e, 0x8d, 0xe3, 0xd9, 0x6c, 0x2b, 0xaf, 0x5b, 0xcd, 0x52, 0x42, 0x94, 0xa6, 0x9a, 0xd2, - 0xc9, 0x6c, 0x9a, 0x6a, 0xc9, 0x3e, 0x25, 0x68, 0x8a, 0xf7, 0x2f, 0xe4, 0x3d, 0xd8, 0xb5, 0x94, - 0x90, 0xe2, 0x2e, 0x23, 0xc3, 0x5d, 0x47, 0x40, 0x6e, 0xde, 0x10, 0xf3, 0xbf, 0x15, 0x64, 0xbf, - 0x4c, 0xf4, 0x17, 0xfa, 0x13, 0x1d, 0x71, 0x35, 0x95, 0x8e, 0x7e, 0x98, 0x8f, 0x3f, 0x01, 0x58, - 0x52, 0x3e, 0xfb, 0x86, 0x7a, 0x82, 0xd9, 0xda, 0x51, 0x63, 0x49, 0xf9, 0x1f, 0x65, 0x07, 0xb9, - 0x0b, 0x6d, 0x54, 0x6f, 0x38, 0xb3, 0xa5, 0xc7, 0x35, 0xab, 0xb5, 0xa4, 0xfc, 0x2b, 0xce, 0x6c, - 0xf2, 0x1c, 0xea, 0x82, 0x2e, 0x79, 0xbf, 0x25, 0x13, 0x43, 0xf7, 0x44, 0x15, 0xa4, 0x27, 0x5f, - 0xbc, 0x7b, 0x4d, 0x9d, 0x70, 0x7c, 0x1b, 0xf3, 0xc2, 0x7f, 0xae, 0xef, 0x75, 0x11, 0xf3, 0xc8, - 0x77, 0x1d, 0xc1, 0xdc, 0x40, 0x5c, 0x59, 0xd2, 0x86, 0x0c, 0xa1, 0x76, 0xc1, 0x98, 0x66, 0x88, - 0xfd, 0xd8, 0x74, 0xfa, 0xe4, 0x97, 0xd2, 0x58, 0x25, 0x15, 0x84, 0x98, 0x7f, 0xae, 0x26, 0xa7, - 0x9c, 0x24, 0x89, 0x1f, 0xd7, 0x1e, 0xfc, 0xad, 0x82, 0x79, 0x32, 0x4b, 0x49, 0xe4, 0x0c, 0x0e, - 0xe2, 0xec, 0x3c, 0xdb, 0x04, 0x36, 0xc5, 0xda, 0xe5, 0xfb, 0x0b, 0x9f, 0xfd, 0xd8, 0xe0, 0x2b, - 0x85, 0x27, 0xbf, 0x87, 0x3b, 0x0b, 0x1c, 0xd5, 0xe3, 0x1b, 0x3e, 0x0b, 0x68, 0x48, 0xdd, 0x78, - 0xa8, 0x6a, 0x86, 0x82, 0xcf, 0x22, 0xd4, 0x6b, 0x04, 0x71, 0xeb, 0xd6, 0x22, 0xd3, 0xa1, 0xc7, - 0x33, 0x7f, 0x8a, 0x29, 0x3f, 0x4d, 0x83, 0x45, 0xa7, 0x62, 0xfe, 0xb5, 0x02, 0xbd, 0xdc, 0x80, - 0x64, 0x04, 0xa0, 0x58, 0x84, 0x3b, 0x1f, 0x98, 0x4e, 0xcf, 0x91, 0x1f, 0xd2, 0xe1, 0x37, 0xce, - 0x07, 0x66, 0x19, 0xf3, 0xa8, 0x49, 0xee, 0x43, 0x4b, 0x6c, 0x15, 0x3a, 0x5b, 0x02, 0xbd, 0xdd, - 0x4a, 0x68, 0x53, 0xc8, 0x7f, 0xf2, 0x18, 0x76, 0xd5, 0xc0, 0x4b, 0x9f, 0x73, 0x27, 0xd0, 0x89, - 0x99, 0xa4, 0x87, 0x7e, 0x25, 0x35, 0x56, 0x67, 0x9e, 0x08, 0xe6, 0x9f, 0xc0, 0x88, 0xa7, 0x25, - 0x1f, 0x81, 0xe1, 0xd2, 0xad, 0xae, 0x0f, 0x71, 0x6d, 0x0d, 0xab, 0xed, 0xd2, 0xad, 0x2c, 0x0d, - 0xc9, 0x1d, 0x68, 0xa1, 0x52, 0x6c, 0xd5, 0x9e, 0x35, 0xac, 0xa6, 0x4b, 0xb7, 0x6f, 0xb7, 0xb1, - 0x62, 0x49, 0x79, 0x54, 0xfc, 0xb9, 0x74, 0xfb, 0x8a, 0x72, 0xf3, 0x73, 0x68, 0xaa, 0x45, 0xfe, - 0xa0, 0x81, 0xd1, 0xbe, 0x9a, 0xb1, 0xff, 0x35, 0x74, 0x52, 0xeb, 0x26, 0xbf, 0x80, 0x5b, 0xca, - 0xc3, 0x80, 0x86, 0x42, 0xee, 0x48, 0x66, 0x40, 0x22, 0x95, 0xaf, 0x69, 0x28, 0x70, 0x4a, 0x55, - 0xce, 0xfe, 0xab, 0x0a, 0x4d, 0x55, 0x2a, 0x92, 0xfb, 0x98, 0x76, 0xa9, 0xe3, 0xcd, 0x1c, 0x5b, - 0x65, 0x88, 0x71, 0xe7, 0xbb, 0xeb, 0x7b, 0x2d, 0xc9, 0xa6, 0xd3, 0x73, 0xcc, 0xb4, 0xd8, 0xb0, - 0x53, 0xc4, 0x55, 0xcd, 0x54, 0xb2, 0x04, 0xea, 0xc2, 0x71, 0x99, 0x76, 0x51, 0xb6, 0x71, 0xe5, - 0xde, 0xc6, 0x95, 0x5b, 0x52, 0x57, 0x5b, 0xe2, 0x6d, 0x5c, 0xdc, 0x92, 0x57, 0xb0, 0x97, 0x4a, - 0x18, 0x8e, 0xad, 0x0b, 0x99, 0x6e, 0xfa, 0x34, 0xa6, 0xe7, 0xe3, 0x43, 0x0c, 0xd7, 0xef, 0xae, - 0xef, 0x75, 0x7e, 0x1b, 0xa5, 0x90, 0xe9, 0xb9, 0xd5, 0x89, 0xf3, 0xc9, 0xd4, 0x26, 0x43, 0x90, - 0xe9, 0x65, 0xa6, 0x52, 0xac, 0x4a, 0x3b, 0x8a, 0x91, 0xbb, 0xd8, 0xaf, 0x73, 0x30, 0x56, 0xca, - 0x1f, 0x81, 0x81, 0x41, 0xa7, 0x20, 0x8a, 0xa0, 0xdb, 0xd8, 0x21, 0x95, 0x1f, 0x43, 0x2f, 0x29, - 0x71, 0x15, 0x44, 0xb1, 0x75, 0x37, 0xe9, 0x96, 0xc0, 0xbb, 0xd0, 0x8e, 0xd3, 0x9b, 0x21, 0x11, - 0x2d, 0xaa, 0xb3, 0xda, 0x97, 0xd0, 0xd2, 0x4b, 0x2c, 0xac, 0xd4, 0x7f, 0x0e, 0x0d, 0x3c, 0x97, - 0xe8, 0x42, 0x45, 0x25, 0x94, 0x3c, 0x0f, 0x26, 0x32, 0xf5, 0xba, 0x02, 0x9a, 0xcf, 0x60, 0x2f, - 0xa3, 0xc5, 0x4c, 0x22, 0x7c, 0x41, 0xd7, 0xfa, 0x40, 0x95, 0x10, 0x4f, 0x56, 0x4d, 0x26, 0x33, - 0x9f, 0x83, 0x11, 0x5f, 0x7a, 0x3c, 0x85, 0x60, 0x33, 0x9f, 0x45, 0xdf, 0x54, 0xbb, 0x56, 0x33, - 0xd8, 0xcc, 0xbf, 0x50, 0xf9, 0x2a, 0xf0, 0xbf, 0xd1, 0xdf, 0x0e, 0x35, 0x4b, 0x09, 0xe6, 0x67, - 0xd0, 0x8e, 0xaa, 0xfa, 0x72, 0xd3, 0x92, 0x28, 0x38, 0xfd, 0xb6, 0x01, 0xbd, 0x17, 0xe3, 0xb3, - 0xe9, 0x8b, 0x20, 0x58, 0x3b, 0x0b, 0x2a, 0x33, 0xfb, 0x08, 0xea, 0xb2, 0x76, 0x29, 0x78, 0x7c, - 0x18, 0x14, 0x15, 0xd1, 0xe4, 0x14, 0x1a, 0xb2, 0x84, 0x21, 0x45, 0x6f, 0x10, 0x83, 0xc2, 0x5a, - 0x1a, 0x27, 0x51, 0x45, 0xce, 0xcd, 0xa7, 0x88, 0x41, 0x51, 0x41, 0x4d, 0x3e, 0x07, 0x23, 0x29, - 0x3e, 0xca, 0x1e, 0x24, 0x06, 0xa5, 0xa5, 0x35, 0xda, 0x27, 0x79, 0xa8, 0xec, 0xf3, 0x7d, 0x50, - 0x5a, 0x83, 0x92, 0xa7, 0xd0, 0x8a, 0x32, 0x79, 0xf1, 0x93, 0xc1, 0xa0, 0xa4, 0xec, 0xc5, 0xed, - 0x51, 0x15, 0x4d, 0xd1, 0xbb, 0xc6, 0xa0, 0xb0, 0x36, 0x27, 0x8f, 0xa1, 0xa9, 0x89, 0xb8, 0xf0, - 0xe3, 0x7f, 0x50, 0x5c, 0xbc, 0xa2, 0x93, 0xc9, 0xb7, 0x75, 0xd9, 0xdb, 0xcb, 0xa0, 0xf4, 0x23, - 0x82, 0xbc, 0x00, 0x48, 0x7d, 0xc0, 0x96, 0x3e, 0xaa, 0x0c, 0xca, 0x3f, 0x0e, 0x08, 0x86, 0x63, - 0xfc, 0xc1, 0x57, 0xfc, 0xd8, 0x31, 0x28, 0xab, 0xd7, 0xe7, 0x4d, 0xf9, 0x20, 0xf6, 0xe9, 0xff, - 0x02, 0x00, 0x00, 0xff, 0xff, 0x46, 0xbe, 0x48, 0x9c, 0x8c, 0x13, 0x00, 0x00, + 0x98, 0xaf, 0x92, 0xe1, 0xfe, 0xe7, 0x44, 0x60, 0xfe, 0xb5, 0x92, 0xec, 0x63, 0x4c, 0xf1, 0xff, + 0xdd, 0xc2, 0xf0, 0x48, 0x1d, 0xcf, 0x66, 0x5b, 0x79, 0x4d, 0x6b, 0x96, 0x12, 0xa2, 0xf4, 0xd6, + 0x94, 0x9b, 0x93, 0x4d, 0x6f, 0x2d, 0xd9, 0xa7, 0x04, 0x9d, 0x1a, 0xfc, 0x73, 0x79, 0x7f, 0x76, + 0x2d, 0x25, 0xa4, 0x38, 0xcf, 0xc8, 0x70, 0xde, 0x11, 0x90, 0xeb, 0x37, 0xcb, 0xfc, 0x77, 0x05, + 0x59, 0x33, 0x73, 0x6b, 0x0a, 0xfd, 0x89, 0x42, 0xa3, 0x9a, 0x4a, 0x63, 0x1f, 0xe7, 0xe3, 0x8f, + 0x00, 0x96, 0x94, 0xcf, 0xbe, 0xa5, 0x9e, 0x60, 0xb6, 0x76, 0xd4, 0x58, 0x52, 0xfe, 0x7b, 0xd9, + 0x41, 0x6e, 0x43, 0x1b, 0xd5, 0x1b, 0xce, 0x6c, 0xe9, 0x71, 0xcd, 0x6a, 0x2d, 0x29, 0xff, 0x9a, + 0x33, 0x9b, 0x3c, 0x85, 0xba, 0xa0, 0x4b, 0xde, 0x6f, 0xc9, 0xb3, 0xe9, 0x9e, 0xa8, 0x42, 0xf6, + 0xe4, 0xd5, 0xbb, 0xd7, 0xd4, 0x09, 0xc7, 0x37, 0xf1, 0x64, 0xfe, 0x75, 0x75, 0xa7, 0x8b, 0x98, + 0x07, 0xbe, 0xeb, 0x08, 0xe6, 0x06, 0xe2, 0xd2, 0x92, 0x36, 0x64, 0x08, 0xb5, 0x73, 0xc6, 0x34, + 0xb3, 0xec, 0xc7, 0xa6, 0xd3, 0x47, 0x3f, 0x97, 0xc6, 0xea, 0x58, 0x11, 0x62, 0xfe, 0xb1, 0x9a, + 0x44, 0x47, 0x92, 0x5c, 0xfe, 0xbf, 0xf6, 0xe0, 0x2f, 0x15, 0xcc, 0xaf, 0x59, 0x2a, 0x23, 0x67, + 0x70, 0x10, 0x87, 0xfd, 0x6c, 0x13, 0xd8, 0x14, 0x6b, 0x9e, 0x1f, 0xbe, 0x27, 0xfb, 0xb1, 0xc1, + 0xd7, 0x0a, 0x4f, 0x7e, 0x0b, 0xb7, 0x16, 0x38, 0xaa, 0xc7, 0x37, 0x7c, 0x16, 0xd0, 0x90, 0xba, + 0xf1, 0x50, 0xd5, 0x0c, 0x75, 0x9f, 0x45, 0xa8, 0xd7, 0x08, 0xe2, 0xd6, 0x8d, 0x45, 0xa6, 0x43, + 0x8f, 0x67, 0xfe, 0x18, 0x4b, 0x85, 0x34, 0x7d, 0x16, 0x9d, 0x8a, 0xf9, 0xe7, 0x0a, 0xf4, 0x72, + 0x03, 0x92, 0x11, 0x80, 0x62, 0x1f, 0xee, 0x7c, 0x60, 0x3a, 0xad, 0x47, 0x7e, 0x48, 0x87, 0xdf, + 0x38, 0x1f, 0x98, 0x65, 0xcc, 0xa3, 0x26, 0xb9, 0x0b, 0x2d, 0xb1, 0x55, 0xe8, 0x6c, 0xe9, 0xf4, + 0x76, 0x2b, 0xa1, 0x4d, 0x21, 0xff, 0xc9, 0x43, 0xd8, 0x55, 0x03, 0x2f, 0x7d, 0xce, 0x9d, 0x40, + 0x27, 0x74, 0x92, 0x1e, 0xfa, 0xa5, 0xd4, 0x58, 0x9d, 0x79, 0x22, 0x98, 0x7f, 0x00, 0x23, 0x9e, + 0x96, 0x7c, 0x02, 0x86, 0x4b, 0xb7, 0xba, 0xae, 0xc4, 0xb5, 0x35, 0xac, 0xb6, 0x4b, 0xb7, 0xb2, + 0xa4, 0x24, 0xb7, 0xa0, 0x85, 0x4a, 0xb1, 0x55, 0x7b, 0xd6, 0xb0, 0x9a, 0x2e, 0xdd, 0xbe, 0xdd, + 0xc6, 0x8a, 0x25, 0xe5, 0x51, 0xd1, 0xe8, 0xd2, 0xed, 0x4b, 0xca, 0xcd, 0x2f, 0xa1, 0xa9, 0x16, + 0xf9, 0x51, 0x03, 0xa3, 0x7d, 0x35, 0x63, 0xff, 0x4b, 0xe8, 0xa4, 0xd6, 0x4d, 0x7e, 0x06, 0x37, + 0x94, 0x87, 0x01, 0x0d, 0x85, 0xdc, 0x91, 0xcc, 0x80, 0x44, 0x2a, 0x5f, 0xd3, 0x50, 0xe0, 0x94, + 0xaa, 0x0c, 0xfe, 0x47, 0x15, 0x9a, 0xaa, 0xc4, 0x24, 0x77, 0x31, 0x5d, 0x53, 0xc7, 0x9b, 0x39, + 0xb6, 0xca, 0x2c, 0xe3, 0xce, 0xf7, 0x57, 0x77, 0x5a, 0x92, 0x85, 0xa7, 0xcf, 0x31, 0x43, 0x63, + 0xc3, 0x4e, 0x11, 0x57, 0x35, 0x53, 0x01, 0x13, 0xa8, 0x0b, 0xc7, 0x65, 0xda, 0x45, 0xd9, 0xc6, + 0x95, 0x7b, 0x1b, 0x57, 0x6e, 0x49, 0x5d, 0x6d, 0x89, 0xb7, 0x71, 0x71, 0x4b, 0x5e, 0xc2, 0x5e, + 0x2a, 0xd1, 0x38, 0xb6, 0x2e, 0x80, 0xba, 0xe9, 0xd3, 0x98, 0x3e, 0x1f, 0x1f, 0x62, 0xb8, 0x7e, + 0x7f, 0x75, 0xa7, 0xf3, 0xeb, 0x28, 0xf5, 0x4c, 0x9f, 0x5b, 0x9d, 0x38, 0x0f, 0x4d, 0x6d, 0x32, + 0x04, 0x99, 0x96, 0x66, 0x2a, 0x35, 0xab, 0x74, 0xa5, 0x18, 0xb9, 0x8b, 0xfd, 0x3a, 0x77, 0x63, + 0x85, 0xfd, 0x09, 0x18, 0x18, 0x74, 0x0a, 0xa2, 0x08, 0xba, 0x8d, 0x1d, 0x52, 0xf9, 0x29, 0xf4, + 0x92, 0xdc, 0xa1, 0x20, 0x8a, 0xad, 0xbb, 0x49, 0xb7, 0x04, 0xde, 0x86, 0x76, 0x9c, 0x16, 0x0d, + 0x89, 0x68, 0x51, 0x9d, 0x0d, 0xbf, 0x82, 0x96, 0x5e, 0x62, 0x61, 0x85, 0xff, 0x53, 0x68, 0xe0, + 0xb9, 0x44, 0x17, 0x2a, 0x2a, 0xbd, 0xe4, 0x79, 0x30, 0x91, 0xa9, 0xf3, 0x15, 0xd0, 0x7c, 0x02, + 0x7b, 0x19, 0x2d, 0x66, 0x12, 0xe1, 0x0b, 0xba, 0xd6, 0x07, 0xaa, 0x84, 0x78, 0xb2, 0x6a, 0x32, + 0x99, 0xf9, 0x14, 0x8c, 0xf8, 0xd2, 0xe3, 0x29, 0x04, 0x9b, 0xf9, 0x2c, 0xfa, 0x16, 0xdb, 0xb5, + 0x9a, 0xc1, 0x66, 0xfe, 0x4a, 0xe5, 0xab, 0xc0, 0xff, 0x56, 0x7f, 0x73, 0xd4, 0x2c, 0x25, 0x98, + 0x5f, 0x40, 0x3b, 0xfa, 0x1a, 0x28, 0x37, 0x2d, 0x89, 0x82, 0xd3, 0xef, 0x1a, 0xd0, 0x7b, 0x36, + 0x3e, 0x9b, 0x3e, 0x0b, 0x82, 0xb5, 0xb3, 0xa0, 0xb2, 0x22, 0x18, 0x41, 0x5d, 0xd6, 0x3c, 0x05, + 0x8f, 0x16, 0x83, 0xa2, 0xe2, 0x9b, 0x9c, 0x42, 0x43, 0x96, 0x3e, 0xa4, 0xe8, 0xed, 0x62, 0x50, + 0x58, 0x83, 0xe3, 0x24, 0xaa, 0x38, 0xba, 0xfe, 0x84, 0x31, 0x28, 0x2a, 0xc4, 0xc9, 0x97, 0x60, + 0x24, 0x45, 0x4b, 0xd9, 0x43, 0xc6, 0xa0, 0xb4, 0x24, 0x47, 0xfb, 0x24, 0x0f, 0x95, 0x7d, 0xf6, + 0x0f, 0x4a, 0x6b, 0x57, 0xf2, 0x18, 0x5a, 0x51, 0x26, 0x2f, 0x7e, 0x6a, 0x18, 0x94, 0x94, 0xcb, + 0xb8, 0x3d, 0xaa, 0xa2, 0x29, 0x7a, 0x0f, 0x19, 0x14, 0xd6, 0xf4, 0xe4, 0x21, 0x34, 0x35, 0x11, + 0x17, 0x3e, 0x1a, 0x0c, 0x8a, 0x8b, 0x5e, 0x74, 0x32, 0x29, 0xc5, 0xca, 0xde, 0x6c, 0x06, 0xa5, + 0x1f, 0x1f, 0xe4, 0x19, 0x40, 0xea, 0xc3, 0xb7, 0xf4, 0x31, 0x66, 0x50, 0xfe, 0x51, 0x41, 0x30, + 0x1c, 0xe3, 0x0f, 0xc5, 0xe2, 0x47, 0x92, 0x41, 0x59, 0x9d, 0x3f, 0x6f, 0xca, 0x87, 0xb4, 0xcf, + 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0x38, 0xec, 0x4d, 0x38, 0xc4, 0x13, 0x00, 0x00, } diff --git a/types/types.proto b/types/types.proto index 363ceabb..804ebba5 100644 --- a/types/types.proto +++ b/types/types.proto @@ -128,6 +128,7 @@ message ResponseSetOption { } message ResponseInitChain { + repeated Validator validators = 1 [(gogoproto.nullable)=false]; } message ResponseQuery { From f80b3aee488d52ede0372c56bb34b9d58891ba66 Mon Sep 17 00:00:00 2001 From: Adrian Brink Date: Sun, 13 May 2018 19:50:15 -0400 Subject: [PATCH 03/40] Change AppStateBytes to GenesisBytes The consensus should pass the entire genesis file to the application. That way the application has access to the chain_id, the timestap, ... --- .gitignore | 3 +- example/kvstore/helpers.go | 4 +- tests/server/client.go | 4 +- types/types.pb.go | 230 ++++++++++++++++++------------------- types/types.proto | 2 +- 5 files changed, 122 insertions(+), 121 deletions(-) diff --git a/.gitignore b/.gitignore index 3cfc8e04..421292fa 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ vendor types/types.pb.go *.sw[op] abci-cli -coverage.txt \ No newline at end of file +coverage.txt +profile.out \ No newline at end of file diff --git a/example/kvstore/helpers.go b/example/kvstore/helpers.go index c71e371a..cbb8b6c5 100644 --- a/example/kvstore/helpers.go +++ b/example/kvstore/helpers.go @@ -30,7 +30,7 @@ func RandVals(cnt int) []types.Validator { // don't make any tx that modify the validator state func InitKVStore(app *PersistentKVStoreApplication) { app.InitChain(types.RequestInitChain{ - Validators: RandVals(1), - AppStateBytes: []byte("[]"), + Validators: RandVals(1), + GenesisBytes: []byte("[]"), }) } diff --git a/tests/server/client.go b/tests/server/client.go index e7bcbc93..2516b9fd 100644 --- a/tests/server/client.go +++ b/tests/server/client.go @@ -19,8 +19,8 @@ func InitChain(client abcicli.Client) error { vals[i] = types.Validator{pubkey, int64(power)} } _, err := client.InitChainSync(types.RequestInitChain{ - Validators: vals, - AppStateBytes: []byte("{}"), + Validators: vals, + GenesisBytes: []byte("{}"), }) if err != nil { fmt.Printf("Failed test: InitChain - %v\n", err) diff --git a/types/types.pb.go b/types/types.pb.go index b0e88d46..4c31bf1d 100644 --- a/types/types.pb.go +++ b/types/types.pb.go @@ -532,8 +532,8 @@ func (m *RequestSetOption) GetValue() string { } type RequestInitChain struct { - Validators []Validator `protobuf:"bytes,1,rep,name=validators" json:"validators"` - AppStateBytes []byte `protobuf:"bytes,2,opt,name=app_state_bytes,json=appStateBytes,proto3" json:"app_state_bytes,omitempty"` + Validators []Validator `protobuf:"bytes,1,rep,name=validators" json:"validators"` + GenesisBytes []byte `protobuf:"bytes,2,opt,name=genesis_bytes,json=genesisBytes,proto3" json:"genesis_bytes,omitempty"` } func (m *RequestInitChain) Reset() { *m = RequestInitChain{} } @@ -548,9 +548,9 @@ func (m *RequestInitChain) GetValidators() []Validator { return nil } -func (m *RequestInitChain) GetAppStateBytes() []byte { +func (m *RequestInitChain) GetGenesisBytes() []byte { if m != nil { - return m.AppStateBytes + return m.GenesisBytes } return nil } @@ -2248,115 +2248,115 @@ var _ABCIApplication_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("types/types.proto", fileDescriptorTypes) } var fileDescriptorTypes = []byte{ - // 1758 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0xcd, 0x8e, 0x1b, 0xb9, - 0x11, 0x1e, 0xfd, 0xab, 0x4b, 0x33, 0xd2, 0x0c, 0x67, 0x6c, 0xcb, 0x5a, 0x04, 0x1e, 0x34, 0x02, - 0xaf, 0x1c, 0x7b, 0x47, 0xc9, 0x6c, 0x6c, 0xd8, 0xde, 0x60, 0x11, 0x6b, 0xec, 0x58, 0x82, 0x93, - 0xac, 0xd3, 0xf6, 0x3a, 0x40, 0x2e, 0x02, 0xa5, 0xe6, 0x48, 0x0d, 0xab, 0x7f, 0xb6, 0x49, 0xcd, - 0x6a, 0x7c, 0xcb, 0x7d, 0xef, 0x39, 0xe7, 0x94, 0x27, 0xc8, 0x2b, 0x04, 0x09, 0xf2, 0x0e, 0x73, - 0xd8, 0x63, 0x5e, 0x22, 0x41, 0x91, 0xec, 0xdf, 0xe9, 0x5e, 0x18, 0xc9, 0x31, 0x17, 0x89, 0xc5, - 0xfa, 0x8a, 0x64, 0x91, 0xc5, 0xaf, 0xaa, 0x09, 0x07, 0xe2, 0x32, 0x60, 0x7c, 0x24, 0x7f, 0x4f, - 0x82, 0xd0, 0x17, 0x3e, 0x69, 0x48, 0x61, 0xf0, 0xd9, 0xd2, 0x11, 0xab, 0xcd, 0xfc, 0x64, 0xe1, - 0xbb, 0xa3, 0xa5, 0xbf, 0xf4, 0x47, 0x52, 0x3b, 0xdf, 0x9c, 0x4b, 0x49, 0x0a, 0xb2, 0xa5, 0xac, - 0x06, 0xa3, 0x14, 0x5c, 0x30, 0xcf, 0x66, 0xa1, 0xeb, 0x78, 0x62, 0x24, 0xdc, 0xb5, 0x33, 0xe7, - 0xa3, 0x85, 0xef, 0xba, 0xbe, 0x97, 0x9e, 0xc6, 0xfc, 0x5b, 0x1d, 0x5a, 0x16, 0xfb, 0x66, 0xc3, - 0xb8, 0x20, 0x43, 0xa8, 0xb3, 0xc5, 0xca, 0xef, 0x57, 0x8f, 0x2b, 0xc3, 0xce, 0x29, 0x39, 0x51, - 0x38, 0xad, 0x7d, 0xb1, 0x58, 0xf9, 0x93, 0x1d, 0x4b, 0x22, 0xc8, 0x7d, 0x68, 0x9c, 0xaf, 0x37, - 0x7c, 0xd5, 0xaf, 0x49, 0xe8, 0x61, 0x16, 0xfa, 0x2b, 0x54, 0x4d, 0x76, 0x2c, 0x85, 0xc1, 0x61, - 0x1d, 0xef, 0xdc, 0xef, 0xd7, 0x8b, 0x86, 0x9d, 0x7a, 0xe7, 0x72, 0x58, 0x44, 0x90, 0xc7, 0x00, - 0x9c, 0x89, 0x99, 0x1f, 0x08, 0xc7, 0xf7, 0xfa, 0x0d, 0x89, 0xbf, 0x95, 0xc5, 0xbf, 0x61, 0xe2, - 0x2b, 0xa9, 0x9e, 0xec, 0x58, 0x06, 0x8f, 0x04, 0xb4, 0x74, 0x3c, 0x47, 0xcc, 0x16, 0x2b, 0xea, - 0x78, 0xfd, 0x66, 0x91, 0xe5, 0xd4, 0x73, 0xc4, 0x19, 0xaa, 0xd1, 0xd2, 0x89, 0x04, 0x74, 0xe5, - 0x9b, 0x0d, 0x0b, 0x2f, 0xfb, 0xad, 0x22, 0x57, 0x7e, 0x87, 0x2a, 0x74, 0x45, 0x62, 0xc8, 0x17, - 0xd0, 0x99, 0xb3, 0xa5, 0xe3, 0xcd, 0xe6, 0x6b, 0x7f, 0xf1, 0xbe, 0xdf, 0x96, 0x26, 0xfd, 0xac, - 0xc9, 0x18, 0x01, 0x63, 0xd4, 0x4f, 0x76, 0x2c, 0x98, 0xc7, 0x12, 0x39, 0x85, 0xf6, 0x62, 0xc5, - 0x16, 0xef, 0x67, 0x62, 0xdb, 0x37, 0xa4, 0xe5, 0x8d, 0xac, 0xe5, 0x19, 0x6a, 0xdf, 0x6e, 0x27, - 0x3b, 0x56, 0x6b, 0xa1, 0x9a, 0xe8, 0x97, 0xcd, 0xd6, 0xce, 0x05, 0x0b, 0xd1, 0xea, 0xb0, 0xc8, - 0xaf, 0xe7, 0x4a, 0x2f, 0xed, 0x0c, 0x3b, 0x12, 0xc8, 0x43, 0x30, 0x98, 0x67, 0xeb, 0x85, 0x76, - 0xa4, 0xe1, 0xcd, 0xdc, 0x89, 0x7a, 0x76, 0xb4, 0xcc, 0x36, 0xd3, 0x6d, 0x72, 0x02, 0x4d, 0x8c, - 0x12, 0x47, 0xf4, 0x77, 0xa5, 0xcd, 0x51, 0x6e, 0x89, 0x52, 0x37, 0xd9, 0xb1, 0x34, 0x6a, 0xdc, - 0x82, 0xc6, 0x05, 0x5d, 0x6f, 0x98, 0xf9, 0x29, 0x74, 0x52, 0x91, 0x42, 0xfa, 0xd0, 0x72, 0x19, - 0xe7, 0x74, 0xc9, 0xfa, 0x95, 0xe3, 0xca, 0xd0, 0xb0, 0x22, 0xd1, 0xec, 0xc2, 0x6e, 0x3a, 0x4e, - 0x52, 0x86, 0x18, 0x0b, 0x68, 0x78, 0xc1, 0x42, 0x8e, 0x01, 0xa0, 0x0d, 0xb5, 0x68, 0x3e, 0x85, - 0xfd, 0x7c, 0x10, 0x90, 0x7d, 0xa8, 0xbd, 0x67, 0x97, 0x1a, 0x89, 0x4d, 0x72, 0xa4, 0x17, 0x24, - 0xa3, 0xd8, 0xb0, 0xf4, 0xea, 0xc2, 0xd8, 0x36, 0x0e, 0x03, 0xf2, 0x08, 0xe0, 0x82, 0xae, 0x1d, - 0x9b, 0x0a, 0x3f, 0xe4, 0xfd, 0xca, 0x71, 0x6d, 0xd8, 0x39, 0xdd, 0xd7, 0xee, 0xbe, 0x8b, 0x14, - 0xe3, 0xfa, 0xdf, 0xaf, 0xee, 0xec, 0x58, 0x29, 0x24, 0xb9, 0x0b, 0x3d, 0x1a, 0x04, 0x33, 0x2e, - 0xa8, 0x60, 0xb3, 0xf9, 0xa5, 0x60, 0x5c, 0xce, 0xb5, 0x6b, 0xed, 0xd1, 0x20, 0x78, 0x83, 0xbd, - 0x63, 0xec, 0x34, 0xed, 0xd8, 0x51, 0x19, 0x45, 0x84, 0x40, 0xdd, 0xa6, 0x82, 0xca, 0xc5, 0xee, - 0x5a, 0xb2, 0x8d, 0x7d, 0x01, 0x15, 0x2b, 0xbd, 0x58, 0xd9, 0x26, 0x37, 0xa1, 0xb9, 0x62, 0xce, - 0x72, 0x25, 0xe4, 0xed, 0xaa, 0x59, 0x5a, 0x42, 0xcf, 0x82, 0xd0, 0xbf, 0x60, 0xf2, 0x22, 0xb5, - 0x2d, 0x25, 0x98, 0xff, 0xac, 0xc0, 0xc1, 0xb5, 0xc8, 0xc3, 0x71, 0x57, 0x94, 0xaf, 0xa2, 0xb9, - 0xb0, 0x4d, 0xee, 0xe3, 0xb8, 0xd4, 0x66, 0xa1, 0xbe, 0xe0, 0x7b, 0xda, 0xd7, 0x89, 0xec, 0xd4, - 0x8e, 0x6a, 0x08, 0xb9, 0x0f, 0x07, 0x74, 0xce, 0x99, 0x27, 0x66, 0xa9, 0x3d, 0xaa, 0x1d, 0xd7, - 0x86, 0x0d, 0x6b, 0x5f, 0x29, 0xde, 0x25, 0x3b, 0x32, 0x81, 0xa3, 0xf9, 0xe5, 0x07, 0xea, 0x09, - 0xc7, 0x63, 0x69, 0x7c, 0x5d, 0xee, 0x69, 0x4f, 0xcf, 0xf3, 0xe2, 0xc2, 0xb1, 0x99, 0xb7, 0x60, - 0x7a, 0xa6, 0xc3, 0xd8, 0x24, 0x19, 0xc9, 0x3c, 0x86, 0x6e, 0xf6, 0x32, 0x90, 0x2e, 0x54, 0xc5, - 0x56, 0xfb, 0x51, 0x15, 0x5b, 0xd3, 0x8c, 0x4f, 0x32, 0x0e, 0xfc, 0x6b, 0x98, 0x7b, 0xd0, 0xcb, - 0xc5, 0x78, 0x6a, 0x53, 0x2b, 0xe9, 0x4d, 0x35, 0x7b, 0xb0, 0x97, 0x09, 0x6d, 0xf3, 0xbb, 0x06, - 0xb4, 0x2d, 0xc6, 0x03, 0xdf, 0xe3, 0x8c, 0x3c, 0x06, 0x83, 0x6d, 0x17, 0x4c, 0xf1, 0x51, 0x25, - 0x77, 0xdb, 0x15, 0xe6, 0x45, 0xa4, 0xc7, 0xeb, 0x17, 0x83, 0xc9, 0xbd, 0x0c, 0x97, 0x1e, 0xe6, - 0x8d, 0xd2, 0x64, 0xfa, 0x20, 0x4b, 0xa6, 0x47, 0x39, 0x6c, 0x8e, 0x4d, 0xef, 0x65, 0xd8, 0x34, - 0x3f, 0x70, 0x86, 0x4e, 0x9f, 0x14, 0xd0, 0x69, 0x7e, 0xf9, 0x25, 0x7c, 0xfa, 0xa4, 0x80, 0x4f, - 0xfb, 0xd7, 0xe6, 0x2a, 0x24, 0xd4, 0x07, 0x59, 0x42, 0xcd, 0xbb, 0x93, 0x63, 0xd4, 0x5f, 0x14, - 0x31, 0xea, 0xed, 0x9c, 0x4d, 0x29, 0xa5, 0x7e, 0x7e, 0x8d, 0x52, 0x6f, 0xe6, 0x4c, 0x0b, 0x38, - 0xf5, 0x49, 0x86, 0x53, 0xa1, 0xd0, 0xb7, 0x12, 0x52, 0x7d, 0x74, 0x9d, 0x54, 0x6f, 0xe5, 0x8f, - 0xb6, 0x88, 0x55, 0x47, 0x39, 0x56, 0xbd, 0x91, 0x5f, 0x65, 0x29, 0xad, 0xde, 0xc3, 0xdb, 0x9d, - 0x8b, 0x34, 0x64, 0x02, 0x16, 0x86, 0x7e, 0xa8, 0x79, 0x4f, 0x09, 0xe6, 0x10, 0xf9, 0x26, 0x89, - 0xaf, 0x1f, 0xa0, 0x60, 0x19, 0xf4, 0xa9, 0xe8, 0x32, 0xff, 0x54, 0x49, 0x6c, 0x25, 0x0b, 0xa7, - 0xb9, 0xca, 0xd0, 0x5c, 0x95, 0x62, 0xe6, 0x6a, 0x86, 0x99, 0xc9, 0x4f, 0xe0, 0x60, 0x4d, 0xb9, - 0x50, 0xfb, 0x32, 0xcb, 0x90, 0x57, 0x0f, 0x15, 0x6a, 0x43, 0x14, 0x8b, 0x7d, 0x06, 0x87, 0x29, - 0x2c, 0x12, 0xa9, 0x24, 0xaa, 0xba, 0xbc, 0xbc, 0xfb, 0x31, 0xfa, 0x59, 0x10, 0x4c, 0x28, 0x5f, - 0x99, 0xbf, 0x49, 0xfc, 0x4f, 0x58, 0x9f, 0x40, 0x7d, 0xe1, 0xdb, 0xca, 0xad, 0x3d, 0x4b, 0xb6, - 0x31, 0x13, 0xac, 0xfd, 0xa5, 0x9c, 0xd5, 0xb0, 0xb0, 0x89, 0xa8, 0xf8, 0xa6, 0x18, 0xea, 0x4a, - 0x98, 0xaf, 0x92, 0xe1, 0xfe, 0xe7, 0x44, 0x60, 0xfe, 0xb5, 0x92, 0xec, 0x63, 0x4c, 0xf1, 0xff, - 0xdd, 0xc2, 0xf0, 0x48, 0x1d, 0xcf, 0x66, 0x5b, 0x79, 0x4d, 0x6b, 0x96, 0x12, 0xa2, 0xf4, 0xd6, - 0x94, 0x9b, 0x93, 0x4d, 0x6f, 0x2d, 0xd9, 0xa7, 0x04, 0x9d, 0x1a, 0xfc, 0x73, 0x79, 0x7f, 0x76, - 0x2d, 0x25, 0xa4, 0x38, 0xcf, 0xc8, 0x70, 0xde, 0x11, 0x90, 0xeb, 0x37, 0xcb, 0xfc, 0x77, 0x05, - 0x59, 0x33, 0x73, 0x6b, 0x0a, 0xfd, 0x89, 0x42, 0xa3, 0x9a, 0x4a, 0x63, 0x1f, 0xe7, 0xe3, 0x8f, - 0x00, 0x96, 0x94, 0xcf, 0xbe, 0xa5, 0x9e, 0x60, 0xb6, 0x76, 0xd4, 0x58, 0x52, 0xfe, 0x7b, 0xd9, - 0x41, 0x6e, 0x43, 0x1b, 0xd5, 0x1b, 0xce, 0x6c, 0xe9, 0x71, 0xcd, 0x6a, 0x2d, 0x29, 0xff, 0x9a, - 0x33, 0x9b, 0x3c, 0x85, 0xba, 0xa0, 0x4b, 0xde, 0x6f, 0xc9, 0xb3, 0xe9, 0x9e, 0xa8, 0x42, 0xf6, - 0xe4, 0xd5, 0xbb, 0xd7, 0xd4, 0x09, 0xc7, 0x37, 0xf1, 0x64, 0xfe, 0x75, 0x75, 0xa7, 0x8b, 0x98, - 0x07, 0xbe, 0xeb, 0x08, 0xe6, 0x06, 0xe2, 0xd2, 0x92, 0x36, 0x64, 0x08, 0xb5, 0x73, 0xc6, 0x34, - 0xb3, 0xec, 0xc7, 0xa6, 0xd3, 0x47, 0x3f, 0x97, 0xc6, 0xea, 0x58, 0x11, 0x62, 0xfe, 0xb1, 0x9a, - 0x44, 0x47, 0x92, 0x5c, 0xfe, 0xbf, 0xf6, 0xe0, 0x2f, 0x15, 0xcc, 0xaf, 0x59, 0x2a, 0x23, 0x67, - 0x70, 0x10, 0x87, 0xfd, 0x6c, 0x13, 0xd8, 0x14, 0x6b, 0x9e, 0x1f, 0xbe, 0x27, 0xfb, 0xb1, 0xc1, - 0xd7, 0x0a, 0x4f, 0x7e, 0x0b, 0xb7, 0x16, 0x38, 0xaa, 0xc7, 0x37, 0x7c, 0x16, 0xd0, 0x90, 0xba, - 0xf1, 0x50, 0xd5, 0x0c, 0x75, 0x9f, 0x45, 0xa8, 0xd7, 0x08, 0xe2, 0xd6, 0x8d, 0x45, 0xa6, 0x43, - 0x8f, 0x67, 0xfe, 0x18, 0x4b, 0x85, 0x34, 0x7d, 0x16, 0x9d, 0x8a, 0xf9, 0xe7, 0x0a, 0xf4, 0x72, - 0x03, 0x92, 0x11, 0x80, 0x62, 0x1f, 0xee, 0x7c, 0x60, 0x3a, 0xad, 0x47, 0x7e, 0x48, 0x87, 0xdf, - 0x38, 0x1f, 0x98, 0x65, 0xcc, 0xa3, 0x26, 0xb9, 0x0b, 0x2d, 0xb1, 0x55, 0xe8, 0x6c, 0xe9, 0xf4, - 0x76, 0x2b, 0xa1, 0x4d, 0x21, 0xff, 0xc9, 0x43, 0xd8, 0x55, 0x03, 0x2f, 0x7d, 0xce, 0x9d, 0x40, - 0x27, 0x74, 0x92, 0x1e, 0xfa, 0xa5, 0xd4, 0x58, 0x9d, 0x79, 0x22, 0x98, 0x7f, 0x00, 0x23, 0x9e, - 0x96, 0x7c, 0x02, 0x86, 0x4b, 0xb7, 0xba, 0xae, 0xc4, 0xb5, 0x35, 0xac, 0xb6, 0x4b, 0xb7, 0xb2, - 0xa4, 0x24, 0xb7, 0xa0, 0x85, 0x4a, 0xb1, 0x55, 0x7b, 0xd6, 0xb0, 0x9a, 0x2e, 0xdd, 0xbe, 0xdd, - 0xc6, 0x8a, 0x25, 0xe5, 0x51, 0xd1, 0xe8, 0xd2, 0xed, 0x4b, 0xca, 0xcd, 0x2f, 0xa1, 0xa9, 0x16, - 0xf9, 0x51, 0x03, 0xa3, 0x7d, 0x35, 0x63, 0xff, 0x4b, 0xe8, 0xa4, 0xd6, 0x4d, 0x7e, 0x06, 0x37, - 0x94, 0x87, 0x01, 0x0d, 0x85, 0xdc, 0x91, 0xcc, 0x80, 0x44, 0x2a, 0x5f, 0xd3, 0x50, 0xe0, 0x94, - 0xaa, 0x0c, 0xfe, 0x47, 0x15, 0x9a, 0xaa, 0xc4, 0x24, 0x77, 0x31, 0x5d, 0x53, 0xc7, 0x9b, 0x39, - 0xb6, 0xca, 0x2c, 0xe3, 0xce, 0xf7, 0x57, 0x77, 0x5a, 0x92, 0x85, 0xa7, 0xcf, 0x31, 0x43, 0x63, - 0xc3, 0x4e, 0x11, 0x57, 0x35, 0x53, 0x01, 0x13, 0xa8, 0x0b, 0xc7, 0x65, 0xda, 0x45, 0xd9, 0xc6, - 0x95, 0x7b, 0x1b, 0x57, 0x6e, 0x49, 0x5d, 0x6d, 0x89, 0xb7, 0x71, 0x71, 0x4b, 0x5e, 0xc2, 0x5e, - 0x2a, 0xd1, 0x38, 0xb6, 0x2e, 0x80, 0xba, 0xe9, 0xd3, 0x98, 0x3e, 0x1f, 0x1f, 0x62, 0xb8, 0x7e, - 0x7f, 0x75, 0xa7, 0xf3, 0xeb, 0x28, 0xf5, 0x4c, 0x9f, 0x5b, 0x9d, 0x38, 0x0f, 0x4d, 0x6d, 0x32, - 0x04, 0x99, 0x96, 0x66, 0x2a, 0x35, 0xab, 0x74, 0xa5, 0x18, 0xb9, 0x8b, 0xfd, 0x3a, 0x77, 0x63, - 0x85, 0xfd, 0x09, 0x18, 0x18, 0x74, 0x0a, 0xa2, 0x08, 0xba, 0x8d, 0x1d, 0x52, 0xf9, 0x29, 0xf4, - 0x92, 0xdc, 0xa1, 0x20, 0x8a, 0xad, 0xbb, 0x49, 0xb7, 0x04, 0xde, 0x86, 0x76, 0x9c, 0x16, 0x0d, - 0x89, 0x68, 0x51, 0x9d, 0x0d, 0xbf, 0x82, 0x96, 0x5e, 0x62, 0x61, 0x85, 0xff, 0x53, 0x68, 0xe0, - 0xb9, 0x44, 0x17, 0x2a, 0x2a, 0xbd, 0xe4, 0x79, 0x30, 0x91, 0xa9, 0xf3, 0x15, 0xd0, 0x7c, 0x02, - 0x7b, 0x19, 0x2d, 0x66, 0x12, 0xe1, 0x0b, 0xba, 0xd6, 0x07, 0xaa, 0x84, 0x78, 0xb2, 0x6a, 0x32, - 0x99, 0xf9, 0x14, 0x8c, 0xf8, 0xd2, 0xe3, 0x29, 0x04, 0x9b, 0xf9, 0x2c, 0xfa, 0x16, 0xdb, 0xb5, - 0x9a, 0xc1, 0x66, 0xfe, 0x4a, 0xe5, 0xab, 0xc0, 0xff, 0x56, 0x7f, 0x73, 0xd4, 0x2c, 0x25, 0x98, - 0x5f, 0x40, 0x3b, 0xfa, 0x1a, 0x28, 0x37, 0x2d, 0x89, 0x82, 0xd3, 0xef, 0x1a, 0xd0, 0x7b, 0x36, - 0x3e, 0x9b, 0x3e, 0x0b, 0x82, 0xb5, 0xb3, 0xa0, 0xb2, 0x22, 0x18, 0x41, 0x5d, 0xd6, 0x3c, 0x05, - 0x8f, 0x16, 0x83, 0xa2, 0xe2, 0x9b, 0x9c, 0x42, 0x43, 0x96, 0x3e, 0xa4, 0xe8, 0xed, 0x62, 0x50, - 0x58, 0x83, 0xe3, 0x24, 0xaa, 0x38, 0xba, 0xfe, 0x84, 0x31, 0x28, 0x2a, 0xc4, 0xc9, 0x97, 0x60, - 0x24, 0x45, 0x4b, 0xd9, 0x43, 0xc6, 0xa0, 0xb4, 0x24, 0x47, 0xfb, 0x24, 0x0f, 0x95, 0x7d, 0xf6, - 0x0f, 0x4a, 0x6b, 0x57, 0xf2, 0x18, 0x5a, 0x51, 0x26, 0x2f, 0x7e, 0x6a, 0x18, 0x94, 0x94, 0xcb, - 0xb8, 0x3d, 0xaa, 0xa2, 0x29, 0x7a, 0x0f, 0x19, 0x14, 0xd6, 0xf4, 0xe4, 0x21, 0x34, 0x35, 0x11, - 0x17, 0x3e, 0x1a, 0x0c, 0x8a, 0x8b, 0x5e, 0x74, 0x32, 0x29, 0xc5, 0xca, 0xde, 0x6c, 0x06, 0xa5, - 0x1f, 0x1f, 0xe4, 0x19, 0x40, 0xea, 0xc3, 0xb7, 0xf4, 0x31, 0x66, 0x50, 0xfe, 0x51, 0x41, 0x30, - 0x1c, 0xe3, 0x0f, 0xc5, 0xe2, 0x47, 0x92, 0x41, 0x59, 0x9d, 0x3f, 0x6f, 0xca, 0x87, 0xb4, 0xcf, - 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0x38, 0xec, 0x4d, 0x38, 0xc4, 0x13, 0x00, 0x00, + // 1756 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0xcd, 0x72, 0x1b, 0xc7, + 0x11, 0x26, 0xfe, 0xb1, 0x0d, 0x10, 0x24, 0x87, 0x94, 0x04, 0xc1, 0x95, 0x22, 0x6b, 0x93, 0xb2, + 0xc1, 0x48, 0x26, 0x12, 0x3a, 0x52, 0x89, 0x72, 0xca, 0x15, 0x82, 0x54, 0x04, 0x94, 0x92, 0x58, + 0x59, 0xcb, 0x4a, 0x55, 0x2e, 0xa8, 0x01, 0x76, 0x08, 0x6c, 0x09, 0xfb, 0x63, 0xcc, 0x80, 0x06, + 0x75, 0xcb, 0xdd, 0xf7, 0x9c, 0x73, 0xca, 0x13, 0xe4, 0x15, 0x52, 0x49, 0xe5, 0x1d, 0x78, 0xf0, + 0x31, 0x2f, 0x91, 0x54, 0xcf, 0xcc, 0xfe, 0x72, 0xd7, 0xe5, 0x4a, 0x8e, 0xbe, 0x00, 0xd3, 0xd3, + 0x5f, 0xcf, 0x4c, 0xcf, 0xf4, 0x7c, 0xdd, 0x3b, 0xb0, 0x27, 0x6e, 0x02, 0xc6, 0x07, 0xf2, 0xf7, + 0x24, 0x58, 0xf9, 0xc2, 0x27, 0x35, 0x29, 0xf4, 0x3e, 0x9e, 0x3b, 0x62, 0xb1, 0x9e, 0x9e, 0xcc, + 0x7c, 0x77, 0x30, 0xf7, 0xe7, 0xfe, 0x40, 0x6a, 0xa7, 0xeb, 0x2b, 0x29, 0x49, 0x41, 0xb6, 0x94, + 0x55, 0x6f, 0x90, 0x80, 0x0b, 0xe6, 0xd9, 0x6c, 0xe5, 0x3a, 0x9e, 0x18, 0x08, 0x77, 0xe9, 0x4c, + 0xf9, 0x60, 0xe6, 0xbb, 0xae, 0xef, 0x25, 0xa7, 0x31, 0xff, 0x5e, 0x85, 0x86, 0xc5, 0xbe, 0x5a, + 0x33, 0x2e, 0x48, 0x1f, 0xaa, 0x6c, 0xb6, 0xf0, 0xbb, 0xe5, 0xa3, 0x52, 0xbf, 0x75, 0x4a, 0x4e, + 0x14, 0x4e, 0x6b, 0x5f, 0xcc, 0x16, 0xfe, 0x68, 0xcb, 0x92, 0x08, 0xf2, 0x08, 0x6a, 0x57, 0xcb, + 0x35, 0x5f, 0x74, 0x2b, 0x12, 0xba, 0x9f, 0x86, 0xfe, 0x1a, 0x55, 0xa3, 0x2d, 0x4b, 0x61, 0x70, + 0x58, 0xc7, 0xbb, 0xf2, 0xbb, 0xd5, 0xbc, 0x61, 0xc7, 0xde, 0x95, 0x1c, 0x16, 0x11, 0xe4, 0x19, + 0x00, 0x67, 0x62, 0xe2, 0x07, 0xc2, 0xf1, 0xbd, 0x6e, 0x4d, 0xe2, 0x1f, 0xa4, 0xf1, 0x5f, 0x30, + 0xf1, 0xb9, 0x54, 0x8f, 0xb6, 0x2c, 0x83, 0x87, 0x02, 0x5a, 0x3a, 0x9e, 0x23, 0x26, 0xb3, 0x05, + 0x75, 0xbc, 0x6e, 0x3d, 0xcf, 0x72, 0xec, 0x39, 0xe2, 0x02, 0xd5, 0x68, 0xe9, 0x84, 0x02, 0xba, + 0xf2, 0xd5, 0x9a, 0xad, 0x6e, 0xba, 0x8d, 0x3c, 0x57, 0x7e, 0x8f, 0x2a, 0x74, 0x45, 0x62, 0xc8, + 0xa7, 0xd0, 0x9a, 0xb2, 0xb9, 0xe3, 0x4d, 0xa6, 0x4b, 0x7f, 0xf6, 0xae, 0xdb, 0x94, 0x26, 0xdd, + 0xb4, 0xc9, 0x10, 0x01, 0x43, 0xd4, 0x8f, 0xb6, 0x2c, 0x98, 0x46, 0x12, 0x39, 0x85, 0xe6, 0x6c, + 0xc1, 0x66, 0xef, 0x26, 0x62, 0xd3, 0x35, 0xa4, 0xe5, 0xbd, 0xb4, 0xe5, 0x05, 0x6a, 0xdf, 0x6c, + 0x46, 0x5b, 0x56, 0x63, 0xa6, 0x9a, 0xe8, 0x97, 0xcd, 0x96, 0xce, 0x35, 0x5b, 0xa1, 0xd5, 0x7e, + 0x9e, 0x5f, 0x97, 0x4a, 0x2f, 0xed, 0x0c, 0x3b, 0x14, 0xc8, 0x13, 0x30, 0x98, 0x67, 0xeb, 0x85, + 0xb6, 0xa4, 0xe1, 0xfd, 0xcc, 0x89, 0x7a, 0x76, 0xb8, 0xcc, 0x26, 0xd3, 0x6d, 0x72, 0x02, 0x75, + 0x8c, 0x12, 0x47, 0x74, 0xdb, 0xd2, 0xe6, 0x20, 0xb3, 0x44, 0xa9, 0x1b, 0x6d, 0x59, 0x1a, 0x35, + 0x6c, 0x40, 0xed, 0x9a, 0x2e, 0xd7, 0xcc, 0xfc, 0x08, 0x5a, 0x89, 0x48, 0x21, 0x5d, 0x68, 0xb8, + 0x8c, 0x73, 0x3a, 0x67, 0xdd, 0xd2, 0x51, 0xa9, 0x6f, 0x58, 0xa1, 0x68, 0x76, 0xa0, 0x9d, 0x8c, + 0x93, 0x84, 0x21, 0xc6, 0x02, 0x1a, 0x5e, 0xb3, 0x15, 0xc7, 0x00, 0xd0, 0x86, 0x5a, 0x34, 0x9f, + 0xc3, 0x6e, 0x36, 0x08, 0xc8, 0x2e, 0x54, 0xde, 0xb1, 0x1b, 0x8d, 0xc4, 0x26, 0x39, 0xd0, 0x0b, + 0x92, 0x51, 0x6c, 0x58, 0x7a, 0x75, 0x7e, 0x64, 0x1b, 0x85, 0x01, 0x79, 0x0a, 0x70, 0x4d, 0x97, + 0x8e, 0x4d, 0x85, 0xbf, 0xe2, 0xdd, 0xd2, 0x51, 0xa5, 0xdf, 0x3a, 0xdd, 0xd5, 0xee, 0xbe, 0x0d, + 0x15, 0xc3, 0xea, 0x3f, 0x6e, 0x0f, 0xb7, 0xac, 0x04, 0x92, 0xfc, 0x18, 0xb6, 0xe7, 0xcc, 0x63, + 0xdc, 0xe1, 0x93, 0xe9, 0x8d, 0x60, 0x5c, 0xce, 0xd4, 0xb6, 0xda, 0xba, 0x73, 0x88, 0x7d, 0xa6, + 0x1d, 0x79, 0x29, 0x43, 0x88, 0x10, 0xa8, 0xda, 0x54, 0x50, 0xb9, 0xd2, 0xb6, 0x25, 0xdb, 0xd8, + 0x17, 0x50, 0xb1, 0xd0, 0x2b, 0x95, 0x6d, 0x72, 0x1f, 0xea, 0x0b, 0xe6, 0xcc, 0x17, 0x42, 0x5e, + 0xad, 0x8a, 0xa5, 0x25, 0x74, 0x2b, 0x58, 0xf9, 0xd7, 0x4c, 0xde, 0xa2, 0xa6, 0xa5, 0x04, 0xf3, + 0x5f, 0x25, 0xd8, 0xbb, 0x13, 0x76, 0x38, 0xee, 0x82, 0xf2, 0x45, 0x38, 0x17, 0xb6, 0xc9, 0x23, + 0x1c, 0x97, 0xda, 0x6c, 0xa5, 0x6f, 0xf7, 0xb6, 0x76, 0x74, 0x24, 0x3b, 0xb5, 0x97, 0x1a, 0x42, + 0x1e, 0xc1, 0x1e, 0x9d, 0x72, 0xe6, 0x89, 0x49, 0x62, 0x83, 0x2a, 0x47, 0x95, 0x7e, 0xcd, 0xda, + 0x55, 0x8a, 0xb7, 0xf1, 0x76, 0x8c, 0xe0, 0x60, 0x7a, 0xf3, 0x9e, 0x7a, 0xc2, 0xf1, 0x58, 0x12, + 0x5f, 0x95, 0x1b, 0xba, 0xa3, 0xe7, 0x79, 0x71, 0xed, 0xd8, 0xcc, 0x9b, 0x31, 0x3d, 0xd3, 0x7e, + 0x64, 0x12, 0x8f, 0x64, 0x1e, 0x41, 0x27, 0x7d, 0x13, 0x48, 0x07, 0xca, 0x62, 0xa3, 0xfd, 0x28, + 0x8b, 0x8d, 0x69, 0x46, 0xc7, 0x18, 0x45, 0xfd, 0x1d, 0xcc, 0x31, 0xec, 0x64, 0x02, 0x3c, 0xb1, + 0xa9, 0xa5, 0xe4, 0xa6, 0x9a, 0x3b, 0xb0, 0x9d, 0x8a, 0x6b, 0xf3, 0x9b, 0x1a, 0x34, 0x2d, 0xc6, + 0x03, 0xdf, 0xe3, 0x8c, 0x3c, 0x03, 0x83, 0x6d, 0x66, 0x4c, 0x91, 0x51, 0x29, 0x73, 0xd5, 0x15, + 0xe6, 0x45, 0xa8, 0xc7, 0xbb, 0x17, 0x81, 0xc9, 0x71, 0x8a, 0x48, 0xf7, 0xb3, 0x46, 0x49, 0x26, + 0x7d, 0x9c, 0x66, 0xd2, 0x83, 0x0c, 0x36, 0x43, 0xa5, 0xc7, 0x29, 0x2a, 0xcd, 0x0e, 0x9c, 0xe2, + 0xd2, 0xb3, 0x1c, 0x2e, 0xcd, 0x2e, 0xbf, 0x80, 0x4c, 0xcf, 0x72, 0xc8, 0xb4, 0x7b, 0x67, 0xae, + 0x5c, 0x36, 0x7d, 0x9c, 0x66, 0xd3, 0xac, 0x3b, 0x19, 0x3a, 0xfd, 0x65, 0x1e, 0x9d, 0x3e, 0xcc, + 0xd8, 0x14, 0xf2, 0xe9, 0x27, 0x77, 0xf8, 0xf4, 0x7e, 0xc6, 0x34, 0x87, 0x50, 0xcf, 0x52, 0x84, + 0x0a, 0xb9, 0xbe, 0x15, 0x30, 0xea, 0xd3, 0xbb, 0x8c, 0xfa, 0x20, 0x7b, 0xb4, 0x79, 0x94, 0x3a, + 0xc8, 0x50, 0xea, 0xbd, 0xec, 0x2a, 0x0b, 0x39, 0xf5, 0x18, 0x6f, 0x77, 0x26, 0xd2, 0x90, 0x09, + 0xd8, 0x6a, 0xe5, 0xaf, 0x34, 0xe9, 0x29, 0xc1, 0xec, 0x23, 0xdf, 0xc4, 0xf1, 0xf5, 0x1d, 0xfc, + 0x2b, 0x83, 0x3e, 0x11, 0x5d, 0xe6, 0x9f, 0x4b, 0xb1, 0xad, 0xa4, 0xe0, 0x24, 0x57, 0x19, 0x9a, + 0xab, 0x12, 0xb4, 0x5c, 0x4e, 0xd1, 0x32, 0xf9, 0x29, 0xec, 0x2d, 0x29, 0x17, 0x6a, 0x5f, 0x26, + 0x29, 0xf2, 0xda, 0x41, 0x85, 0xda, 0x10, 0xc5, 0x62, 0x1f, 0xc3, 0x7e, 0x02, 0x4b, 0x83, 0x60, + 0x22, 0x89, 0xaa, 0x2a, 0x2f, 0xef, 0x6e, 0x84, 0x3e, 0x0f, 0x82, 0x11, 0xe5, 0x0b, 0xf3, 0xb7, + 0xb1, 0xff, 0x31, 0xe5, 0x13, 0xa8, 0xce, 0x7c, 0x5b, 0xb9, 0xb5, 0x6d, 0xc9, 0x36, 0xa6, 0x81, + 0xa5, 0x3f, 0x97, 0xb3, 0x1a, 0x16, 0x36, 0x11, 0x15, 0xdd, 0x14, 0x43, 0x5d, 0x09, 0xf3, 0x55, + 0x3c, 0xdc, 0xff, 0x9d, 0x05, 0xcc, 0xbf, 0x95, 0xe2, 0x7d, 0x8c, 0x28, 0xfe, 0x7f, 0x5b, 0x18, + 0x1e, 0xa9, 0xe3, 0xd9, 0x6c, 0x23, 0xaf, 0x69, 0xc5, 0x52, 0x42, 0x98, 0xdb, 0xea, 0x72, 0x73, + 0xd2, 0xb9, 0xad, 0x21, 0xfb, 0x94, 0xa0, 0x53, 0x83, 0x7f, 0x25, 0xef, 0x4f, 0xdb, 0x52, 0x42, + 0x82, 0xf3, 0x8c, 0x14, 0xe7, 0x1d, 0x00, 0xb9, 0x7b, 0xb3, 0xcc, 0xff, 0x94, 0x90, 0x35, 0x53, + 0xb7, 0x26, 0xd7, 0x9f, 0x30, 0x34, 0xca, 0x89, 0x34, 0xf6, 0xfd, 0x7c, 0xfc, 0x11, 0xc0, 0x9c, + 0xf2, 0xc9, 0xd7, 0xd4, 0x13, 0xcc, 0xd6, 0x8e, 0x1a, 0x73, 0xca, 0xff, 0x20, 0x3b, 0xc8, 0x43, + 0x68, 0xa2, 0x7a, 0xcd, 0x99, 0x2d, 0x3d, 0xae, 0x58, 0x8d, 0x39, 0xe5, 0x5f, 0x72, 0x66, 0x93, + 0xe7, 0x50, 0x15, 0x74, 0xce, 0xbb, 0x0d, 0x79, 0x36, 0x9d, 0x13, 0x55, 0xc5, 0x9e, 0xbc, 0x7a, + 0xfb, 0x9a, 0x3a, 0xab, 0xe1, 0x7d, 0x3c, 0x99, 0x7f, 0xdf, 0x1e, 0x76, 0x10, 0xf3, 0xd8, 0x77, + 0x1d, 0xc1, 0xdc, 0x40, 0xdc, 0x58, 0xd2, 0x86, 0xf4, 0xa1, 0x72, 0xc5, 0x98, 0x66, 0x96, 0xdd, + 0xc8, 0x74, 0xfc, 0xf4, 0x17, 0xd2, 0x58, 0x1d, 0x2b, 0x42, 0xcc, 0x3f, 0x95, 0xe3, 0xe8, 0x88, + 0x93, 0xcb, 0x0f, 0x6b, 0x0f, 0xfe, 0x5a, 0xc2, 0xfc, 0x9a, 0xa6, 0x32, 0x72, 0x01, 0x7b, 0x51, + 0xd8, 0x4f, 0xd6, 0x81, 0x4d, 0xb1, 0xe4, 0xf9, 0xee, 0x7b, 0xb2, 0x1b, 0x19, 0x7c, 0xa9, 0xf0, + 0xe4, 0x77, 0xf0, 0x60, 0x86, 0xa3, 0x7a, 0x7c, 0xcd, 0x27, 0x01, 0x5d, 0x51, 0x37, 0x1a, 0xaa, + 0x9c, 0xa2, 0xee, 0x8b, 0x10, 0xf5, 0x1a, 0x41, 0xdc, 0xba, 0x37, 0x4b, 0x75, 0xe8, 0xf1, 0xcc, + 0x9f, 0x60, 0xa9, 0x90, 0xa4, 0xcf, 0xbc, 0x53, 0x31, 0xff, 0x52, 0x82, 0x9d, 0xcc, 0x80, 0x64, + 0x00, 0xa0, 0xd8, 0x87, 0x3b, 0xef, 0x99, 0x4e, 0xeb, 0xa1, 0x1f, 0xd2, 0xe1, 0x2f, 0x9c, 0xf7, + 0xcc, 0x32, 0xa6, 0x61, 0x93, 0x7c, 0x08, 0x0d, 0xb1, 0x51, 0xe8, 0x74, 0xe9, 0xf4, 0x66, 0x23, + 0xa1, 0x75, 0x21, 0xff, 0xc9, 0x13, 0x68, 0xab, 0x81, 0xe7, 0x3e, 0xe7, 0x4e, 0xa0, 0x13, 0x3a, + 0x49, 0x0e, 0xfd, 0x52, 0x6a, 0xac, 0xd6, 0x34, 0x16, 0xcc, 0x3f, 0x82, 0x11, 0x4d, 0x4b, 0x3e, + 0x00, 0xc3, 0xa5, 0x1b, 0x5d, 0x56, 0xe2, 0xda, 0x6a, 0x56, 0xd3, 0xa5, 0x1b, 0x59, 0x52, 0x92, + 0x07, 0xd0, 0x40, 0xa5, 0xd8, 0xa8, 0x3d, 0xab, 0x59, 0x75, 0x97, 0x6e, 0xde, 0x6c, 0x22, 0xc5, + 0x9c, 0xf2, 0xb0, 0x68, 0x74, 0xe9, 0xe6, 0x25, 0xe5, 0xe6, 0x67, 0x50, 0x57, 0x8b, 0xfc, 0x5e, + 0x03, 0xa3, 0x7d, 0x39, 0x65, 0xff, 0x2b, 0x68, 0x25, 0xd6, 0x4d, 0x7e, 0x0e, 0xf7, 0x94, 0x87, + 0x01, 0x5d, 0x09, 0xb9, 0x23, 0xa9, 0x01, 0x89, 0x54, 0xbe, 0xa6, 0x2b, 0x81, 0x53, 0xaa, 0x32, + 0xf8, 0x9f, 0x65, 0xa8, 0xab, 0x12, 0x93, 0x7c, 0x88, 0xe9, 0x9a, 0x3a, 0xde, 0xc4, 0xb1, 0x55, + 0x66, 0x19, 0xb6, 0xbe, 0xbd, 0x3d, 0x6c, 0x48, 0x16, 0x1e, 0x5f, 0x62, 0x86, 0xc6, 0x86, 0x9d, + 0x20, 0xae, 0x72, 0xaa, 0x02, 0x26, 0x50, 0x15, 0x8e, 0xcb, 0xb4, 0x8b, 0xb2, 0x8d, 0x2b, 0xf7, + 0xd6, 0xae, 0xdc, 0x92, 0xaa, 0xda, 0x12, 0x6f, 0xed, 0xe2, 0x96, 0xbc, 0x84, 0xed, 0x44, 0xa2, + 0x71, 0x6c, 0x5d, 0x00, 0x75, 0x92, 0xa7, 0x31, 0xbe, 0x1c, 0xee, 0x63, 0xb8, 0x7e, 0x7b, 0x7b, + 0xd8, 0xfa, 0x4d, 0x98, 0x7a, 0xc6, 0x97, 0x56, 0x2b, 0xca, 0x43, 0x63, 0x9b, 0xf4, 0x41, 0xa6, + 0xa5, 0x89, 0x4a, 0xcd, 0x2a, 0x5d, 0x29, 0x46, 0xee, 0x60, 0xbf, 0xce, 0xdd, 0x58, 0x61, 0x7f, + 0x00, 0x06, 0x06, 0x9d, 0x82, 0x28, 0x82, 0x6e, 0x62, 0x87, 0x54, 0x7e, 0x04, 0x3b, 0x71, 0xee, + 0x50, 0x10, 0xc5, 0xd6, 0x9d, 0xb8, 0x5b, 0x02, 0x1f, 0x42, 0x33, 0x4a, 0x8b, 0x86, 0x44, 0x34, + 0xa8, 0xce, 0x86, 0x9f, 0x43, 0x43, 0x2f, 0x31, 0xb7, 0xc2, 0xff, 0x19, 0xd4, 0xf0, 0x5c, 0xc2, + 0x0b, 0x15, 0x96, 0x5e, 0xf2, 0x3c, 0x98, 0x48, 0xd5, 0xf9, 0x0a, 0x68, 0x9e, 0xc1, 0x76, 0x4a, + 0x8b, 0x99, 0x44, 0xf8, 0x82, 0x2e, 0xf5, 0x81, 0x2a, 0x21, 0x9a, 0xac, 0x1c, 0x4f, 0x66, 0x3e, + 0x07, 0x23, 0xba, 0xf4, 0x78, 0x0a, 0xc1, 0x7a, 0x3a, 0x09, 0x3f, 0xc4, 0xda, 0x56, 0x3d, 0x58, + 0x4f, 0x5f, 0xa9, 0x7c, 0x15, 0xf8, 0x5f, 0xeb, 0x6f, 0x8e, 0x8a, 0xa5, 0x04, 0xf3, 0x53, 0x68, + 0x86, 0x5f, 0x03, 0xc5, 0xa6, 0x05, 0x51, 0x70, 0xfa, 0x4d, 0x0d, 0x76, 0xce, 0x87, 0x17, 0xe3, + 0xf3, 0x20, 0x58, 0x3a, 0x33, 0x2a, 0x2b, 0x82, 0x01, 0x54, 0x65, 0xcd, 0x93, 0xf3, 0x62, 0xd1, + 0xcb, 0x2b, 0xbe, 0xc9, 0x29, 0xd4, 0x64, 0xe9, 0x43, 0xf2, 0x1e, 0x2e, 0x7a, 0xb9, 0x35, 0x38, + 0x4e, 0xa2, 0x8a, 0xa3, 0xbb, 0xef, 0x17, 0xbd, 0xbc, 0x42, 0x9c, 0x7c, 0x06, 0x46, 0x5c, 0xb4, + 0x14, 0xbd, 0x62, 0xf4, 0x0a, 0x4b, 0x72, 0xb4, 0x8f, 0xf3, 0x50, 0xd1, 0x37, 0x7f, 0xaf, 0xb0, + 0x76, 0x25, 0xcf, 0xa0, 0x11, 0x66, 0xf2, 0xfc, 0x77, 0x86, 0x5e, 0x41, 0xb9, 0x8c, 0xdb, 0xa3, + 0x2a, 0x9a, 0xbc, 0xc7, 0x90, 0x5e, 0x6e, 0x4d, 0x4f, 0x9e, 0x40, 0x5d, 0x13, 0x71, 0xee, 0x8b, + 0x41, 0x2f, 0xbf, 0xe8, 0x45, 0x27, 0xe3, 0x52, 0xac, 0xe8, 0xc1, 0xa6, 0x57, 0xf8, 0xf1, 0x41, + 0xce, 0x01, 0x12, 0x1f, 0xbe, 0x85, 0x2f, 0x31, 0xbd, 0xe2, 0x8f, 0x0a, 0x82, 0xe1, 0x18, 0x7d, + 0x28, 0xe6, 0xbf, 0x90, 0xf4, 0x8a, 0xea, 0xfc, 0x69, 0x5d, 0xbe, 0xa2, 0x7d, 0xf2, 0xdf, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x2c, 0x07, 0x8a, 0x4d, 0xc1, 0x13, 0x00, 0x00, } diff --git a/types/types.proto b/types/types.proto index 804ebba5..ad6fd4be 100644 --- a/types/types.proto +++ b/types/types.proto @@ -48,7 +48,7 @@ message RequestSetOption { message RequestInitChain { repeated Validator validators = 1 [(gogoproto.nullable)=false]; - bytes app_state_bytes = 2; + bytes genesis_bytes = 2; } message RequestQuery { From 9439306f0fbd5927b3a9f36dc4e721757b5dc423 Mon Sep 17 00:00:00 2001 From: Adrian Brink Date: Sun, 13 May 2018 20:05:45 -0400 Subject: [PATCH 04/40] Change last instance of AppStateBytes to GenesisBytes --- example/dummy/helpers.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/example/dummy/helpers.go b/example/dummy/helpers.go index 92731986..1dc1e235 100644 --- a/example/dummy/helpers.go +++ b/example/dummy/helpers.go @@ -30,7 +30,7 @@ func RandVals(cnt int) []types.Validator { // don't make any tx that modify the validator state func InitDummy(app *PersistentDummyApplication) { app.InitChain(types.RequestInitChain{ - Validators: RandVals(1), - AppStateBytes: []byte("[]"), + Validators: RandVals(1), + GenesisBytes: []byte("[]"), }) } From 43e72bbcc056c23de443eb303efd99fa63f82f91 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Mon, 14 May 2018 18:30:41 -0400 Subject: [PATCH 05/40] version bump --- version/version.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/version/version.go b/version/version.go index e1077c98..7313f5ee 100644 --- a/version/version.go +++ b/version/version.go @@ -4,6 +4,6 @@ package version const Maj = "0" const Min = "10" -const Fix = "3" +const Fix = "4" -const Version = "0.10.3" +const Version = "0.10.4-dev" From f7d775337b9d9212ae990eb3f5cc945b0b0edcc2 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Mon, 14 May 2018 18:54:48 -0400 Subject: [PATCH 06/40] absent_validators: repeated int -> repeated bytes --- types/types.pb.go | 8 ++++---- types/types.proto | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/types/types.pb.go b/types/types.pb.go index 4c31bf1d..fc55a672 100644 --- a/types/types.pb.go +++ b/types/types.pb.go @@ -598,7 +598,7 @@ func (m *RequestQuery) GetProve() bool { type RequestBeginBlock struct { Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` Header Header `protobuf:"bytes,2,opt,name=header" json:"header"` - AbsentValidators []int32 `protobuf:"varint,3,rep,packed,name=absent_validators,json=absentValidators" json:"absent_validators,omitempty"` + AbsentValidators [][]byte `protobuf:"bytes,3,rep,name=absent_validators,json=absentValidators" json:"absent_validators,omitempty"` ByzantineValidators []Evidence `protobuf:"bytes,4,rep,name=byzantine_validators,json=byzantineValidators" json:"byzantine_validators"` } @@ -621,7 +621,7 @@ func (m *RequestBeginBlock) GetHeader() Header { return Header{} } -func (m *RequestBeginBlock) GetAbsentValidators() []int32 { +func (m *RequestBeginBlock) GetAbsentValidators() [][]byte { if m != nil { return m.AbsentValidators } @@ -2288,7 +2288,7 @@ var fileDescriptorTypes = []byte{ 0xad, 0x8a, 0xa5, 0x25, 0x74, 0x2b, 0x58, 0xf9, 0xd7, 0x4c, 0xde, 0xa2, 0xa6, 0xa5, 0x04, 0xf3, 0x5f, 0x25, 0xd8, 0xbb, 0x13, 0x76, 0x38, 0xee, 0x82, 0xf2, 0x45, 0x38, 0x17, 0xb6, 0xc9, 0x23, 0x1c, 0x97, 0xda, 0x6c, 0xa5, 0x6f, 0xf7, 0xb6, 0x76, 0x74, 0x24, 0x3b, 0xb5, 0x97, 0x1a, 0x42, - 0x1e, 0xc1, 0x1e, 0x9d, 0x72, 0xe6, 0x89, 0x49, 0x62, 0x83, 0x2a, 0x47, 0x95, 0x7e, 0xcd, 0xda, + 0x1e, 0xc1, 0x1e, 0x9d, 0x72, 0xe6, 0x89, 0x49, 0x62, 0x83, 0x2a, 0x47, 0x95, 0x7e, 0xdb, 0xda, 0x55, 0x8a, 0xb7, 0xf1, 0x76, 0x8c, 0xe0, 0x60, 0x7a, 0xf3, 0x9e, 0x7a, 0xc2, 0xf1, 0x58, 0x12, 0x5f, 0x95, 0x1b, 0xba, 0xa3, 0xe7, 0x79, 0x71, 0xed, 0xd8, 0xcc, 0x9b, 0x31, 0x3d, 0xd3, 0x7e, 0x64, 0x12, 0x8f, 0x64, 0x1e, 0x41, 0x27, 0x7d, 0x13, 0x48, 0x07, 0xca, 0x62, 0xa3, 0xfd, 0x28, @@ -2358,5 +2358,5 @@ var fileDescriptorTypes = []byte{ 0x41, 0x2f, 0xbf, 0xe8, 0x45, 0x27, 0xe3, 0x52, 0xac, 0xe8, 0xc1, 0xa6, 0x57, 0xf8, 0xf1, 0x41, 0xce, 0x01, 0x12, 0x1f, 0xbe, 0x85, 0x2f, 0x31, 0xbd, 0xe2, 0x8f, 0x0a, 0x82, 0xe1, 0x18, 0x7d, 0x28, 0xe6, 0xbf, 0x90, 0xf4, 0x8a, 0xea, 0xfc, 0x69, 0x5d, 0xbe, 0xa2, 0x7d, 0xf2, 0xdf, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x2c, 0x07, 0x8a, 0x4d, 0xc1, 0x13, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xd0, 0x8a, 0xd9, 0x79, 0xc1, 0x13, 0x00, 0x00, } diff --git a/types/types.proto b/types/types.proto index ad6fd4be..fc1994ed 100644 --- a/types/types.proto +++ b/types/types.proto @@ -61,7 +61,7 @@ message RequestQuery { message RequestBeginBlock { bytes hash = 1; Header header = 2 [(gogoproto.nullable)=false]; - repeated int32 absent_validators = 3; + repeated bytes absent_validators = 3; repeated Evidence byzantine_validators = 4 [(gogoproto.nullable)=false]; } From 9b202874634d04db8fe7ff4f2a7c428cf2c07add Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Mon, 14 May 2018 19:01:49 -0400 Subject: [PATCH 07/40] add tags to begin/end block --- types/types.pb.go | 237 +++++++++++++++++++++++++--------------------- types/types.proto | 2 + 2 files changed, 129 insertions(+), 110 deletions(-) diff --git a/types/types.pb.go b/types/types.pb.go index fc55a672..70d749aa 100644 --- a/types/types.pb.go +++ b/types/types.pb.go @@ -1327,6 +1327,7 @@ func (m *ResponseQuery) GetHeight() int64 { } type ResponseBeginBlock struct { + Tags []common.KVPair `protobuf:"bytes,1,rep,name=tags" json:"tags,omitempty"` } func (m *ResponseBeginBlock) Reset() { *m = ResponseBeginBlock{} } @@ -1334,6 +1335,13 @@ func (m *ResponseBeginBlock) String() string { return proto.CompactTe func (*ResponseBeginBlock) ProtoMessage() {} func (*ResponseBeginBlock) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{20} } +func (m *ResponseBeginBlock) GetTags() []common.KVPair { + if m != nil { + return m.Tags + } + return nil +} + type ResponseCheckTx struct { Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` @@ -1481,6 +1489,7 @@ func (m *ResponseDeliverTx) GetFee() common.KI64Pair { type ResponseEndBlock struct { ValidatorUpdates []Validator `protobuf:"bytes,1,rep,name=validator_updates,json=validatorUpdates" json:"validator_updates"` ConsensusParamUpdates *ConsensusParams `protobuf:"bytes,2,opt,name=consensus_param_updates,json=consensusParamUpdates" json:"consensus_param_updates,omitempty"` + Tags []common.KVPair `protobuf:"bytes,3,rep,name=tags" json:"tags,omitempty"` } func (m *ResponseEndBlock) Reset() { *m = ResponseEndBlock{} } @@ -1502,6 +1511,13 @@ func (m *ResponseEndBlock) GetConsensusParamUpdates() *ConsensusParams { return nil } +func (m *ResponseEndBlock) GetTags() []common.KVPair { + if m != nil { + return m.Tags + } + return nil +} + type ResponseCommit struct { // reserve 1 Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` @@ -2248,115 +2264,116 @@ var _ABCIApplication_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("types/types.proto", fileDescriptorTypes) } var fileDescriptorTypes = []byte{ - // 1756 bytes of a gzipped FileDescriptorProto + // 1767 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0xcd, 0x72, 0x1b, 0xc7, - 0x11, 0x26, 0xfe, 0xb1, 0x0d, 0x10, 0x24, 0x87, 0x94, 0x04, 0xc1, 0x95, 0x22, 0x6b, 0x93, 0xb2, - 0xc1, 0x48, 0x26, 0x12, 0x3a, 0x52, 0x89, 0x72, 0xca, 0x15, 0x82, 0x54, 0x04, 0x94, 0x92, 0x58, - 0x59, 0xcb, 0x4a, 0x55, 0x2e, 0xa8, 0x01, 0x76, 0x08, 0x6c, 0x09, 0xfb, 0x63, 0xcc, 0x80, 0x06, - 0x75, 0xcb, 0xdd, 0xf7, 0x9c, 0x73, 0xca, 0x13, 0xe4, 0x15, 0x52, 0x49, 0xe5, 0x1d, 0x78, 0xf0, - 0x31, 0x2f, 0x91, 0x54, 0xcf, 0xcc, 0xfe, 0x72, 0xd7, 0xe5, 0x4a, 0x8e, 0xbe, 0x00, 0xd3, 0xd3, - 0x5f, 0xcf, 0x4c, 0xcf, 0xf4, 0x7c, 0xdd, 0x3b, 0xb0, 0x27, 0x6e, 0x02, 0xc6, 0x07, 0xf2, 0xf7, - 0x24, 0x58, 0xf9, 0xc2, 0x27, 0x35, 0x29, 0xf4, 0x3e, 0x9e, 0x3b, 0x62, 0xb1, 0x9e, 0x9e, 0xcc, - 0x7c, 0x77, 0x30, 0xf7, 0xe7, 0xfe, 0x40, 0x6a, 0xa7, 0xeb, 0x2b, 0x29, 0x49, 0x41, 0xb6, 0x94, - 0x55, 0x6f, 0x90, 0x80, 0x0b, 0xe6, 0xd9, 0x6c, 0xe5, 0x3a, 0x9e, 0x18, 0x08, 0x77, 0xe9, 0x4c, - 0xf9, 0x60, 0xe6, 0xbb, 0xae, 0xef, 0x25, 0xa7, 0x31, 0xff, 0x5e, 0x85, 0x86, 0xc5, 0xbe, 0x5a, - 0x33, 0x2e, 0x48, 0x1f, 0xaa, 0x6c, 0xb6, 0xf0, 0xbb, 0xe5, 0xa3, 0x52, 0xbf, 0x75, 0x4a, 0x4e, - 0x14, 0x4e, 0x6b, 0x5f, 0xcc, 0x16, 0xfe, 0x68, 0xcb, 0x92, 0x08, 0xf2, 0x08, 0x6a, 0x57, 0xcb, - 0x35, 0x5f, 0x74, 0x2b, 0x12, 0xba, 0x9f, 0x86, 0xfe, 0x1a, 0x55, 0xa3, 0x2d, 0x4b, 0x61, 0x70, - 0x58, 0xc7, 0xbb, 0xf2, 0xbb, 0xd5, 0xbc, 0x61, 0xc7, 0xde, 0x95, 0x1c, 0x16, 0x11, 0xe4, 0x19, - 0x00, 0x67, 0x62, 0xe2, 0x07, 0xc2, 0xf1, 0xbd, 0x6e, 0x4d, 0xe2, 0x1f, 0xa4, 0xf1, 0x5f, 0x30, - 0xf1, 0xb9, 0x54, 0x8f, 0xb6, 0x2c, 0x83, 0x87, 0x02, 0x5a, 0x3a, 0x9e, 0x23, 0x26, 0xb3, 0x05, - 0x75, 0xbc, 0x6e, 0x3d, 0xcf, 0x72, 0xec, 0x39, 0xe2, 0x02, 0xd5, 0x68, 0xe9, 0x84, 0x02, 0xba, - 0xf2, 0xd5, 0x9a, 0xad, 0x6e, 0xba, 0x8d, 0x3c, 0x57, 0x7e, 0x8f, 0x2a, 0x74, 0x45, 0x62, 0xc8, - 0xa7, 0xd0, 0x9a, 0xb2, 0xb9, 0xe3, 0x4d, 0xa6, 0x4b, 0x7f, 0xf6, 0xae, 0xdb, 0x94, 0x26, 0xdd, - 0xb4, 0xc9, 0x10, 0x01, 0x43, 0xd4, 0x8f, 0xb6, 0x2c, 0x98, 0x46, 0x12, 0x39, 0x85, 0xe6, 0x6c, - 0xc1, 0x66, 0xef, 0x26, 0x62, 0xd3, 0x35, 0xa4, 0xe5, 0xbd, 0xb4, 0xe5, 0x05, 0x6a, 0xdf, 0x6c, - 0x46, 0x5b, 0x56, 0x63, 0xa6, 0x9a, 0xe8, 0x97, 0xcd, 0x96, 0xce, 0x35, 0x5b, 0xa1, 0xd5, 0x7e, - 0x9e, 0x5f, 0x97, 0x4a, 0x2f, 0xed, 0x0c, 0x3b, 0x14, 0xc8, 0x13, 0x30, 0x98, 0x67, 0xeb, 0x85, - 0xb6, 0xa4, 0xe1, 0xfd, 0xcc, 0x89, 0x7a, 0x76, 0xb8, 0xcc, 0x26, 0xd3, 0x6d, 0x72, 0x02, 0x75, - 0x8c, 0x12, 0x47, 0x74, 0xdb, 0xd2, 0xe6, 0x20, 0xb3, 0x44, 0xa9, 0x1b, 0x6d, 0x59, 0x1a, 0x35, - 0x6c, 0x40, 0xed, 0x9a, 0x2e, 0xd7, 0xcc, 0xfc, 0x08, 0x5a, 0x89, 0x48, 0x21, 0x5d, 0x68, 0xb8, - 0x8c, 0x73, 0x3a, 0x67, 0xdd, 0xd2, 0x51, 0xa9, 0x6f, 0x58, 0xa1, 0x68, 0x76, 0xa0, 0x9d, 0x8c, - 0x93, 0x84, 0x21, 0xc6, 0x02, 0x1a, 0x5e, 0xb3, 0x15, 0xc7, 0x00, 0xd0, 0x86, 0x5a, 0x34, 0x9f, - 0xc3, 0x6e, 0x36, 0x08, 0xc8, 0x2e, 0x54, 0xde, 0xb1, 0x1b, 0x8d, 0xc4, 0x26, 0x39, 0xd0, 0x0b, - 0x92, 0x51, 0x6c, 0x58, 0x7a, 0x75, 0x7e, 0x64, 0x1b, 0x85, 0x01, 0x79, 0x0a, 0x70, 0x4d, 0x97, - 0x8e, 0x4d, 0x85, 0xbf, 0xe2, 0xdd, 0xd2, 0x51, 0xa5, 0xdf, 0x3a, 0xdd, 0xd5, 0xee, 0xbe, 0x0d, - 0x15, 0xc3, 0xea, 0x3f, 0x6e, 0x0f, 0xb7, 0xac, 0x04, 0x92, 0xfc, 0x18, 0xb6, 0xe7, 0xcc, 0x63, - 0xdc, 0xe1, 0x93, 0xe9, 0x8d, 0x60, 0x5c, 0xce, 0xd4, 0xb6, 0xda, 0xba, 0x73, 0x88, 0x7d, 0xa6, - 0x1d, 0x79, 0x29, 0x43, 0x88, 0x10, 0xa8, 0xda, 0x54, 0x50, 0xb9, 0xd2, 0xb6, 0x25, 0xdb, 0xd8, - 0x17, 0x50, 0xb1, 0xd0, 0x2b, 0x95, 0x6d, 0x72, 0x1f, 0xea, 0x0b, 0xe6, 0xcc, 0x17, 0x42, 0x5e, - 0xad, 0x8a, 0xa5, 0x25, 0x74, 0x2b, 0x58, 0xf9, 0xd7, 0x4c, 0xde, 0xa2, 0xa6, 0xa5, 0x04, 0xf3, - 0x5f, 0x25, 0xd8, 0xbb, 0x13, 0x76, 0x38, 0xee, 0x82, 0xf2, 0x45, 0x38, 0x17, 0xb6, 0xc9, 0x23, - 0x1c, 0x97, 0xda, 0x6c, 0xa5, 0x6f, 0xf7, 0xb6, 0x76, 0x74, 0x24, 0x3b, 0xb5, 0x97, 0x1a, 0x42, - 0x1e, 0xc1, 0x1e, 0x9d, 0x72, 0xe6, 0x89, 0x49, 0x62, 0x83, 0x2a, 0x47, 0x95, 0x7e, 0xdb, 0xda, - 0x55, 0x8a, 0xb7, 0xf1, 0x76, 0x8c, 0xe0, 0x60, 0x7a, 0xf3, 0x9e, 0x7a, 0xc2, 0xf1, 0x58, 0x12, - 0x5f, 0x95, 0x1b, 0xba, 0xa3, 0xe7, 0x79, 0x71, 0xed, 0xd8, 0xcc, 0x9b, 0x31, 0x3d, 0xd3, 0x7e, - 0x64, 0x12, 0x8f, 0x64, 0x1e, 0x41, 0x27, 0x7d, 0x13, 0x48, 0x07, 0xca, 0x62, 0xa3, 0xfd, 0x28, - 0x8b, 0x8d, 0x69, 0x46, 0xc7, 0x18, 0x45, 0xfd, 0x1d, 0xcc, 0x31, 0xec, 0x64, 0x02, 0x3c, 0xb1, - 0xa9, 0xa5, 0xe4, 0xa6, 0x9a, 0x3b, 0xb0, 0x9d, 0x8a, 0x6b, 0xf3, 0x9b, 0x1a, 0x34, 0x2d, 0xc6, - 0x03, 0xdf, 0xe3, 0x8c, 0x3c, 0x03, 0x83, 0x6d, 0x66, 0x4c, 0x91, 0x51, 0x29, 0x73, 0xd5, 0x15, - 0xe6, 0x45, 0xa8, 0xc7, 0xbb, 0x17, 0x81, 0xc9, 0x71, 0x8a, 0x48, 0xf7, 0xb3, 0x46, 0x49, 0x26, - 0x7d, 0x9c, 0x66, 0xd2, 0x83, 0x0c, 0x36, 0x43, 0xa5, 0xc7, 0x29, 0x2a, 0xcd, 0x0e, 0x9c, 0xe2, - 0xd2, 0xb3, 0x1c, 0x2e, 0xcd, 0x2e, 0xbf, 0x80, 0x4c, 0xcf, 0x72, 0xc8, 0xb4, 0x7b, 0x67, 0xae, - 0x5c, 0x36, 0x7d, 0x9c, 0x66, 0xd3, 0xac, 0x3b, 0x19, 0x3a, 0xfd, 0x65, 0x1e, 0x9d, 0x3e, 0xcc, - 0xd8, 0x14, 0xf2, 0xe9, 0x27, 0x77, 0xf8, 0xf4, 0x7e, 0xc6, 0x34, 0x87, 0x50, 0xcf, 0x52, 0x84, - 0x0a, 0xb9, 0xbe, 0x15, 0x30, 0xea, 0xd3, 0xbb, 0x8c, 0xfa, 0x20, 0x7b, 0xb4, 0x79, 0x94, 0x3a, - 0xc8, 0x50, 0xea, 0xbd, 0xec, 0x2a, 0x0b, 0x39, 0xf5, 0x18, 0x6f, 0x77, 0x26, 0xd2, 0x90, 0x09, - 0xd8, 0x6a, 0xe5, 0xaf, 0x34, 0xe9, 0x29, 0xc1, 0xec, 0x23, 0xdf, 0xc4, 0xf1, 0xf5, 0x1d, 0xfc, - 0x2b, 0x83, 0x3e, 0x11, 0x5d, 0xe6, 0x9f, 0x4b, 0xb1, 0xad, 0xa4, 0xe0, 0x24, 0x57, 0x19, 0x9a, - 0xab, 0x12, 0xb4, 0x5c, 0x4e, 0xd1, 0x32, 0xf9, 0x29, 0xec, 0x2d, 0x29, 0x17, 0x6a, 0x5f, 0x26, - 0x29, 0xf2, 0xda, 0x41, 0x85, 0xda, 0x10, 0xc5, 0x62, 0x1f, 0xc3, 0x7e, 0x02, 0x4b, 0x83, 0x60, - 0x22, 0x89, 0xaa, 0x2a, 0x2f, 0xef, 0x6e, 0x84, 0x3e, 0x0f, 0x82, 0x11, 0xe5, 0x0b, 0xf3, 0xb7, - 0xb1, 0xff, 0x31, 0xe5, 0x13, 0xa8, 0xce, 0x7c, 0x5b, 0xb9, 0xb5, 0x6d, 0xc9, 0x36, 0xa6, 0x81, - 0xa5, 0x3f, 0x97, 0xb3, 0x1a, 0x16, 0x36, 0x11, 0x15, 0xdd, 0x14, 0x43, 0x5d, 0x09, 0xf3, 0x55, - 0x3c, 0xdc, 0xff, 0x9d, 0x05, 0xcc, 0xbf, 0x95, 0xe2, 0x7d, 0x8c, 0x28, 0xfe, 0x7f, 0x5b, 0x18, - 0x1e, 0xa9, 0xe3, 0xd9, 0x6c, 0x23, 0xaf, 0x69, 0xc5, 0x52, 0x42, 0x98, 0xdb, 0xea, 0x72, 0x73, - 0xd2, 0xb9, 0xad, 0x21, 0xfb, 0x94, 0xa0, 0x53, 0x83, 0x7f, 0x25, 0xef, 0x4f, 0xdb, 0x52, 0x42, - 0x82, 0xf3, 0x8c, 0x14, 0xe7, 0x1d, 0x00, 0xb9, 0x7b, 0xb3, 0xcc, 0xff, 0x94, 0x90, 0x35, 0x53, - 0xb7, 0x26, 0xd7, 0x9f, 0x30, 0x34, 0xca, 0x89, 0x34, 0xf6, 0xfd, 0x7c, 0xfc, 0x11, 0xc0, 0x9c, - 0xf2, 0xc9, 0xd7, 0xd4, 0x13, 0xcc, 0xd6, 0x8e, 0x1a, 0x73, 0xca, 0xff, 0x20, 0x3b, 0xc8, 0x43, - 0x68, 0xa2, 0x7a, 0xcd, 0x99, 0x2d, 0x3d, 0xae, 0x58, 0x8d, 0x39, 0xe5, 0x5f, 0x72, 0x66, 0x93, - 0xe7, 0x50, 0x15, 0x74, 0xce, 0xbb, 0x0d, 0x79, 0x36, 0x9d, 0x13, 0x55, 0xc5, 0x9e, 0xbc, 0x7a, - 0xfb, 0x9a, 0x3a, 0xab, 0xe1, 0x7d, 0x3c, 0x99, 0x7f, 0xdf, 0x1e, 0x76, 0x10, 0xf3, 0xd8, 0x77, - 0x1d, 0xc1, 0xdc, 0x40, 0xdc, 0x58, 0xd2, 0x86, 0xf4, 0xa1, 0x72, 0xc5, 0x98, 0x66, 0x96, 0xdd, - 0xc8, 0x74, 0xfc, 0xf4, 0x17, 0xd2, 0x58, 0x1d, 0x2b, 0x42, 0xcc, 0x3f, 0x95, 0xe3, 0xe8, 0x88, - 0x93, 0xcb, 0x0f, 0x6b, 0x0f, 0xfe, 0x5a, 0xc2, 0xfc, 0x9a, 0xa6, 0x32, 0x72, 0x01, 0x7b, 0x51, - 0xd8, 0x4f, 0xd6, 0x81, 0x4d, 0xb1, 0xe4, 0xf9, 0xee, 0x7b, 0xb2, 0x1b, 0x19, 0x7c, 0xa9, 0xf0, - 0xe4, 0x77, 0xf0, 0x60, 0x86, 0xa3, 0x7a, 0x7c, 0xcd, 0x27, 0x01, 0x5d, 0x51, 0x37, 0x1a, 0xaa, - 0x9c, 0xa2, 0xee, 0x8b, 0x10, 0xf5, 0x1a, 0x41, 0xdc, 0xba, 0x37, 0x4b, 0x75, 0xe8, 0xf1, 0xcc, - 0x9f, 0x60, 0xa9, 0x90, 0xa4, 0xcf, 0xbc, 0x53, 0x31, 0xff, 0x52, 0x82, 0x9d, 0xcc, 0x80, 0x64, - 0x00, 0xa0, 0xd8, 0x87, 0x3b, 0xef, 0x99, 0x4e, 0xeb, 0xa1, 0x1f, 0xd2, 0xe1, 0x2f, 0x9c, 0xf7, - 0xcc, 0x32, 0xa6, 0x61, 0x93, 0x7c, 0x08, 0x0d, 0xb1, 0x51, 0xe8, 0x74, 0xe9, 0xf4, 0x66, 0x23, - 0xa1, 0x75, 0x21, 0xff, 0xc9, 0x13, 0x68, 0xab, 0x81, 0xe7, 0x3e, 0xe7, 0x4e, 0xa0, 0x13, 0x3a, - 0x49, 0x0e, 0xfd, 0x52, 0x6a, 0xac, 0xd6, 0x34, 0x16, 0xcc, 0x3f, 0x82, 0x11, 0x4d, 0x4b, 0x3e, - 0x00, 0xc3, 0xa5, 0x1b, 0x5d, 0x56, 0xe2, 0xda, 0x6a, 0x56, 0xd3, 0xa5, 0x1b, 0x59, 0x52, 0x92, - 0x07, 0xd0, 0x40, 0xa5, 0xd8, 0xa8, 0x3d, 0xab, 0x59, 0x75, 0x97, 0x6e, 0xde, 0x6c, 0x22, 0xc5, - 0x9c, 0xf2, 0xb0, 0x68, 0x74, 0xe9, 0xe6, 0x25, 0xe5, 0xe6, 0x67, 0x50, 0x57, 0x8b, 0xfc, 0x5e, - 0x03, 0xa3, 0x7d, 0x39, 0x65, 0xff, 0x2b, 0x68, 0x25, 0xd6, 0x4d, 0x7e, 0x0e, 0xf7, 0x94, 0x87, - 0x01, 0x5d, 0x09, 0xb9, 0x23, 0xa9, 0x01, 0x89, 0x54, 0xbe, 0xa6, 0x2b, 0x81, 0x53, 0xaa, 0x32, - 0xf8, 0x9f, 0x65, 0xa8, 0xab, 0x12, 0x93, 0x7c, 0x88, 0xe9, 0x9a, 0x3a, 0xde, 0xc4, 0xb1, 0x55, - 0x66, 0x19, 0xb6, 0xbe, 0xbd, 0x3d, 0x6c, 0x48, 0x16, 0x1e, 0x5f, 0x62, 0x86, 0xc6, 0x86, 0x9d, - 0x20, 0xae, 0x72, 0xaa, 0x02, 0x26, 0x50, 0x15, 0x8e, 0xcb, 0xb4, 0x8b, 0xb2, 0x8d, 0x2b, 0xf7, - 0xd6, 0xae, 0xdc, 0x92, 0xaa, 0xda, 0x12, 0x6f, 0xed, 0xe2, 0x96, 0xbc, 0x84, 0xed, 0x44, 0xa2, - 0x71, 0x6c, 0x5d, 0x00, 0x75, 0x92, 0xa7, 0x31, 0xbe, 0x1c, 0xee, 0x63, 0xb8, 0x7e, 0x7b, 0x7b, - 0xd8, 0xfa, 0x4d, 0x98, 0x7a, 0xc6, 0x97, 0x56, 0x2b, 0xca, 0x43, 0x63, 0x9b, 0xf4, 0x41, 0xa6, - 0xa5, 0x89, 0x4a, 0xcd, 0x2a, 0x5d, 0x29, 0x46, 0xee, 0x60, 0xbf, 0xce, 0xdd, 0x58, 0x61, 0x7f, - 0x00, 0x06, 0x06, 0x9d, 0x82, 0x28, 0x82, 0x6e, 0x62, 0x87, 0x54, 0x7e, 0x04, 0x3b, 0x71, 0xee, - 0x50, 0x10, 0xc5, 0xd6, 0x9d, 0xb8, 0x5b, 0x02, 0x1f, 0x42, 0x33, 0x4a, 0x8b, 0x86, 0x44, 0x34, - 0xa8, 0xce, 0x86, 0x9f, 0x43, 0x43, 0x2f, 0x31, 0xb7, 0xc2, 0xff, 0x19, 0xd4, 0xf0, 0x5c, 0xc2, - 0x0b, 0x15, 0x96, 0x5e, 0xf2, 0x3c, 0x98, 0x48, 0xd5, 0xf9, 0x0a, 0x68, 0x9e, 0xc1, 0x76, 0x4a, - 0x8b, 0x99, 0x44, 0xf8, 0x82, 0x2e, 0xf5, 0x81, 0x2a, 0x21, 0x9a, 0xac, 0x1c, 0x4f, 0x66, 0x3e, - 0x07, 0x23, 0xba, 0xf4, 0x78, 0x0a, 0xc1, 0x7a, 0x3a, 0x09, 0x3f, 0xc4, 0xda, 0x56, 0x3d, 0x58, - 0x4f, 0x5f, 0xa9, 0x7c, 0x15, 0xf8, 0x5f, 0xeb, 0x6f, 0x8e, 0x8a, 0xa5, 0x04, 0xf3, 0x53, 0x68, - 0x86, 0x5f, 0x03, 0xc5, 0xa6, 0x05, 0x51, 0x70, 0xfa, 0x4d, 0x0d, 0x76, 0xce, 0x87, 0x17, 0xe3, - 0xf3, 0x20, 0x58, 0x3a, 0x33, 0x2a, 0x2b, 0x82, 0x01, 0x54, 0x65, 0xcd, 0x93, 0xf3, 0x62, 0xd1, - 0xcb, 0x2b, 0xbe, 0xc9, 0x29, 0xd4, 0x64, 0xe9, 0x43, 0xf2, 0x1e, 0x2e, 0x7a, 0xb9, 0x35, 0x38, - 0x4e, 0xa2, 0x8a, 0xa3, 0xbb, 0xef, 0x17, 0xbd, 0xbc, 0x42, 0x9c, 0x7c, 0x06, 0x46, 0x5c, 0xb4, - 0x14, 0xbd, 0x62, 0xf4, 0x0a, 0x4b, 0x72, 0xb4, 0x8f, 0xf3, 0x50, 0xd1, 0x37, 0x7f, 0xaf, 0xb0, - 0x76, 0x25, 0xcf, 0xa0, 0x11, 0x66, 0xf2, 0xfc, 0x77, 0x86, 0x5e, 0x41, 0xb9, 0x8c, 0xdb, 0xa3, - 0x2a, 0x9a, 0xbc, 0xc7, 0x90, 0x5e, 0x6e, 0x4d, 0x4f, 0x9e, 0x40, 0x5d, 0x13, 0x71, 0xee, 0x8b, - 0x41, 0x2f, 0xbf, 0xe8, 0x45, 0x27, 0xe3, 0x52, 0xac, 0xe8, 0xc1, 0xa6, 0x57, 0xf8, 0xf1, 0x41, - 0xce, 0x01, 0x12, 0x1f, 0xbe, 0x85, 0x2f, 0x31, 0xbd, 0xe2, 0x8f, 0x0a, 0x82, 0xe1, 0x18, 0x7d, - 0x28, 0xe6, 0xbf, 0x90, 0xf4, 0x8a, 0xea, 0xfc, 0x69, 0x5d, 0xbe, 0xa2, 0x7d, 0xf2, 0xdf, 0x00, - 0x00, 0x00, 0xff, 0xff, 0xd0, 0x8a, 0xd9, 0x79, 0xc1, 0x13, 0x00, 0x00, + 0x11, 0x26, 0xfe, 0xb1, 0x0d, 0x10, 0x24, 0x87, 0xfa, 0x81, 0xe0, 0x4a, 0x89, 0xb5, 0x49, 0xd9, + 0x60, 0x24, 0x13, 0x09, 0x1d, 0xa9, 0x44, 0x39, 0xe5, 0x0a, 0x41, 0x2a, 0x02, 0x4a, 0x49, 0xcc, + 0xac, 0x65, 0xa5, 0x2a, 0x17, 0xd4, 0x00, 0x3b, 0x04, 0xb6, 0x84, 0xfd, 0x31, 0x66, 0x40, 0x83, + 0xba, 0xe5, 0xee, 0x7b, 0xce, 0x79, 0x88, 0xbc, 0x42, 0x2a, 0xa9, 0xbc, 0x03, 0x0f, 0xce, 0x2d, + 0x2f, 0x91, 0x54, 0xcf, 0xcc, 0xfe, 0x72, 0xd7, 0xe5, 0x28, 0x47, 0x5f, 0x80, 0x99, 0xed, 0xaf, + 0x67, 0xa6, 0x7b, 0x7a, 0xbe, 0xee, 0x19, 0xd8, 0x13, 0xd7, 0x01, 0xe3, 0x03, 0xf9, 0x7b, 0x14, + 0xac, 0x7c, 0xe1, 0x93, 0x9a, 0xec, 0xf4, 0x3e, 0x9e, 0x3b, 0x62, 0xb1, 0x9e, 0x1e, 0xcd, 0x7c, + 0x77, 0x30, 0xf7, 0xe7, 0xfe, 0x40, 0x4a, 0xa7, 0xeb, 0x4b, 0xd9, 0x93, 0x1d, 0xd9, 0x52, 0x5a, + 0xbd, 0x41, 0x02, 0x2e, 0x98, 0x67, 0xb3, 0x95, 0xeb, 0x78, 0x62, 0x20, 0xdc, 0xa5, 0x33, 0xe5, + 0x83, 0x99, 0xef, 0xba, 0xbe, 0x97, 0x9c, 0xc6, 0xfc, 0x5b, 0x15, 0x1a, 0x16, 0xfb, 0x6a, 0xcd, + 0xb8, 0x20, 0x7d, 0xa8, 0xb2, 0xd9, 0xc2, 0xef, 0x96, 0x0f, 0x4a, 0xfd, 0xd6, 0x31, 0x39, 0x52, + 0x38, 0x2d, 0x7d, 0x31, 0x5b, 0xf8, 0xa3, 0x2d, 0x4b, 0x22, 0xc8, 0x23, 0xa8, 0x5d, 0x2e, 0xd7, + 0x7c, 0xd1, 0xad, 0x48, 0xe8, 0x7e, 0x1a, 0xfa, 0x6b, 0x14, 0x8d, 0xb6, 0x2c, 0x85, 0xc1, 0x61, + 0x1d, 0xef, 0xd2, 0xef, 0x56, 0xf3, 0x86, 0x1d, 0x7b, 0x97, 0x72, 0x58, 0x44, 0x90, 0x67, 0x00, + 0x9c, 0x89, 0x89, 0x1f, 0x08, 0xc7, 0xf7, 0xba, 0x35, 0x89, 0xbf, 0x9f, 0xc6, 0x7f, 0xc1, 0xc4, + 0xe7, 0x52, 0x3c, 0xda, 0xb2, 0x0c, 0x1e, 0x76, 0x50, 0xd3, 0xf1, 0x1c, 0x31, 0x99, 0x2d, 0xa8, + 0xe3, 0x75, 0xeb, 0x79, 0x9a, 0x63, 0xcf, 0x11, 0x67, 0x28, 0x46, 0x4d, 0x27, 0xec, 0xa0, 0x29, + 0x5f, 0xad, 0xd9, 0xea, 0xba, 0xdb, 0xc8, 0x33, 0xe5, 0xf7, 0x28, 0x42, 0x53, 0x24, 0x86, 0x7c, + 0x0a, 0xad, 0x29, 0x9b, 0x3b, 0xde, 0x64, 0xba, 0xf4, 0x67, 0x6f, 0xbb, 0x4d, 0xa9, 0xd2, 0x4d, + 0xab, 0x0c, 0x11, 0x30, 0x44, 0xf9, 0x68, 0xcb, 0x82, 0x69, 0xd4, 0x23, 0xc7, 0xd0, 0x9c, 0x2d, + 0xd8, 0xec, 0xed, 0x44, 0x6c, 0xba, 0x86, 0xd4, 0xbc, 0x9b, 0xd6, 0x3c, 0x43, 0xe9, 0xeb, 0xcd, + 0x68, 0xcb, 0x6a, 0xcc, 0x54, 0x13, 0xed, 0xb2, 0xd9, 0xd2, 0xb9, 0x62, 0x2b, 0xd4, 0xda, 0xcf, + 0xb3, 0xeb, 0x5c, 0xc9, 0xa5, 0x9e, 0x61, 0x87, 0x1d, 0xf2, 0x04, 0x0c, 0xe6, 0xd9, 0x7a, 0xa1, + 0x2d, 0xa9, 0x78, 0x2f, 0xb3, 0xa3, 0x9e, 0x1d, 0x2e, 0xb3, 0xc9, 0x74, 0x9b, 0x1c, 0x41, 0x1d, + 0xa3, 0xc4, 0x11, 0xdd, 0xb6, 0xd4, 0xb9, 0x93, 0x59, 0xa2, 0x94, 0x8d, 0xb6, 0x2c, 0x8d, 0x1a, + 0x36, 0xa0, 0x76, 0x45, 0x97, 0x6b, 0x66, 0x7e, 0x04, 0xad, 0x44, 0xa4, 0x90, 0x2e, 0x34, 0x5c, + 0xc6, 0x39, 0x9d, 0xb3, 0x6e, 0xe9, 0xa0, 0xd4, 0x37, 0xac, 0xb0, 0x6b, 0x76, 0xa0, 0x9d, 0x8c, + 0x93, 0x84, 0x22, 0xc6, 0x02, 0x2a, 0x5e, 0xb1, 0x15, 0xc7, 0x00, 0xd0, 0x8a, 0xba, 0x6b, 0x3e, + 0x87, 0xdd, 0x6c, 0x10, 0x90, 0x5d, 0xa8, 0xbc, 0x65, 0xd7, 0x1a, 0x89, 0x4d, 0x72, 0x47, 0x2f, + 0x48, 0x46, 0xb1, 0x61, 0xe9, 0xd5, 0xf9, 0x91, 0x6e, 0x14, 0x06, 0xe4, 0x29, 0xc0, 0x15, 0x5d, + 0x3a, 0x36, 0x15, 0xfe, 0x8a, 0x77, 0x4b, 0x07, 0x95, 0x7e, 0xeb, 0x78, 0x57, 0x9b, 0xfb, 0x26, + 0x14, 0x0c, 0xab, 0x7f, 0xbf, 0x79, 0xb8, 0x65, 0x25, 0x90, 0xe4, 0xc7, 0xb0, 0x3d, 0x67, 0x1e, + 0xe3, 0x0e, 0x9f, 0x4c, 0xaf, 0x05, 0xe3, 0x72, 0xa6, 0xb6, 0xd5, 0xd6, 0x1f, 0x87, 0xf8, 0xcd, + 0xb4, 0x23, 0x2b, 0x65, 0x08, 0x11, 0x02, 0x55, 0x9b, 0x0a, 0x2a, 0x57, 0xda, 0xb6, 0x64, 0x1b, + 0xbf, 0x05, 0x54, 0x2c, 0xf4, 0x4a, 0x65, 0x9b, 0xdc, 0x83, 0xfa, 0x82, 0x39, 0xf3, 0x85, 0x90, + 0x47, 0xab, 0x62, 0xe9, 0x1e, 0x9a, 0x15, 0xac, 0xfc, 0x2b, 0x26, 0x4f, 0x51, 0xd3, 0x52, 0x1d, + 0xf3, 0x9f, 0x25, 0xd8, 0xbb, 0x15, 0x76, 0x38, 0xee, 0x82, 0xf2, 0x45, 0x38, 0x17, 0xb6, 0xc9, + 0x23, 0x1c, 0x97, 0xda, 0x6c, 0xa5, 0x4f, 0xf7, 0xb6, 0x36, 0x74, 0x24, 0x3f, 0x6a, 0x2b, 0x35, + 0x84, 0x3c, 0x82, 0x3d, 0x3a, 0xe5, 0xcc, 0x13, 0x93, 0x84, 0x83, 0x2a, 0x07, 0x95, 0x7e, 0xdb, + 0xda, 0x55, 0x82, 0x37, 0xb1, 0x3b, 0x46, 0x70, 0x67, 0x7a, 0xfd, 0x8e, 0x7a, 0xc2, 0xf1, 0x58, + 0x12, 0x5f, 0x95, 0x0e, 0xdd, 0xd1, 0xf3, 0xbc, 0xb8, 0x72, 0x6c, 0xe6, 0xcd, 0x98, 0x9e, 0x69, + 0x3f, 0x52, 0x89, 0x47, 0x32, 0x0f, 0xa0, 0x93, 0x3e, 0x09, 0xa4, 0x03, 0x65, 0xb1, 0xd1, 0x76, + 0x94, 0xc5, 0xc6, 0x34, 0xa3, 0x6d, 0x8c, 0xa2, 0xfe, 0x16, 0xe6, 0x10, 0x76, 0x32, 0x01, 0x9e, + 0x70, 0x6a, 0x29, 0xe9, 0x54, 0x73, 0x07, 0xb6, 0x53, 0x71, 0x6d, 0x7e, 0x53, 0x83, 0xa6, 0xc5, + 0x78, 0xe0, 0x7b, 0x9c, 0x91, 0x67, 0x60, 0xb0, 0xcd, 0x8c, 0x29, 0x32, 0x2a, 0x65, 0x8e, 0xba, + 0xc2, 0xbc, 0x08, 0xe5, 0x78, 0xf6, 0x22, 0x30, 0x39, 0x4c, 0x11, 0xe9, 0x7e, 0x56, 0x29, 0xc9, + 0xa4, 0x8f, 0xd3, 0x4c, 0x7a, 0x27, 0x83, 0xcd, 0x50, 0xe9, 0x61, 0x8a, 0x4a, 0xb3, 0x03, 0xa7, + 0xb8, 0xf4, 0x24, 0x87, 0x4b, 0xb3, 0xcb, 0x2f, 0x20, 0xd3, 0x93, 0x1c, 0x32, 0xed, 0xde, 0x9a, + 0x2b, 0x97, 0x4d, 0x1f, 0xa7, 0xd9, 0x34, 0x6b, 0x4e, 0x86, 0x4e, 0x7f, 0x99, 0x47, 0xa7, 0x0f, + 0x32, 0x3a, 0x85, 0x7c, 0xfa, 0xc9, 0x2d, 0x3e, 0xbd, 0x97, 0x51, 0xcd, 0x21, 0xd4, 0x93, 0x14, + 0xa1, 0x42, 0xae, 0x6d, 0x05, 0x8c, 0xfa, 0xf4, 0x36, 0xa3, 0xde, 0xcf, 0x6e, 0x6d, 0x1e, 0xa5, + 0x0e, 0x32, 0x94, 0x7a, 0x37, 0xbb, 0xca, 0x42, 0x4e, 0x3d, 0xc4, 0xd3, 0x9d, 0x89, 0x34, 0x64, + 0x02, 0xb6, 0x5a, 0xf9, 0x2b, 0x4d, 0x7a, 0xaa, 0x63, 0xf6, 0x91, 0x6f, 0xe2, 0xf8, 0xfa, 0x0e, + 0xfe, 0x95, 0x41, 0x9f, 0x88, 0x2e, 0xf3, 0xcf, 0xa5, 0x58, 0x57, 0x52, 0x70, 0x92, 0xab, 0x0c, + 0xcd, 0x55, 0x09, 0x5a, 0x2e, 0xa7, 0x68, 0x99, 0xfc, 0x14, 0xf6, 0x96, 0x94, 0x0b, 0xe5, 0x97, + 0x49, 0x8a, 0xbc, 0x76, 0x50, 0xa0, 0x1c, 0xa2, 0x58, 0xec, 0x63, 0xd8, 0x4f, 0x60, 0x69, 0x10, + 0x4c, 0x24, 0x51, 0x55, 0xe5, 0xe1, 0xdd, 0x8d, 0xd0, 0xa7, 0x41, 0x30, 0xa2, 0x7c, 0x61, 0xfe, + 0x36, 0xb6, 0x3f, 0xa6, 0x7c, 0x02, 0xd5, 0x99, 0x6f, 0x2b, 0xb3, 0xb6, 0x2d, 0xd9, 0xc6, 0x34, + 0xb0, 0xf4, 0xe7, 0x72, 0x56, 0xc3, 0xc2, 0x26, 0xa2, 0xa2, 0x93, 0x62, 0xa8, 0x23, 0x61, 0xbe, + 0x8a, 0x87, 0xfb, 0xbf, 0xb3, 0x80, 0xf9, 0xd7, 0x52, 0xec, 0xc7, 0x88, 0xe2, 0xdf, 0x6f, 0x61, + 0xb8, 0xa5, 0x8e, 0x67, 0xb3, 0x8d, 0x3c, 0xa6, 0x15, 0x4b, 0x75, 0xc2, 0xdc, 0x56, 0x97, 0xce, + 0x49, 0xe7, 0xb6, 0x86, 0xfc, 0xa6, 0x3a, 0x3a, 0x35, 0xf8, 0x97, 0xf2, 0xfc, 0xb4, 0x2d, 0xd5, + 0x49, 0x70, 0x9e, 0x91, 0xe2, 0xbc, 0x0b, 0x20, 0xb7, 0x4f, 0x16, 0x79, 0x0e, 0x55, 0x41, 0xe7, + 0xa1, 0xfd, 0x9d, 0x23, 0x55, 0x29, 0x1e, 0xbd, 0x7a, 0x73, 0x41, 0x9d, 0xd5, 0xf0, 0x1e, 0x5a, + 0xff, 0xef, 0x9b, 0x87, 0x1d, 0xc4, 0x3c, 0xf6, 0x5d, 0x47, 0x30, 0x37, 0x10, 0xd7, 0x96, 0xd4, + 0x31, 0xff, 0x53, 0x42, 0xc6, 0x4d, 0x9d, 0xb8, 0x5c, 0x5f, 0x84, 0x61, 0x55, 0x4e, 0xa4, 0xc0, + 0xef, 0xe7, 0x9f, 0x1f, 0x01, 0xcc, 0x29, 0x9f, 0x7c, 0x4d, 0x3d, 0xc1, 0x6c, 0xed, 0x24, 0x63, + 0x4e, 0xf9, 0x1f, 0xe4, 0x07, 0xf2, 0x00, 0x9a, 0x28, 0x5e, 0x73, 0x66, 0x4b, 0x6f, 0x55, 0xac, + 0xc6, 0x9c, 0xf2, 0x2f, 0x39, 0xb3, 0x23, 0xbb, 0x1a, 0xff, 0xbb, 0x5d, 0xa4, 0x0f, 0x95, 0x4b, + 0xc6, 0x34, 0x2b, 0xed, 0x46, 0xaa, 0xe3, 0xa7, 0xbf, 0x90, 0xca, 0x2a, 0x24, 0x10, 0x62, 0xfe, + 0xa9, 0x1c, 0x47, 0x56, 0x9c, 0x98, 0x7e, 0x58, 0x3e, 0xf8, 0x57, 0x09, 0x73, 0x73, 0x9a, 0x06, + 0xc9, 0x19, 0xec, 0x45, 0x47, 0x66, 0xb2, 0x0e, 0x6c, 0x8a, 0xe5, 0xd2, 0x77, 0x9f, 0xb1, 0xdd, + 0x48, 0xe1, 0x4b, 0x85, 0x27, 0xbf, 0x83, 0xfb, 0x33, 0x1c, 0xd5, 0xe3, 0x6b, 0x3e, 0x09, 0xe8, + 0x8a, 0xba, 0xd1, 0x50, 0xe5, 0x14, 0xed, 0x9f, 0x85, 0xa8, 0x0b, 0x04, 0x71, 0xeb, 0xee, 0x2c, + 0xf5, 0x21, 0x1c, 0x2f, 0xf4, 0x47, 0xe5, 0x3d, 0x62, 0xfd, 0x27, 0x58, 0xa2, 0x24, 0x69, 0x3b, + 0x6f, 0x47, 0xcd, 0xbf, 0x94, 0x60, 0x27, 0xb3, 0x18, 0x32, 0x00, 0x50, 0xac, 0xc7, 0x9d, 0x77, + 0x4c, 0x97, 0x13, 0xa1, 0x0f, 0xa4, 0xb3, 0xbe, 0x70, 0xde, 0x31, 0xcb, 0x98, 0x86, 0x4d, 0xf2, + 0x21, 0x34, 0xc4, 0x46, 0xa1, 0xd3, 0x25, 0xdb, 0xeb, 0x8d, 0x84, 0xd6, 0x85, 0xfc, 0x27, 0x4f, + 0xa0, 0xad, 0x06, 0x9e, 0xfb, 0x9c, 0x3b, 0x81, 0x2e, 0x24, 0x48, 0x72, 0xe8, 0x97, 0x52, 0x62, + 0xb5, 0xa6, 0x71, 0xc7, 0xfc, 0x23, 0x18, 0xd1, 0xb4, 0xe4, 0x03, 0x30, 0x5c, 0xba, 0xd1, 0xe5, + 0x2c, 0xae, 0xad, 0x66, 0x35, 0x5d, 0xba, 0x91, 0xa5, 0x2c, 0xb9, 0x0f, 0x0d, 0x14, 0x8a, 0x8d, + 0xf2, 0x77, 0xcd, 0xaa, 0xbb, 0x74, 0xf3, 0x7a, 0x13, 0x09, 0xe6, 0x94, 0x87, 0xc5, 0xaa, 0x4b, + 0x37, 0x2f, 0x29, 0x37, 0x3f, 0x83, 0xba, 0x5a, 0xe4, 0xf7, 0x1a, 0x18, 0xf5, 0xcb, 0x29, 0xfd, + 0x5f, 0x41, 0x2b, 0xb1, 0x6e, 0xf2, 0x73, 0xb8, 0xab, 0x2c, 0x0c, 0xe8, 0x4a, 0x48, 0x8f, 0xa4, + 0x06, 0x24, 0x52, 0x78, 0x41, 0x57, 0x02, 0xa7, 0x54, 0xe5, 0xf7, 0x3f, 0xca, 0x50, 0x57, 0xa5, + 0x2d, 0xf9, 0x10, 0xcb, 0x04, 0xea, 0x78, 0x13, 0xc7, 0x56, 0x19, 0x6d, 0xd8, 0xfa, 0xf6, 0xe6, + 0x61, 0x43, 0xb2, 0xff, 0xf8, 0x1c, 0x2b, 0x03, 0x6c, 0xd8, 0x09, 0xc2, 0x2c, 0xa7, 0x2a, 0x6f, + 0x02, 0x55, 0xe1, 0xb8, 0x4c, 0x9b, 0x28, 0xdb, 0xb8, 0x72, 0x6f, 0xed, 0x4a, 0x97, 0x54, 0x95, + 0x4b, 0xbc, 0xb5, 0x8b, 0x2e, 0x79, 0x09, 0xdb, 0x89, 0x04, 0xe7, 0xd8, 0xba, 0xf0, 0xea, 0x24, + 0x77, 0x63, 0x7c, 0x3e, 0xdc, 0xc7, 0x20, 0xfb, 0xf6, 0xe6, 0x61, 0xeb, 0x37, 0x61, 0xca, 0x1b, + 0x9f, 0x5b, 0xad, 0x28, 0xff, 0x8d, 0x6d, 0xd2, 0x07, 0x99, 0x0e, 0x27, 0xaa, 0x24, 0x50, 0x69, + 0x52, 0x65, 0x82, 0x0e, 0x7e, 0xd7, 0x35, 0x03, 0x56, 0xf6, 0x1f, 0x80, 0x81, 0x41, 0xa7, 0x20, + 0x2a, 0x31, 0x34, 0xf1, 0x83, 0x14, 0x7e, 0x04, 0x3b, 0x71, 0xce, 0x52, 0x10, 0x95, 0x25, 0x3a, + 0xf1, 0x67, 0x09, 0x7c, 0x00, 0xcd, 0x28, 0x1d, 0x1b, 0x12, 0xd1, 0xa0, 0x3a, 0x0b, 0x7f, 0x0e, + 0x0d, 0xbd, 0xc4, 0xdc, 0x9b, 0xc5, 0xcf, 0xa0, 0x86, 0xfb, 0x12, 0x1e, 0xc6, 0xb0, 0xe4, 0x93, + 0xfb, 0xc1, 0x44, 0xea, 0x7e, 0xa1, 0x80, 0xe6, 0x09, 0x6c, 0xa7, 0xa4, 0x98, 0xc1, 0x84, 0x2f, + 0xe8, 0x52, 0x6f, 0xa8, 0xea, 0x44, 0x93, 0x95, 0xe3, 0xc9, 0xcc, 0xe7, 0x60, 0x44, 0x84, 0x81, + 0xbb, 0x10, 0xac, 0xa7, 0x93, 0xf0, 0x02, 0xd8, 0xb6, 0xea, 0xc1, 0x7a, 0xfa, 0x4a, 0xe5, 0xc9, + 0xc0, 0xff, 0x5a, 0xdf, 0x75, 0x2a, 0x96, 0xea, 0x98, 0x9f, 0x42, 0x33, 0xbc, 0x85, 0x14, 0xab, + 0x16, 0x44, 0xc1, 0xf1, 0x37, 0x35, 0xd8, 0x39, 0x1d, 0x9e, 0x8d, 0x4f, 0x83, 0x60, 0xe9, 0xcc, + 0xa8, 0xac, 0x44, 0x06, 0x50, 0x95, 0xb5, 0x56, 0xce, 0x4b, 0x49, 0x2f, 0xaf, 0xe8, 0x27, 0xc7, + 0x50, 0x93, 0x25, 0x17, 0xc9, 0x7b, 0x30, 0xe9, 0xe5, 0xd6, 0xfe, 0x38, 0x89, 0x2a, 0xca, 0x6e, + 0xbf, 0x9b, 0xf4, 0xf2, 0x2e, 0x00, 0xe4, 0x33, 0x30, 0xe2, 0x62, 0xa9, 0xe8, 0xf5, 0xa4, 0x57, + 0x78, 0x15, 0x40, 0xfd, 0x38, 0x87, 0x15, 0xbd, 0x35, 0xf4, 0x0a, 0x6b, 0x66, 0xf2, 0x0c, 0x1a, + 0x61, 0x15, 0x90, 0xff, 0xbe, 0xd1, 0x2b, 0x28, 0xd3, 0xd1, 0x3d, 0xaa, 0x92, 0xca, 0x7b, 0x84, + 0xe9, 0xe5, 0xde, 0x25, 0xc8, 0x13, 0xa8, 0x6b, 0x22, 0xce, 0x7d, 0xa9, 0xe8, 0xe5, 0x17, 0xdb, + 0x68, 0x64, 0x5c, 0x02, 0x16, 0x3d, 0x14, 0xf5, 0x0a, 0x2f, 0x3d, 0xe4, 0x14, 0x20, 0x51, 0x3d, + 0x15, 0xbe, 0x00, 0xf5, 0x8a, 0x2f, 0x33, 0x04, 0xc3, 0x31, 0xba, 0xa0, 0xe6, 0xbf, 0xcc, 0xf4, + 0x8a, 0xee, 0x17, 0xd3, 0xba, 0x7c, 0xbd, 0xfb, 0xe4, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, + 0xb9, 0xc1, 0xc6, 0x39, 0x14, 0x00, 0x00, } diff --git a/types/types.proto b/types/types.proto index fc1994ed..0e177a41 100644 --- a/types/types.proto +++ b/types/types.proto @@ -144,6 +144,7 @@ message ResponseQuery { } message ResponseBeginBlock { + repeated common.KVPair tags = 1 [(gogoproto.nullable)=false, (gogoproto.jsontag)="tags,omitempty"]; } message ResponseCheckTx { @@ -171,6 +172,7 @@ message ResponseDeliverTx { message ResponseEndBlock { repeated Validator validator_updates = 1 [(gogoproto.nullable)=false]; ConsensusParams consensus_param_updates = 2; + repeated common.KVPair tags = 3 [(gogoproto.nullable)=false, (gogoproto.jsontag)="tags,omitempty"]; } message ResponseCommit { From a13a2529bfc22bf32e0c806d2db6e2fbe119a5a9 Mon Sep 17 00:00:00 2001 From: Zach Ramsay Date: Wed, 16 May 2018 09:30:49 -0400 Subject: [PATCH 08/40] circle: fix config.yml --- .circleci/config.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index fd22668a..d147c6ac 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -58,7 +58,7 @@ jobs: - run: name: Run integration tests command: | - find . -path ./vendor -prune -o -name "*.sock" -exec rm {} \; + export PATH="$GOBIN:$PATH" bash tests/test.sh test_cover: @@ -112,10 +112,8 @@ workflows: requires: - setup_dependencies - test_integration: - requires: + requires: - setup_dependencies - upload_coverage: requires: - - test_integrations - - + - test_integration From 64c796f1d2f3837817b869b2b836969f4ba8e2ae Mon Sep 17 00:00:00 2001 From: Max Date: Wed, 16 May 2018 16:25:28 +0900 Subject: [PATCH 09/40] A redundant "listen address" flag removed --- cmd/abci-cli/abci-cli.go | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/cmd/abci-cli/abci-cli.go b/cmd/abci-cli/abci-cli.go index 4dc5e96e..2743fa2b 100644 --- a/cmd/abci-cli/abci-cli.go +++ b/cmd/abci-cli/abci-cli.go @@ -44,11 +44,9 @@ var ( flagProve bool // counter - flagAddrC string flagSerial bool // kvstore - flagAddrD string flagPersist string ) @@ -125,17 +123,14 @@ func addQueryFlags() { } func addCounterFlags() { - counterCmd.PersistentFlags().StringVarP(&flagAddrC, "addr", "", "tcp://0.0.0.0:46658", "listen address") counterCmd.PersistentFlags().BoolVarP(&flagSerial, "serial", "", false, "enforce incrementing (serial) transactions") } func addDummyFlags() { - dummyCmd.PersistentFlags().StringVarP(&flagAddrD, "addr", "", "tcp://0.0.0.0:46658", "listen address") dummyCmd.PersistentFlags().StringVarP(&flagPersist, "persist", "", "", "directory to use for a database") } func addKVStoreFlags() { - kvstoreCmd.PersistentFlags().StringVarP(&flagAddrD, "addr", "", "tcp://0.0.0.0:46658", "listen address") kvstoreCmd.PersistentFlags().StringVarP(&flagPersist, "persist", "", "", "directory to use for a database") } @@ -659,7 +654,7 @@ func cmdCounter(cmd *cobra.Command, args []string) error { logger := log.NewTMLogger(log.NewSyncWriter(os.Stdout)) // Start the listener - srv, err := server.NewServer(flagAddrC, flagAbci, app) + srv, err := server.NewServer(flagAddress, flagAbci, app) if err != nil { return err } @@ -689,7 +684,7 @@ func cmdKVStore(cmd *cobra.Command, args []string) error { } // Start the listener - srv, err := server.NewServer(flagAddrD, flagAbci, app) + srv, err := server.NewServer(flagAddress, flagAbci, app) if err != nil { return err } From 4c73ceee08d6137e2f16071e0a2ae193f9877c2e Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Thu, 17 May 2018 19:46:00 +0200 Subject: [PATCH 10/40] Add time field to abci.Evidence --- types/types.pb.go | 232 ++++++++++++++++++++++++---------------------- types/types.proto | 1 + 2 files changed, 121 insertions(+), 112 deletions(-) diff --git a/types/types.pb.go b/types/types.pb.go index 70d749aa..639855ee 100644 --- a/types/types.pb.go +++ b/types/types.pb.go @@ -1801,6 +1801,7 @@ func (m *Validator) GetPower() int64 { type Evidence struct { PubKey []byte `protobuf:"bytes,1,opt,name=pub_key,json=pubKey,proto3" json:"pub_key,omitempty"` Height int64 `protobuf:"varint,2,opt,name=height,proto3" json:"height,omitempty"` + Time int64 `protobuf:"varint,3,opt,name=time,proto3" json:"time,omitempty"` } func (m *Evidence) Reset() { *m = Evidence{} } @@ -1822,6 +1823,13 @@ func (m *Evidence) GetHeight() int64 { return 0 } +func (m *Evidence) GetTime() int64 { + if m != nil { + return m.Time + } + return 0 +} + func init() { proto.RegisterType((*Request)(nil), "types.Request") proto.RegisterType((*RequestEcho)(nil), "types.RequestEcho") @@ -2264,116 +2272,116 @@ var _ABCIApplication_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("types/types.proto", fileDescriptorTypes) } var fileDescriptorTypes = []byte{ - // 1767 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0xcd, 0x72, 0x1b, 0xc7, - 0x11, 0x26, 0xfe, 0xb1, 0x0d, 0x10, 0x24, 0x87, 0xfa, 0x81, 0xe0, 0x4a, 0x89, 0xb5, 0x49, 0xd9, - 0x60, 0x24, 0x13, 0x09, 0x1d, 0xa9, 0x44, 0x39, 0xe5, 0x0a, 0x41, 0x2a, 0x02, 0x4a, 0x49, 0xcc, - 0xac, 0x65, 0xa5, 0x2a, 0x17, 0xd4, 0x00, 0x3b, 0x04, 0xb6, 0x84, 0xfd, 0x31, 0x66, 0x40, 0x83, - 0xba, 0xe5, 0xee, 0x7b, 0xce, 0x79, 0x88, 0xbc, 0x42, 0x2a, 0xa9, 0xbc, 0x03, 0x0f, 0xce, 0x2d, - 0x2f, 0x91, 0x54, 0xcf, 0xcc, 0xfe, 0x72, 0xd7, 0xe5, 0x28, 0x47, 0x5f, 0x80, 0x99, 0xed, 0xaf, - 0x67, 0xa6, 0x7b, 0x7a, 0xbe, 0xee, 0x19, 0xd8, 0x13, 0xd7, 0x01, 0xe3, 0x03, 0xf9, 0x7b, 0x14, - 0xac, 0x7c, 0xe1, 0x93, 0x9a, 0xec, 0xf4, 0x3e, 0x9e, 0x3b, 0x62, 0xb1, 0x9e, 0x1e, 0xcd, 0x7c, - 0x77, 0x30, 0xf7, 0xe7, 0xfe, 0x40, 0x4a, 0xa7, 0xeb, 0x4b, 0xd9, 0x93, 0x1d, 0xd9, 0x52, 0x5a, - 0xbd, 0x41, 0x02, 0x2e, 0x98, 0x67, 0xb3, 0x95, 0xeb, 0x78, 0x62, 0x20, 0xdc, 0xa5, 0x33, 0xe5, - 0x83, 0x99, 0xef, 0xba, 0xbe, 0x97, 0x9c, 0xc6, 0xfc, 0x5b, 0x15, 0x1a, 0x16, 0xfb, 0x6a, 0xcd, - 0xb8, 0x20, 0x7d, 0xa8, 0xb2, 0xd9, 0xc2, 0xef, 0x96, 0x0f, 0x4a, 0xfd, 0xd6, 0x31, 0x39, 0x52, - 0x38, 0x2d, 0x7d, 0x31, 0x5b, 0xf8, 0xa3, 0x2d, 0x4b, 0x22, 0xc8, 0x23, 0xa8, 0x5d, 0x2e, 0xd7, - 0x7c, 0xd1, 0xad, 0x48, 0xe8, 0x7e, 0x1a, 0xfa, 0x6b, 0x14, 0x8d, 0xb6, 0x2c, 0x85, 0xc1, 0x61, - 0x1d, 0xef, 0xd2, 0xef, 0x56, 0xf3, 0x86, 0x1d, 0x7b, 0x97, 0x72, 0x58, 0x44, 0x90, 0x67, 0x00, - 0x9c, 0x89, 0x89, 0x1f, 0x08, 0xc7, 0xf7, 0xba, 0x35, 0x89, 0xbf, 0x9f, 0xc6, 0x7f, 0xc1, 0xc4, - 0xe7, 0x52, 0x3c, 0xda, 0xb2, 0x0c, 0x1e, 0x76, 0x50, 0xd3, 0xf1, 0x1c, 0x31, 0x99, 0x2d, 0xa8, - 0xe3, 0x75, 0xeb, 0x79, 0x9a, 0x63, 0xcf, 0x11, 0x67, 0x28, 0x46, 0x4d, 0x27, 0xec, 0xa0, 0x29, - 0x5f, 0xad, 0xd9, 0xea, 0xba, 0xdb, 0xc8, 0x33, 0xe5, 0xf7, 0x28, 0x42, 0x53, 0x24, 0x86, 0x7c, - 0x0a, 0xad, 0x29, 0x9b, 0x3b, 0xde, 0x64, 0xba, 0xf4, 0x67, 0x6f, 0xbb, 0x4d, 0xa9, 0xd2, 0x4d, - 0xab, 0x0c, 0x11, 0x30, 0x44, 0xf9, 0x68, 0xcb, 0x82, 0x69, 0xd4, 0x23, 0xc7, 0xd0, 0x9c, 0x2d, - 0xd8, 0xec, 0xed, 0x44, 0x6c, 0xba, 0x86, 0xd4, 0xbc, 0x9b, 0xd6, 0x3c, 0x43, 0xe9, 0xeb, 0xcd, - 0x68, 0xcb, 0x6a, 0xcc, 0x54, 0x13, 0xed, 0xb2, 0xd9, 0xd2, 0xb9, 0x62, 0x2b, 0xd4, 0xda, 0xcf, - 0xb3, 0xeb, 0x5c, 0xc9, 0xa5, 0x9e, 0x61, 0x87, 0x1d, 0xf2, 0x04, 0x0c, 0xe6, 0xd9, 0x7a, 0xa1, - 0x2d, 0xa9, 0x78, 0x2f, 0xb3, 0xa3, 0x9e, 0x1d, 0x2e, 0xb3, 0xc9, 0x74, 0x9b, 0x1c, 0x41, 0x1d, - 0xa3, 0xc4, 0x11, 0xdd, 0xb6, 0xd4, 0xb9, 0x93, 0x59, 0xa2, 0x94, 0x8d, 0xb6, 0x2c, 0x8d, 0x1a, - 0x36, 0xa0, 0x76, 0x45, 0x97, 0x6b, 0x66, 0x7e, 0x04, 0xad, 0x44, 0xa4, 0x90, 0x2e, 0x34, 0x5c, - 0xc6, 0x39, 0x9d, 0xb3, 0x6e, 0xe9, 0xa0, 0xd4, 0x37, 0xac, 0xb0, 0x6b, 0x76, 0xa0, 0x9d, 0x8c, - 0x93, 0x84, 0x22, 0xc6, 0x02, 0x2a, 0x5e, 0xb1, 0x15, 0xc7, 0x00, 0xd0, 0x8a, 0xba, 0x6b, 0x3e, - 0x87, 0xdd, 0x6c, 0x10, 0x90, 0x5d, 0xa8, 0xbc, 0x65, 0xd7, 0x1a, 0x89, 0x4d, 0x72, 0x47, 0x2f, - 0x48, 0x46, 0xb1, 0x61, 0xe9, 0xd5, 0xf9, 0x91, 0x6e, 0x14, 0x06, 0xe4, 0x29, 0xc0, 0x15, 0x5d, - 0x3a, 0x36, 0x15, 0xfe, 0x8a, 0x77, 0x4b, 0x07, 0x95, 0x7e, 0xeb, 0x78, 0x57, 0x9b, 0xfb, 0x26, - 0x14, 0x0c, 0xab, 0x7f, 0xbf, 0x79, 0xb8, 0x65, 0x25, 0x90, 0xe4, 0xc7, 0xb0, 0x3d, 0x67, 0x1e, - 0xe3, 0x0e, 0x9f, 0x4c, 0xaf, 0x05, 0xe3, 0x72, 0xa6, 0xb6, 0xd5, 0xd6, 0x1f, 0x87, 0xf8, 0xcd, - 0xb4, 0x23, 0x2b, 0x65, 0x08, 0x11, 0x02, 0x55, 0x9b, 0x0a, 0x2a, 0x57, 0xda, 0xb6, 0x64, 0x1b, - 0xbf, 0x05, 0x54, 0x2c, 0xf4, 0x4a, 0x65, 0x9b, 0xdc, 0x83, 0xfa, 0x82, 0x39, 0xf3, 0x85, 0x90, - 0x47, 0xab, 0x62, 0xe9, 0x1e, 0x9a, 0x15, 0xac, 0xfc, 0x2b, 0x26, 0x4f, 0x51, 0xd3, 0x52, 0x1d, - 0xf3, 0x9f, 0x25, 0xd8, 0xbb, 0x15, 0x76, 0x38, 0xee, 0x82, 0xf2, 0x45, 0x38, 0x17, 0xb6, 0xc9, - 0x23, 0x1c, 0x97, 0xda, 0x6c, 0xa5, 0x4f, 0xf7, 0xb6, 0x36, 0x74, 0x24, 0x3f, 0x6a, 0x2b, 0x35, - 0x84, 0x3c, 0x82, 0x3d, 0x3a, 0xe5, 0xcc, 0x13, 0x93, 0x84, 0x83, 0x2a, 0x07, 0x95, 0x7e, 0xdb, - 0xda, 0x55, 0x82, 0x37, 0xb1, 0x3b, 0x46, 0x70, 0x67, 0x7a, 0xfd, 0x8e, 0x7a, 0xc2, 0xf1, 0x58, - 0x12, 0x5f, 0x95, 0x0e, 0xdd, 0xd1, 0xf3, 0xbc, 0xb8, 0x72, 0x6c, 0xe6, 0xcd, 0x98, 0x9e, 0x69, - 0x3f, 0x52, 0x89, 0x47, 0x32, 0x0f, 0xa0, 0x93, 0x3e, 0x09, 0xa4, 0x03, 0x65, 0xb1, 0xd1, 0x76, - 0x94, 0xc5, 0xc6, 0x34, 0xa3, 0x6d, 0x8c, 0xa2, 0xfe, 0x16, 0xe6, 0x10, 0x76, 0x32, 0x01, 0x9e, - 0x70, 0x6a, 0x29, 0xe9, 0x54, 0x73, 0x07, 0xb6, 0x53, 0x71, 0x6d, 0x7e, 0x53, 0x83, 0xa6, 0xc5, - 0x78, 0xe0, 0x7b, 0x9c, 0x91, 0x67, 0x60, 0xb0, 0xcd, 0x8c, 0x29, 0x32, 0x2a, 0x65, 0x8e, 0xba, - 0xc2, 0xbc, 0x08, 0xe5, 0x78, 0xf6, 0x22, 0x30, 0x39, 0x4c, 0x11, 0xe9, 0x7e, 0x56, 0x29, 0xc9, - 0xa4, 0x8f, 0xd3, 0x4c, 0x7a, 0x27, 0x83, 0xcd, 0x50, 0xe9, 0x61, 0x8a, 0x4a, 0xb3, 0x03, 0xa7, - 0xb8, 0xf4, 0x24, 0x87, 0x4b, 0xb3, 0xcb, 0x2f, 0x20, 0xd3, 0x93, 0x1c, 0x32, 0xed, 0xde, 0x9a, - 0x2b, 0x97, 0x4d, 0x1f, 0xa7, 0xd9, 0x34, 0x6b, 0x4e, 0x86, 0x4e, 0x7f, 0x99, 0x47, 0xa7, 0x0f, - 0x32, 0x3a, 0x85, 0x7c, 0xfa, 0xc9, 0x2d, 0x3e, 0xbd, 0x97, 0x51, 0xcd, 0x21, 0xd4, 0x93, 0x14, - 0xa1, 0x42, 0xae, 0x6d, 0x05, 0x8c, 0xfa, 0xf4, 0x36, 0xa3, 0xde, 0xcf, 0x6e, 0x6d, 0x1e, 0xa5, - 0x0e, 0x32, 0x94, 0x7a, 0x37, 0xbb, 0xca, 0x42, 0x4e, 0x3d, 0xc4, 0xd3, 0x9d, 0x89, 0x34, 0x64, - 0x02, 0xb6, 0x5a, 0xf9, 0x2b, 0x4d, 0x7a, 0xaa, 0x63, 0xf6, 0x91, 0x6f, 0xe2, 0xf8, 0xfa, 0x0e, - 0xfe, 0x95, 0x41, 0x9f, 0x88, 0x2e, 0xf3, 0xcf, 0xa5, 0x58, 0x57, 0x52, 0x70, 0x92, 0xab, 0x0c, - 0xcd, 0x55, 0x09, 0x5a, 0x2e, 0xa7, 0x68, 0x99, 0xfc, 0x14, 0xf6, 0x96, 0x94, 0x0b, 0xe5, 0x97, - 0x49, 0x8a, 0xbc, 0x76, 0x50, 0xa0, 0x1c, 0xa2, 0x58, 0xec, 0x63, 0xd8, 0x4f, 0x60, 0x69, 0x10, - 0x4c, 0x24, 0x51, 0x55, 0xe5, 0xe1, 0xdd, 0x8d, 0xd0, 0xa7, 0x41, 0x30, 0xa2, 0x7c, 0x61, 0xfe, - 0x36, 0xb6, 0x3f, 0xa6, 0x7c, 0x02, 0xd5, 0x99, 0x6f, 0x2b, 0xb3, 0xb6, 0x2d, 0xd9, 0xc6, 0x34, - 0xb0, 0xf4, 0xe7, 0x72, 0x56, 0xc3, 0xc2, 0x26, 0xa2, 0xa2, 0x93, 0x62, 0xa8, 0x23, 0x61, 0xbe, - 0x8a, 0x87, 0xfb, 0xbf, 0xb3, 0x80, 0xf9, 0xd7, 0x52, 0xec, 0xc7, 0x88, 0xe2, 0xdf, 0x6f, 0x61, - 0xb8, 0xa5, 0x8e, 0x67, 0xb3, 0x8d, 0x3c, 0xa6, 0x15, 0x4b, 0x75, 0xc2, 0xdc, 0x56, 0x97, 0xce, - 0x49, 0xe7, 0xb6, 0x86, 0xfc, 0xa6, 0x3a, 0x3a, 0x35, 0xf8, 0x97, 0xf2, 0xfc, 0xb4, 0x2d, 0xd5, - 0x49, 0x70, 0x9e, 0x91, 0xe2, 0xbc, 0x0b, 0x20, 0xb7, 0x4f, 0x16, 0x79, 0x0e, 0x55, 0x41, 0xe7, - 0xa1, 0xfd, 0x9d, 0x23, 0x55, 0x29, 0x1e, 0xbd, 0x7a, 0x73, 0x41, 0x9d, 0xd5, 0xf0, 0x1e, 0x5a, - 0xff, 0xef, 0x9b, 0x87, 0x1d, 0xc4, 0x3c, 0xf6, 0x5d, 0x47, 0x30, 0x37, 0x10, 0xd7, 0x96, 0xd4, - 0x31, 0xff, 0x53, 0x42, 0xc6, 0x4d, 0x9d, 0xb8, 0x5c, 0x5f, 0x84, 0x61, 0x55, 0x4e, 0xa4, 0xc0, - 0xef, 0xe7, 0x9f, 0x1f, 0x01, 0xcc, 0x29, 0x9f, 0x7c, 0x4d, 0x3d, 0xc1, 0x6c, 0xed, 0x24, 0x63, - 0x4e, 0xf9, 0x1f, 0xe4, 0x07, 0xf2, 0x00, 0x9a, 0x28, 0x5e, 0x73, 0x66, 0x4b, 0x6f, 0x55, 0xac, - 0xc6, 0x9c, 0xf2, 0x2f, 0x39, 0xb3, 0x23, 0xbb, 0x1a, 0xff, 0xbb, 0x5d, 0xa4, 0x0f, 0x95, 0x4b, - 0xc6, 0x34, 0x2b, 0xed, 0x46, 0xaa, 0xe3, 0xa7, 0xbf, 0x90, 0xca, 0x2a, 0x24, 0x10, 0x62, 0xfe, - 0xa9, 0x1c, 0x47, 0x56, 0x9c, 0x98, 0x7e, 0x58, 0x3e, 0xf8, 0x57, 0x09, 0x73, 0x73, 0x9a, 0x06, - 0xc9, 0x19, 0xec, 0x45, 0x47, 0x66, 0xb2, 0x0e, 0x6c, 0x8a, 0xe5, 0xd2, 0x77, 0x9f, 0xb1, 0xdd, - 0x48, 0xe1, 0x4b, 0x85, 0x27, 0xbf, 0x83, 0xfb, 0x33, 0x1c, 0xd5, 0xe3, 0x6b, 0x3e, 0x09, 0xe8, - 0x8a, 0xba, 0xd1, 0x50, 0xe5, 0x14, 0xed, 0x9f, 0x85, 0xa8, 0x0b, 0x04, 0x71, 0xeb, 0xee, 0x2c, - 0xf5, 0x21, 0x1c, 0x2f, 0xf4, 0x47, 0xe5, 0x3d, 0x62, 0xfd, 0x27, 0x58, 0xa2, 0x24, 0x69, 0x3b, - 0x6f, 0x47, 0xcd, 0xbf, 0x94, 0x60, 0x27, 0xb3, 0x18, 0x32, 0x00, 0x50, 0xac, 0xc7, 0x9d, 0x77, - 0x4c, 0x97, 0x13, 0xa1, 0x0f, 0xa4, 0xb3, 0xbe, 0x70, 0xde, 0x31, 0xcb, 0x98, 0x86, 0x4d, 0xf2, - 0x21, 0x34, 0xc4, 0x46, 0xa1, 0xd3, 0x25, 0xdb, 0xeb, 0x8d, 0x84, 0xd6, 0x85, 0xfc, 0x27, 0x4f, - 0xa0, 0xad, 0x06, 0x9e, 0xfb, 0x9c, 0x3b, 0x81, 0x2e, 0x24, 0x48, 0x72, 0xe8, 0x97, 0x52, 0x62, - 0xb5, 0xa6, 0x71, 0xc7, 0xfc, 0x23, 0x18, 0xd1, 0xb4, 0xe4, 0x03, 0x30, 0x5c, 0xba, 0xd1, 0xe5, - 0x2c, 0xae, 0xad, 0x66, 0x35, 0x5d, 0xba, 0x91, 0xa5, 0x2c, 0xb9, 0x0f, 0x0d, 0x14, 0x8a, 0x8d, - 0xf2, 0x77, 0xcd, 0xaa, 0xbb, 0x74, 0xf3, 0x7a, 0x13, 0x09, 0xe6, 0x94, 0x87, 0xc5, 0xaa, 0x4b, - 0x37, 0x2f, 0x29, 0x37, 0x3f, 0x83, 0xba, 0x5a, 0xe4, 0xf7, 0x1a, 0x18, 0xf5, 0xcb, 0x29, 0xfd, - 0x5f, 0x41, 0x2b, 0xb1, 0x6e, 0xf2, 0x73, 0xb8, 0xab, 0x2c, 0x0c, 0xe8, 0x4a, 0x48, 0x8f, 0xa4, - 0x06, 0x24, 0x52, 0x78, 0x41, 0x57, 0x02, 0xa7, 0x54, 0xe5, 0xf7, 0x3f, 0xca, 0x50, 0x57, 0xa5, - 0x2d, 0xf9, 0x10, 0xcb, 0x04, 0xea, 0x78, 0x13, 0xc7, 0x56, 0x19, 0x6d, 0xd8, 0xfa, 0xf6, 0xe6, - 0x61, 0x43, 0xb2, 0xff, 0xf8, 0x1c, 0x2b, 0x03, 0x6c, 0xd8, 0x09, 0xc2, 0x2c, 0xa7, 0x2a, 0x6f, - 0x02, 0x55, 0xe1, 0xb8, 0x4c, 0x9b, 0x28, 0xdb, 0xb8, 0x72, 0x6f, 0xed, 0x4a, 0x97, 0x54, 0x95, - 0x4b, 0xbc, 0xb5, 0x8b, 0x2e, 0x79, 0x09, 0xdb, 0x89, 0x04, 0xe7, 0xd8, 0xba, 0xf0, 0xea, 0x24, - 0x77, 0x63, 0x7c, 0x3e, 0xdc, 0xc7, 0x20, 0xfb, 0xf6, 0xe6, 0x61, 0xeb, 0x37, 0x61, 0xca, 0x1b, - 0x9f, 0x5b, 0xad, 0x28, 0xff, 0x8d, 0x6d, 0xd2, 0x07, 0x99, 0x0e, 0x27, 0xaa, 0x24, 0x50, 0x69, - 0x52, 0x65, 0x82, 0x0e, 0x7e, 0xd7, 0x35, 0x03, 0x56, 0xf6, 0x1f, 0x80, 0x81, 0x41, 0xa7, 0x20, - 0x2a, 0x31, 0x34, 0xf1, 0x83, 0x14, 0x7e, 0x04, 0x3b, 0x71, 0xce, 0x52, 0x10, 0x95, 0x25, 0x3a, - 0xf1, 0x67, 0x09, 0x7c, 0x00, 0xcd, 0x28, 0x1d, 0x1b, 0x12, 0xd1, 0xa0, 0x3a, 0x0b, 0x7f, 0x0e, - 0x0d, 0xbd, 0xc4, 0xdc, 0x9b, 0xc5, 0xcf, 0xa0, 0x86, 0xfb, 0x12, 0x1e, 0xc6, 0xb0, 0xe4, 0x93, - 0xfb, 0xc1, 0x44, 0xea, 0x7e, 0xa1, 0x80, 0xe6, 0x09, 0x6c, 0xa7, 0xa4, 0x98, 0xc1, 0x84, 0x2f, - 0xe8, 0x52, 0x6f, 0xa8, 0xea, 0x44, 0x93, 0x95, 0xe3, 0xc9, 0xcc, 0xe7, 0x60, 0x44, 0x84, 0x81, - 0xbb, 0x10, 0xac, 0xa7, 0x93, 0xf0, 0x02, 0xd8, 0xb6, 0xea, 0xc1, 0x7a, 0xfa, 0x4a, 0xe5, 0xc9, - 0xc0, 0xff, 0x5a, 0xdf, 0x75, 0x2a, 0x96, 0xea, 0x98, 0x9f, 0x42, 0x33, 0xbc, 0x85, 0x14, 0xab, - 0x16, 0x44, 0xc1, 0xf1, 0x37, 0x35, 0xd8, 0x39, 0x1d, 0x9e, 0x8d, 0x4f, 0x83, 0x60, 0xe9, 0xcc, - 0xa8, 0xac, 0x44, 0x06, 0x50, 0x95, 0xb5, 0x56, 0xce, 0x4b, 0x49, 0x2f, 0xaf, 0xe8, 0x27, 0xc7, - 0x50, 0x93, 0x25, 0x17, 0xc9, 0x7b, 0x30, 0xe9, 0xe5, 0xd6, 0xfe, 0x38, 0x89, 0x2a, 0xca, 0x6e, - 0xbf, 0x9b, 0xf4, 0xf2, 0x2e, 0x00, 0xe4, 0x33, 0x30, 0xe2, 0x62, 0xa9, 0xe8, 0xf5, 0xa4, 0x57, - 0x78, 0x15, 0x40, 0xfd, 0x38, 0x87, 0x15, 0xbd, 0x35, 0xf4, 0x0a, 0x6b, 0x66, 0xf2, 0x0c, 0x1a, - 0x61, 0x15, 0x90, 0xff, 0xbe, 0xd1, 0x2b, 0x28, 0xd3, 0xd1, 0x3d, 0xaa, 0x92, 0xca, 0x7b, 0x84, - 0xe9, 0xe5, 0xde, 0x25, 0xc8, 0x13, 0xa8, 0x6b, 0x22, 0xce, 0x7d, 0xa9, 0xe8, 0xe5, 0x17, 0xdb, - 0x68, 0x64, 0x5c, 0x02, 0x16, 0x3d, 0x14, 0xf5, 0x0a, 0x2f, 0x3d, 0xe4, 0x14, 0x20, 0x51, 0x3d, - 0x15, 0xbe, 0x00, 0xf5, 0x8a, 0x2f, 0x33, 0x04, 0xc3, 0x31, 0xba, 0xa0, 0xe6, 0xbf, 0xcc, 0xf4, - 0x8a, 0xee, 0x17, 0xd3, 0xba, 0x7c, 0xbd, 0xfb, 0xe4, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, - 0xb9, 0xc1, 0xc6, 0x39, 0x14, 0x00, 0x00, + // 1768 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0xcd, 0x72, 0x23, 0xb7, + 0x11, 0x16, 0xff, 0x39, 0x4d, 0x8a, 0x92, 0xa0, 0x95, 0xc4, 0xa5, 0x2b, 0x25, 0xd5, 0x24, 0x65, + 0x53, 0xd9, 0xb5, 0x98, 0xc8, 0xd9, 0xad, 0xd5, 0x3a, 0xe5, 0x8a, 0x28, 0x6d, 0x96, 0xac, 0x4d, + 0xb2, 0xca, 0x78, 0xbd, 0xa9, 0xca, 0x85, 0x05, 0x72, 0x20, 0x72, 0x6a, 0x39, 0x3f, 0x26, 0x40, + 0x99, 0xda, 0x5b, 0xee, 0xbe, 0xe7, 0x9c, 0x87, 0xc8, 0x2b, 0xa4, 0x92, 0xca, 0x3b, 0xe8, 0xe0, + 0xdc, 0xf2, 0x12, 0x49, 0x35, 0x80, 0xf9, 0xd5, 0xd0, 0x65, 0x3b, 0xc7, 0x5c, 0x48, 0x60, 0xfa, + 0x6b, 0x00, 0xdd, 0x68, 0x7c, 0xdd, 0x00, 0xec, 0x88, 0xdb, 0x80, 0xf1, 0x9e, 0xfc, 0x3d, 0x09, + 0x16, 0xbe, 0xf0, 0x49, 0x45, 0x76, 0x3a, 0x1f, 0x4f, 0x1d, 0x31, 0x5b, 0x8e, 0x4f, 0x26, 0xbe, + 0xdb, 0x9b, 0xfa, 0x53, 0xbf, 0x27, 0xa5, 0xe3, 0xe5, 0xb5, 0xec, 0xc9, 0x8e, 0x6c, 0x29, 0xad, + 0x4e, 0x2f, 0x01, 0x17, 0xcc, 0xb3, 0xd9, 0xc2, 0x75, 0x3c, 0xd1, 0x13, 0xee, 0xdc, 0x19, 0xf3, + 0xde, 0xc4, 0x77, 0x5d, 0xdf, 0x4b, 0x4e, 0x63, 0xfe, 0xad, 0x0c, 0x35, 0x8b, 0x7d, 0xb9, 0x64, + 0x5c, 0x90, 0x2e, 0x94, 0xd9, 0x64, 0xe6, 0xb7, 0x8b, 0x47, 0x85, 0x6e, 0xe3, 0x94, 0x9c, 0x28, + 0x9c, 0x96, 0xbe, 0x98, 0xcc, 0xfc, 0xc1, 0x86, 0x25, 0x11, 0xe4, 0x11, 0x54, 0xae, 0xe7, 0x4b, + 0x3e, 0x6b, 0x97, 0x24, 0x74, 0x37, 0x0d, 0xfd, 0x35, 0x8a, 0x06, 0x1b, 0x96, 0xc2, 0xe0, 0xb0, + 0x8e, 0x77, 0xed, 0xb7, 0xcb, 0x79, 0xc3, 0x0e, 0xbd, 0x6b, 0x39, 0x2c, 0x22, 0xc8, 0x33, 0x00, + 0xce, 0xc4, 0xc8, 0x0f, 0x84, 0xe3, 0x7b, 0xed, 0x8a, 0xc4, 0x1f, 0xa4, 0xf1, 0x9f, 0x33, 0xf1, + 0x5a, 0x8a, 0x07, 0x1b, 0x96, 0xc1, 0xc3, 0x0e, 0x6a, 0x3a, 0x9e, 0x23, 0x46, 0x93, 0x19, 0x75, + 0xbc, 0x76, 0x35, 0x4f, 0x73, 0xe8, 0x39, 0xe2, 0x02, 0xc5, 0xa8, 0xe9, 0x84, 0x1d, 0x34, 0xe5, + 0xcb, 0x25, 0x5b, 0xdc, 0xb6, 0x6b, 0x79, 0xa6, 0xfc, 0x1e, 0x45, 0x68, 0x8a, 0xc4, 0x90, 0x4f, + 0xa1, 0x31, 0x66, 0x53, 0xc7, 0x1b, 0x8d, 0xe7, 0xfe, 0xe4, 0x5d, 0xbb, 0x2e, 0x55, 0xda, 0x69, + 0x95, 0x3e, 0x02, 0xfa, 0x28, 0x1f, 0x6c, 0x58, 0x30, 0x8e, 0x7a, 0xe4, 0x14, 0xea, 0x93, 0x19, + 0x9b, 0xbc, 0x1b, 0x89, 0x55, 0xdb, 0x90, 0x9a, 0x7b, 0x69, 0xcd, 0x0b, 0x94, 0xbe, 0x59, 0x0d, + 0x36, 0xac, 0xda, 0x44, 0x35, 0xd1, 0x2e, 0x9b, 0xcd, 0x9d, 0x1b, 0xb6, 0x40, 0xad, 0xdd, 0x3c, + 0xbb, 0x2e, 0x95, 0x5c, 0xea, 0x19, 0x76, 0xd8, 0x21, 0x4f, 0xc0, 0x60, 0x9e, 0xad, 0x17, 0xda, + 0x90, 0x8a, 0xfb, 0x99, 0x1d, 0xf5, 0xec, 0x70, 0x99, 0x75, 0xa6, 0xdb, 0xe4, 0x04, 0xaa, 0x18, + 0x25, 0x8e, 0x68, 0x37, 0xa5, 0xce, 0x83, 0xcc, 0x12, 0xa5, 0x6c, 0xb0, 0x61, 0x69, 0x54, 0xbf, + 0x06, 0x95, 0x1b, 0x3a, 0x5f, 0x32, 0xf3, 0x23, 0x68, 0x24, 0x22, 0x85, 0xb4, 0xa1, 0xe6, 0x32, + 0xce, 0xe9, 0x94, 0xb5, 0x0b, 0x47, 0x85, 0xae, 0x61, 0x85, 0x5d, 0xb3, 0x05, 0xcd, 0x64, 0x9c, + 0x24, 0x14, 0x31, 0x16, 0x50, 0xf1, 0x86, 0x2d, 0x38, 0x06, 0x80, 0x56, 0xd4, 0x5d, 0xf3, 0x39, + 0x6c, 0x67, 0x83, 0x80, 0x6c, 0x43, 0xe9, 0x1d, 0xbb, 0xd5, 0x48, 0x6c, 0x92, 0x07, 0x7a, 0x41, + 0x32, 0x8a, 0x0d, 0x4b, 0xaf, 0xce, 0x8f, 0x74, 0xa3, 0x30, 0x20, 0x4f, 0x01, 0x6e, 0xe8, 0xdc, + 0xb1, 0xa9, 0xf0, 0x17, 0xbc, 0x5d, 0x38, 0x2a, 0x75, 0x1b, 0xa7, 0xdb, 0xda, 0xdc, 0xb7, 0xa1, + 0xa0, 0x5f, 0xfe, 0xfb, 0xdd, 0xe1, 0x86, 0x95, 0x40, 0x92, 0x1f, 0xc3, 0xe6, 0x94, 0x79, 0x8c, + 0x3b, 0x7c, 0x34, 0xbe, 0x15, 0x8c, 0xcb, 0x99, 0x9a, 0x56, 0x53, 0x7f, 0xec, 0xe3, 0x37, 0xd3, + 0x8e, 0xac, 0x94, 0x21, 0x44, 0x08, 0x94, 0x6d, 0x2a, 0xa8, 0x5c, 0x69, 0xd3, 0x92, 0x6d, 0xfc, + 0x16, 0x50, 0x31, 0xd3, 0x2b, 0x95, 0x6d, 0xb2, 0x0f, 0xd5, 0x19, 0x73, 0xa6, 0x33, 0x21, 0x8f, + 0x56, 0xc9, 0xd2, 0x3d, 0x34, 0x2b, 0x58, 0xf8, 0x37, 0x4c, 0x9e, 0xa2, 0xba, 0xa5, 0x3a, 0xe6, + 0x3f, 0x0b, 0xb0, 0x73, 0x2f, 0xec, 0x70, 0xdc, 0x19, 0xe5, 0xb3, 0x70, 0x2e, 0x6c, 0x93, 0x47, + 0x38, 0x2e, 0xb5, 0xd9, 0x42, 0x9f, 0xee, 0x4d, 0x6d, 0xe8, 0x40, 0x7e, 0xd4, 0x56, 0x6a, 0x08, + 0x79, 0x04, 0x3b, 0x74, 0xcc, 0x99, 0x27, 0x46, 0x09, 0x07, 0x95, 0x8e, 0x4a, 0xdd, 0xa6, 0xb5, + 0xad, 0x04, 0x6f, 0x63, 0x77, 0x0c, 0xe0, 0xc1, 0xf8, 0xf6, 0x3d, 0xf5, 0x84, 0xe3, 0xb1, 0x24, + 0xbe, 0x2c, 0x1d, 0xba, 0xa5, 0xe7, 0x79, 0x71, 0xe3, 0xd8, 0xcc, 0x9b, 0x30, 0x3d, 0xd3, 0x6e, + 0xa4, 0x12, 0x8f, 0x64, 0x1e, 0x41, 0x2b, 0x7d, 0x12, 0x48, 0x0b, 0x8a, 0x62, 0xa5, 0xed, 0x28, + 0x8a, 0x95, 0x69, 0x46, 0xdb, 0x18, 0x45, 0xfd, 0x3d, 0xcc, 0x31, 0x6c, 0x65, 0x02, 0x3c, 0xe1, + 0xd4, 0x42, 0xd2, 0xa9, 0xe6, 0x16, 0x6c, 0xa6, 0xe2, 0xda, 0xfc, 0xba, 0x02, 0x75, 0x8b, 0xf1, + 0xc0, 0xf7, 0x38, 0x23, 0xcf, 0xc0, 0x60, 0xab, 0x09, 0x53, 0x64, 0x54, 0xc8, 0x1c, 0x75, 0x85, + 0x79, 0x11, 0xca, 0xf1, 0xec, 0x45, 0x60, 0x72, 0x9c, 0x22, 0xd2, 0xdd, 0xac, 0x52, 0x92, 0x49, + 0x1f, 0xa7, 0x99, 0xf4, 0x41, 0x06, 0x9b, 0xa1, 0xd2, 0xe3, 0x14, 0x95, 0x66, 0x07, 0x4e, 0x71, + 0xe9, 0x59, 0x0e, 0x97, 0x66, 0x97, 0xbf, 0x86, 0x4c, 0xcf, 0x72, 0xc8, 0xb4, 0x7d, 0x6f, 0xae, + 0x5c, 0x36, 0x7d, 0x9c, 0x66, 0xd3, 0xac, 0x39, 0x19, 0x3a, 0xfd, 0x65, 0x1e, 0x9d, 0x3e, 0xcc, + 0xe8, 0xac, 0xe5, 0xd3, 0x4f, 0xee, 0xf1, 0xe9, 0x7e, 0x46, 0x35, 0x87, 0x50, 0xcf, 0x52, 0x84, + 0x0a, 0xb9, 0xb6, 0xad, 0x61, 0xd4, 0xa7, 0xf7, 0x19, 0xf5, 0x20, 0xbb, 0xb5, 0x79, 0x94, 0xda, + 0xcb, 0x50, 0xea, 0x5e, 0x76, 0x95, 0x6b, 0x39, 0xf5, 0x18, 0x4f, 0x77, 0x26, 0xd2, 0x90, 0x09, + 0xd8, 0x62, 0xe1, 0x2f, 0x34, 0xe9, 0xa9, 0x8e, 0xd9, 0x45, 0xbe, 0x89, 0xe3, 0xeb, 0x5b, 0xf8, + 0x57, 0x06, 0x7d, 0x22, 0xba, 0xcc, 0x3f, 0x17, 0x62, 0x5d, 0x49, 0xc1, 0x49, 0xae, 0x32, 0x34, + 0x57, 0x25, 0x68, 0xb9, 0x98, 0xa2, 0x65, 0xf2, 0x53, 0xd8, 0x99, 0x53, 0x2e, 0x94, 0x5f, 0x46, + 0x29, 0xf2, 0xda, 0x42, 0x81, 0x72, 0x88, 0x62, 0xb1, 0x8f, 0x61, 0x37, 0x81, 0xa5, 0x41, 0x30, + 0x92, 0x44, 0x55, 0x96, 0x87, 0x77, 0x3b, 0x42, 0x9f, 0x07, 0xc1, 0x80, 0xf2, 0x99, 0xf9, 0xdb, + 0xd8, 0xfe, 0x98, 0xf2, 0x09, 0x94, 0x27, 0xbe, 0xad, 0xcc, 0xda, 0xb4, 0x64, 0x1b, 0xd3, 0xc0, + 0xdc, 0x9f, 0xca, 0x59, 0x0d, 0x0b, 0x9b, 0x88, 0x8a, 0x4e, 0x8a, 0xa1, 0x8e, 0x84, 0xf9, 0x2a, + 0x1e, 0xee, 0x7f, 0xce, 0x02, 0xe6, 0x5f, 0x0b, 0xb1, 0x1f, 0x23, 0x8a, 0xff, 0x61, 0x0b, 0xc3, + 0x2d, 0x75, 0x3c, 0x9b, 0xad, 0xe4, 0x31, 0x2d, 0x59, 0xaa, 0x13, 0xe6, 0xb6, 0xaa, 0x74, 0x4e, + 0x3a, 0xb7, 0xd5, 0xe4, 0x37, 0xd5, 0xd1, 0xa9, 0xc1, 0xbf, 0x96, 0xe7, 0xa7, 0x69, 0xa9, 0x4e, + 0x82, 0xf3, 0x8c, 0x14, 0xe7, 0x5d, 0x01, 0xb9, 0x7f, 0xb2, 0xc8, 0x73, 0x28, 0x0b, 0x3a, 0x0d, + 0xed, 0x6f, 0x9d, 0xa8, 0x4a, 0xf1, 0xe4, 0xd5, 0xdb, 0x2b, 0xea, 0x2c, 0xfa, 0xfb, 0x68, 0xfd, + 0xbf, 0xef, 0x0e, 0x5b, 0x88, 0x79, 0xec, 0xbb, 0x8e, 0x60, 0x6e, 0x20, 0x6e, 0x2d, 0xa9, 0x63, + 0xfe, 0xa7, 0x80, 0x8c, 0x9b, 0x3a, 0x71, 0xb9, 0xbe, 0x08, 0xc3, 0xaa, 0x98, 0x48, 0x81, 0xdf, + 0xcd, 0x3f, 0x3f, 0x02, 0x98, 0x52, 0x3e, 0xfa, 0x8a, 0x7a, 0x82, 0xd9, 0xda, 0x49, 0xc6, 0x94, + 0xf2, 0x3f, 0xc8, 0x0f, 0xe4, 0x21, 0xd4, 0x51, 0xbc, 0xe4, 0xcc, 0x96, 0xde, 0x2a, 0x59, 0xb5, + 0x29, 0xe5, 0x5f, 0x70, 0x66, 0x47, 0x76, 0xd5, 0xbe, 0xbf, 0x5d, 0xa4, 0x0b, 0xa5, 0x6b, 0xc6, + 0x34, 0x2b, 0x6d, 0x47, 0xaa, 0xc3, 0xa7, 0xbf, 0x90, 0xca, 0x2a, 0x24, 0x10, 0x62, 0xfe, 0xa9, + 0x18, 0x47, 0x56, 0x9c, 0x98, 0xfe, 0xbf, 0x7c, 0xf0, 0xaf, 0x02, 0xe6, 0xe6, 0x34, 0x0d, 0x92, + 0x0b, 0xd8, 0x89, 0x8e, 0xcc, 0x68, 0x19, 0xd8, 0x14, 0xcb, 0xa5, 0x6f, 0x3f, 0x63, 0xdb, 0x91, + 0xc2, 0x17, 0x0a, 0x4f, 0x7e, 0x07, 0x07, 0x13, 0x1c, 0xd5, 0xe3, 0x4b, 0x3e, 0x0a, 0xe8, 0x82, + 0xba, 0xd1, 0x50, 0xc5, 0x14, 0xed, 0x5f, 0x84, 0xa8, 0x2b, 0x04, 0x71, 0x6b, 0x6f, 0x92, 0xfa, + 0x10, 0x8e, 0x17, 0xfa, 0xa3, 0xf4, 0x03, 0x62, 0xfd, 0x27, 0x58, 0xa2, 0x24, 0x69, 0x3b, 0x6f, + 0x47, 0xcd, 0xbf, 0x14, 0x60, 0x2b, 0xb3, 0x18, 0xd2, 0x03, 0x50, 0xac, 0xc7, 0x9d, 0xf7, 0x4c, + 0x97, 0x13, 0xa1, 0x0f, 0xa4, 0xb3, 0x3e, 0x77, 0xde, 0x33, 0xcb, 0x18, 0x87, 0x4d, 0xf2, 0x21, + 0xd4, 0xc4, 0x4a, 0xa1, 0xd3, 0x25, 0xdb, 0x9b, 0x95, 0x84, 0x56, 0x85, 0xfc, 0x27, 0x4f, 0xa0, + 0xa9, 0x06, 0x9e, 0xfa, 0x9c, 0x3b, 0x81, 0x2e, 0x24, 0x48, 0x72, 0xe8, 0x97, 0x52, 0x62, 0x35, + 0xc6, 0x71, 0xc7, 0xfc, 0x23, 0x18, 0xd1, 0xb4, 0xe4, 0x03, 0x30, 0x5c, 0xba, 0xd2, 0xe5, 0x2c, + 0xae, 0xad, 0x62, 0xd5, 0x5d, 0xba, 0x92, 0xa5, 0x2c, 0x39, 0x80, 0x1a, 0x0a, 0xc5, 0x4a, 0xf9, + 0xbb, 0x62, 0x55, 0x5d, 0xba, 0x7a, 0xb3, 0x8a, 0x04, 0x53, 0xca, 0xc3, 0x62, 0xd5, 0xa5, 0xab, + 0x97, 0x94, 0x9b, 0x9f, 0x41, 0x55, 0x2d, 0xf2, 0x3b, 0x0d, 0x8c, 0xfa, 0xc5, 0x94, 0xfe, 0xaf, + 0xa0, 0x91, 0x58, 0x37, 0xf9, 0x39, 0xec, 0x29, 0x0b, 0x03, 0xba, 0x10, 0xd2, 0x23, 0xa9, 0x01, + 0x89, 0x14, 0x5e, 0xd1, 0x85, 0xc0, 0x29, 0x55, 0xf9, 0xfd, 0x8f, 0x22, 0x54, 0x55, 0x69, 0x4b, + 0x3e, 0xc4, 0x32, 0x81, 0x3a, 0xde, 0xc8, 0xb1, 0x55, 0x46, 0xeb, 0x37, 0xbe, 0xb9, 0x3b, 0xac, + 0x49, 0xf6, 0x1f, 0x5e, 0x62, 0x65, 0x80, 0x0d, 0x3b, 0x41, 0x98, 0xc5, 0x54, 0xe5, 0x4d, 0xa0, + 0x2c, 0x1c, 0x97, 0x69, 0x13, 0x65, 0x1b, 0x57, 0xee, 0x2d, 0x5d, 0xe9, 0x92, 0xb2, 0x72, 0x89, + 0xb7, 0x74, 0xd1, 0x25, 0x2f, 0x61, 0x33, 0x91, 0xe0, 0x1c, 0x5b, 0x17, 0x5e, 0xad, 0xe4, 0x6e, + 0x0c, 0x2f, 0xfb, 0xbb, 0x18, 0x64, 0xdf, 0xdc, 0x1d, 0x36, 0x7e, 0x13, 0xa6, 0xbc, 0xe1, 0xa5, + 0xd5, 0x88, 0xf2, 0xdf, 0xd0, 0x26, 0x5d, 0x90, 0xe9, 0x70, 0xa4, 0x4a, 0x02, 0x95, 0x26, 0x55, + 0x26, 0x68, 0xe1, 0x77, 0x5d, 0x33, 0x60, 0x65, 0xff, 0x01, 0x18, 0x18, 0x74, 0x0a, 0xa2, 0x12, + 0x43, 0x1d, 0x3f, 0x48, 0xe1, 0x47, 0xb0, 0x15, 0xe7, 0x2c, 0x05, 0x51, 0x59, 0xa2, 0x15, 0x7f, + 0x96, 0xc0, 0x87, 0x50, 0x8f, 0xd2, 0xb1, 0x21, 0x11, 0x35, 0xaa, 0xb3, 0xf0, 0x6b, 0xa8, 0xe9, + 0x25, 0xe6, 0xde, 0x2c, 0x7e, 0x06, 0x15, 0xdc, 0x97, 0xf0, 0x30, 0x86, 0x25, 0x9f, 0xdc, 0x0f, + 0x26, 0x52, 0xf7, 0x0b, 0x05, 0x34, 0xcf, 0x60, 0x33, 0x25, 0xc5, 0x0c, 0x26, 0x7c, 0x41, 0xe7, + 0x7a, 0x43, 0x55, 0x27, 0x9a, 0xac, 0x18, 0x4f, 0x66, 0x3e, 0x07, 0x23, 0x22, 0x0c, 0xdc, 0x85, + 0x60, 0x39, 0x1e, 0x85, 0x17, 0xc0, 0xa6, 0x55, 0x0d, 0x96, 0xe3, 0x57, 0x2a, 0x4f, 0x06, 0xfe, + 0x57, 0xfa, 0xae, 0x53, 0xb2, 0x54, 0xc7, 0x7c, 0x0d, 0xf5, 0xf0, 0x16, 0xb2, 0x5e, 0xf5, 0x7b, + 0x44, 0xc1, 0xe9, 0xd7, 0x15, 0xd8, 0x3a, 0xef, 0x5f, 0x0c, 0xcf, 0x83, 0x60, 0xee, 0x4c, 0xa8, + 0xac, 0x4e, 0x7a, 0x50, 0x96, 0xf5, 0x57, 0xce, 0xeb, 0x49, 0x27, 0xef, 0x22, 0x40, 0x4e, 0xa1, + 0x22, 0xcb, 0x30, 0x92, 0xf7, 0x88, 0xd2, 0xc9, 0xbd, 0x0f, 0xe0, 0x24, 0xaa, 0x50, 0xbb, 0xff, + 0x96, 0xd2, 0xc9, 0xbb, 0x14, 0x90, 0xcf, 0xc0, 0x88, 0x0b, 0xa8, 0x75, 0x2f, 0x2a, 0x9d, 0xb5, + 0xd7, 0x03, 0xd4, 0x8f, 0xf3, 0xda, 0xba, 0xf7, 0x87, 0xce, 0xda, 0x3a, 0x9a, 0x3c, 0x83, 0x5a, + 0x58, 0x19, 0xe4, 0xbf, 0x79, 0x74, 0xd6, 0x94, 0xee, 0xe8, 0x1e, 0x55, 0x5d, 0xe5, 0x3d, 0xcc, + 0x74, 0x72, 0xef, 0x17, 0xe4, 0x09, 0x54, 0x35, 0x39, 0xe7, 0xbe, 0x5e, 0x74, 0xf2, 0x0b, 0x70, + 0x34, 0x32, 0x2e, 0x0b, 0xd7, 0x3d, 0x1e, 0x75, 0xd6, 0x5e, 0x84, 0xc8, 0x39, 0x40, 0xa2, 0xa2, + 0x5a, 0xfb, 0x2a, 0xd4, 0x59, 0x7f, 0xc1, 0x21, 0x9f, 0x42, 0x3d, 0xbe, 0xb4, 0xe6, 0xbf, 0xd6, + 0x74, 0xd6, 0xdd, 0x39, 0xc6, 0x55, 0xf9, 0xa2, 0xf7, 0xc9, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, + 0xdd, 0x73, 0x23, 0x8d, 0x4d, 0x14, 0x00, 0x00, } diff --git a/types/types.proto b/types/types.proto index 0e177a41..189b50d5 100644 --- a/types/types.proto +++ b/types/types.proto @@ -244,6 +244,7 @@ message Validator { message Evidence { bytes pub_key = 1; int64 height = 2; + int64 time = 3; } //---------------------------------------- From 435eb273a444af8097369b4686023b5e400b9d01 Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Thu, 17 May 2018 19:47:52 +0200 Subject: [PATCH 11/40] Update changelog --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d15c4e15..0fef5798 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 0.10.4 (TBD) + +BREAKING CHANGES: + +- [types] Added `time` field to `Evidence` (note that this is the timestamp of the block which was double-signed, not the time the evidence was received) + ## 0.10.3 (April 9, 2018) IMPROVEMENTS: From 308ce8b235c3ef3bce79d86b927f5d849e1adfcc Mon Sep 17 00:00:00 2001 From: Zach Ramsay Date: Thu, 4 Jan 2018 22:22:53 +0000 Subject: [PATCH 12/40] tests: less bash --- Makefile | 5 +++++ test.sh | 19 ------------------- tests/test_cover.sh | 13 +++++++++++++ 3 files changed, 18 insertions(+), 19 deletions(-) create mode 100644 tests/test_cover.sh diff --git a/Makefile b/Makefile index 64a989a8..81dceb78 100644 --- a/Makefile +++ b/Makefile @@ -82,9 +82,14 @@ test_race: @echo "==> Running go test --race" @go test -v -race $(PACKAGES) +test_cover: + @ bash tests/test_cover.sh + test_integrations: @bash test.sh +fmt: + @ go fmt ./... ######################################## ### Formatting, linting, and vetting diff --git a/test.sh b/test.sh index 978b26e1..e69de29b 100755 --- a/test.sh +++ b/test.sh @@ -1,19 +0,0 @@ -#!/usr/bin/env bash - -set -e -echo "" > coverage.txt - -echo "==> Running unit tests" -for d in $(go list ./... | grep -v vendor); do - go test -race -coverprofile=profile.out -covermode=atomic "$d" - if [ -f profile.out ]; then - cat profile.out >> coverage.txt - rm profile.out - fi -done - -echo "==> Running integration tests (./tests)" -find . -path ./vendor -prune -o -name "*.sock" -exec rm {} \; -# tests/test.sh requires that we run the installed cmds, must not be out of date -make install -bash tests/test.sh diff --git a/tests/test_cover.sh b/tests/test_cover.sh new file mode 100644 index 00000000..abbbbe56 --- /dev/null +++ b/tests/test_cover.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +set -e +echo "" > coverage.txt + +echo "==> Running unit tests" +for d in $(go list ./... | grep -v vendor); do + go test -race -coverprofile=profile.out -covermode=atomic "$d" + if [ -f profile.out ]; then + cat profile.out >> coverage.txt + rm profile.out + fi +done From de02ab4b3c8fe6c6bc162e0215000e6e94037bb9 Mon Sep 17 00:00:00 2001 From: Zach Ramsay Date: Thu, 4 Jan 2018 22:31:04 +0000 Subject: [PATCH 13/40] lil fix --- test.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 test.sh diff --git a/test.sh b/test.sh deleted file mode 100755 index e69de29b..00000000 From 2adef2e8f88822ce660881686cdcacd807f3f427 Mon Sep 17 00:00:00 2001 From: Zach Ramsay Date: Fri, 5 Jan 2018 00:02:58 +0000 Subject: [PATCH 14/40] less bash in tests --- Makefile | 10 ++++++++-- tests/test_cover.sh | 0 2 files changed, 8 insertions(+), 2 deletions(-) mode change 100644 => 100755 tests/test_cover.sh diff --git a/Makefile b/Makefile index 81dceb78..f44dc5e2 100644 --- a/Makefile +++ b/Makefile @@ -82,11 +82,17 @@ test_race: @echo "==> Running go test --race" @go test -v -race $(PACKAGES) +### three tests tested by Jenkins test_cover: @ bash tests/test_cover.sh -test_integrations: - @bash test.sh +test_app: + # test the counter using a go test script + @ bash tests/test_app/test.sh + +test_cli: + # test the cli against the examples in the tutorial at tendermint.com + @ bash tests/test_cli/test.sh fmt: @ go fmt ./... diff --git a/tests/test_cover.sh b/tests/test_cover.sh old mode 100644 new mode 100755 From e19cedc4b45c190630ea622f2738786a1bbc10cb Mon Sep 17 00:00:00 2001 From: Zach Ramsay Date: Fri, 18 May 2018 12:03:57 -0400 Subject: [PATCH 15/40] tests: more smoothness --- .circleci/config.yml | 10 +++++----- Makefile | 2 +- tests/test.sh | 11 ----------- 3 files changed, 6 insertions(+), 17 deletions(-) delete mode 100755 tests/test.sh diff --git a/.circleci/config.yml b/.circleci/config.yml index d147c6ac..3ff0464e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -46,7 +46,7 @@ jobs: paths: - /go/src/github.com/tendermint/abci - test_integration: + test_apps: <<: *defaults steps: - attach_workspace: @@ -56,10 +56,10 @@ jobs: - restore_cache: key: v1-tree-{{ .Environment.CIRCLE_SHA1 }} - run: - name: Run integration tests + name: Run apps tests command: | export PATH="$GOBIN:$PATH" - bash tests/test.sh + bash tests/test_app/test.sh test_cover: <<: *defaults @@ -111,9 +111,9 @@ workflows: - test_cover: requires: - setup_dependencies - - test_integration: + - test_apps: requires: - setup_dependencies - upload_coverage: requires: - - test_integration + - test_cover diff --git a/Makefile b/Makefile index f44dc5e2..13a9547c 100644 --- a/Makefile +++ b/Makefile @@ -86,7 +86,7 @@ test_race: test_cover: @ bash tests/test_cover.sh -test_app: +test_apps: # test the counter using a go test script @ bash tests/test_app/test.sh diff --git a/tests/test.sh b/tests/test.sh deleted file mode 100755 index 416145fc..00000000 --- a/tests/test.sh +++ /dev/null @@ -1,11 +0,0 @@ -#! /bin/bash -set -e - -# test the counter using a go test script -bash tests/test_app/test.sh - -# test the cli against the examples in the tutorial at tendermint.com -# TODO: make these less fragile -# bash tests/test_cli/test.sh - - From e196dacf804e3a4ab74252c27e99cb17b39bf501 Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Fri, 18 May 2018 20:29:32 +0200 Subject: [PATCH 16/40] Add 'type' field to abci.Evidence --- CHANGELOG.md | 1 + types/types.pb.go | 239 ++++++++++++++++++++++++---------------------- types/types.proto | 7 +- 3 files changed, 129 insertions(+), 118 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0fef5798..da05af9b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ BREAKING CHANGES: +- [types] Added `type` field to `Evidence` (opaque bytes indicating kind of fraud) - [types] Added `time` field to `Evidence` (note that this is the timestamp of the block which was double-signed, not the time the evidence was received) ## 0.10.3 (April 9, 2018) diff --git a/types/types.pb.go b/types/types.pb.go index 639855ee..23b42553 100644 --- a/types/types.pb.go +++ b/types/types.pb.go @@ -1799,9 +1799,10 @@ func (m *Validator) GetPower() int64 { } type Evidence struct { - PubKey []byte `protobuf:"bytes,1,opt,name=pub_key,json=pubKey,proto3" json:"pub_key,omitempty"` - Height int64 `protobuf:"varint,2,opt,name=height,proto3" json:"height,omitempty"` - Time int64 `protobuf:"varint,3,opt,name=time,proto3" json:"time,omitempty"` + Type []byte `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + PubKey []byte `protobuf:"bytes,2,opt,name=pub_key,json=pubKey,proto3" json:"pub_key,omitempty"` + Height int64 `protobuf:"varint,3,opt,name=height,proto3" json:"height,omitempty"` + Time int64 `protobuf:"varint,4,opt,name=time,proto3" json:"time,omitempty"` } func (m *Evidence) Reset() { *m = Evidence{} } @@ -1809,6 +1810,13 @@ func (m *Evidence) String() string { return proto.CompactTextString(m func (*Evidence) ProtoMessage() {} func (*Evidence) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{33} } +func (m *Evidence) GetType() []byte { + if m != nil { + return m.Type + } + return nil +} + func (m *Evidence) GetPubKey() []byte { if m != nil { return m.PubKey @@ -2272,116 +2280,117 @@ var _ABCIApplication_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("types/types.proto", fileDescriptorTypes) } var fileDescriptorTypes = []byte{ - // 1768 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0xcd, 0x72, 0x23, 0xb7, - 0x11, 0x16, 0xff, 0x39, 0x4d, 0x8a, 0x92, 0xa0, 0x95, 0xc4, 0xa5, 0x2b, 0x25, 0xd5, 0x24, 0x65, - 0x53, 0xd9, 0xb5, 0x98, 0xc8, 0xd9, 0xad, 0xd5, 0x3a, 0xe5, 0x8a, 0x28, 0x6d, 0x96, 0xac, 0x4d, - 0xb2, 0xca, 0x78, 0xbd, 0xa9, 0xca, 0x85, 0x05, 0x72, 0x20, 0x72, 0x6a, 0x39, 0x3f, 0x26, 0x40, - 0x99, 0xda, 0x5b, 0xee, 0xbe, 0xe7, 0x9c, 0x87, 0xc8, 0x2b, 0xa4, 0x92, 0xca, 0x3b, 0xe8, 0xe0, - 0xdc, 0xf2, 0x12, 0x49, 0x35, 0x80, 0xf9, 0xd5, 0xd0, 0x65, 0x3b, 0xc7, 0x5c, 0x48, 0x60, 0xfa, - 0x6b, 0x00, 0xdd, 0x68, 0x7c, 0xdd, 0x00, 0xec, 0x88, 0xdb, 0x80, 0xf1, 0x9e, 0xfc, 0x3d, 0x09, - 0x16, 0xbe, 0xf0, 0x49, 0x45, 0x76, 0x3a, 0x1f, 0x4f, 0x1d, 0x31, 0x5b, 0x8e, 0x4f, 0x26, 0xbe, - 0xdb, 0x9b, 0xfa, 0x53, 0xbf, 0x27, 0xa5, 0xe3, 0xe5, 0xb5, 0xec, 0xc9, 0x8e, 0x6c, 0x29, 0xad, - 0x4e, 0x2f, 0x01, 0x17, 0xcc, 0xb3, 0xd9, 0xc2, 0x75, 0x3c, 0xd1, 0x13, 0xee, 0xdc, 0x19, 0xf3, - 0xde, 0xc4, 0x77, 0x5d, 0xdf, 0x4b, 0x4e, 0x63, 0xfe, 0xad, 0x0c, 0x35, 0x8b, 0x7d, 0xb9, 0x64, - 0x5c, 0x90, 0x2e, 0x94, 0xd9, 0x64, 0xe6, 0xb7, 0x8b, 0x47, 0x85, 0x6e, 0xe3, 0x94, 0x9c, 0x28, - 0x9c, 0x96, 0xbe, 0x98, 0xcc, 0xfc, 0xc1, 0x86, 0x25, 0x11, 0xe4, 0x11, 0x54, 0xae, 0xe7, 0x4b, - 0x3e, 0x6b, 0x97, 0x24, 0x74, 0x37, 0x0d, 0xfd, 0x35, 0x8a, 0x06, 0x1b, 0x96, 0xc2, 0xe0, 0xb0, - 0x8e, 0x77, 0xed, 0xb7, 0xcb, 0x79, 0xc3, 0x0e, 0xbd, 0x6b, 0x39, 0x2c, 0x22, 0xc8, 0x33, 0x00, - 0xce, 0xc4, 0xc8, 0x0f, 0x84, 0xe3, 0x7b, 0xed, 0x8a, 0xc4, 0x1f, 0xa4, 0xf1, 0x9f, 0x33, 0xf1, - 0x5a, 0x8a, 0x07, 0x1b, 0x96, 0xc1, 0xc3, 0x0e, 0x6a, 0x3a, 0x9e, 0x23, 0x46, 0x93, 0x19, 0x75, - 0xbc, 0x76, 0x35, 0x4f, 0x73, 0xe8, 0x39, 0xe2, 0x02, 0xc5, 0xa8, 0xe9, 0x84, 0x1d, 0x34, 0xe5, - 0xcb, 0x25, 0x5b, 0xdc, 0xb6, 0x6b, 0x79, 0xa6, 0xfc, 0x1e, 0x45, 0x68, 0x8a, 0xc4, 0x90, 0x4f, - 0xa1, 0x31, 0x66, 0x53, 0xc7, 0x1b, 0x8d, 0xe7, 0xfe, 0xe4, 0x5d, 0xbb, 0x2e, 0x55, 0xda, 0x69, - 0x95, 0x3e, 0x02, 0xfa, 0x28, 0x1f, 0x6c, 0x58, 0x30, 0x8e, 0x7a, 0xe4, 0x14, 0xea, 0x93, 0x19, - 0x9b, 0xbc, 0x1b, 0x89, 0x55, 0xdb, 0x90, 0x9a, 0x7b, 0x69, 0xcd, 0x0b, 0x94, 0xbe, 0x59, 0x0d, - 0x36, 0xac, 0xda, 0x44, 0x35, 0xd1, 0x2e, 0x9b, 0xcd, 0x9d, 0x1b, 0xb6, 0x40, 0xad, 0xdd, 0x3c, - 0xbb, 0x2e, 0x95, 0x5c, 0xea, 0x19, 0x76, 0xd8, 0x21, 0x4f, 0xc0, 0x60, 0x9e, 0xad, 0x17, 0xda, - 0x90, 0x8a, 0xfb, 0x99, 0x1d, 0xf5, 0xec, 0x70, 0x99, 0x75, 0xa6, 0xdb, 0xe4, 0x04, 0xaa, 0x18, - 0x25, 0x8e, 0x68, 0x37, 0xa5, 0xce, 0x83, 0xcc, 0x12, 0xa5, 0x6c, 0xb0, 0x61, 0x69, 0x54, 0xbf, - 0x06, 0x95, 0x1b, 0x3a, 0x5f, 0x32, 0xf3, 0x23, 0x68, 0x24, 0x22, 0x85, 0xb4, 0xa1, 0xe6, 0x32, - 0xce, 0xe9, 0x94, 0xb5, 0x0b, 0x47, 0x85, 0xae, 0x61, 0x85, 0x5d, 0xb3, 0x05, 0xcd, 0x64, 0x9c, - 0x24, 0x14, 0x31, 0x16, 0x50, 0xf1, 0x86, 0x2d, 0x38, 0x06, 0x80, 0x56, 0xd4, 0x5d, 0xf3, 0x39, - 0x6c, 0x67, 0x83, 0x80, 0x6c, 0x43, 0xe9, 0x1d, 0xbb, 0xd5, 0x48, 0x6c, 0x92, 0x07, 0x7a, 0x41, - 0x32, 0x8a, 0x0d, 0x4b, 0xaf, 0xce, 0x8f, 0x74, 0xa3, 0x30, 0x20, 0x4f, 0x01, 0x6e, 0xe8, 0xdc, - 0xb1, 0xa9, 0xf0, 0x17, 0xbc, 0x5d, 0x38, 0x2a, 0x75, 0x1b, 0xa7, 0xdb, 0xda, 0xdc, 0xb7, 0xa1, - 0xa0, 0x5f, 0xfe, 0xfb, 0xdd, 0xe1, 0x86, 0x95, 0x40, 0x92, 0x1f, 0xc3, 0xe6, 0x94, 0x79, 0x8c, - 0x3b, 0x7c, 0x34, 0xbe, 0x15, 0x8c, 0xcb, 0x99, 0x9a, 0x56, 0x53, 0x7f, 0xec, 0xe3, 0x37, 0xd3, - 0x8e, 0xac, 0x94, 0x21, 0x44, 0x08, 0x94, 0x6d, 0x2a, 0xa8, 0x5c, 0x69, 0xd3, 0x92, 0x6d, 0xfc, - 0x16, 0x50, 0x31, 0xd3, 0x2b, 0x95, 0x6d, 0xb2, 0x0f, 0xd5, 0x19, 0x73, 0xa6, 0x33, 0x21, 0x8f, - 0x56, 0xc9, 0xd2, 0x3d, 0x34, 0x2b, 0x58, 0xf8, 0x37, 0x4c, 0x9e, 0xa2, 0xba, 0xa5, 0x3a, 0xe6, - 0x3f, 0x0b, 0xb0, 0x73, 0x2f, 0xec, 0x70, 0xdc, 0x19, 0xe5, 0xb3, 0x70, 0x2e, 0x6c, 0x93, 0x47, - 0x38, 0x2e, 0xb5, 0xd9, 0x42, 0x9f, 0xee, 0x4d, 0x6d, 0xe8, 0x40, 0x7e, 0xd4, 0x56, 0x6a, 0x08, - 0x79, 0x04, 0x3b, 0x74, 0xcc, 0x99, 0x27, 0x46, 0x09, 0x07, 0x95, 0x8e, 0x4a, 0xdd, 0xa6, 0xb5, - 0xad, 0x04, 0x6f, 0x63, 0x77, 0x0c, 0xe0, 0xc1, 0xf8, 0xf6, 0x3d, 0xf5, 0x84, 0xe3, 0xb1, 0x24, - 0xbe, 0x2c, 0x1d, 0xba, 0xa5, 0xe7, 0x79, 0x71, 0xe3, 0xd8, 0xcc, 0x9b, 0x30, 0x3d, 0xd3, 0x6e, - 0xa4, 0x12, 0x8f, 0x64, 0x1e, 0x41, 0x2b, 0x7d, 0x12, 0x48, 0x0b, 0x8a, 0x62, 0xa5, 0xed, 0x28, - 0x8a, 0x95, 0x69, 0x46, 0xdb, 0x18, 0x45, 0xfd, 0x3d, 0xcc, 0x31, 0x6c, 0x65, 0x02, 0x3c, 0xe1, - 0xd4, 0x42, 0xd2, 0xa9, 0xe6, 0x16, 0x6c, 0xa6, 0xe2, 0xda, 0xfc, 0xba, 0x02, 0x75, 0x8b, 0xf1, - 0xc0, 0xf7, 0x38, 0x23, 0xcf, 0xc0, 0x60, 0xab, 0x09, 0x53, 0x64, 0x54, 0xc8, 0x1c, 0x75, 0x85, - 0x79, 0x11, 0xca, 0xf1, 0xec, 0x45, 0x60, 0x72, 0x9c, 0x22, 0xd2, 0xdd, 0xac, 0x52, 0x92, 0x49, - 0x1f, 0xa7, 0x99, 0xf4, 0x41, 0x06, 0x9b, 0xa1, 0xd2, 0xe3, 0x14, 0x95, 0x66, 0x07, 0x4e, 0x71, - 0xe9, 0x59, 0x0e, 0x97, 0x66, 0x97, 0xbf, 0x86, 0x4c, 0xcf, 0x72, 0xc8, 0xb4, 0x7d, 0x6f, 0xae, - 0x5c, 0x36, 0x7d, 0x9c, 0x66, 0xd3, 0xac, 0x39, 0x19, 0x3a, 0xfd, 0x65, 0x1e, 0x9d, 0x3e, 0xcc, - 0xe8, 0xac, 0xe5, 0xd3, 0x4f, 0xee, 0xf1, 0xe9, 0x7e, 0x46, 0x35, 0x87, 0x50, 0xcf, 0x52, 0x84, - 0x0a, 0xb9, 0xb6, 0xad, 0x61, 0xd4, 0xa7, 0xf7, 0x19, 0xf5, 0x20, 0xbb, 0xb5, 0x79, 0x94, 0xda, - 0xcb, 0x50, 0xea, 0x5e, 0x76, 0x95, 0x6b, 0x39, 0xf5, 0x18, 0x4f, 0x77, 0x26, 0xd2, 0x90, 0x09, - 0xd8, 0x62, 0xe1, 0x2f, 0x34, 0xe9, 0xa9, 0x8e, 0xd9, 0x45, 0xbe, 0x89, 0xe3, 0xeb, 0x5b, 0xf8, - 0x57, 0x06, 0x7d, 0x22, 0xba, 0xcc, 0x3f, 0x17, 0x62, 0x5d, 0x49, 0xc1, 0x49, 0xae, 0x32, 0x34, - 0x57, 0x25, 0x68, 0xb9, 0x98, 0xa2, 0x65, 0xf2, 0x53, 0xd8, 0x99, 0x53, 0x2e, 0x94, 0x5f, 0x46, - 0x29, 0xf2, 0xda, 0x42, 0x81, 0x72, 0x88, 0x62, 0xb1, 0x8f, 0x61, 0x37, 0x81, 0xa5, 0x41, 0x30, - 0x92, 0x44, 0x55, 0x96, 0x87, 0x77, 0x3b, 0x42, 0x9f, 0x07, 0xc1, 0x80, 0xf2, 0x99, 0xf9, 0xdb, - 0xd8, 0xfe, 0x98, 0xf2, 0x09, 0x94, 0x27, 0xbe, 0xad, 0xcc, 0xda, 0xb4, 0x64, 0x1b, 0xd3, 0xc0, - 0xdc, 0x9f, 0xca, 0x59, 0x0d, 0x0b, 0x9b, 0x88, 0x8a, 0x4e, 0x8a, 0xa1, 0x8e, 0x84, 0xf9, 0x2a, - 0x1e, 0xee, 0x7f, 0xce, 0x02, 0xe6, 0x5f, 0x0b, 0xb1, 0x1f, 0x23, 0x8a, 0xff, 0x61, 0x0b, 0xc3, - 0x2d, 0x75, 0x3c, 0x9b, 0xad, 0xe4, 0x31, 0x2d, 0x59, 0xaa, 0x13, 0xe6, 0xb6, 0xaa, 0x74, 0x4e, - 0x3a, 0xb7, 0xd5, 0xe4, 0x37, 0xd5, 0xd1, 0xa9, 0xc1, 0xbf, 0x96, 0xe7, 0xa7, 0x69, 0xa9, 0x4e, - 0x82, 0xf3, 0x8c, 0x14, 0xe7, 0x5d, 0x01, 0xb9, 0x7f, 0xb2, 0xc8, 0x73, 0x28, 0x0b, 0x3a, 0x0d, - 0xed, 0x6f, 0x9d, 0xa8, 0x4a, 0xf1, 0xe4, 0xd5, 0xdb, 0x2b, 0xea, 0x2c, 0xfa, 0xfb, 0x68, 0xfd, - 0xbf, 0xef, 0x0e, 0x5b, 0x88, 0x79, 0xec, 0xbb, 0x8e, 0x60, 0x6e, 0x20, 0x6e, 0x2d, 0xa9, 0x63, - 0xfe, 0xa7, 0x80, 0x8c, 0x9b, 0x3a, 0x71, 0xb9, 0xbe, 0x08, 0xc3, 0xaa, 0x98, 0x48, 0x81, 0xdf, - 0xcd, 0x3f, 0x3f, 0x02, 0x98, 0x52, 0x3e, 0xfa, 0x8a, 0x7a, 0x82, 0xd9, 0xda, 0x49, 0xc6, 0x94, - 0xf2, 0x3f, 0xc8, 0x0f, 0xe4, 0x21, 0xd4, 0x51, 0xbc, 0xe4, 0xcc, 0x96, 0xde, 0x2a, 0x59, 0xb5, - 0x29, 0xe5, 0x5f, 0x70, 0x66, 0x47, 0x76, 0xd5, 0xbe, 0xbf, 0x5d, 0xa4, 0x0b, 0xa5, 0x6b, 0xc6, - 0x34, 0x2b, 0x6d, 0x47, 0xaa, 0xc3, 0xa7, 0xbf, 0x90, 0xca, 0x2a, 0x24, 0x10, 0x62, 0xfe, 0xa9, - 0x18, 0x47, 0x56, 0x9c, 0x98, 0xfe, 0xbf, 0x7c, 0xf0, 0xaf, 0x02, 0xe6, 0xe6, 0x34, 0x0d, 0x92, - 0x0b, 0xd8, 0x89, 0x8e, 0xcc, 0x68, 0x19, 0xd8, 0x14, 0xcb, 0xa5, 0x6f, 0x3f, 0x63, 0xdb, 0x91, - 0xc2, 0x17, 0x0a, 0x4f, 0x7e, 0x07, 0x07, 0x13, 0x1c, 0xd5, 0xe3, 0x4b, 0x3e, 0x0a, 0xe8, 0x82, - 0xba, 0xd1, 0x50, 0xc5, 0x14, 0xed, 0x5f, 0x84, 0xa8, 0x2b, 0x04, 0x71, 0x6b, 0x6f, 0x92, 0xfa, - 0x10, 0x8e, 0x17, 0xfa, 0xa3, 0xf4, 0x03, 0x62, 0xfd, 0x27, 0x58, 0xa2, 0x24, 0x69, 0x3b, 0x6f, - 0x47, 0xcd, 0xbf, 0x14, 0x60, 0x2b, 0xb3, 0x18, 0xd2, 0x03, 0x50, 0xac, 0xc7, 0x9d, 0xf7, 0x4c, - 0x97, 0x13, 0xa1, 0x0f, 0xa4, 0xb3, 0x3e, 0x77, 0xde, 0x33, 0xcb, 0x18, 0x87, 0x4d, 0xf2, 0x21, - 0xd4, 0xc4, 0x4a, 0xa1, 0xd3, 0x25, 0xdb, 0x9b, 0x95, 0x84, 0x56, 0x85, 0xfc, 0x27, 0x4f, 0xa0, - 0xa9, 0x06, 0x9e, 0xfa, 0x9c, 0x3b, 0x81, 0x2e, 0x24, 0x48, 0x72, 0xe8, 0x97, 0x52, 0x62, 0x35, - 0xc6, 0x71, 0xc7, 0xfc, 0x23, 0x18, 0xd1, 0xb4, 0xe4, 0x03, 0x30, 0x5c, 0xba, 0xd2, 0xe5, 0x2c, - 0xae, 0xad, 0x62, 0xd5, 0x5d, 0xba, 0x92, 0xa5, 0x2c, 0x39, 0x80, 0x1a, 0x0a, 0xc5, 0x4a, 0xf9, - 0xbb, 0x62, 0x55, 0x5d, 0xba, 0x7a, 0xb3, 0x8a, 0x04, 0x53, 0xca, 0xc3, 0x62, 0xd5, 0xa5, 0xab, - 0x97, 0x94, 0x9b, 0x9f, 0x41, 0x55, 0x2d, 0xf2, 0x3b, 0x0d, 0x8c, 0xfa, 0xc5, 0x94, 0xfe, 0xaf, - 0xa0, 0x91, 0x58, 0x37, 0xf9, 0x39, 0xec, 0x29, 0x0b, 0x03, 0xba, 0x10, 0xd2, 0x23, 0xa9, 0x01, - 0x89, 0x14, 0x5e, 0xd1, 0x85, 0xc0, 0x29, 0x55, 0xf9, 0xfd, 0x8f, 0x22, 0x54, 0x55, 0x69, 0x4b, - 0x3e, 0xc4, 0x32, 0x81, 0x3a, 0xde, 0xc8, 0xb1, 0x55, 0x46, 0xeb, 0x37, 0xbe, 0xb9, 0x3b, 0xac, - 0x49, 0xf6, 0x1f, 0x5e, 0x62, 0x65, 0x80, 0x0d, 0x3b, 0x41, 0x98, 0xc5, 0x54, 0xe5, 0x4d, 0xa0, - 0x2c, 0x1c, 0x97, 0x69, 0x13, 0x65, 0x1b, 0x57, 0xee, 0x2d, 0x5d, 0xe9, 0x92, 0xb2, 0x72, 0x89, - 0xb7, 0x74, 0xd1, 0x25, 0x2f, 0x61, 0x33, 0x91, 0xe0, 0x1c, 0x5b, 0x17, 0x5e, 0xad, 0xe4, 0x6e, - 0x0c, 0x2f, 0xfb, 0xbb, 0x18, 0x64, 0xdf, 0xdc, 0x1d, 0x36, 0x7e, 0x13, 0xa6, 0xbc, 0xe1, 0xa5, - 0xd5, 0x88, 0xf2, 0xdf, 0xd0, 0x26, 0x5d, 0x90, 0xe9, 0x70, 0xa4, 0x4a, 0x02, 0x95, 0x26, 0x55, - 0x26, 0x68, 0xe1, 0x77, 0x5d, 0x33, 0x60, 0x65, 0xff, 0x01, 0x18, 0x18, 0x74, 0x0a, 0xa2, 0x12, - 0x43, 0x1d, 0x3f, 0x48, 0xe1, 0x47, 0xb0, 0x15, 0xe7, 0x2c, 0x05, 0x51, 0x59, 0xa2, 0x15, 0x7f, - 0x96, 0xc0, 0x87, 0x50, 0x8f, 0xd2, 0xb1, 0x21, 0x11, 0x35, 0xaa, 0xb3, 0xf0, 0x6b, 0xa8, 0xe9, - 0x25, 0xe6, 0xde, 0x2c, 0x7e, 0x06, 0x15, 0xdc, 0x97, 0xf0, 0x30, 0x86, 0x25, 0x9f, 0xdc, 0x0f, - 0x26, 0x52, 0xf7, 0x0b, 0x05, 0x34, 0xcf, 0x60, 0x33, 0x25, 0xc5, 0x0c, 0x26, 0x7c, 0x41, 0xe7, - 0x7a, 0x43, 0x55, 0x27, 0x9a, 0xac, 0x18, 0x4f, 0x66, 0x3e, 0x07, 0x23, 0x22, 0x0c, 0xdc, 0x85, - 0x60, 0x39, 0x1e, 0x85, 0x17, 0xc0, 0xa6, 0x55, 0x0d, 0x96, 0xe3, 0x57, 0x2a, 0x4f, 0x06, 0xfe, - 0x57, 0xfa, 0xae, 0x53, 0xb2, 0x54, 0xc7, 0x7c, 0x0d, 0xf5, 0xf0, 0x16, 0xb2, 0x5e, 0xf5, 0x7b, - 0x44, 0xc1, 0xe9, 0xd7, 0x15, 0xd8, 0x3a, 0xef, 0x5f, 0x0c, 0xcf, 0x83, 0x60, 0xee, 0x4c, 0xa8, - 0xac, 0x4e, 0x7a, 0x50, 0x96, 0xf5, 0x57, 0xce, 0xeb, 0x49, 0x27, 0xef, 0x22, 0x40, 0x4e, 0xa1, - 0x22, 0xcb, 0x30, 0x92, 0xf7, 0x88, 0xd2, 0xc9, 0xbd, 0x0f, 0xe0, 0x24, 0xaa, 0x50, 0xbb, 0xff, - 0x96, 0xd2, 0xc9, 0xbb, 0x14, 0x90, 0xcf, 0xc0, 0x88, 0x0b, 0xa8, 0x75, 0x2f, 0x2a, 0x9d, 0xb5, - 0xd7, 0x03, 0xd4, 0x8f, 0xf3, 0xda, 0xba, 0xf7, 0x87, 0xce, 0xda, 0x3a, 0x9a, 0x3c, 0x83, 0x5a, - 0x58, 0x19, 0xe4, 0xbf, 0x79, 0x74, 0xd6, 0x94, 0xee, 0xe8, 0x1e, 0x55, 0x5d, 0xe5, 0x3d, 0xcc, - 0x74, 0x72, 0xef, 0x17, 0xe4, 0x09, 0x54, 0x35, 0x39, 0xe7, 0xbe, 0x5e, 0x74, 0xf2, 0x0b, 0x70, - 0x34, 0x32, 0x2e, 0x0b, 0xd7, 0x3d, 0x1e, 0x75, 0xd6, 0x5e, 0x84, 0xc8, 0x39, 0x40, 0xa2, 0xa2, - 0x5a, 0xfb, 0x2a, 0xd4, 0x59, 0x7f, 0xc1, 0x21, 0x9f, 0x42, 0x3d, 0xbe, 0xb4, 0xe6, 0xbf, 0xd6, - 0x74, 0xd6, 0xdd, 0x39, 0xc6, 0x55, 0xf9, 0xa2, 0xf7, 0xc9, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, - 0xdd, 0x73, 0x23, 0x8d, 0x4d, 0x14, 0x00, 0x00, + // 1784 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0xcd, 0x72, 0x1b, 0xc7, + 0x11, 0x26, 0xfe, 0xb1, 0x0d, 0x10, 0x24, 0x87, 0xfa, 0x81, 0xe0, 0x4a, 0x89, 0xb5, 0x49, 0xd9, + 0x60, 0x24, 0x13, 0x09, 0x1d, 0xa9, 0x44, 0x39, 0xe5, 0x0a, 0x41, 0x2a, 0x02, 0x4a, 0x49, 0xcc, + 0xac, 0x65, 0xa5, 0x2a, 0x17, 0xd4, 0x60, 0x77, 0x08, 0x6c, 0x09, 0xfb, 0x63, 0xcc, 0x80, 0x06, + 0x75, 0xcb, 0xdd, 0xf7, 0x9c, 0xf3, 0x10, 0x79, 0x85, 0x54, 0x52, 0x79, 0x07, 0x1e, 0x9c, 0x5b, + 0x5e, 0x22, 0xa9, 0x9e, 0x99, 0xfd, 0xe5, 0xc2, 0xe5, 0x28, 0x47, 0x5f, 0x80, 0x99, 0xed, 0xaf, + 0x67, 0xa6, 0x7b, 0x7a, 0xbe, 0xee, 0x19, 0xd8, 0x13, 0xd7, 0x21, 0xe3, 0x03, 0xf9, 0x7b, 0x14, + 0x2e, 0x03, 0x11, 0x90, 0x9a, 0xec, 0xf4, 0x3e, 0x9e, 0xb9, 0x62, 0xbe, 0x9a, 0x1e, 0xd9, 0x81, + 0x37, 0x98, 0x05, 0xb3, 0x60, 0x20, 0xa5, 0xd3, 0xd5, 0xa5, 0xec, 0xc9, 0x8e, 0x6c, 0x29, 0xad, + 0xde, 0x20, 0x05, 0x17, 0xcc, 0x77, 0xd8, 0xd2, 0x73, 0x7d, 0x31, 0x10, 0xde, 0xc2, 0x9d, 0xf2, + 0x81, 0x1d, 0x78, 0x5e, 0xe0, 0xa7, 0xa7, 0x31, 0xff, 0x56, 0x85, 0x86, 0xc5, 0xbe, 0x5a, 0x31, + 0x2e, 0x48, 0x1f, 0xaa, 0xcc, 0x9e, 0x07, 0xdd, 0xf2, 0x41, 0xa9, 0xdf, 0x3a, 0x26, 0x47, 0x0a, + 0xa7, 0xa5, 0x2f, 0xec, 0x79, 0x30, 0xda, 0xb2, 0x24, 0x82, 0x3c, 0x82, 0xda, 0xe5, 0x62, 0xc5, + 0xe7, 0xdd, 0x8a, 0x84, 0xee, 0x67, 0xa1, 0xbf, 0x46, 0xd1, 0x68, 0xcb, 0x52, 0x18, 0x1c, 0xd6, + 0xf5, 0x2f, 0x83, 0x6e, 0xb5, 0x68, 0xd8, 0xb1, 0x7f, 0x29, 0x87, 0x45, 0x04, 0x79, 0x06, 0xc0, + 0x99, 0x98, 0x04, 0xa1, 0x70, 0x03, 0xbf, 0x5b, 0x93, 0xf8, 0xfb, 0x59, 0xfc, 0x17, 0x4c, 0x7c, + 0x2e, 0xc5, 0xa3, 0x2d, 0xcb, 0xe0, 0x51, 0x07, 0x35, 0x5d, 0xdf, 0x15, 0x13, 0x7b, 0x4e, 0x5d, + 0xbf, 0x5b, 0x2f, 0xd2, 0x1c, 0xfb, 0xae, 0x38, 0x43, 0x31, 0x6a, 0xba, 0x51, 0x07, 0x4d, 0xf9, + 0x6a, 0xc5, 0x96, 0xd7, 0xdd, 0x46, 0x91, 0x29, 0xbf, 0x47, 0x11, 0x9a, 0x22, 0x31, 0xe4, 0x53, + 0x68, 0x4d, 0xd9, 0xcc, 0xf5, 0x27, 0xd3, 0x45, 0x60, 0xbf, 0xed, 0x36, 0xa5, 0x4a, 0x37, 0xab, + 0x32, 0x44, 0xc0, 0x10, 0xe5, 0xa3, 0x2d, 0x0b, 0xa6, 0x71, 0x8f, 0x1c, 0x43, 0xd3, 0x9e, 0x33, + 0xfb, 0xed, 0x44, 0xac, 0xbb, 0x86, 0xd4, 0xbc, 0x9b, 0xd5, 0x3c, 0x43, 0xe9, 0xeb, 0xf5, 0x68, + 0xcb, 0x6a, 0xd8, 0xaa, 0x89, 0x76, 0x39, 0x6c, 0xe1, 0x5e, 0xb1, 0x25, 0x6a, 0xed, 0x17, 0xd9, + 0x75, 0xae, 0xe4, 0x52, 0xcf, 0x70, 0xa2, 0x0e, 0x79, 0x02, 0x06, 0xf3, 0x1d, 0xbd, 0xd0, 0x96, + 0x54, 0xbc, 0x97, 0xdb, 0x51, 0xdf, 0x89, 0x96, 0xd9, 0x64, 0xba, 0x4d, 0x8e, 0xa0, 0x8e, 0x51, + 0xe2, 0x8a, 0x6e, 0x5b, 0xea, 0xdc, 0xc9, 0x2d, 0x51, 0xca, 0x46, 0x5b, 0x96, 0x46, 0x0d, 0x1b, + 0x50, 0xbb, 0xa2, 0x8b, 0x15, 0x33, 0x3f, 0x82, 0x56, 0x2a, 0x52, 0x48, 0x17, 0x1a, 0x1e, 0xe3, + 0x9c, 0xce, 0x58, 0xb7, 0x74, 0x50, 0xea, 0x1b, 0x56, 0xd4, 0x35, 0x3b, 0xd0, 0x4e, 0xc7, 0x49, + 0x4a, 0x11, 0x63, 0x01, 0x15, 0xaf, 0xd8, 0x92, 0x63, 0x00, 0x68, 0x45, 0xdd, 0x35, 0x9f, 0xc3, + 0x6e, 0x3e, 0x08, 0xc8, 0x2e, 0x54, 0xde, 0xb2, 0x6b, 0x8d, 0xc4, 0x26, 0xb9, 0xa3, 0x17, 0x24, + 0xa3, 0xd8, 0xb0, 0xf4, 0xea, 0x82, 0x58, 0x37, 0x0e, 0x03, 0xf2, 0x14, 0xe0, 0x8a, 0x2e, 0x5c, + 0x87, 0x8a, 0x60, 0xc9, 0xbb, 0xa5, 0x83, 0x4a, 0xbf, 0x75, 0xbc, 0xab, 0xcd, 0x7d, 0x13, 0x09, + 0x86, 0xd5, 0xbf, 0xdf, 0x3c, 0xdc, 0xb2, 0x52, 0x48, 0xf2, 0x63, 0xd8, 0x9e, 0x31, 0x9f, 0x71, + 0x97, 0x4f, 0xa6, 0xd7, 0x82, 0x71, 0x39, 0x53, 0xdb, 0x6a, 0xeb, 0x8f, 0x43, 0xfc, 0x66, 0x3a, + 0xb1, 0x95, 0x32, 0x84, 0x08, 0x81, 0xaa, 0x43, 0x05, 0x95, 0x2b, 0x6d, 0x5b, 0xb2, 0x8d, 0xdf, + 0x42, 0x2a, 0xe6, 0x7a, 0xa5, 0xb2, 0x4d, 0xee, 0x41, 0x7d, 0xce, 0xdc, 0xd9, 0x5c, 0xc8, 0xa3, + 0x55, 0xb1, 0x74, 0x0f, 0xcd, 0x0a, 0x97, 0xc1, 0x15, 0x93, 0xa7, 0xa8, 0x69, 0xa9, 0x8e, 0xf9, + 0xcf, 0x12, 0xec, 0xdd, 0x0a, 0x3b, 0x1c, 0x77, 0x4e, 0xf9, 0x3c, 0x9a, 0x0b, 0xdb, 0xe4, 0x11, + 0x8e, 0x4b, 0x1d, 0xb6, 0xd4, 0xa7, 0x7b, 0x5b, 0x1b, 0x3a, 0x92, 0x1f, 0xb5, 0x95, 0x1a, 0x42, + 0x1e, 0xc1, 0x1e, 0x9d, 0x72, 0xe6, 0x8b, 0x49, 0xca, 0x41, 0x95, 0x83, 0x4a, 0xbf, 0x6d, 0xed, + 0x2a, 0xc1, 0x9b, 0xc4, 0x1d, 0x23, 0xb8, 0x33, 0xbd, 0x7e, 0x47, 0x7d, 0xe1, 0xfa, 0x2c, 0x8d, + 0xaf, 0x4a, 0x87, 0xee, 0xe8, 0x79, 0x5e, 0x5c, 0xb9, 0x0e, 0xf3, 0x6d, 0xa6, 0x67, 0xda, 0x8f, + 0x55, 0x92, 0x91, 0xcc, 0x03, 0xe8, 0x64, 0x4f, 0x02, 0xe9, 0x40, 0x59, 0xac, 0xb5, 0x1d, 0x65, + 0xb1, 0x36, 0xcd, 0x78, 0x1b, 0xe3, 0xa8, 0xbf, 0x85, 0x39, 0x84, 0x9d, 0x5c, 0x80, 0xa7, 0x9c, + 0x5a, 0x4a, 0x3b, 0xd5, 0xdc, 0x81, 0xed, 0x4c, 0x5c, 0x9b, 0xdf, 0xd4, 0xa0, 0x69, 0x31, 0x1e, + 0x06, 0x3e, 0x67, 0xe4, 0x19, 0x18, 0x6c, 0x6d, 0x33, 0x45, 0x46, 0xa5, 0xdc, 0x51, 0x57, 0x98, + 0x17, 0x91, 0x1c, 0xcf, 0x5e, 0x0c, 0x26, 0x87, 0x19, 0x22, 0xdd, 0xcf, 0x2b, 0xa5, 0x99, 0xf4, + 0x71, 0x96, 0x49, 0xef, 0xe4, 0xb0, 0x39, 0x2a, 0x3d, 0xcc, 0x50, 0x69, 0x7e, 0xe0, 0x0c, 0x97, + 0x9e, 0x14, 0x70, 0x69, 0x7e, 0xf9, 0x1b, 0xc8, 0xf4, 0xa4, 0x80, 0x4c, 0xbb, 0xb7, 0xe6, 0x2a, + 0x64, 0xd3, 0xc7, 0x59, 0x36, 0xcd, 0x9b, 0x93, 0xa3, 0xd3, 0x5f, 0x16, 0xd1, 0xe9, 0x83, 0x9c, + 0xce, 0x46, 0x3e, 0xfd, 0xe4, 0x16, 0x9f, 0xde, 0xcb, 0xa9, 0x16, 0x10, 0xea, 0x49, 0x86, 0x50, + 0xa1, 0xd0, 0xb6, 0x0d, 0x8c, 0xfa, 0xf4, 0x36, 0xa3, 0xde, 0xcf, 0x6f, 0x6d, 0x11, 0xa5, 0x0e, + 0x72, 0x94, 0x7a, 0x37, 0xbf, 0xca, 0x8d, 0x9c, 0x7a, 0x88, 0xa7, 0x3b, 0x17, 0x69, 0xc8, 0x04, + 0x6c, 0xb9, 0x0c, 0x96, 0x9a, 0xf4, 0x54, 0xc7, 0xec, 0x23, 0xdf, 0x24, 0xf1, 0xf5, 0x1d, 0xfc, + 0x2b, 0x83, 0x3e, 0x15, 0x5d, 0xe6, 0x9f, 0x4b, 0x89, 0xae, 0xa4, 0xe0, 0x34, 0x57, 0x19, 0x9a, + 0xab, 0x52, 0xb4, 0x5c, 0xce, 0xd0, 0x32, 0xf9, 0x29, 0xec, 0x2d, 0x28, 0x17, 0xca, 0x2f, 0x93, + 0x0c, 0x79, 0xed, 0xa0, 0x40, 0x39, 0x44, 0xb1, 0xd8, 0xc7, 0xb0, 0x9f, 0xc2, 0xd2, 0x30, 0x9c, + 0x48, 0xa2, 0xaa, 0xca, 0xc3, 0xbb, 0x1b, 0xa3, 0x4f, 0xc3, 0x70, 0x44, 0xf9, 0xdc, 0xfc, 0x6d, + 0x62, 0x7f, 0x42, 0xf9, 0x04, 0xaa, 0x76, 0xe0, 0x28, 0xb3, 0xb6, 0x2d, 0xd9, 0xc6, 0x34, 0xb0, + 0x08, 0x66, 0x72, 0x56, 0xc3, 0xc2, 0x26, 0xa2, 0xe2, 0x93, 0x62, 0xa8, 0x23, 0x61, 0xbe, 0x4a, + 0x86, 0xfb, 0xbf, 0xb3, 0x80, 0xf9, 0xd7, 0x52, 0xe2, 0xc7, 0x98, 0xe2, 0xdf, 0x6f, 0x61, 0xb8, + 0xa5, 0xae, 0xef, 0xb0, 0xb5, 0x3c, 0xa6, 0x15, 0x4b, 0x75, 0xa2, 0xdc, 0x56, 0x97, 0xce, 0xc9, + 0xe6, 0xb6, 0x86, 0xfc, 0xa6, 0x3a, 0x3a, 0x35, 0x04, 0x97, 0xf2, 0xfc, 0xb4, 0x2d, 0xd5, 0x49, + 0x71, 0x9e, 0x91, 0xe1, 0xbc, 0x0b, 0x20, 0xb7, 0x4f, 0x16, 0x79, 0x0e, 0x55, 0x41, 0x67, 0x91, + 0xfd, 0x9d, 0x23, 0x55, 0x29, 0x1e, 0xbd, 0x7a, 0x73, 0x41, 0xdd, 0xe5, 0xf0, 0x1e, 0x5a, 0xff, + 0xef, 0x9b, 0x87, 0x1d, 0xc4, 0x3c, 0x0e, 0x3c, 0x57, 0x30, 0x2f, 0x14, 0xd7, 0x96, 0xd4, 0x31, + 0xff, 0x53, 0x42, 0xc6, 0xcd, 0x9c, 0xb8, 0x42, 0x5f, 0x44, 0x61, 0x55, 0x4e, 0xa5, 0xc0, 0xef, + 0xe7, 0x9f, 0x1f, 0x01, 0xcc, 0x28, 0x9f, 0x7c, 0x4d, 0x7d, 0xc1, 0x1c, 0xed, 0x24, 0x63, 0x46, + 0xf9, 0x1f, 0xe4, 0x07, 0xf2, 0x00, 0x9a, 0x28, 0x5e, 0x71, 0xe6, 0x48, 0x6f, 0x55, 0xac, 0xc6, + 0x8c, 0xf2, 0x2f, 0x39, 0x73, 0x62, 0xbb, 0x1a, 0xff, 0xbb, 0x5d, 0xa4, 0x0f, 0x95, 0x4b, 0xc6, + 0x34, 0x2b, 0xed, 0xc6, 0xaa, 0xe3, 0xa7, 0xbf, 0x90, 0xca, 0x2a, 0x24, 0x10, 0x62, 0xfe, 0xa9, + 0x9c, 0x44, 0x56, 0x92, 0x98, 0x7e, 0x58, 0x3e, 0xf8, 0x57, 0x09, 0x73, 0x73, 0x96, 0x06, 0xc9, + 0x19, 0xec, 0xc5, 0x47, 0x66, 0xb2, 0x0a, 0x1d, 0x8a, 0xe5, 0xd2, 0x77, 0x9f, 0xb1, 0xdd, 0x58, + 0xe1, 0x4b, 0x85, 0x27, 0xbf, 0x83, 0xfb, 0x36, 0x8e, 0xea, 0xf3, 0x15, 0x9f, 0x84, 0x74, 0x49, + 0xbd, 0x78, 0xa8, 0x72, 0x86, 0xf6, 0xcf, 0x22, 0xd4, 0x05, 0x82, 0xb8, 0x75, 0xd7, 0xce, 0x7c, + 0x88, 0xc6, 0x8b, 0xfc, 0x51, 0x79, 0x8f, 0x58, 0xff, 0x09, 0x96, 0x28, 0x69, 0xda, 0x2e, 0xda, + 0x51, 0xf3, 0x2f, 0x25, 0xd8, 0xc9, 0x2d, 0x86, 0x0c, 0x00, 0x14, 0xeb, 0x71, 0xf7, 0x1d, 0xd3, + 0xe5, 0x44, 0xe4, 0x03, 0xe9, 0xac, 0x2f, 0xdc, 0x77, 0xcc, 0x32, 0xa6, 0x51, 0x93, 0x7c, 0x08, + 0x0d, 0xb1, 0x56, 0xe8, 0x6c, 0xc9, 0xf6, 0x7a, 0x2d, 0xa1, 0x75, 0x21, 0xff, 0xc9, 0x13, 0x68, + 0xab, 0x81, 0x67, 0x01, 0xe7, 0x6e, 0xa8, 0x0b, 0x09, 0x92, 0x1e, 0xfa, 0xa5, 0x94, 0x58, 0xad, + 0x69, 0xd2, 0x31, 0xff, 0x08, 0x46, 0x3c, 0x2d, 0xf9, 0x00, 0x0c, 0x8f, 0xae, 0x75, 0x39, 0x8b, + 0x6b, 0xab, 0x59, 0x4d, 0x8f, 0xae, 0x65, 0x29, 0x4b, 0xee, 0x43, 0x03, 0x85, 0x62, 0xad, 0xfc, + 0x5d, 0xb3, 0xea, 0x1e, 0x5d, 0xbf, 0x5e, 0xc7, 0x82, 0x19, 0xe5, 0x51, 0xb1, 0xea, 0xd1, 0xf5, + 0x4b, 0xca, 0xcd, 0xcf, 0xa0, 0xae, 0x16, 0xf9, 0xbd, 0x06, 0x46, 0xfd, 0x72, 0x46, 0xff, 0x57, + 0xd0, 0x4a, 0xad, 0x9b, 0xfc, 0x1c, 0xee, 0x2a, 0x0b, 0x43, 0xba, 0x14, 0xd2, 0x23, 0x99, 0x01, + 0x89, 0x14, 0x5e, 0xd0, 0xa5, 0xc0, 0x29, 0x55, 0xf9, 0xfd, 0x8f, 0x32, 0xd4, 0x55, 0x69, 0x4b, + 0x3e, 0xc4, 0x32, 0x81, 0xba, 0xfe, 0xc4, 0x75, 0x54, 0x46, 0x1b, 0xb6, 0xbe, 0xbd, 0x79, 0xd8, + 0x90, 0xec, 0x3f, 0x3e, 0xc7, 0xca, 0x00, 0x1b, 0x4e, 0x8a, 0x30, 0xcb, 0x99, 0xca, 0x9b, 0x40, + 0x55, 0xb8, 0x1e, 0xd3, 0x26, 0xca, 0x36, 0xae, 0xdc, 0x5f, 0x79, 0xd2, 0x25, 0x55, 0xe5, 0x12, + 0x7f, 0xe5, 0xa1, 0x4b, 0x5e, 0xc2, 0x76, 0x2a, 0xc1, 0xb9, 0x8e, 0x2e, 0xbc, 0x3a, 0xe9, 0xdd, + 0x18, 0x9f, 0x0f, 0xf7, 0x31, 0xc8, 0xbe, 0xbd, 0x79, 0xd8, 0xfa, 0x4d, 0x94, 0xf2, 0xc6, 0xe7, + 0x56, 0x2b, 0xce, 0x7f, 0x63, 0x87, 0xf4, 0x41, 0xa6, 0xc3, 0x89, 0x2a, 0x09, 0x54, 0x9a, 0x54, + 0x99, 0xa0, 0x83, 0xdf, 0x75, 0xcd, 0x80, 0x95, 0xfd, 0x07, 0x60, 0x60, 0xd0, 0x29, 0x88, 0x4a, + 0x0c, 0x4d, 0xfc, 0x20, 0x85, 0x1f, 0xc1, 0x4e, 0x92, 0xb3, 0x14, 0x44, 0x65, 0x89, 0x4e, 0xf2, + 0x59, 0x02, 0x1f, 0x40, 0x33, 0x4e, 0xc7, 0x86, 0x44, 0x34, 0xa8, 0xce, 0xc2, 0x9f, 0x43, 0x43, + 0x2f, 0xb1, 0xf0, 0x66, 0xf1, 0x33, 0xa8, 0xe1, 0xbe, 0x44, 0x87, 0x31, 0x2a, 0xf9, 0xe4, 0x7e, + 0x30, 0x91, 0xb9, 0x5f, 0x28, 0xa0, 0x79, 0x02, 0xdb, 0x19, 0x29, 0x66, 0x30, 0x11, 0x08, 0xba, + 0xd0, 0x1b, 0xaa, 0x3a, 0xf1, 0x64, 0xe5, 0x64, 0x32, 0xf3, 0x39, 0x18, 0x31, 0x61, 0xe0, 0x2e, + 0x84, 0xab, 0xe9, 0x24, 0xba, 0x00, 0xb6, 0xad, 0x7a, 0xb8, 0x9a, 0xbe, 0x52, 0x79, 0x32, 0x0c, + 0xbe, 0xd6, 0x77, 0x9d, 0x8a, 0xa5, 0x3a, 0xa6, 0x0d, 0xcd, 0xe8, 0x16, 0x22, 0x37, 0xf5, 0x3a, + 0x64, 0x91, 0x21, 0xd8, 0x4e, 0x0f, 0x57, 0xce, 0x0c, 0xb7, 0xe9, 0x4e, 0x16, 0x45, 0x46, 0x35, + 0x89, 0x8c, 0xe3, 0x6f, 0x6a, 0xb0, 0x73, 0x3a, 0x3c, 0x1b, 0x9f, 0x86, 0xe1, 0xc2, 0xb5, 0xa9, + 0xac, 0x58, 0x06, 0x50, 0x95, 0x35, 0x59, 0xc1, 0x8b, 0x4a, 0xaf, 0xe8, 0x72, 0x40, 0x8e, 0xa1, + 0x26, 0x4b, 0x33, 0x52, 0xf4, 0xb0, 0xd2, 0x2b, 0xbc, 0x23, 0xe0, 0x24, 0xaa, 0x78, 0xbb, 0xfd, + 0xbe, 0xd2, 0x2b, 0xba, 0x28, 0x90, 0xcf, 0xc0, 0x48, 0x8a, 0xaa, 0x4d, 0xaf, 0x2c, 0xbd, 0x8d, + 0x57, 0x06, 0xd4, 0x4f, 0x72, 0xdd, 0xa6, 0x37, 0x89, 0xde, 0xc6, 0xda, 0x9a, 0x3c, 0x83, 0x46, + 0x54, 0x2d, 0x14, 0xbf, 0x83, 0xf4, 0x36, 0x94, 0xf3, 0xe8, 0x1e, 0x55, 0x71, 0x15, 0x3d, 0xd6, + 0xf4, 0x0a, 0xef, 0x1c, 0xe4, 0x09, 0xd4, 0x35, 0x61, 0x17, 0xbe, 0x68, 0xf4, 0x8a, 0x8b, 0x72, + 0x34, 0x32, 0x29, 0x15, 0x37, 0x3d, 0x28, 0xf5, 0x36, 0x5e, 0x8e, 0xc8, 0x29, 0x40, 0xaa, 0xca, + 0xda, 0xf8, 0x52, 0xd4, 0xdb, 0x7c, 0xe9, 0x21, 0x9f, 0x42, 0x33, 0xb9, 0xc8, 0x16, 0xbf, 0xe0, + 0xf4, 0x36, 0xdd, 0x43, 0xa6, 0x75, 0xf9, 0xca, 0xf7, 0xc9, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, + 0x0e, 0x79, 0xb0, 0x4d, 0x61, 0x14, 0x00, 0x00, } diff --git a/types/types.proto b/types/types.proto index 189b50d5..00777dcf 100644 --- a/types/types.proto +++ b/types/types.proto @@ -242,9 +242,10 @@ message Validator { } message Evidence { - bytes pub_key = 1; - int64 height = 2; - int64 time = 3; + bytes type = 1; + bytes pub_key = 2; + int64 height = 3; + int64 time = 4; } //---------------------------------------- From 459ee59e461fe201cdc3b66fa5423a3037f1c1c3 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Sun, 20 May 2018 16:15:58 -0400 Subject: [PATCH 17/40] Request/ResponseValidator, update Header --- types/types.proto | 57 +++++++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/types/types.proto b/types/types.proto index 00777dcf..2fe8ea7b 100644 --- a/types/types.proto +++ b/types/types.proto @@ -47,7 +47,7 @@ message RequestSetOption { } message RequestInitChain { - repeated Validator validators = 1 [(gogoproto.nullable)=false]; + repeated RequestValidator validators = 1 [(gogoproto.nullable)=false]; bytes genesis_bytes = 2; } @@ -61,8 +61,9 @@ message RequestQuery { message RequestBeginBlock { bytes hash = 1; Header header = 2 [(gogoproto.nullable)=false]; - repeated bytes absent_validators = 3; - repeated Evidence byzantine_validators = 4 [(gogoproto.nullable)=false]; + repeated RequestValidator present_validators = 3; + repeated RequestValidator absent_validators = 4; + repeated Evidence byzantine_validators = 5 [(gogoproto.nullable)=false]; } message RequestCheckTx { @@ -128,7 +129,7 @@ message ResponseSetOption { } message ResponseInitChain { - repeated Validator validators = 1 [(gogoproto.nullable)=false]; + repeated ResponseValidator validators = 1 [(gogoproto.nullable)=false]; } message ResponseQuery { @@ -170,7 +171,7 @@ message ResponseDeliverTx { } message ResponseEndBlock { - repeated Validator validator_updates = 1 [(gogoproto.nullable)=false]; + repeated ResponseValidator validator_updates = 1 [(gogoproto.nullable)=false]; ConsensusParams consensus_param_updates = 2; repeated common.KVPair tags = 3 [(gogoproto.nullable)=false, (gogoproto.jsontag)="tags,omitempty"]; } @@ -214,36 +215,44 @@ message BlockGossip { //---------------------------------------- // Blockchain Types +// just the minimum the app might need message Header { + // basics string chain_id = 1 [(gogoproto.customname)="ChainID"]; int64 height = 2; int64 time = 3; + + // txs int32 num_txs = 4; - BlockID last_block_id = 5 [(gogoproto.customname)="LastBlockID", (gogoproto.nullable)=false]; - bytes last_commit_hash = 6; - bytes data_hash = 7; - bytes validators_hash = 8; - bytes app_hash = 9; + int64 total_txs = 5; + + // hashes + bytes last_block_hash = 6; + bytes app_hash = 7; } -message BlockID { - bytes hash = 1; - PartSetHeader parts = 2 [(gogoproto.nullable)=false]; -} - -message PartSetHeader { - int32 total = 1; - bytes hash = 2; -} - -message Validator { - bytes pub_key = 1; +// Validator for use in responses +message ResponseValidator { + PubKey pub_key = 1; int64 power = 2; } +// Validator for use in requests +message RequestValidator { + bytes address = 1; + int32 index = 2; + PubKey pub_key = 3; + int64 power = 4; +} + +message PubKey { + string type = 1; + bytes data = 2; +} + message Evidence { - bytes type = 1; - bytes pub_key = 2; + string type = 1; + RequestValidator validator = 2; int64 height = 3; int64 time = 4; } From 31576150ad183e7e480bc61bf6c1e96b464b395e Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Sun, 20 May 2018 16:24:21 -0400 Subject: [PATCH 18/40] add total_voting_power to evidence --- types/types.proto | 1 + 1 file changed, 1 insertion(+) diff --git a/types/types.proto b/types/types.proto index 2fe8ea7b..d1f27eae 100644 --- a/types/types.proto +++ b/types/types.proto @@ -255,6 +255,7 @@ message Evidence { RequestValidator validator = 2; int64 height = 3; int64 time = 4; + int64 total_voting_power = 5; } //---------------------------------------- From efbc2efb425ba1dc8dd1b5b1da4a4246d515af3e Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Sun, 20 May 2018 16:25:48 -0400 Subject: [PATCH 19/40] add proposer to header --- types/types.proto | 3 +++ 1 file changed, 3 insertions(+) diff --git a/types/types.proto b/types/types.proto index d1f27eae..20101305 100644 --- a/types/types.proto +++ b/types/types.proto @@ -229,6 +229,9 @@ message Header { // hashes bytes last_block_hash = 6; bytes app_hash = 7; + + // consensus + RequestValidator proposer = 8; } // Validator for use in responses From 8bb04d7ef7d03165e397fc89db7a8b9662e6b4a1 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Wed, 23 May 2018 22:20:24 -0400 Subject: [PATCH 20/40] Validator and SignedValidator --- types/types.proto | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/types/types.proto b/types/types.proto index 20101305..2cea82d0 100644 --- a/types/types.proto +++ b/types/types.proto @@ -47,7 +47,7 @@ message RequestSetOption { } message RequestInitChain { - repeated RequestValidator validators = 1 [(gogoproto.nullable)=false]; + repeated Validator validators = 1 [(gogoproto.nullable)=false]; bytes genesis_bytes = 2; } @@ -61,9 +61,8 @@ message RequestQuery { message RequestBeginBlock { bytes hash = 1; Header header = 2 [(gogoproto.nullable)=false]; - repeated RequestValidator present_validators = 3; - repeated RequestValidator absent_validators = 4; - repeated Evidence byzantine_validators = 5 [(gogoproto.nullable)=false]; + repeated SigningValidator validators = 3; + repeated Evidence byzantine_validators = 4 [(gogoproto.nullable)=false]; } message RequestCheckTx { @@ -129,7 +128,7 @@ message ResponseSetOption { } message ResponseInitChain { - repeated ResponseValidator validators = 1 [(gogoproto.nullable)=false]; + repeated Validator validators = 1 [(gogoproto.nullable)=false]; } message ResponseQuery { @@ -171,7 +170,7 @@ message ResponseDeliverTx { } message ResponseEndBlock { - repeated ResponseValidator validator_updates = 1 [(gogoproto.nullable)=false]; + repeated Validator validator_updates = 1 [(gogoproto.nullable)=false]; ConsensusParams consensus_param_updates = 2; repeated common.KVPair tags = 3 [(gogoproto.nullable)=false, (gogoproto.jsontag)="tags,omitempty"]; } @@ -231,21 +230,20 @@ message Header { bytes app_hash = 7; // consensus - RequestValidator proposer = 8; + Validator proposer = 8; } -// Validator for use in responses -message ResponseValidator { - PubKey pub_key = 1; - int64 power = 2; -} - -// Validator for use in requests -message RequestValidator { +// Validator +message Validator { bytes address = 1; - int32 index = 2; - PubKey pub_key = 3; - int64 power = 4; + PubKey pub_key = 2 [(gogoproto.nullable)=false]; + int64 power = 3; +} + +// Validator with an extra bool +message SigningValidator { + Validator validator = 1; + bool signed_last_block = 2; } message PubKey { @@ -255,7 +253,7 @@ message PubKey { message Evidence { string type = 1; - RequestValidator validator = 2; + Validator validator = 2; int64 height = 3; int64 time = 4; int64 total_voting_power = 5; From 3dbdc87edba1028d52e1624aba5e1497bedc7d72 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Wed, 23 May 2018 22:20:35 -0400 Subject: [PATCH 21/40] protoc and update everything --- Makefile | 3 - example/dummy/README.md | 4 - example/dummy/helpers.go | 36 --- example/dummy/kvstore.go | 126 -------- example/dummy/kvstore_test.go | 310 ------------------- example/dummy/persistent_kvstore.go | 205 ------------ example/kvstore/helpers.go | 7 +- example/kvstore/kvstore_test.go | 2 +- example/kvstore/persistent_kvstore.go | 19 +- tests/server/client.go | 2 +- types/pubkey.go | 16 + types/types.pb.go | 429 +++++++++++++------------- types/util.go | 15 +- 13 files changed, 263 insertions(+), 911 deletions(-) delete mode 100644 example/dummy/README.md delete mode 100644 example/dummy/helpers.go delete mode 100644 example/dummy/kvstore.go delete mode 100644 example/dummy/kvstore_test.go delete mode 100644 example/dummy/persistent_kvstore.go create mode 100644 types/pubkey.go diff --git a/Makefile b/Makefile index 13a9547c..d5aa5365 100644 --- a/Makefile +++ b/Makefile @@ -94,9 +94,6 @@ test_cli: # test the cli against the examples in the tutorial at tendermint.com @ bash tests/test_cli/test.sh -fmt: - @ go fmt ./... - ######################################## ### Formatting, linting, and vetting diff --git a/example/dummy/README.md b/example/dummy/README.md deleted file mode 100644 index fe9d1c2d..00000000 --- a/example/dummy/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# Dummy - -DEPRECATED. See KVStore - diff --git a/example/dummy/helpers.go b/example/dummy/helpers.go deleted file mode 100644 index 1dc1e235..00000000 --- a/example/dummy/helpers.go +++ /dev/null @@ -1,36 +0,0 @@ -package dummy - -import ( - "github.com/tendermint/abci/types" - cmn "github.com/tendermint/tmlibs/common" -) - -// RandVal creates one random validator, with a key derived -// from the input value -func RandVal(i int) types.Validator { - pubkey := cmn.RandBytes(33) - power := cmn.RandUint16() + 1 - return types.Validator{pubkey, int64(power)} -} - -// RandVals returns a list of cnt validators for initializing -// the application. Note that the keys are deterministically -// derived from the index in the array, while the power is -// random (Change this if not desired) -func RandVals(cnt int) []types.Validator { - res := make([]types.Validator, cnt) - for i := 0; i < cnt; i++ { - res[i] = RandVal(i) - } - return res -} - -// InitDummy initializes the dummy app with some data, -// which allows tests to pass and is fine as long as you -// don't make any tx that modify the validator state -func InitDummy(app *PersistentDummyApplication) { - app.InitChain(types.RequestInitChain{ - Validators: RandVals(1), - GenesisBytes: []byte("[]"), - }) -} diff --git a/example/dummy/kvstore.go b/example/dummy/kvstore.go deleted file mode 100644 index 79aa4397..00000000 --- a/example/dummy/kvstore.go +++ /dev/null @@ -1,126 +0,0 @@ -package dummy - -import ( - "bytes" - "encoding/binary" - "encoding/json" - "fmt" - - "github.com/tendermint/abci/example/code" - "github.com/tendermint/abci/types" - cmn "github.com/tendermint/tmlibs/common" - dbm "github.com/tendermint/tmlibs/db" -) - -var ( - stateKey = []byte("stateKey") - kvPairPrefixKey = []byte("kvPairKey:") -) - -type State struct { - db dbm.DB - Size int64 `json:"size"` - Height int64 `json:"height"` - AppHash []byte `json:"app_hash"` -} - -func loadState(db dbm.DB) State { - stateBytes := db.Get(stateKey) - var state State - if len(stateBytes) != 0 { - err := json.Unmarshal(stateBytes, &state) - if err != nil { - panic(err) - } - } - state.db = db - return state -} - -func saveState(state State) { - stateBytes, err := json.Marshal(state) - if err != nil { - panic(err) - } - state.db.Set(stateKey, stateBytes) -} - -func prefixKey(key []byte) []byte { - return append(kvPairPrefixKey, key...) -} - -//--------------------------------------------------- - -var _ types.Application = (*DummyApplication)(nil) - -type DummyApplication struct { - types.BaseApplication - - state State -} - -func NewDummyApplication() *DummyApplication { - state := loadState(dbm.NewMemDB()) - return &DummyApplication{state: state} -} - -func (app *DummyApplication) Info(req types.RequestInfo) (resInfo types.ResponseInfo) { - return types.ResponseInfo{Data: fmt.Sprintf("{\"size\":%v}", app.state.Size)} -} - -// tx is either "key=value" or just arbitrary bytes -func (app *DummyApplication) DeliverTx(tx []byte) types.ResponseDeliverTx { - var key, value []byte - parts := bytes.Split(tx, []byte("=")) - if len(parts) == 2 { - key, value = parts[0], parts[1] - } else { - key, value = tx, tx - } - app.state.db.Set(prefixKey(key), value) - app.state.Size += 1 - - tags := []cmn.KVPair{ - {[]byte("app.creator"), []byte("jae")}, - {[]byte("app.key"), key}, - } - return types.ResponseDeliverTx{Code: code.CodeTypeOK, Tags: tags} -} - -func (app *DummyApplication) CheckTx(tx []byte) types.ResponseCheckTx { - return types.ResponseCheckTx{Code: code.CodeTypeOK} -} - -func (app *DummyApplication) Commit() types.ResponseCommit { - // Using a memdb - just return the big endian size of the db - appHash := make([]byte, 8) - binary.PutVarint(appHash, app.state.Size) - app.state.AppHash = appHash - app.state.Height += 1 - saveState(app.state) - return types.ResponseCommit{Data: appHash} -} - -func (app *DummyApplication) Query(reqQuery types.RequestQuery) (resQuery types.ResponseQuery) { - if reqQuery.Prove { - value := app.state.db.Get(prefixKey(reqQuery.Data)) - resQuery.Index = -1 // TODO make Proof return index - resQuery.Key = reqQuery.Data - resQuery.Value = value - if value != nil { - resQuery.Log = "exists" - } else { - resQuery.Log = "does not exist" - } - return - } else { - value := app.state.db.Get(prefixKey(reqQuery.Data)) - resQuery.Value = value - if value != nil { - resQuery.Log = "exists" - } else { - resQuery.Log = "does not exist" - } - return - } -} diff --git a/example/dummy/kvstore_test.go b/example/dummy/kvstore_test.go deleted file mode 100644 index 548fe742..00000000 --- a/example/dummy/kvstore_test.go +++ /dev/null @@ -1,310 +0,0 @@ -package dummy - -import ( - "bytes" - "io/ioutil" - "sort" - "testing" - - "github.com/stretchr/testify/require" - - cmn "github.com/tendermint/tmlibs/common" - "github.com/tendermint/tmlibs/log" - - abcicli "github.com/tendermint/abci/client" - "github.com/tendermint/abci/example/code" - abciserver "github.com/tendermint/abci/server" - "github.com/tendermint/abci/types" -) - -func testDummy(t *testing.T, app types.Application, tx []byte, key, value string) { - ar := app.DeliverTx(tx) - require.False(t, ar.IsErr(), ar) - // repeating tx doesn't raise error - ar = app.DeliverTx(tx) - require.False(t, ar.IsErr(), ar) - - // make sure query is fine - resQuery := app.Query(types.RequestQuery{ - Path: "/store", - Data: []byte(key), - }) - require.Equal(t, code.CodeTypeOK, resQuery.Code) - require.Equal(t, value, string(resQuery.Value)) - - // make sure proof is fine - resQuery = app.Query(types.RequestQuery{ - Path: "/store", - Data: []byte(key), - Prove: true, - }) - require.EqualValues(t, code.CodeTypeOK, resQuery.Code) - require.Equal(t, value, string(resQuery.Value)) -} - -func TestDummyKV(t *testing.T) { - dummy := NewDummyApplication() - key := "abc" - value := key - tx := []byte(key) - testDummy(t, dummy, tx, key, value) - - value = "def" - tx = []byte(key + "=" + value) - testDummy(t, dummy, tx, key, value) -} - -func TestPersistentDummyKV(t *testing.T) { - dir, err := ioutil.TempDir("/tmp", "abci-dummy-test") // TODO - if err != nil { - t.Fatal(err) - } - dummy := NewPersistentDummyApplication(dir) - key := "abc" - value := key - tx := []byte(key) - testDummy(t, dummy, tx, key, value) - - value = "def" - tx = []byte(key + "=" + value) - testDummy(t, dummy, tx, key, value) -} - -func TestPersistentDummyInfo(t *testing.T) { - dir, err := ioutil.TempDir("/tmp", "abci-dummy-test") // TODO - if err != nil { - t.Fatal(err) - } - dummy := NewPersistentDummyApplication(dir) - InitDummy(dummy) - height := int64(0) - - resInfo := dummy.Info(types.RequestInfo{}) - if resInfo.LastBlockHeight != height { - t.Fatalf("expected height of %d, got %d", height, resInfo.LastBlockHeight) - } - - // make and apply block - height = int64(1) - hash := []byte("foo") - header := types.Header{ - Height: int64(height), - } - dummy.BeginBlock(types.RequestBeginBlock{hash, header, nil, nil}) - dummy.EndBlock(types.RequestEndBlock{header.Height}) - dummy.Commit() - - resInfo = dummy.Info(types.RequestInfo{}) - if resInfo.LastBlockHeight != height { - t.Fatalf("expected height of %d, got %d", height, resInfo.LastBlockHeight) - } - -} - -// add a validator, remove a validator, update a validator -func TestValUpdates(t *testing.T) { - dir, err := ioutil.TempDir("/tmp", "abci-dummy-test") // TODO - if err != nil { - t.Fatal(err) - } - dummy := NewPersistentDummyApplication(dir) - - // init with some validators - total := 10 - nInit := 5 - vals := RandVals(total) - // iniitalize with the first nInit - dummy.InitChain(types.RequestInitChain{ - Validators: vals[:nInit], - }) - - vals1, vals2 := vals[:nInit], dummy.Validators() - valsEqual(t, vals1, vals2) - - var v1, v2, v3 types.Validator - - // add some validators - v1, v2 = vals[nInit], vals[nInit+1] - diff := []types.Validator{v1, v2} - tx1 := MakeValSetChangeTx(v1.PubKey, v1.Power) - tx2 := MakeValSetChangeTx(v2.PubKey, v2.Power) - - makeApplyBlock(t, dummy, 1, diff, tx1, tx2) - - vals1, vals2 = vals[:nInit+2], dummy.Validators() - valsEqual(t, vals1, vals2) - - // remove some validators - v1, v2, v3 = vals[nInit-2], vals[nInit-1], vals[nInit] - v1.Power = 0 - v2.Power = 0 - v3.Power = 0 - diff = []types.Validator{v1, v2, v3} - tx1 = MakeValSetChangeTx(v1.PubKey, v1.Power) - tx2 = MakeValSetChangeTx(v2.PubKey, v2.Power) - tx3 := MakeValSetChangeTx(v3.PubKey, v3.Power) - - makeApplyBlock(t, dummy, 2, diff, tx1, tx2, tx3) - - vals1 = append(vals[:nInit-2], vals[nInit+1]) - vals2 = dummy.Validators() - valsEqual(t, vals1, vals2) - - // update some validators - v1 = vals[0] - if v1.Power == 5 { - v1.Power = 6 - } else { - v1.Power = 5 - } - diff = []types.Validator{v1} - tx1 = MakeValSetChangeTx(v1.PubKey, v1.Power) - - makeApplyBlock(t, dummy, 3, diff, tx1) - - vals1 = append([]types.Validator{v1}, vals1[1:]...) - vals2 = dummy.Validators() - valsEqual(t, vals1, vals2) - -} - -func makeApplyBlock(t *testing.T, dummy types.Application, heightInt int, diff []types.Validator, txs ...[]byte) { - // make and apply block - height := int64(heightInt) - hash := []byte("foo") - header := types.Header{ - Height: height, - } - - dummy.BeginBlock(types.RequestBeginBlock{hash, header, nil, nil}) - for _, tx := range txs { - if r := dummy.DeliverTx(tx); r.IsErr() { - t.Fatal(r) - } - } - resEndBlock := dummy.EndBlock(types.RequestEndBlock{header.Height}) - dummy.Commit() - - valsEqual(t, diff, resEndBlock.ValidatorUpdates) - -} - -// order doesn't matter -func valsEqual(t *testing.T, vals1, vals2 []types.Validator) { - if len(vals1) != len(vals2) { - t.Fatalf("vals dont match in len. got %d, expected %d", len(vals2), len(vals1)) - } - sort.Sort(types.Validators(vals1)) - sort.Sort(types.Validators(vals2)) - for i, v1 := range vals1 { - v2 := vals2[i] - if !bytes.Equal(v1.PubKey, v2.PubKey) || - v1.Power != v2.Power { - t.Fatalf("vals dont match at index %d. got %X/%d , expected %X/%d", i, v2.PubKey, v2.Power, v1.PubKey, v1.Power) - } - } -} - -func makeSocketClientServer(app types.Application, name string) (abcicli.Client, cmn.Service, error) { - // Start the listener - socket := cmn.Fmt("unix://%s.sock", name) - logger := log.TestingLogger() - - server := abciserver.NewSocketServer(socket, app) - server.SetLogger(logger.With("module", "abci-server")) - if err := server.Start(); err != nil { - return nil, nil, err - } - - // Connect to the socket - client := abcicli.NewSocketClient(socket, false) - client.SetLogger(logger.With("module", "abci-client")) - if err := client.Start(); err != nil { - server.Stop() - return nil, nil, err - } - - return client, server, nil -} - -func makeGRPCClientServer(app types.Application, name string) (abcicli.Client, cmn.Service, error) { - // Start the listener - socket := cmn.Fmt("unix://%s.sock", name) - logger := log.TestingLogger() - - gapp := types.NewGRPCApplication(app) - server := abciserver.NewGRPCServer(socket, gapp) - server.SetLogger(logger.With("module", "abci-server")) - if err := server.Start(); err != nil { - return nil, nil, err - } - - client := abcicli.NewGRPCClient(socket, true) - client.SetLogger(logger.With("module", "abci-client")) - if err := client.Start(); err != nil { - server.Stop() - return nil, nil, err - } - return client, server, nil -} - -func TestClientServer(t *testing.T) { - // set up socket app - dummy := NewDummyApplication() - client, server, err := makeSocketClientServer(dummy, "dummy-socket") - require.Nil(t, err) - defer server.Stop() - defer client.Stop() - - runClientTests(t, client) - - // set up grpc app - dummy = NewDummyApplication() - gclient, gserver, err := makeGRPCClientServer(dummy, "dummy-grpc") - require.Nil(t, err) - defer gserver.Stop() - defer gclient.Stop() - - runClientTests(t, gclient) -} - -func runClientTests(t *testing.T, client abcicli.Client) { - // run some tests.... - key := "abc" - value := key - tx := []byte(key) - testClient(t, client, tx, key, value) - - value = "def" - tx = []byte(key + "=" + value) - testClient(t, client, tx, key, value) -} - -func testClient(t *testing.T, app abcicli.Client, tx []byte, key, value string) { - ar, err := app.DeliverTxSync(tx) - require.NoError(t, err) - require.False(t, ar.IsErr(), ar) - // repeating tx doesn't raise error - ar, err = app.DeliverTxSync(tx) - require.NoError(t, err) - require.False(t, ar.IsErr(), ar) - - // make sure query is fine - resQuery, err := app.QuerySync(types.RequestQuery{ - Path: "/store", - Data: []byte(key), - }) - require.Nil(t, err) - require.Equal(t, code.CodeTypeOK, resQuery.Code) - require.Equal(t, value, string(resQuery.Value)) - - // make sure proof is fine - resQuery, err = app.QuerySync(types.RequestQuery{ - Path: "/store", - Data: []byte(key), - Prove: true, - }) - require.Nil(t, err) - require.Equal(t, code.CodeTypeOK, resQuery.Code) - require.Equal(t, value, string(resQuery.Value)) -} diff --git a/example/dummy/persistent_kvstore.go b/example/dummy/persistent_kvstore.go deleted file mode 100644 index 30885bc1..00000000 --- a/example/dummy/persistent_kvstore.go +++ /dev/null @@ -1,205 +0,0 @@ -package dummy - -import ( - "bytes" - "encoding/hex" - "fmt" - "strconv" - "strings" - - "github.com/tendermint/abci/example/code" - "github.com/tendermint/abci/types" - cmn "github.com/tendermint/tmlibs/common" - dbm "github.com/tendermint/tmlibs/db" - "github.com/tendermint/tmlibs/log" -) - -const ( - ValidatorSetChangePrefix string = "val:" -) - -//----------------------------------------- - -var _ types.Application = (*PersistentDummyApplication)(nil) - -type PersistentDummyApplication struct { - app *DummyApplication - - // validator set - ValUpdates []types.Validator - - logger log.Logger -} - -func NewPersistentDummyApplication(dbDir string) *PersistentDummyApplication { - name := "dummy" - db, err := dbm.NewGoLevelDB(name, dbDir) - if err != nil { - panic(err) - } - - state := loadState(db) - - return &PersistentDummyApplication{ - app: &DummyApplication{state: state}, - logger: log.NewNopLogger(), - } -} - -func (app *PersistentDummyApplication) SetLogger(l log.Logger) { - app.logger = l -} - -func (app *PersistentDummyApplication) Info(req types.RequestInfo) types.ResponseInfo { - res := app.app.Info(req) - res.LastBlockHeight = app.app.state.Height - res.LastBlockAppHash = app.app.state.AppHash - return res -} - -func (app *PersistentDummyApplication) SetOption(req types.RequestSetOption) types.ResponseSetOption { - return app.app.SetOption(req) -} - -// tx is either "val:pubkey/power" or "key=value" or just arbitrary bytes -func (app *PersistentDummyApplication) DeliverTx(tx []byte) types.ResponseDeliverTx { - // if it starts with "val:", update the validator set - // format is "val:pubkey/power" - if isValidatorTx(tx) { - // update validators in the merkle tree - // and in app.ValUpdates - return app.execValidatorTx(tx) - } - - // otherwise, update the key-value store - return app.app.DeliverTx(tx) -} - -func (app *PersistentDummyApplication) CheckTx(tx []byte) types.ResponseCheckTx { - return app.app.CheckTx(tx) -} - -// Commit will panic if InitChain was not called -func (app *PersistentDummyApplication) Commit() types.ResponseCommit { - return app.app.Commit() -} - -func (app *PersistentDummyApplication) Query(reqQuery types.RequestQuery) types.ResponseQuery { - return app.app.Query(reqQuery) -} - -// Save the validators in the merkle tree -func (app *PersistentDummyApplication) InitChain(req types.RequestInitChain) types.ResponseInitChain { - for _, v := range req.Validators { - r := app.updateValidator(v) - if r.IsErr() { - app.logger.Error("Error updating validators", "r", r) - } - } - return types.ResponseInitChain{} -} - -// Track the block hash and header information -func (app *PersistentDummyApplication) BeginBlock(req types.RequestBeginBlock) types.ResponseBeginBlock { - // reset valset changes - app.ValUpdates = make([]types.Validator, 0) - return types.ResponseBeginBlock{} -} - -// Update the validator set -func (app *PersistentDummyApplication) EndBlock(req types.RequestEndBlock) types.ResponseEndBlock { - return types.ResponseEndBlock{ValidatorUpdates: app.ValUpdates} -} - -//--------------------------------------------- -// update validators - -func (app *PersistentDummyApplication) Validators() (validators []types.Validator) { - itr := app.app.state.db.Iterator(nil, nil) - for ; itr.Valid(); itr.Next() { - if isValidatorTx(itr.Key()) { - validator := new(types.Validator) - err := types.ReadMessage(bytes.NewBuffer(itr.Value()), validator) - if err != nil { - panic(err) - } - validators = append(validators, *validator) - } - } - return -} - -func MakeValSetChangeTx(pubkey []byte, power int64) []byte { - return []byte(cmn.Fmt("val:%X/%d", pubkey, power)) -} - -func isValidatorTx(tx []byte) bool { - return strings.HasPrefix(string(tx), ValidatorSetChangePrefix) -} - -// format is "val:pubkey1/power1,addr2/power2,addr3/power3"tx -func (app *PersistentDummyApplication) execValidatorTx(tx []byte) types.ResponseDeliverTx { - tx = tx[len(ValidatorSetChangePrefix):] - - //get the pubkey and power - pubKeyAndPower := strings.Split(string(tx), "/") - if len(pubKeyAndPower) != 2 { - return types.ResponseDeliverTx{ - Code: code.CodeTypeEncodingError, - Log: fmt.Sprintf("Expected 'pubkey/power'. Got %v", pubKeyAndPower)} - } - pubkeyS, powerS := pubKeyAndPower[0], pubKeyAndPower[1] - - // decode the pubkey, ensuring its go-crypto encoded - pubkey, err := hex.DecodeString(pubkeyS) - if err != nil { - return types.ResponseDeliverTx{ - Code: code.CodeTypeEncodingError, - Log: fmt.Sprintf("Pubkey (%s) is invalid hex", pubkeyS)} - } - /*_, err = crypto.PubKeyFromBytes(pubkey) - if err != nil { - return types.ResponseDeliverTx{ - Code: code.CodeTypeEncodingError, - Log: fmt.Sprintf("Pubkey (%X) is invalid go-crypto encoded", pubkey)} - }*/ - - // decode the power - power, err := strconv.ParseInt(powerS, 10, 64) - if err != nil { - return types.ResponseDeliverTx{ - Code: code.CodeTypeEncodingError, - Log: fmt.Sprintf("Power (%s) is not an int", powerS)} - } - - // update - return app.updateValidator(types.Validator{pubkey, power}) -} - -// add, update, or remove a validator -func (app *PersistentDummyApplication) updateValidator(v types.Validator) types.ResponseDeliverTx { - key := []byte("val:" + string(v.PubKey)) - if v.Power == 0 { - // remove validator - if !app.app.state.db.Has(key) { - return types.ResponseDeliverTx{ - Code: code.CodeTypeUnauthorized, - Log: fmt.Sprintf("Cannot remove non-existent validator %X", key)} - } - app.app.state.db.Delete(key) - } else { - // add or update validator - value := bytes.NewBuffer(make([]byte, 0)) - if err := types.WriteMessage(&v, value); err != nil { - return types.ResponseDeliverTx{ - Code: code.CodeTypeEncodingError, - Log: fmt.Sprintf("Error encoding validator: %v", err)} - } - app.app.state.db.Set(key, value.Bytes()) - } - - // we only update the changes array if we successfully updated the tree - app.ValUpdates = append(app.ValUpdates, v) - - return types.ResponseDeliverTx{Code: code.CodeTypeOK} -} diff --git a/example/kvstore/helpers.go b/example/kvstore/helpers.go index cbb8b6c5..da826fe6 100644 --- a/example/kvstore/helpers.go +++ b/example/kvstore/helpers.go @@ -8,9 +8,12 @@ import ( // RandVal creates one random validator, with a key derived // from the input value func RandVal(i int) types.Validator { - pubkey := cmn.RandBytes(33) + addr := cmn.RandBytes(20) + pubkey := cmn.RandBytes(32) power := cmn.RandUint16() + 1 - return types.Validator{pubkey, int64(power)} + v := types.Ed25519Validator(pubkey, int64(power)) + v.Address = addr + return v } // RandVals returns a list of cnt validators for initializing diff --git a/example/kvstore/kvstore_test.go b/example/kvstore/kvstore_test.go index b3d29ffb..ff3e4920 100644 --- a/example/kvstore/kvstore_test.go +++ b/example/kvstore/kvstore_test.go @@ -198,7 +198,7 @@ func valsEqual(t *testing.T, vals1, vals2 []types.Validator) { sort.Sort(types.Validators(vals2)) for i, v1 := range vals1 { v2 := vals2[i] - if !bytes.Equal(v1.PubKey, v2.PubKey) || + if !bytes.Equal(v1.PubKey.Data, v2.PubKey.Data) || v1.Power != v2.Power { t.Fatalf("vals dont match at index %d. got %X/%d , expected %X/%d", i, v2.PubKey, v2.Power, v1.PubKey, v1.Power) } diff --git a/example/kvstore/persistent_kvstore.go b/example/kvstore/persistent_kvstore.go index 888258ff..02f7ce74 100644 --- a/example/kvstore/persistent_kvstore.go +++ b/example/kvstore/persistent_kvstore.go @@ -129,15 +129,16 @@ func (app *PersistentKVStoreApplication) Validators() (validators []types.Valida return } -func MakeValSetChangeTx(pubkey []byte, power int64) []byte { - return []byte(cmn.Fmt("val:%X/%d", pubkey, power)) +func MakeValSetChangeTx(pubkey types.PubKey, power int64) []byte { + return []byte(cmn.Fmt("val:%X/%d", pubkey.Data, power)) } func isValidatorTx(tx []byte) bool { return strings.HasPrefix(string(tx), ValidatorSetChangePrefix) } -// format is "val:pubkey1/power1,addr2/power2,addr3/power3"tx +// format is "val:pubkey/power" +// pubkey is raw 32-byte ed25519 key func (app *PersistentKVStoreApplication) execValidatorTx(tx []byte) types.ResponseDeliverTx { tx = tx[len(ValidatorSetChangePrefix):] @@ -150,19 +151,13 @@ func (app *PersistentKVStoreApplication) execValidatorTx(tx []byte) types.Respon } pubkeyS, powerS := pubKeyAndPower[0], pubKeyAndPower[1] - // decode the pubkey, ensuring its go-crypto encoded + // decode the pubkey pubkey, err := hex.DecodeString(pubkeyS) if err != nil { return types.ResponseDeliverTx{ Code: code.CodeTypeEncodingError, Log: fmt.Sprintf("Pubkey (%s) is invalid hex", pubkeyS)} } - /*_, err = crypto.PubKeyFromBytes(pubkey) - if err != nil { - return types.ResponseDeliverTx{ - Code: code.CodeTypeEncodingError, - Log: fmt.Sprintf("Pubkey (%X) is invalid go-crypto encoded", pubkey)} - }*/ // decode the power power, err := strconv.ParseInt(powerS, 10, 64) @@ -173,12 +168,12 @@ func (app *PersistentKVStoreApplication) execValidatorTx(tx []byte) types.Respon } // update - return app.updateValidator(types.Validator{pubkey, power}) + return app.updateValidator(types.Ed25519Validator(pubkey, int64(power))) } // add, update, or remove a validator func (app *PersistentKVStoreApplication) updateValidator(v types.Validator) types.ResponseDeliverTx { - key := []byte("val:" + string(v.PubKey)) + key := []byte("val:" + string(v.PubKey.Data)) if v.Power == 0 { // remove validator if !app.app.state.db.Has(key) { diff --git a/tests/server/client.go b/tests/server/client.go index 2516b9fd..14b4007a 100644 --- a/tests/server/client.go +++ b/tests/server/client.go @@ -16,7 +16,7 @@ func InitChain(client abcicli.Client) error { for i := 0; i < total; i++ { pubkey := cmn.RandBytes(33) power := cmn.RandInt() - vals[i] = types.Validator{pubkey, int64(power)} + vals[i] = types.Ed25519Validator(pubkey, int64(power)) } _, err := client.InitChainSync(types.RequestInitChain{ Validators: vals, diff --git a/types/pubkey.go b/types/pubkey.go new file mode 100644 index 00000000..e5cd5fbf --- /dev/null +++ b/types/pubkey.go @@ -0,0 +1,16 @@ +package types + +const ( + PubKeyEd25519 = "ed25519" +) + +func Ed25519Validator(pubkey []byte, power int64) Validator { + return Validator{ + // Address: + PubKey: PubKey{ + Type: PubKeyEd25519, + Data: pubkey, + }, + Power: power, + } +} diff --git a/types/types.pb.go b/types/types.pb.go index 23b42553..e04a4f4b 100644 --- a/types/types.pb.go +++ b/types/types.pb.go @@ -38,9 +38,9 @@ It has these top-level messages: TxSize BlockGossip Header - BlockID - PartSetHeader Validator + SigningValidator + PubKey Evidence */ //nolint: gas @@ -596,10 +596,10 @@ func (m *RequestQuery) GetProve() bool { } type RequestBeginBlock struct { - Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` - Header Header `protobuf:"bytes,2,opt,name=header" json:"header"` - AbsentValidators [][]byte `protobuf:"bytes,3,rep,name=absent_validators,json=absentValidators" json:"absent_validators,omitempty"` - ByzantineValidators []Evidence `protobuf:"bytes,4,rep,name=byzantine_validators,json=byzantineValidators" json:"byzantine_validators"` + Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` + Header Header `protobuf:"bytes,2,opt,name=header" json:"header"` + Validators []*SigningValidator `protobuf:"bytes,3,rep,name=validators" json:"validators,omitempty"` + ByzantineValidators []Evidence `protobuf:"bytes,4,rep,name=byzantine_validators,json=byzantineValidators" json:"byzantine_validators"` } func (m *RequestBeginBlock) Reset() { *m = RequestBeginBlock{} } @@ -621,9 +621,9 @@ func (m *RequestBeginBlock) GetHeader() Header { return Header{} } -func (m *RequestBeginBlock) GetAbsentValidators() [][]byte { +func (m *RequestBeginBlock) GetValidators() []*SigningValidator { if m != nil { - return m.AbsentValidators + return m.Validators } return nil } @@ -1646,16 +1646,20 @@ func (m *BlockGossip) GetBlockPartSizeBytes() int32 { return 0 } +// just the minimum the app might need type Header struct { - ChainID string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` - Height int64 `protobuf:"varint,2,opt,name=height,proto3" json:"height,omitempty"` - Time int64 `protobuf:"varint,3,opt,name=time,proto3" json:"time,omitempty"` - NumTxs int32 `protobuf:"varint,4,opt,name=num_txs,json=numTxs,proto3" json:"num_txs,omitempty"` - LastBlockID BlockID `protobuf:"bytes,5,opt,name=last_block_id,json=lastBlockId" json:"last_block_id"` - LastCommitHash []byte `protobuf:"bytes,6,opt,name=last_commit_hash,json=lastCommitHash,proto3" json:"last_commit_hash,omitempty"` - DataHash []byte `protobuf:"bytes,7,opt,name=data_hash,json=dataHash,proto3" json:"data_hash,omitempty"` - ValidatorsHash []byte `protobuf:"bytes,8,opt,name=validators_hash,json=validatorsHash,proto3" json:"validators_hash,omitempty"` - AppHash []byte `protobuf:"bytes,9,opt,name=app_hash,json=appHash,proto3" json:"app_hash,omitempty"` + // basics + ChainID string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + Height int64 `protobuf:"varint,2,opt,name=height,proto3" json:"height,omitempty"` + Time int64 `protobuf:"varint,3,opt,name=time,proto3" json:"time,omitempty"` + // txs + NumTxs int32 `protobuf:"varint,4,opt,name=num_txs,json=numTxs,proto3" json:"num_txs,omitempty"` + TotalTxs int64 `protobuf:"varint,5,opt,name=total_txs,json=totalTxs,proto3" json:"total_txs,omitempty"` + // hashes + LastBlockHash []byte `protobuf:"bytes,6,opt,name=last_block_hash,json=lastBlockHash,proto3" json:"last_block_hash,omitempty"` + AppHash []byte `protobuf:"bytes,7,opt,name=app_hash,json=appHash,proto3" json:"app_hash,omitempty"` + // consensus + Proposer *Validator `protobuf:"bytes,8,opt,name=proposer" json:"proposer,omitempty"` } func (m *Header) Reset() { *m = Header{} } @@ -1691,30 +1695,16 @@ func (m *Header) GetNumTxs() int32 { return 0 } -func (m *Header) GetLastBlockID() BlockID { +func (m *Header) GetTotalTxs() int64 { if m != nil { - return m.LastBlockID + return m.TotalTxs } - return BlockID{} + return 0 } -func (m *Header) GetLastCommitHash() []byte { +func (m *Header) GetLastBlockHash() []byte { if m != nil { - return m.LastCommitHash - } - return nil -} - -func (m *Header) GetDataHash() []byte { - if m != nil { - return m.DataHash - } - return nil -} - -func (m *Header) GetValidatorsHash() []byte { - if m != nil { - return m.ValidatorsHash + return m.LastBlockHash } return nil } @@ -1726,69 +1716,37 @@ func (m *Header) GetAppHash() []byte { return nil } -type BlockID struct { - Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` - Parts PartSetHeader `protobuf:"bytes,2,opt,name=parts" json:"parts"` -} - -func (m *BlockID) Reset() { *m = BlockID{} } -func (m *BlockID) String() string { return proto.CompactTextString(m) } -func (*BlockID) ProtoMessage() {} -func (*BlockID) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{30} } - -func (m *BlockID) GetHash() []byte { +func (m *Header) GetProposer() *Validator { if m != nil { - return m.Hash - } - return nil -} - -func (m *BlockID) GetParts() PartSetHeader { - if m != nil { - return m.Parts - } - return PartSetHeader{} -} - -type PartSetHeader struct { - Total int32 `protobuf:"varint,1,opt,name=total,proto3" json:"total,omitempty"` - Hash []byte `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash,omitempty"` -} - -func (m *PartSetHeader) Reset() { *m = PartSetHeader{} } -func (m *PartSetHeader) String() string { return proto.CompactTextString(m) } -func (*PartSetHeader) ProtoMessage() {} -func (*PartSetHeader) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{31} } - -func (m *PartSetHeader) GetTotal() int32 { - if m != nil { - return m.Total - } - return 0 -} - -func (m *PartSetHeader) GetHash() []byte { - if m != nil { - return m.Hash + return m.Proposer } return nil } +// Validator type Validator struct { - PubKey []byte `protobuf:"bytes,1,opt,name=pub_key,json=pubKey,proto3" json:"pub_key,omitempty"` - Power int64 `protobuf:"varint,2,opt,name=power,proto3" json:"power,omitempty"` + Address []byte `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + PubKey PubKey `protobuf:"bytes,2,opt,name=pub_key,json=pubKey" json:"pub_key"` + Power int64 `protobuf:"varint,3,opt,name=power,proto3" json:"power,omitempty"` } func (m *Validator) Reset() { *m = Validator{} } func (m *Validator) String() string { return proto.CompactTextString(m) } func (*Validator) ProtoMessage() {} -func (*Validator) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{32} } +func (*Validator) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{30} } -func (m *Validator) GetPubKey() []byte { +func (m *Validator) GetAddress() []byte { + if m != nil { + return m.Address + } + return nil +} + +func (m *Validator) GetPubKey() PubKey { if m != nil { return m.PubKey } - return nil + return PubKey{} } func (m *Validator) GetPower() int64 { @@ -1798,11 +1756,61 @@ func (m *Validator) GetPower() int64 { return 0 } +// Validator with an extra bool +type SigningValidator struct { + Validator *Validator `protobuf:"bytes,1,opt,name=validator" json:"validator,omitempty"` + SignedLastBlock bool `protobuf:"varint,2,opt,name=signed_last_block,json=signedLastBlock,proto3" json:"signed_last_block,omitempty"` +} + +func (m *SigningValidator) Reset() { *m = SigningValidator{} } +func (m *SigningValidator) String() string { return proto.CompactTextString(m) } +func (*SigningValidator) ProtoMessage() {} +func (*SigningValidator) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{31} } + +func (m *SigningValidator) GetValidator() *Validator { + if m != nil { + return m.Validator + } + return nil +} + +func (m *SigningValidator) GetSignedLastBlock() bool { + if m != nil { + return m.SignedLastBlock + } + return false +} + +type PubKey struct { + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` +} + +func (m *PubKey) Reset() { *m = PubKey{} } +func (m *PubKey) String() string { return proto.CompactTextString(m) } +func (*PubKey) ProtoMessage() {} +func (*PubKey) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{32} } + +func (m *PubKey) GetType() string { + if m != nil { + return m.Type + } + return "" +} + +func (m *PubKey) GetData() []byte { + if m != nil { + return m.Data + } + return nil +} + type Evidence struct { - Type []byte `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - PubKey []byte `protobuf:"bytes,2,opt,name=pub_key,json=pubKey,proto3" json:"pub_key,omitempty"` - Height int64 `protobuf:"varint,3,opt,name=height,proto3" json:"height,omitempty"` - Time int64 `protobuf:"varint,4,opt,name=time,proto3" json:"time,omitempty"` + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Validator *Validator `protobuf:"bytes,2,opt,name=validator" json:"validator,omitempty"` + Height int64 `protobuf:"varint,3,opt,name=height,proto3" json:"height,omitempty"` + Time int64 `protobuf:"varint,4,opt,name=time,proto3" json:"time,omitempty"` + TotalVotingPower int64 `protobuf:"varint,5,opt,name=total_voting_power,json=totalVotingPower,proto3" json:"total_voting_power,omitempty"` } func (m *Evidence) Reset() { *m = Evidence{} } @@ -1810,16 +1818,16 @@ func (m *Evidence) String() string { return proto.CompactTextString(m func (*Evidence) ProtoMessage() {} func (*Evidence) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{33} } -func (m *Evidence) GetType() []byte { +func (m *Evidence) GetType() string { if m != nil { return m.Type } - return nil + return "" } -func (m *Evidence) GetPubKey() []byte { +func (m *Evidence) GetValidator() *Validator { if m != nil { - return m.PubKey + return m.Validator } return nil } @@ -1838,6 +1846,13 @@ func (m *Evidence) GetTime() int64 { return 0 } +func (m *Evidence) GetTotalVotingPower() int64 { + if m != nil { + return m.TotalVotingPower + } + return 0 +} + func init() { proto.RegisterType((*Request)(nil), "types.Request") proto.RegisterType((*RequestEcho)(nil), "types.RequestEcho") @@ -1869,9 +1884,9 @@ func init() { proto.RegisterType((*TxSize)(nil), "types.TxSize") proto.RegisterType((*BlockGossip)(nil), "types.BlockGossip") proto.RegisterType((*Header)(nil), "types.Header") - proto.RegisterType((*BlockID)(nil), "types.BlockID") - proto.RegisterType((*PartSetHeader)(nil), "types.PartSetHeader") proto.RegisterType((*Validator)(nil), "types.Validator") + proto.RegisterType((*SigningValidator)(nil), "types.SigningValidator") + proto.RegisterType((*PubKey)(nil), "types.PubKey") proto.RegisterType((*Evidence)(nil), "types.Evidence") } @@ -2280,117 +2295,117 @@ var _ABCIApplication_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("types/types.proto", fileDescriptorTypes) } var fileDescriptorTypes = []byte{ - // 1784 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0xcd, 0x72, 0x1b, 0xc7, - 0x11, 0x26, 0xfe, 0xb1, 0x0d, 0x10, 0x24, 0x87, 0xfa, 0x81, 0xe0, 0x4a, 0x89, 0xb5, 0x49, 0xd9, - 0x60, 0x24, 0x13, 0x09, 0x1d, 0xa9, 0x44, 0x39, 0xe5, 0x0a, 0x41, 0x2a, 0x02, 0x4a, 0x49, 0xcc, - 0xac, 0x65, 0xa5, 0x2a, 0x17, 0xd4, 0x60, 0x77, 0x08, 0x6c, 0x09, 0xfb, 0x63, 0xcc, 0x80, 0x06, - 0x75, 0xcb, 0xdd, 0xf7, 0x9c, 0xf3, 0x10, 0x79, 0x85, 0x54, 0x52, 0x79, 0x07, 0x1e, 0x9c, 0x5b, - 0x5e, 0x22, 0xa9, 0x9e, 0x99, 0xfd, 0xe5, 0xc2, 0xe5, 0x28, 0x47, 0x5f, 0x80, 0x99, 0xed, 0xaf, - 0x67, 0xa6, 0x7b, 0x7a, 0xbe, 0xee, 0x19, 0xd8, 0x13, 0xd7, 0x21, 0xe3, 0x03, 0xf9, 0x7b, 0x14, - 0x2e, 0x03, 0x11, 0x90, 0x9a, 0xec, 0xf4, 0x3e, 0x9e, 0xb9, 0x62, 0xbe, 0x9a, 0x1e, 0xd9, 0x81, - 0x37, 0x98, 0x05, 0xb3, 0x60, 0x20, 0xa5, 0xd3, 0xd5, 0xa5, 0xec, 0xc9, 0x8e, 0x6c, 0x29, 0xad, - 0xde, 0x20, 0x05, 0x17, 0xcc, 0x77, 0xd8, 0xd2, 0x73, 0x7d, 0x31, 0x10, 0xde, 0xc2, 0x9d, 0xf2, - 0x81, 0x1d, 0x78, 0x5e, 0xe0, 0xa7, 0xa7, 0x31, 0xff, 0x56, 0x85, 0x86, 0xc5, 0xbe, 0x5a, 0x31, - 0x2e, 0x48, 0x1f, 0xaa, 0xcc, 0x9e, 0x07, 0xdd, 0xf2, 0x41, 0xa9, 0xdf, 0x3a, 0x26, 0x47, 0x0a, - 0xa7, 0xa5, 0x2f, 0xec, 0x79, 0x30, 0xda, 0xb2, 0x24, 0x82, 0x3c, 0x82, 0xda, 0xe5, 0x62, 0xc5, - 0xe7, 0xdd, 0x8a, 0x84, 0xee, 0x67, 0xa1, 0xbf, 0x46, 0xd1, 0x68, 0xcb, 0x52, 0x18, 0x1c, 0xd6, - 0xf5, 0x2f, 0x83, 0x6e, 0xb5, 0x68, 0xd8, 0xb1, 0x7f, 0x29, 0x87, 0x45, 0x04, 0x79, 0x06, 0xc0, - 0x99, 0x98, 0x04, 0xa1, 0x70, 0x03, 0xbf, 0x5b, 0x93, 0xf8, 0xfb, 0x59, 0xfc, 0x17, 0x4c, 0x7c, - 0x2e, 0xc5, 0xa3, 0x2d, 0xcb, 0xe0, 0x51, 0x07, 0x35, 0x5d, 0xdf, 0x15, 0x13, 0x7b, 0x4e, 0x5d, - 0xbf, 0x5b, 0x2f, 0xd2, 0x1c, 0xfb, 0xae, 0x38, 0x43, 0x31, 0x6a, 0xba, 0x51, 0x07, 0x4d, 0xf9, - 0x6a, 0xc5, 0x96, 0xd7, 0xdd, 0x46, 0x91, 0x29, 0xbf, 0x47, 0x11, 0x9a, 0x22, 0x31, 0xe4, 0x53, - 0x68, 0x4d, 0xd9, 0xcc, 0xf5, 0x27, 0xd3, 0x45, 0x60, 0xbf, 0xed, 0x36, 0xa5, 0x4a, 0x37, 0xab, - 0x32, 0x44, 0xc0, 0x10, 0xe5, 0xa3, 0x2d, 0x0b, 0xa6, 0x71, 0x8f, 0x1c, 0x43, 0xd3, 0x9e, 0x33, - 0xfb, 0xed, 0x44, 0xac, 0xbb, 0x86, 0xd4, 0xbc, 0x9b, 0xd5, 0x3c, 0x43, 0xe9, 0xeb, 0xf5, 0x68, - 0xcb, 0x6a, 0xd8, 0xaa, 0x89, 0x76, 0x39, 0x6c, 0xe1, 0x5e, 0xb1, 0x25, 0x6a, 0xed, 0x17, 0xd9, - 0x75, 0xae, 0xe4, 0x52, 0xcf, 0x70, 0xa2, 0x0e, 0x79, 0x02, 0x06, 0xf3, 0x1d, 0xbd, 0xd0, 0x96, - 0x54, 0xbc, 0x97, 0xdb, 0x51, 0xdf, 0x89, 0x96, 0xd9, 0x64, 0xba, 0x4d, 0x8e, 0xa0, 0x8e, 0x51, - 0xe2, 0x8a, 0x6e, 0x5b, 0xea, 0xdc, 0xc9, 0x2d, 0x51, 0xca, 0x46, 0x5b, 0x96, 0x46, 0x0d, 0x1b, - 0x50, 0xbb, 0xa2, 0x8b, 0x15, 0x33, 0x3f, 0x82, 0x56, 0x2a, 0x52, 0x48, 0x17, 0x1a, 0x1e, 0xe3, - 0x9c, 0xce, 0x58, 0xb7, 0x74, 0x50, 0xea, 0x1b, 0x56, 0xd4, 0x35, 0x3b, 0xd0, 0x4e, 0xc7, 0x49, - 0x4a, 0x11, 0x63, 0x01, 0x15, 0xaf, 0xd8, 0x92, 0x63, 0x00, 0x68, 0x45, 0xdd, 0x35, 0x9f, 0xc3, - 0x6e, 0x3e, 0x08, 0xc8, 0x2e, 0x54, 0xde, 0xb2, 0x6b, 0x8d, 0xc4, 0x26, 0xb9, 0xa3, 0x17, 0x24, - 0xa3, 0xd8, 0xb0, 0xf4, 0xea, 0x82, 0x58, 0x37, 0x0e, 0x03, 0xf2, 0x14, 0xe0, 0x8a, 0x2e, 0x5c, - 0x87, 0x8a, 0x60, 0xc9, 0xbb, 0xa5, 0x83, 0x4a, 0xbf, 0x75, 0xbc, 0xab, 0xcd, 0x7d, 0x13, 0x09, - 0x86, 0xd5, 0xbf, 0xdf, 0x3c, 0xdc, 0xb2, 0x52, 0x48, 0xf2, 0x63, 0xd8, 0x9e, 0x31, 0x9f, 0x71, - 0x97, 0x4f, 0xa6, 0xd7, 0x82, 0x71, 0x39, 0x53, 0xdb, 0x6a, 0xeb, 0x8f, 0x43, 0xfc, 0x66, 0x3a, - 0xb1, 0x95, 0x32, 0x84, 0x08, 0x81, 0xaa, 0x43, 0x05, 0x95, 0x2b, 0x6d, 0x5b, 0xb2, 0x8d, 0xdf, - 0x42, 0x2a, 0xe6, 0x7a, 0xa5, 0xb2, 0x4d, 0xee, 0x41, 0x7d, 0xce, 0xdc, 0xd9, 0x5c, 0xc8, 0xa3, - 0x55, 0xb1, 0x74, 0x0f, 0xcd, 0x0a, 0x97, 0xc1, 0x15, 0x93, 0xa7, 0xa8, 0x69, 0xa9, 0x8e, 0xf9, - 0xcf, 0x12, 0xec, 0xdd, 0x0a, 0x3b, 0x1c, 0x77, 0x4e, 0xf9, 0x3c, 0x9a, 0x0b, 0xdb, 0xe4, 0x11, - 0x8e, 0x4b, 0x1d, 0xb6, 0xd4, 0xa7, 0x7b, 0x5b, 0x1b, 0x3a, 0x92, 0x1f, 0xb5, 0x95, 0x1a, 0x42, - 0x1e, 0xc1, 0x1e, 0x9d, 0x72, 0xe6, 0x8b, 0x49, 0xca, 0x41, 0x95, 0x83, 0x4a, 0xbf, 0x6d, 0xed, - 0x2a, 0xc1, 0x9b, 0xc4, 0x1d, 0x23, 0xb8, 0x33, 0xbd, 0x7e, 0x47, 0x7d, 0xe1, 0xfa, 0x2c, 0x8d, - 0xaf, 0x4a, 0x87, 0xee, 0xe8, 0x79, 0x5e, 0x5c, 0xb9, 0x0e, 0xf3, 0x6d, 0xa6, 0x67, 0xda, 0x8f, - 0x55, 0x92, 0x91, 0xcc, 0x03, 0xe8, 0x64, 0x4f, 0x02, 0xe9, 0x40, 0x59, 0xac, 0xb5, 0x1d, 0x65, - 0xb1, 0x36, 0xcd, 0x78, 0x1b, 0xe3, 0xa8, 0xbf, 0x85, 0x39, 0x84, 0x9d, 0x5c, 0x80, 0xa7, 0x9c, - 0x5a, 0x4a, 0x3b, 0xd5, 0xdc, 0x81, 0xed, 0x4c, 0x5c, 0x9b, 0xdf, 0xd4, 0xa0, 0x69, 0x31, 0x1e, - 0x06, 0x3e, 0x67, 0xe4, 0x19, 0x18, 0x6c, 0x6d, 0x33, 0x45, 0x46, 0xa5, 0xdc, 0x51, 0x57, 0x98, - 0x17, 0x91, 0x1c, 0xcf, 0x5e, 0x0c, 0x26, 0x87, 0x19, 0x22, 0xdd, 0xcf, 0x2b, 0xa5, 0x99, 0xf4, - 0x71, 0x96, 0x49, 0xef, 0xe4, 0xb0, 0x39, 0x2a, 0x3d, 0xcc, 0x50, 0x69, 0x7e, 0xe0, 0x0c, 0x97, - 0x9e, 0x14, 0x70, 0x69, 0x7e, 0xf9, 0x1b, 0xc8, 0xf4, 0xa4, 0x80, 0x4c, 0xbb, 0xb7, 0xe6, 0x2a, - 0x64, 0xd3, 0xc7, 0x59, 0x36, 0xcd, 0x9b, 0x93, 0xa3, 0xd3, 0x5f, 0x16, 0xd1, 0xe9, 0x83, 0x9c, - 0xce, 0x46, 0x3e, 0xfd, 0xe4, 0x16, 0x9f, 0xde, 0xcb, 0xa9, 0x16, 0x10, 0xea, 0x49, 0x86, 0x50, - 0xa1, 0xd0, 0xb6, 0x0d, 0x8c, 0xfa, 0xf4, 0x36, 0xa3, 0xde, 0xcf, 0x6f, 0x6d, 0x11, 0xa5, 0x0e, - 0x72, 0x94, 0x7a, 0x37, 0xbf, 0xca, 0x8d, 0x9c, 0x7a, 0x88, 0xa7, 0x3b, 0x17, 0x69, 0xc8, 0x04, - 0x6c, 0xb9, 0x0c, 0x96, 0x9a, 0xf4, 0x54, 0xc7, 0xec, 0x23, 0xdf, 0x24, 0xf1, 0xf5, 0x1d, 0xfc, - 0x2b, 0x83, 0x3e, 0x15, 0x5d, 0xe6, 0x9f, 0x4b, 0x89, 0xae, 0xa4, 0xe0, 0x34, 0x57, 0x19, 0x9a, - 0xab, 0x52, 0xb4, 0x5c, 0xce, 0xd0, 0x32, 0xf9, 0x29, 0xec, 0x2d, 0x28, 0x17, 0xca, 0x2f, 0x93, - 0x0c, 0x79, 0xed, 0xa0, 0x40, 0x39, 0x44, 0xb1, 0xd8, 0xc7, 0xb0, 0x9f, 0xc2, 0xd2, 0x30, 0x9c, - 0x48, 0xa2, 0xaa, 0xca, 0xc3, 0xbb, 0x1b, 0xa3, 0x4f, 0xc3, 0x70, 0x44, 0xf9, 0xdc, 0xfc, 0x6d, - 0x62, 0x7f, 0x42, 0xf9, 0x04, 0xaa, 0x76, 0xe0, 0x28, 0xb3, 0xb6, 0x2d, 0xd9, 0xc6, 0x34, 0xb0, - 0x08, 0x66, 0x72, 0x56, 0xc3, 0xc2, 0x26, 0xa2, 0xe2, 0x93, 0x62, 0xa8, 0x23, 0x61, 0xbe, 0x4a, - 0x86, 0xfb, 0xbf, 0xb3, 0x80, 0xf9, 0xd7, 0x52, 0xe2, 0xc7, 0x98, 0xe2, 0xdf, 0x6f, 0x61, 0xb8, - 0xa5, 0xae, 0xef, 0xb0, 0xb5, 0x3c, 0xa6, 0x15, 0x4b, 0x75, 0xa2, 0xdc, 0x56, 0x97, 0xce, 0xc9, - 0xe6, 0xb6, 0x86, 0xfc, 0xa6, 0x3a, 0x3a, 0x35, 0x04, 0x97, 0xf2, 0xfc, 0xb4, 0x2d, 0xd5, 0x49, - 0x71, 0x9e, 0x91, 0xe1, 0xbc, 0x0b, 0x20, 0xb7, 0x4f, 0x16, 0x79, 0x0e, 0x55, 0x41, 0x67, 0x91, - 0xfd, 0x9d, 0x23, 0x55, 0x29, 0x1e, 0xbd, 0x7a, 0x73, 0x41, 0xdd, 0xe5, 0xf0, 0x1e, 0x5a, 0xff, - 0xef, 0x9b, 0x87, 0x1d, 0xc4, 0x3c, 0x0e, 0x3c, 0x57, 0x30, 0x2f, 0x14, 0xd7, 0x96, 0xd4, 0x31, - 0xff, 0x53, 0x42, 0xc6, 0xcd, 0x9c, 0xb8, 0x42, 0x5f, 0x44, 0x61, 0x55, 0x4e, 0xa5, 0xc0, 0xef, - 0xe7, 0x9f, 0x1f, 0x01, 0xcc, 0x28, 0x9f, 0x7c, 0x4d, 0x7d, 0xc1, 0x1c, 0xed, 0x24, 0x63, 0x46, - 0xf9, 0x1f, 0xe4, 0x07, 0xf2, 0x00, 0x9a, 0x28, 0x5e, 0x71, 0xe6, 0x48, 0x6f, 0x55, 0xac, 0xc6, - 0x8c, 0xf2, 0x2f, 0x39, 0x73, 0x62, 0xbb, 0x1a, 0xff, 0xbb, 0x5d, 0xa4, 0x0f, 0x95, 0x4b, 0xc6, - 0x34, 0x2b, 0xed, 0xc6, 0xaa, 0xe3, 0xa7, 0xbf, 0x90, 0xca, 0x2a, 0x24, 0x10, 0x62, 0xfe, 0xa9, - 0x9c, 0x44, 0x56, 0x92, 0x98, 0x7e, 0x58, 0x3e, 0xf8, 0x57, 0x09, 0x73, 0x73, 0x96, 0x06, 0xc9, - 0x19, 0xec, 0xc5, 0x47, 0x66, 0xb2, 0x0a, 0x1d, 0x8a, 0xe5, 0xd2, 0x77, 0x9f, 0xb1, 0xdd, 0x58, - 0xe1, 0x4b, 0x85, 0x27, 0xbf, 0x83, 0xfb, 0x36, 0x8e, 0xea, 0xf3, 0x15, 0x9f, 0x84, 0x74, 0x49, - 0xbd, 0x78, 0xa8, 0x72, 0x86, 0xf6, 0xcf, 0x22, 0xd4, 0x05, 0x82, 0xb8, 0x75, 0xd7, 0xce, 0x7c, - 0x88, 0xc6, 0x8b, 0xfc, 0x51, 0x79, 0x8f, 0x58, 0xff, 0x09, 0x96, 0x28, 0x69, 0xda, 0x2e, 0xda, - 0x51, 0xf3, 0x2f, 0x25, 0xd8, 0xc9, 0x2d, 0x86, 0x0c, 0x00, 0x14, 0xeb, 0x71, 0xf7, 0x1d, 0xd3, - 0xe5, 0x44, 0xe4, 0x03, 0xe9, 0xac, 0x2f, 0xdc, 0x77, 0xcc, 0x32, 0xa6, 0x51, 0x93, 0x7c, 0x08, - 0x0d, 0xb1, 0x56, 0xe8, 0x6c, 0xc9, 0xf6, 0x7a, 0x2d, 0xa1, 0x75, 0x21, 0xff, 0xc9, 0x13, 0x68, - 0xab, 0x81, 0x67, 0x01, 0xe7, 0x6e, 0xa8, 0x0b, 0x09, 0x92, 0x1e, 0xfa, 0xa5, 0x94, 0x58, 0xad, - 0x69, 0xd2, 0x31, 0xff, 0x08, 0x46, 0x3c, 0x2d, 0xf9, 0x00, 0x0c, 0x8f, 0xae, 0x75, 0x39, 0x8b, - 0x6b, 0xab, 0x59, 0x4d, 0x8f, 0xae, 0x65, 0x29, 0x4b, 0xee, 0x43, 0x03, 0x85, 0x62, 0xad, 0xfc, - 0x5d, 0xb3, 0xea, 0x1e, 0x5d, 0xbf, 0x5e, 0xc7, 0x82, 0x19, 0xe5, 0x51, 0xb1, 0xea, 0xd1, 0xf5, - 0x4b, 0xca, 0xcd, 0xcf, 0xa0, 0xae, 0x16, 0xf9, 0xbd, 0x06, 0x46, 0xfd, 0x72, 0x46, 0xff, 0x57, - 0xd0, 0x4a, 0xad, 0x9b, 0xfc, 0x1c, 0xee, 0x2a, 0x0b, 0x43, 0xba, 0x14, 0xd2, 0x23, 0x99, 0x01, - 0x89, 0x14, 0x5e, 0xd0, 0xa5, 0xc0, 0x29, 0x55, 0xf9, 0xfd, 0x8f, 0x32, 0xd4, 0x55, 0x69, 0x4b, - 0x3e, 0xc4, 0x32, 0x81, 0xba, 0xfe, 0xc4, 0x75, 0x54, 0x46, 0x1b, 0xb6, 0xbe, 0xbd, 0x79, 0xd8, - 0x90, 0xec, 0x3f, 0x3e, 0xc7, 0xca, 0x00, 0x1b, 0x4e, 0x8a, 0x30, 0xcb, 0x99, 0xca, 0x9b, 0x40, - 0x55, 0xb8, 0x1e, 0xd3, 0x26, 0xca, 0x36, 0xae, 0xdc, 0x5f, 0x79, 0xd2, 0x25, 0x55, 0xe5, 0x12, - 0x7f, 0xe5, 0xa1, 0x4b, 0x5e, 0xc2, 0x76, 0x2a, 0xc1, 0xb9, 0x8e, 0x2e, 0xbc, 0x3a, 0xe9, 0xdd, - 0x18, 0x9f, 0x0f, 0xf7, 0x31, 0xc8, 0xbe, 0xbd, 0x79, 0xd8, 0xfa, 0x4d, 0x94, 0xf2, 0xc6, 0xe7, - 0x56, 0x2b, 0xce, 0x7f, 0x63, 0x87, 0xf4, 0x41, 0xa6, 0xc3, 0x89, 0x2a, 0x09, 0x54, 0x9a, 0x54, - 0x99, 0xa0, 0x83, 0xdf, 0x75, 0xcd, 0x80, 0x95, 0xfd, 0x07, 0x60, 0x60, 0xd0, 0x29, 0x88, 0x4a, - 0x0c, 0x4d, 0xfc, 0x20, 0x85, 0x1f, 0xc1, 0x4e, 0x92, 0xb3, 0x14, 0x44, 0x65, 0x89, 0x4e, 0xf2, - 0x59, 0x02, 0x1f, 0x40, 0x33, 0x4e, 0xc7, 0x86, 0x44, 0x34, 0xa8, 0xce, 0xc2, 0x9f, 0x43, 0x43, - 0x2f, 0xb1, 0xf0, 0x66, 0xf1, 0x33, 0xa8, 0xe1, 0xbe, 0x44, 0x87, 0x31, 0x2a, 0xf9, 0xe4, 0x7e, - 0x30, 0x91, 0xb9, 0x5f, 0x28, 0xa0, 0x79, 0x02, 0xdb, 0x19, 0x29, 0x66, 0x30, 0x11, 0x08, 0xba, - 0xd0, 0x1b, 0xaa, 0x3a, 0xf1, 0x64, 0xe5, 0x64, 0x32, 0xf3, 0x39, 0x18, 0x31, 0x61, 0xe0, 0x2e, - 0x84, 0xab, 0xe9, 0x24, 0xba, 0x00, 0xb6, 0xad, 0x7a, 0xb8, 0x9a, 0xbe, 0x52, 0x79, 0x32, 0x0c, - 0xbe, 0xd6, 0x77, 0x9d, 0x8a, 0xa5, 0x3a, 0xa6, 0x0d, 0xcd, 0xe8, 0x16, 0x22, 0x37, 0xf5, 0x3a, - 0x64, 0x91, 0x21, 0xd8, 0x4e, 0x0f, 0x57, 0xce, 0x0c, 0xb7, 0xe9, 0x4e, 0x16, 0x45, 0x46, 0x35, - 0x89, 0x8c, 0xe3, 0x6f, 0x6a, 0xb0, 0x73, 0x3a, 0x3c, 0x1b, 0x9f, 0x86, 0xe1, 0xc2, 0xb5, 0xa9, - 0xac, 0x58, 0x06, 0x50, 0x95, 0x35, 0x59, 0xc1, 0x8b, 0x4a, 0xaf, 0xe8, 0x72, 0x40, 0x8e, 0xa1, - 0x26, 0x4b, 0x33, 0x52, 0xf4, 0xb0, 0xd2, 0x2b, 0xbc, 0x23, 0xe0, 0x24, 0xaa, 0x78, 0xbb, 0xfd, - 0xbe, 0xd2, 0x2b, 0xba, 0x28, 0x90, 0xcf, 0xc0, 0x48, 0x8a, 0xaa, 0x4d, 0xaf, 0x2c, 0xbd, 0x8d, - 0x57, 0x06, 0xd4, 0x4f, 0x72, 0xdd, 0xa6, 0x37, 0x89, 0xde, 0xc6, 0xda, 0x9a, 0x3c, 0x83, 0x46, - 0x54, 0x2d, 0x14, 0xbf, 0x83, 0xf4, 0x36, 0x94, 0xf3, 0xe8, 0x1e, 0x55, 0x71, 0x15, 0x3d, 0xd6, - 0xf4, 0x0a, 0xef, 0x1c, 0xe4, 0x09, 0xd4, 0x35, 0x61, 0x17, 0xbe, 0x68, 0xf4, 0x8a, 0x8b, 0x72, - 0x34, 0x32, 0x29, 0x15, 0x37, 0x3d, 0x28, 0xf5, 0x36, 0x5e, 0x8e, 0xc8, 0x29, 0x40, 0xaa, 0xca, - 0xda, 0xf8, 0x52, 0xd4, 0xdb, 0x7c, 0xe9, 0x21, 0x9f, 0x42, 0x33, 0xb9, 0xc8, 0x16, 0xbf, 0xe0, - 0xf4, 0x36, 0xdd, 0x43, 0xa6, 0x75, 0xf9, 0xca, 0xf7, 0xc9, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, - 0x0e, 0x79, 0xb0, 0x4d, 0x61, 0x14, 0x00, 0x00, + // 1789 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0x4b, 0x73, 0x1c, 0x49, + 0x11, 0xd6, 0xbc, 0xa7, 0x53, 0x4f, 0x97, 0xfc, 0x18, 0xcf, 0x06, 0x61, 0x47, 0x43, 0x18, 0x99, + 0xd5, 0x6a, 0x40, 0x8b, 0x8d, 0xbd, 0x4b, 0x6c, 0x20, 0x69, 0xcd, 0x8e, 0xc2, 0x3c, 0x44, 0xdb, + 0x6b, 0x22, 0xb8, 0x4c, 0xd4, 0x4c, 0x97, 0x7a, 0x2a, 0x3c, 0xd3, 0xdd, 0xdb, 0x55, 0xa3, 0x9d, + 0xf1, 0x8d, 0xe0, 0xba, 0x77, 0xce, 0xdc, 0xf8, 0x03, 0xfc, 0x05, 0x82, 0x7f, 0xc0, 0xcd, 0x07, + 0xb8, 0xf1, 0x27, 0x20, 0x32, 0xab, 0xdf, 0xea, 0x59, 0x16, 0x73, 0xdc, 0x8b, 0x54, 0x59, 0x99, + 0x59, 0x9d, 0x99, 0x93, 0xf9, 0x65, 0x56, 0xc1, 0x0d, 0xbd, 0x0a, 0x85, 0x1a, 0xd0, 0xdf, 0xa3, + 0x30, 0x0a, 0x74, 0xc0, 0x5a, 0x44, 0xf4, 0x3f, 0xf0, 0xa4, 0x9e, 0x2e, 0xc6, 0x47, 0x93, 0x60, + 0x3e, 0xf0, 0x02, 0x2f, 0x18, 0x10, 0x77, 0xbc, 0xb8, 0x24, 0x8a, 0x08, 0x5a, 0x19, 0xad, 0xfe, + 0x20, 0x27, 0xae, 0x85, 0xef, 0x8a, 0x68, 0x2e, 0x7d, 0x3d, 0xd0, 0xf3, 0x99, 0x1c, 0xab, 0xc1, + 0x24, 0x98, 0xcf, 0x03, 0x3f, 0xff, 0x19, 0xfb, 0xaf, 0x4d, 0xe8, 0x38, 0xe2, 0x8b, 0x85, 0x50, + 0x9a, 0x1d, 0x40, 0x53, 0x4c, 0xa6, 0x41, 0xaf, 0x7e, 0xbf, 0x76, 0xb0, 0x79, 0xcc, 0x8e, 0x8c, + 0x5c, 0xcc, 0x7d, 0x36, 0x99, 0x06, 0xc3, 0x0d, 0x87, 0x24, 0xd8, 0xfb, 0xd0, 0xba, 0x9c, 0x2d, + 0xd4, 0xb4, 0xd7, 0x20, 0xd1, 0xfd, 0xa2, 0xe8, 0xcf, 0x91, 0x35, 0xdc, 0x70, 0x8c, 0x0c, 0x1e, + 0x2b, 0xfd, 0xcb, 0xa0, 0xd7, 0xac, 0x3a, 0xf6, 0xdc, 0xbf, 0xa4, 0x63, 0x51, 0x82, 0x3d, 0x01, + 0x50, 0x42, 0x8f, 0x82, 0x50, 0xcb, 0xc0, 0xef, 0xb5, 0x48, 0xfe, 0x4e, 0x51, 0xfe, 0x85, 0xd0, + 0xbf, 0x26, 0xf6, 0x70, 0xc3, 0xb1, 0x54, 0x42, 0xa0, 0xa6, 0xf4, 0xa5, 0x1e, 0x4d, 0xa6, 0x5c, + 0xfa, 0xbd, 0x76, 0x95, 0xe6, 0xb9, 0x2f, 0xf5, 0x19, 0xb2, 0x51, 0x53, 0x26, 0x04, 0xba, 0xf2, + 0xc5, 0x42, 0x44, 0xab, 0x5e, 0xa7, 0xca, 0x95, 0xdf, 0x20, 0x0b, 0x5d, 0x21, 0x19, 0xf6, 0x31, + 0x6c, 0x8e, 0x85, 0x27, 0xfd, 0xd1, 0x78, 0x16, 0x4c, 0x5e, 0xf7, 0xba, 0xa4, 0xd2, 0x2b, 0xaa, + 0x9c, 0xa2, 0xc0, 0x29, 0xf2, 0x87, 0x1b, 0x0e, 0x8c, 0x53, 0x8a, 0x1d, 0x43, 0x77, 0x32, 0x15, + 0x93, 0xd7, 0x23, 0xbd, 0xec, 0x59, 0xa4, 0x79, 0xab, 0xa8, 0x79, 0x86, 0xdc, 0x97, 0xcb, 0xe1, + 0x86, 0xd3, 0x99, 0x98, 0x25, 0xfa, 0xe5, 0x8a, 0x99, 0xbc, 0x12, 0x11, 0x6a, 0xed, 0x57, 0xf9, + 0xf5, 0xa9, 0xe1, 0x93, 0x9e, 0xe5, 0x26, 0x04, 0x7b, 0x04, 0x96, 0xf0, 0xdd, 0xd8, 0xd0, 0x4d, + 0x52, 0xbc, 0x5d, 0xfa, 0x45, 0x7d, 0x37, 0x31, 0xb3, 0x2b, 0xe2, 0x35, 0x3b, 0x82, 0x36, 0x66, + 0x89, 0xd4, 0xbd, 0x2d, 0xd2, 0xb9, 0x59, 0x32, 0x91, 0x78, 0xc3, 0x0d, 0x27, 0x96, 0x3a, 0xed, + 0x40, 0xeb, 0x8a, 0xcf, 0x16, 0xc2, 0xfe, 0x3e, 0x6c, 0xe6, 0x32, 0x85, 0xf5, 0xa0, 0x33, 0x17, + 0x4a, 0x71, 0x4f, 0xf4, 0x6a, 0xf7, 0x6b, 0x07, 0x96, 0x93, 0x90, 0xf6, 0x0e, 0x6c, 0xe5, 0xf3, + 0x24, 0xa7, 0x88, 0xb9, 0x80, 0x8a, 0x57, 0x22, 0x52, 0x98, 0x00, 0xb1, 0x62, 0x4c, 0xda, 0x1f, + 0xc1, 0x5e, 0x39, 0x09, 0xd8, 0x1e, 0x34, 0x5e, 0x8b, 0x55, 0x2c, 0x89, 0x4b, 0x76, 0x33, 0x36, + 0x88, 0xb2, 0xd8, 0x72, 0x62, 0xeb, 0x82, 0x54, 0x37, 0x4d, 0x03, 0xf6, 0x18, 0xe0, 0x8a, 0xcf, + 0xa4, 0xcb, 0x75, 0x10, 0xa9, 0x5e, 0xed, 0x7e, 0xe3, 0x60, 0xf3, 0x78, 0x2f, 0x76, 0xf7, 0x55, + 0xc2, 0x38, 0x6d, 0xfe, 0xed, 0xed, 0xbd, 0x0d, 0x27, 0x27, 0xc9, 0xbe, 0x0b, 0xdb, 0x9e, 0xf0, + 0x85, 0x92, 0x6a, 0x34, 0x5e, 0x69, 0xa1, 0xe8, 0x4b, 0x5b, 0xce, 0x56, 0xbc, 0x79, 0x8a, 0x7b, + 0xb6, 0x9b, 0x7a, 0x49, 0x29, 0xc4, 0x18, 0x34, 0x5d, 0xae, 0x39, 0x59, 0xba, 0xe5, 0xd0, 0x1a, + 0xf7, 0x42, 0xae, 0xa7, 0xb1, 0xa5, 0xb4, 0x66, 0xb7, 0xa1, 0x3d, 0x15, 0xd2, 0x9b, 0x6a, 0x2a, + 0xad, 0x86, 0x13, 0x53, 0xe8, 0x56, 0x18, 0x05, 0x57, 0x82, 0xaa, 0xa8, 0xeb, 0x18, 0xc2, 0xfe, + 0x7b, 0x0d, 0x6e, 0x5c, 0x4b, 0x3b, 0x3c, 0x77, 0xca, 0xd5, 0x34, 0xf9, 0x16, 0xae, 0xd9, 0xfb, + 0x78, 0x2e, 0x77, 0x45, 0x14, 0x57, 0xf7, 0x76, 0xec, 0xe8, 0x90, 0x36, 0x63, 0x2f, 0x63, 0x11, + 0xf6, 0x93, 0x42, 0x64, 0x1a, 0x14, 0x99, 0x24, 0xeb, 0x5e, 0x48, 0xcf, 0x97, 0xbe, 0x97, 0x06, + 0xa8, 0x10, 0x9a, 0x21, 0xdc, 0x1c, 0xaf, 0xde, 0x70, 0x5f, 0x4b, 0x5f, 0x8c, 0x72, 0x47, 0x34, + 0xe9, 0x88, 0xdd, 0xf8, 0x88, 0x67, 0x57, 0xd2, 0x15, 0xfe, 0x44, 0xc4, 0x5f, 0xdd, 0x4f, 0x55, + 0xd2, 0x43, 0x95, 0x7d, 0x1f, 0x76, 0x8a, 0x55, 0xc1, 0x76, 0xa0, 0xae, 0x97, 0xb1, 0x4f, 0x75, + 0xbd, 0xb4, 0xed, 0xf4, 0x27, 0x4d, 0x2b, 0xe0, 0x9a, 0xcc, 0x43, 0xd8, 0x2d, 0x25, 0x7b, 0x2e, + 0xc0, 0xb5, 0x7c, 0x80, 0xed, 0x5d, 0xd8, 0x2e, 0xe4, 0xb8, 0xfd, 0x55, 0x0b, 0xba, 0x8e, 0x50, + 0x61, 0xe0, 0x2b, 0xc1, 0x9e, 0x80, 0x25, 0x96, 0x13, 0x61, 0x80, 0xa9, 0x56, 0x2a, 0x7b, 0x23, + 0xf3, 0x2c, 0xe1, 0x63, 0x1d, 0xa6, 0xc2, 0xec, 0x61, 0x01, 0x54, 0xf7, 0xcb, 0x4a, 0x79, 0x54, + 0x3d, 0x2c, 0xa2, 0xea, 0xcd, 0x92, 0x6c, 0x09, 0x56, 0x1f, 0x16, 0x60, 0xb5, 0x7c, 0x70, 0x01, + 0x57, 0x9f, 0x56, 0xe0, 0x6a, 0xd9, 0xfc, 0x35, 0xc0, 0xfa, 0xb4, 0x02, 0x58, 0x7b, 0xd7, 0xbe, + 0x55, 0x89, 0xac, 0x87, 0x45, 0x64, 0x2d, 0xbb, 0x53, 0x82, 0xd6, 0x9f, 0x56, 0x41, 0xeb, 0xdd, + 0x92, 0xce, 0x5a, 0x6c, 0xfd, 0xf0, 0x1a, 0xb6, 0xde, 0x2e, 0xa9, 0x56, 0x80, 0xeb, 0xd3, 0x02, + 0xb8, 0x42, 0xa5, 0x6f, 0x6b, 0xd0, 0xf5, 0xf1, 0x75, 0x74, 0xbd, 0x53, 0xfe, 0x69, 0xab, 0xe0, + 0x75, 0x50, 0x82, 0xd7, 0x5b, 0x65, 0x2b, 0xd7, 0xe2, 0xeb, 0x43, 0xac, 0xf4, 0x52, 0xa6, 0x21, + 0x2a, 0x88, 0x28, 0x0a, 0xa2, 0x18, 0x00, 0x0d, 0x61, 0x1f, 0x20, 0xf6, 0x64, 0xf9, 0xf5, 0x35, + 0x58, 0x4c, 0x49, 0x9f, 0xcb, 0x2e, 0xfb, 0x8f, 0xb5, 0x4c, 0x97, 0xe0, 0x38, 0x8f, 0x5b, 0x56, + 0x8c, 0x5b, 0x39, 0x88, 0xae, 0x17, 0x20, 0x9a, 0xfd, 0x00, 0x6e, 0xcc, 0xb8, 0xd2, 0x26, 0x2e, + 0xa3, 0x02, 0x90, 0xed, 0x22, 0xc3, 0x04, 0xc4, 0x20, 0xda, 0x07, 0xb0, 0x9f, 0x93, 0xe5, 0x61, + 0x38, 0x22, 0xd0, 0x6a, 0x52, 0xf1, 0xee, 0xa5, 0xd2, 0x27, 0x61, 0x38, 0xe4, 0x6a, 0x6a, 0xff, + 0x32, 0xf3, 0x3f, 0x83, 0x7f, 0x06, 0xcd, 0x49, 0xe0, 0x1a, 0xb7, 0xb6, 0x1d, 0x5a, 0x63, 0x4b, + 0x98, 0x05, 0x1e, 0x7d, 0xd5, 0x72, 0x70, 0x89, 0x52, 0x69, 0xa5, 0x58, 0xa6, 0x24, 0xec, 0xe7, + 0xd9, 0x71, 0xff, 0x77, 0x47, 0xb0, 0xff, 0x52, 0xcb, 0xe2, 0x98, 0xc2, 0xfd, 0xbb, 0x19, 0x86, + 0x3f, 0xa9, 0xf4, 0x5d, 0xb1, 0xa4, 0x32, 0x6d, 0x38, 0x86, 0x48, 0xfa, 0x5c, 0x9b, 0x82, 0x53, + 0xec, 0x73, 0x1d, 0xda, 0x33, 0x44, 0xdc, 0x26, 0x82, 0x4b, 0xaa, 0x9f, 0x2d, 0xc7, 0x10, 0x39, + 0xcc, 0xb3, 0x0a, 0x98, 0x77, 0x01, 0xec, 0x7a, 0x65, 0xb1, 0x8f, 0xa0, 0xa9, 0xb9, 0x97, 0xf8, + 0xbf, 0x73, 0x64, 0xa6, 0xc6, 0xa3, 0xe7, 0xaf, 0x2e, 0xb8, 0x8c, 0x4e, 0x6f, 0xa3, 0xf7, 0xff, + 0x7a, 0x7b, 0x6f, 0x07, 0x65, 0x0e, 0x83, 0xb9, 0xd4, 0x62, 0x1e, 0xea, 0x95, 0x43, 0x3a, 0xf6, + 0xbf, 0x6b, 0x88, 0xb8, 0x85, 0x8a, 0xab, 0x8c, 0x45, 0x92, 0x56, 0xf5, 0x5c, 0x3b, 0xfc, 0x66, + 0xf1, 0xf9, 0x0e, 0x80, 0xc7, 0xd5, 0xe8, 0x4b, 0xee, 0x6b, 0xe1, 0xc6, 0x41, 0xb2, 0x3c, 0xae, + 0x7e, 0x4b, 0x1b, 0xec, 0x2e, 0x74, 0x91, 0xbd, 0x50, 0xc2, 0xa5, 0x68, 0x35, 0x9c, 0x8e, 0xc7, + 0xd5, 0xe7, 0x4a, 0xb8, 0xa9, 0x5f, 0x9d, 0xff, 0xdd, 0x2f, 0x76, 0x00, 0x8d, 0x4b, 0x21, 0x62, + 0x54, 0xda, 0x4b, 0x55, 0xcf, 0x1f, 0xff, 0x98, 0x94, 0x4d, 0x4a, 0xa0, 0x88, 0xfd, 0xfb, 0x7a, + 0x96, 0x59, 0x59, 0x63, 0xfa, 0x76, 0xc5, 0xe0, 0x9f, 0x35, 0xec, 0xcd, 0x45, 0x18, 0x64, 0x67, + 0x70, 0x23, 0x2d, 0x99, 0xd1, 0x22, 0x74, 0x39, 0x8e, 0x4e, 0x5f, 0x5f, 0x63, 0x7b, 0xa9, 0xc2, + 0xe7, 0x46, 0x9e, 0xfd, 0x0a, 0xee, 0x4c, 0xf0, 0x54, 0x5f, 0x2d, 0xd4, 0x28, 0xe4, 0x11, 0x9f, + 0xa7, 0x47, 0xd5, 0x0b, 0xb0, 0x7f, 0x96, 0x48, 0x5d, 0xa0, 0x90, 0x72, 0x6e, 0x4d, 0x0a, 0x1b, + 0xc9, 0x79, 0x49, 0x3c, 0x1a, 0xef, 0x90, 0xeb, 0xdf, 0xc3, 0x11, 0x25, 0x0f, 0xdb, 0x55, 0xbf, + 0xa8, 0xfd, 0xa7, 0x1a, 0xec, 0x96, 0x8c, 0x61, 0x03, 0x00, 0x83, 0x7a, 0x4a, 0xbe, 0x11, 0xf1, + 0x38, 0x91, 0xc4, 0x80, 0x82, 0xf5, 0x42, 0xbe, 0x11, 0x8e, 0x35, 0x4e, 0x96, 0xec, 0x01, 0x74, + 0xf4, 0xd2, 0x48, 0x17, 0xc7, 0xb7, 0x97, 0x4b, 0x12, 0x6d, 0x6b, 0xfa, 0xcf, 0x1e, 0xc1, 0x96, + 0x39, 0xd8, 0x0b, 0x94, 0x92, 0x61, 0x3c, 0x48, 0xb0, 0xfc, 0xd1, 0x9f, 0x11, 0xc7, 0xd9, 0x1c, + 0x67, 0x84, 0xfd, 0x3b, 0xb0, 0xd2, 0xcf, 0xb2, 0xf7, 0xc0, 0x9a, 0xf3, 0x65, 0x3c, 0xda, 0xa2, + 0x6d, 0x2d, 0xa7, 0x3b, 0xe7, 0x4b, 0x1a, 0x6b, 0xd9, 0x1d, 0xe8, 0x20, 0x53, 0x2f, 0x4d, 0xbc, + 0x5b, 0x4e, 0x7b, 0xce, 0x97, 0x2f, 0x97, 0x29, 0xc3, 0xe3, 0x2a, 0x19, 0x5c, 0xe7, 0x7c, 0xf9, + 0x19, 0x57, 0xf6, 0x27, 0xd0, 0x36, 0x46, 0x7e, 0xa3, 0x83, 0x51, 0xbf, 0x5e, 0xd0, 0xff, 0x19, + 0x6c, 0xe6, 0xec, 0x66, 0x3f, 0x82, 0x5b, 0xc6, 0xc3, 0x90, 0x47, 0x9a, 0x22, 0x52, 0x38, 0x90, + 0x11, 0xf3, 0x82, 0x47, 0x1a, 0x3f, 0x69, 0x46, 0xf1, 0x3f, 0xd4, 0xa1, 0x6d, 0xc6, 0x5c, 0xf6, + 0x00, 0xc7, 0x04, 0x2e, 0xfd, 0x91, 0x74, 0x4d, 0x47, 0x3b, 0xdd, 0xfc, 0xc7, 0xdb, 0x7b, 0x1d, + 0x42, 0xff, 0xf3, 0x4f, 0x71, 0x32, 0xc0, 0x85, 0x9b, 0x03, 0xcc, 0x7a, 0x61, 0x0a, 0x67, 0xd0, + 0xd4, 0x72, 0x2e, 0x62, 0x17, 0x69, 0x8d, 0x96, 0xfb, 0x8b, 0x39, 0x85, 0xa4, 0x69, 0x42, 0xe2, + 0x2f, 0xe6, 0x18, 0x92, 0xf7, 0xc0, 0xd2, 0x81, 0xe6, 0x33, 0x62, 0x99, 0x22, 0xed, 0xd2, 0x06, + 0x32, 0x1f, 0xc0, 0x6e, 0xbe, 0x53, 0x62, 0xe7, 0x33, 0xe0, 0xbe, 0x9d, 0xf5, 0x49, 0x9c, 0xdb, + 0xef, 0x42, 0x37, 0x6d, 0x8d, 0x06, 0xe9, 0x3b, 0xdc, 0x74, 0x44, 0x76, 0x08, 0xdd, 0x30, 0x0a, + 0xc2, 0x40, 0x89, 0x28, 0x2d, 0xca, 0x52, 0x1d, 0x39, 0xa9, 0x84, 0x2d, 0xc1, 0x4a, 0xb7, 0xb1, + 0x83, 0x73, 0xd7, 0x8d, 0x84, 0x52, 0xf1, 0xb0, 0x9c, 0x90, 0xec, 0x10, 0x3a, 0xe1, 0x62, 0x3c, + 0xc2, 0x66, 0x53, 0xcc, 0xb4, 0x8b, 0xc5, 0xf8, 0xb9, 0x58, 0x25, 0x17, 0x85, 0x90, 0x28, 0x6a, + 0x37, 0xc1, 0x97, 0x22, 0x8a, 0x03, 0x62, 0x08, 0xdb, 0x87, 0xbd, 0xf2, 0x2d, 0x81, 0x1d, 0x81, + 0x95, 0x16, 0x73, 0x29, 0xe3, 0x33, 0x6b, 0x33, 0x11, 0x9c, 0x24, 0x94, 0xf4, 0x7c, 0xe1, 0x8e, + 0xb2, 0x30, 0x91, 0x45, 0x5d, 0x67, 0xd7, 0x30, 0x7e, 0x91, 0xc4, 0xc9, 0xfe, 0x21, 0xb4, 0x8d, + 0x75, 0xf4, 0xfb, 0xac, 0xc2, 0x64, 0xcc, 0xa1, 0x75, 0x65, 0x51, 0xfe, 0xb9, 0x06, 0xdd, 0xe4, + 0x16, 0x52, 0xa9, 0x54, 0x30, 0xb7, 0xfe, 0xdf, 0xcd, 0x5d, 0x77, 0x6d, 0x4b, 0x12, 0xa6, 0x99, + 0x4b, 0x98, 0x43, 0x60, 0x26, 0x2f, 0xae, 0x02, 0x2d, 0x7d, 0x6f, 0x64, 0x22, 0x68, 0x12, 0x64, + 0x8f, 0x38, 0xaf, 0x88, 0x71, 0x81, 0xfb, 0xc7, 0x5f, 0xb5, 0x60, 0xf7, 0xe4, 0xf4, 0xec, 0xfc, + 0x24, 0x0c, 0x67, 0x72, 0xc2, 0x69, 0xec, 0x19, 0x40, 0x93, 0x06, 0xbb, 0x8a, 0x27, 0x9a, 0x7e, + 0xd5, 0x0d, 0x83, 0x1d, 0x43, 0x8b, 0xe6, 0x3b, 0x56, 0xf5, 0x52, 0xd3, 0xaf, 0xbc, 0x68, 0xe0, + 0x47, 0xcc, 0x04, 0x78, 0xfd, 0xc1, 0xa6, 0x5f, 0x75, 0xdb, 0x60, 0x9f, 0x80, 0x95, 0x4d, 0x66, + 0xeb, 0x9e, 0x6d, 0xfa, 0x6b, 0xef, 0x1d, 0xa8, 0x9f, 0x35, 0xcc, 0x75, 0x8f, 0x1c, 0xfd, 0xb5, + 0x03, 0x3a, 0x7b, 0x02, 0x9d, 0x64, 0xe4, 0xa8, 0x7e, 0x58, 0xe9, 0xaf, 0xb9, 0x13, 0x60, 0x78, + 0xcc, 0xd8, 0x56, 0xf5, 0xfa, 0xd3, 0xaf, 0xbc, 0xb8, 0xb0, 0x47, 0xd0, 0x8e, 0x51, 0xbf, 0xf2, + 0x89, 0xa4, 0x5f, 0x3d, 0xd9, 0xa3, 0x93, 0xd9, 0xbc, 0xb9, 0xee, 0x85, 0xaa, 0xbf, 0xf6, 0x86, + 0xc5, 0x4e, 0x00, 0x72, 0xa3, 0xda, 0xda, 0xa7, 0xa7, 0xfe, 0xfa, 0x9b, 0x13, 0xfb, 0x18, 0xba, + 0xd9, 0x6d, 0xb8, 0xfa, 0x49, 0xa8, 0xbf, 0xee, 0x32, 0x33, 0x6e, 0xd3, 0xb3, 0xe1, 0x87, 0xff, + 0x09, 0x00, 0x00, 0xff, 0xff, 0x39, 0xa6, 0xae, 0x4d, 0xb2, 0x14, 0x00, 0x00, } diff --git a/types/util.go b/types/util.go index da5bc726..0924ab5f 100644 --- a/types/util.go +++ b/types/util.go @@ -4,6 +4,8 @@ import ( "bytes" "encoding/json" "sort" + + cmn "github.com/tendermint/tmlibs/common" ) //------------------------------------------------------------------------------ @@ -25,7 +27,7 @@ func (v Validators) Len() int { // XXX: doesn't distinguish same validator with different power func (v Validators) Less(i, j int) bool { - return bytes.Compare(v[i].PubKey, v[j].PubKey) <= 0 + return bytes.Compare(v[i].PubKey.Data, v[j].PubKey.Data) <= 0 } func (v Validators) Swap(i, j int) { @@ -37,7 +39,11 @@ func (v Validators) Swap(i, j int) { func ValidatorsString(vs Validators) string { s := make([]validatorPretty, len(vs)) for i, v := range vs { - s[i] = validatorPretty(v) + s[i] = validatorPretty{ + Address: v.Address, + PubKey: v.PubKey.Data, + Power: v.Power, + } } b, err := json.Marshal(s) if err != nil { @@ -47,6 +53,7 @@ func ValidatorsString(vs Validators) string { } type validatorPretty struct { - PubKey []byte `json:"pub_key"` - Power int64 `json:"power"` + Address cmn.HexBytes `json:"address"` + PubKey []byte `json:"pub_key"` + Power int64 `json:"power"` } From 3d4f3bbbddba88e8a3ec4c21ce1455964e6d5556 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Wed, 23 May 2018 22:41:55 -0400 Subject: [PATCH 22/40] varint -> uvarint for length prefix --- types/messages.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/types/messages.go b/types/messages.go index 52e4b675..e200ebfc 100644 --- a/types/messages.go +++ b/types/messages.go @@ -27,12 +27,12 @@ func ReadMessage(r io.Reader, msg proto.Message) error { } func readProtoMsg(r io.Reader, msg proto.Message, maxSize int) error { - // binary.ReadVarint takes an io.ByteReader, eg. a bufio.Reader + // binary.ReadUvarint takes an io.ByteReader, eg. a bufio.Reader reader, ok := r.(*bufio.Reader) if !ok { reader = bufio.NewReader(r) } - length64, err := binary.ReadVarint(reader) + length64, err := binary.ReadUvarint(reader) if err != nil { return err } @@ -48,11 +48,11 @@ func readProtoMsg(r io.Reader, msg proto.Message, maxSize int) error { } //----------------------------------------------------------------------- -// NOTE: we copied wire.EncodeByteSlice from go-wire rather than keep -// go-wire as a dep +// NOTE: we copied wire.EncodeByteSlice from go-amino rather than keep +// go-amino as a dep func encodeByteSlice(w io.Writer, bz []byte) (err error) { - err = encodeVarint(w, int64(len(bz))) + err = encodeUvarint(w, uint64(len(bz))) if err != nil { return } @@ -60,9 +60,9 @@ func encodeByteSlice(w io.Writer, bz []byte) (err error) { return } -func encodeVarint(w io.Writer, i int64) (err error) { +func encodeUvarint(w io.Writer, u uint64) (err error) { var buf [10]byte - n := binary.PutVarint(buf[:], i) + n := binary.PutUvarint(buf[:], u) _, err = w.Write(buf[0:n]) return } From fac6bcd19e76d62932da794390f7c5905c0c1bc5 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Wed, 23 May 2018 22:42:33 -0400 Subject: [PATCH 23/40] consolidate util.go and pubkey.go to validator.go --- types/pubkey.go | 16 ---------------- types/{util.go => validator.go} | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 16 deletions(-) delete mode 100644 types/pubkey.go rename types/{util.go => validator.go} (85%) diff --git a/types/pubkey.go b/types/pubkey.go deleted file mode 100644 index e5cd5fbf..00000000 --- a/types/pubkey.go +++ /dev/null @@ -1,16 +0,0 @@ -package types - -const ( - PubKeyEd25519 = "ed25519" -) - -func Ed25519Validator(pubkey []byte, power int64) Validator { - return Validator{ - // Address: - PubKey: PubKey{ - Type: PubKeyEd25519, - Data: pubkey, - }, - Power: power, - } -} diff --git a/types/util.go b/types/validator.go similarity index 85% rename from types/util.go rename to types/validator.go index 0924ab5f..e443a336 100644 --- a/types/util.go +++ b/types/validator.go @@ -8,6 +8,21 @@ import ( cmn "github.com/tendermint/tmlibs/common" ) +const ( + PubKeyEd25519 = "ed25519" +) + +func Ed25519Validator(pubkey []byte, power int64) Validator { + return Validator{ + // Address: + PubKey: PubKey{ + Type: PubKeyEd25519, + Data: pubkey, + }, + Power: power, + } +} + //------------------------------------------------------------------------------ // Validators is a list of validators that implements the Sort interface From 07a9ddb2d50e3ade645881c850b45489c32231d5 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Wed, 23 May 2018 22:49:13 -0400 Subject: [PATCH 24/40] result.go is json.go and codetype.go --- types/codetype.go | 35 +++++++++++++++++++++++++++++++++++ types/{result.go => json.go} | 34 ---------------------------------- 2 files changed, 35 insertions(+), 34 deletions(-) create mode 100644 types/codetype.go rename types/{result.go => json.go} (76%) diff --git a/types/codetype.go b/types/codetype.go new file mode 100644 index 00000000..5355a498 --- /dev/null +++ b/types/codetype.go @@ -0,0 +1,35 @@ +package types + +const ( + CodeTypeOK uint32 = 0 +) + +// IsOK returns true if Code is OK. +func (r ResponseCheckTx) IsOK() bool { + return r.Code == CodeTypeOK +} + +// IsErr returns true if Code is something other than OK. +func (r ResponseCheckTx) IsErr() bool { + return r.Code != CodeTypeOK +} + +// IsOK returns true if Code is OK. +func (r ResponseDeliverTx) IsOK() bool { + return r.Code == CodeTypeOK +} + +// IsErr returns true if Code is something other than OK. +func (r ResponseDeliverTx) IsErr() bool { + return r.Code != CodeTypeOK +} + +// IsOK returns true if Code is OK. +func (r ResponseQuery) IsOK() bool { + return r.Code == CodeTypeOK +} + +// IsErr returns true if Code is something other than OK. +func (r ResponseQuery) IsErr() bool { + return r.Code != CodeTypeOK +} diff --git a/types/result.go b/types/json.go similarity index 76% rename from types/result.go rename to types/json.go index dbf409f4..dbd7f061 100644 --- a/types/result.go +++ b/types/json.go @@ -7,40 +7,6 @@ import ( "github.com/gogo/protobuf/jsonpb" ) -const ( - CodeTypeOK uint32 = 0 -) - -// IsOK returns true if Code is OK. -func (r ResponseCheckTx) IsOK() bool { - return r.Code == CodeTypeOK -} - -// IsErr returns true if Code is something other than OK. -func (r ResponseCheckTx) IsErr() bool { - return r.Code != CodeTypeOK -} - -// IsOK returns true if Code is OK. -func (r ResponseDeliverTx) IsOK() bool { - return r.Code == CodeTypeOK -} - -// IsErr returns true if Code is something other than OK. -func (r ResponseDeliverTx) IsErr() bool { - return r.Code != CodeTypeOK -} - -// IsOK returns true if Code is OK. -func (r ResponseQuery) IsOK() bool { - return r.Code == CodeTypeOK -} - -// IsErr returns true if Code is something other than OK. -func (r ResponseQuery) IsErr() bool { - return r.Code != CodeTypeOK -} - //--------------------------------------------------------------------------- // override JSON marshalling so we dont emit defaults (ie. disable omitempty) // note we need Unmarshal functions too because protobuf had the bright idea From 5830c338ae5fb92b3e14085376541170640b99ba Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Wed, 23 May 2018 22:49:46 -0400 Subject: [PATCH 25/40] Application uses new ParamsXxx and ResultXxx Types --- types/application.go | 82 ++++++++++++++++++++++---------------------- types/params.go | 51 +++++++++++++++++++++++++++ types/result.go | 82 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 174 insertions(+), 41 deletions(-) create mode 100644 types/params.go create mode 100644 types/result.go diff --git a/types/application.go b/types/application.go index ef1bc92e..d1eb40bc 100644 --- a/types/application.go +++ b/types/application.go @@ -6,23 +6,23 @@ import ( // Application is an interface that enables any finite, deterministic state machine // to be driven by a blockchain-based replication engine via the ABCI. -// All methods take a RequestXxx argument and return a ResponseXxx argument, +// All methods take a ParamsXxx argument and return a ResultXxx argument, // except CheckTx/DeliverTx, which take `tx []byte`, and `Commit`, which takes nothing. type Application interface { // Info/Query Connection - Info(RequestInfo) ResponseInfo // Return application info - SetOption(RequestSetOption) ResponseSetOption // Set application option - Query(RequestQuery) ResponseQuery // Query for state + Info(ParamsInfo) ResultInfo // Return application info + SetOption(ParamsSetOption) ResultSetOption // Set application option + Query(ParamsQuery) ResultQuery // Query for state // Mempool Connection - CheckTx(tx []byte) ResponseCheckTx // Validate a tx for the mempool + CheckTx(tx []byte) ResultCheckTx // Validate a tx for the mempool // Consensus Connection - InitChain(RequestInitChain) ResponseInitChain // Initialize blockchain with validators and other info from TendermintCore - BeginBlock(RequestBeginBlock) ResponseBeginBlock // Signals the beginning of a block - DeliverTx(tx []byte) ResponseDeliverTx // Deliver a tx for full processing - EndBlock(RequestEndBlock) ResponseEndBlock // Signals the end of a block, returns changes to the validator set - Commit() ResponseCommit // Commit the state and return the application Merkle root hash + InitChain(ParamsInitChain) ResultInitChain // Initialize blockchain with validators and other info from TendermintCore + BeginBlock(ParamsBeginBlock) ResultBeginBlock // Signals the beginning of a block + DeliverTx(tx []byte) ResultDeliverTx // Deliver a tx for full processing + EndBlock(ParamsEndBlock) ResultEndBlock // Signals the end of a block, returns changes to the validator set + Commit() ResultCommit // Commit the state and return the application Merkle root hash } //------------------------------------------------------- @@ -37,40 +37,40 @@ func NewBaseApplication() *BaseApplication { return &BaseApplication{} } -func (BaseApplication) Info(req RequestInfo) ResponseInfo { - return ResponseInfo{} +func (BaseApplication) Info(req ParamsInfo) ResultInfo { + return ResultInfo{} } -func (BaseApplication) SetOption(req RequestSetOption) ResponseSetOption { - return ResponseSetOption{} +func (BaseApplication) SetOption(req ParamsSetOption) ResultSetOption { + return ResultSetOption{} } -func (BaseApplication) DeliverTx(tx []byte) ResponseDeliverTx { - return ResponseDeliverTx{Code: CodeTypeOK} +func (BaseApplication) DeliverTx(tx []byte) ResultDeliverTx { + return ResultDeliverTx{Code: CodeTypeOK} } -func (BaseApplication) CheckTx(tx []byte) ResponseCheckTx { - return ResponseCheckTx{Code: CodeTypeOK} +func (BaseApplication) CheckTx(tx []byte) ResultCheckTx { + return ResultCheckTx{Code: CodeTypeOK} } -func (BaseApplication) Commit() ResponseCommit { - return ResponseCommit{} +func (BaseApplication) Commit() ResultCommit { + return ResultCommit{} } -func (BaseApplication) Query(req RequestQuery) ResponseQuery { - return ResponseQuery{Code: CodeTypeOK} +func (BaseApplication) Query(req ParamsQuery) ResultQuery { + return ResultQuery{Code: CodeTypeOK} } -func (BaseApplication) InitChain(req RequestInitChain) ResponseInitChain { - return ResponseInitChain{} +func (BaseApplication) InitChain(req ParamsInitChain) ResultInitChain { + return ResultInitChain{} } -func (BaseApplication) BeginBlock(req RequestBeginBlock) ResponseBeginBlock { - return ResponseBeginBlock{} +func (BaseApplication) BeginBlock(req ParamsBeginBlock) ResultBeginBlock { + return ResultBeginBlock{} } -func (BaseApplication) EndBlock(req RequestEndBlock) ResponseEndBlock { - return ResponseEndBlock{} +func (BaseApplication) EndBlock(req ParamsEndBlock) ResultEndBlock { + return ResultEndBlock{} } //------------------------------------------------------- @@ -84,55 +84,55 @@ func NewGRPCApplication(app Application) *GRPCApplication { return &GRPCApplication{app} } -func (app *GRPCApplication) Echo(ctx context.Context, req *RequestEcho) (*ResponseEcho, error) { - return &ResponseEcho{req.Message}, nil +func (app *GRPCApplication) Echo(ctx context.Context, req *ParamsEcho) (*ResultEcho, error) { + return &ResultEcho{req.Message}, nil } -func (app *GRPCApplication) Flush(ctx context.Context, req *RequestFlush) (*ResponseFlush, error) { - return &ResponseFlush{}, nil +func (app *GRPCApplication) Flush(ctx context.Context, req *ParamsFlush) (*ResultFlush, error) { + return &ResultFlush{}, nil } -func (app *GRPCApplication) Info(ctx context.Context, req *RequestInfo) (*ResponseInfo, error) { +func (app *GRPCApplication) Info(ctx context.Context, req *ParamsInfo) (*ResultInfo, error) { res := app.app.Info(*req) return &res, nil } -func (app *GRPCApplication) SetOption(ctx context.Context, req *RequestSetOption) (*ResponseSetOption, error) { +func (app *GRPCApplication) SetOption(ctx context.Context, req *ParamsSetOption) (*ResultSetOption, error) { res := app.app.SetOption(*req) return &res, nil } -func (app *GRPCApplication) DeliverTx(ctx context.Context, req *RequestDeliverTx) (*ResponseDeliverTx, error) { +func (app *GRPCApplication) DeliverTx(ctx context.Context, req *ParamsDeliverTx) (*ResultDeliverTx, error) { res := app.app.DeliverTx(req.Tx) return &res, nil } -func (app *GRPCApplication) CheckTx(ctx context.Context, req *RequestCheckTx) (*ResponseCheckTx, error) { +func (app *GRPCApplication) CheckTx(ctx context.Context, req *ParamsCheckTx) (*ResultCheckTx, error) { res := app.app.CheckTx(req.Tx) return &res, nil } -func (app *GRPCApplication) Query(ctx context.Context, req *RequestQuery) (*ResponseQuery, error) { +func (app *GRPCApplication) Query(ctx context.Context, req *ParamsQuery) (*ResultQuery, error) { res := app.app.Query(*req) return &res, nil } -func (app *GRPCApplication) Commit(ctx context.Context, req *RequestCommit) (*ResponseCommit, error) { +func (app *GRPCApplication) Commit(ctx context.Context, req *ParamsCommit) (*ResultCommit, error) { res := app.app.Commit() return &res, nil } -func (app *GRPCApplication) InitChain(ctx context.Context, req *RequestInitChain) (*ResponseInitChain, error) { +func (app *GRPCApplication) InitChain(ctx context.Context, req *ParamsInitChain) (*ResultInitChain, error) { res := app.app.InitChain(*req) return &res, nil } -func (app *GRPCApplication) BeginBlock(ctx context.Context, req *RequestBeginBlock) (*ResponseBeginBlock, error) { +func (app *GRPCApplication) BeginBlock(ctx context.Context, req *ParamsBeginBlock) (*ResultBeginBlock, error) { res := app.app.BeginBlock(*req) return &res, nil } -func (app *GRPCApplication) EndBlock(ctx context.Context, req *RequestEndBlock) (*ResponseEndBlock, error) { +func (app *GRPCApplication) EndBlock(ctx context.Context, req *ParamsEndBlock) (*ResultEndBlock, error) { res := app.app.EndBlock(*req) return &res, nil } diff --git a/types/params.go b/types/params.go new file mode 100644 index 00000000..3e35119a --- /dev/null +++ b/types/params.go @@ -0,0 +1,51 @@ +package types + +type ParamsEcho struct { + Message string `json:"message,omitempty"` +} + +type ParamsFlush struct { +} + +type ParamsInfo struct { + Version string `json:"version,omitempty"` +} + +type ParamsSetOption struct { + Key string `json:"key,omitempty"` + Value string `json:"value,omitempty"` +} + +type ParamsInitChain struct { + Validators []Validator `json:"validators"` + GenesisBytes []byte `json:"genesis_bytes,omitempty"` +} + +type ParamsQuery struct { + Data []byte `json:"data,omitempty"` + Path string `json:"path,omitempty"` + Height int64 `json:"height,omitempty"` + Prove bool `json:"prove,omitempty"` +} + +type ParamsBeginBlock struct { + Hash []byte `json:"hash,omitempty"` + Header Header `json:"header"` + Validators []SigningValidator `json:"validators,omitempty"` + ByzantineValidators []Evidence `json:"byzantine_validators"` +} + +type ParamsCheckTx struct { + Tx []byte `json:"tx,omitempty"` +} + +type ParamsDeliverTx struct { + Tx []byte `json:"tx,omitempty"` +} + +type ParamsEndBlock struct { + Height int64 `json:"height,omitempty"` +} + +type ParamsCommit struct { +} diff --git a/types/result.go b/types/result.go new file mode 100644 index 00000000..8b14fdfb --- /dev/null +++ b/types/result.go @@ -0,0 +1,82 @@ +package types + +import common "github.com/tendermint/tmlibs/common" + +// nondeterministic +type ResultException struct { + Error string `json:"error,omitempty"` +} + +type ResultEcho struct { + Message string `json:"message,omitempty"` +} + +type ResultFlush struct { +} + +type ResultInfo struct { + Data string `json:"data,omitempty"` + Version string `json:"version,omitempty"` + LastBlockHeight int64 `json:"last_block_height,omitempty"` + LastBlockAppHash []byte `json:"last_block_app_hash,omitempty"` +} + +type ResultSetOption struct { + Code uint32 `json:"code,omitempty"` + // bytes data = 2; + Log string `json:"log,omitempty"` + Info string `json:"info,omitempty"` +} + +type ResultInitChain struct { + Validators []Validator `json:"validators"` +} + +type ResultQuery struct { + Code uint32 `json:"code,omitempty"` + // bytes data = 2; // use "value" instead. + Log string `json:"log,omitempty"` + Info string `json:"info,omitempty"` + Index int64 `json:"index,omitempty"` + Key []byte `json:"key,omitempty"` + Value []byte `json:"value,omitempty"` + Proof []byte `json:"proof,omitempty"` + Height int64 `json:"height,omitempty"` +} + +type ResultBeginBlock struct { + Tags []common.KVPair `json:"tags,omitempty"` +} + +type ResultCheckTx struct { + Code uint32 `json:"code,omitempty"` + Data []byte `json:"data,omitempty"` + Log string `json:"log,omitempty"` + Info string `json:"info,omitempty"` + GasWanted int64 `json:"gas_wanted,omitempty"` + GasUsed int64 `json:"gas_used,omitempty"` + Tags []common.KVPair `json:"tags,omitempty"` + Fee common.KI64Pair `json:"fee"` +} + +type ResultDeliverTx struct { + Code uint32 `json:"code,omitempty"` + Data []byte `json:"data,omitempty"` + Log string `json:"log,omitempty"` + Info string `json:"info,omitempty"` + GasWanted int64 `json:"gas_wanted,omitempty"` + GasUsed int64 `json:"gas_used,omitempty"` + Tags []common.KVPair `json:"tags,omitempty"` + Fee common.KI64Pair `json:"fee"` +} + +type ResultEndBlock struct { + ValidatorUpdates []Validator `json:"validator_updates"` + ConsensusParamUpdates *ConsensusParams `json:"consensus_param_updates,omitempty"` + Tags []common.KVPair `json:"tags,omitempty"` +} + +type ResultCommit struct { + // reserve 1 + Data []byte `json:"data,omitempty"` +} From cfdec76020e386e1d6ef6ae30ff880c535892abe Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Wed, 23 May 2018 23:27:46 -0400 Subject: [PATCH 26/40] update everything for Params and Result types --- client/local_client.go | 48 ++++++++++---------- example/counter/counter.go | 42 ++++++++--------- example/kvstore/helpers.go | 2 +- example/kvstore/kvstore.go | 18 ++++---- example/kvstore/kvstore_test.go | 18 ++++---- example/kvstore/persistent_kvstore.go | 40 ++++++++--------- server/socket_server.go | 30 ++++++------- types/application.go | 65 +++++++++++++++------------ types/codetype.go | 32 +++++++++++++ types/params.go | 49 ++++++++++++++++++++ types/result.go | 36 +++++++++++++++ 11 files changed, 253 insertions(+), 127 deletions(-) diff --git a/client/local_client.go b/client/local_client.go index 64bf5fe0..804c558f 100644 --- a/client/local_client.go +++ b/client/local_client.go @@ -53,21 +53,21 @@ func (app *localClient) EchoAsync(msg string) *ReqRes { func (app *localClient) InfoAsync(req types.RequestInfo) *ReqRes { app.mtx.Lock() - res := app.Application.Info(req) + res := app.Application.Info(types.ToParamsInfo(req)) app.mtx.Unlock() return app.callback( types.ToRequestInfo(req), - types.ToResponseInfo(res), + types.ToResponseInfo(types.FromResultInfo(res)), ) } func (app *localClient) SetOptionAsync(req types.RequestSetOption) *ReqRes { app.mtx.Lock() - res := app.Application.SetOption(req) + res := app.Application.SetOption(types.ToParamsSetOption(req)) app.mtx.Unlock() return app.callback( types.ToRequestSetOption(req), - types.ToResponseSetOption(res), + types.ToResponseSetOption(types.FromResultSetOption(res)), ) } @@ -77,7 +77,7 @@ func (app *localClient) DeliverTxAsync(tx []byte) *ReqRes { app.mtx.Unlock() return app.callback( types.ToRequestDeliverTx(tx), - types.ToResponseDeliverTx(res), + types.ToResponseDeliverTx(types.FromResultDeliverTx(res)), ) } @@ -87,17 +87,17 @@ func (app *localClient) CheckTxAsync(tx []byte) *ReqRes { app.mtx.Unlock() return app.callback( types.ToRequestCheckTx(tx), - types.ToResponseCheckTx(res), + types.ToResponseCheckTx(types.FromResultCheckTx(res)), ) } func (app *localClient) QueryAsync(req types.RequestQuery) *ReqRes { app.mtx.Lock() - res := app.Application.Query(req) + res := app.Application.Query(types.ToParamsQuery(req)) app.mtx.Unlock() return app.callback( types.ToRequestQuery(req), - types.ToResponseQuery(res), + types.ToResponseQuery(types.FromResultQuery(res)), ) } @@ -107,16 +107,16 @@ func (app *localClient) CommitAsync() *ReqRes { app.mtx.Unlock() return app.callback( types.ToRequestCommit(), - types.ToResponseCommit(res), + types.ToResponseCommit(types.FromResultCommit(res)), ) } func (app *localClient) InitChainAsync(req types.RequestInitChain) *ReqRes { app.mtx.Lock() - res := app.Application.InitChain(req) + res := app.Application.InitChain(types.ToParamsInitChain(req)) reqRes := app.callback( types.ToRequestInitChain(req), - types.ToResponseInitChain(res), + types.ToResponseInitChain(types.FromResultInitChain(res)), ) app.mtx.Unlock() return reqRes @@ -124,21 +124,21 @@ func (app *localClient) InitChainAsync(req types.RequestInitChain) *ReqRes { func (app *localClient) BeginBlockAsync(req types.RequestBeginBlock) *ReqRes { app.mtx.Lock() - res := app.Application.BeginBlock(req) + res := app.Application.BeginBlock(types.ToParamsBeginBlock(req)) app.mtx.Unlock() return app.callback( types.ToRequestBeginBlock(req), - types.ToResponseBeginBlock(res), + types.ToResponseBeginBlock(types.FromResultBeginBlock(res)), ) } func (app *localClient) EndBlockAsync(req types.RequestEndBlock) *ReqRes { app.mtx.Lock() - res := app.Application.EndBlock(req) + res := app.Application.EndBlock(types.ToParamsEndBlock(req)) app.mtx.Unlock() return app.callback( types.ToRequestEndBlock(req), - types.ToResponseEndBlock(res), + types.ToResponseEndBlock(types.FromResultEndBlock(res)), ) } @@ -154,63 +154,63 @@ func (app *localClient) EchoSync(msg string) (*types.ResponseEcho, error) { func (app *localClient) InfoSync(req types.RequestInfo) (*types.ResponseInfo, error) { app.mtx.Lock() - res := app.Application.Info(req) + res := types.FromResultInfo(app.Application.Info(types.ToParamsInfo(req))) app.mtx.Unlock() return &res, nil } func (app *localClient) SetOptionSync(req types.RequestSetOption) (*types.ResponseSetOption, error) { app.mtx.Lock() - res := app.Application.SetOption(req) + res := types.FromResultSetOption(app.Application.SetOption(types.ToParamsSetOption(req))) app.mtx.Unlock() return &res, nil } func (app *localClient) DeliverTxSync(tx []byte) (*types.ResponseDeliverTx, error) { app.mtx.Lock() - res := app.Application.DeliverTx(tx) + res := types.FromResultDeliverTx(app.Application.DeliverTx(tx)) app.mtx.Unlock() return &res, nil } func (app *localClient) CheckTxSync(tx []byte) (*types.ResponseCheckTx, error) { app.mtx.Lock() - res := app.Application.CheckTx(tx) + res := types.FromResultCheckTx(app.Application.CheckTx(tx)) app.mtx.Unlock() return &res, nil } func (app *localClient) QuerySync(req types.RequestQuery) (*types.ResponseQuery, error) { app.mtx.Lock() - res := app.Application.Query(req) + res := types.FromResultQuery(app.Application.Query(types.ToParamsQuery(req))) app.mtx.Unlock() return &res, nil } func (app *localClient) CommitSync() (*types.ResponseCommit, error) { app.mtx.Lock() - res := app.Application.Commit() + res := types.FromResultCommit(app.Application.Commit()) app.mtx.Unlock() return &res, nil } func (app *localClient) InitChainSync(req types.RequestInitChain) (*types.ResponseInitChain, error) { app.mtx.Lock() - res := app.Application.InitChain(req) + res := types.FromResultInitChain(app.Application.InitChain(types.ToParamsInitChain(req))) app.mtx.Unlock() return &res, nil } func (app *localClient) BeginBlockSync(req types.RequestBeginBlock) (*types.ResponseBeginBlock, error) { app.mtx.Lock() - res := app.Application.BeginBlock(req) + res := types.FromResultBeginBlock(app.Application.BeginBlock(types.ToParamsBeginBlock(req))) app.mtx.Unlock() return &res, nil } func (app *localClient) EndBlockSync(req types.RequestEndBlock) (*types.ResponseEndBlock, error) { app.mtx.Lock() - res := app.Application.EndBlock(req) + res := types.FromResultEndBlock(app.Application.EndBlock(types.ToParamsEndBlock(req))) app.mtx.Unlock() return &res, nil } diff --git a/example/counter/counter.go b/example/counter/counter.go index a6d5df6a..3437da67 100644 --- a/example/counter/counter.go +++ b/example/counter/counter.go @@ -21,11 +21,11 @@ func NewCounterApplication(serial bool) *CounterApplication { return &CounterApplication{serial: serial} } -func (app *CounterApplication) Info(req types.RequestInfo) types.ResponseInfo { - return types.ResponseInfo{Data: cmn.Fmt("{\"hashes\":%v,\"txs\":%v}", app.hashCount, app.txCount)} +func (app *CounterApplication) Info(req types.ParamsInfo) types.ResultInfo { + return types.ResultInfo{Data: cmn.Fmt("{\"hashes\":%v,\"txs\":%v}", app.hashCount, app.txCount)} } -func (app *CounterApplication) SetOption(req types.RequestSetOption) types.ResponseSetOption { +func (app *CounterApplication) SetOption(req types.ParamsSetOption) types.ResultSetOption { key, value := req.Key, req.Value if key == "serial" && value == "on" { app.serial = true @@ -33,20 +33,20 @@ func (app *CounterApplication) SetOption(req types.RequestSetOption) types.Respo /* TODO Panic and have the ABCI server pass an exception. The client can call SetOptionSync() and get an `error`. - return types.ResponseSetOption{ + return types.ResultSetOption{ Error: cmn.Fmt("Unknown key (%s) or value (%s)", key, value), } */ - return types.ResponseSetOption{} + return types.ResultSetOption{} } - return types.ResponseSetOption{} + return types.ResultSetOption{} } -func (app *CounterApplication) DeliverTx(tx []byte) types.ResponseDeliverTx { +func (app *CounterApplication) DeliverTx(tx []byte) types.ResultDeliverTx { if app.serial { if len(tx) > 8 { - return types.ResponseDeliverTx{ + return types.ResultDeliverTx{ Code: code.CodeTypeEncodingError, Log: fmt.Sprintf("Max tx size is 8 bytes, got %d", len(tx))} } @@ -54,19 +54,19 @@ func (app *CounterApplication) DeliverTx(tx []byte) types.ResponseDeliverTx { copy(tx8[len(tx8)-len(tx):], tx) txValue := binary.BigEndian.Uint64(tx8) if txValue != uint64(app.txCount) { - return types.ResponseDeliverTx{ + return types.ResultDeliverTx{ Code: code.CodeTypeBadNonce, Log: fmt.Sprintf("Invalid nonce. Expected %v, got %v", app.txCount, txValue)} } } app.txCount++ - return types.ResponseDeliverTx{Code: code.CodeTypeOK} + return types.ResultDeliverTx{Code: code.CodeTypeOK} } -func (app *CounterApplication) CheckTx(tx []byte) types.ResponseCheckTx { +func (app *CounterApplication) CheckTx(tx []byte) types.ResultCheckTx { if app.serial { if len(tx) > 8 { - return types.ResponseCheckTx{ + return types.ResultCheckTx{ Code: code.CodeTypeEncodingError, Log: fmt.Sprintf("Max tx size is 8 bytes, got %d", len(tx))} } @@ -74,31 +74,31 @@ func (app *CounterApplication) CheckTx(tx []byte) types.ResponseCheckTx { copy(tx8[len(tx8)-len(tx):], tx) txValue := binary.BigEndian.Uint64(tx8) if txValue < uint64(app.txCount) { - return types.ResponseCheckTx{ + return types.ResultCheckTx{ Code: code.CodeTypeBadNonce, Log: fmt.Sprintf("Invalid nonce. Expected >= %v, got %v", app.txCount, txValue)} } } - return types.ResponseCheckTx{Code: code.CodeTypeOK} + return types.ResultCheckTx{Code: code.CodeTypeOK} } -func (app *CounterApplication) Commit() (resp types.ResponseCommit) { +func (app *CounterApplication) Commit() (resp types.ResultCommit) { app.hashCount++ if app.txCount == 0 { - return types.ResponseCommit{} + return types.ResultCommit{} } hash := make([]byte, 8) binary.BigEndian.PutUint64(hash, uint64(app.txCount)) - return types.ResponseCommit{Data: hash} + return types.ResultCommit{Data: hash} } -func (app *CounterApplication) Query(reqQuery types.RequestQuery) types.ResponseQuery { +func (app *CounterApplication) Query(reqQuery types.ParamsQuery) types.ResultQuery { switch reqQuery.Path { case "hash": - return types.ResponseQuery{Value: []byte(cmn.Fmt("%v", app.hashCount))} + return types.ResultQuery{Value: []byte(cmn.Fmt("%v", app.hashCount))} case "tx": - return types.ResponseQuery{Value: []byte(cmn.Fmt("%v", app.txCount))} + return types.ResultQuery{Value: []byte(cmn.Fmt("%v", app.txCount))} default: - return types.ResponseQuery{Log: cmn.Fmt("Invalid query path. Expected hash or tx, got %v", reqQuery.Path)} + return types.ResultQuery{Log: cmn.Fmt("Invalid query path. Expected hash or tx, got %v", reqQuery.Path)} } } diff --git a/example/kvstore/helpers.go b/example/kvstore/helpers.go index da826fe6..e302a6d1 100644 --- a/example/kvstore/helpers.go +++ b/example/kvstore/helpers.go @@ -32,7 +32,7 @@ func RandVals(cnt int) []types.Validator { // which allows tests to pass and is fine as long as you // don't make any tx that modify the validator state func InitKVStore(app *PersistentKVStoreApplication) { - app.InitChain(types.RequestInitChain{ + app.InitChain(types.ParamsInitChain{ Validators: RandVals(1), GenesisBytes: []byte("[]"), }) diff --git a/example/kvstore/kvstore.go b/example/kvstore/kvstore.go index 4ccbc56b..573168df 100644 --- a/example/kvstore/kvstore.go +++ b/example/kvstore/kvstore.go @@ -64,12 +64,12 @@ func NewKVStoreApplication() *KVStoreApplication { return &KVStoreApplication{state: state} } -func (app *KVStoreApplication) Info(req types.RequestInfo) (resInfo types.ResponseInfo) { - return types.ResponseInfo{Data: fmt.Sprintf("{\"size\":%v}", app.state.Size)} +func (app *KVStoreApplication) Info(req types.ParamsInfo) (resInfo types.ResultInfo) { + return types.ResultInfo{Data: fmt.Sprintf("{\"size\":%v}", app.state.Size)} } // tx is either "key=value" or just arbitrary bytes -func (app *KVStoreApplication) DeliverTx(tx []byte) types.ResponseDeliverTx { +func (app *KVStoreApplication) DeliverTx(tx []byte) types.ResultDeliverTx { var key, value []byte parts := bytes.Split(tx, []byte("=")) if len(parts) == 2 { @@ -84,24 +84,24 @@ func (app *KVStoreApplication) DeliverTx(tx []byte) types.ResponseDeliverTx { {[]byte("app.creator"), []byte("jae")}, {[]byte("app.key"), key}, } - return types.ResponseDeliverTx{Code: code.CodeTypeOK, Tags: tags} + return types.ResultDeliverTx{Code: code.CodeTypeOK, Tags: tags} } -func (app *KVStoreApplication) CheckTx(tx []byte) types.ResponseCheckTx { - return types.ResponseCheckTx{Code: code.CodeTypeOK} +func (app *KVStoreApplication) CheckTx(tx []byte) types.ResultCheckTx { + return types.ResultCheckTx{Code: code.CodeTypeOK} } -func (app *KVStoreApplication) Commit() types.ResponseCommit { +func (app *KVStoreApplication) Commit() types.ResultCommit { // Using a memdb - just return the big endian size of the db appHash := make([]byte, 8) binary.PutVarint(appHash, app.state.Size) app.state.AppHash = appHash app.state.Height += 1 saveState(app.state) - return types.ResponseCommit{Data: appHash} + return types.ResultCommit{Data: appHash} } -func (app *KVStoreApplication) Query(reqQuery types.RequestQuery) (resQuery types.ResponseQuery) { +func (app *KVStoreApplication) Query(reqQuery types.ParamsQuery) (resQuery types.ResultQuery) { if reqQuery.Prove { value := app.state.db.Get(prefixKey(reqQuery.Data)) resQuery.Index = -1 // TODO make Proof return index diff --git a/example/kvstore/kvstore_test.go b/example/kvstore/kvstore_test.go index ff3e4920..32c66797 100644 --- a/example/kvstore/kvstore_test.go +++ b/example/kvstore/kvstore_test.go @@ -25,7 +25,7 @@ func testKVStore(t *testing.T, app types.Application, tx []byte, key, value stri require.False(t, ar.IsErr(), ar) // make sure query is fine - resQuery := app.Query(types.RequestQuery{ + resQuery := app.Query(types.ParamsQuery{ Path: "/store", Data: []byte(key), }) @@ -33,7 +33,7 @@ func testKVStore(t *testing.T, app types.Application, tx []byte, key, value stri require.Equal(t, value, string(resQuery.Value)) // make sure proof is fine - resQuery = app.Query(types.RequestQuery{ + resQuery = app.Query(types.ParamsQuery{ Path: "/store", Data: []byte(key), Prove: true, @@ -79,7 +79,7 @@ func TestPersistentKVStoreInfo(t *testing.T) { InitKVStore(kvstore) height := int64(0) - resInfo := kvstore.Info(types.RequestInfo{}) + resInfo := kvstore.Info(types.ParamsInfo{}) if resInfo.LastBlockHeight != height { t.Fatalf("expected height of %d, got %d", height, resInfo.LastBlockHeight) } @@ -90,11 +90,11 @@ func TestPersistentKVStoreInfo(t *testing.T) { header := types.Header{ Height: int64(height), } - kvstore.BeginBlock(types.RequestBeginBlock{hash, header, nil, nil}) - kvstore.EndBlock(types.RequestEndBlock{header.Height}) + kvstore.BeginBlock(types.ParamsBeginBlock{hash, header, nil, nil}) + kvstore.EndBlock(types.ParamsEndBlock{header.Height}) kvstore.Commit() - resInfo = kvstore.Info(types.RequestInfo{}) + resInfo = kvstore.Info(types.ParamsInfo{}) if resInfo.LastBlockHeight != height { t.Fatalf("expected height of %d, got %d", height, resInfo.LastBlockHeight) } @@ -114,7 +114,7 @@ func TestValUpdates(t *testing.T) { nInit := 5 vals := RandVals(total) // iniitalize with the first nInit - kvstore.InitChain(types.RequestInitChain{ + kvstore.InitChain(types.ParamsInitChain{ Validators: vals[:nInit], }) @@ -176,13 +176,13 @@ func makeApplyBlock(t *testing.T, kvstore types.Application, heightInt int, diff Height: height, } - kvstore.BeginBlock(types.RequestBeginBlock{hash, header, nil, nil}) + kvstore.BeginBlock(types.ParamsBeginBlock{hash, header, nil, nil}) for _, tx := range txs { if r := kvstore.DeliverTx(tx); r.IsErr() { t.Fatal(r) } } - resEndBlock := kvstore.EndBlock(types.RequestEndBlock{header.Height}) + resEndBlock := kvstore.EndBlock(types.ParamsEndBlock{header.Height}) kvstore.Commit() valsEqual(t, diff, resEndBlock.ValidatorUpdates) diff --git a/example/kvstore/persistent_kvstore.go b/example/kvstore/persistent_kvstore.go index 02f7ce74..00095869 100644 --- a/example/kvstore/persistent_kvstore.go +++ b/example/kvstore/persistent_kvstore.go @@ -50,19 +50,19 @@ func (app *PersistentKVStoreApplication) SetLogger(l log.Logger) { app.logger = l } -func (app *PersistentKVStoreApplication) Info(req types.RequestInfo) types.ResponseInfo { +func (app *PersistentKVStoreApplication) Info(req types.ParamsInfo) types.ResultInfo { res := app.app.Info(req) res.LastBlockHeight = app.app.state.Height res.LastBlockAppHash = app.app.state.AppHash return res } -func (app *PersistentKVStoreApplication) SetOption(req types.RequestSetOption) types.ResponseSetOption { +func (app *PersistentKVStoreApplication) SetOption(req types.ParamsSetOption) types.ResultSetOption { return app.app.SetOption(req) } // tx is either "val:pubkey/power" or "key=value" or just arbitrary bytes -func (app *PersistentKVStoreApplication) DeliverTx(tx []byte) types.ResponseDeliverTx { +func (app *PersistentKVStoreApplication) DeliverTx(tx []byte) types.ResultDeliverTx { // if it starts with "val:", update the validator set // format is "val:pubkey/power" if isValidatorTx(tx) { @@ -75,40 +75,40 @@ func (app *PersistentKVStoreApplication) DeliverTx(tx []byte) types.ResponseDeli return app.app.DeliverTx(tx) } -func (app *PersistentKVStoreApplication) CheckTx(tx []byte) types.ResponseCheckTx { +func (app *PersistentKVStoreApplication) CheckTx(tx []byte) types.ResultCheckTx { return app.app.CheckTx(tx) } // Commit will panic if InitChain was not called -func (app *PersistentKVStoreApplication) Commit() types.ResponseCommit { +func (app *PersistentKVStoreApplication) Commit() types.ResultCommit { return app.app.Commit() } -func (app *PersistentKVStoreApplication) Query(reqQuery types.RequestQuery) types.ResponseQuery { +func (app *PersistentKVStoreApplication) Query(reqQuery types.ParamsQuery) types.ResultQuery { return app.app.Query(reqQuery) } // Save the validators in the merkle tree -func (app *PersistentKVStoreApplication) InitChain(req types.RequestInitChain) types.ResponseInitChain { +func (app *PersistentKVStoreApplication) InitChain(req types.ParamsInitChain) types.ResultInitChain { for _, v := range req.Validators { r := app.updateValidator(v) if r.IsErr() { app.logger.Error("Error updating validators", "r", r) } } - return types.ResponseInitChain{} + return types.ResultInitChain{} } // Track the block hash and header information -func (app *PersistentKVStoreApplication) BeginBlock(req types.RequestBeginBlock) types.ResponseBeginBlock { +func (app *PersistentKVStoreApplication) BeginBlock(req types.ParamsBeginBlock) types.ResultBeginBlock { // reset valset changes app.ValUpdates = make([]types.Validator, 0) - return types.ResponseBeginBlock{} + return types.ResultBeginBlock{} } // Update the validator set -func (app *PersistentKVStoreApplication) EndBlock(req types.RequestEndBlock) types.ResponseEndBlock { - return types.ResponseEndBlock{ValidatorUpdates: app.ValUpdates} +func (app *PersistentKVStoreApplication) EndBlock(req types.ParamsEndBlock) types.ResultEndBlock { + return types.ResultEndBlock{ValidatorUpdates: app.ValUpdates} } //--------------------------------------------- @@ -139,13 +139,13 @@ func isValidatorTx(tx []byte) bool { // format is "val:pubkey/power" // pubkey is raw 32-byte ed25519 key -func (app *PersistentKVStoreApplication) execValidatorTx(tx []byte) types.ResponseDeliverTx { +func (app *PersistentKVStoreApplication) execValidatorTx(tx []byte) types.ResultDeliverTx { tx = tx[len(ValidatorSetChangePrefix):] //get the pubkey and power pubKeyAndPower := strings.Split(string(tx), "/") if len(pubKeyAndPower) != 2 { - return types.ResponseDeliverTx{ + return types.ResultDeliverTx{ Code: code.CodeTypeEncodingError, Log: fmt.Sprintf("Expected 'pubkey/power'. Got %v", pubKeyAndPower)} } @@ -154,7 +154,7 @@ func (app *PersistentKVStoreApplication) execValidatorTx(tx []byte) types.Respon // decode the pubkey pubkey, err := hex.DecodeString(pubkeyS) if err != nil { - return types.ResponseDeliverTx{ + return types.ResultDeliverTx{ Code: code.CodeTypeEncodingError, Log: fmt.Sprintf("Pubkey (%s) is invalid hex", pubkeyS)} } @@ -162,7 +162,7 @@ func (app *PersistentKVStoreApplication) execValidatorTx(tx []byte) types.Respon // decode the power power, err := strconv.ParseInt(powerS, 10, 64) if err != nil { - return types.ResponseDeliverTx{ + return types.ResultDeliverTx{ Code: code.CodeTypeEncodingError, Log: fmt.Sprintf("Power (%s) is not an int", powerS)} } @@ -172,12 +172,12 @@ func (app *PersistentKVStoreApplication) execValidatorTx(tx []byte) types.Respon } // add, update, or remove a validator -func (app *PersistentKVStoreApplication) updateValidator(v types.Validator) types.ResponseDeliverTx { +func (app *PersistentKVStoreApplication) updateValidator(v types.Validator) types.ResultDeliverTx { key := []byte("val:" + string(v.PubKey.Data)) if v.Power == 0 { // remove validator if !app.app.state.db.Has(key) { - return types.ResponseDeliverTx{ + return types.ResultDeliverTx{ Code: code.CodeTypeUnauthorized, Log: fmt.Sprintf("Cannot remove non-existent validator %X", key)} } @@ -186,7 +186,7 @@ func (app *PersistentKVStoreApplication) updateValidator(v types.Validator) type // add or update validator value := bytes.NewBuffer(make([]byte, 0)) if err := types.WriteMessage(&v, value); err != nil { - return types.ResponseDeliverTx{ + return types.ResultDeliverTx{ Code: code.CodeTypeEncodingError, Log: fmt.Sprintf("Error encoding validator: %v", err)} } @@ -196,5 +196,5 @@ func (app *PersistentKVStoreApplication) updateValidator(v types.Validator) type // we only update the changes array if we successfully updated the tree app.ValUpdates = append(app.ValUpdates, v) - return types.ResponseDeliverTx{Code: code.CodeTypeOK} + return types.ResultDeliverTx{Code: code.CodeTypeOK} } diff --git a/server/socket_server.go b/server/socket_server.go index eb26dc35..d9aa9740 100644 --- a/server/socket_server.go +++ b/server/socket_server.go @@ -172,32 +172,32 @@ func (s *SocketServer) handleRequest(req *types.Request, responses chan<- *types case *types.Request_Flush: responses <- types.ToResponseFlush() case *types.Request_Info: - res := s.app.Info(*r.Info) - responses <- types.ToResponseInfo(res) + res := s.app.Info(types.ToParamsInfo(*r.Info)) + responses <- types.ToResponseInfo(types.FromResultInfo(res)) case *types.Request_SetOption: - res := s.app.SetOption(*r.SetOption) - responses <- types.ToResponseSetOption(res) + res := s.app.SetOption(types.ToParamsSetOption(*r.SetOption)) + responses <- types.ToResponseSetOption(types.FromResultSetOption(res)) case *types.Request_DeliverTx: res := s.app.DeliverTx(r.DeliverTx.Tx) - responses <- types.ToResponseDeliverTx(res) + responses <- types.ToResponseDeliverTx(types.FromResultDeliverTx(res)) case *types.Request_CheckTx: res := s.app.CheckTx(r.CheckTx.Tx) - responses <- types.ToResponseCheckTx(res) + responses <- types.ToResponseCheckTx(types.FromResultCheckTx(res)) case *types.Request_Commit: res := s.app.Commit() - responses <- types.ToResponseCommit(res) + responses <- types.ToResponseCommit(types.FromResultCommit(res)) case *types.Request_Query: - res := s.app.Query(*r.Query) - responses <- types.ToResponseQuery(res) + res := s.app.Query(types.ToParamsQuery(*r.Query)) + responses <- types.ToResponseQuery(types.FromResultQuery(res)) case *types.Request_InitChain: - res := s.app.InitChain(*r.InitChain) - responses <- types.ToResponseInitChain(res) + res := s.app.InitChain(types.ToParamsInitChain(*r.InitChain)) + responses <- types.ToResponseInitChain(types.FromResultInitChain(res)) case *types.Request_BeginBlock: - res := s.app.BeginBlock(*r.BeginBlock) - responses <- types.ToResponseBeginBlock(res) + res := s.app.BeginBlock(types.ToParamsBeginBlock(*r.BeginBlock)) + responses <- types.ToResponseBeginBlock(types.FromResultBeginBlock(res)) case *types.Request_EndBlock: - res := s.app.EndBlock(*r.EndBlock) - responses <- types.ToResponseEndBlock(res) + res := s.app.EndBlock(types.ToParamsEndBlock(*r.EndBlock)) + responses <- types.ToResponseEndBlock(types.FromResultEndBlock(res)) default: responses <- types.ToResponseException("Unknown request") } diff --git a/types/application.go b/types/application.go index d1eb40bc..03d0c8fb 100644 --- a/types/application.go +++ b/types/application.go @@ -84,55 +84,64 @@ func NewGRPCApplication(app Application) *GRPCApplication { return &GRPCApplication{app} } -func (app *GRPCApplication) Echo(ctx context.Context, req *ParamsEcho) (*ResultEcho, error) { - return &ResultEcho{req.Message}, nil +func (app *GRPCApplication) Echo(ctx context.Context, req *RequestEcho) (*ResponseEcho, error) { + return &ResponseEcho{req.Message}, nil } -func (app *GRPCApplication) Flush(ctx context.Context, req *ParamsFlush) (*ResultFlush, error) { - return &ResultFlush{}, nil +func (app *GRPCApplication) Flush(ctx context.Context, req *RequestFlush) (*ResponseFlush, error) { + return &ResponseFlush{}, nil } -func (app *GRPCApplication) Info(ctx context.Context, req *ParamsInfo) (*ResultInfo, error) { - res := app.app.Info(*req) - return &res, nil +func (app *GRPCApplication) Info(ctx context.Context, req *RequestInfo) (*ResponseInfo, error) { + res := app.app.Info(ToParamsInfo(*req)) + r := FromResultInfo(res) + return &r, nil } -func (app *GRPCApplication) SetOption(ctx context.Context, req *ParamsSetOption) (*ResultSetOption, error) { - res := app.app.SetOption(*req) - return &res, nil +func (app *GRPCApplication) SetOption(ctx context.Context, req *RequestSetOption) (*ResponseSetOption, error) { + res := app.app.SetOption(ToParamsSetOption(*req)) + r := FromResultSetOption(res) + return &r, nil } -func (app *GRPCApplication) DeliverTx(ctx context.Context, req *ParamsDeliverTx) (*ResultDeliverTx, error) { +func (app *GRPCApplication) DeliverTx(ctx context.Context, req *RequestDeliverTx) (*ResponseDeliverTx, error) { res := app.app.DeliverTx(req.Tx) - return &res, nil + r := FromResultDeliverTx(res) + return &r, nil } -func (app *GRPCApplication) CheckTx(ctx context.Context, req *ParamsCheckTx) (*ResultCheckTx, error) { +func (app *GRPCApplication) CheckTx(ctx context.Context, req *RequestCheckTx) (*ResponseCheckTx, error) { res := app.app.CheckTx(req.Tx) - return &res, nil + r := FromResultCheckTx(res) + return &r, nil } -func (app *GRPCApplication) Query(ctx context.Context, req *ParamsQuery) (*ResultQuery, error) { - res := app.app.Query(*req) - return &res, nil +func (app *GRPCApplication) Query(ctx context.Context, req *RequestQuery) (*ResponseQuery, error) { + res := app.app.Query(ToParamsQuery(*req)) + r := FromResultQuery(res) + return &r, nil } -func (app *GRPCApplication) Commit(ctx context.Context, req *ParamsCommit) (*ResultCommit, error) { +func (app *GRPCApplication) Commit(ctx context.Context, req *RequestCommit) (*ResponseCommit, error) { res := app.app.Commit() - return &res, nil + r := FromResultCommit(res) + return &r, nil } -func (app *GRPCApplication) InitChain(ctx context.Context, req *ParamsInitChain) (*ResultInitChain, error) { - res := app.app.InitChain(*req) - return &res, nil +func (app *GRPCApplication) InitChain(ctx context.Context, req *RequestInitChain) (*ResponseInitChain, error) { + res := app.app.InitChain(ToParamsInitChain(*req)) + r := FromResultInitChain(res) + return &r, nil } -func (app *GRPCApplication) BeginBlock(ctx context.Context, req *ParamsBeginBlock) (*ResultBeginBlock, error) { - res := app.app.BeginBlock(*req) - return &res, nil +func (app *GRPCApplication) BeginBlock(ctx context.Context, req *RequestBeginBlock) (*ResponseBeginBlock, error) { + res := app.app.BeginBlock(ToParamsBeginBlock(*req)) + r := FromResultBeginBlock(res) + return &r, nil } -func (app *GRPCApplication) EndBlock(ctx context.Context, req *ParamsEndBlock) (*ResultEndBlock, error) { - res := app.app.EndBlock(*req) - return &res, nil +func (app *GRPCApplication) EndBlock(ctx context.Context, req *RequestEndBlock) (*ResponseEndBlock, error) { + res := app.app.EndBlock(ToParamsEndBlock(*req)) + r := FromResultEndBlock(res) + return &r, nil } diff --git a/types/codetype.go b/types/codetype.go index 5355a498..287f9e81 100644 --- a/types/codetype.go +++ b/types/codetype.go @@ -33,3 +33,35 @@ func (r ResponseQuery) IsOK() bool { func (r ResponseQuery) IsErr() bool { return r.Code != CodeTypeOK } + +//---------------------------------------------------- + +// IsOK returns true if Code is OK. +func (r ResultCheckTx) IsOK() bool { + return r.Code == CodeTypeOK +} + +// IsErr returns true if Code is something other than OK. +func (r ResultCheckTx) IsErr() bool { + return r.Code != CodeTypeOK +} + +// IsOK returns true if Code is OK. +func (r ResultDeliverTx) IsOK() bool { + return r.Code == CodeTypeOK +} + +// IsErr returns true if Code is something other than OK. +func (r ResultDeliverTx) IsErr() bool { + return r.Code != CodeTypeOK +} + +// IsOK returns true if Code is OK. +func (r ResultQuery) IsOK() bool { + return r.Code == CodeTypeOK +} + +// IsErr returns true if Code is something other than OK. +func (r ResultQuery) IsErr() bool { + return r.Code != CodeTypeOK +} diff --git a/types/params.go b/types/params.go index 3e35119a..476121ba 100644 --- a/types/params.go +++ b/types/params.go @@ -11,16 +11,36 @@ type ParamsInfo struct { Version string `json:"version,omitempty"` } +func ToParamsInfo(req RequestInfo) ParamsInfo { + return ParamsInfo{ + Version: req.Version, + } +} + type ParamsSetOption struct { Key string `json:"key,omitempty"` Value string `json:"value,omitempty"` } +func ToParamsSetOption(req RequestSetOption) ParamsSetOption { + return ParamsSetOption{ + Key: req.Key, + Value: req.Value, + } +} + type ParamsInitChain struct { Validators []Validator `json:"validators"` GenesisBytes []byte `json:"genesis_bytes,omitempty"` } +func ToParamsInitChain(req RequestInitChain) ParamsInitChain { + return ParamsInitChain{ + Validators: req.Validators, + GenesisBytes: req.GenesisBytes, + } +} + type ParamsQuery struct { Data []byte `json:"data,omitempty"` Path string `json:"path,omitempty"` @@ -28,6 +48,15 @@ type ParamsQuery struct { Prove bool `json:"prove,omitempty"` } +func ToParamsQuery(req RequestQuery) ParamsQuery { + return ParamsQuery{ + Data: req.Data, + Path: req.Path, + Height: req.Height, + Prove: req.Prove, + } +} + type ParamsBeginBlock struct { Hash []byte `json:"hash,omitempty"` Header Header `json:"header"` @@ -35,6 +64,20 @@ type ParamsBeginBlock struct { ByzantineValidators []Evidence `json:"byzantine_validators"` } +func ToParamsBeginBlock(req RequestBeginBlock) ParamsBeginBlock { + vals := make([]SigningValidator, len(req.Validators)) + for i := 0; i < len(vals); i++ { + v := req.Validators[i] + vals[i] = *v + } + return ParamsBeginBlock{ + Hash: req.Hash, + Header: req.Header, + Validators: vals, + ByzantineValidators: req.ByzantineValidators, + } +} + type ParamsCheckTx struct { Tx []byte `json:"tx,omitempty"` } @@ -47,5 +90,11 @@ type ParamsEndBlock struct { Height int64 `json:"height,omitempty"` } +func ToParamsEndBlock(req RequestEndBlock) ParamsEndBlock { + return ParamsEndBlock{ + Height: req.Height, + } +} + type ParamsCommit struct { } diff --git a/types/result.go b/types/result.go index 8b14fdfb..983efa25 100644 --- a/types/result.go +++ b/types/result.go @@ -21,6 +21,10 @@ type ResultInfo struct { LastBlockAppHash []byte `json:"last_block_app_hash,omitempty"` } +func FromResultInfo(res ResultInfo) ResponseInfo { + return ResponseInfo(res) +} + type ResultSetOption struct { Code uint32 `json:"code,omitempty"` // bytes data = 2; @@ -28,10 +32,18 @@ type ResultSetOption struct { Info string `json:"info,omitempty"` } +func FromResultSetOption(res ResultSetOption) ResponseSetOption { + return ResponseSetOption(res) +} + type ResultInitChain struct { Validators []Validator `json:"validators"` } +func FromResultInitChain(res ResultInitChain) ResponseInitChain { + return ResponseInitChain(res) +} + type ResultQuery struct { Code uint32 `json:"code,omitempty"` // bytes data = 2; // use "value" instead. @@ -44,10 +56,18 @@ type ResultQuery struct { Height int64 `json:"height,omitempty"` } +func FromResultQuery(res ResultQuery) ResponseQuery { + return ResponseQuery(res) +} + type ResultBeginBlock struct { Tags []common.KVPair `json:"tags,omitempty"` } +func FromResultBeginBlock(res ResultBeginBlock) ResponseBeginBlock { + return ResponseBeginBlock(res) +} + type ResultCheckTx struct { Code uint32 `json:"code,omitempty"` Data []byte `json:"data,omitempty"` @@ -59,6 +79,10 @@ type ResultCheckTx struct { Fee common.KI64Pair `json:"fee"` } +func FromResultCheckTx(res ResultCheckTx) ResponseCheckTx { + return ResponseCheckTx(res) +} + type ResultDeliverTx struct { Code uint32 `json:"code,omitempty"` Data []byte `json:"data,omitempty"` @@ -70,13 +94,25 @@ type ResultDeliverTx struct { Fee common.KI64Pair `json:"fee"` } +func FromResultDeliverTx(res ResultDeliverTx) ResponseDeliverTx { + return ResponseDeliverTx(res) +} + type ResultEndBlock struct { ValidatorUpdates []Validator `json:"validator_updates"` ConsensusParamUpdates *ConsensusParams `json:"consensus_param_updates,omitempty"` Tags []common.KVPair `json:"tags,omitempty"` } +func FromResultEndBlock(res ResultEndBlock) ResponseEndBlock { + return ResponseEndBlock(res) +} + type ResultCommit struct { // reserve 1 Data []byte `json:"data,omitempty"` } + +func FromResultCommit(res ResultCommit) ResponseCommit { + return ResponseCommit(res) +} From 01f87fd8d3c9055960bf4a7ed1f94ae7aee8469d Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Thu, 24 May 2018 00:13:43 -0400 Subject: [PATCH 27/40] remove gogoproto --- Gopkg.lock | 40 +- Gopkg.toml | 11 +- Makefile | 9 +- example/kvstore/persistent_kvstore.go | 2 +- tests/server/client.go | 5 +- types/json.go | 2 +- types/messages.go | 2 +- types/messages_test.go | 8 +- types/params.go | 17 +- types/protoreplace/protoreplace.go | 55 --- types/result.go | 100 +++-- types/types.pb.go | 519 +++++++++++++------------- types/types.proto | 31 +- types/validator.go | 2 +- 14 files changed, 399 insertions(+), 404 deletions(-) delete mode 100644 types/protoreplace/protoreplace.go diff --git a/Gopkg.lock b/Gopkg.lock index 6bc40c0b..d7340d69 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -29,26 +29,15 @@ revision = "259ab82a6cad3992b4e21ff5cac294ccb06474bc" version = "v1.7.0" -[[projects]] - name = "github.com/gogo/protobuf" - packages = [ - "gogoproto", - "jsonpb", - "proto", - "protoc-gen-gogo/descriptor", - "sortkeys", - "types" - ] - revision = "1adfc126b41513cc696b209667c8656ea7aac67c" - version = "v1.0.0" - [[projects]] name = "github.com/golang/protobuf" packages = [ + "jsonpb", "proto", "ptypes", "ptypes/any", "ptypes/duration", + "ptypes/struct", "ptypes/timestamp" ] revision = "925541529c1fa6821df4e44ce2723319eb2be768" @@ -58,7 +47,7 @@ branch = "master" name = "github.com/golang/snappy" packages = ["."] - revision = "553a641470496b2327abcac10b36396bd98e45c9" + revision = "2e65f85255dbc3072edf28d6b5b8efc472979f5a" [[projects]] name = "github.com/inconshreveable/mousetrap" @@ -93,14 +82,14 @@ [[projects]] name = "github.com/spf13/cobra" packages = ["."] - revision = "a1f051bc3eba734da4772d60e2d677f47cf93ef4" - version = "v0.0.2" + revision = "ef82de70bb3f60c65fb8eebacbb2d122ef517385" + version = "v0.0.3" [[projects]] name = "github.com/spf13/pflag" packages = ["."] - revision = "e57e3eeb33f795204c1ca35f56c44f83227c6e66" - version = "v1.0.0" + revision = "583c0c0531f06d5278b7d917446061adc344b5cd" + version = "v1.0.1" [[projects]] name = "github.com/stretchr/testify" @@ -128,31 +117,31 @@ "leveldb/table", "leveldb/util" ] - revision = "714f901b98fdb3aa954b4193d8cbd64a28d80cad" + revision = "5d6fca44a948d2be89a9702de7717f0168403d3d" [[projects]] + branch = "bucky/no-gogo" name = "github.com/tendermint/tmlibs" packages = [ "common", "db", "log" ] - revision = "2e24b64fc121dcdf1cabceab8dc2f7257675483c" - version = "v0.8.1" + revision = "d24a30858e23ace7aeee306e2ce652aba8021631" [[projects]] branch = "master" name = "golang.org/x/net" packages = [ "context", + "http/httpguts", "http2", "http2/hpack", "idna", "internal/timeseries", - "lex/httplex", "trace" ] - revision = "61147c48b25b599e5b561d2e9c4f3e1ef489ca41" + revision = "9ef9f5bb98a1fdc41f8cf6c250a4404b4085e389" [[projects]] name = "golang.org/x/text" @@ -176,10 +165,9 @@ version = "v0.3.0" [[projects]] - branch = "master" name = "google.golang.org/genproto" packages = ["googleapis/rpc/status"] - revision = "ce84044298496ef4b54b4a0a0909ba593cc60e30" + revision = "7fd901a49ba6a7f87732eb344f6e3c5b19d1b200" [[projects]] name = "google.golang.org/grpc" @@ -208,6 +196,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "e42d4a691fb0d0db9c717394e580dd00b36ba9e185541f99fc56689338470123" + inputs-digest = "e0b98059927fe32f1398b66d5d3464fac7d0b4c011855863a04f21b5bd8b7032" solver-name = "gps-cdcl" solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml index 3f9a207d..ca7cd517 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -32,7 +32,7 @@ # Use `~` for only minor version bumps. [[constraint]] - name = "github.com/gogo/protobuf" + name = "github.com/golang/protobuf" version = "~1.0.0" [[constraint]] @@ -45,12 +45,19 @@ [[constraint]] name = "github.com/tendermint/tmlibs" - version = "0.8.1" + branch = "bucky/no-gogo" + # version = "0.8.1" [[constraint]] name = "google.golang.org/grpc" version = "~1.7.3" +# this got updated and broke, so locked to an old working commit ... +[[override]] + name = "google.golang.org/genproto" + revision = "7fd901a49ba6a7f87732eb344f6e3c5b19d1b200" + + [prune] go-tests = true unused-packages = true diff --git a/Makefile b/Makefile index d5aa5365..38862583 100644 --- a/Makefile +++ b/Makefile @@ -2,11 +2,10 @@ GOTOOLS = \ github.com/mitchellh/gox \ github.com/golang/dep/cmd/dep \ gopkg.in/alecthomas/gometalinter.v2 \ - github.com/gogo/protobuf/protoc-gen-gogo \ - github.com/gogo/protobuf/gogoproto -GOTOOLS_CHECK = gox dep gometalinter.v2 protoc protoc-gen-gogo + github.com/golang/protobuf/protoc-gen-go \ +GOTOOLS_CHECK = gox dep gometalinter.v2 protoc protoc-gen-go PACKAGES=$(shell go list ./... | grep -v '/vendor/') -INCLUDE = -I=. -I=${GOPATH}/src -I=${GOPATH}/src/github.com/gogo/protobuf/protobuf +INCLUDE = -I=. -I=${GOPATH}/src all: check get_vendor_deps protoc build test install metalinter @@ -20,7 +19,7 @@ protoc: ## If you get the following error, ## "error while loading shared libraries: libprotobuf.so.14: cannot open shared object file: No such file or directory" ## See https://stackoverflow.com/a/25518702 - protoc $(INCLUDE) --gogo_out=plugins=grpc:. types/*.proto + protoc $(INCLUDE) --go_out=plugins=grpc:. types/*.proto @echo "--> adding nolint declarations to protobuf generated files" @awk '/package types/ { print "//nolint: gas"; print; next }1' types/types.pb.go > types/types.pb.go.new @mv types/types.pb.go.new types/types.pb.go diff --git a/example/kvstore/persistent_kvstore.go b/example/kvstore/persistent_kvstore.go index 00095869..fda7a7a1 100644 --- a/example/kvstore/persistent_kvstore.go +++ b/example/kvstore/persistent_kvstore.go @@ -129,7 +129,7 @@ func (app *PersistentKVStoreApplication) Validators() (validators []types.Valida return } -func MakeValSetChangeTx(pubkey types.PubKey, power int64) []byte { +func MakeValSetChangeTx(pubkey *types.PubKey, power int64) []byte { return []byte(cmn.Fmt("val:%X/%d", pubkey.Data, power)) } diff --git a/tests/server/client.go b/tests/server/client.go index 14b4007a..e1d02850 100644 --- a/tests/server/client.go +++ b/tests/server/client.go @@ -12,11 +12,12 @@ import ( func InitChain(client abcicli.Client) error { total := 10 - vals := make([]types.Validator, total) + vals := make([]*types.Validator, total) for i := 0; i < total; i++ { pubkey := cmn.RandBytes(33) power := cmn.RandInt() - vals[i] = types.Ed25519Validator(pubkey, int64(power)) + v := types.Ed25519Validator(pubkey, int64(power)) + vals[i] = &v } _, err := client.InitChainSync(types.RequestInitChain{ Validators: vals, diff --git a/types/json.go b/types/json.go index dbd7f061..9bbf01a0 100644 --- a/types/json.go +++ b/types/json.go @@ -4,7 +4,7 @@ import ( "bytes" "encoding/json" - "github.com/gogo/protobuf/jsonpb" + "github.com/golang/protobuf/jsonpb" ) //--------------------------------------------------------------------------- diff --git a/types/messages.go b/types/messages.go index e200ebfc..e4d1c68f 100644 --- a/types/messages.go +++ b/types/messages.go @@ -5,7 +5,7 @@ import ( "encoding/binary" "io" - "github.com/gogo/protobuf/proto" + "github.com/golang/protobuf/proto" ) const ( diff --git a/types/messages_test.go b/types/messages_test.go index 21d3595f..fb93a0ab 100644 --- a/types/messages_test.go +++ b/types/messages_test.go @@ -6,7 +6,7 @@ import ( "strings" "testing" - "github.com/gogo/protobuf/proto" + "github.com/golang/protobuf/proto" "github.com/stretchr/testify/assert" cmn "github.com/tendermint/tmlibs/common" ) @@ -21,7 +21,7 @@ func TestMarshalJSON(t *testing.T) { Code: 1, Data: []byte("hello"), GasWanted: 43, - Tags: []cmn.KVPair{ + Tags: []*cmn.KVPair{ {[]byte("pho"), []byte("bo")}, }, } @@ -82,8 +82,8 @@ func TestWriteReadMessage2(t *testing.T) { Data: []byte(phrase), Log: phrase, GasWanted: 10, - Tags: []cmn.KVPair{ - cmn.KVPair{[]byte("abc"), []byte("def")}, + Tags: []*cmn.KVPair{ + {[]byte("abc"), []byte("def")}, }, // Fee: cmn.KI64Pair{ }, diff --git a/types/params.go b/types/params.go index 476121ba..dbf5021e 100644 --- a/types/params.go +++ b/types/params.go @@ -35,8 +35,13 @@ type ParamsInitChain struct { } func ToParamsInitChain(req RequestInitChain) ParamsInitChain { + vals := make([]Validator, len(req.Validators)) + for i := 0; i < len(vals); i++ { + v := req.Validators[i] + vals[i] = *v + } return ParamsInitChain{ - Validators: req.Validators, + Validators: vals, GenesisBytes: req.GenesisBytes, } } @@ -70,11 +75,17 @@ func ToParamsBeginBlock(req RequestBeginBlock) ParamsBeginBlock { v := req.Validators[i] vals[i] = *v } + + evidence := make([]Evidence, len(req.ByzantineValidators)) + for i := 0; i < len(evidence); i++ { + ev := req.ByzantineValidators[i] + evidence[i] = *ev + } return ParamsBeginBlock{ Hash: req.Hash, - Header: req.Header, + Header: *req.Header, Validators: vals, - ByzantineValidators: req.ByzantineValidators, + ByzantineValidators: evidence, } } diff --git a/types/protoreplace/protoreplace.go b/types/protoreplace/protoreplace.go deleted file mode 100644 index 3ea0c73d..00000000 --- a/types/protoreplace/protoreplace.go +++ /dev/null @@ -1,55 +0,0 @@ -// +build ignore - -package main - -import ( - "bytes" - "fmt" - "io/ioutil" - "os" - "os/exec" - "regexp" - "strings" -) - -// This script replaces most `[]byte` with `data.Bytes` in a `.pb.go` file. -// It was written before we realized we could use `gogo/protobuf` to achieve -// this more natively. So it's here for safe keeping in case we ever need to -// abandon `gogo/protobuf`. - -func main() { - bytePattern := regexp.MustCompile("[[][]]byte") - const oldPath = "types/types.pb.go" - const tmpPath = "types/types.pb.new" - content, err := ioutil.ReadFile(oldPath) - if err != nil { - panic("cannot read " + oldPath) - os.Exit(1) - } - lines := bytes.Split(content, []byte("\n")) - outFile, _ := os.Create(tmpPath) - wroteImport := false - for _, line_bytes := range lines { - line := string(line_bytes) - gotPackageLine := strings.HasPrefix(line, "package ") - writeImportTime := strings.HasPrefix(line, "import ") - containsDescriptor := strings.Contains(line, "Descriptor") - containsByteArray := strings.Contains(line, "[]byte") - if containsByteArray && !containsDescriptor { - line = string(bytePattern.ReplaceAll([]byte(line), []byte("data.Bytes"))) - } - if writeImportTime && !wroteImport { - wroteImport = true - fmt.Fprintf(outFile, "import \"github.com/tendermint/go-wire/data\"\n") - - } - if gotPackageLine { - fmt.Fprintf(outFile, "%s\n", "//nolint: gas") - } - fmt.Fprintf(outFile, "%s\n", line) - } - outFile.Close() - os.Remove(oldPath) - os.Rename(tmpPath, oldPath) - exec.Command("goimports", "-w", oldPath) -} diff --git a/types/result.go b/types/result.go index 983efa25..63cea449 100644 --- a/types/result.go +++ b/types/result.go @@ -1,6 +1,6 @@ package types -import common "github.com/tendermint/tmlibs/common" +import cmn "github.com/tendermint/tmlibs/common" // nondeterministic type ResultException struct { @@ -41,7 +41,10 @@ type ResultInitChain struct { } func FromResultInitChain(res ResultInitChain) ResponseInitChain { - return ResponseInitChain(res) + vals := valsToPointers(res.Validators) + return ResponseInitChain{ + Validators: vals, + } } type ResultQuery struct { @@ -61,51 +64,80 @@ func FromResultQuery(res ResultQuery) ResponseQuery { } type ResultBeginBlock struct { - Tags []common.KVPair `json:"tags,omitempty"` + Tags []cmn.KVPair `json:"tags,omitempty"` } func FromResultBeginBlock(res ResultBeginBlock) ResponseBeginBlock { - return ResponseBeginBlock(res) + tags := tagsToPointers(res.Tags) + return ResponseBeginBlock{ + Tags: tags, + } } type ResultCheckTx struct { - Code uint32 `json:"code,omitempty"` - Data []byte `json:"data,omitempty"` - Log string `json:"log,omitempty"` - Info string `json:"info,omitempty"` - GasWanted int64 `json:"gas_wanted,omitempty"` - GasUsed int64 `json:"gas_used,omitempty"` - Tags []common.KVPair `json:"tags,omitempty"` - Fee common.KI64Pair `json:"fee"` + Code uint32 `json:"code,omitempty"` + Data []byte `json:"data,omitempty"` + Log string `json:"log,omitempty"` + Info string `json:"info,omitempty"` + GasWanted int64 `json:"gas_wanted,omitempty"` + GasUsed int64 `json:"gas_used,omitempty"` + Tags []cmn.KVPair `json:"tags,omitempty"` + Fee cmn.KI64Pair `json:"fee"` } func FromResultCheckTx(res ResultCheckTx) ResponseCheckTx { - return ResponseCheckTx(res) + tags := tagsToPointers(res.Tags) + return ResponseCheckTx{ + Code: res.Code, + Data: res.Data, + Log: res.Log, + Info: res.Info, + GasWanted: res.GasWanted, + GasUsed: res.GasUsed, + Tags: tags, + Fee: &res.Fee, + } } type ResultDeliverTx struct { - Code uint32 `json:"code,omitempty"` - Data []byte `json:"data,omitempty"` - Log string `json:"log,omitempty"` - Info string `json:"info,omitempty"` - GasWanted int64 `json:"gas_wanted,omitempty"` - GasUsed int64 `json:"gas_used,omitempty"` - Tags []common.KVPair `json:"tags,omitempty"` - Fee common.KI64Pair `json:"fee"` + Code uint32 `json:"code,omitempty"` + Data []byte `json:"data,omitempty"` + Log string `json:"log,omitempty"` + Info string `json:"info,omitempty"` + GasWanted int64 `json:"gas_wanted,omitempty"` + GasUsed int64 `json:"gas_used,omitempty"` + Tags []cmn.KVPair `json:"tags,omitempty"` + Fee cmn.KI64Pair `json:"fee"` } func FromResultDeliverTx(res ResultDeliverTx) ResponseDeliverTx { - return ResponseDeliverTx(res) + tags := tagsToPointers(res.Tags) + return ResponseDeliverTx{ + Code: res.Code, + Data: res.Data, + Log: res.Log, + Info: res.Info, + GasWanted: res.GasWanted, + GasUsed: res.GasUsed, + Tags: tags, + Fee: &res.Fee, + } } type ResultEndBlock struct { ValidatorUpdates []Validator `json:"validator_updates"` ConsensusParamUpdates *ConsensusParams `json:"consensus_param_updates,omitempty"` - Tags []common.KVPair `json:"tags,omitempty"` + Tags []cmn.KVPair `json:"tags,omitempty"` } func FromResultEndBlock(res ResultEndBlock) ResponseEndBlock { - return ResponseEndBlock(res) + tags := tagsToPointers(res.Tags) + vals := valsToPointers(res.ValidatorUpdates) + return ResponseEndBlock{ + ValidatorUpdates: vals, + ConsensusParamUpdates: res.ConsensusParamUpdates, + Tags: tags, + } } type ResultCommit struct { @@ -116,3 +148,23 @@ type ResultCommit struct { func FromResultCommit(res ResultCommit) ResponseCommit { return ResponseCommit(res) } + +//------------------------------------------------------- + +func tagsToPointers(tags []cmn.KVPair) []*cmn.KVPair { + tagPtrs := make([]*cmn.KVPair, len(tags)) + for i := 0; i < len(tags); i++ { + t := tags[i] + tagPtrs[i] = &t + } + return tagPtrs +} + +func valsToPointers(vals []Validator) []*Validator { + valPtrs := make([]*Validator, len(vals)) + for i := 0; i < len(vals); i++ { + v := vals[i] + valPtrs[i] = &v + } + return valPtrs +} diff --git a/types/types.pb.go b/types/types.pb.go index e04a4f4b..6f6a8874 100644 --- a/types/types.pb.go +++ b/types/types.pb.go @@ -1,4 +1,4 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: types/types.proto /* @@ -46,14 +46,15 @@ It has these top-level messages: //nolint: gas package types -import proto "github.com/gogo/protobuf/proto" +import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" -import _ "github.com/gogo/protobuf/gogoproto" import common "github.com/tendermint/tmlibs/common" -import context "golang.org/x/net/context" -import grpc "google.golang.org/grpc" +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -64,7 +65,7 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package type Request struct { // Types that are valid to be assigned to Value: @@ -85,7 +86,7 @@ type Request struct { func (m *Request) Reset() { *m = Request{} } func (m *Request) String() string { return proto.CompactTextString(m) } func (*Request) ProtoMessage() {} -func (*Request) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{0} } +func (*Request) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } type isRequest_Value interface { isRequest_Value() @@ -243,57 +244,57 @@ func _Request_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { // value switch x := m.Value.(type) { case *Request_Echo: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeVarint(2<<3 | proto.WireBytes) if err := b.EncodeMessage(x.Echo); err != nil { return err } case *Request_Flush: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeVarint(3<<3 | proto.WireBytes) if err := b.EncodeMessage(x.Flush); err != nil { return err } case *Request_Info: - _ = b.EncodeVarint(4<<3 | proto.WireBytes) + b.EncodeVarint(4<<3 | proto.WireBytes) if err := b.EncodeMessage(x.Info); err != nil { return err } case *Request_SetOption: - _ = b.EncodeVarint(5<<3 | proto.WireBytes) + b.EncodeVarint(5<<3 | proto.WireBytes) if err := b.EncodeMessage(x.SetOption); err != nil { return err } case *Request_InitChain: - _ = b.EncodeVarint(6<<3 | proto.WireBytes) + b.EncodeVarint(6<<3 | proto.WireBytes) if err := b.EncodeMessage(x.InitChain); err != nil { return err } case *Request_Query: - _ = b.EncodeVarint(7<<3 | proto.WireBytes) + b.EncodeVarint(7<<3 | proto.WireBytes) if err := b.EncodeMessage(x.Query); err != nil { return err } case *Request_BeginBlock: - _ = b.EncodeVarint(8<<3 | proto.WireBytes) + b.EncodeVarint(8<<3 | proto.WireBytes) if err := b.EncodeMessage(x.BeginBlock); err != nil { return err } case *Request_CheckTx: - _ = b.EncodeVarint(9<<3 | proto.WireBytes) + b.EncodeVarint(9<<3 | proto.WireBytes) if err := b.EncodeMessage(x.CheckTx); err != nil { return err } case *Request_DeliverTx: - _ = b.EncodeVarint(19<<3 | proto.WireBytes) + b.EncodeVarint(19<<3 | proto.WireBytes) if err := b.EncodeMessage(x.DeliverTx); err != nil { return err } case *Request_EndBlock: - _ = b.EncodeVarint(11<<3 | proto.WireBytes) + b.EncodeVarint(11<<3 | proto.WireBytes) if err := b.EncodeMessage(x.EndBlock); err != nil { return err } case *Request_Commit: - _ = b.EncodeVarint(12<<3 | proto.WireBytes) + b.EncodeVarint(12<<3 | proto.WireBytes) if err := b.EncodeMessage(x.Commit); err != nil { return err } @@ -467,13 +468,13 @@ func _Request_OneofSizer(msg proto.Message) (n int) { } type RequestEcho struct { - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` + Message string `protobuf:"bytes,1,opt,name=message" json:"message,omitempty"` } func (m *RequestEcho) Reset() { *m = RequestEcho{} } func (m *RequestEcho) String() string { return proto.CompactTextString(m) } func (*RequestEcho) ProtoMessage() {} -func (*RequestEcho) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{1} } +func (*RequestEcho) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } func (m *RequestEcho) GetMessage() string { if m != nil { @@ -488,16 +489,16 @@ type RequestFlush struct { func (m *RequestFlush) Reset() { *m = RequestFlush{} } func (m *RequestFlush) String() string { return proto.CompactTextString(m) } func (*RequestFlush) ProtoMessage() {} -func (*RequestFlush) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{2} } +func (*RequestFlush) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } type RequestInfo struct { - Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` + Version string `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` } func (m *RequestInfo) Reset() { *m = RequestInfo{} } func (m *RequestInfo) String() string { return proto.CompactTextString(m) } func (*RequestInfo) ProtoMessage() {} -func (*RequestInfo) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{3} } +func (*RequestInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } func (m *RequestInfo) GetVersion() string { if m != nil { @@ -508,14 +509,14 @@ func (m *RequestInfo) GetVersion() string { // nondeterministic type RequestSetOption struct { - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + Key string `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` } func (m *RequestSetOption) Reset() { *m = RequestSetOption{} } func (m *RequestSetOption) String() string { return proto.CompactTextString(m) } func (*RequestSetOption) ProtoMessage() {} -func (*RequestSetOption) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{4} } +func (*RequestSetOption) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } func (m *RequestSetOption) GetKey() string { if m != nil { @@ -532,16 +533,16 @@ func (m *RequestSetOption) GetValue() string { } type RequestInitChain struct { - Validators []Validator `protobuf:"bytes,1,rep,name=validators" json:"validators"` - GenesisBytes []byte `protobuf:"bytes,2,opt,name=genesis_bytes,json=genesisBytes,proto3" json:"genesis_bytes,omitempty"` + Validators []*Validator `protobuf:"bytes,1,rep,name=validators" json:"validators,omitempty"` + GenesisBytes []byte `protobuf:"bytes,2,opt,name=genesis_bytes,json=genesisBytes,proto3" json:"genesis_bytes,omitempty"` } func (m *RequestInitChain) Reset() { *m = RequestInitChain{} } func (m *RequestInitChain) String() string { return proto.CompactTextString(m) } func (*RequestInitChain) ProtoMessage() {} -func (*RequestInitChain) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{5} } +func (*RequestInitChain) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } -func (m *RequestInitChain) GetValidators() []Validator { +func (m *RequestInitChain) GetValidators() []*Validator { if m != nil { return m.Validators } @@ -557,15 +558,15 @@ func (m *RequestInitChain) GetGenesisBytes() []byte { type RequestQuery struct { Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` - Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` - Height int64 `protobuf:"varint,3,opt,name=height,proto3" json:"height,omitempty"` - Prove bool `protobuf:"varint,4,opt,name=prove,proto3" json:"prove,omitempty"` + Path string `protobuf:"bytes,2,opt,name=path" json:"path,omitempty"` + Height int64 `protobuf:"varint,3,opt,name=height" json:"height,omitempty"` + Prove bool `protobuf:"varint,4,opt,name=prove" json:"prove,omitempty"` } func (m *RequestQuery) Reset() { *m = RequestQuery{} } func (m *RequestQuery) String() string { return proto.CompactTextString(m) } func (*RequestQuery) ProtoMessage() {} -func (*RequestQuery) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{6} } +func (*RequestQuery) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } func (m *RequestQuery) GetData() []byte { if m != nil { @@ -597,15 +598,15 @@ func (m *RequestQuery) GetProve() bool { type RequestBeginBlock struct { Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` - Header Header `protobuf:"bytes,2,opt,name=header" json:"header"` + Header *Header `protobuf:"bytes,2,opt,name=header" json:"header,omitempty"` Validators []*SigningValidator `protobuf:"bytes,3,rep,name=validators" json:"validators,omitempty"` - ByzantineValidators []Evidence `protobuf:"bytes,4,rep,name=byzantine_validators,json=byzantineValidators" json:"byzantine_validators"` + ByzantineValidators []*Evidence `protobuf:"bytes,4,rep,name=byzantine_validators,json=byzantineValidators" json:"byzantine_validators,omitempty"` } func (m *RequestBeginBlock) Reset() { *m = RequestBeginBlock{} } func (m *RequestBeginBlock) String() string { return proto.CompactTextString(m) } func (*RequestBeginBlock) ProtoMessage() {} -func (*RequestBeginBlock) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{7} } +func (*RequestBeginBlock) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } func (m *RequestBeginBlock) GetHash() []byte { if m != nil { @@ -614,11 +615,11 @@ func (m *RequestBeginBlock) GetHash() []byte { return nil } -func (m *RequestBeginBlock) GetHeader() Header { +func (m *RequestBeginBlock) GetHeader() *Header { if m != nil { return m.Header } - return Header{} + return nil } func (m *RequestBeginBlock) GetValidators() []*SigningValidator { @@ -628,7 +629,7 @@ func (m *RequestBeginBlock) GetValidators() []*SigningValidator { return nil } -func (m *RequestBeginBlock) GetByzantineValidators() []Evidence { +func (m *RequestBeginBlock) GetByzantineValidators() []*Evidence { if m != nil { return m.ByzantineValidators } @@ -642,7 +643,7 @@ type RequestCheckTx struct { func (m *RequestCheckTx) Reset() { *m = RequestCheckTx{} } func (m *RequestCheckTx) String() string { return proto.CompactTextString(m) } func (*RequestCheckTx) ProtoMessage() {} -func (*RequestCheckTx) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{8} } +func (*RequestCheckTx) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } func (m *RequestCheckTx) GetTx() []byte { if m != nil { @@ -658,7 +659,7 @@ type RequestDeliverTx struct { func (m *RequestDeliverTx) Reset() { *m = RequestDeliverTx{} } func (m *RequestDeliverTx) String() string { return proto.CompactTextString(m) } func (*RequestDeliverTx) ProtoMessage() {} -func (*RequestDeliverTx) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{9} } +func (*RequestDeliverTx) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } func (m *RequestDeliverTx) GetTx() []byte { if m != nil { @@ -668,13 +669,13 @@ func (m *RequestDeliverTx) GetTx() []byte { } type RequestEndBlock struct { - Height int64 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"` + Height int64 `protobuf:"varint,1,opt,name=height" json:"height,omitempty"` } func (m *RequestEndBlock) Reset() { *m = RequestEndBlock{} } func (m *RequestEndBlock) String() string { return proto.CompactTextString(m) } func (*RequestEndBlock) ProtoMessage() {} -func (*RequestEndBlock) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{10} } +func (*RequestEndBlock) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } func (m *RequestEndBlock) GetHeight() int64 { if m != nil { @@ -689,7 +690,7 @@ type RequestCommit struct { func (m *RequestCommit) Reset() { *m = RequestCommit{} } func (m *RequestCommit) String() string { return proto.CompactTextString(m) } func (*RequestCommit) ProtoMessage() {} -func (*RequestCommit) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{11} } +func (*RequestCommit) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } type Response struct { // Types that are valid to be assigned to Value: @@ -711,7 +712,7 @@ type Response struct { func (m *Response) Reset() { *m = Response{} } func (m *Response) String() string { return proto.CompactTextString(m) } func (*Response) ProtoMessage() {} -func (*Response) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{12} } +func (*Response) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } type isResponse_Value interface { isResponse_Value() @@ -881,62 +882,62 @@ func _Response_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { // value switch x := m.Value.(type) { case *Response_Exception: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeVarint(1<<3 | proto.WireBytes) if err := b.EncodeMessage(x.Exception); err != nil { return err } case *Response_Echo: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeVarint(2<<3 | proto.WireBytes) if err := b.EncodeMessage(x.Echo); err != nil { return err } case *Response_Flush: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeVarint(3<<3 | proto.WireBytes) if err := b.EncodeMessage(x.Flush); err != nil { return err } case *Response_Info: - _ = b.EncodeVarint(4<<3 | proto.WireBytes) + b.EncodeVarint(4<<3 | proto.WireBytes) if err := b.EncodeMessage(x.Info); err != nil { return err } case *Response_SetOption: - _ = b.EncodeVarint(5<<3 | proto.WireBytes) + b.EncodeVarint(5<<3 | proto.WireBytes) if err := b.EncodeMessage(x.SetOption); err != nil { return err } case *Response_InitChain: - _ = b.EncodeVarint(6<<3 | proto.WireBytes) + b.EncodeVarint(6<<3 | proto.WireBytes) if err := b.EncodeMessage(x.InitChain); err != nil { return err } case *Response_Query: - _ = b.EncodeVarint(7<<3 | proto.WireBytes) + b.EncodeVarint(7<<3 | proto.WireBytes) if err := b.EncodeMessage(x.Query); err != nil { return err } case *Response_BeginBlock: - _ = b.EncodeVarint(8<<3 | proto.WireBytes) + b.EncodeVarint(8<<3 | proto.WireBytes) if err := b.EncodeMessage(x.BeginBlock); err != nil { return err } case *Response_CheckTx: - _ = b.EncodeVarint(9<<3 | proto.WireBytes) + b.EncodeVarint(9<<3 | proto.WireBytes) if err := b.EncodeMessage(x.CheckTx); err != nil { return err } case *Response_DeliverTx: - _ = b.EncodeVarint(10<<3 | proto.WireBytes) + b.EncodeVarint(10<<3 | proto.WireBytes) if err := b.EncodeMessage(x.DeliverTx); err != nil { return err } case *Response_EndBlock: - _ = b.EncodeVarint(11<<3 | proto.WireBytes) + b.EncodeVarint(11<<3 | proto.WireBytes) if err := b.EncodeMessage(x.EndBlock); err != nil { return err } case *Response_Commit: - _ = b.EncodeVarint(12<<3 | proto.WireBytes) + b.EncodeVarint(12<<3 | proto.WireBytes) if err := b.EncodeMessage(x.Commit); err != nil { return err } @@ -1124,13 +1125,13 @@ func _Response_OneofSizer(msg proto.Message) (n int) { // nondeterministic type ResponseException struct { - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` + Error string `protobuf:"bytes,1,opt,name=error" json:"error,omitempty"` } func (m *ResponseException) Reset() { *m = ResponseException{} } func (m *ResponseException) String() string { return proto.CompactTextString(m) } func (*ResponseException) ProtoMessage() {} -func (*ResponseException) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{13} } +func (*ResponseException) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } func (m *ResponseException) GetError() string { if m != nil { @@ -1140,13 +1141,13 @@ func (m *ResponseException) GetError() string { } type ResponseEcho struct { - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` + Message string `protobuf:"bytes,1,opt,name=message" json:"message,omitempty"` } func (m *ResponseEcho) Reset() { *m = ResponseEcho{} } func (m *ResponseEcho) String() string { return proto.CompactTextString(m) } func (*ResponseEcho) ProtoMessage() {} -func (*ResponseEcho) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{14} } +func (*ResponseEcho) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } func (m *ResponseEcho) GetMessage() string { if m != nil { @@ -1161,19 +1162,19 @@ type ResponseFlush struct { func (m *ResponseFlush) Reset() { *m = ResponseFlush{} } func (m *ResponseFlush) String() string { return proto.CompactTextString(m) } func (*ResponseFlush) ProtoMessage() {} -func (*ResponseFlush) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{15} } +func (*ResponseFlush) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } type ResponseInfo struct { - Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` - Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` - LastBlockHeight int64 `protobuf:"varint,3,opt,name=last_block_height,json=lastBlockHeight,proto3" json:"last_block_height,omitempty"` + Data string `protobuf:"bytes,1,opt,name=data" json:"data,omitempty"` + Version string `protobuf:"bytes,2,opt,name=version" json:"version,omitempty"` + LastBlockHeight int64 `protobuf:"varint,3,opt,name=last_block_height,json=lastBlockHeight" json:"last_block_height,omitempty"` LastBlockAppHash []byte `protobuf:"bytes,4,opt,name=last_block_app_hash,json=lastBlockAppHash,proto3" json:"last_block_app_hash,omitempty"` } func (m *ResponseInfo) Reset() { *m = ResponseInfo{} } func (m *ResponseInfo) String() string { return proto.CompactTextString(m) } func (*ResponseInfo) ProtoMessage() {} -func (*ResponseInfo) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{16} } +func (*ResponseInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } func (m *ResponseInfo) GetData() string { if m != nil { @@ -1205,16 +1206,16 @@ func (m *ResponseInfo) GetLastBlockAppHash() []byte { // nondeterministic type ResponseSetOption struct { - Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Code uint32 `protobuf:"varint,1,opt,name=code" json:"code,omitempty"` // bytes data = 2; - Log string `protobuf:"bytes,3,opt,name=log,proto3" json:"log,omitempty"` - Info string `protobuf:"bytes,4,opt,name=info,proto3" json:"info,omitempty"` + Log string `protobuf:"bytes,3,opt,name=log" json:"log,omitempty"` + Info string `protobuf:"bytes,4,opt,name=info" json:"info,omitempty"` } func (m *ResponseSetOption) Reset() { *m = ResponseSetOption{} } func (m *ResponseSetOption) String() string { return proto.CompactTextString(m) } func (*ResponseSetOption) ProtoMessage() {} -func (*ResponseSetOption) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{17} } +func (*ResponseSetOption) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } func (m *ResponseSetOption) GetCode() uint32 { if m != nil { @@ -1238,15 +1239,15 @@ func (m *ResponseSetOption) GetInfo() string { } type ResponseInitChain struct { - Validators []Validator `protobuf:"bytes,1,rep,name=validators" json:"validators"` + Validators []*Validator `protobuf:"bytes,1,rep,name=validators" json:"validators,omitempty"` } func (m *ResponseInitChain) Reset() { *m = ResponseInitChain{} } func (m *ResponseInitChain) String() string { return proto.CompactTextString(m) } func (*ResponseInitChain) ProtoMessage() {} -func (*ResponseInitChain) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{18} } +func (*ResponseInitChain) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } -func (m *ResponseInitChain) GetValidators() []Validator { +func (m *ResponseInitChain) GetValidators() []*Validator { if m != nil { return m.Validators } @@ -1254,21 +1255,21 @@ func (m *ResponseInitChain) GetValidators() []Validator { } type ResponseQuery struct { - Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Code uint32 `protobuf:"varint,1,opt,name=code" json:"code,omitempty"` // bytes data = 2; // use "value" instead. - Log string `protobuf:"bytes,3,opt,name=log,proto3" json:"log,omitempty"` - Info string `protobuf:"bytes,4,opt,name=info,proto3" json:"info,omitempty"` - Index int64 `protobuf:"varint,5,opt,name=index,proto3" json:"index,omitempty"` + Log string `protobuf:"bytes,3,opt,name=log" json:"log,omitempty"` + Info string `protobuf:"bytes,4,opt,name=info" json:"info,omitempty"` + Index int64 `protobuf:"varint,5,opt,name=index" json:"index,omitempty"` Key []byte `protobuf:"bytes,6,opt,name=key,proto3" json:"key,omitempty"` Value []byte `protobuf:"bytes,7,opt,name=value,proto3" json:"value,omitempty"` Proof []byte `protobuf:"bytes,8,opt,name=proof,proto3" json:"proof,omitempty"` - Height int64 `protobuf:"varint,9,opt,name=height,proto3" json:"height,omitempty"` + Height int64 `protobuf:"varint,9,opt,name=height" json:"height,omitempty"` } func (m *ResponseQuery) Reset() { *m = ResponseQuery{} } func (m *ResponseQuery) String() string { return proto.CompactTextString(m) } func (*ResponseQuery) ProtoMessage() {} -func (*ResponseQuery) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{19} } +func (*ResponseQuery) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } func (m *ResponseQuery) GetCode() uint32 { if m != nil { @@ -1327,15 +1328,15 @@ func (m *ResponseQuery) GetHeight() int64 { } type ResponseBeginBlock struct { - Tags []common.KVPair `protobuf:"bytes,1,rep,name=tags" json:"tags,omitempty"` + Tags []*common.KVPair `protobuf:"bytes,1,rep,name=tags" json:"tags,omitempty"` } func (m *ResponseBeginBlock) Reset() { *m = ResponseBeginBlock{} } func (m *ResponseBeginBlock) String() string { return proto.CompactTextString(m) } func (*ResponseBeginBlock) ProtoMessage() {} -func (*ResponseBeginBlock) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{20} } +func (*ResponseBeginBlock) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } -func (m *ResponseBeginBlock) GetTags() []common.KVPair { +func (m *ResponseBeginBlock) GetTags() []*common.KVPair { if m != nil { return m.Tags } @@ -1343,20 +1344,20 @@ func (m *ResponseBeginBlock) GetTags() []common.KVPair { } type ResponseCheckTx struct { - Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` - Log string `protobuf:"bytes,3,opt,name=log,proto3" json:"log,omitempty"` - Info string `protobuf:"bytes,4,opt,name=info,proto3" json:"info,omitempty"` - GasWanted int64 `protobuf:"varint,5,opt,name=gas_wanted,json=gasWanted,proto3" json:"gas_wanted,omitempty"` - GasUsed int64 `protobuf:"varint,6,opt,name=gas_used,json=gasUsed,proto3" json:"gas_used,omitempty"` - Tags []common.KVPair `protobuf:"bytes,7,rep,name=tags" json:"tags,omitempty"` - Fee common.KI64Pair `protobuf:"bytes,8,opt,name=fee" json:"fee"` + Code uint32 `protobuf:"varint,1,opt,name=code" json:"code,omitempty"` + Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` + Log string `protobuf:"bytes,3,opt,name=log" json:"log,omitempty"` + Info string `protobuf:"bytes,4,opt,name=info" json:"info,omitempty"` + GasWanted int64 `protobuf:"varint,5,opt,name=gas_wanted,json=gasWanted" json:"gas_wanted,omitempty"` + GasUsed int64 `protobuf:"varint,6,opt,name=gas_used,json=gasUsed" json:"gas_used,omitempty"` + Tags []*common.KVPair `protobuf:"bytes,7,rep,name=tags" json:"tags,omitempty"` + Fee *common.KI64Pair `protobuf:"bytes,8,opt,name=fee" json:"fee,omitempty"` } func (m *ResponseCheckTx) Reset() { *m = ResponseCheckTx{} } func (m *ResponseCheckTx) String() string { return proto.CompactTextString(m) } func (*ResponseCheckTx) ProtoMessage() {} -func (*ResponseCheckTx) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{21} } +func (*ResponseCheckTx) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } func (m *ResponseCheckTx) GetCode() uint32 { if m != nil { @@ -1400,35 +1401,35 @@ func (m *ResponseCheckTx) GetGasUsed() int64 { return 0 } -func (m *ResponseCheckTx) GetTags() []common.KVPair { +func (m *ResponseCheckTx) GetTags() []*common.KVPair { if m != nil { return m.Tags } return nil } -func (m *ResponseCheckTx) GetFee() common.KI64Pair { +func (m *ResponseCheckTx) GetFee() *common.KI64Pair { if m != nil { return m.Fee } - return common.KI64Pair{} + return nil } type ResponseDeliverTx struct { - Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` - Log string `protobuf:"bytes,3,opt,name=log,proto3" json:"log,omitempty"` - Info string `protobuf:"bytes,4,opt,name=info,proto3" json:"info,omitempty"` - GasWanted int64 `protobuf:"varint,5,opt,name=gas_wanted,json=gasWanted,proto3" json:"gas_wanted,omitempty"` - GasUsed int64 `protobuf:"varint,6,opt,name=gas_used,json=gasUsed,proto3" json:"gas_used,omitempty"` - Tags []common.KVPair `protobuf:"bytes,7,rep,name=tags" json:"tags,omitempty"` - Fee common.KI64Pair `protobuf:"bytes,8,opt,name=fee" json:"fee"` + Code uint32 `protobuf:"varint,1,opt,name=code" json:"code,omitempty"` + Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` + Log string `protobuf:"bytes,3,opt,name=log" json:"log,omitempty"` + Info string `protobuf:"bytes,4,opt,name=info" json:"info,omitempty"` + GasWanted int64 `protobuf:"varint,5,opt,name=gas_wanted,json=gasWanted" json:"gas_wanted,omitempty"` + GasUsed int64 `protobuf:"varint,6,opt,name=gas_used,json=gasUsed" json:"gas_used,omitempty"` + Tags []*common.KVPair `protobuf:"bytes,7,rep,name=tags" json:"tags,omitempty"` + Fee *common.KI64Pair `protobuf:"bytes,8,opt,name=fee" json:"fee,omitempty"` } func (m *ResponseDeliverTx) Reset() { *m = ResponseDeliverTx{} } func (m *ResponseDeliverTx) String() string { return proto.CompactTextString(m) } func (*ResponseDeliverTx) ProtoMessage() {} -func (*ResponseDeliverTx) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{22} } +func (*ResponseDeliverTx) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } func (m *ResponseDeliverTx) GetCode() uint32 { if m != nil { @@ -1472,32 +1473,32 @@ func (m *ResponseDeliverTx) GetGasUsed() int64 { return 0 } -func (m *ResponseDeliverTx) GetTags() []common.KVPair { +func (m *ResponseDeliverTx) GetTags() []*common.KVPair { if m != nil { return m.Tags } return nil } -func (m *ResponseDeliverTx) GetFee() common.KI64Pair { +func (m *ResponseDeliverTx) GetFee() *common.KI64Pair { if m != nil { return m.Fee } - return common.KI64Pair{} + return nil } type ResponseEndBlock struct { - ValidatorUpdates []Validator `protobuf:"bytes,1,rep,name=validator_updates,json=validatorUpdates" json:"validator_updates"` + ValidatorUpdates []*Validator `protobuf:"bytes,1,rep,name=validator_updates,json=validatorUpdates" json:"validator_updates,omitempty"` ConsensusParamUpdates *ConsensusParams `protobuf:"bytes,2,opt,name=consensus_param_updates,json=consensusParamUpdates" json:"consensus_param_updates,omitempty"` - Tags []common.KVPair `protobuf:"bytes,3,rep,name=tags" json:"tags,omitempty"` + Tags []*common.KVPair `protobuf:"bytes,3,rep,name=tags" json:"tags,omitempty"` } func (m *ResponseEndBlock) Reset() { *m = ResponseEndBlock{} } func (m *ResponseEndBlock) String() string { return proto.CompactTextString(m) } func (*ResponseEndBlock) ProtoMessage() {} -func (*ResponseEndBlock) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{23} } +func (*ResponseEndBlock) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } -func (m *ResponseEndBlock) GetValidatorUpdates() []Validator { +func (m *ResponseEndBlock) GetValidatorUpdates() []*Validator { if m != nil { return m.ValidatorUpdates } @@ -1511,7 +1512,7 @@ func (m *ResponseEndBlock) GetConsensusParamUpdates() *ConsensusParams { return nil } -func (m *ResponseEndBlock) GetTags() []common.KVPair { +func (m *ResponseEndBlock) GetTags() []*common.KVPair { if m != nil { return m.Tags } @@ -1526,7 +1527,7 @@ type ResponseCommit struct { func (m *ResponseCommit) Reset() { *m = ResponseCommit{} } func (m *ResponseCommit) String() string { return proto.CompactTextString(m) } func (*ResponseCommit) ProtoMessage() {} -func (*ResponseCommit) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{24} } +func (*ResponseCommit) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } func (m *ResponseCommit) GetData() []byte { if m != nil { @@ -1546,7 +1547,7 @@ type ConsensusParams struct { func (m *ConsensusParams) Reset() { *m = ConsensusParams{} } func (m *ConsensusParams) String() string { return proto.CompactTextString(m) } func (*ConsensusParams) ProtoMessage() {} -func (*ConsensusParams) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{25} } +func (*ConsensusParams) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } func (m *ConsensusParams) GetBlockSize() *BlockSize { if m != nil { @@ -1571,15 +1572,15 @@ func (m *ConsensusParams) GetBlockGossip() *BlockGossip { // BlockSize contain limits on the block size. type BlockSize struct { - MaxBytes int32 `protobuf:"varint,1,opt,name=max_bytes,json=maxBytes,proto3" json:"max_bytes,omitempty"` - MaxTxs int32 `protobuf:"varint,2,opt,name=max_txs,json=maxTxs,proto3" json:"max_txs,omitempty"` - MaxGas int64 `protobuf:"varint,3,opt,name=max_gas,json=maxGas,proto3" json:"max_gas,omitempty"` + MaxBytes int32 `protobuf:"varint,1,opt,name=max_bytes,json=maxBytes" json:"max_bytes,omitempty"` + MaxTxs int32 `protobuf:"varint,2,opt,name=max_txs,json=maxTxs" json:"max_txs,omitempty"` + MaxGas int64 `protobuf:"varint,3,opt,name=max_gas,json=maxGas" json:"max_gas,omitempty"` } func (m *BlockSize) Reset() { *m = BlockSize{} } func (m *BlockSize) String() string { return proto.CompactTextString(m) } func (*BlockSize) ProtoMessage() {} -func (*BlockSize) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{26} } +func (*BlockSize) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } func (m *BlockSize) GetMaxBytes() int32 { if m != nil { @@ -1604,14 +1605,14 @@ func (m *BlockSize) GetMaxGas() int64 { // TxSize contain limits on the tx size. type TxSize struct { - MaxBytes int32 `protobuf:"varint,1,opt,name=max_bytes,json=maxBytes,proto3" json:"max_bytes,omitempty"` - MaxGas int64 `protobuf:"varint,2,opt,name=max_gas,json=maxGas,proto3" json:"max_gas,omitempty"` + MaxBytes int32 `protobuf:"varint,1,opt,name=max_bytes,json=maxBytes" json:"max_bytes,omitempty"` + MaxGas int64 `protobuf:"varint,2,opt,name=max_gas,json=maxGas" json:"max_gas,omitempty"` } func (m *TxSize) Reset() { *m = TxSize{} } func (m *TxSize) String() string { return proto.CompactTextString(m) } func (*TxSize) ProtoMessage() {} -func (*TxSize) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{27} } +func (*TxSize) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } func (m *TxSize) GetMaxBytes() int32 { if m != nil { @@ -1631,13 +1632,13 @@ func (m *TxSize) GetMaxGas() int64 { // elements of how blocks are gossiped type BlockGossip struct { // Note: must not be 0 - BlockPartSizeBytes int32 `protobuf:"varint,1,opt,name=block_part_size_bytes,json=blockPartSizeBytes,proto3" json:"block_part_size_bytes,omitempty"` + BlockPartSizeBytes int32 `protobuf:"varint,1,opt,name=block_part_size_bytes,json=blockPartSizeBytes" json:"block_part_size_bytes,omitempty"` } func (m *BlockGossip) Reset() { *m = BlockGossip{} } func (m *BlockGossip) String() string { return proto.CompactTextString(m) } func (*BlockGossip) ProtoMessage() {} -func (*BlockGossip) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{28} } +func (*BlockGossip) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } func (m *BlockGossip) GetBlockPartSizeBytes() int32 { if m != nil { @@ -1649,12 +1650,12 @@ func (m *BlockGossip) GetBlockPartSizeBytes() int32 { // just the minimum the app might need type Header struct { // basics - ChainID string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` - Height int64 `protobuf:"varint,2,opt,name=height,proto3" json:"height,omitempty"` - Time int64 `protobuf:"varint,3,opt,name=time,proto3" json:"time,omitempty"` + ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId" json:"chain_id,omitempty"` + Height int64 `protobuf:"varint,2,opt,name=height" json:"height,omitempty"` + Time int64 `protobuf:"varint,3,opt,name=time" json:"time,omitempty"` // txs - NumTxs int32 `protobuf:"varint,4,opt,name=num_txs,json=numTxs,proto3" json:"num_txs,omitempty"` - TotalTxs int64 `protobuf:"varint,5,opt,name=total_txs,json=totalTxs,proto3" json:"total_txs,omitempty"` + NumTxs int32 `protobuf:"varint,4,opt,name=num_txs,json=numTxs" json:"num_txs,omitempty"` + TotalTxs int64 `protobuf:"varint,5,opt,name=total_txs,json=totalTxs" json:"total_txs,omitempty"` // hashes LastBlockHash []byte `protobuf:"bytes,6,opt,name=last_block_hash,json=lastBlockHash,proto3" json:"last_block_hash,omitempty"` AppHash []byte `protobuf:"bytes,7,opt,name=app_hash,json=appHash,proto3" json:"app_hash,omitempty"` @@ -1665,11 +1666,11 @@ type Header struct { func (m *Header) Reset() { *m = Header{} } func (m *Header) String() string { return proto.CompactTextString(m) } func (*Header) ProtoMessage() {} -func (*Header) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{29} } +func (*Header) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } -func (m *Header) GetChainID() string { +func (m *Header) GetChainId() string { if m != nil { - return m.ChainID + return m.ChainId } return "" } @@ -1725,15 +1726,15 @@ func (m *Header) GetProposer() *Validator { // Validator type Validator struct { - Address []byte `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - PubKey PubKey `protobuf:"bytes,2,opt,name=pub_key,json=pubKey" json:"pub_key"` - Power int64 `protobuf:"varint,3,opt,name=power,proto3" json:"power,omitempty"` + Address []byte `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + PubKey *PubKey `protobuf:"bytes,2,opt,name=pub_key,json=pubKey" json:"pub_key,omitempty"` + Power int64 `protobuf:"varint,3,opt,name=power" json:"power,omitempty"` } func (m *Validator) Reset() { *m = Validator{} } func (m *Validator) String() string { return proto.CompactTextString(m) } func (*Validator) ProtoMessage() {} -func (*Validator) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{30} } +func (*Validator) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } func (m *Validator) GetAddress() []byte { if m != nil { @@ -1742,11 +1743,11 @@ func (m *Validator) GetAddress() []byte { return nil } -func (m *Validator) GetPubKey() PubKey { +func (m *Validator) GetPubKey() *PubKey { if m != nil { return m.PubKey } - return PubKey{} + return nil } func (m *Validator) GetPower() int64 { @@ -1759,13 +1760,13 @@ func (m *Validator) GetPower() int64 { // Validator with an extra bool type SigningValidator struct { Validator *Validator `protobuf:"bytes,1,opt,name=validator" json:"validator,omitempty"` - SignedLastBlock bool `protobuf:"varint,2,opt,name=signed_last_block,json=signedLastBlock,proto3" json:"signed_last_block,omitempty"` + SignedLastBlock bool `protobuf:"varint,2,opt,name=signed_last_block,json=signedLastBlock" json:"signed_last_block,omitempty"` } func (m *SigningValidator) Reset() { *m = SigningValidator{} } func (m *SigningValidator) String() string { return proto.CompactTextString(m) } func (*SigningValidator) ProtoMessage() {} -func (*SigningValidator) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{31} } +func (*SigningValidator) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } func (m *SigningValidator) GetValidator() *Validator { if m != nil { @@ -1782,14 +1783,14 @@ func (m *SigningValidator) GetSignedLastBlock() bool { } type PubKey struct { - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Type string `protobuf:"bytes,1,opt,name=type" json:"type,omitempty"` Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` } func (m *PubKey) Reset() { *m = PubKey{} } func (m *PubKey) String() string { return proto.CompactTextString(m) } func (*PubKey) ProtoMessage() {} -func (*PubKey) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{32} } +func (*PubKey) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } func (m *PubKey) GetType() string { if m != nil { @@ -1806,17 +1807,17 @@ func (m *PubKey) GetData() []byte { } type Evidence struct { - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Type string `protobuf:"bytes,1,opt,name=type" json:"type,omitempty"` Validator *Validator `protobuf:"bytes,2,opt,name=validator" json:"validator,omitempty"` - Height int64 `protobuf:"varint,3,opt,name=height,proto3" json:"height,omitempty"` - Time int64 `protobuf:"varint,4,opt,name=time,proto3" json:"time,omitempty"` - TotalVotingPower int64 `protobuf:"varint,5,opt,name=total_voting_power,json=totalVotingPower,proto3" json:"total_voting_power,omitempty"` + Height int64 `protobuf:"varint,3,opt,name=height" json:"height,omitempty"` + Time int64 `protobuf:"varint,4,opt,name=time" json:"time,omitempty"` + TotalVotingPower int64 `protobuf:"varint,5,opt,name=total_voting_power,json=totalVotingPower" json:"total_voting_power,omitempty"` } func (m *Evidence) Reset() { *m = Evidence{} } func (m *Evidence) String() string { return proto.CompactTextString(m) } func (*Evidence) ProtoMessage() {} -func (*Evidence) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{33} } +func (*Evidence) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} } func (m *Evidence) GetType() string { if m != nil { @@ -2292,120 +2293,116 @@ var _ABCIApplication_serviceDesc = grpc.ServiceDesc{ Metadata: "types/types.proto", } -func init() { proto.RegisterFile("types/types.proto", fileDescriptorTypes) } +func init() { proto.RegisterFile("types/types.proto", fileDescriptor0) } -var fileDescriptorTypes = []byte{ - // 1789 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0x4b, 0x73, 0x1c, 0x49, - 0x11, 0xd6, 0xbc, 0xa7, 0x53, 0x4f, 0x97, 0xfc, 0x18, 0xcf, 0x06, 0x61, 0x47, 0x43, 0x18, 0x99, - 0xd5, 0x6a, 0x40, 0x8b, 0x8d, 0xbd, 0x4b, 0x6c, 0x20, 0x69, 0xcd, 0x8e, 0xc2, 0x3c, 0x44, 0xdb, - 0x6b, 0x22, 0xb8, 0x4c, 0xd4, 0x4c, 0x97, 0x7a, 0x2a, 0x3c, 0xd3, 0xdd, 0xdb, 0x55, 0xa3, 0x9d, - 0xf1, 0x8d, 0xe0, 0xba, 0x77, 0xce, 0xdc, 0xf8, 0x03, 0xfc, 0x05, 0x82, 0x7f, 0xc0, 0xcd, 0x07, - 0xb8, 0xf1, 0x27, 0x20, 0x32, 0xab, 0xdf, 0xea, 0x59, 0x16, 0x73, 0xdc, 0x8b, 0x54, 0x59, 0x99, - 0x59, 0x9d, 0x99, 0x93, 0xf9, 0x65, 0x56, 0xc1, 0x0d, 0xbd, 0x0a, 0x85, 0x1a, 0xd0, 0xdf, 0xa3, - 0x30, 0x0a, 0x74, 0xc0, 0x5a, 0x44, 0xf4, 0x3f, 0xf0, 0xa4, 0x9e, 0x2e, 0xc6, 0x47, 0x93, 0x60, - 0x3e, 0xf0, 0x02, 0x2f, 0x18, 0x10, 0x77, 0xbc, 0xb8, 0x24, 0x8a, 0x08, 0x5a, 0x19, 0xad, 0xfe, - 0x20, 0x27, 0xae, 0x85, 0xef, 0x8a, 0x68, 0x2e, 0x7d, 0x3d, 0xd0, 0xf3, 0x99, 0x1c, 0xab, 0xc1, - 0x24, 0x98, 0xcf, 0x03, 0x3f, 0xff, 0x19, 0xfb, 0xaf, 0x4d, 0xe8, 0x38, 0xe2, 0x8b, 0x85, 0x50, - 0x9a, 0x1d, 0x40, 0x53, 0x4c, 0xa6, 0x41, 0xaf, 0x7e, 0xbf, 0x76, 0xb0, 0x79, 0xcc, 0x8e, 0x8c, - 0x5c, 0xcc, 0x7d, 0x36, 0x99, 0x06, 0xc3, 0x0d, 0x87, 0x24, 0xd8, 0xfb, 0xd0, 0xba, 0x9c, 0x2d, - 0xd4, 0xb4, 0xd7, 0x20, 0xd1, 0xfd, 0xa2, 0xe8, 0xcf, 0x91, 0x35, 0xdc, 0x70, 0x8c, 0x0c, 0x1e, - 0x2b, 0xfd, 0xcb, 0xa0, 0xd7, 0xac, 0x3a, 0xf6, 0xdc, 0xbf, 0xa4, 0x63, 0x51, 0x82, 0x3d, 0x01, - 0x50, 0x42, 0x8f, 0x82, 0x50, 0xcb, 0xc0, 0xef, 0xb5, 0x48, 0xfe, 0x4e, 0x51, 0xfe, 0x85, 0xd0, - 0xbf, 0x26, 0xf6, 0x70, 0xc3, 0xb1, 0x54, 0x42, 0xa0, 0xa6, 0xf4, 0xa5, 0x1e, 0x4d, 0xa6, 0x5c, - 0xfa, 0xbd, 0x76, 0x95, 0xe6, 0xb9, 0x2f, 0xf5, 0x19, 0xb2, 0x51, 0x53, 0x26, 0x04, 0xba, 0xf2, - 0xc5, 0x42, 0x44, 0xab, 0x5e, 0xa7, 0xca, 0x95, 0xdf, 0x20, 0x0b, 0x5d, 0x21, 0x19, 0xf6, 0x31, - 0x6c, 0x8e, 0x85, 0x27, 0xfd, 0xd1, 0x78, 0x16, 0x4c, 0x5e, 0xf7, 0xba, 0xa4, 0xd2, 0x2b, 0xaa, - 0x9c, 0xa2, 0xc0, 0x29, 0xf2, 0x87, 0x1b, 0x0e, 0x8c, 0x53, 0x8a, 0x1d, 0x43, 0x77, 0x32, 0x15, - 0x93, 0xd7, 0x23, 0xbd, 0xec, 0x59, 0xa4, 0x79, 0xab, 0xa8, 0x79, 0x86, 0xdc, 0x97, 0xcb, 0xe1, - 0x86, 0xd3, 0x99, 0x98, 0x25, 0xfa, 0xe5, 0x8a, 0x99, 0xbc, 0x12, 0x11, 0x6a, 0xed, 0x57, 0xf9, - 0xf5, 0xa9, 0xe1, 0x93, 0x9e, 0xe5, 0x26, 0x04, 0x7b, 0x04, 0x96, 0xf0, 0xdd, 0xd8, 0xd0, 0x4d, - 0x52, 0xbc, 0x5d, 0xfa, 0x45, 0x7d, 0x37, 0x31, 0xb3, 0x2b, 0xe2, 0x35, 0x3b, 0x82, 0x36, 0x66, - 0x89, 0xd4, 0xbd, 0x2d, 0xd2, 0xb9, 0x59, 0x32, 0x91, 0x78, 0xc3, 0x0d, 0x27, 0x96, 0x3a, 0xed, - 0x40, 0xeb, 0x8a, 0xcf, 0x16, 0xc2, 0xfe, 0x3e, 0x6c, 0xe6, 0x32, 0x85, 0xf5, 0xa0, 0x33, 0x17, - 0x4a, 0x71, 0x4f, 0xf4, 0x6a, 0xf7, 0x6b, 0x07, 0x96, 0x93, 0x90, 0xf6, 0x0e, 0x6c, 0xe5, 0xf3, - 0x24, 0xa7, 0x88, 0xb9, 0x80, 0x8a, 0x57, 0x22, 0x52, 0x98, 0x00, 0xb1, 0x62, 0x4c, 0xda, 0x1f, - 0xc1, 0x5e, 0x39, 0x09, 0xd8, 0x1e, 0x34, 0x5e, 0x8b, 0x55, 0x2c, 0x89, 0x4b, 0x76, 0x33, 0x36, - 0x88, 0xb2, 0xd8, 0x72, 0x62, 0xeb, 0x82, 0x54, 0x37, 0x4d, 0x03, 0xf6, 0x18, 0xe0, 0x8a, 0xcf, - 0xa4, 0xcb, 0x75, 0x10, 0xa9, 0x5e, 0xed, 0x7e, 0xe3, 0x60, 0xf3, 0x78, 0x2f, 0x76, 0xf7, 0x55, - 0xc2, 0x38, 0x6d, 0xfe, 0xed, 0xed, 0xbd, 0x0d, 0x27, 0x27, 0xc9, 0xbe, 0x0b, 0xdb, 0x9e, 0xf0, - 0x85, 0x92, 0x6a, 0x34, 0x5e, 0x69, 0xa1, 0xe8, 0x4b, 0x5b, 0xce, 0x56, 0xbc, 0x79, 0x8a, 0x7b, - 0xb6, 0x9b, 0x7a, 0x49, 0x29, 0xc4, 0x18, 0x34, 0x5d, 0xae, 0x39, 0x59, 0xba, 0xe5, 0xd0, 0x1a, - 0xf7, 0x42, 0xae, 0xa7, 0xb1, 0xa5, 0xb4, 0x66, 0xb7, 0xa1, 0x3d, 0x15, 0xd2, 0x9b, 0x6a, 0x2a, - 0xad, 0x86, 0x13, 0x53, 0xe8, 0x56, 0x18, 0x05, 0x57, 0x82, 0xaa, 0xa8, 0xeb, 0x18, 0xc2, 0xfe, - 0x7b, 0x0d, 0x6e, 0x5c, 0x4b, 0x3b, 0x3c, 0x77, 0xca, 0xd5, 0x34, 0xf9, 0x16, 0xae, 0xd9, 0xfb, - 0x78, 0x2e, 0x77, 0x45, 0x14, 0x57, 0xf7, 0x76, 0xec, 0xe8, 0x90, 0x36, 0x63, 0x2f, 0x63, 0x11, - 0xf6, 0x93, 0x42, 0x64, 0x1a, 0x14, 0x99, 0x24, 0xeb, 0x5e, 0x48, 0xcf, 0x97, 0xbe, 0x97, 0x06, - 0xa8, 0x10, 0x9a, 0x21, 0xdc, 0x1c, 0xaf, 0xde, 0x70, 0x5f, 0x4b, 0x5f, 0x8c, 0x72, 0x47, 0x34, - 0xe9, 0x88, 0xdd, 0xf8, 0x88, 0x67, 0x57, 0xd2, 0x15, 0xfe, 0x44, 0xc4, 0x5f, 0xdd, 0x4f, 0x55, - 0xd2, 0x43, 0x95, 0x7d, 0x1f, 0x76, 0x8a, 0x55, 0xc1, 0x76, 0xa0, 0xae, 0x97, 0xb1, 0x4f, 0x75, - 0xbd, 0xb4, 0xed, 0xf4, 0x27, 0x4d, 0x2b, 0xe0, 0x9a, 0xcc, 0x43, 0xd8, 0x2d, 0x25, 0x7b, 0x2e, - 0xc0, 0xb5, 0x7c, 0x80, 0xed, 0x5d, 0xd8, 0x2e, 0xe4, 0xb8, 0xfd, 0x55, 0x0b, 0xba, 0x8e, 0x50, - 0x61, 0xe0, 0x2b, 0xc1, 0x9e, 0x80, 0x25, 0x96, 0x13, 0x61, 0x80, 0xa9, 0x56, 0x2a, 0x7b, 0x23, - 0xf3, 0x2c, 0xe1, 0x63, 0x1d, 0xa6, 0xc2, 0xec, 0x61, 0x01, 0x54, 0xf7, 0xcb, 0x4a, 0x79, 0x54, - 0x3d, 0x2c, 0xa2, 0xea, 0xcd, 0x92, 0x6c, 0x09, 0x56, 0x1f, 0x16, 0x60, 0xb5, 0x7c, 0x70, 0x01, - 0x57, 0x9f, 0x56, 0xe0, 0x6a, 0xd9, 0xfc, 0x35, 0xc0, 0xfa, 0xb4, 0x02, 0x58, 0x7b, 0xd7, 0xbe, - 0x55, 0x89, 0xac, 0x87, 0x45, 0x64, 0x2d, 0xbb, 0x53, 0x82, 0xd6, 0x9f, 0x56, 0x41, 0xeb, 0xdd, - 0x92, 0xce, 0x5a, 0x6c, 0xfd, 0xf0, 0x1a, 0xb6, 0xde, 0x2e, 0xa9, 0x56, 0x80, 0xeb, 0xd3, 0x02, - 0xb8, 0x42, 0xa5, 0x6f, 0x6b, 0xd0, 0xf5, 0xf1, 0x75, 0x74, 0xbd, 0x53, 0xfe, 0x69, 0xab, 0xe0, - 0x75, 0x50, 0x82, 0xd7, 0x5b, 0x65, 0x2b, 0xd7, 0xe2, 0xeb, 0x43, 0xac, 0xf4, 0x52, 0xa6, 0x21, - 0x2a, 0x88, 0x28, 0x0a, 0xa2, 0x18, 0x00, 0x0d, 0x61, 0x1f, 0x20, 0xf6, 0x64, 0xf9, 0xf5, 0x35, - 0x58, 0x4c, 0x49, 0x9f, 0xcb, 0x2e, 0xfb, 0x8f, 0xb5, 0x4c, 0x97, 0xe0, 0x38, 0x8f, 0x5b, 0x56, - 0x8c, 0x5b, 0x39, 0x88, 0xae, 0x17, 0x20, 0x9a, 0xfd, 0x00, 0x6e, 0xcc, 0xb8, 0xd2, 0x26, 0x2e, - 0xa3, 0x02, 0x90, 0xed, 0x22, 0xc3, 0x04, 0xc4, 0x20, 0xda, 0x07, 0xb0, 0x9f, 0x93, 0xe5, 0x61, - 0x38, 0x22, 0xd0, 0x6a, 0x52, 0xf1, 0xee, 0xa5, 0xd2, 0x27, 0x61, 0x38, 0xe4, 0x6a, 0x6a, 0xff, - 0x32, 0xf3, 0x3f, 0x83, 0x7f, 0x06, 0xcd, 0x49, 0xe0, 0x1a, 0xb7, 0xb6, 0x1d, 0x5a, 0x63, 0x4b, - 0x98, 0x05, 0x1e, 0x7d, 0xd5, 0x72, 0x70, 0x89, 0x52, 0x69, 0xa5, 0x58, 0xa6, 0x24, 0xec, 0xe7, - 0xd9, 0x71, 0xff, 0x77, 0x47, 0xb0, 0xff, 0x52, 0xcb, 0xe2, 0x98, 0xc2, 0xfd, 0xbb, 0x19, 0x86, - 0x3f, 0xa9, 0xf4, 0x5d, 0xb1, 0xa4, 0x32, 0x6d, 0x38, 0x86, 0x48, 0xfa, 0x5c, 0x9b, 0x82, 0x53, - 0xec, 0x73, 0x1d, 0xda, 0x33, 0x44, 0xdc, 0x26, 0x82, 0x4b, 0xaa, 0x9f, 0x2d, 0xc7, 0x10, 0x39, - 0xcc, 0xb3, 0x0a, 0x98, 0x77, 0x01, 0xec, 0x7a, 0x65, 0xb1, 0x8f, 0xa0, 0xa9, 0xb9, 0x97, 0xf8, - 0xbf, 0x73, 0x64, 0xa6, 0xc6, 0xa3, 0xe7, 0xaf, 0x2e, 0xb8, 0x8c, 0x4e, 0x6f, 0xa3, 0xf7, 0xff, - 0x7a, 0x7b, 0x6f, 0x07, 0x65, 0x0e, 0x83, 0xb9, 0xd4, 0x62, 0x1e, 0xea, 0x95, 0x43, 0x3a, 0xf6, - 0xbf, 0x6b, 0x88, 0xb8, 0x85, 0x8a, 0xab, 0x8c, 0x45, 0x92, 0x56, 0xf5, 0x5c, 0x3b, 0xfc, 0x66, - 0xf1, 0xf9, 0x0e, 0x80, 0xc7, 0xd5, 0xe8, 0x4b, 0xee, 0x6b, 0xe1, 0xc6, 0x41, 0xb2, 0x3c, 0xae, - 0x7e, 0x4b, 0x1b, 0xec, 0x2e, 0x74, 0x91, 0xbd, 0x50, 0xc2, 0xa5, 0x68, 0x35, 0x9c, 0x8e, 0xc7, - 0xd5, 0xe7, 0x4a, 0xb8, 0xa9, 0x5f, 0x9d, 0xff, 0xdd, 0x2f, 0x76, 0x00, 0x8d, 0x4b, 0x21, 0x62, - 0x54, 0xda, 0x4b, 0x55, 0xcf, 0x1f, 0xff, 0x98, 0x94, 0x4d, 0x4a, 0xa0, 0x88, 0xfd, 0xfb, 0x7a, - 0x96, 0x59, 0x59, 0x63, 0xfa, 0x76, 0xc5, 0xe0, 0x9f, 0x35, 0xec, 0xcd, 0x45, 0x18, 0x64, 0x67, - 0x70, 0x23, 0x2d, 0x99, 0xd1, 0x22, 0x74, 0x39, 0x8e, 0x4e, 0x5f, 0x5f, 0x63, 0x7b, 0xa9, 0xc2, - 0xe7, 0x46, 0x9e, 0xfd, 0x0a, 0xee, 0x4c, 0xf0, 0x54, 0x5f, 0x2d, 0xd4, 0x28, 0xe4, 0x11, 0x9f, - 0xa7, 0x47, 0xd5, 0x0b, 0xb0, 0x7f, 0x96, 0x48, 0x5d, 0xa0, 0x90, 0x72, 0x6e, 0x4d, 0x0a, 0x1b, - 0xc9, 0x79, 0x49, 0x3c, 0x1a, 0xef, 0x90, 0xeb, 0xdf, 0xc3, 0x11, 0x25, 0x0f, 0xdb, 0x55, 0xbf, - 0xa8, 0xfd, 0xa7, 0x1a, 0xec, 0x96, 0x8c, 0x61, 0x03, 0x00, 0x83, 0x7a, 0x4a, 0xbe, 0x11, 0xf1, - 0x38, 0x91, 0xc4, 0x80, 0x82, 0xf5, 0x42, 0xbe, 0x11, 0x8e, 0x35, 0x4e, 0x96, 0xec, 0x01, 0x74, - 0xf4, 0xd2, 0x48, 0x17, 0xc7, 0xb7, 0x97, 0x4b, 0x12, 0x6d, 0x6b, 0xfa, 0xcf, 0x1e, 0xc1, 0x96, - 0x39, 0xd8, 0x0b, 0x94, 0x92, 0x61, 0x3c, 0x48, 0xb0, 0xfc, 0xd1, 0x9f, 0x11, 0xc7, 0xd9, 0x1c, - 0x67, 0x84, 0xfd, 0x3b, 0xb0, 0xd2, 0xcf, 0xb2, 0xf7, 0xc0, 0x9a, 0xf3, 0x65, 0x3c, 0xda, 0xa2, - 0x6d, 0x2d, 0xa7, 0x3b, 0xe7, 0x4b, 0x1a, 0x6b, 0xd9, 0x1d, 0xe8, 0x20, 0x53, 0x2f, 0x4d, 0xbc, - 0x5b, 0x4e, 0x7b, 0xce, 0x97, 0x2f, 0x97, 0x29, 0xc3, 0xe3, 0x2a, 0x19, 0x5c, 0xe7, 0x7c, 0xf9, - 0x19, 0x57, 0xf6, 0x27, 0xd0, 0x36, 0x46, 0x7e, 0xa3, 0x83, 0x51, 0xbf, 0x5e, 0xd0, 0xff, 0x19, - 0x6c, 0xe6, 0xec, 0x66, 0x3f, 0x82, 0x5b, 0xc6, 0xc3, 0x90, 0x47, 0x9a, 0x22, 0x52, 0x38, 0x90, - 0x11, 0xf3, 0x82, 0x47, 0x1a, 0x3f, 0x69, 0x46, 0xf1, 0x3f, 0xd4, 0xa1, 0x6d, 0xc6, 0x5c, 0xf6, - 0x00, 0xc7, 0x04, 0x2e, 0xfd, 0x91, 0x74, 0x4d, 0x47, 0x3b, 0xdd, 0xfc, 0xc7, 0xdb, 0x7b, 0x1d, - 0x42, 0xff, 0xf3, 0x4f, 0x71, 0x32, 0xc0, 0x85, 0x9b, 0x03, 0xcc, 0x7a, 0x61, 0x0a, 0x67, 0xd0, - 0xd4, 0x72, 0x2e, 0x62, 0x17, 0x69, 0x8d, 0x96, 0xfb, 0x8b, 0x39, 0x85, 0xa4, 0x69, 0x42, 0xe2, - 0x2f, 0xe6, 0x18, 0x92, 0xf7, 0xc0, 0xd2, 0x81, 0xe6, 0x33, 0x62, 0x99, 0x22, 0xed, 0xd2, 0x06, - 0x32, 0x1f, 0xc0, 0x6e, 0xbe, 0x53, 0x62, 0xe7, 0x33, 0xe0, 0xbe, 0x9d, 0xf5, 0x49, 0x9c, 0xdb, - 0xef, 0x42, 0x37, 0x6d, 0x8d, 0x06, 0xe9, 0x3b, 0xdc, 0x74, 0x44, 0x76, 0x08, 0xdd, 0x30, 0x0a, - 0xc2, 0x40, 0x89, 0x28, 0x2d, 0xca, 0x52, 0x1d, 0x39, 0xa9, 0x84, 0x2d, 0xc1, 0x4a, 0xb7, 0xb1, - 0x83, 0x73, 0xd7, 0x8d, 0x84, 0x52, 0xf1, 0xb0, 0x9c, 0x90, 0xec, 0x10, 0x3a, 0xe1, 0x62, 0x3c, - 0xc2, 0x66, 0x53, 0xcc, 0xb4, 0x8b, 0xc5, 0xf8, 0xb9, 0x58, 0x25, 0x17, 0x85, 0x90, 0x28, 0x6a, - 0x37, 0xc1, 0x97, 0x22, 0x8a, 0x03, 0x62, 0x08, 0xdb, 0x87, 0xbd, 0xf2, 0x2d, 0x81, 0x1d, 0x81, - 0x95, 0x16, 0x73, 0x29, 0xe3, 0x33, 0x6b, 0x33, 0x11, 0x9c, 0x24, 0x94, 0xf4, 0x7c, 0xe1, 0x8e, - 0xb2, 0x30, 0x91, 0x45, 0x5d, 0x67, 0xd7, 0x30, 0x7e, 0x91, 0xc4, 0xc9, 0xfe, 0x21, 0xb4, 0x8d, - 0x75, 0xf4, 0xfb, 0xac, 0xc2, 0x64, 0xcc, 0xa1, 0x75, 0x65, 0x51, 0xfe, 0xb9, 0x06, 0xdd, 0xe4, - 0x16, 0x52, 0xa9, 0x54, 0x30, 0xb7, 0xfe, 0xdf, 0xcd, 0x5d, 0x77, 0x6d, 0x4b, 0x12, 0xa6, 0x99, - 0x4b, 0x98, 0x43, 0x60, 0x26, 0x2f, 0xae, 0x02, 0x2d, 0x7d, 0x6f, 0x64, 0x22, 0x68, 0x12, 0x64, - 0x8f, 0x38, 0xaf, 0x88, 0x71, 0x81, 0xfb, 0xc7, 0x5f, 0xb5, 0x60, 0xf7, 0xe4, 0xf4, 0xec, 0xfc, - 0x24, 0x0c, 0x67, 0x72, 0xc2, 0x69, 0xec, 0x19, 0x40, 0x93, 0x06, 0xbb, 0x8a, 0x27, 0x9a, 0x7e, - 0xd5, 0x0d, 0x83, 0x1d, 0x43, 0x8b, 0xe6, 0x3b, 0x56, 0xf5, 0x52, 0xd3, 0xaf, 0xbc, 0x68, 0xe0, - 0x47, 0xcc, 0x04, 0x78, 0xfd, 0xc1, 0xa6, 0x5f, 0x75, 0xdb, 0x60, 0x9f, 0x80, 0x95, 0x4d, 0x66, - 0xeb, 0x9e, 0x6d, 0xfa, 0x6b, 0xef, 0x1d, 0xa8, 0x9f, 0x35, 0xcc, 0x75, 0x8f, 0x1c, 0xfd, 0xb5, - 0x03, 0x3a, 0x7b, 0x02, 0x9d, 0x64, 0xe4, 0xa8, 0x7e, 0x58, 0xe9, 0xaf, 0xb9, 0x13, 0x60, 0x78, - 0xcc, 0xd8, 0x56, 0xf5, 0xfa, 0xd3, 0xaf, 0xbc, 0xb8, 0xb0, 0x47, 0xd0, 0x8e, 0x51, 0xbf, 0xf2, - 0x89, 0xa4, 0x5f, 0x3d, 0xd9, 0xa3, 0x93, 0xd9, 0xbc, 0xb9, 0xee, 0x85, 0xaa, 0xbf, 0xf6, 0x86, - 0xc5, 0x4e, 0x00, 0x72, 0xa3, 0xda, 0xda, 0xa7, 0xa7, 0xfe, 0xfa, 0x9b, 0x13, 0xfb, 0x18, 0xba, - 0xd9, 0x6d, 0xb8, 0xfa, 0x49, 0xa8, 0xbf, 0xee, 0x32, 0x33, 0x6e, 0xd3, 0xb3, 0xe1, 0x87, 0xff, - 0x09, 0x00, 0x00, 0xff, 0xff, 0x39, 0xa6, 0xae, 0x4d, 0xb2, 0x14, 0x00, 0x00, +var fileDescriptor0 = []byte{ + // 1716 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0x4b, 0x73, 0x1b, 0xc7, + 0x11, 0x26, 0xde, 0xd8, 0xe6, 0x03, 0xe0, 0x90, 0x14, 0x21, 0xa8, 0x52, 0xc5, 0xda, 0x24, 0x0a, + 0x99, 0x30, 0x84, 0x42, 0x45, 0x0a, 0x15, 0x25, 0xaa, 0x90, 0x0c, 0x23, 0xb0, 0x94, 0x07, 0xb3, + 0x7a, 0xb8, 0xca, 0x17, 0xd4, 0x60, 0x77, 0xb8, 0xd8, 0x12, 0xb0, 0xbb, 0xda, 0x19, 0x50, 0xa0, + 0x7e, 0x83, 0xee, 0x3e, 0xfb, 0xe6, 0x3f, 0xe0, 0x9f, 0x60, 0x5f, 0xfc, 0x2b, 0x5c, 0xfe, 0x0f, + 0x3e, 0xbb, 0xa6, 0x67, 0xdf, 0xdc, 0x95, 0x55, 0xf6, 0xcd, 0x17, 0x60, 0x66, 0xfa, 0xb1, 0xdd, + 0xbd, 0xdd, 0x5f, 0xf7, 0x0e, 0xac, 0x8b, 0x6b, 0x9f, 0xf1, 0x01, 0xfe, 0x1e, 0xf8, 0x81, 0x27, + 0x3c, 0xd2, 0xc0, 0x4d, 0x7f, 0x60, 0x3b, 0x62, 0x32, 0x1f, 0x1f, 0x98, 0xde, 0x6c, 0x20, 0x98, + 0x6b, 0xb1, 0x60, 0xe6, 0xb8, 0x62, 0x20, 0x66, 0x53, 0x67, 0xcc, 0x07, 0xa6, 0x37, 0x9b, 0x79, + 0x6e, 0x5a, 0x4e, 0xff, 0xba, 0x0e, 0x2d, 0x83, 0xbd, 0x99, 0x33, 0x2e, 0xc8, 0x2e, 0xd4, 0x99, + 0x39, 0xf1, 0x7a, 0xd5, 0x9d, 0xca, 0xee, 0xf2, 0x21, 0x39, 0x50, 0x7c, 0x21, 0xf5, 0xcc, 0x9c, + 0x78, 0xc3, 0x25, 0x03, 0x39, 0xc8, 0x1f, 0xa0, 0x71, 0x39, 0x9d, 0xf3, 0x49, 0xaf, 0x86, 0xac, + 0x1b, 0x59, 0xd6, 0x7f, 0x49, 0xd2, 0x70, 0xc9, 0x50, 0x3c, 0x52, 0xad, 0xe3, 0x5e, 0x7a, 0xbd, + 0x7a, 0x91, 0xda, 0x73, 0xf7, 0x12, 0xd5, 0x4a, 0x0e, 0x72, 0x04, 0xc0, 0x99, 0x18, 0x79, 0xbe, + 0x70, 0x3c, 0xb7, 0xd7, 0x40, 0xfe, 0xed, 0x2c, 0xff, 0x73, 0x26, 0xfe, 0x87, 0xe4, 0xe1, 0x92, + 0xa1, 0xf1, 0x68, 0x23, 0x25, 0x1d, 0xd7, 0x11, 0x23, 0x73, 0x42, 0x1d, 0xb7, 0xd7, 0x2c, 0x92, + 0x3c, 0x77, 0x1d, 0x71, 0x2a, 0xc9, 0x52, 0xd2, 0x89, 0x36, 0xd2, 0x95, 0x37, 0x73, 0x16, 0x5c, + 0xf7, 0x5a, 0x45, 0xae, 0xfc, 0x5f, 0x92, 0xa4, 0x2b, 0xc8, 0x43, 0x1e, 0xc3, 0xf2, 0x98, 0xd9, + 0x8e, 0x3b, 0x1a, 0x4f, 0x3d, 0xf3, 0x75, 0xaf, 0x8d, 0x22, 0xbd, 0xac, 0xc8, 0x89, 0x64, 0x38, + 0x91, 0xf4, 0xe1, 0x92, 0x01, 0xe3, 0x78, 0x47, 0x0e, 0xa1, 0x6d, 0x4e, 0x98, 0xf9, 0x7a, 0x24, + 0x16, 0x3d, 0x0d, 0x25, 0xb7, 0xb2, 0x92, 0xa7, 0x92, 0xfa, 0x62, 0x31, 0x5c, 0x32, 0x5a, 0xa6, + 0x5a, 0x4a, 0xbf, 0x2c, 0x36, 0x75, 0xae, 0x58, 0x20, 0xa5, 0x36, 0x8a, 0xfc, 0xfa, 0xa7, 0xa2, + 0xa3, 0x9c, 0x66, 0x45, 0x1b, 0xf2, 0x00, 0x34, 0xe6, 0x5a, 0xa1, 0xa1, 0xcb, 0x28, 0x78, 0x2b, + 0xf7, 0x46, 0x5d, 0x2b, 0x32, 0xb3, 0xcd, 0xc2, 0x35, 0x39, 0x80, 0xa6, 0xcc, 0x12, 0x47, 0xf4, + 0x56, 0x50, 0x66, 0x33, 0x67, 0x22, 0xd2, 0x86, 0x4b, 0x46, 0xc8, 0x75, 0xd2, 0x82, 0xc6, 0x15, + 0x9d, 0xce, 0x99, 0xfe, 0x3b, 0x58, 0x4e, 0x65, 0x0a, 0xe9, 0x41, 0x6b, 0xc6, 0x38, 0xa7, 0x36, + 0xeb, 0x55, 0x76, 0x2a, 0xbb, 0x9a, 0x11, 0x6d, 0xf5, 0x35, 0x58, 0x49, 0xe7, 0x49, 0x4a, 0x50, + 0xe6, 0x82, 0x14, 0xbc, 0x62, 0x01, 0x97, 0x09, 0x10, 0x0a, 0x86, 0x5b, 0xfd, 0xaf, 0xd0, 0xcd, + 0x27, 0x01, 0xe9, 0x42, 0xed, 0x35, 0xbb, 0x0e, 0x39, 0xe5, 0x92, 0x6c, 0x86, 0x06, 0x61, 0x16, + 0x6b, 0x46, 0x68, 0x9d, 0x13, 0xcb, 0xc6, 0x69, 0x40, 0xee, 0x01, 0x5c, 0xd1, 0xa9, 0x63, 0x51, + 0xe1, 0x05, 0xbc, 0x57, 0xd9, 0xa9, 0xed, 0x2e, 0x1f, 0x76, 0x43, 0x77, 0x5f, 0x45, 0x04, 0x23, + 0xc5, 0x43, 0x7e, 0x0d, 0xab, 0x36, 0x73, 0x19, 0x77, 0xf8, 0x68, 0x7c, 0x2d, 0x18, 0xc7, 0x67, + 0xac, 0x18, 0x2b, 0xe1, 0xe1, 0x89, 0x3c, 0xd3, 0xad, 0xd8, 0x3f, 0x4c, 0x1e, 0x42, 0xa0, 0x6e, + 0x51, 0x41, 0xd1, 0xc6, 0x15, 0x03, 0xd7, 0xf2, 0xcc, 0xa7, 0x62, 0x12, 0xda, 0x88, 0x6b, 0x72, + 0x0b, 0x9a, 0x13, 0xe6, 0xd8, 0x13, 0x81, 0x45, 0x55, 0x33, 0xc2, 0x9d, 0x74, 0xc8, 0x0f, 0xbc, + 0x2b, 0x86, 0xf5, 0xd3, 0x36, 0xd4, 0x46, 0xff, 0xa6, 0x02, 0xeb, 0x37, 0x12, 0x4e, 0xea, 0x9d, + 0x50, 0x3e, 0x89, 0x9e, 0x25, 0xd7, 0xe4, 0xb7, 0x52, 0x2f, 0xb5, 0x58, 0x10, 0xd6, 0xf5, 0x6a, + 0xe8, 0xe2, 0x10, 0x0f, 0x8d, 0x90, 0x48, 0xfe, 0x92, 0x89, 0x46, 0x0d, 0xa3, 0x11, 0x65, 0xda, + 0x73, 0xc7, 0x76, 0x1d, 0xd7, 0x2e, 0x0e, 0xca, 0x09, 0x6c, 0x8e, 0xaf, 0xdf, 0x51, 0x57, 0x38, + 0x2e, 0x1b, 0xa5, 0x54, 0xd4, 0x51, 0x45, 0x27, 0x54, 0x71, 0x76, 0xe5, 0x58, 0xcc, 0x35, 0x99, + 0xb1, 0x11, 0x33, 0xc7, 0xea, 0xb8, 0xbe, 0x03, 0x6b, 0xd9, 0x1a, 0x20, 0x6b, 0x50, 0x15, 0x8b, + 0xd0, 0x8f, 0xaa, 0x58, 0xe8, 0x7a, 0xfc, 0x02, 0xe3, 0x7c, 0xbf, 0xc1, 0xb3, 0x07, 0x9d, 0x5c, + 0x6a, 0xa7, 0x82, 0x5a, 0x49, 0x07, 0x55, 0xef, 0xc0, 0x6a, 0x26, 0xa3, 0xf5, 0xf7, 0x0d, 0x68, + 0x1b, 0x8c, 0xfb, 0x9e, 0xcb, 0x19, 0x39, 0x02, 0x8d, 0x2d, 0x4c, 0xa6, 0x60, 0xa8, 0x92, 0x2b, + 0x72, 0xc5, 0x73, 0x16, 0xd1, 0x65, 0xd5, 0xc5, 0xcc, 0x64, 0x2f, 0x03, 0xa1, 0x1b, 0x79, 0xa1, + 0x34, 0x86, 0xee, 0x67, 0x31, 0x74, 0x33, 0xc7, 0x9b, 0x03, 0xd1, 0xbd, 0x0c, 0x88, 0xe6, 0x15, + 0x67, 0x50, 0xf4, 0x51, 0x01, 0x8a, 0xe6, 0xcd, 0x2f, 0x81, 0xd1, 0x47, 0x05, 0x30, 0xda, 0xbb, + 0xf1, 0xac, 0x42, 0x1c, 0xdd, 0xcf, 0xe2, 0x68, 0xde, 0x9d, 0x1c, 0x90, 0xfe, 0xad, 0x08, 0x48, + 0x6f, 0xe7, 0x64, 0x4a, 0x91, 0xf4, 0xfe, 0x0d, 0x24, 0xbd, 0x95, 0x13, 0x2d, 0x80, 0xd2, 0x47, + 0x19, 0x28, 0x85, 0x42, 0xdf, 0x4a, 0xb0, 0xf4, 0xe1, 0x4d, 0x2c, 0xdd, 0xce, 0xbf, 0xda, 0x22, + 0x30, 0x1d, 0xe4, 0xc0, 0x74, 0x2b, 0x6f, 0x65, 0x29, 0x9a, 0xee, 0xc9, 0xea, 0xce, 0x65, 0x9a, + 0x44, 0x02, 0x16, 0x04, 0x5e, 0x10, 0xc2, 0x9d, 0xda, 0xe8, 0xbb, 0x12, 0x6f, 0x92, 0xfc, 0xfa, + 0x00, 0xf2, 0x62, 0xd2, 0xa7, 0xb2, 0x4b, 0xff, 0xac, 0x92, 0xc8, 0x22, 0xf8, 0xa6, 0xb1, 0x4a, + 0x0b, 0xb1, 0x2a, 0x05, 0xc8, 0xd5, 0x0c, 0x20, 0x93, 0xdf, 0xc3, 0xfa, 0x94, 0x72, 0xa1, 0xe2, + 0x32, 0xca, 0x80, 0x57, 0x47, 0x12, 0x54, 0x40, 0x14, 0x8a, 0xfd, 0x11, 0x36, 0x52, 0xbc, 0xd4, + 0xf7, 0x47, 0x08, 0x54, 0x75, 0x2c, 0xde, 0x6e, 0xcc, 0x7d, 0xec, 0xfb, 0x43, 0xca, 0x27, 0xfa, + 0x7f, 0x12, 0xff, 0x13, 0xb0, 0x27, 0x50, 0x37, 0x3d, 0x4b, 0xb9, 0xb5, 0x6a, 0xe0, 0x5a, 0x36, + 0x80, 0xa9, 0x67, 0xe3, 0x53, 0x35, 0x43, 0x2e, 0x25, 0x57, 0x5c, 0x29, 0x9a, 0x2a, 0x09, 0xfd, + 0x2c, 0x51, 0xf7, 0x33, 0xf0, 0x5f, 0xff, 0xb2, 0x92, 0x44, 0x30, 0x06, 0xf7, 0x9f, 0x66, 0x92, + 0x7c, 0x99, 0x8e, 0x6b, 0xb1, 0x05, 0x16, 0x68, 0xcd, 0x50, 0x9b, 0xa8, 0x9f, 0x35, 0x31, 0x2c, + 0xd9, 0x7e, 0xd6, 0xc2, 0x33, 0xb5, 0x09, 0x9b, 0x82, 0x77, 0x89, 0x95, 0xb3, 0x62, 0xa8, 0x4d, + 0x0a, 0xed, 0xb4, 0x0c, 0xda, 0x1d, 0x01, 0xb9, 0x59, 0x53, 0x44, 0x87, 0xba, 0xa0, 0x76, 0xe4, + 0xf9, 0xda, 0x81, 0x9a, 0x0e, 0x0f, 0x9e, 0xbd, 0xba, 0xa0, 0x4e, 0x60, 0x20, 0x4d, 0xff, 0xb6, + 0x22, 0x31, 0x35, 0x53, 0x53, 0x85, 0x3e, 0x47, 0x89, 0x53, 0x4d, 0x35, 0xb9, 0x8f, 0x8b, 0xc3, + 0xaf, 0x00, 0x6c, 0xca, 0x47, 0x6f, 0xa9, 0x2b, 0x98, 0x15, 0x06, 0x43, 0xb3, 0x29, 0xff, 0x04, + 0x0f, 0xc8, 0x6d, 0x68, 0x4b, 0xf2, 0x9c, 0x33, 0x0b, 0xa3, 0x52, 0x33, 0x5a, 0x36, 0xe5, 0x2f, + 0x39, 0xb3, 0x62, 0xfb, 0x5b, 0xe5, 0xf6, 0x13, 0x1d, 0x6a, 0x97, 0x8c, 0x85, 0xf8, 0xd2, 0x8d, + 0x59, 0xce, 0x1f, 0xfe, 0x19, 0x99, 0x24, 0x51, 0xff, 0xae, 0x92, 0x64, 0x47, 0xd2, 0x5c, 0x7e, + 0x69, 0x5e, 0x7e, 0x55, 0x91, 0x1d, 0x34, 0x0b, 0x56, 0xe4, 0xef, 0xb0, 0x1e, 0xa7, 0xf7, 0x68, + 0xee, 0x5b, 0x54, 0x0e, 0x35, 0x65, 0x95, 0xd0, 0x8d, 0x59, 0x5f, 0x2a, 0x4e, 0xf2, 0x5f, 0xd8, + 0x36, 0xa5, 0x3e, 0x97, 0xcf, 0xf9, 0xc8, 0xa7, 0x01, 0x9d, 0xc5, 0x4a, 0xaa, 0x19, 0x58, 0x3e, + 0x8d, 0xb8, 0x2e, 0x24, 0x13, 0x37, 0xb6, 0xcc, 0xcc, 0x41, 0xa4, 0x2f, 0xf2, 0xb5, 0xf6, 0x81, + 0x8c, 0xfc, 0x8d, 0x1c, 0x15, 0xd2, 0xf0, 0x59, 0xf4, 0x56, 0xf4, 0xcf, 0x2b, 0xd0, 0xc9, 0x3d, + 0x94, 0x0c, 0x00, 0x14, 0xfa, 0x70, 0xe7, 0x1d, 0x0b, 0xdb, 0x7a, 0xe4, 0x25, 0x86, 0xe3, 0xb9, + 0xf3, 0x8e, 0x19, 0xda, 0x38, 0x5a, 0x92, 0xbb, 0xd0, 0x12, 0x0b, 0xc5, 0x9d, 0x1d, 0x9d, 0x5e, + 0x2c, 0x90, 0xb5, 0x29, 0xf0, 0x9f, 0x3c, 0x80, 0x15, 0xa5, 0xd8, 0xf6, 0x38, 0x77, 0xfc, 0xb0, + 0xa1, 0x93, 0xb4, 0xea, 0xa7, 0x48, 0x31, 0x96, 0xc7, 0xc9, 0x46, 0xff, 0x14, 0xb4, 0xf8, 0xb1, + 0xe4, 0x0e, 0x68, 0x33, 0xba, 0x08, 0xc7, 0x4a, 0x69, 0x5b, 0xc3, 0x68, 0xcf, 0xe8, 0x02, 0x47, + 0x4a, 0xb2, 0x0d, 0x2d, 0x49, 0x14, 0x0b, 0x15, 0xd7, 0x86, 0xd1, 0x9c, 0xd1, 0xc5, 0x8b, 0x45, + 0x4c, 0xb0, 0x29, 0x8f, 0x86, 0xc6, 0x19, 0x5d, 0x3c, 0xa5, 0x5c, 0x7f, 0x02, 0x4d, 0x65, 0xe4, + 0x47, 0x29, 0x96, 0xf2, 0xd5, 0x8c, 0xfc, 0x3f, 0x60, 0x39, 0x65, 0x37, 0xf9, 0x13, 0x6c, 0x29, + 0x0f, 0x7d, 0x1a, 0x08, 0x8c, 0x48, 0x46, 0x21, 0x41, 0xe2, 0x05, 0x0d, 0x84, 0x7c, 0xa4, 0x1a, + 0x83, 0xbf, 0xaf, 0x40, 0x53, 0x8d, 0x98, 0x32, 0xbb, 0x71, 0xa0, 0x18, 0x39, 0x56, 0xd4, 0x92, + 0x70, 0x7f, 0x6e, 0xa5, 0x10, 0xab, 0x9a, 0x19, 0x7a, 0x09, 0xd4, 0x85, 0x33, 0x63, 0xa1, 0x57, + 0xb8, 0x96, 0xc6, 0xba, 0xf3, 0x19, 0x46, 0xa1, 0xae, 0xa2, 0xe0, 0xce, 0x67, 0x32, 0x0a, 0x77, + 0x40, 0x13, 0x9e, 0xa0, 0x53, 0x24, 0xa9, 0xda, 0x6a, 0xe3, 0x81, 0x24, 0xde, 0x85, 0x4e, 0xba, + 0x49, 0xc9, 0xa6, 0xa3, 0xd0, 0x75, 0x35, 0x69, 0x51, 0x72, 0x4c, 0xbe, 0x0d, 0xed, 0xb8, 0x2b, + 0x29, 0xa8, 0x6d, 0x51, 0xd5, 0x8c, 0xc8, 0x3e, 0xb4, 0xfd, 0xc0, 0xf3, 0x3d, 0xce, 0x82, 0xb8, + 0xc6, 0xf2, 0xc5, 0x11, 0x73, 0xe8, 0x26, 0x68, 0xf1, 0xb1, 0x6c, 0x9e, 0xd4, 0xb2, 0x02, 0xc6, + 0x79, 0x38, 0xa7, 0x46, 0x5b, 0x99, 0x5c, 0xfe, 0x7c, 0x3c, 0x92, 0x68, 0x9f, 0x4d, 0xae, 0x8b, + 0xf9, 0xf8, 0x19, 0xbb, 0x36, 0x9a, 0x3e, 0xfe, 0x23, 0xd2, 0x7b, 0x6f, 0x59, 0x10, 0x86, 0x42, + 0x6d, 0x74, 0x17, 0xba, 0xf9, 0xa1, 0x9c, 0x1c, 0x80, 0x16, 0x57, 0x68, 0x2e, 0xbd, 0x13, 0x3b, + 0x13, 0x16, 0xd9, 0xbe, 0xb9, 0x63, 0xbb, 0xcc, 0x1a, 0x25, 0x01, 0x42, 0x5b, 0xda, 0x46, 0x47, + 0x11, 0xfe, 0x1d, 0x45, 0x48, 0xbf, 0x07, 0x4d, 0x65, 0x17, 0xbe, 0x99, 0x6b, 0x3f, 0x9a, 0x2d, + 0x70, 0x5d, 0x58, 0x81, 0x5f, 0x54, 0xa0, 0x1d, 0x0d, 0xfd, 0x85, 0x42, 0x19, 0x73, 0xab, 0x3f, + 0x6e, 0x6e, 0xd9, 0xf7, 0x51, 0x94, 0x2a, 0xf5, 0x54, 0xaa, 0xec, 0x03, 0x51, 0x19, 0x71, 0xe5, + 0x09, 0xc7, 0xb5, 0x47, 0x2a, 0x82, 0x2a, 0x35, 0xba, 0x48, 0x79, 0x85, 0x84, 0x0b, 0x79, 0x7e, + 0xf8, 0xbe, 0x01, 0x9d, 0xe3, 0x93, 0xd3, 0xf3, 0x63, 0xdf, 0x9f, 0x3a, 0x26, 0xc5, 0x59, 0x63, + 0x00, 0x75, 0x9c, 0xa6, 0x0a, 0x6e, 0x41, 0xfa, 0x45, 0x63, 0x3d, 0x39, 0x84, 0x06, 0x0e, 0x55, + 0xa4, 0xe8, 0x32, 0xa4, 0x5f, 0x38, 0xdd, 0xcb, 0x87, 0xa8, 0xb1, 0xeb, 0xe6, 0x9d, 0x48, 0xbf, + 0x68, 0xc4, 0x27, 0x4f, 0x40, 0x4b, 0xc6, 0xa1, 0xb2, 0x9b, 0x91, 0x7e, 0xe9, 0xb0, 0x2f, 0xe5, + 0x93, 0x0e, 0x57, 0x76, 0x8f, 0xd0, 0x2f, 0x9d, 0x8a, 0xc9, 0x11, 0xb4, 0xa2, 0x29, 0xa0, 0xf8, + 0xee, 0xa2, 0x5f, 0x32, 0x88, 0xcb, 0xf0, 0xa8, 0x89, 0xa9, 0xe8, 0x82, 0xa5, 0x5f, 0xf8, 0xb5, + 0x40, 0x1e, 0x40, 0x33, 0x84, 0xf8, 0xc2, 0x5b, 0x88, 0x7e, 0xf1, 0x38, 0x2d, 0x9d, 0x4c, 0x86, + 0xbc, 0xb2, 0x4b, 0xa0, 0x7e, 0xe9, 0x67, 0x0d, 0x39, 0x06, 0x48, 0x4d, 0x49, 0xa5, 0xb7, 0x3b, + 0xfd, 0xf2, 0xcf, 0x15, 0xf2, 0x18, 0xda, 0xc9, 0x27, 0x68, 0xf1, 0xad, 0x4b, 0xbf, 0xec, 0x0b, + 0x62, 0xdc, 0xc4, 0x9b, 0xb9, 0xfb, 0x3f, 0x04, 0x00, 0x00, 0xff, 0xff, 0x4c, 0x76, 0x50, 0x7d, + 0xe6, 0x13, 0x00, 0x00, } diff --git a/types/types.proto b/types/types.proto index 2cea82d0..c97b7381 100644 --- a/types/types.proto +++ b/types/types.proto @@ -1,14 +1,9 @@ syntax = "proto3"; package types; -// For more information on gogo.proto, see: -// https://github.com/gogo/protobuf/blob/master/extensions.md -import "github.com/gogo/protobuf/gogoproto/gogo.proto"; import "github.com/tendermint/tmlibs/common/types.proto"; // This file is copied from http://github.com/tendermint/abci -// NOTE: When using custom types, mind the warnings. -// https://github.com/gogo/protobuf/blob/master/custom_types.md#warnings-and-issues //---------------------------------------- // Request types @@ -47,7 +42,7 @@ message RequestSetOption { } message RequestInitChain { - repeated Validator validators = 1 [(gogoproto.nullable)=false]; + repeated Validator validators = 1; bytes genesis_bytes = 2; } @@ -60,9 +55,9 @@ message RequestQuery { message RequestBeginBlock { bytes hash = 1; - Header header = 2 [(gogoproto.nullable)=false]; + Header header = 2; repeated SigningValidator validators = 3; - repeated Evidence byzantine_validators = 4 [(gogoproto.nullable)=false]; + repeated Evidence byzantine_validators = 4; } message RequestCheckTx { @@ -128,7 +123,7 @@ message ResponseSetOption { } message ResponseInitChain { - repeated Validator validators = 1 [(gogoproto.nullable)=false]; + repeated Validator validators = 1; } message ResponseQuery { @@ -144,7 +139,7 @@ message ResponseQuery { } message ResponseBeginBlock { - repeated common.KVPair tags = 1 [(gogoproto.nullable)=false, (gogoproto.jsontag)="tags,omitempty"]; + repeated common.KVPair tags = 1; } message ResponseCheckTx { @@ -154,8 +149,8 @@ message ResponseCheckTx { string info = 4; // nondeterministic int64 gas_wanted = 5; int64 gas_used = 6; - repeated common.KVPair tags = 7 [(gogoproto.nullable)=false, (gogoproto.jsontag)="tags,omitempty"]; - common.KI64Pair fee = 8 [(gogoproto.nullable)=false]; + repeated common.KVPair tags = 7; + common.KI64Pair fee = 8; } message ResponseDeliverTx { @@ -165,14 +160,14 @@ message ResponseDeliverTx { string info = 4; // nondeterministic int64 gas_wanted = 5; int64 gas_used = 6; - repeated common.KVPair tags = 7 [(gogoproto.nullable)=false, (gogoproto.jsontag)="tags,omitempty"]; - common.KI64Pair fee = 8 [(gogoproto.nullable)=false]; + repeated common.KVPair tags = 7; + common.KI64Pair fee = 8; } message ResponseEndBlock { - repeated Validator validator_updates = 1 [(gogoproto.nullable)=false]; + repeated Validator validator_updates = 1; ConsensusParams consensus_param_updates = 2; - repeated common.KVPair tags = 3 [(gogoproto.nullable)=false, (gogoproto.jsontag)="tags,omitempty"]; + repeated common.KVPair tags = 3; } message ResponseCommit { @@ -217,7 +212,7 @@ message BlockGossip { // just the minimum the app might need message Header { // basics - string chain_id = 1 [(gogoproto.customname)="ChainID"]; + string chain_id = 1; int64 height = 2; int64 time = 3; @@ -236,7 +231,7 @@ message Header { // Validator message Validator { bytes address = 1; - PubKey pub_key = 2 [(gogoproto.nullable)=false]; + PubKey pub_key = 2; int64 power = 3; } diff --git a/types/validator.go b/types/validator.go index e443a336..f73c978b 100644 --- a/types/validator.go +++ b/types/validator.go @@ -15,7 +15,7 @@ const ( func Ed25519Validator(pubkey []byte, power int64) Validator { return Validator{ // Address: - PubKey: PubKey{ + PubKey: &PubKey{ Type: PubKeyEd25519, Data: pubkey, }, From 6334b3a5018ec0b5e64816c117b837821bfa0a70 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Thu, 24 May 2018 00:17:46 -0400 Subject: [PATCH 28/40] fix makefile --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 38862583..101e79b2 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ GOTOOLS = \ github.com/mitchellh/gox \ github.com/golang/dep/cmd/dep \ gopkg.in/alecthomas/gometalinter.v2 \ - github.com/golang/protobuf/protoc-gen-go \ + github.com/golang/protobuf/protoc-gen-go GOTOOLS_CHECK = gox dep gometalinter.v2 protoc protoc-gen-go PACKAGES=$(shell go list ./... | grep -v '/vendor/') INCLUDE = -I=. -I=${GOPATH}/src From b73157141bc5371e13de816f9f740e3e04f6e806 Mon Sep 17 00:00:00 2001 From: Zach Ramsay Date: Fri, 25 May 2018 16:18:33 -0400 Subject: [PATCH 29/40] fix make test_cli, #244 --- .circleci/config.yml | 20 ++++++++++++++++++++ Makefile | 6 +++++- tests/test_cli/ex1.abci.out | 5 +++-- tests/test_cli/ex2.abci.out | 1 + 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 3ff0464e..ab773382 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -61,6 +61,23 @@ jobs: export PATH="$GOBIN:$PATH" bash tests/test_app/test.sh +# XXX: if this test fails, fix it and update the docs at: +# https://github.com/tendermint/tendermint/blob/develop/docs/abci-cli.rst + test_cli: + <<: *defaults + steps: + - attach_workspace: + at: /tmp/workspace + - restore_cache: + key: v1-pkg-cache + - restore_cache: + key: v1-tree-{{ .Environment.CIRCLE_SHA1 }} + - run: + name: Run cli tests + command: | + export PATH="$GOBIN:$PATH" + bash tests/test_cli/test.sh + test_cover: <<: *defaults parallelism: 4 @@ -114,6 +131,9 @@ workflows: - test_apps: requires: - setup_dependencies + - test_cli: + requires: + - setup_dependencies - upload_coverage: requires: - test_cover diff --git a/Makefile b/Makefile index d5aa5365..1823812e 100644 --- a/Makefile +++ b/Makefile @@ -91,7 +91,11 @@ test_apps: @ bash tests/test_app/test.sh test_cli: - # test the cli against the examples in the tutorial at tendermint.com + # test the cli against the examples in the tutorial at: + # http://tendermint.readthedocs.io/projects/tools/en/master/abci-cli.html + # + # XXX: if this test fails, fix it and update the docs at: + # https://github.com/tendermint/tendermint/blob/develop/docs/abci-cli.rst @ bash tests/test_cli/test.sh ######################################## diff --git a/tests/test_cli/ex1.abci.out b/tests/test_cli/ex1.abci.out index 6e344071..5d4c196d 100644 --- a/tests/test_cli/ex1.abci.out +++ b/tests/test_cli/ex1.abci.out @@ -10,6 +10,7 @@ > commit -> code: OK +-> data.hex: 0x0000000000000000 > deliver_tx "abc" -> code: OK @@ -21,7 +22,7 @@ > commit -> code: OK --> data.hex: 0x49DFD15CCDACDEAE9728CB01FBB5E8688CA58B91 +-> data.hex: 0x0200000000000000 > query "abc" -> code: OK @@ -35,7 +36,7 @@ > commit -> code: OK --> data.hex: 0x70102DB32280373FBF3F9F89DA2A20CE2CD62B0B +-> data.hex: 0x0400000000000000 > query "def" -> code: OK diff --git a/tests/test_cli/ex2.abci.out b/tests/test_cli/ex2.abci.out index 741dd7b7..5bceb85d 100644 --- a/tests/test_cli/ex2.abci.out +++ b/tests/test_cli/ex2.abci.out @@ -1,5 +1,6 @@ > set_option serial on -> code: OK +-> log: OK (SetOption doesn't return anything.) > check_tx 0x00 -> code: OK From 21951dd5b32a9864bcb74b9da3270d302e45c4f0 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Wed, 30 May 2018 08:42:07 -0400 Subject: [PATCH 30/40] update tmlibs dep --- Gopkg.lock | 8 ++++---- Gopkg.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Gopkg.lock b/Gopkg.lock index d7340d69..13fe0e5e 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -120,14 +120,14 @@ revision = "5d6fca44a948d2be89a9702de7717f0168403d3d" [[projects]] - branch = "bucky/no-gogo" + branch = "develop" name = "github.com/tendermint/tmlibs" packages = [ "common", "db", "log" ] - revision = "d24a30858e23ace7aeee306e2ce652aba8021631" + revision = "e0acf357bb8832faebdb79f07490d0f530afc7b1" [[projects]] branch = "master" @@ -141,7 +141,7 @@ "internal/timeseries", "trace" ] - revision = "9ef9f5bb98a1fdc41f8cf6c250a4404b4085e389" + revision = "89e543239a64caf31d3a6865872ea120b41446df" [[projects]] name = "golang.org/x/text" @@ -196,6 +196,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "e0b98059927fe32f1398b66d5d3464fac7d0b4c011855863a04f21b5bd8b7032" + inputs-digest = "5a730a9d84b37f95b1b10260a91bcd26a143a50b3301ec6dfb7483e89c44eabd" solver-name = "gps-cdcl" solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml index ca7cd517..235b071d 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -45,7 +45,7 @@ [[constraint]] name = "github.com/tendermint/tmlibs" - branch = "bucky/no-gogo" + branch = "develop" # version = "0.8.1" [[constraint]] From 90c3a469ff22b3b2f5b29a72e1023b8d002e1f53 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Thu, 31 May 2018 21:45:14 -0400 Subject: [PATCH 31/40] Revert "Merge pull request #247 from tendermint/bucky/no-gogo" This reverts commit ef79007433878cec815a2a704ec5fcfa2686412f, reversing changes made to bcfdd6dbaf10c947392e2b0a097b65b5fb247baf. --- Gopkg.lock | 40 +- Gopkg.toml | 11 +- Makefile | 9 +- client/local_client.go | 48 +-- example/counter/counter.go | 42 +-- example/kvstore/helpers.go | 2 +- example/kvstore/kvstore.go | 18 +- example/kvstore/kvstore_test.go | 18 +- example/kvstore/persistent_kvstore.go | 42 +-- server/socket_server.go | 30 +- tests/server/client.go | 5 +- types/application.go | 95 +++-- types/codetype.go | 67 ---- types/json.go | 87 ----- types/messages.go | 16 +- types/messages_test.go | 8 +- types/params.go | 111 ------ types/protoreplace/protoreplace.go | 55 +++ types/pubkey.go | 16 + types/result.go | 213 ++++------- types/types.pb.go | 519 +++++++++++++------------- types/types.proto | 31 +- types/{validator.go => util.go} | 15 - 23 files changed, 622 insertions(+), 876 deletions(-) delete mode 100644 types/codetype.go delete mode 100644 types/json.go delete mode 100644 types/params.go create mode 100644 types/protoreplace/protoreplace.go create mode 100644 types/pubkey.go rename types/{validator.go => util.go} (85%) diff --git a/Gopkg.lock b/Gopkg.lock index 13fe0e5e..6bc40c0b 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -29,15 +29,26 @@ revision = "259ab82a6cad3992b4e21ff5cac294ccb06474bc" version = "v1.7.0" +[[projects]] + name = "github.com/gogo/protobuf" + packages = [ + "gogoproto", + "jsonpb", + "proto", + "protoc-gen-gogo/descriptor", + "sortkeys", + "types" + ] + revision = "1adfc126b41513cc696b209667c8656ea7aac67c" + version = "v1.0.0" + [[projects]] name = "github.com/golang/protobuf" packages = [ - "jsonpb", "proto", "ptypes", "ptypes/any", "ptypes/duration", - "ptypes/struct", "ptypes/timestamp" ] revision = "925541529c1fa6821df4e44ce2723319eb2be768" @@ -47,7 +58,7 @@ branch = "master" name = "github.com/golang/snappy" packages = ["."] - revision = "2e65f85255dbc3072edf28d6b5b8efc472979f5a" + revision = "553a641470496b2327abcac10b36396bd98e45c9" [[projects]] name = "github.com/inconshreveable/mousetrap" @@ -82,14 +93,14 @@ [[projects]] name = "github.com/spf13/cobra" packages = ["."] - revision = "ef82de70bb3f60c65fb8eebacbb2d122ef517385" - version = "v0.0.3" + revision = "a1f051bc3eba734da4772d60e2d677f47cf93ef4" + version = "v0.0.2" [[projects]] name = "github.com/spf13/pflag" packages = ["."] - revision = "583c0c0531f06d5278b7d917446061adc344b5cd" - version = "v1.0.1" + revision = "e57e3eeb33f795204c1ca35f56c44f83227c6e66" + version = "v1.0.0" [[projects]] name = "github.com/stretchr/testify" @@ -117,31 +128,31 @@ "leveldb/table", "leveldb/util" ] - revision = "5d6fca44a948d2be89a9702de7717f0168403d3d" + revision = "714f901b98fdb3aa954b4193d8cbd64a28d80cad" [[projects]] - branch = "develop" name = "github.com/tendermint/tmlibs" packages = [ "common", "db", "log" ] - revision = "e0acf357bb8832faebdb79f07490d0f530afc7b1" + revision = "2e24b64fc121dcdf1cabceab8dc2f7257675483c" + version = "v0.8.1" [[projects]] branch = "master" name = "golang.org/x/net" packages = [ "context", - "http/httpguts", "http2", "http2/hpack", "idna", "internal/timeseries", + "lex/httplex", "trace" ] - revision = "89e543239a64caf31d3a6865872ea120b41446df" + revision = "61147c48b25b599e5b561d2e9c4f3e1ef489ca41" [[projects]] name = "golang.org/x/text" @@ -165,9 +176,10 @@ version = "v0.3.0" [[projects]] + branch = "master" name = "google.golang.org/genproto" packages = ["googleapis/rpc/status"] - revision = "7fd901a49ba6a7f87732eb344f6e3c5b19d1b200" + revision = "ce84044298496ef4b54b4a0a0909ba593cc60e30" [[projects]] name = "google.golang.org/grpc" @@ -196,6 +208,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "5a730a9d84b37f95b1b10260a91bcd26a143a50b3301ec6dfb7483e89c44eabd" + inputs-digest = "e42d4a691fb0d0db9c717394e580dd00b36ba9e185541f99fc56689338470123" solver-name = "gps-cdcl" solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml index 235b071d..3f9a207d 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -32,7 +32,7 @@ # Use `~` for only minor version bumps. [[constraint]] - name = "github.com/golang/protobuf" + name = "github.com/gogo/protobuf" version = "~1.0.0" [[constraint]] @@ -45,19 +45,12 @@ [[constraint]] name = "github.com/tendermint/tmlibs" - branch = "develop" - # version = "0.8.1" + version = "0.8.1" [[constraint]] name = "google.golang.org/grpc" version = "~1.7.3" -# this got updated and broke, so locked to an old working commit ... -[[override]] - name = "google.golang.org/genproto" - revision = "7fd901a49ba6a7f87732eb344f6e3c5b19d1b200" - - [prune] go-tests = true unused-packages = true diff --git a/Makefile b/Makefile index 29a3172d..1823812e 100644 --- a/Makefile +++ b/Makefile @@ -2,10 +2,11 @@ GOTOOLS = \ github.com/mitchellh/gox \ github.com/golang/dep/cmd/dep \ gopkg.in/alecthomas/gometalinter.v2 \ - github.com/golang/protobuf/protoc-gen-go -GOTOOLS_CHECK = gox dep gometalinter.v2 protoc protoc-gen-go + github.com/gogo/protobuf/protoc-gen-gogo \ + github.com/gogo/protobuf/gogoproto +GOTOOLS_CHECK = gox dep gometalinter.v2 protoc protoc-gen-gogo PACKAGES=$(shell go list ./... | grep -v '/vendor/') -INCLUDE = -I=. -I=${GOPATH}/src +INCLUDE = -I=. -I=${GOPATH}/src -I=${GOPATH}/src/github.com/gogo/protobuf/protobuf all: check get_vendor_deps protoc build test install metalinter @@ -19,7 +20,7 @@ protoc: ## If you get the following error, ## "error while loading shared libraries: libprotobuf.so.14: cannot open shared object file: No such file or directory" ## See https://stackoverflow.com/a/25518702 - protoc $(INCLUDE) --go_out=plugins=grpc:. types/*.proto + protoc $(INCLUDE) --gogo_out=plugins=grpc:. types/*.proto @echo "--> adding nolint declarations to protobuf generated files" @awk '/package types/ { print "//nolint: gas"; print; next }1' types/types.pb.go > types/types.pb.go.new @mv types/types.pb.go.new types/types.pb.go diff --git a/client/local_client.go b/client/local_client.go index 804c558f..64bf5fe0 100644 --- a/client/local_client.go +++ b/client/local_client.go @@ -53,21 +53,21 @@ func (app *localClient) EchoAsync(msg string) *ReqRes { func (app *localClient) InfoAsync(req types.RequestInfo) *ReqRes { app.mtx.Lock() - res := app.Application.Info(types.ToParamsInfo(req)) + res := app.Application.Info(req) app.mtx.Unlock() return app.callback( types.ToRequestInfo(req), - types.ToResponseInfo(types.FromResultInfo(res)), + types.ToResponseInfo(res), ) } func (app *localClient) SetOptionAsync(req types.RequestSetOption) *ReqRes { app.mtx.Lock() - res := app.Application.SetOption(types.ToParamsSetOption(req)) + res := app.Application.SetOption(req) app.mtx.Unlock() return app.callback( types.ToRequestSetOption(req), - types.ToResponseSetOption(types.FromResultSetOption(res)), + types.ToResponseSetOption(res), ) } @@ -77,7 +77,7 @@ func (app *localClient) DeliverTxAsync(tx []byte) *ReqRes { app.mtx.Unlock() return app.callback( types.ToRequestDeliverTx(tx), - types.ToResponseDeliverTx(types.FromResultDeliverTx(res)), + types.ToResponseDeliverTx(res), ) } @@ -87,17 +87,17 @@ func (app *localClient) CheckTxAsync(tx []byte) *ReqRes { app.mtx.Unlock() return app.callback( types.ToRequestCheckTx(tx), - types.ToResponseCheckTx(types.FromResultCheckTx(res)), + types.ToResponseCheckTx(res), ) } func (app *localClient) QueryAsync(req types.RequestQuery) *ReqRes { app.mtx.Lock() - res := app.Application.Query(types.ToParamsQuery(req)) + res := app.Application.Query(req) app.mtx.Unlock() return app.callback( types.ToRequestQuery(req), - types.ToResponseQuery(types.FromResultQuery(res)), + types.ToResponseQuery(res), ) } @@ -107,16 +107,16 @@ func (app *localClient) CommitAsync() *ReqRes { app.mtx.Unlock() return app.callback( types.ToRequestCommit(), - types.ToResponseCommit(types.FromResultCommit(res)), + types.ToResponseCommit(res), ) } func (app *localClient) InitChainAsync(req types.RequestInitChain) *ReqRes { app.mtx.Lock() - res := app.Application.InitChain(types.ToParamsInitChain(req)) + res := app.Application.InitChain(req) reqRes := app.callback( types.ToRequestInitChain(req), - types.ToResponseInitChain(types.FromResultInitChain(res)), + types.ToResponseInitChain(res), ) app.mtx.Unlock() return reqRes @@ -124,21 +124,21 @@ func (app *localClient) InitChainAsync(req types.RequestInitChain) *ReqRes { func (app *localClient) BeginBlockAsync(req types.RequestBeginBlock) *ReqRes { app.mtx.Lock() - res := app.Application.BeginBlock(types.ToParamsBeginBlock(req)) + res := app.Application.BeginBlock(req) app.mtx.Unlock() return app.callback( types.ToRequestBeginBlock(req), - types.ToResponseBeginBlock(types.FromResultBeginBlock(res)), + types.ToResponseBeginBlock(res), ) } func (app *localClient) EndBlockAsync(req types.RequestEndBlock) *ReqRes { app.mtx.Lock() - res := app.Application.EndBlock(types.ToParamsEndBlock(req)) + res := app.Application.EndBlock(req) app.mtx.Unlock() return app.callback( types.ToRequestEndBlock(req), - types.ToResponseEndBlock(types.FromResultEndBlock(res)), + types.ToResponseEndBlock(res), ) } @@ -154,63 +154,63 @@ func (app *localClient) EchoSync(msg string) (*types.ResponseEcho, error) { func (app *localClient) InfoSync(req types.RequestInfo) (*types.ResponseInfo, error) { app.mtx.Lock() - res := types.FromResultInfo(app.Application.Info(types.ToParamsInfo(req))) + res := app.Application.Info(req) app.mtx.Unlock() return &res, nil } func (app *localClient) SetOptionSync(req types.RequestSetOption) (*types.ResponseSetOption, error) { app.mtx.Lock() - res := types.FromResultSetOption(app.Application.SetOption(types.ToParamsSetOption(req))) + res := app.Application.SetOption(req) app.mtx.Unlock() return &res, nil } func (app *localClient) DeliverTxSync(tx []byte) (*types.ResponseDeliverTx, error) { app.mtx.Lock() - res := types.FromResultDeliverTx(app.Application.DeliverTx(tx)) + res := app.Application.DeliverTx(tx) app.mtx.Unlock() return &res, nil } func (app *localClient) CheckTxSync(tx []byte) (*types.ResponseCheckTx, error) { app.mtx.Lock() - res := types.FromResultCheckTx(app.Application.CheckTx(tx)) + res := app.Application.CheckTx(tx) app.mtx.Unlock() return &res, nil } func (app *localClient) QuerySync(req types.RequestQuery) (*types.ResponseQuery, error) { app.mtx.Lock() - res := types.FromResultQuery(app.Application.Query(types.ToParamsQuery(req))) + res := app.Application.Query(req) app.mtx.Unlock() return &res, nil } func (app *localClient) CommitSync() (*types.ResponseCommit, error) { app.mtx.Lock() - res := types.FromResultCommit(app.Application.Commit()) + res := app.Application.Commit() app.mtx.Unlock() return &res, nil } func (app *localClient) InitChainSync(req types.RequestInitChain) (*types.ResponseInitChain, error) { app.mtx.Lock() - res := types.FromResultInitChain(app.Application.InitChain(types.ToParamsInitChain(req))) + res := app.Application.InitChain(req) app.mtx.Unlock() return &res, nil } func (app *localClient) BeginBlockSync(req types.RequestBeginBlock) (*types.ResponseBeginBlock, error) { app.mtx.Lock() - res := types.FromResultBeginBlock(app.Application.BeginBlock(types.ToParamsBeginBlock(req))) + res := app.Application.BeginBlock(req) app.mtx.Unlock() return &res, nil } func (app *localClient) EndBlockSync(req types.RequestEndBlock) (*types.ResponseEndBlock, error) { app.mtx.Lock() - res := types.FromResultEndBlock(app.Application.EndBlock(types.ToParamsEndBlock(req))) + res := app.Application.EndBlock(req) app.mtx.Unlock() return &res, nil } diff --git a/example/counter/counter.go b/example/counter/counter.go index 3437da67..a6d5df6a 100644 --- a/example/counter/counter.go +++ b/example/counter/counter.go @@ -21,11 +21,11 @@ func NewCounterApplication(serial bool) *CounterApplication { return &CounterApplication{serial: serial} } -func (app *CounterApplication) Info(req types.ParamsInfo) types.ResultInfo { - return types.ResultInfo{Data: cmn.Fmt("{\"hashes\":%v,\"txs\":%v}", app.hashCount, app.txCount)} +func (app *CounterApplication) Info(req types.RequestInfo) types.ResponseInfo { + return types.ResponseInfo{Data: cmn.Fmt("{\"hashes\":%v,\"txs\":%v}", app.hashCount, app.txCount)} } -func (app *CounterApplication) SetOption(req types.ParamsSetOption) types.ResultSetOption { +func (app *CounterApplication) SetOption(req types.RequestSetOption) types.ResponseSetOption { key, value := req.Key, req.Value if key == "serial" && value == "on" { app.serial = true @@ -33,20 +33,20 @@ func (app *CounterApplication) SetOption(req types.ParamsSetOption) types.Result /* TODO Panic and have the ABCI server pass an exception. The client can call SetOptionSync() and get an `error`. - return types.ResultSetOption{ + return types.ResponseSetOption{ Error: cmn.Fmt("Unknown key (%s) or value (%s)", key, value), } */ - return types.ResultSetOption{} + return types.ResponseSetOption{} } - return types.ResultSetOption{} + return types.ResponseSetOption{} } -func (app *CounterApplication) DeliverTx(tx []byte) types.ResultDeliverTx { +func (app *CounterApplication) DeliverTx(tx []byte) types.ResponseDeliverTx { if app.serial { if len(tx) > 8 { - return types.ResultDeliverTx{ + return types.ResponseDeliverTx{ Code: code.CodeTypeEncodingError, Log: fmt.Sprintf("Max tx size is 8 bytes, got %d", len(tx))} } @@ -54,19 +54,19 @@ func (app *CounterApplication) DeliverTx(tx []byte) types.ResultDeliverTx { copy(tx8[len(tx8)-len(tx):], tx) txValue := binary.BigEndian.Uint64(tx8) if txValue != uint64(app.txCount) { - return types.ResultDeliverTx{ + return types.ResponseDeliverTx{ Code: code.CodeTypeBadNonce, Log: fmt.Sprintf("Invalid nonce. Expected %v, got %v", app.txCount, txValue)} } } app.txCount++ - return types.ResultDeliverTx{Code: code.CodeTypeOK} + return types.ResponseDeliverTx{Code: code.CodeTypeOK} } -func (app *CounterApplication) CheckTx(tx []byte) types.ResultCheckTx { +func (app *CounterApplication) CheckTx(tx []byte) types.ResponseCheckTx { if app.serial { if len(tx) > 8 { - return types.ResultCheckTx{ + return types.ResponseCheckTx{ Code: code.CodeTypeEncodingError, Log: fmt.Sprintf("Max tx size is 8 bytes, got %d", len(tx))} } @@ -74,31 +74,31 @@ func (app *CounterApplication) CheckTx(tx []byte) types.ResultCheckTx { copy(tx8[len(tx8)-len(tx):], tx) txValue := binary.BigEndian.Uint64(tx8) if txValue < uint64(app.txCount) { - return types.ResultCheckTx{ + return types.ResponseCheckTx{ Code: code.CodeTypeBadNonce, Log: fmt.Sprintf("Invalid nonce. Expected >= %v, got %v", app.txCount, txValue)} } } - return types.ResultCheckTx{Code: code.CodeTypeOK} + return types.ResponseCheckTx{Code: code.CodeTypeOK} } -func (app *CounterApplication) Commit() (resp types.ResultCommit) { +func (app *CounterApplication) Commit() (resp types.ResponseCommit) { app.hashCount++ if app.txCount == 0 { - return types.ResultCommit{} + return types.ResponseCommit{} } hash := make([]byte, 8) binary.BigEndian.PutUint64(hash, uint64(app.txCount)) - return types.ResultCommit{Data: hash} + return types.ResponseCommit{Data: hash} } -func (app *CounterApplication) Query(reqQuery types.ParamsQuery) types.ResultQuery { +func (app *CounterApplication) Query(reqQuery types.RequestQuery) types.ResponseQuery { switch reqQuery.Path { case "hash": - return types.ResultQuery{Value: []byte(cmn.Fmt("%v", app.hashCount))} + return types.ResponseQuery{Value: []byte(cmn.Fmt("%v", app.hashCount))} case "tx": - return types.ResultQuery{Value: []byte(cmn.Fmt("%v", app.txCount))} + return types.ResponseQuery{Value: []byte(cmn.Fmt("%v", app.txCount))} default: - return types.ResultQuery{Log: cmn.Fmt("Invalid query path. Expected hash or tx, got %v", reqQuery.Path)} + return types.ResponseQuery{Log: cmn.Fmt("Invalid query path. Expected hash or tx, got %v", reqQuery.Path)} } } diff --git a/example/kvstore/helpers.go b/example/kvstore/helpers.go index e302a6d1..da826fe6 100644 --- a/example/kvstore/helpers.go +++ b/example/kvstore/helpers.go @@ -32,7 +32,7 @@ func RandVals(cnt int) []types.Validator { // which allows tests to pass and is fine as long as you // don't make any tx that modify the validator state func InitKVStore(app *PersistentKVStoreApplication) { - app.InitChain(types.ParamsInitChain{ + app.InitChain(types.RequestInitChain{ Validators: RandVals(1), GenesisBytes: []byte("[]"), }) diff --git a/example/kvstore/kvstore.go b/example/kvstore/kvstore.go index 573168df..4ccbc56b 100644 --- a/example/kvstore/kvstore.go +++ b/example/kvstore/kvstore.go @@ -64,12 +64,12 @@ func NewKVStoreApplication() *KVStoreApplication { return &KVStoreApplication{state: state} } -func (app *KVStoreApplication) Info(req types.ParamsInfo) (resInfo types.ResultInfo) { - return types.ResultInfo{Data: fmt.Sprintf("{\"size\":%v}", app.state.Size)} +func (app *KVStoreApplication) Info(req types.RequestInfo) (resInfo types.ResponseInfo) { + return types.ResponseInfo{Data: fmt.Sprintf("{\"size\":%v}", app.state.Size)} } // tx is either "key=value" or just arbitrary bytes -func (app *KVStoreApplication) DeliverTx(tx []byte) types.ResultDeliverTx { +func (app *KVStoreApplication) DeliverTx(tx []byte) types.ResponseDeliverTx { var key, value []byte parts := bytes.Split(tx, []byte("=")) if len(parts) == 2 { @@ -84,24 +84,24 @@ func (app *KVStoreApplication) DeliverTx(tx []byte) types.ResultDeliverTx { {[]byte("app.creator"), []byte("jae")}, {[]byte("app.key"), key}, } - return types.ResultDeliverTx{Code: code.CodeTypeOK, Tags: tags} + return types.ResponseDeliverTx{Code: code.CodeTypeOK, Tags: tags} } -func (app *KVStoreApplication) CheckTx(tx []byte) types.ResultCheckTx { - return types.ResultCheckTx{Code: code.CodeTypeOK} +func (app *KVStoreApplication) CheckTx(tx []byte) types.ResponseCheckTx { + return types.ResponseCheckTx{Code: code.CodeTypeOK} } -func (app *KVStoreApplication) Commit() types.ResultCommit { +func (app *KVStoreApplication) Commit() types.ResponseCommit { // Using a memdb - just return the big endian size of the db appHash := make([]byte, 8) binary.PutVarint(appHash, app.state.Size) app.state.AppHash = appHash app.state.Height += 1 saveState(app.state) - return types.ResultCommit{Data: appHash} + return types.ResponseCommit{Data: appHash} } -func (app *KVStoreApplication) Query(reqQuery types.ParamsQuery) (resQuery types.ResultQuery) { +func (app *KVStoreApplication) Query(reqQuery types.RequestQuery) (resQuery types.ResponseQuery) { if reqQuery.Prove { value := app.state.db.Get(prefixKey(reqQuery.Data)) resQuery.Index = -1 // TODO make Proof return index diff --git a/example/kvstore/kvstore_test.go b/example/kvstore/kvstore_test.go index 32c66797..ff3e4920 100644 --- a/example/kvstore/kvstore_test.go +++ b/example/kvstore/kvstore_test.go @@ -25,7 +25,7 @@ func testKVStore(t *testing.T, app types.Application, tx []byte, key, value stri require.False(t, ar.IsErr(), ar) // make sure query is fine - resQuery := app.Query(types.ParamsQuery{ + resQuery := app.Query(types.RequestQuery{ Path: "/store", Data: []byte(key), }) @@ -33,7 +33,7 @@ func testKVStore(t *testing.T, app types.Application, tx []byte, key, value stri require.Equal(t, value, string(resQuery.Value)) // make sure proof is fine - resQuery = app.Query(types.ParamsQuery{ + resQuery = app.Query(types.RequestQuery{ Path: "/store", Data: []byte(key), Prove: true, @@ -79,7 +79,7 @@ func TestPersistentKVStoreInfo(t *testing.T) { InitKVStore(kvstore) height := int64(0) - resInfo := kvstore.Info(types.ParamsInfo{}) + resInfo := kvstore.Info(types.RequestInfo{}) if resInfo.LastBlockHeight != height { t.Fatalf("expected height of %d, got %d", height, resInfo.LastBlockHeight) } @@ -90,11 +90,11 @@ func TestPersistentKVStoreInfo(t *testing.T) { header := types.Header{ Height: int64(height), } - kvstore.BeginBlock(types.ParamsBeginBlock{hash, header, nil, nil}) - kvstore.EndBlock(types.ParamsEndBlock{header.Height}) + kvstore.BeginBlock(types.RequestBeginBlock{hash, header, nil, nil}) + kvstore.EndBlock(types.RequestEndBlock{header.Height}) kvstore.Commit() - resInfo = kvstore.Info(types.ParamsInfo{}) + resInfo = kvstore.Info(types.RequestInfo{}) if resInfo.LastBlockHeight != height { t.Fatalf("expected height of %d, got %d", height, resInfo.LastBlockHeight) } @@ -114,7 +114,7 @@ func TestValUpdates(t *testing.T) { nInit := 5 vals := RandVals(total) // iniitalize with the first nInit - kvstore.InitChain(types.ParamsInitChain{ + kvstore.InitChain(types.RequestInitChain{ Validators: vals[:nInit], }) @@ -176,13 +176,13 @@ func makeApplyBlock(t *testing.T, kvstore types.Application, heightInt int, diff Height: height, } - kvstore.BeginBlock(types.ParamsBeginBlock{hash, header, nil, nil}) + kvstore.BeginBlock(types.RequestBeginBlock{hash, header, nil, nil}) for _, tx := range txs { if r := kvstore.DeliverTx(tx); r.IsErr() { t.Fatal(r) } } - resEndBlock := kvstore.EndBlock(types.ParamsEndBlock{header.Height}) + resEndBlock := kvstore.EndBlock(types.RequestEndBlock{header.Height}) kvstore.Commit() valsEqual(t, diff, resEndBlock.ValidatorUpdates) diff --git a/example/kvstore/persistent_kvstore.go b/example/kvstore/persistent_kvstore.go index fda7a7a1..02f7ce74 100644 --- a/example/kvstore/persistent_kvstore.go +++ b/example/kvstore/persistent_kvstore.go @@ -50,19 +50,19 @@ func (app *PersistentKVStoreApplication) SetLogger(l log.Logger) { app.logger = l } -func (app *PersistentKVStoreApplication) Info(req types.ParamsInfo) types.ResultInfo { +func (app *PersistentKVStoreApplication) Info(req types.RequestInfo) types.ResponseInfo { res := app.app.Info(req) res.LastBlockHeight = app.app.state.Height res.LastBlockAppHash = app.app.state.AppHash return res } -func (app *PersistentKVStoreApplication) SetOption(req types.ParamsSetOption) types.ResultSetOption { +func (app *PersistentKVStoreApplication) SetOption(req types.RequestSetOption) types.ResponseSetOption { return app.app.SetOption(req) } // tx is either "val:pubkey/power" or "key=value" or just arbitrary bytes -func (app *PersistentKVStoreApplication) DeliverTx(tx []byte) types.ResultDeliverTx { +func (app *PersistentKVStoreApplication) DeliverTx(tx []byte) types.ResponseDeliverTx { // if it starts with "val:", update the validator set // format is "val:pubkey/power" if isValidatorTx(tx) { @@ -75,40 +75,40 @@ func (app *PersistentKVStoreApplication) DeliverTx(tx []byte) types.ResultDelive return app.app.DeliverTx(tx) } -func (app *PersistentKVStoreApplication) CheckTx(tx []byte) types.ResultCheckTx { +func (app *PersistentKVStoreApplication) CheckTx(tx []byte) types.ResponseCheckTx { return app.app.CheckTx(tx) } // Commit will panic if InitChain was not called -func (app *PersistentKVStoreApplication) Commit() types.ResultCommit { +func (app *PersistentKVStoreApplication) Commit() types.ResponseCommit { return app.app.Commit() } -func (app *PersistentKVStoreApplication) Query(reqQuery types.ParamsQuery) types.ResultQuery { +func (app *PersistentKVStoreApplication) Query(reqQuery types.RequestQuery) types.ResponseQuery { return app.app.Query(reqQuery) } // Save the validators in the merkle tree -func (app *PersistentKVStoreApplication) InitChain(req types.ParamsInitChain) types.ResultInitChain { +func (app *PersistentKVStoreApplication) InitChain(req types.RequestInitChain) types.ResponseInitChain { for _, v := range req.Validators { r := app.updateValidator(v) if r.IsErr() { app.logger.Error("Error updating validators", "r", r) } } - return types.ResultInitChain{} + return types.ResponseInitChain{} } // Track the block hash and header information -func (app *PersistentKVStoreApplication) BeginBlock(req types.ParamsBeginBlock) types.ResultBeginBlock { +func (app *PersistentKVStoreApplication) BeginBlock(req types.RequestBeginBlock) types.ResponseBeginBlock { // reset valset changes app.ValUpdates = make([]types.Validator, 0) - return types.ResultBeginBlock{} + return types.ResponseBeginBlock{} } // Update the validator set -func (app *PersistentKVStoreApplication) EndBlock(req types.ParamsEndBlock) types.ResultEndBlock { - return types.ResultEndBlock{ValidatorUpdates: app.ValUpdates} +func (app *PersistentKVStoreApplication) EndBlock(req types.RequestEndBlock) types.ResponseEndBlock { + return types.ResponseEndBlock{ValidatorUpdates: app.ValUpdates} } //--------------------------------------------- @@ -129,7 +129,7 @@ func (app *PersistentKVStoreApplication) Validators() (validators []types.Valida return } -func MakeValSetChangeTx(pubkey *types.PubKey, power int64) []byte { +func MakeValSetChangeTx(pubkey types.PubKey, power int64) []byte { return []byte(cmn.Fmt("val:%X/%d", pubkey.Data, power)) } @@ -139,13 +139,13 @@ func isValidatorTx(tx []byte) bool { // format is "val:pubkey/power" // pubkey is raw 32-byte ed25519 key -func (app *PersistentKVStoreApplication) execValidatorTx(tx []byte) types.ResultDeliverTx { +func (app *PersistentKVStoreApplication) execValidatorTx(tx []byte) types.ResponseDeliverTx { tx = tx[len(ValidatorSetChangePrefix):] //get the pubkey and power pubKeyAndPower := strings.Split(string(tx), "/") if len(pubKeyAndPower) != 2 { - return types.ResultDeliverTx{ + return types.ResponseDeliverTx{ Code: code.CodeTypeEncodingError, Log: fmt.Sprintf("Expected 'pubkey/power'. Got %v", pubKeyAndPower)} } @@ -154,7 +154,7 @@ func (app *PersistentKVStoreApplication) execValidatorTx(tx []byte) types.Result // decode the pubkey pubkey, err := hex.DecodeString(pubkeyS) if err != nil { - return types.ResultDeliverTx{ + return types.ResponseDeliverTx{ Code: code.CodeTypeEncodingError, Log: fmt.Sprintf("Pubkey (%s) is invalid hex", pubkeyS)} } @@ -162,7 +162,7 @@ func (app *PersistentKVStoreApplication) execValidatorTx(tx []byte) types.Result // decode the power power, err := strconv.ParseInt(powerS, 10, 64) if err != nil { - return types.ResultDeliverTx{ + return types.ResponseDeliverTx{ Code: code.CodeTypeEncodingError, Log: fmt.Sprintf("Power (%s) is not an int", powerS)} } @@ -172,12 +172,12 @@ func (app *PersistentKVStoreApplication) execValidatorTx(tx []byte) types.Result } // add, update, or remove a validator -func (app *PersistentKVStoreApplication) updateValidator(v types.Validator) types.ResultDeliverTx { +func (app *PersistentKVStoreApplication) updateValidator(v types.Validator) types.ResponseDeliverTx { key := []byte("val:" + string(v.PubKey.Data)) if v.Power == 0 { // remove validator if !app.app.state.db.Has(key) { - return types.ResultDeliverTx{ + return types.ResponseDeliverTx{ Code: code.CodeTypeUnauthorized, Log: fmt.Sprintf("Cannot remove non-existent validator %X", key)} } @@ -186,7 +186,7 @@ func (app *PersistentKVStoreApplication) updateValidator(v types.Validator) type // add or update validator value := bytes.NewBuffer(make([]byte, 0)) if err := types.WriteMessage(&v, value); err != nil { - return types.ResultDeliverTx{ + return types.ResponseDeliverTx{ Code: code.CodeTypeEncodingError, Log: fmt.Sprintf("Error encoding validator: %v", err)} } @@ -196,5 +196,5 @@ func (app *PersistentKVStoreApplication) updateValidator(v types.Validator) type // we only update the changes array if we successfully updated the tree app.ValUpdates = append(app.ValUpdates, v) - return types.ResultDeliverTx{Code: code.CodeTypeOK} + return types.ResponseDeliverTx{Code: code.CodeTypeOK} } diff --git a/server/socket_server.go b/server/socket_server.go index d9aa9740..eb26dc35 100644 --- a/server/socket_server.go +++ b/server/socket_server.go @@ -172,32 +172,32 @@ func (s *SocketServer) handleRequest(req *types.Request, responses chan<- *types case *types.Request_Flush: responses <- types.ToResponseFlush() case *types.Request_Info: - res := s.app.Info(types.ToParamsInfo(*r.Info)) - responses <- types.ToResponseInfo(types.FromResultInfo(res)) + res := s.app.Info(*r.Info) + responses <- types.ToResponseInfo(res) case *types.Request_SetOption: - res := s.app.SetOption(types.ToParamsSetOption(*r.SetOption)) - responses <- types.ToResponseSetOption(types.FromResultSetOption(res)) + res := s.app.SetOption(*r.SetOption) + responses <- types.ToResponseSetOption(res) case *types.Request_DeliverTx: res := s.app.DeliverTx(r.DeliverTx.Tx) - responses <- types.ToResponseDeliverTx(types.FromResultDeliverTx(res)) + responses <- types.ToResponseDeliverTx(res) case *types.Request_CheckTx: res := s.app.CheckTx(r.CheckTx.Tx) - responses <- types.ToResponseCheckTx(types.FromResultCheckTx(res)) + responses <- types.ToResponseCheckTx(res) case *types.Request_Commit: res := s.app.Commit() - responses <- types.ToResponseCommit(types.FromResultCommit(res)) + responses <- types.ToResponseCommit(res) case *types.Request_Query: - res := s.app.Query(types.ToParamsQuery(*r.Query)) - responses <- types.ToResponseQuery(types.FromResultQuery(res)) + res := s.app.Query(*r.Query) + responses <- types.ToResponseQuery(res) case *types.Request_InitChain: - res := s.app.InitChain(types.ToParamsInitChain(*r.InitChain)) - responses <- types.ToResponseInitChain(types.FromResultInitChain(res)) + res := s.app.InitChain(*r.InitChain) + responses <- types.ToResponseInitChain(res) case *types.Request_BeginBlock: - res := s.app.BeginBlock(types.ToParamsBeginBlock(*r.BeginBlock)) - responses <- types.ToResponseBeginBlock(types.FromResultBeginBlock(res)) + res := s.app.BeginBlock(*r.BeginBlock) + responses <- types.ToResponseBeginBlock(res) case *types.Request_EndBlock: - res := s.app.EndBlock(types.ToParamsEndBlock(*r.EndBlock)) - responses <- types.ToResponseEndBlock(types.FromResultEndBlock(res)) + res := s.app.EndBlock(*r.EndBlock) + responses <- types.ToResponseEndBlock(res) default: responses <- types.ToResponseException("Unknown request") } diff --git a/tests/server/client.go b/tests/server/client.go index e1d02850..14b4007a 100644 --- a/tests/server/client.go +++ b/tests/server/client.go @@ -12,12 +12,11 @@ import ( func InitChain(client abcicli.Client) error { total := 10 - vals := make([]*types.Validator, total) + vals := make([]types.Validator, total) for i := 0; i < total; i++ { pubkey := cmn.RandBytes(33) power := cmn.RandInt() - v := types.Ed25519Validator(pubkey, int64(power)) - vals[i] = &v + vals[i] = types.Ed25519Validator(pubkey, int64(power)) } _, err := client.InitChainSync(types.RequestInitChain{ Validators: vals, diff --git a/types/application.go b/types/application.go index 03d0c8fb..ef1bc92e 100644 --- a/types/application.go +++ b/types/application.go @@ -6,23 +6,23 @@ import ( // Application is an interface that enables any finite, deterministic state machine // to be driven by a blockchain-based replication engine via the ABCI. -// All methods take a ParamsXxx argument and return a ResultXxx argument, +// All methods take a RequestXxx argument and return a ResponseXxx argument, // except CheckTx/DeliverTx, which take `tx []byte`, and `Commit`, which takes nothing. type Application interface { // Info/Query Connection - Info(ParamsInfo) ResultInfo // Return application info - SetOption(ParamsSetOption) ResultSetOption // Set application option - Query(ParamsQuery) ResultQuery // Query for state + Info(RequestInfo) ResponseInfo // Return application info + SetOption(RequestSetOption) ResponseSetOption // Set application option + Query(RequestQuery) ResponseQuery // Query for state // Mempool Connection - CheckTx(tx []byte) ResultCheckTx // Validate a tx for the mempool + CheckTx(tx []byte) ResponseCheckTx // Validate a tx for the mempool // Consensus Connection - InitChain(ParamsInitChain) ResultInitChain // Initialize blockchain with validators and other info from TendermintCore - BeginBlock(ParamsBeginBlock) ResultBeginBlock // Signals the beginning of a block - DeliverTx(tx []byte) ResultDeliverTx // Deliver a tx for full processing - EndBlock(ParamsEndBlock) ResultEndBlock // Signals the end of a block, returns changes to the validator set - Commit() ResultCommit // Commit the state and return the application Merkle root hash + InitChain(RequestInitChain) ResponseInitChain // Initialize blockchain with validators and other info from TendermintCore + BeginBlock(RequestBeginBlock) ResponseBeginBlock // Signals the beginning of a block + DeliverTx(tx []byte) ResponseDeliverTx // Deliver a tx for full processing + EndBlock(RequestEndBlock) ResponseEndBlock // Signals the end of a block, returns changes to the validator set + Commit() ResponseCommit // Commit the state and return the application Merkle root hash } //------------------------------------------------------- @@ -37,40 +37,40 @@ func NewBaseApplication() *BaseApplication { return &BaseApplication{} } -func (BaseApplication) Info(req ParamsInfo) ResultInfo { - return ResultInfo{} +func (BaseApplication) Info(req RequestInfo) ResponseInfo { + return ResponseInfo{} } -func (BaseApplication) SetOption(req ParamsSetOption) ResultSetOption { - return ResultSetOption{} +func (BaseApplication) SetOption(req RequestSetOption) ResponseSetOption { + return ResponseSetOption{} } -func (BaseApplication) DeliverTx(tx []byte) ResultDeliverTx { - return ResultDeliverTx{Code: CodeTypeOK} +func (BaseApplication) DeliverTx(tx []byte) ResponseDeliverTx { + return ResponseDeliverTx{Code: CodeTypeOK} } -func (BaseApplication) CheckTx(tx []byte) ResultCheckTx { - return ResultCheckTx{Code: CodeTypeOK} +func (BaseApplication) CheckTx(tx []byte) ResponseCheckTx { + return ResponseCheckTx{Code: CodeTypeOK} } -func (BaseApplication) Commit() ResultCommit { - return ResultCommit{} +func (BaseApplication) Commit() ResponseCommit { + return ResponseCommit{} } -func (BaseApplication) Query(req ParamsQuery) ResultQuery { - return ResultQuery{Code: CodeTypeOK} +func (BaseApplication) Query(req RequestQuery) ResponseQuery { + return ResponseQuery{Code: CodeTypeOK} } -func (BaseApplication) InitChain(req ParamsInitChain) ResultInitChain { - return ResultInitChain{} +func (BaseApplication) InitChain(req RequestInitChain) ResponseInitChain { + return ResponseInitChain{} } -func (BaseApplication) BeginBlock(req ParamsBeginBlock) ResultBeginBlock { - return ResultBeginBlock{} +func (BaseApplication) BeginBlock(req RequestBeginBlock) ResponseBeginBlock { + return ResponseBeginBlock{} } -func (BaseApplication) EndBlock(req ParamsEndBlock) ResultEndBlock { - return ResultEndBlock{} +func (BaseApplication) EndBlock(req RequestEndBlock) ResponseEndBlock { + return ResponseEndBlock{} } //------------------------------------------------------- @@ -93,55 +93,46 @@ func (app *GRPCApplication) Flush(ctx context.Context, req *RequestFlush) (*Resp } func (app *GRPCApplication) Info(ctx context.Context, req *RequestInfo) (*ResponseInfo, error) { - res := app.app.Info(ToParamsInfo(*req)) - r := FromResultInfo(res) - return &r, nil + res := app.app.Info(*req) + return &res, nil } func (app *GRPCApplication) SetOption(ctx context.Context, req *RequestSetOption) (*ResponseSetOption, error) { - res := app.app.SetOption(ToParamsSetOption(*req)) - r := FromResultSetOption(res) - return &r, nil + res := app.app.SetOption(*req) + return &res, nil } func (app *GRPCApplication) DeliverTx(ctx context.Context, req *RequestDeliverTx) (*ResponseDeliverTx, error) { res := app.app.DeliverTx(req.Tx) - r := FromResultDeliverTx(res) - return &r, nil + return &res, nil } func (app *GRPCApplication) CheckTx(ctx context.Context, req *RequestCheckTx) (*ResponseCheckTx, error) { res := app.app.CheckTx(req.Tx) - r := FromResultCheckTx(res) - return &r, nil + return &res, nil } func (app *GRPCApplication) Query(ctx context.Context, req *RequestQuery) (*ResponseQuery, error) { - res := app.app.Query(ToParamsQuery(*req)) - r := FromResultQuery(res) - return &r, nil + res := app.app.Query(*req) + return &res, nil } func (app *GRPCApplication) Commit(ctx context.Context, req *RequestCommit) (*ResponseCommit, error) { res := app.app.Commit() - r := FromResultCommit(res) - return &r, nil + return &res, nil } func (app *GRPCApplication) InitChain(ctx context.Context, req *RequestInitChain) (*ResponseInitChain, error) { - res := app.app.InitChain(ToParamsInitChain(*req)) - r := FromResultInitChain(res) - return &r, nil + res := app.app.InitChain(*req) + return &res, nil } func (app *GRPCApplication) BeginBlock(ctx context.Context, req *RequestBeginBlock) (*ResponseBeginBlock, error) { - res := app.app.BeginBlock(ToParamsBeginBlock(*req)) - r := FromResultBeginBlock(res) - return &r, nil + res := app.app.BeginBlock(*req) + return &res, nil } func (app *GRPCApplication) EndBlock(ctx context.Context, req *RequestEndBlock) (*ResponseEndBlock, error) { - res := app.app.EndBlock(ToParamsEndBlock(*req)) - r := FromResultEndBlock(res) - return &r, nil + res := app.app.EndBlock(*req) + return &res, nil } diff --git a/types/codetype.go b/types/codetype.go deleted file mode 100644 index 287f9e81..00000000 --- a/types/codetype.go +++ /dev/null @@ -1,67 +0,0 @@ -package types - -const ( - CodeTypeOK uint32 = 0 -) - -// IsOK returns true if Code is OK. -func (r ResponseCheckTx) IsOK() bool { - return r.Code == CodeTypeOK -} - -// IsErr returns true if Code is something other than OK. -func (r ResponseCheckTx) IsErr() bool { - return r.Code != CodeTypeOK -} - -// IsOK returns true if Code is OK. -func (r ResponseDeliverTx) IsOK() bool { - return r.Code == CodeTypeOK -} - -// IsErr returns true if Code is something other than OK. -func (r ResponseDeliverTx) IsErr() bool { - return r.Code != CodeTypeOK -} - -// IsOK returns true if Code is OK. -func (r ResponseQuery) IsOK() bool { - return r.Code == CodeTypeOK -} - -// IsErr returns true if Code is something other than OK. -func (r ResponseQuery) IsErr() bool { - return r.Code != CodeTypeOK -} - -//---------------------------------------------------- - -// IsOK returns true if Code is OK. -func (r ResultCheckTx) IsOK() bool { - return r.Code == CodeTypeOK -} - -// IsErr returns true if Code is something other than OK. -func (r ResultCheckTx) IsErr() bool { - return r.Code != CodeTypeOK -} - -// IsOK returns true if Code is OK. -func (r ResultDeliverTx) IsOK() bool { - return r.Code == CodeTypeOK -} - -// IsErr returns true if Code is something other than OK. -func (r ResultDeliverTx) IsErr() bool { - return r.Code != CodeTypeOK -} - -// IsOK returns true if Code is OK. -func (r ResultQuery) IsOK() bool { - return r.Code == CodeTypeOK -} - -// IsErr returns true if Code is something other than OK. -func (r ResultQuery) IsErr() bool { - return r.Code != CodeTypeOK -} diff --git a/types/json.go b/types/json.go deleted file mode 100644 index 9bbf01a0..00000000 --- a/types/json.go +++ /dev/null @@ -1,87 +0,0 @@ -package types - -import ( - "bytes" - "encoding/json" - - "github.com/golang/protobuf/jsonpb" -) - -//--------------------------------------------------------------------------- -// override JSON marshalling so we dont emit defaults (ie. disable omitempty) -// note we need Unmarshal functions too because protobuf had the bright idea -// to marshal int64->string. cool. cool, cool, cool: https://developers.google.com/protocol-buffers/docs/proto3#json - -var ( - jsonpbMarshaller = jsonpb.Marshaler{ - EnumsAsInts: true, - EmitDefaults: false, - } - jsonpbUnmarshaller = jsonpb.Unmarshaler{} -) - -func (r *ResponseSetOption) MarshalJSON() ([]byte, error) { - s, err := jsonpbMarshaller.MarshalToString(r) - return []byte(s), err -} - -func (r *ResponseSetOption) UnmarshalJSON(b []byte) error { - reader := bytes.NewBuffer(b) - return jsonpbUnmarshaller.Unmarshal(reader, r) -} - -func (r *ResponseCheckTx) MarshalJSON() ([]byte, error) { - s, err := jsonpbMarshaller.MarshalToString(r) - return []byte(s), err -} - -func (r *ResponseCheckTx) UnmarshalJSON(b []byte) error { - reader := bytes.NewBuffer(b) - return jsonpbUnmarshaller.Unmarshal(reader, r) -} - -func (r *ResponseDeliverTx) MarshalJSON() ([]byte, error) { - s, err := jsonpbMarshaller.MarshalToString(r) - return []byte(s), err -} - -func (r *ResponseDeliverTx) UnmarshalJSON(b []byte) error { - reader := bytes.NewBuffer(b) - return jsonpbUnmarshaller.Unmarshal(reader, r) -} - -func (r *ResponseQuery) MarshalJSON() ([]byte, error) { - s, err := jsonpbMarshaller.MarshalToString(r) - return []byte(s), err -} - -func (r *ResponseQuery) UnmarshalJSON(b []byte) error { - reader := bytes.NewBuffer(b) - return jsonpbUnmarshaller.Unmarshal(reader, r) -} - -func (r *ResponseCommit) MarshalJSON() ([]byte, error) { - s, err := jsonpbMarshaller.MarshalToString(r) - return []byte(s), err -} - -func (r *ResponseCommit) UnmarshalJSON(b []byte) error { - reader := bytes.NewBuffer(b) - return jsonpbUnmarshaller.Unmarshal(reader, r) -} - -// Some compile time assertions to ensure we don't -// have accidental runtime surprises later on. - -// jsonEncodingRoundTripper ensures that asserted -// interfaces implement both MarshalJSON and UnmarshalJSON -type jsonRoundTripper interface { - json.Marshaler - json.Unmarshaler -} - -var _ jsonRoundTripper = (*ResponseCommit)(nil) -var _ jsonRoundTripper = (*ResponseQuery)(nil) -var _ jsonRoundTripper = (*ResponseDeliverTx)(nil) -var _ jsonRoundTripper = (*ResponseCheckTx)(nil) -var _ jsonRoundTripper = (*ResponseSetOption)(nil) diff --git a/types/messages.go b/types/messages.go index e4d1c68f..52e4b675 100644 --- a/types/messages.go +++ b/types/messages.go @@ -5,7 +5,7 @@ import ( "encoding/binary" "io" - "github.com/golang/protobuf/proto" + "github.com/gogo/protobuf/proto" ) const ( @@ -27,12 +27,12 @@ func ReadMessage(r io.Reader, msg proto.Message) error { } func readProtoMsg(r io.Reader, msg proto.Message, maxSize int) error { - // binary.ReadUvarint takes an io.ByteReader, eg. a bufio.Reader + // binary.ReadVarint takes an io.ByteReader, eg. a bufio.Reader reader, ok := r.(*bufio.Reader) if !ok { reader = bufio.NewReader(r) } - length64, err := binary.ReadUvarint(reader) + length64, err := binary.ReadVarint(reader) if err != nil { return err } @@ -48,11 +48,11 @@ func readProtoMsg(r io.Reader, msg proto.Message, maxSize int) error { } //----------------------------------------------------------------------- -// NOTE: we copied wire.EncodeByteSlice from go-amino rather than keep -// go-amino as a dep +// NOTE: we copied wire.EncodeByteSlice from go-wire rather than keep +// go-wire as a dep func encodeByteSlice(w io.Writer, bz []byte) (err error) { - err = encodeUvarint(w, uint64(len(bz))) + err = encodeVarint(w, int64(len(bz))) if err != nil { return } @@ -60,9 +60,9 @@ func encodeByteSlice(w io.Writer, bz []byte) (err error) { return } -func encodeUvarint(w io.Writer, u uint64) (err error) { +func encodeVarint(w io.Writer, i int64) (err error) { var buf [10]byte - n := binary.PutUvarint(buf[:], u) + n := binary.PutVarint(buf[:], i) _, err = w.Write(buf[0:n]) return } diff --git a/types/messages_test.go b/types/messages_test.go index fb93a0ab..21d3595f 100644 --- a/types/messages_test.go +++ b/types/messages_test.go @@ -6,7 +6,7 @@ import ( "strings" "testing" - "github.com/golang/protobuf/proto" + "github.com/gogo/protobuf/proto" "github.com/stretchr/testify/assert" cmn "github.com/tendermint/tmlibs/common" ) @@ -21,7 +21,7 @@ func TestMarshalJSON(t *testing.T) { Code: 1, Data: []byte("hello"), GasWanted: 43, - Tags: []*cmn.KVPair{ + Tags: []cmn.KVPair{ {[]byte("pho"), []byte("bo")}, }, } @@ -82,8 +82,8 @@ func TestWriteReadMessage2(t *testing.T) { Data: []byte(phrase), Log: phrase, GasWanted: 10, - Tags: []*cmn.KVPair{ - {[]byte("abc"), []byte("def")}, + Tags: []cmn.KVPair{ + cmn.KVPair{[]byte("abc"), []byte("def")}, }, // Fee: cmn.KI64Pair{ }, diff --git a/types/params.go b/types/params.go deleted file mode 100644 index dbf5021e..00000000 --- a/types/params.go +++ /dev/null @@ -1,111 +0,0 @@ -package types - -type ParamsEcho struct { - Message string `json:"message,omitempty"` -} - -type ParamsFlush struct { -} - -type ParamsInfo struct { - Version string `json:"version,omitempty"` -} - -func ToParamsInfo(req RequestInfo) ParamsInfo { - return ParamsInfo{ - Version: req.Version, - } -} - -type ParamsSetOption struct { - Key string `json:"key,omitempty"` - Value string `json:"value,omitempty"` -} - -func ToParamsSetOption(req RequestSetOption) ParamsSetOption { - return ParamsSetOption{ - Key: req.Key, - Value: req.Value, - } -} - -type ParamsInitChain struct { - Validators []Validator `json:"validators"` - GenesisBytes []byte `json:"genesis_bytes,omitempty"` -} - -func ToParamsInitChain(req RequestInitChain) ParamsInitChain { - vals := make([]Validator, len(req.Validators)) - for i := 0; i < len(vals); i++ { - v := req.Validators[i] - vals[i] = *v - } - return ParamsInitChain{ - Validators: vals, - GenesisBytes: req.GenesisBytes, - } -} - -type ParamsQuery struct { - Data []byte `json:"data,omitempty"` - Path string `json:"path,omitempty"` - Height int64 `json:"height,omitempty"` - Prove bool `json:"prove,omitempty"` -} - -func ToParamsQuery(req RequestQuery) ParamsQuery { - return ParamsQuery{ - Data: req.Data, - Path: req.Path, - Height: req.Height, - Prove: req.Prove, - } -} - -type ParamsBeginBlock struct { - Hash []byte `json:"hash,omitempty"` - Header Header `json:"header"` - Validators []SigningValidator `json:"validators,omitempty"` - ByzantineValidators []Evidence `json:"byzantine_validators"` -} - -func ToParamsBeginBlock(req RequestBeginBlock) ParamsBeginBlock { - vals := make([]SigningValidator, len(req.Validators)) - for i := 0; i < len(vals); i++ { - v := req.Validators[i] - vals[i] = *v - } - - evidence := make([]Evidence, len(req.ByzantineValidators)) - for i := 0; i < len(evidence); i++ { - ev := req.ByzantineValidators[i] - evidence[i] = *ev - } - return ParamsBeginBlock{ - Hash: req.Hash, - Header: *req.Header, - Validators: vals, - ByzantineValidators: evidence, - } -} - -type ParamsCheckTx struct { - Tx []byte `json:"tx,omitempty"` -} - -type ParamsDeliverTx struct { - Tx []byte `json:"tx,omitempty"` -} - -type ParamsEndBlock struct { - Height int64 `json:"height,omitempty"` -} - -func ToParamsEndBlock(req RequestEndBlock) ParamsEndBlock { - return ParamsEndBlock{ - Height: req.Height, - } -} - -type ParamsCommit struct { -} diff --git a/types/protoreplace/protoreplace.go b/types/protoreplace/protoreplace.go new file mode 100644 index 00000000..3ea0c73d --- /dev/null +++ b/types/protoreplace/protoreplace.go @@ -0,0 +1,55 @@ +// +build ignore + +package main + +import ( + "bytes" + "fmt" + "io/ioutil" + "os" + "os/exec" + "regexp" + "strings" +) + +// This script replaces most `[]byte` with `data.Bytes` in a `.pb.go` file. +// It was written before we realized we could use `gogo/protobuf` to achieve +// this more natively. So it's here for safe keeping in case we ever need to +// abandon `gogo/protobuf`. + +func main() { + bytePattern := regexp.MustCompile("[[][]]byte") + const oldPath = "types/types.pb.go" + const tmpPath = "types/types.pb.new" + content, err := ioutil.ReadFile(oldPath) + if err != nil { + panic("cannot read " + oldPath) + os.Exit(1) + } + lines := bytes.Split(content, []byte("\n")) + outFile, _ := os.Create(tmpPath) + wroteImport := false + for _, line_bytes := range lines { + line := string(line_bytes) + gotPackageLine := strings.HasPrefix(line, "package ") + writeImportTime := strings.HasPrefix(line, "import ") + containsDescriptor := strings.Contains(line, "Descriptor") + containsByteArray := strings.Contains(line, "[]byte") + if containsByteArray && !containsDescriptor { + line = string(bytePattern.ReplaceAll([]byte(line), []byte("data.Bytes"))) + } + if writeImportTime && !wroteImport { + wroteImport = true + fmt.Fprintf(outFile, "import \"github.com/tendermint/go-wire/data\"\n") + + } + if gotPackageLine { + fmt.Fprintf(outFile, "%s\n", "//nolint: gas") + } + fmt.Fprintf(outFile, "%s\n", line) + } + outFile.Close() + os.Remove(oldPath) + os.Rename(tmpPath, oldPath) + exec.Command("goimports", "-w", oldPath) +} diff --git a/types/pubkey.go b/types/pubkey.go new file mode 100644 index 00000000..e5cd5fbf --- /dev/null +++ b/types/pubkey.go @@ -0,0 +1,16 @@ +package types + +const ( + PubKeyEd25519 = "ed25519" +) + +func Ed25519Validator(pubkey []byte, power int64) Validator { + return Validator{ + // Address: + PubKey: PubKey{ + Type: PubKeyEd25519, + Data: pubkey, + }, + Power: power, + } +} diff --git a/types/result.go b/types/result.go index 63cea449..dbf409f4 100644 --- a/types/result.go +++ b/types/result.go @@ -1,170 +1,121 @@ package types -import cmn "github.com/tendermint/tmlibs/common" +import ( + "bytes" + "encoding/json" -// nondeterministic -type ResultException struct { - Error string `json:"error,omitempty"` + "github.com/gogo/protobuf/jsonpb" +) + +const ( + CodeTypeOK uint32 = 0 +) + +// IsOK returns true if Code is OK. +func (r ResponseCheckTx) IsOK() bool { + return r.Code == CodeTypeOK } -type ResultEcho struct { - Message string `json:"message,omitempty"` +// IsErr returns true if Code is something other than OK. +func (r ResponseCheckTx) IsErr() bool { + return r.Code != CodeTypeOK } -type ResultFlush struct { +// IsOK returns true if Code is OK. +func (r ResponseDeliverTx) IsOK() bool { + return r.Code == CodeTypeOK } -type ResultInfo struct { - Data string `json:"data,omitempty"` - Version string `json:"version,omitempty"` - LastBlockHeight int64 `json:"last_block_height,omitempty"` - LastBlockAppHash []byte `json:"last_block_app_hash,omitempty"` +// IsErr returns true if Code is something other than OK. +func (r ResponseDeliverTx) IsErr() bool { + return r.Code != CodeTypeOK } -func FromResultInfo(res ResultInfo) ResponseInfo { - return ResponseInfo(res) +// IsOK returns true if Code is OK. +func (r ResponseQuery) IsOK() bool { + return r.Code == CodeTypeOK } -type ResultSetOption struct { - Code uint32 `json:"code,omitempty"` - // bytes data = 2; - Log string `json:"log,omitempty"` - Info string `json:"info,omitempty"` +// IsErr returns true if Code is something other than OK. +func (r ResponseQuery) IsErr() bool { + return r.Code != CodeTypeOK } -func FromResultSetOption(res ResultSetOption) ResponseSetOption { - return ResponseSetOption(res) -} +//--------------------------------------------------------------------------- +// override JSON marshalling so we dont emit defaults (ie. disable omitempty) +// note we need Unmarshal functions too because protobuf had the bright idea +// to marshal int64->string. cool. cool, cool, cool: https://developers.google.com/protocol-buffers/docs/proto3#json -type ResultInitChain struct { - Validators []Validator `json:"validators"` -} - -func FromResultInitChain(res ResultInitChain) ResponseInitChain { - vals := valsToPointers(res.Validators) - return ResponseInitChain{ - Validators: vals, +var ( + jsonpbMarshaller = jsonpb.Marshaler{ + EnumsAsInts: true, + EmitDefaults: false, } + jsonpbUnmarshaller = jsonpb.Unmarshaler{} +) + +func (r *ResponseSetOption) MarshalJSON() ([]byte, error) { + s, err := jsonpbMarshaller.MarshalToString(r) + return []byte(s), err } -type ResultQuery struct { - Code uint32 `json:"code,omitempty"` - // bytes data = 2; // use "value" instead. - Log string `json:"log,omitempty"` - Info string `json:"info,omitempty"` - Index int64 `json:"index,omitempty"` - Key []byte `json:"key,omitempty"` - Value []byte `json:"value,omitempty"` - Proof []byte `json:"proof,omitempty"` - Height int64 `json:"height,omitempty"` +func (r *ResponseSetOption) UnmarshalJSON(b []byte) error { + reader := bytes.NewBuffer(b) + return jsonpbUnmarshaller.Unmarshal(reader, r) } -func FromResultQuery(res ResultQuery) ResponseQuery { - return ResponseQuery(res) +func (r *ResponseCheckTx) MarshalJSON() ([]byte, error) { + s, err := jsonpbMarshaller.MarshalToString(r) + return []byte(s), err } -type ResultBeginBlock struct { - Tags []cmn.KVPair `json:"tags,omitempty"` +func (r *ResponseCheckTx) UnmarshalJSON(b []byte) error { + reader := bytes.NewBuffer(b) + return jsonpbUnmarshaller.Unmarshal(reader, r) } -func FromResultBeginBlock(res ResultBeginBlock) ResponseBeginBlock { - tags := tagsToPointers(res.Tags) - return ResponseBeginBlock{ - Tags: tags, - } +func (r *ResponseDeliverTx) MarshalJSON() ([]byte, error) { + s, err := jsonpbMarshaller.MarshalToString(r) + return []byte(s), err } -type ResultCheckTx struct { - Code uint32 `json:"code,omitempty"` - Data []byte `json:"data,omitempty"` - Log string `json:"log,omitempty"` - Info string `json:"info,omitempty"` - GasWanted int64 `json:"gas_wanted,omitempty"` - GasUsed int64 `json:"gas_used,omitempty"` - Tags []cmn.KVPair `json:"tags,omitempty"` - Fee cmn.KI64Pair `json:"fee"` +func (r *ResponseDeliverTx) UnmarshalJSON(b []byte) error { + reader := bytes.NewBuffer(b) + return jsonpbUnmarshaller.Unmarshal(reader, r) } -func FromResultCheckTx(res ResultCheckTx) ResponseCheckTx { - tags := tagsToPointers(res.Tags) - return ResponseCheckTx{ - Code: res.Code, - Data: res.Data, - Log: res.Log, - Info: res.Info, - GasWanted: res.GasWanted, - GasUsed: res.GasUsed, - Tags: tags, - Fee: &res.Fee, - } +func (r *ResponseQuery) MarshalJSON() ([]byte, error) { + s, err := jsonpbMarshaller.MarshalToString(r) + return []byte(s), err } -type ResultDeliverTx struct { - Code uint32 `json:"code,omitempty"` - Data []byte `json:"data,omitempty"` - Log string `json:"log,omitempty"` - Info string `json:"info,omitempty"` - GasWanted int64 `json:"gas_wanted,omitempty"` - GasUsed int64 `json:"gas_used,omitempty"` - Tags []cmn.KVPair `json:"tags,omitempty"` - Fee cmn.KI64Pair `json:"fee"` +func (r *ResponseQuery) UnmarshalJSON(b []byte) error { + reader := bytes.NewBuffer(b) + return jsonpbUnmarshaller.Unmarshal(reader, r) } -func FromResultDeliverTx(res ResultDeliverTx) ResponseDeliverTx { - tags := tagsToPointers(res.Tags) - return ResponseDeliverTx{ - Code: res.Code, - Data: res.Data, - Log: res.Log, - Info: res.Info, - GasWanted: res.GasWanted, - GasUsed: res.GasUsed, - Tags: tags, - Fee: &res.Fee, - } +func (r *ResponseCommit) MarshalJSON() ([]byte, error) { + s, err := jsonpbMarshaller.MarshalToString(r) + return []byte(s), err } -type ResultEndBlock struct { - ValidatorUpdates []Validator `json:"validator_updates"` - ConsensusParamUpdates *ConsensusParams `json:"consensus_param_updates,omitempty"` - Tags []cmn.KVPair `json:"tags,omitempty"` +func (r *ResponseCommit) UnmarshalJSON(b []byte) error { + reader := bytes.NewBuffer(b) + return jsonpbUnmarshaller.Unmarshal(reader, r) } -func FromResultEndBlock(res ResultEndBlock) ResponseEndBlock { - tags := tagsToPointers(res.Tags) - vals := valsToPointers(res.ValidatorUpdates) - return ResponseEndBlock{ - ValidatorUpdates: vals, - ConsensusParamUpdates: res.ConsensusParamUpdates, - Tags: tags, - } +// Some compile time assertions to ensure we don't +// have accidental runtime surprises later on. + +// jsonEncodingRoundTripper ensures that asserted +// interfaces implement both MarshalJSON and UnmarshalJSON +type jsonRoundTripper interface { + json.Marshaler + json.Unmarshaler } -type ResultCommit struct { - // reserve 1 - Data []byte `json:"data,omitempty"` -} - -func FromResultCommit(res ResultCommit) ResponseCommit { - return ResponseCommit(res) -} - -//------------------------------------------------------- - -func tagsToPointers(tags []cmn.KVPair) []*cmn.KVPair { - tagPtrs := make([]*cmn.KVPair, len(tags)) - for i := 0; i < len(tags); i++ { - t := tags[i] - tagPtrs[i] = &t - } - return tagPtrs -} - -func valsToPointers(vals []Validator) []*Validator { - valPtrs := make([]*Validator, len(vals)) - for i := 0; i < len(vals); i++ { - v := vals[i] - valPtrs[i] = &v - } - return valPtrs -} +var _ jsonRoundTripper = (*ResponseCommit)(nil) +var _ jsonRoundTripper = (*ResponseQuery)(nil) +var _ jsonRoundTripper = (*ResponseDeliverTx)(nil) +var _ jsonRoundTripper = (*ResponseCheckTx)(nil) +var _ jsonRoundTripper = (*ResponseSetOption)(nil) diff --git a/types/types.pb.go b/types/types.pb.go index 6f6a8874..e04a4f4b 100644 --- a/types/types.pb.go +++ b/types/types.pb.go @@ -1,4 +1,4 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: types/types.proto /* @@ -46,15 +46,14 @@ It has these top-level messages: //nolint: gas package types -import proto "github.com/golang/protobuf/proto" +import proto "github.com/gogo/protobuf/proto" import fmt "fmt" import math "math" +import _ "github.com/gogo/protobuf/gogoproto" import common "github.com/tendermint/tmlibs/common" -import ( - context "golang.org/x/net/context" - grpc "google.golang.org/grpc" -) +import context "golang.org/x/net/context" +import grpc "google.golang.org/grpc" // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -65,7 +64,7 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package type Request struct { // Types that are valid to be assigned to Value: @@ -86,7 +85,7 @@ type Request struct { func (m *Request) Reset() { *m = Request{} } func (m *Request) String() string { return proto.CompactTextString(m) } func (*Request) ProtoMessage() {} -func (*Request) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } +func (*Request) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{0} } type isRequest_Value interface { isRequest_Value() @@ -244,57 +243,57 @@ func _Request_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { // value switch x := m.Value.(type) { case *Request_Echo: - b.EncodeVarint(2<<3 | proto.WireBytes) + _ = b.EncodeVarint(2<<3 | proto.WireBytes) if err := b.EncodeMessage(x.Echo); err != nil { return err } case *Request_Flush: - b.EncodeVarint(3<<3 | proto.WireBytes) + _ = b.EncodeVarint(3<<3 | proto.WireBytes) if err := b.EncodeMessage(x.Flush); err != nil { return err } case *Request_Info: - b.EncodeVarint(4<<3 | proto.WireBytes) + _ = b.EncodeVarint(4<<3 | proto.WireBytes) if err := b.EncodeMessage(x.Info); err != nil { return err } case *Request_SetOption: - b.EncodeVarint(5<<3 | proto.WireBytes) + _ = b.EncodeVarint(5<<3 | proto.WireBytes) if err := b.EncodeMessage(x.SetOption); err != nil { return err } case *Request_InitChain: - b.EncodeVarint(6<<3 | proto.WireBytes) + _ = b.EncodeVarint(6<<3 | proto.WireBytes) if err := b.EncodeMessage(x.InitChain); err != nil { return err } case *Request_Query: - b.EncodeVarint(7<<3 | proto.WireBytes) + _ = b.EncodeVarint(7<<3 | proto.WireBytes) if err := b.EncodeMessage(x.Query); err != nil { return err } case *Request_BeginBlock: - b.EncodeVarint(8<<3 | proto.WireBytes) + _ = b.EncodeVarint(8<<3 | proto.WireBytes) if err := b.EncodeMessage(x.BeginBlock); err != nil { return err } case *Request_CheckTx: - b.EncodeVarint(9<<3 | proto.WireBytes) + _ = b.EncodeVarint(9<<3 | proto.WireBytes) if err := b.EncodeMessage(x.CheckTx); err != nil { return err } case *Request_DeliverTx: - b.EncodeVarint(19<<3 | proto.WireBytes) + _ = b.EncodeVarint(19<<3 | proto.WireBytes) if err := b.EncodeMessage(x.DeliverTx); err != nil { return err } case *Request_EndBlock: - b.EncodeVarint(11<<3 | proto.WireBytes) + _ = b.EncodeVarint(11<<3 | proto.WireBytes) if err := b.EncodeMessage(x.EndBlock); err != nil { return err } case *Request_Commit: - b.EncodeVarint(12<<3 | proto.WireBytes) + _ = b.EncodeVarint(12<<3 | proto.WireBytes) if err := b.EncodeMessage(x.Commit); err != nil { return err } @@ -468,13 +467,13 @@ func _Request_OneofSizer(msg proto.Message) (n int) { } type RequestEcho struct { - Message string `protobuf:"bytes,1,opt,name=message" json:"message,omitempty"` + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` } func (m *RequestEcho) Reset() { *m = RequestEcho{} } func (m *RequestEcho) String() string { return proto.CompactTextString(m) } func (*RequestEcho) ProtoMessage() {} -func (*RequestEcho) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } +func (*RequestEcho) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{1} } func (m *RequestEcho) GetMessage() string { if m != nil { @@ -489,16 +488,16 @@ type RequestFlush struct { func (m *RequestFlush) Reset() { *m = RequestFlush{} } func (m *RequestFlush) String() string { return proto.CompactTextString(m) } func (*RequestFlush) ProtoMessage() {} -func (*RequestFlush) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } +func (*RequestFlush) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{2} } type RequestInfo struct { - Version string `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` + Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` } func (m *RequestInfo) Reset() { *m = RequestInfo{} } func (m *RequestInfo) String() string { return proto.CompactTextString(m) } func (*RequestInfo) ProtoMessage() {} -func (*RequestInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } +func (*RequestInfo) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{3} } func (m *RequestInfo) GetVersion() string { if m != nil { @@ -509,14 +508,14 @@ func (m *RequestInfo) GetVersion() string { // nondeterministic type RequestSetOption struct { - Key string `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` - Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` } func (m *RequestSetOption) Reset() { *m = RequestSetOption{} } func (m *RequestSetOption) String() string { return proto.CompactTextString(m) } func (*RequestSetOption) ProtoMessage() {} -func (*RequestSetOption) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } +func (*RequestSetOption) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{4} } func (m *RequestSetOption) GetKey() string { if m != nil { @@ -533,16 +532,16 @@ func (m *RequestSetOption) GetValue() string { } type RequestInitChain struct { - Validators []*Validator `protobuf:"bytes,1,rep,name=validators" json:"validators,omitempty"` - GenesisBytes []byte `protobuf:"bytes,2,opt,name=genesis_bytes,json=genesisBytes,proto3" json:"genesis_bytes,omitempty"` + Validators []Validator `protobuf:"bytes,1,rep,name=validators" json:"validators"` + GenesisBytes []byte `protobuf:"bytes,2,opt,name=genesis_bytes,json=genesisBytes,proto3" json:"genesis_bytes,omitempty"` } func (m *RequestInitChain) Reset() { *m = RequestInitChain{} } func (m *RequestInitChain) String() string { return proto.CompactTextString(m) } func (*RequestInitChain) ProtoMessage() {} -func (*RequestInitChain) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } +func (*RequestInitChain) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{5} } -func (m *RequestInitChain) GetValidators() []*Validator { +func (m *RequestInitChain) GetValidators() []Validator { if m != nil { return m.Validators } @@ -558,15 +557,15 @@ func (m *RequestInitChain) GetGenesisBytes() []byte { type RequestQuery struct { Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` - Path string `protobuf:"bytes,2,opt,name=path" json:"path,omitempty"` - Height int64 `protobuf:"varint,3,opt,name=height" json:"height,omitempty"` - Prove bool `protobuf:"varint,4,opt,name=prove" json:"prove,omitempty"` + Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + Height int64 `protobuf:"varint,3,opt,name=height,proto3" json:"height,omitempty"` + Prove bool `protobuf:"varint,4,opt,name=prove,proto3" json:"prove,omitempty"` } func (m *RequestQuery) Reset() { *m = RequestQuery{} } func (m *RequestQuery) String() string { return proto.CompactTextString(m) } func (*RequestQuery) ProtoMessage() {} -func (*RequestQuery) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } +func (*RequestQuery) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{6} } func (m *RequestQuery) GetData() []byte { if m != nil { @@ -598,15 +597,15 @@ func (m *RequestQuery) GetProve() bool { type RequestBeginBlock struct { Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` - Header *Header `protobuf:"bytes,2,opt,name=header" json:"header,omitempty"` + Header Header `protobuf:"bytes,2,opt,name=header" json:"header"` Validators []*SigningValidator `protobuf:"bytes,3,rep,name=validators" json:"validators,omitempty"` - ByzantineValidators []*Evidence `protobuf:"bytes,4,rep,name=byzantine_validators,json=byzantineValidators" json:"byzantine_validators,omitempty"` + ByzantineValidators []Evidence `protobuf:"bytes,4,rep,name=byzantine_validators,json=byzantineValidators" json:"byzantine_validators"` } func (m *RequestBeginBlock) Reset() { *m = RequestBeginBlock{} } func (m *RequestBeginBlock) String() string { return proto.CompactTextString(m) } func (*RequestBeginBlock) ProtoMessage() {} -func (*RequestBeginBlock) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } +func (*RequestBeginBlock) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{7} } func (m *RequestBeginBlock) GetHash() []byte { if m != nil { @@ -615,11 +614,11 @@ func (m *RequestBeginBlock) GetHash() []byte { return nil } -func (m *RequestBeginBlock) GetHeader() *Header { +func (m *RequestBeginBlock) GetHeader() Header { if m != nil { return m.Header } - return nil + return Header{} } func (m *RequestBeginBlock) GetValidators() []*SigningValidator { @@ -629,7 +628,7 @@ func (m *RequestBeginBlock) GetValidators() []*SigningValidator { return nil } -func (m *RequestBeginBlock) GetByzantineValidators() []*Evidence { +func (m *RequestBeginBlock) GetByzantineValidators() []Evidence { if m != nil { return m.ByzantineValidators } @@ -643,7 +642,7 @@ type RequestCheckTx struct { func (m *RequestCheckTx) Reset() { *m = RequestCheckTx{} } func (m *RequestCheckTx) String() string { return proto.CompactTextString(m) } func (*RequestCheckTx) ProtoMessage() {} -func (*RequestCheckTx) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } +func (*RequestCheckTx) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{8} } func (m *RequestCheckTx) GetTx() []byte { if m != nil { @@ -659,7 +658,7 @@ type RequestDeliverTx struct { func (m *RequestDeliverTx) Reset() { *m = RequestDeliverTx{} } func (m *RequestDeliverTx) String() string { return proto.CompactTextString(m) } func (*RequestDeliverTx) ProtoMessage() {} -func (*RequestDeliverTx) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } +func (*RequestDeliverTx) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{9} } func (m *RequestDeliverTx) GetTx() []byte { if m != nil { @@ -669,13 +668,13 @@ func (m *RequestDeliverTx) GetTx() []byte { } type RequestEndBlock struct { - Height int64 `protobuf:"varint,1,opt,name=height" json:"height,omitempty"` + Height int64 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"` } func (m *RequestEndBlock) Reset() { *m = RequestEndBlock{} } func (m *RequestEndBlock) String() string { return proto.CompactTextString(m) } func (*RequestEndBlock) ProtoMessage() {} -func (*RequestEndBlock) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } +func (*RequestEndBlock) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{10} } func (m *RequestEndBlock) GetHeight() int64 { if m != nil { @@ -690,7 +689,7 @@ type RequestCommit struct { func (m *RequestCommit) Reset() { *m = RequestCommit{} } func (m *RequestCommit) String() string { return proto.CompactTextString(m) } func (*RequestCommit) ProtoMessage() {} -func (*RequestCommit) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } +func (*RequestCommit) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{11} } type Response struct { // Types that are valid to be assigned to Value: @@ -712,7 +711,7 @@ type Response struct { func (m *Response) Reset() { *m = Response{} } func (m *Response) String() string { return proto.CompactTextString(m) } func (*Response) ProtoMessage() {} -func (*Response) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } +func (*Response) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{12} } type isResponse_Value interface { isResponse_Value() @@ -882,62 +881,62 @@ func _Response_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { // value switch x := m.Value.(type) { case *Response_Exception: - b.EncodeVarint(1<<3 | proto.WireBytes) + _ = b.EncodeVarint(1<<3 | proto.WireBytes) if err := b.EncodeMessage(x.Exception); err != nil { return err } case *Response_Echo: - b.EncodeVarint(2<<3 | proto.WireBytes) + _ = b.EncodeVarint(2<<3 | proto.WireBytes) if err := b.EncodeMessage(x.Echo); err != nil { return err } case *Response_Flush: - b.EncodeVarint(3<<3 | proto.WireBytes) + _ = b.EncodeVarint(3<<3 | proto.WireBytes) if err := b.EncodeMessage(x.Flush); err != nil { return err } case *Response_Info: - b.EncodeVarint(4<<3 | proto.WireBytes) + _ = b.EncodeVarint(4<<3 | proto.WireBytes) if err := b.EncodeMessage(x.Info); err != nil { return err } case *Response_SetOption: - b.EncodeVarint(5<<3 | proto.WireBytes) + _ = b.EncodeVarint(5<<3 | proto.WireBytes) if err := b.EncodeMessage(x.SetOption); err != nil { return err } case *Response_InitChain: - b.EncodeVarint(6<<3 | proto.WireBytes) + _ = b.EncodeVarint(6<<3 | proto.WireBytes) if err := b.EncodeMessage(x.InitChain); err != nil { return err } case *Response_Query: - b.EncodeVarint(7<<3 | proto.WireBytes) + _ = b.EncodeVarint(7<<3 | proto.WireBytes) if err := b.EncodeMessage(x.Query); err != nil { return err } case *Response_BeginBlock: - b.EncodeVarint(8<<3 | proto.WireBytes) + _ = b.EncodeVarint(8<<3 | proto.WireBytes) if err := b.EncodeMessage(x.BeginBlock); err != nil { return err } case *Response_CheckTx: - b.EncodeVarint(9<<3 | proto.WireBytes) + _ = b.EncodeVarint(9<<3 | proto.WireBytes) if err := b.EncodeMessage(x.CheckTx); err != nil { return err } case *Response_DeliverTx: - b.EncodeVarint(10<<3 | proto.WireBytes) + _ = b.EncodeVarint(10<<3 | proto.WireBytes) if err := b.EncodeMessage(x.DeliverTx); err != nil { return err } case *Response_EndBlock: - b.EncodeVarint(11<<3 | proto.WireBytes) + _ = b.EncodeVarint(11<<3 | proto.WireBytes) if err := b.EncodeMessage(x.EndBlock); err != nil { return err } case *Response_Commit: - b.EncodeVarint(12<<3 | proto.WireBytes) + _ = b.EncodeVarint(12<<3 | proto.WireBytes) if err := b.EncodeMessage(x.Commit); err != nil { return err } @@ -1125,13 +1124,13 @@ func _Response_OneofSizer(msg proto.Message) (n int) { // nondeterministic type ResponseException struct { - Error string `protobuf:"bytes,1,opt,name=error" json:"error,omitempty"` + Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` } func (m *ResponseException) Reset() { *m = ResponseException{} } func (m *ResponseException) String() string { return proto.CompactTextString(m) } func (*ResponseException) ProtoMessage() {} -func (*ResponseException) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } +func (*ResponseException) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{13} } func (m *ResponseException) GetError() string { if m != nil { @@ -1141,13 +1140,13 @@ func (m *ResponseException) GetError() string { } type ResponseEcho struct { - Message string `protobuf:"bytes,1,opt,name=message" json:"message,omitempty"` + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` } func (m *ResponseEcho) Reset() { *m = ResponseEcho{} } func (m *ResponseEcho) String() string { return proto.CompactTextString(m) } func (*ResponseEcho) ProtoMessage() {} -func (*ResponseEcho) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } +func (*ResponseEcho) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{14} } func (m *ResponseEcho) GetMessage() string { if m != nil { @@ -1162,19 +1161,19 @@ type ResponseFlush struct { func (m *ResponseFlush) Reset() { *m = ResponseFlush{} } func (m *ResponseFlush) String() string { return proto.CompactTextString(m) } func (*ResponseFlush) ProtoMessage() {} -func (*ResponseFlush) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } +func (*ResponseFlush) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{15} } type ResponseInfo struct { - Data string `protobuf:"bytes,1,opt,name=data" json:"data,omitempty"` - Version string `protobuf:"bytes,2,opt,name=version" json:"version,omitempty"` - LastBlockHeight int64 `protobuf:"varint,3,opt,name=last_block_height,json=lastBlockHeight" json:"last_block_height,omitempty"` + Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + LastBlockHeight int64 `protobuf:"varint,3,opt,name=last_block_height,json=lastBlockHeight,proto3" json:"last_block_height,omitempty"` LastBlockAppHash []byte `protobuf:"bytes,4,opt,name=last_block_app_hash,json=lastBlockAppHash,proto3" json:"last_block_app_hash,omitempty"` } func (m *ResponseInfo) Reset() { *m = ResponseInfo{} } func (m *ResponseInfo) String() string { return proto.CompactTextString(m) } func (*ResponseInfo) ProtoMessage() {} -func (*ResponseInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } +func (*ResponseInfo) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{16} } func (m *ResponseInfo) GetData() string { if m != nil { @@ -1206,16 +1205,16 @@ func (m *ResponseInfo) GetLastBlockAppHash() []byte { // nondeterministic type ResponseSetOption struct { - Code uint32 `protobuf:"varint,1,opt,name=code" json:"code,omitempty"` + Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` // bytes data = 2; - Log string `protobuf:"bytes,3,opt,name=log" json:"log,omitempty"` - Info string `protobuf:"bytes,4,opt,name=info" json:"info,omitempty"` + Log string `protobuf:"bytes,3,opt,name=log,proto3" json:"log,omitempty"` + Info string `protobuf:"bytes,4,opt,name=info,proto3" json:"info,omitempty"` } func (m *ResponseSetOption) Reset() { *m = ResponseSetOption{} } func (m *ResponseSetOption) String() string { return proto.CompactTextString(m) } func (*ResponseSetOption) ProtoMessage() {} -func (*ResponseSetOption) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } +func (*ResponseSetOption) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{17} } func (m *ResponseSetOption) GetCode() uint32 { if m != nil { @@ -1239,15 +1238,15 @@ func (m *ResponseSetOption) GetInfo() string { } type ResponseInitChain struct { - Validators []*Validator `protobuf:"bytes,1,rep,name=validators" json:"validators,omitempty"` + Validators []Validator `protobuf:"bytes,1,rep,name=validators" json:"validators"` } func (m *ResponseInitChain) Reset() { *m = ResponseInitChain{} } func (m *ResponseInitChain) String() string { return proto.CompactTextString(m) } func (*ResponseInitChain) ProtoMessage() {} -func (*ResponseInitChain) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } +func (*ResponseInitChain) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{18} } -func (m *ResponseInitChain) GetValidators() []*Validator { +func (m *ResponseInitChain) GetValidators() []Validator { if m != nil { return m.Validators } @@ -1255,21 +1254,21 @@ func (m *ResponseInitChain) GetValidators() []*Validator { } type ResponseQuery struct { - Code uint32 `protobuf:"varint,1,opt,name=code" json:"code,omitempty"` + Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` // bytes data = 2; // use "value" instead. - Log string `protobuf:"bytes,3,opt,name=log" json:"log,omitempty"` - Info string `protobuf:"bytes,4,opt,name=info" json:"info,omitempty"` - Index int64 `protobuf:"varint,5,opt,name=index" json:"index,omitempty"` + Log string `protobuf:"bytes,3,opt,name=log,proto3" json:"log,omitempty"` + Info string `protobuf:"bytes,4,opt,name=info,proto3" json:"info,omitempty"` + Index int64 `protobuf:"varint,5,opt,name=index,proto3" json:"index,omitempty"` Key []byte `protobuf:"bytes,6,opt,name=key,proto3" json:"key,omitempty"` Value []byte `protobuf:"bytes,7,opt,name=value,proto3" json:"value,omitempty"` Proof []byte `protobuf:"bytes,8,opt,name=proof,proto3" json:"proof,omitempty"` - Height int64 `protobuf:"varint,9,opt,name=height" json:"height,omitempty"` + Height int64 `protobuf:"varint,9,opt,name=height,proto3" json:"height,omitempty"` } func (m *ResponseQuery) Reset() { *m = ResponseQuery{} } func (m *ResponseQuery) String() string { return proto.CompactTextString(m) } func (*ResponseQuery) ProtoMessage() {} -func (*ResponseQuery) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } +func (*ResponseQuery) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{19} } func (m *ResponseQuery) GetCode() uint32 { if m != nil { @@ -1328,15 +1327,15 @@ func (m *ResponseQuery) GetHeight() int64 { } type ResponseBeginBlock struct { - Tags []*common.KVPair `protobuf:"bytes,1,rep,name=tags" json:"tags,omitempty"` + Tags []common.KVPair `protobuf:"bytes,1,rep,name=tags" json:"tags,omitempty"` } func (m *ResponseBeginBlock) Reset() { *m = ResponseBeginBlock{} } func (m *ResponseBeginBlock) String() string { return proto.CompactTextString(m) } func (*ResponseBeginBlock) ProtoMessage() {} -func (*ResponseBeginBlock) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } +func (*ResponseBeginBlock) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{20} } -func (m *ResponseBeginBlock) GetTags() []*common.KVPair { +func (m *ResponseBeginBlock) GetTags() []common.KVPair { if m != nil { return m.Tags } @@ -1344,20 +1343,20 @@ func (m *ResponseBeginBlock) GetTags() []*common.KVPair { } type ResponseCheckTx struct { - Code uint32 `protobuf:"varint,1,opt,name=code" json:"code,omitempty"` - Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` - Log string `protobuf:"bytes,3,opt,name=log" json:"log,omitempty"` - Info string `protobuf:"bytes,4,opt,name=info" json:"info,omitempty"` - GasWanted int64 `protobuf:"varint,5,opt,name=gas_wanted,json=gasWanted" json:"gas_wanted,omitempty"` - GasUsed int64 `protobuf:"varint,6,opt,name=gas_used,json=gasUsed" json:"gas_used,omitempty"` - Tags []*common.KVPair `protobuf:"bytes,7,rep,name=tags" json:"tags,omitempty"` - Fee *common.KI64Pair `protobuf:"bytes,8,opt,name=fee" json:"fee,omitempty"` + Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` + Log string `protobuf:"bytes,3,opt,name=log,proto3" json:"log,omitempty"` + Info string `protobuf:"bytes,4,opt,name=info,proto3" json:"info,omitempty"` + GasWanted int64 `protobuf:"varint,5,opt,name=gas_wanted,json=gasWanted,proto3" json:"gas_wanted,omitempty"` + GasUsed int64 `protobuf:"varint,6,opt,name=gas_used,json=gasUsed,proto3" json:"gas_used,omitempty"` + Tags []common.KVPair `protobuf:"bytes,7,rep,name=tags" json:"tags,omitempty"` + Fee common.KI64Pair `protobuf:"bytes,8,opt,name=fee" json:"fee"` } func (m *ResponseCheckTx) Reset() { *m = ResponseCheckTx{} } func (m *ResponseCheckTx) String() string { return proto.CompactTextString(m) } func (*ResponseCheckTx) ProtoMessage() {} -func (*ResponseCheckTx) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } +func (*ResponseCheckTx) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{21} } func (m *ResponseCheckTx) GetCode() uint32 { if m != nil { @@ -1401,35 +1400,35 @@ func (m *ResponseCheckTx) GetGasUsed() int64 { return 0 } -func (m *ResponseCheckTx) GetTags() []*common.KVPair { +func (m *ResponseCheckTx) GetTags() []common.KVPair { if m != nil { return m.Tags } return nil } -func (m *ResponseCheckTx) GetFee() *common.KI64Pair { +func (m *ResponseCheckTx) GetFee() common.KI64Pair { if m != nil { return m.Fee } - return nil + return common.KI64Pair{} } type ResponseDeliverTx struct { - Code uint32 `protobuf:"varint,1,opt,name=code" json:"code,omitempty"` - Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` - Log string `protobuf:"bytes,3,opt,name=log" json:"log,omitempty"` - Info string `protobuf:"bytes,4,opt,name=info" json:"info,omitempty"` - GasWanted int64 `protobuf:"varint,5,opt,name=gas_wanted,json=gasWanted" json:"gas_wanted,omitempty"` - GasUsed int64 `protobuf:"varint,6,opt,name=gas_used,json=gasUsed" json:"gas_used,omitempty"` - Tags []*common.KVPair `protobuf:"bytes,7,rep,name=tags" json:"tags,omitempty"` - Fee *common.KI64Pair `protobuf:"bytes,8,opt,name=fee" json:"fee,omitempty"` + Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` + Log string `protobuf:"bytes,3,opt,name=log,proto3" json:"log,omitempty"` + Info string `protobuf:"bytes,4,opt,name=info,proto3" json:"info,omitempty"` + GasWanted int64 `protobuf:"varint,5,opt,name=gas_wanted,json=gasWanted,proto3" json:"gas_wanted,omitempty"` + GasUsed int64 `protobuf:"varint,6,opt,name=gas_used,json=gasUsed,proto3" json:"gas_used,omitempty"` + Tags []common.KVPair `protobuf:"bytes,7,rep,name=tags" json:"tags,omitempty"` + Fee common.KI64Pair `protobuf:"bytes,8,opt,name=fee" json:"fee"` } func (m *ResponseDeliverTx) Reset() { *m = ResponseDeliverTx{} } func (m *ResponseDeliverTx) String() string { return proto.CompactTextString(m) } func (*ResponseDeliverTx) ProtoMessage() {} -func (*ResponseDeliverTx) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } +func (*ResponseDeliverTx) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{22} } func (m *ResponseDeliverTx) GetCode() uint32 { if m != nil { @@ -1473,32 +1472,32 @@ func (m *ResponseDeliverTx) GetGasUsed() int64 { return 0 } -func (m *ResponseDeliverTx) GetTags() []*common.KVPair { +func (m *ResponseDeliverTx) GetTags() []common.KVPair { if m != nil { return m.Tags } return nil } -func (m *ResponseDeliverTx) GetFee() *common.KI64Pair { +func (m *ResponseDeliverTx) GetFee() common.KI64Pair { if m != nil { return m.Fee } - return nil + return common.KI64Pair{} } type ResponseEndBlock struct { - ValidatorUpdates []*Validator `protobuf:"bytes,1,rep,name=validator_updates,json=validatorUpdates" json:"validator_updates,omitempty"` + ValidatorUpdates []Validator `protobuf:"bytes,1,rep,name=validator_updates,json=validatorUpdates" json:"validator_updates"` ConsensusParamUpdates *ConsensusParams `protobuf:"bytes,2,opt,name=consensus_param_updates,json=consensusParamUpdates" json:"consensus_param_updates,omitempty"` - Tags []*common.KVPair `protobuf:"bytes,3,rep,name=tags" json:"tags,omitempty"` + Tags []common.KVPair `protobuf:"bytes,3,rep,name=tags" json:"tags,omitempty"` } func (m *ResponseEndBlock) Reset() { *m = ResponseEndBlock{} } func (m *ResponseEndBlock) String() string { return proto.CompactTextString(m) } func (*ResponseEndBlock) ProtoMessage() {} -func (*ResponseEndBlock) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } +func (*ResponseEndBlock) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{23} } -func (m *ResponseEndBlock) GetValidatorUpdates() []*Validator { +func (m *ResponseEndBlock) GetValidatorUpdates() []Validator { if m != nil { return m.ValidatorUpdates } @@ -1512,7 +1511,7 @@ func (m *ResponseEndBlock) GetConsensusParamUpdates() *ConsensusParams { return nil } -func (m *ResponseEndBlock) GetTags() []*common.KVPair { +func (m *ResponseEndBlock) GetTags() []common.KVPair { if m != nil { return m.Tags } @@ -1527,7 +1526,7 @@ type ResponseCommit struct { func (m *ResponseCommit) Reset() { *m = ResponseCommit{} } func (m *ResponseCommit) String() string { return proto.CompactTextString(m) } func (*ResponseCommit) ProtoMessage() {} -func (*ResponseCommit) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } +func (*ResponseCommit) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{24} } func (m *ResponseCommit) GetData() []byte { if m != nil { @@ -1547,7 +1546,7 @@ type ConsensusParams struct { func (m *ConsensusParams) Reset() { *m = ConsensusParams{} } func (m *ConsensusParams) String() string { return proto.CompactTextString(m) } func (*ConsensusParams) ProtoMessage() {} -func (*ConsensusParams) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } +func (*ConsensusParams) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{25} } func (m *ConsensusParams) GetBlockSize() *BlockSize { if m != nil { @@ -1572,15 +1571,15 @@ func (m *ConsensusParams) GetBlockGossip() *BlockGossip { // BlockSize contain limits on the block size. type BlockSize struct { - MaxBytes int32 `protobuf:"varint,1,opt,name=max_bytes,json=maxBytes" json:"max_bytes,omitempty"` - MaxTxs int32 `protobuf:"varint,2,opt,name=max_txs,json=maxTxs" json:"max_txs,omitempty"` - MaxGas int64 `protobuf:"varint,3,opt,name=max_gas,json=maxGas" json:"max_gas,omitempty"` + MaxBytes int32 `protobuf:"varint,1,opt,name=max_bytes,json=maxBytes,proto3" json:"max_bytes,omitempty"` + MaxTxs int32 `protobuf:"varint,2,opt,name=max_txs,json=maxTxs,proto3" json:"max_txs,omitempty"` + MaxGas int64 `protobuf:"varint,3,opt,name=max_gas,json=maxGas,proto3" json:"max_gas,omitempty"` } func (m *BlockSize) Reset() { *m = BlockSize{} } func (m *BlockSize) String() string { return proto.CompactTextString(m) } func (*BlockSize) ProtoMessage() {} -func (*BlockSize) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } +func (*BlockSize) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{26} } func (m *BlockSize) GetMaxBytes() int32 { if m != nil { @@ -1605,14 +1604,14 @@ func (m *BlockSize) GetMaxGas() int64 { // TxSize contain limits on the tx size. type TxSize struct { - MaxBytes int32 `protobuf:"varint,1,opt,name=max_bytes,json=maxBytes" json:"max_bytes,omitempty"` - MaxGas int64 `protobuf:"varint,2,opt,name=max_gas,json=maxGas" json:"max_gas,omitempty"` + MaxBytes int32 `protobuf:"varint,1,opt,name=max_bytes,json=maxBytes,proto3" json:"max_bytes,omitempty"` + MaxGas int64 `protobuf:"varint,2,opt,name=max_gas,json=maxGas,proto3" json:"max_gas,omitempty"` } func (m *TxSize) Reset() { *m = TxSize{} } func (m *TxSize) String() string { return proto.CompactTextString(m) } func (*TxSize) ProtoMessage() {} -func (*TxSize) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } +func (*TxSize) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{27} } func (m *TxSize) GetMaxBytes() int32 { if m != nil { @@ -1632,13 +1631,13 @@ func (m *TxSize) GetMaxGas() int64 { // elements of how blocks are gossiped type BlockGossip struct { // Note: must not be 0 - BlockPartSizeBytes int32 `protobuf:"varint,1,opt,name=block_part_size_bytes,json=blockPartSizeBytes" json:"block_part_size_bytes,omitempty"` + BlockPartSizeBytes int32 `protobuf:"varint,1,opt,name=block_part_size_bytes,json=blockPartSizeBytes,proto3" json:"block_part_size_bytes,omitempty"` } func (m *BlockGossip) Reset() { *m = BlockGossip{} } func (m *BlockGossip) String() string { return proto.CompactTextString(m) } func (*BlockGossip) ProtoMessage() {} -func (*BlockGossip) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } +func (*BlockGossip) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{28} } func (m *BlockGossip) GetBlockPartSizeBytes() int32 { if m != nil { @@ -1650,12 +1649,12 @@ func (m *BlockGossip) GetBlockPartSizeBytes() int32 { // just the minimum the app might need type Header struct { // basics - ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId" json:"chain_id,omitempty"` - Height int64 `protobuf:"varint,2,opt,name=height" json:"height,omitempty"` - Time int64 `protobuf:"varint,3,opt,name=time" json:"time,omitempty"` + ChainID string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + Height int64 `protobuf:"varint,2,opt,name=height,proto3" json:"height,omitempty"` + Time int64 `protobuf:"varint,3,opt,name=time,proto3" json:"time,omitempty"` // txs - NumTxs int32 `protobuf:"varint,4,opt,name=num_txs,json=numTxs" json:"num_txs,omitempty"` - TotalTxs int64 `protobuf:"varint,5,opt,name=total_txs,json=totalTxs" json:"total_txs,omitempty"` + NumTxs int32 `protobuf:"varint,4,opt,name=num_txs,json=numTxs,proto3" json:"num_txs,omitempty"` + TotalTxs int64 `protobuf:"varint,5,opt,name=total_txs,json=totalTxs,proto3" json:"total_txs,omitempty"` // hashes LastBlockHash []byte `protobuf:"bytes,6,opt,name=last_block_hash,json=lastBlockHash,proto3" json:"last_block_hash,omitempty"` AppHash []byte `protobuf:"bytes,7,opt,name=app_hash,json=appHash,proto3" json:"app_hash,omitempty"` @@ -1666,11 +1665,11 @@ type Header struct { func (m *Header) Reset() { *m = Header{} } func (m *Header) String() string { return proto.CompactTextString(m) } func (*Header) ProtoMessage() {} -func (*Header) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } +func (*Header) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{29} } -func (m *Header) GetChainId() string { +func (m *Header) GetChainID() string { if m != nil { - return m.ChainId + return m.ChainID } return "" } @@ -1726,15 +1725,15 @@ func (m *Header) GetProposer() *Validator { // Validator type Validator struct { - Address []byte `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - PubKey *PubKey `protobuf:"bytes,2,opt,name=pub_key,json=pubKey" json:"pub_key,omitempty"` - Power int64 `protobuf:"varint,3,opt,name=power" json:"power,omitempty"` + Address []byte `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + PubKey PubKey `protobuf:"bytes,2,opt,name=pub_key,json=pubKey" json:"pub_key"` + Power int64 `protobuf:"varint,3,opt,name=power,proto3" json:"power,omitempty"` } func (m *Validator) Reset() { *m = Validator{} } func (m *Validator) String() string { return proto.CompactTextString(m) } func (*Validator) ProtoMessage() {} -func (*Validator) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } +func (*Validator) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{30} } func (m *Validator) GetAddress() []byte { if m != nil { @@ -1743,11 +1742,11 @@ func (m *Validator) GetAddress() []byte { return nil } -func (m *Validator) GetPubKey() *PubKey { +func (m *Validator) GetPubKey() PubKey { if m != nil { return m.PubKey } - return nil + return PubKey{} } func (m *Validator) GetPower() int64 { @@ -1760,13 +1759,13 @@ func (m *Validator) GetPower() int64 { // Validator with an extra bool type SigningValidator struct { Validator *Validator `protobuf:"bytes,1,opt,name=validator" json:"validator,omitempty"` - SignedLastBlock bool `protobuf:"varint,2,opt,name=signed_last_block,json=signedLastBlock" json:"signed_last_block,omitempty"` + SignedLastBlock bool `protobuf:"varint,2,opt,name=signed_last_block,json=signedLastBlock,proto3" json:"signed_last_block,omitempty"` } func (m *SigningValidator) Reset() { *m = SigningValidator{} } func (m *SigningValidator) String() string { return proto.CompactTextString(m) } func (*SigningValidator) ProtoMessage() {} -func (*SigningValidator) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } +func (*SigningValidator) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{31} } func (m *SigningValidator) GetValidator() *Validator { if m != nil { @@ -1783,14 +1782,14 @@ func (m *SigningValidator) GetSignedLastBlock() bool { } type PubKey struct { - Type string `protobuf:"bytes,1,opt,name=type" json:"type,omitempty"` + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` } func (m *PubKey) Reset() { *m = PubKey{} } func (m *PubKey) String() string { return proto.CompactTextString(m) } func (*PubKey) ProtoMessage() {} -func (*PubKey) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } +func (*PubKey) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{32} } func (m *PubKey) GetType() string { if m != nil { @@ -1807,17 +1806,17 @@ func (m *PubKey) GetData() []byte { } type Evidence struct { - Type string `protobuf:"bytes,1,opt,name=type" json:"type,omitempty"` + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` Validator *Validator `protobuf:"bytes,2,opt,name=validator" json:"validator,omitempty"` - Height int64 `protobuf:"varint,3,opt,name=height" json:"height,omitempty"` - Time int64 `protobuf:"varint,4,opt,name=time" json:"time,omitempty"` - TotalVotingPower int64 `protobuf:"varint,5,opt,name=total_voting_power,json=totalVotingPower" json:"total_voting_power,omitempty"` + Height int64 `protobuf:"varint,3,opt,name=height,proto3" json:"height,omitempty"` + Time int64 `protobuf:"varint,4,opt,name=time,proto3" json:"time,omitempty"` + TotalVotingPower int64 `protobuf:"varint,5,opt,name=total_voting_power,json=totalVotingPower,proto3" json:"total_voting_power,omitempty"` } func (m *Evidence) Reset() { *m = Evidence{} } func (m *Evidence) String() string { return proto.CompactTextString(m) } func (*Evidence) ProtoMessage() {} -func (*Evidence) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} } +func (*Evidence) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{33} } func (m *Evidence) GetType() string { if m != nil { @@ -2293,116 +2292,120 @@ var _ABCIApplication_serviceDesc = grpc.ServiceDesc{ Metadata: "types/types.proto", } -func init() { proto.RegisterFile("types/types.proto", fileDescriptor0) } +func init() { proto.RegisterFile("types/types.proto", fileDescriptorTypes) } -var fileDescriptor0 = []byte{ - // 1716 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0x4b, 0x73, 0x1b, 0xc7, - 0x11, 0x26, 0xde, 0xd8, 0xe6, 0x03, 0xe0, 0x90, 0x14, 0x21, 0xa8, 0x52, 0xc5, 0xda, 0x24, 0x0a, - 0x99, 0x30, 0x84, 0x42, 0x45, 0x0a, 0x15, 0x25, 0xaa, 0x90, 0x0c, 0x23, 0xb0, 0x94, 0x07, 0xb3, - 0x7a, 0xb8, 0xca, 0x17, 0xd4, 0x60, 0x77, 0xb8, 0xd8, 0x12, 0xb0, 0xbb, 0xda, 0x19, 0x50, 0xa0, - 0x7e, 0x83, 0xee, 0x3e, 0xfb, 0xe6, 0x3f, 0xe0, 0x9f, 0x60, 0x5f, 0xfc, 0x2b, 0x5c, 0xfe, 0x0f, - 0x3e, 0xbb, 0xa6, 0x67, 0xdf, 0xdc, 0x95, 0x55, 0xf6, 0xcd, 0x17, 0x60, 0x66, 0xfa, 0xb1, 0xdd, - 0xbd, 0xdd, 0x5f, 0xf7, 0x0e, 0xac, 0x8b, 0x6b, 0x9f, 0xf1, 0x01, 0xfe, 0x1e, 0xf8, 0x81, 0x27, - 0x3c, 0xd2, 0xc0, 0x4d, 0x7f, 0x60, 0x3b, 0x62, 0x32, 0x1f, 0x1f, 0x98, 0xde, 0x6c, 0x20, 0x98, - 0x6b, 0xb1, 0x60, 0xe6, 0xb8, 0x62, 0x20, 0x66, 0x53, 0x67, 0xcc, 0x07, 0xa6, 0x37, 0x9b, 0x79, - 0x6e, 0x5a, 0x4e, 0xff, 0xba, 0x0e, 0x2d, 0x83, 0xbd, 0x99, 0x33, 0x2e, 0xc8, 0x2e, 0xd4, 0x99, - 0x39, 0xf1, 0x7a, 0xd5, 0x9d, 0xca, 0xee, 0xf2, 0x21, 0x39, 0x50, 0x7c, 0x21, 0xf5, 0xcc, 0x9c, - 0x78, 0xc3, 0x25, 0x03, 0x39, 0xc8, 0x1f, 0xa0, 0x71, 0x39, 0x9d, 0xf3, 0x49, 0xaf, 0x86, 0xac, - 0x1b, 0x59, 0xd6, 0x7f, 0x49, 0xd2, 0x70, 0xc9, 0x50, 0x3c, 0x52, 0xad, 0xe3, 0x5e, 0x7a, 0xbd, - 0x7a, 0x91, 0xda, 0x73, 0xf7, 0x12, 0xd5, 0x4a, 0x0e, 0x72, 0x04, 0xc0, 0x99, 0x18, 0x79, 0xbe, - 0x70, 0x3c, 0xb7, 0xd7, 0x40, 0xfe, 0xed, 0x2c, 0xff, 0x73, 0x26, 0xfe, 0x87, 0xe4, 0xe1, 0x92, - 0xa1, 0xf1, 0x68, 0x23, 0x25, 0x1d, 0xd7, 0x11, 0x23, 0x73, 0x42, 0x1d, 0xb7, 0xd7, 0x2c, 0x92, - 0x3c, 0x77, 0x1d, 0x71, 0x2a, 0xc9, 0x52, 0xd2, 0x89, 0x36, 0xd2, 0x95, 0x37, 0x73, 0x16, 0x5c, - 0xf7, 0x5a, 0x45, 0xae, 0xfc, 0x5f, 0x92, 0xa4, 0x2b, 0xc8, 0x43, 0x1e, 0xc3, 0xf2, 0x98, 0xd9, - 0x8e, 0x3b, 0x1a, 0x4f, 0x3d, 0xf3, 0x75, 0xaf, 0x8d, 0x22, 0xbd, 0xac, 0xc8, 0x89, 0x64, 0x38, - 0x91, 0xf4, 0xe1, 0x92, 0x01, 0xe3, 0x78, 0x47, 0x0e, 0xa1, 0x6d, 0x4e, 0x98, 0xf9, 0x7a, 0x24, - 0x16, 0x3d, 0x0d, 0x25, 0xb7, 0xb2, 0x92, 0xa7, 0x92, 0xfa, 0x62, 0x31, 0x5c, 0x32, 0x5a, 0xa6, - 0x5a, 0x4a, 0xbf, 0x2c, 0x36, 0x75, 0xae, 0x58, 0x20, 0xa5, 0x36, 0x8a, 0xfc, 0xfa, 0xa7, 0xa2, - 0xa3, 0x9c, 0x66, 0x45, 0x1b, 0xf2, 0x00, 0x34, 0xe6, 0x5a, 0xa1, 0xa1, 0xcb, 0x28, 0x78, 0x2b, - 0xf7, 0x46, 0x5d, 0x2b, 0x32, 0xb3, 0xcd, 0xc2, 0x35, 0x39, 0x80, 0xa6, 0xcc, 0x12, 0x47, 0xf4, - 0x56, 0x50, 0x66, 0x33, 0x67, 0x22, 0xd2, 0x86, 0x4b, 0x46, 0xc8, 0x75, 0xd2, 0x82, 0xc6, 0x15, - 0x9d, 0xce, 0x99, 0xfe, 0x3b, 0x58, 0x4e, 0x65, 0x0a, 0xe9, 0x41, 0x6b, 0xc6, 0x38, 0xa7, 0x36, - 0xeb, 0x55, 0x76, 0x2a, 0xbb, 0x9a, 0x11, 0x6d, 0xf5, 0x35, 0x58, 0x49, 0xe7, 0x49, 0x4a, 0x50, - 0xe6, 0x82, 0x14, 0xbc, 0x62, 0x01, 0x97, 0x09, 0x10, 0x0a, 0x86, 0x5b, 0xfd, 0xaf, 0xd0, 0xcd, - 0x27, 0x01, 0xe9, 0x42, 0xed, 0x35, 0xbb, 0x0e, 0x39, 0xe5, 0x92, 0x6c, 0x86, 0x06, 0x61, 0x16, - 0x6b, 0x46, 0x68, 0x9d, 0x13, 0xcb, 0xc6, 0x69, 0x40, 0xee, 0x01, 0x5c, 0xd1, 0xa9, 0x63, 0x51, - 0xe1, 0x05, 0xbc, 0x57, 0xd9, 0xa9, 0xed, 0x2e, 0x1f, 0x76, 0x43, 0x77, 0x5f, 0x45, 0x04, 0x23, - 0xc5, 0x43, 0x7e, 0x0d, 0xab, 0x36, 0x73, 0x19, 0x77, 0xf8, 0x68, 0x7c, 0x2d, 0x18, 0xc7, 0x67, - 0xac, 0x18, 0x2b, 0xe1, 0xe1, 0x89, 0x3c, 0xd3, 0xad, 0xd8, 0x3f, 0x4c, 0x1e, 0x42, 0xa0, 0x6e, - 0x51, 0x41, 0xd1, 0xc6, 0x15, 0x03, 0xd7, 0xf2, 0xcc, 0xa7, 0x62, 0x12, 0xda, 0x88, 0x6b, 0x72, - 0x0b, 0x9a, 0x13, 0xe6, 0xd8, 0x13, 0x81, 0x45, 0x55, 0x33, 0xc2, 0x9d, 0x74, 0xc8, 0x0f, 0xbc, - 0x2b, 0x86, 0xf5, 0xd3, 0x36, 0xd4, 0x46, 0xff, 0xa6, 0x02, 0xeb, 0x37, 0x12, 0x4e, 0xea, 0x9d, - 0x50, 0x3e, 0x89, 0x9e, 0x25, 0xd7, 0xe4, 0xb7, 0x52, 0x2f, 0xb5, 0x58, 0x10, 0xd6, 0xf5, 0x6a, - 0xe8, 0xe2, 0x10, 0x0f, 0x8d, 0x90, 0x48, 0xfe, 0x92, 0x89, 0x46, 0x0d, 0xa3, 0x11, 0x65, 0xda, - 0x73, 0xc7, 0x76, 0x1d, 0xd7, 0x2e, 0x0e, 0xca, 0x09, 0x6c, 0x8e, 0xaf, 0xdf, 0x51, 0x57, 0x38, - 0x2e, 0x1b, 0xa5, 0x54, 0xd4, 0x51, 0x45, 0x27, 0x54, 0x71, 0x76, 0xe5, 0x58, 0xcc, 0x35, 0x99, - 0xb1, 0x11, 0x33, 0xc7, 0xea, 0xb8, 0xbe, 0x03, 0x6b, 0xd9, 0x1a, 0x20, 0x6b, 0x50, 0x15, 0x8b, - 0xd0, 0x8f, 0xaa, 0x58, 0xe8, 0x7a, 0xfc, 0x02, 0xe3, 0x7c, 0xbf, 0xc1, 0xb3, 0x07, 0x9d, 0x5c, - 0x6a, 0xa7, 0x82, 0x5a, 0x49, 0x07, 0x55, 0xef, 0xc0, 0x6a, 0x26, 0xa3, 0xf5, 0xf7, 0x0d, 0x68, - 0x1b, 0x8c, 0xfb, 0x9e, 0xcb, 0x19, 0x39, 0x02, 0x8d, 0x2d, 0x4c, 0xa6, 0x60, 0xa8, 0x92, 0x2b, - 0x72, 0xc5, 0x73, 0x16, 0xd1, 0x65, 0xd5, 0xc5, 0xcc, 0x64, 0x2f, 0x03, 0xa1, 0x1b, 0x79, 0xa1, - 0x34, 0x86, 0xee, 0x67, 0x31, 0x74, 0x33, 0xc7, 0x9b, 0x03, 0xd1, 0xbd, 0x0c, 0x88, 0xe6, 0x15, - 0x67, 0x50, 0xf4, 0x51, 0x01, 0x8a, 0xe6, 0xcd, 0x2f, 0x81, 0xd1, 0x47, 0x05, 0x30, 0xda, 0xbb, - 0xf1, 0xac, 0x42, 0x1c, 0xdd, 0xcf, 0xe2, 0x68, 0xde, 0x9d, 0x1c, 0x90, 0xfe, 0xad, 0x08, 0x48, - 0x6f, 0xe7, 0x64, 0x4a, 0x91, 0xf4, 0xfe, 0x0d, 0x24, 0xbd, 0x95, 0x13, 0x2d, 0x80, 0xd2, 0x47, - 0x19, 0x28, 0x85, 0x42, 0xdf, 0x4a, 0xb0, 0xf4, 0xe1, 0x4d, 0x2c, 0xdd, 0xce, 0xbf, 0xda, 0x22, - 0x30, 0x1d, 0xe4, 0xc0, 0x74, 0x2b, 0x6f, 0x65, 0x29, 0x9a, 0xee, 0xc9, 0xea, 0xce, 0x65, 0x9a, - 0x44, 0x02, 0x16, 0x04, 0x5e, 0x10, 0xc2, 0x9d, 0xda, 0xe8, 0xbb, 0x12, 0x6f, 0x92, 0xfc, 0xfa, - 0x00, 0xf2, 0x62, 0xd2, 0xa7, 0xb2, 0x4b, 0xff, 0xac, 0x92, 0xc8, 0x22, 0xf8, 0xa6, 0xb1, 0x4a, - 0x0b, 0xb1, 0x2a, 0x05, 0xc8, 0xd5, 0x0c, 0x20, 0x93, 0xdf, 0xc3, 0xfa, 0x94, 0x72, 0xa1, 0xe2, - 0x32, 0xca, 0x80, 0x57, 0x47, 0x12, 0x54, 0x40, 0x14, 0x8a, 0xfd, 0x11, 0x36, 0x52, 0xbc, 0xd4, - 0xf7, 0x47, 0x08, 0x54, 0x75, 0x2c, 0xde, 0x6e, 0xcc, 0x7d, 0xec, 0xfb, 0x43, 0xca, 0x27, 0xfa, - 0x7f, 0x12, 0xff, 0x13, 0xb0, 0x27, 0x50, 0x37, 0x3d, 0x4b, 0xb9, 0xb5, 0x6a, 0xe0, 0x5a, 0x36, - 0x80, 0xa9, 0x67, 0xe3, 0x53, 0x35, 0x43, 0x2e, 0x25, 0x57, 0x5c, 0x29, 0x9a, 0x2a, 0x09, 0xfd, - 0x2c, 0x51, 0xf7, 0x33, 0xf0, 0x5f, 0xff, 0xb2, 0x92, 0x44, 0x30, 0x06, 0xf7, 0x9f, 0x66, 0x92, - 0x7c, 0x99, 0x8e, 0x6b, 0xb1, 0x05, 0x16, 0x68, 0xcd, 0x50, 0x9b, 0xa8, 0x9f, 0x35, 0x31, 0x2c, - 0xd9, 0x7e, 0xd6, 0xc2, 0x33, 0xb5, 0x09, 0x9b, 0x82, 0x77, 0x89, 0x95, 0xb3, 0x62, 0xa8, 0x4d, - 0x0a, 0xed, 0xb4, 0x0c, 0xda, 0x1d, 0x01, 0xb9, 0x59, 0x53, 0x44, 0x87, 0xba, 0xa0, 0x76, 0xe4, - 0xf9, 0xda, 0x81, 0x9a, 0x0e, 0x0f, 0x9e, 0xbd, 0xba, 0xa0, 0x4e, 0x60, 0x20, 0x4d, 0xff, 0xb6, - 0x22, 0x31, 0x35, 0x53, 0x53, 0x85, 0x3e, 0x47, 0x89, 0x53, 0x4d, 0x35, 0xb9, 0x8f, 0x8b, 0xc3, - 0xaf, 0x00, 0x6c, 0xca, 0x47, 0x6f, 0xa9, 0x2b, 0x98, 0x15, 0x06, 0x43, 0xb3, 0x29, 0xff, 0x04, - 0x0f, 0xc8, 0x6d, 0x68, 0x4b, 0xf2, 0x9c, 0x33, 0x0b, 0xa3, 0x52, 0x33, 0x5a, 0x36, 0xe5, 0x2f, - 0x39, 0xb3, 0x62, 0xfb, 0x5b, 0xe5, 0xf6, 0x13, 0x1d, 0x6a, 0x97, 0x8c, 0x85, 0xf8, 0xd2, 0x8d, - 0x59, 0xce, 0x1f, 0xfe, 0x19, 0x99, 0x24, 0x51, 0xff, 0xae, 0x92, 0x64, 0x47, 0xd2, 0x5c, 0x7e, - 0x69, 0x5e, 0x7e, 0x55, 0x91, 0x1d, 0x34, 0x0b, 0x56, 0xe4, 0xef, 0xb0, 0x1e, 0xa7, 0xf7, 0x68, - 0xee, 0x5b, 0x54, 0x0e, 0x35, 0x65, 0x95, 0xd0, 0x8d, 0x59, 0x5f, 0x2a, 0x4e, 0xf2, 0x5f, 0xd8, - 0x36, 0xa5, 0x3e, 0x97, 0xcf, 0xf9, 0xc8, 0xa7, 0x01, 0x9d, 0xc5, 0x4a, 0xaa, 0x19, 0x58, 0x3e, - 0x8d, 0xb8, 0x2e, 0x24, 0x13, 0x37, 0xb6, 0xcc, 0xcc, 0x41, 0xa4, 0x2f, 0xf2, 0xb5, 0xf6, 0x81, - 0x8c, 0xfc, 0x8d, 0x1c, 0x15, 0xd2, 0xf0, 0x59, 0xf4, 0x56, 0xf4, 0xcf, 0x2b, 0xd0, 0xc9, 0x3d, - 0x94, 0x0c, 0x00, 0x14, 0xfa, 0x70, 0xe7, 0x1d, 0x0b, 0xdb, 0x7a, 0xe4, 0x25, 0x86, 0xe3, 0xb9, - 0xf3, 0x8e, 0x19, 0xda, 0x38, 0x5a, 0x92, 0xbb, 0xd0, 0x12, 0x0b, 0xc5, 0x9d, 0x1d, 0x9d, 0x5e, - 0x2c, 0x90, 0xb5, 0x29, 0xf0, 0x9f, 0x3c, 0x80, 0x15, 0xa5, 0xd8, 0xf6, 0x38, 0x77, 0xfc, 0xb0, - 0xa1, 0x93, 0xb4, 0xea, 0xa7, 0x48, 0x31, 0x96, 0xc7, 0xc9, 0x46, 0xff, 0x14, 0xb4, 0xf8, 0xb1, - 0xe4, 0x0e, 0x68, 0x33, 0xba, 0x08, 0xc7, 0x4a, 0x69, 0x5b, 0xc3, 0x68, 0xcf, 0xe8, 0x02, 0x47, - 0x4a, 0xb2, 0x0d, 0x2d, 0x49, 0x14, 0x0b, 0x15, 0xd7, 0x86, 0xd1, 0x9c, 0xd1, 0xc5, 0x8b, 0x45, - 0x4c, 0xb0, 0x29, 0x8f, 0x86, 0xc6, 0x19, 0x5d, 0x3c, 0xa5, 0x5c, 0x7f, 0x02, 0x4d, 0x65, 0xe4, - 0x47, 0x29, 0x96, 0xf2, 0xd5, 0x8c, 0xfc, 0x3f, 0x60, 0x39, 0x65, 0x37, 0xf9, 0x13, 0x6c, 0x29, - 0x0f, 0x7d, 0x1a, 0x08, 0x8c, 0x48, 0x46, 0x21, 0x41, 0xe2, 0x05, 0x0d, 0x84, 0x7c, 0xa4, 0x1a, - 0x83, 0xbf, 0xaf, 0x40, 0x53, 0x8d, 0x98, 0x32, 0xbb, 0x71, 0xa0, 0x18, 0x39, 0x56, 0xd4, 0x92, - 0x70, 0x7f, 0x6e, 0xa5, 0x10, 0xab, 0x9a, 0x19, 0x7a, 0x09, 0xd4, 0x85, 0x33, 0x63, 0xa1, 0x57, - 0xb8, 0x96, 0xc6, 0xba, 0xf3, 0x19, 0x46, 0xa1, 0xae, 0xa2, 0xe0, 0xce, 0x67, 0x32, 0x0a, 0x77, - 0x40, 0x13, 0x9e, 0xa0, 0x53, 0x24, 0xa9, 0xda, 0x6a, 0xe3, 0x81, 0x24, 0xde, 0x85, 0x4e, 0xba, - 0x49, 0xc9, 0xa6, 0xa3, 0xd0, 0x75, 0x35, 0x69, 0x51, 0x72, 0x4c, 0xbe, 0x0d, 0xed, 0xb8, 0x2b, - 0x29, 0xa8, 0x6d, 0x51, 0xd5, 0x8c, 0xc8, 0x3e, 0xb4, 0xfd, 0xc0, 0xf3, 0x3d, 0xce, 0x82, 0xb8, - 0xc6, 0xf2, 0xc5, 0x11, 0x73, 0xe8, 0x26, 0x68, 0xf1, 0xb1, 0x6c, 0x9e, 0xd4, 0xb2, 0x02, 0xc6, - 0x79, 0x38, 0xa7, 0x46, 0x5b, 0x99, 0x5c, 0xfe, 0x7c, 0x3c, 0x92, 0x68, 0x9f, 0x4d, 0xae, 0x8b, - 0xf9, 0xf8, 0x19, 0xbb, 0x36, 0x9a, 0x3e, 0xfe, 0x23, 0xd2, 0x7b, 0x6f, 0x59, 0x10, 0x86, 0x42, - 0x6d, 0x74, 0x17, 0xba, 0xf9, 0xa1, 0x9c, 0x1c, 0x80, 0x16, 0x57, 0x68, 0x2e, 0xbd, 0x13, 0x3b, - 0x13, 0x16, 0xd9, 0xbe, 0xb9, 0x63, 0xbb, 0xcc, 0x1a, 0x25, 0x01, 0x42, 0x5b, 0xda, 0x46, 0x47, - 0x11, 0xfe, 0x1d, 0x45, 0x48, 0xbf, 0x07, 0x4d, 0x65, 0x17, 0xbe, 0x99, 0x6b, 0x3f, 0x9a, 0x2d, - 0x70, 0x5d, 0x58, 0x81, 0x5f, 0x54, 0xa0, 0x1d, 0x0d, 0xfd, 0x85, 0x42, 0x19, 0x73, 0xab, 0x3f, - 0x6e, 0x6e, 0xd9, 0xf7, 0x51, 0x94, 0x2a, 0xf5, 0x54, 0xaa, 0xec, 0x03, 0x51, 0x19, 0x71, 0xe5, - 0x09, 0xc7, 0xb5, 0x47, 0x2a, 0x82, 0x2a, 0x35, 0xba, 0x48, 0x79, 0x85, 0x84, 0x0b, 0x79, 0x7e, - 0xf8, 0xbe, 0x01, 0x9d, 0xe3, 0x93, 0xd3, 0xf3, 0x63, 0xdf, 0x9f, 0x3a, 0x26, 0xc5, 0x59, 0x63, - 0x00, 0x75, 0x9c, 0xa6, 0x0a, 0x6e, 0x41, 0xfa, 0x45, 0x63, 0x3d, 0x39, 0x84, 0x06, 0x0e, 0x55, - 0xa4, 0xe8, 0x32, 0xa4, 0x5f, 0x38, 0xdd, 0xcb, 0x87, 0xa8, 0xb1, 0xeb, 0xe6, 0x9d, 0x48, 0xbf, - 0x68, 0xc4, 0x27, 0x4f, 0x40, 0x4b, 0xc6, 0xa1, 0xb2, 0x9b, 0x91, 0x7e, 0xe9, 0xb0, 0x2f, 0xe5, - 0x93, 0x0e, 0x57, 0x76, 0x8f, 0xd0, 0x2f, 0x9d, 0x8a, 0xc9, 0x11, 0xb4, 0xa2, 0x29, 0xa0, 0xf8, - 0xee, 0xa2, 0x5f, 0x32, 0x88, 0xcb, 0xf0, 0xa8, 0x89, 0xa9, 0xe8, 0x82, 0xa5, 0x5f, 0xf8, 0xb5, - 0x40, 0x1e, 0x40, 0x33, 0x84, 0xf8, 0xc2, 0x5b, 0x88, 0x7e, 0xf1, 0x38, 0x2d, 0x9d, 0x4c, 0x86, - 0xbc, 0xb2, 0x4b, 0xa0, 0x7e, 0xe9, 0x67, 0x0d, 0x39, 0x06, 0x48, 0x4d, 0x49, 0xa5, 0xb7, 0x3b, - 0xfd, 0xf2, 0xcf, 0x15, 0xf2, 0x18, 0xda, 0xc9, 0x27, 0x68, 0xf1, 0xad, 0x4b, 0xbf, 0xec, 0x0b, - 0x62, 0xdc, 0xc4, 0x9b, 0xb9, 0xfb, 0x3f, 0x04, 0x00, 0x00, 0xff, 0xff, 0x4c, 0x76, 0x50, 0x7d, - 0xe6, 0x13, 0x00, 0x00, +var fileDescriptorTypes = []byte{ + // 1789 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0x4b, 0x73, 0x1c, 0x49, + 0x11, 0xd6, 0xbc, 0xa7, 0x53, 0x4f, 0x97, 0xfc, 0x18, 0xcf, 0x06, 0x61, 0x47, 0x43, 0x18, 0x99, + 0xd5, 0x6a, 0x40, 0x8b, 0x8d, 0xbd, 0x4b, 0x6c, 0x20, 0x69, 0xcd, 0x8e, 0xc2, 0x3c, 0x44, 0xdb, + 0x6b, 0x22, 0xb8, 0x4c, 0xd4, 0x4c, 0x97, 0x7a, 0x2a, 0x3c, 0xd3, 0xdd, 0xdb, 0x55, 0xa3, 0x9d, + 0xf1, 0x8d, 0xe0, 0xba, 0x77, 0xce, 0xdc, 0xf8, 0x03, 0xfc, 0x05, 0x82, 0x7f, 0xc0, 0xcd, 0x07, + 0xb8, 0xf1, 0x27, 0x20, 0x32, 0xab, 0xdf, 0xea, 0x59, 0x16, 0x73, 0xdc, 0x8b, 0x54, 0x59, 0x99, + 0x59, 0x9d, 0x99, 0x93, 0xf9, 0x65, 0x56, 0xc1, 0x0d, 0xbd, 0x0a, 0x85, 0x1a, 0xd0, 0xdf, 0xa3, + 0x30, 0x0a, 0x74, 0xc0, 0x5a, 0x44, 0xf4, 0x3f, 0xf0, 0xa4, 0x9e, 0x2e, 0xc6, 0x47, 0x93, 0x60, + 0x3e, 0xf0, 0x02, 0x2f, 0x18, 0x10, 0x77, 0xbc, 0xb8, 0x24, 0x8a, 0x08, 0x5a, 0x19, 0xad, 0xfe, + 0x20, 0x27, 0xae, 0x85, 0xef, 0x8a, 0x68, 0x2e, 0x7d, 0x3d, 0xd0, 0xf3, 0x99, 0x1c, 0xab, 0xc1, + 0x24, 0x98, 0xcf, 0x03, 0x3f, 0xff, 0x19, 0xfb, 0xaf, 0x4d, 0xe8, 0x38, 0xe2, 0x8b, 0x85, 0x50, + 0x9a, 0x1d, 0x40, 0x53, 0x4c, 0xa6, 0x41, 0xaf, 0x7e, 0xbf, 0x76, 0xb0, 0x79, 0xcc, 0x8e, 0x8c, + 0x5c, 0xcc, 0x7d, 0x36, 0x99, 0x06, 0xc3, 0x0d, 0x87, 0x24, 0xd8, 0xfb, 0xd0, 0xba, 0x9c, 0x2d, + 0xd4, 0xb4, 0xd7, 0x20, 0xd1, 0xfd, 0xa2, 0xe8, 0xcf, 0x91, 0x35, 0xdc, 0x70, 0x8c, 0x0c, 0x1e, + 0x2b, 0xfd, 0xcb, 0xa0, 0xd7, 0xac, 0x3a, 0xf6, 0xdc, 0xbf, 0xa4, 0x63, 0x51, 0x82, 0x3d, 0x01, + 0x50, 0x42, 0x8f, 0x82, 0x50, 0xcb, 0xc0, 0xef, 0xb5, 0x48, 0xfe, 0x4e, 0x51, 0xfe, 0x85, 0xd0, + 0xbf, 0x26, 0xf6, 0x70, 0xc3, 0xb1, 0x54, 0x42, 0xa0, 0xa6, 0xf4, 0xa5, 0x1e, 0x4d, 0xa6, 0x5c, + 0xfa, 0xbd, 0x76, 0x95, 0xe6, 0xb9, 0x2f, 0xf5, 0x19, 0xb2, 0x51, 0x53, 0x26, 0x04, 0xba, 0xf2, + 0xc5, 0x42, 0x44, 0xab, 0x5e, 0xa7, 0xca, 0x95, 0xdf, 0x20, 0x0b, 0x5d, 0x21, 0x19, 0xf6, 0x31, + 0x6c, 0x8e, 0x85, 0x27, 0xfd, 0xd1, 0x78, 0x16, 0x4c, 0x5e, 0xf7, 0xba, 0xa4, 0xd2, 0x2b, 0xaa, + 0x9c, 0xa2, 0xc0, 0x29, 0xf2, 0x87, 0x1b, 0x0e, 0x8c, 0x53, 0x8a, 0x1d, 0x43, 0x77, 0x32, 0x15, + 0x93, 0xd7, 0x23, 0xbd, 0xec, 0x59, 0xa4, 0x79, 0xab, 0xa8, 0x79, 0x86, 0xdc, 0x97, 0xcb, 0xe1, + 0x86, 0xd3, 0x99, 0x98, 0x25, 0xfa, 0xe5, 0x8a, 0x99, 0xbc, 0x12, 0x11, 0x6a, 0xed, 0x57, 0xf9, + 0xf5, 0xa9, 0xe1, 0x93, 0x9e, 0xe5, 0x26, 0x04, 0x7b, 0x04, 0x96, 0xf0, 0xdd, 0xd8, 0xd0, 0x4d, + 0x52, 0xbc, 0x5d, 0xfa, 0x45, 0x7d, 0x37, 0x31, 0xb3, 0x2b, 0xe2, 0x35, 0x3b, 0x82, 0x36, 0x66, + 0x89, 0xd4, 0xbd, 0x2d, 0xd2, 0xb9, 0x59, 0x32, 0x91, 0x78, 0xc3, 0x0d, 0x27, 0x96, 0x3a, 0xed, + 0x40, 0xeb, 0x8a, 0xcf, 0x16, 0xc2, 0xfe, 0x3e, 0x6c, 0xe6, 0x32, 0x85, 0xf5, 0xa0, 0x33, 0x17, + 0x4a, 0x71, 0x4f, 0xf4, 0x6a, 0xf7, 0x6b, 0x07, 0x96, 0x93, 0x90, 0xf6, 0x0e, 0x6c, 0xe5, 0xf3, + 0x24, 0xa7, 0x88, 0xb9, 0x80, 0x8a, 0x57, 0x22, 0x52, 0x98, 0x00, 0xb1, 0x62, 0x4c, 0xda, 0x1f, + 0xc1, 0x5e, 0x39, 0x09, 0xd8, 0x1e, 0x34, 0x5e, 0x8b, 0x55, 0x2c, 0x89, 0x4b, 0x76, 0x33, 0x36, + 0x88, 0xb2, 0xd8, 0x72, 0x62, 0xeb, 0x82, 0x54, 0x37, 0x4d, 0x03, 0xf6, 0x18, 0xe0, 0x8a, 0xcf, + 0xa4, 0xcb, 0x75, 0x10, 0xa9, 0x5e, 0xed, 0x7e, 0xe3, 0x60, 0xf3, 0x78, 0x2f, 0x76, 0xf7, 0x55, + 0xc2, 0x38, 0x6d, 0xfe, 0xed, 0xed, 0xbd, 0x0d, 0x27, 0x27, 0xc9, 0xbe, 0x0b, 0xdb, 0x9e, 0xf0, + 0x85, 0x92, 0x6a, 0x34, 0x5e, 0x69, 0xa1, 0xe8, 0x4b, 0x5b, 0xce, 0x56, 0xbc, 0x79, 0x8a, 0x7b, + 0xb6, 0x9b, 0x7a, 0x49, 0x29, 0xc4, 0x18, 0x34, 0x5d, 0xae, 0x39, 0x59, 0xba, 0xe5, 0xd0, 0x1a, + 0xf7, 0x42, 0xae, 0xa7, 0xb1, 0xa5, 0xb4, 0x66, 0xb7, 0xa1, 0x3d, 0x15, 0xd2, 0x9b, 0x6a, 0x2a, + 0xad, 0x86, 0x13, 0x53, 0xe8, 0x56, 0x18, 0x05, 0x57, 0x82, 0xaa, 0xa8, 0xeb, 0x18, 0xc2, 0xfe, + 0x7b, 0x0d, 0x6e, 0x5c, 0x4b, 0x3b, 0x3c, 0x77, 0xca, 0xd5, 0x34, 0xf9, 0x16, 0xae, 0xd9, 0xfb, + 0x78, 0x2e, 0x77, 0x45, 0x14, 0x57, 0xf7, 0x76, 0xec, 0xe8, 0x90, 0x36, 0x63, 0x2f, 0x63, 0x11, + 0xf6, 0x93, 0x42, 0x64, 0x1a, 0x14, 0x99, 0x24, 0xeb, 0x5e, 0x48, 0xcf, 0x97, 0xbe, 0x97, 0x06, + 0xa8, 0x10, 0x9a, 0x21, 0xdc, 0x1c, 0xaf, 0xde, 0x70, 0x5f, 0x4b, 0x5f, 0x8c, 0x72, 0x47, 0x34, + 0xe9, 0x88, 0xdd, 0xf8, 0x88, 0x67, 0x57, 0xd2, 0x15, 0xfe, 0x44, 0xc4, 0x5f, 0xdd, 0x4f, 0x55, + 0xd2, 0x43, 0x95, 0x7d, 0x1f, 0x76, 0x8a, 0x55, 0xc1, 0x76, 0xa0, 0xae, 0x97, 0xb1, 0x4f, 0x75, + 0xbd, 0xb4, 0xed, 0xf4, 0x27, 0x4d, 0x2b, 0xe0, 0x9a, 0xcc, 0x43, 0xd8, 0x2d, 0x25, 0x7b, 0x2e, + 0xc0, 0xb5, 0x7c, 0x80, 0xed, 0x5d, 0xd8, 0x2e, 0xe4, 0xb8, 0xfd, 0x55, 0x0b, 0xba, 0x8e, 0x50, + 0x61, 0xe0, 0x2b, 0xc1, 0x9e, 0x80, 0x25, 0x96, 0x13, 0x61, 0x80, 0xa9, 0x56, 0x2a, 0x7b, 0x23, + 0xf3, 0x2c, 0xe1, 0x63, 0x1d, 0xa6, 0xc2, 0xec, 0x61, 0x01, 0x54, 0xf7, 0xcb, 0x4a, 0x79, 0x54, + 0x3d, 0x2c, 0xa2, 0xea, 0xcd, 0x92, 0x6c, 0x09, 0x56, 0x1f, 0x16, 0x60, 0xb5, 0x7c, 0x70, 0x01, + 0x57, 0x9f, 0x56, 0xe0, 0x6a, 0xd9, 0xfc, 0x35, 0xc0, 0xfa, 0xb4, 0x02, 0x58, 0x7b, 0xd7, 0xbe, + 0x55, 0x89, 0xac, 0x87, 0x45, 0x64, 0x2d, 0xbb, 0x53, 0x82, 0xd6, 0x9f, 0x56, 0x41, 0xeb, 0xdd, + 0x92, 0xce, 0x5a, 0x6c, 0xfd, 0xf0, 0x1a, 0xb6, 0xde, 0x2e, 0xa9, 0x56, 0x80, 0xeb, 0xd3, 0x02, + 0xb8, 0x42, 0xa5, 0x6f, 0x6b, 0xd0, 0xf5, 0xf1, 0x75, 0x74, 0xbd, 0x53, 0xfe, 0x69, 0xab, 0xe0, + 0x75, 0x50, 0x82, 0xd7, 0x5b, 0x65, 0x2b, 0xd7, 0xe2, 0xeb, 0x43, 0xac, 0xf4, 0x52, 0xa6, 0x21, + 0x2a, 0x88, 0x28, 0x0a, 0xa2, 0x18, 0x00, 0x0d, 0x61, 0x1f, 0x20, 0xf6, 0x64, 0xf9, 0xf5, 0x35, + 0x58, 0x4c, 0x49, 0x9f, 0xcb, 0x2e, 0xfb, 0x8f, 0xb5, 0x4c, 0x97, 0xe0, 0x38, 0x8f, 0x5b, 0x56, + 0x8c, 0x5b, 0x39, 0x88, 0xae, 0x17, 0x20, 0x9a, 0xfd, 0x00, 0x6e, 0xcc, 0xb8, 0xd2, 0x26, 0x2e, + 0xa3, 0x02, 0x90, 0xed, 0x22, 0xc3, 0x04, 0xc4, 0x20, 0xda, 0x07, 0xb0, 0x9f, 0x93, 0xe5, 0x61, + 0x38, 0x22, 0xd0, 0x6a, 0x52, 0xf1, 0xee, 0xa5, 0xd2, 0x27, 0x61, 0x38, 0xe4, 0x6a, 0x6a, 0xff, + 0x32, 0xf3, 0x3f, 0x83, 0x7f, 0x06, 0xcd, 0x49, 0xe0, 0x1a, 0xb7, 0xb6, 0x1d, 0x5a, 0x63, 0x4b, + 0x98, 0x05, 0x1e, 0x7d, 0xd5, 0x72, 0x70, 0x89, 0x52, 0x69, 0xa5, 0x58, 0xa6, 0x24, 0xec, 0xe7, + 0xd9, 0x71, 0xff, 0x77, 0x47, 0xb0, 0xff, 0x52, 0xcb, 0xe2, 0x98, 0xc2, 0xfd, 0xbb, 0x19, 0x86, + 0x3f, 0xa9, 0xf4, 0x5d, 0xb1, 0xa4, 0x32, 0x6d, 0x38, 0x86, 0x48, 0xfa, 0x5c, 0x9b, 0x82, 0x53, + 0xec, 0x73, 0x1d, 0xda, 0x33, 0x44, 0xdc, 0x26, 0x82, 0x4b, 0xaa, 0x9f, 0x2d, 0xc7, 0x10, 0x39, + 0xcc, 0xb3, 0x0a, 0x98, 0x77, 0x01, 0xec, 0x7a, 0x65, 0xb1, 0x8f, 0xa0, 0xa9, 0xb9, 0x97, 0xf8, + 0xbf, 0x73, 0x64, 0xa6, 0xc6, 0xa3, 0xe7, 0xaf, 0x2e, 0xb8, 0x8c, 0x4e, 0x6f, 0xa3, 0xf7, 0xff, + 0x7a, 0x7b, 0x6f, 0x07, 0x65, 0x0e, 0x83, 0xb9, 0xd4, 0x62, 0x1e, 0xea, 0x95, 0x43, 0x3a, 0xf6, + 0xbf, 0x6b, 0x88, 0xb8, 0x85, 0x8a, 0xab, 0x8c, 0x45, 0x92, 0x56, 0xf5, 0x5c, 0x3b, 0xfc, 0x66, + 0xf1, 0xf9, 0x0e, 0x80, 0xc7, 0xd5, 0xe8, 0x4b, 0xee, 0x6b, 0xe1, 0xc6, 0x41, 0xb2, 0x3c, 0xae, + 0x7e, 0x4b, 0x1b, 0xec, 0x2e, 0x74, 0x91, 0xbd, 0x50, 0xc2, 0xa5, 0x68, 0x35, 0x9c, 0x8e, 0xc7, + 0xd5, 0xe7, 0x4a, 0xb8, 0xa9, 0x5f, 0x9d, 0xff, 0xdd, 0x2f, 0x76, 0x00, 0x8d, 0x4b, 0x21, 0x62, + 0x54, 0xda, 0x4b, 0x55, 0xcf, 0x1f, 0xff, 0x98, 0x94, 0x4d, 0x4a, 0xa0, 0x88, 0xfd, 0xfb, 0x7a, + 0x96, 0x59, 0x59, 0x63, 0xfa, 0x76, 0xc5, 0xe0, 0x9f, 0x35, 0xec, 0xcd, 0x45, 0x18, 0x64, 0x67, + 0x70, 0x23, 0x2d, 0x99, 0xd1, 0x22, 0x74, 0x39, 0x8e, 0x4e, 0x5f, 0x5f, 0x63, 0x7b, 0xa9, 0xc2, + 0xe7, 0x46, 0x9e, 0xfd, 0x0a, 0xee, 0x4c, 0xf0, 0x54, 0x5f, 0x2d, 0xd4, 0x28, 0xe4, 0x11, 0x9f, + 0xa7, 0x47, 0xd5, 0x0b, 0xb0, 0x7f, 0x96, 0x48, 0x5d, 0xa0, 0x90, 0x72, 0x6e, 0x4d, 0x0a, 0x1b, + 0xc9, 0x79, 0x49, 0x3c, 0x1a, 0xef, 0x90, 0xeb, 0xdf, 0xc3, 0x11, 0x25, 0x0f, 0xdb, 0x55, 0xbf, + 0xa8, 0xfd, 0xa7, 0x1a, 0xec, 0x96, 0x8c, 0x61, 0x03, 0x00, 0x83, 0x7a, 0x4a, 0xbe, 0x11, 0xf1, + 0x38, 0x91, 0xc4, 0x80, 0x82, 0xf5, 0x42, 0xbe, 0x11, 0x8e, 0x35, 0x4e, 0x96, 0xec, 0x01, 0x74, + 0xf4, 0xd2, 0x48, 0x17, 0xc7, 0xb7, 0x97, 0x4b, 0x12, 0x6d, 0x6b, 0xfa, 0xcf, 0x1e, 0xc1, 0x96, + 0x39, 0xd8, 0x0b, 0x94, 0x92, 0x61, 0x3c, 0x48, 0xb0, 0xfc, 0xd1, 0x9f, 0x11, 0xc7, 0xd9, 0x1c, + 0x67, 0x84, 0xfd, 0x3b, 0xb0, 0xd2, 0xcf, 0xb2, 0xf7, 0xc0, 0x9a, 0xf3, 0x65, 0x3c, 0xda, 0xa2, + 0x6d, 0x2d, 0xa7, 0x3b, 0xe7, 0x4b, 0x1a, 0x6b, 0xd9, 0x1d, 0xe8, 0x20, 0x53, 0x2f, 0x4d, 0xbc, + 0x5b, 0x4e, 0x7b, 0xce, 0x97, 0x2f, 0x97, 0x29, 0xc3, 0xe3, 0x2a, 0x19, 0x5c, 0xe7, 0x7c, 0xf9, + 0x19, 0x57, 0xf6, 0x27, 0xd0, 0x36, 0x46, 0x7e, 0xa3, 0x83, 0x51, 0xbf, 0x5e, 0xd0, 0xff, 0x19, + 0x6c, 0xe6, 0xec, 0x66, 0x3f, 0x82, 0x5b, 0xc6, 0xc3, 0x90, 0x47, 0x9a, 0x22, 0x52, 0x38, 0x90, + 0x11, 0xf3, 0x82, 0x47, 0x1a, 0x3f, 0x69, 0x46, 0xf1, 0x3f, 0xd4, 0xa1, 0x6d, 0xc6, 0x5c, 0xf6, + 0x00, 0xc7, 0x04, 0x2e, 0xfd, 0x91, 0x74, 0x4d, 0x47, 0x3b, 0xdd, 0xfc, 0xc7, 0xdb, 0x7b, 0x1d, + 0x42, 0xff, 0xf3, 0x4f, 0x71, 0x32, 0xc0, 0x85, 0x9b, 0x03, 0xcc, 0x7a, 0x61, 0x0a, 0x67, 0xd0, + 0xd4, 0x72, 0x2e, 0x62, 0x17, 0x69, 0x8d, 0x96, 0xfb, 0x8b, 0x39, 0x85, 0xa4, 0x69, 0x42, 0xe2, + 0x2f, 0xe6, 0x18, 0x92, 0xf7, 0xc0, 0xd2, 0x81, 0xe6, 0x33, 0x62, 0x99, 0x22, 0xed, 0xd2, 0x06, + 0x32, 0x1f, 0xc0, 0x6e, 0xbe, 0x53, 0x62, 0xe7, 0x33, 0xe0, 0xbe, 0x9d, 0xf5, 0x49, 0x9c, 0xdb, + 0xef, 0x42, 0x37, 0x6d, 0x8d, 0x06, 0xe9, 0x3b, 0xdc, 0x74, 0x44, 0x76, 0x08, 0xdd, 0x30, 0x0a, + 0xc2, 0x40, 0x89, 0x28, 0x2d, 0xca, 0x52, 0x1d, 0x39, 0xa9, 0x84, 0x2d, 0xc1, 0x4a, 0xb7, 0xb1, + 0x83, 0x73, 0xd7, 0x8d, 0x84, 0x52, 0xf1, 0xb0, 0x9c, 0x90, 0xec, 0x10, 0x3a, 0xe1, 0x62, 0x3c, + 0xc2, 0x66, 0x53, 0xcc, 0xb4, 0x8b, 0xc5, 0xf8, 0xb9, 0x58, 0x25, 0x17, 0x85, 0x90, 0x28, 0x6a, + 0x37, 0xc1, 0x97, 0x22, 0x8a, 0x03, 0x62, 0x08, 0xdb, 0x87, 0xbd, 0xf2, 0x2d, 0x81, 0x1d, 0x81, + 0x95, 0x16, 0x73, 0x29, 0xe3, 0x33, 0x6b, 0x33, 0x11, 0x9c, 0x24, 0x94, 0xf4, 0x7c, 0xe1, 0x8e, + 0xb2, 0x30, 0x91, 0x45, 0x5d, 0x67, 0xd7, 0x30, 0x7e, 0x91, 0xc4, 0xc9, 0xfe, 0x21, 0xb4, 0x8d, + 0x75, 0xf4, 0xfb, 0xac, 0xc2, 0x64, 0xcc, 0xa1, 0x75, 0x65, 0x51, 0xfe, 0xb9, 0x06, 0xdd, 0xe4, + 0x16, 0x52, 0xa9, 0x54, 0x30, 0xb7, 0xfe, 0xdf, 0xcd, 0x5d, 0x77, 0x6d, 0x4b, 0x12, 0xa6, 0x99, + 0x4b, 0x98, 0x43, 0x60, 0x26, 0x2f, 0xae, 0x02, 0x2d, 0x7d, 0x6f, 0x64, 0x22, 0x68, 0x12, 0x64, + 0x8f, 0x38, 0xaf, 0x88, 0x71, 0x81, 0xfb, 0xc7, 0x5f, 0xb5, 0x60, 0xf7, 0xe4, 0xf4, 0xec, 0xfc, + 0x24, 0x0c, 0x67, 0x72, 0xc2, 0x69, 0xec, 0x19, 0x40, 0x93, 0x06, 0xbb, 0x8a, 0x27, 0x9a, 0x7e, + 0xd5, 0x0d, 0x83, 0x1d, 0x43, 0x8b, 0xe6, 0x3b, 0x56, 0xf5, 0x52, 0xd3, 0xaf, 0xbc, 0x68, 0xe0, + 0x47, 0xcc, 0x04, 0x78, 0xfd, 0xc1, 0xa6, 0x5f, 0x75, 0xdb, 0x60, 0x9f, 0x80, 0x95, 0x4d, 0x66, + 0xeb, 0x9e, 0x6d, 0xfa, 0x6b, 0xef, 0x1d, 0xa8, 0x9f, 0x35, 0xcc, 0x75, 0x8f, 0x1c, 0xfd, 0xb5, + 0x03, 0x3a, 0x7b, 0x02, 0x9d, 0x64, 0xe4, 0xa8, 0x7e, 0x58, 0xe9, 0xaf, 0xb9, 0x13, 0x60, 0x78, + 0xcc, 0xd8, 0x56, 0xf5, 0xfa, 0xd3, 0xaf, 0xbc, 0xb8, 0xb0, 0x47, 0xd0, 0x8e, 0x51, 0xbf, 0xf2, + 0x89, 0xa4, 0x5f, 0x3d, 0xd9, 0xa3, 0x93, 0xd9, 0xbc, 0xb9, 0xee, 0x85, 0xaa, 0xbf, 0xf6, 0x86, + 0xc5, 0x4e, 0x00, 0x72, 0xa3, 0xda, 0xda, 0xa7, 0xa7, 0xfe, 0xfa, 0x9b, 0x13, 0xfb, 0x18, 0xba, + 0xd9, 0x6d, 0xb8, 0xfa, 0x49, 0xa8, 0xbf, 0xee, 0x32, 0x33, 0x6e, 0xd3, 0xb3, 0xe1, 0x87, 0xff, + 0x09, 0x00, 0x00, 0xff, 0xff, 0x39, 0xa6, 0xae, 0x4d, 0xb2, 0x14, 0x00, 0x00, } diff --git a/types/types.proto b/types/types.proto index c97b7381..2cea82d0 100644 --- a/types/types.proto +++ b/types/types.proto @@ -1,9 +1,14 @@ syntax = "proto3"; package types; +// For more information on gogo.proto, see: +// https://github.com/gogo/protobuf/blob/master/extensions.md +import "github.com/gogo/protobuf/gogoproto/gogo.proto"; import "github.com/tendermint/tmlibs/common/types.proto"; // This file is copied from http://github.com/tendermint/abci +// NOTE: When using custom types, mind the warnings. +// https://github.com/gogo/protobuf/blob/master/custom_types.md#warnings-and-issues //---------------------------------------- // Request types @@ -42,7 +47,7 @@ message RequestSetOption { } message RequestInitChain { - repeated Validator validators = 1; + repeated Validator validators = 1 [(gogoproto.nullable)=false]; bytes genesis_bytes = 2; } @@ -55,9 +60,9 @@ message RequestQuery { message RequestBeginBlock { bytes hash = 1; - Header header = 2; + Header header = 2 [(gogoproto.nullable)=false]; repeated SigningValidator validators = 3; - repeated Evidence byzantine_validators = 4; + repeated Evidence byzantine_validators = 4 [(gogoproto.nullable)=false]; } message RequestCheckTx { @@ -123,7 +128,7 @@ message ResponseSetOption { } message ResponseInitChain { - repeated Validator validators = 1; + repeated Validator validators = 1 [(gogoproto.nullable)=false]; } message ResponseQuery { @@ -139,7 +144,7 @@ message ResponseQuery { } message ResponseBeginBlock { - repeated common.KVPair tags = 1; + repeated common.KVPair tags = 1 [(gogoproto.nullable)=false, (gogoproto.jsontag)="tags,omitempty"]; } message ResponseCheckTx { @@ -149,8 +154,8 @@ message ResponseCheckTx { string info = 4; // nondeterministic int64 gas_wanted = 5; int64 gas_used = 6; - repeated common.KVPair tags = 7; - common.KI64Pair fee = 8; + repeated common.KVPair tags = 7 [(gogoproto.nullable)=false, (gogoproto.jsontag)="tags,omitempty"]; + common.KI64Pair fee = 8 [(gogoproto.nullable)=false]; } message ResponseDeliverTx { @@ -160,14 +165,14 @@ message ResponseDeliverTx { string info = 4; // nondeterministic int64 gas_wanted = 5; int64 gas_used = 6; - repeated common.KVPair tags = 7; - common.KI64Pair fee = 8; + repeated common.KVPair tags = 7 [(gogoproto.nullable)=false, (gogoproto.jsontag)="tags,omitempty"]; + common.KI64Pair fee = 8 [(gogoproto.nullable)=false]; } message ResponseEndBlock { - repeated Validator validator_updates = 1; + repeated Validator validator_updates = 1 [(gogoproto.nullable)=false]; ConsensusParams consensus_param_updates = 2; - repeated common.KVPair tags = 3; + repeated common.KVPair tags = 3 [(gogoproto.nullable)=false, (gogoproto.jsontag)="tags,omitempty"]; } message ResponseCommit { @@ -212,7 +217,7 @@ message BlockGossip { // just the minimum the app might need message Header { // basics - string chain_id = 1; + string chain_id = 1 [(gogoproto.customname)="ChainID"]; int64 height = 2; int64 time = 3; @@ -231,7 +236,7 @@ message Header { // Validator message Validator { bytes address = 1; - PubKey pub_key = 2; + PubKey pub_key = 2 [(gogoproto.nullable)=false]; int64 power = 3; } diff --git a/types/validator.go b/types/util.go similarity index 85% rename from types/validator.go rename to types/util.go index f73c978b..0924ab5f 100644 --- a/types/validator.go +++ b/types/util.go @@ -8,21 +8,6 @@ import ( cmn "github.com/tendermint/tmlibs/common" ) -const ( - PubKeyEd25519 = "ed25519" -) - -func Ed25519Validator(pubkey []byte, power int64) Validator { - return Validator{ - // Address: - PubKey: &PubKey{ - Type: PubKeyEd25519, - Data: pubkey, - }, - Power: power, - } -} - //------------------------------------------------------------------------------ // Validators is a list of validators that implements the Sort interface From 512b3121a7ea3d5ef21df317ad9f78dc9bbc02a1 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Thu, 31 May 2018 10:44:19 -0400 Subject: [PATCH 32/40] include genesis file structure --- CHANGELOG.md | 6 +- example/kvstore/helpers.go | 4 +- tests/server/client.go | 4 +- types/types.pb.go | 301 ++++++++++++++++++++++--------------- types/types.proto | 10 +- 5 files changed, 196 insertions(+), 129 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index da05af9b..f966c343 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,16 @@ # Changelog -## 0.10.4 (TBD) +## 0.11.0 + +*TBD* BREAKING CHANGES: - [types] Added `type` field to `Evidence` (opaque bytes indicating kind of fraud) - [types] Added `time` field to `Evidence` (note that this is the timestamp of the block which was double-signed, not the time the evidence was received) +TODO + ## 0.10.3 (April 9, 2018) IMPROVEMENTS: diff --git a/example/kvstore/helpers.go b/example/kvstore/helpers.go index da826fe6..6510c455 100644 --- a/example/kvstore/helpers.go +++ b/example/kvstore/helpers.go @@ -33,7 +33,7 @@ func RandVals(cnt int) []types.Validator { // don't make any tx that modify the validator state func InitKVStore(app *PersistentKVStoreApplication) { app.InitChain(types.RequestInitChain{ - Validators: RandVals(1), - GenesisBytes: []byte("[]"), + Validators: RandVals(1), + GenesisFile: types.GenesisFile{}, }) } diff --git a/tests/server/client.go b/tests/server/client.go index 14b4007a..5dac680c 100644 --- a/tests/server/client.go +++ b/tests/server/client.go @@ -19,8 +19,8 @@ func InitChain(client abcicli.Client) error { vals[i] = types.Ed25519Validator(pubkey, int64(power)) } _, err := client.InitChainSync(types.RequestInitChain{ - Validators: vals, - GenesisBytes: []byte("{}"), + Validators: vals, + GenesisFile: types.GenesisFile{}, }) if err != nil { fmt.Printf("Failed test: InitChain - %v\n", err) diff --git a/types/types.pb.go b/types/types.pb.go index e04a4f4b..a4faff08 100644 --- a/types/types.pb.go +++ b/types/types.pb.go @@ -37,6 +37,7 @@ It has these top-level messages: BlockSize TxSize BlockGossip + GenesisFile Header Validator SigningValidator @@ -532,8 +533,8 @@ func (m *RequestSetOption) GetValue() string { } type RequestInitChain struct { - Validators []Validator `protobuf:"bytes,1,rep,name=validators" json:"validators"` - GenesisBytes []byte `protobuf:"bytes,2,opt,name=genesis_bytes,json=genesisBytes,proto3" json:"genesis_bytes,omitempty"` + Validators []Validator `protobuf:"bytes,1,rep,name=validators" json:"validators"` + GenesisFile GenesisFile `protobuf:"bytes,2,opt,name=genesis_file,json=genesisFile" json:"genesis_file"` } func (m *RequestInitChain) Reset() { *m = RequestInitChain{} } @@ -548,11 +549,11 @@ func (m *RequestInitChain) GetValidators() []Validator { return nil } -func (m *RequestInitChain) GetGenesisBytes() []byte { +func (m *RequestInitChain) GetGenesisFile() GenesisFile { if m != nil { - return m.GenesisBytes + return m.GenesisFile } - return nil + return GenesisFile{} } type RequestQuery struct { @@ -1646,6 +1647,54 @@ func (m *BlockGossip) GetBlockPartSizeBytes() int32 { return 0 } +type GenesisFile struct { + Time int64 `protobuf:"varint,1,opt,name=time,proto3" json:"time,omitempty"` + ChainId string `protobuf:"bytes,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + ConsensusParams *ConsensusParams `protobuf:"bytes,3,opt,name=consensus_params,json=consensusParams" json:"consensus_params,omitempty"` + Validators []*Validator `protobuf:"bytes,4,rep,name=validators" json:"validators,omitempty"` + AppStateJson []byte `protobuf:"bytes,5,opt,name=app_state_json,json=appStateJson,proto3" json:"app_state_json,omitempty"` +} + +func (m *GenesisFile) Reset() { *m = GenesisFile{} } +func (m *GenesisFile) String() string { return proto.CompactTextString(m) } +func (*GenesisFile) ProtoMessage() {} +func (*GenesisFile) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{29} } + +func (m *GenesisFile) GetTime() int64 { + if m != nil { + return m.Time + } + return 0 +} + +func (m *GenesisFile) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +func (m *GenesisFile) GetConsensusParams() *ConsensusParams { + if m != nil { + return m.ConsensusParams + } + return nil +} + +func (m *GenesisFile) GetValidators() []*Validator { + if m != nil { + return m.Validators + } + return nil +} + +func (m *GenesisFile) GetAppStateJson() []byte { + if m != nil { + return m.AppStateJson + } + return nil +} + // just the minimum the app might need type Header struct { // basics @@ -1665,7 +1714,7 @@ type Header struct { func (m *Header) Reset() { *m = Header{} } func (m *Header) String() string { return proto.CompactTextString(m) } func (*Header) ProtoMessage() {} -func (*Header) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{29} } +func (*Header) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{30} } func (m *Header) GetChainID() string { if m != nil { @@ -1733,7 +1782,7 @@ type Validator struct { func (m *Validator) Reset() { *m = Validator{} } func (m *Validator) String() string { return proto.CompactTextString(m) } func (*Validator) ProtoMessage() {} -func (*Validator) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{30} } +func (*Validator) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{31} } func (m *Validator) GetAddress() []byte { if m != nil { @@ -1765,7 +1814,7 @@ type SigningValidator struct { func (m *SigningValidator) Reset() { *m = SigningValidator{} } func (m *SigningValidator) String() string { return proto.CompactTextString(m) } func (*SigningValidator) ProtoMessage() {} -func (*SigningValidator) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{31} } +func (*SigningValidator) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{32} } func (m *SigningValidator) GetValidator() *Validator { if m != nil { @@ -1789,7 +1838,7 @@ type PubKey struct { func (m *PubKey) Reset() { *m = PubKey{} } func (m *PubKey) String() string { return proto.CompactTextString(m) } func (*PubKey) ProtoMessage() {} -func (*PubKey) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{32} } +func (*PubKey) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{33} } func (m *PubKey) GetType() string { if m != nil { @@ -1816,7 +1865,7 @@ type Evidence struct { func (m *Evidence) Reset() { *m = Evidence{} } func (m *Evidence) String() string { return proto.CompactTextString(m) } func (*Evidence) ProtoMessage() {} -func (*Evidence) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{33} } +func (*Evidence) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{34} } func (m *Evidence) GetType() string { if m != nil { @@ -1883,6 +1932,7 @@ func init() { proto.RegisterType((*BlockSize)(nil), "types.BlockSize") proto.RegisterType((*TxSize)(nil), "types.TxSize") proto.RegisterType((*BlockGossip)(nil), "types.BlockGossip") + proto.RegisterType((*GenesisFile)(nil), "types.GenesisFile") proto.RegisterType((*Header)(nil), "types.Header") proto.RegisterType((*Validator)(nil), "types.Validator") proto.RegisterType((*SigningValidator)(nil), "types.SigningValidator") @@ -2295,117 +2345,122 @@ var _ABCIApplication_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("types/types.proto", fileDescriptorTypes) } var fileDescriptorTypes = []byte{ - // 1789 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0x4b, 0x73, 0x1c, 0x49, - 0x11, 0xd6, 0xbc, 0xa7, 0x53, 0x4f, 0x97, 0xfc, 0x18, 0xcf, 0x06, 0x61, 0x47, 0x43, 0x18, 0x99, - 0xd5, 0x6a, 0x40, 0x8b, 0x8d, 0xbd, 0x4b, 0x6c, 0x20, 0x69, 0xcd, 0x8e, 0xc2, 0x3c, 0x44, 0xdb, - 0x6b, 0x22, 0xb8, 0x4c, 0xd4, 0x4c, 0x97, 0x7a, 0x2a, 0x3c, 0xd3, 0xdd, 0xdb, 0x55, 0xa3, 0x9d, - 0xf1, 0x8d, 0xe0, 0xba, 0x77, 0xce, 0xdc, 0xf8, 0x03, 0xfc, 0x05, 0x82, 0x7f, 0xc0, 0xcd, 0x07, - 0xb8, 0xf1, 0x27, 0x20, 0x32, 0xab, 0xdf, 0xea, 0x59, 0x16, 0x73, 0xdc, 0x8b, 0x54, 0x59, 0x99, - 0x59, 0x9d, 0x99, 0x93, 0xf9, 0x65, 0x56, 0xc1, 0x0d, 0xbd, 0x0a, 0x85, 0x1a, 0xd0, 0xdf, 0xa3, - 0x30, 0x0a, 0x74, 0xc0, 0x5a, 0x44, 0xf4, 0x3f, 0xf0, 0xa4, 0x9e, 0x2e, 0xc6, 0x47, 0x93, 0x60, - 0x3e, 0xf0, 0x02, 0x2f, 0x18, 0x10, 0x77, 0xbc, 0xb8, 0x24, 0x8a, 0x08, 0x5a, 0x19, 0xad, 0xfe, - 0x20, 0x27, 0xae, 0x85, 0xef, 0x8a, 0x68, 0x2e, 0x7d, 0x3d, 0xd0, 0xf3, 0x99, 0x1c, 0xab, 0xc1, - 0x24, 0x98, 0xcf, 0x03, 0x3f, 0xff, 0x19, 0xfb, 0xaf, 0x4d, 0xe8, 0x38, 0xe2, 0x8b, 0x85, 0x50, - 0x9a, 0x1d, 0x40, 0x53, 0x4c, 0xa6, 0x41, 0xaf, 0x7e, 0xbf, 0x76, 0xb0, 0x79, 0xcc, 0x8e, 0x8c, - 0x5c, 0xcc, 0x7d, 0x36, 0x99, 0x06, 0xc3, 0x0d, 0x87, 0x24, 0xd8, 0xfb, 0xd0, 0xba, 0x9c, 0x2d, - 0xd4, 0xb4, 0xd7, 0x20, 0xd1, 0xfd, 0xa2, 0xe8, 0xcf, 0x91, 0x35, 0xdc, 0x70, 0x8c, 0x0c, 0x1e, - 0x2b, 0xfd, 0xcb, 0xa0, 0xd7, 0xac, 0x3a, 0xf6, 0xdc, 0xbf, 0xa4, 0x63, 0x51, 0x82, 0x3d, 0x01, - 0x50, 0x42, 0x8f, 0x82, 0x50, 0xcb, 0xc0, 0xef, 0xb5, 0x48, 0xfe, 0x4e, 0x51, 0xfe, 0x85, 0xd0, - 0xbf, 0x26, 0xf6, 0x70, 0xc3, 0xb1, 0x54, 0x42, 0xa0, 0xa6, 0xf4, 0xa5, 0x1e, 0x4d, 0xa6, 0x5c, - 0xfa, 0xbd, 0x76, 0x95, 0xe6, 0xb9, 0x2f, 0xf5, 0x19, 0xb2, 0x51, 0x53, 0x26, 0x04, 0xba, 0xf2, - 0xc5, 0x42, 0x44, 0xab, 0x5e, 0xa7, 0xca, 0x95, 0xdf, 0x20, 0x0b, 0x5d, 0x21, 0x19, 0xf6, 0x31, - 0x6c, 0x8e, 0x85, 0x27, 0xfd, 0xd1, 0x78, 0x16, 0x4c, 0x5e, 0xf7, 0xba, 0xa4, 0xd2, 0x2b, 0xaa, - 0x9c, 0xa2, 0xc0, 0x29, 0xf2, 0x87, 0x1b, 0x0e, 0x8c, 0x53, 0x8a, 0x1d, 0x43, 0x77, 0x32, 0x15, - 0x93, 0xd7, 0x23, 0xbd, 0xec, 0x59, 0xa4, 0x79, 0xab, 0xa8, 0x79, 0x86, 0xdc, 0x97, 0xcb, 0xe1, - 0x86, 0xd3, 0x99, 0x98, 0x25, 0xfa, 0xe5, 0x8a, 0x99, 0xbc, 0x12, 0x11, 0x6a, 0xed, 0x57, 0xf9, - 0xf5, 0xa9, 0xe1, 0x93, 0x9e, 0xe5, 0x26, 0x04, 0x7b, 0x04, 0x96, 0xf0, 0xdd, 0xd8, 0xd0, 0x4d, - 0x52, 0xbc, 0x5d, 0xfa, 0x45, 0x7d, 0x37, 0x31, 0xb3, 0x2b, 0xe2, 0x35, 0x3b, 0x82, 0x36, 0x66, - 0x89, 0xd4, 0xbd, 0x2d, 0xd2, 0xb9, 0x59, 0x32, 0x91, 0x78, 0xc3, 0x0d, 0x27, 0x96, 0x3a, 0xed, - 0x40, 0xeb, 0x8a, 0xcf, 0x16, 0xc2, 0xfe, 0x3e, 0x6c, 0xe6, 0x32, 0x85, 0xf5, 0xa0, 0x33, 0x17, - 0x4a, 0x71, 0x4f, 0xf4, 0x6a, 0xf7, 0x6b, 0x07, 0x96, 0x93, 0x90, 0xf6, 0x0e, 0x6c, 0xe5, 0xf3, - 0x24, 0xa7, 0x88, 0xb9, 0x80, 0x8a, 0x57, 0x22, 0x52, 0x98, 0x00, 0xb1, 0x62, 0x4c, 0xda, 0x1f, - 0xc1, 0x5e, 0x39, 0x09, 0xd8, 0x1e, 0x34, 0x5e, 0x8b, 0x55, 0x2c, 0x89, 0x4b, 0x76, 0x33, 0x36, - 0x88, 0xb2, 0xd8, 0x72, 0x62, 0xeb, 0x82, 0x54, 0x37, 0x4d, 0x03, 0xf6, 0x18, 0xe0, 0x8a, 0xcf, - 0xa4, 0xcb, 0x75, 0x10, 0xa9, 0x5e, 0xed, 0x7e, 0xe3, 0x60, 0xf3, 0x78, 0x2f, 0x76, 0xf7, 0x55, - 0xc2, 0x38, 0x6d, 0xfe, 0xed, 0xed, 0xbd, 0x0d, 0x27, 0x27, 0xc9, 0xbe, 0x0b, 0xdb, 0x9e, 0xf0, - 0x85, 0x92, 0x6a, 0x34, 0x5e, 0x69, 0xa1, 0xe8, 0x4b, 0x5b, 0xce, 0x56, 0xbc, 0x79, 0x8a, 0x7b, - 0xb6, 0x9b, 0x7a, 0x49, 0x29, 0xc4, 0x18, 0x34, 0x5d, 0xae, 0x39, 0x59, 0xba, 0xe5, 0xd0, 0x1a, - 0xf7, 0x42, 0xae, 0xa7, 0xb1, 0xa5, 0xb4, 0x66, 0xb7, 0xa1, 0x3d, 0x15, 0xd2, 0x9b, 0x6a, 0x2a, - 0xad, 0x86, 0x13, 0x53, 0xe8, 0x56, 0x18, 0x05, 0x57, 0x82, 0xaa, 0xa8, 0xeb, 0x18, 0xc2, 0xfe, - 0x7b, 0x0d, 0x6e, 0x5c, 0x4b, 0x3b, 0x3c, 0x77, 0xca, 0xd5, 0x34, 0xf9, 0x16, 0xae, 0xd9, 0xfb, - 0x78, 0x2e, 0x77, 0x45, 0x14, 0x57, 0xf7, 0x76, 0xec, 0xe8, 0x90, 0x36, 0x63, 0x2f, 0x63, 0x11, - 0xf6, 0x93, 0x42, 0x64, 0x1a, 0x14, 0x99, 0x24, 0xeb, 0x5e, 0x48, 0xcf, 0x97, 0xbe, 0x97, 0x06, - 0xa8, 0x10, 0x9a, 0x21, 0xdc, 0x1c, 0xaf, 0xde, 0x70, 0x5f, 0x4b, 0x5f, 0x8c, 0x72, 0x47, 0x34, - 0xe9, 0x88, 0xdd, 0xf8, 0x88, 0x67, 0x57, 0xd2, 0x15, 0xfe, 0x44, 0xc4, 0x5f, 0xdd, 0x4f, 0x55, - 0xd2, 0x43, 0x95, 0x7d, 0x1f, 0x76, 0x8a, 0x55, 0xc1, 0x76, 0xa0, 0xae, 0x97, 0xb1, 0x4f, 0x75, - 0xbd, 0xb4, 0xed, 0xf4, 0x27, 0x4d, 0x2b, 0xe0, 0x9a, 0xcc, 0x43, 0xd8, 0x2d, 0x25, 0x7b, 0x2e, - 0xc0, 0xb5, 0x7c, 0x80, 0xed, 0x5d, 0xd8, 0x2e, 0xe4, 0xb8, 0xfd, 0x55, 0x0b, 0xba, 0x8e, 0x50, - 0x61, 0xe0, 0x2b, 0xc1, 0x9e, 0x80, 0x25, 0x96, 0x13, 0x61, 0x80, 0xa9, 0x56, 0x2a, 0x7b, 0x23, - 0xf3, 0x2c, 0xe1, 0x63, 0x1d, 0xa6, 0xc2, 0xec, 0x61, 0x01, 0x54, 0xf7, 0xcb, 0x4a, 0x79, 0x54, - 0x3d, 0x2c, 0xa2, 0xea, 0xcd, 0x92, 0x6c, 0x09, 0x56, 0x1f, 0x16, 0x60, 0xb5, 0x7c, 0x70, 0x01, - 0x57, 0x9f, 0x56, 0xe0, 0x6a, 0xd9, 0xfc, 0x35, 0xc0, 0xfa, 0xb4, 0x02, 0x58, 0x7b, 0xd7, 0xbe, - 0x55, 0x89, 0xac, 0x87, 0x45, 0x64, 0x2d, 0xbb, 0x53, 0x82, 0xd6, 0x9f, 0x56, 0x41, 0xeb, 0xdd, - 0x92, 0xce, 0x5a, 0x6c, 0xfd, 0xf0, 0x1a, 0xb6, 0xde, 0x2e, 0xa9, 0x56, 0x80, 0xeb, 0xd3, 0x02, - 0xb8, 0x42, 0xa5, 0x6f, 0x6b, 0xd0, 0xf5, 0xf1, 0x75, 0x74, 0xbd, 0x53, 0xfe, 0x69, 0xab, 0xe0, - 0x75, 0x50, 0x82, 0xd7, 0x5b, 0x65, 0x2b, 0xd7, 0xe2, 0xeb, 0x43, 0xac, 0xf4, 0x52, 0xa6, 0x21, - 0x2a, 0x88, 0x28, 0x0a, 0xa2, 0x18, 0x00, 0x0d, 0x61, 0x1f, 0x20, 0xf6, 0x64, 0xf9, 0xf5, 0x35, - 0x58, 0x4c, 0x49, 0x9f, 0xcb, 0x2e, 0xfb, 0x8f, 0xb5, 0x4c, 0x97, 0xe0, 0x38, 0x8f, 0x5b, 0x56, - 0x8c, 0x5b, 0x39, 0x88, 0xae, 0x17, 0x20, 0x9a, 0xfd, 0x00, 0x6e, 0xcc, 0xb8, 0xd2, 0x26, 0x2e, - 0xa3, 0x02, 0x90, 0xed, 0x22, 0xc3, 0x04, 0xc4, 0x20, 0xda, 0x07, 0xb0, 0x9f, 0x93, 0xe5, 0x61, - 0x38, 0x22, 0xd0, 0x6a, 0x52, 0xf1, 0xee, 0xa5, 0xd2, 0x27, 0x61, 0x38, 0xe4, 0x6a, 0x6a, 0xff, - 0x32, 0xf3, 0x3f, 0x83, 0x7f, 0x06, 0xcd, 0x49, 0xe0, 0x1a, 0xb7, 0xb6, 0x1d, 0x5a, 0x63, 0x4b, - 0x98, 0x05, 0x1e, 0x7d, 0xd5, 0x72, 0x70, 0x89, 0x52, 0x69, 0xa5, 0x58, 0xa6, 0x24, 0xec, 0xe7, - 0xd9, 0x71, 0xff, 0x77, 0x47, 0xb0, 0xff, 0x52, 0xcb, 0xe2, 0x98, 0xc2, 0xfd, 0xbb, 0x19, 0x86, - 0x3f, 0xa9, 0xf4, 0x5d, 0xb1, 0xa4, 0x32, 0x6d, 0x38, 0x86, 0x48, 0xfa, 0x5c, 0x9b, 0x82, 0x53, - 0xec, 0x73, 0x1d, 0xda, 0x33, 0x44, 0xdc, 0x26, 0x82, 0x4b, 0xaa, 0x9f, 0x2d, 0xc7, 0x10, 0x39, - 0xcc, 0xb3, 0x0a, 0x98, 0x77, 0x01, 0xec, 0x7a, 0x65, 0xb1, 0x8f, 0xa0, 0xa9, 0xb9, 0x97, 0xf8, - 0xbf, 0x73, 0x64, 0xa6, 0xc6, 0xa3, 0xe7, 0xaf, 0x2e, 0xb8, 0x8c, 0x4e, 0x6f, 0xa3, 0xf7, 0xff, - 0x7a, 0x7b, 0x6f, 0x07, 0x65, 0x0e, 0x83, 0xb9, 0xd4, 0x62, 0x1e, 0xea, 0x95, 0x43, 0x3a, 0xf6, - 0xbf, 0x6b, 0x88, 0xb8, 0x85, 0x8a, 0xab, 0x8c, 0x45, 0x92, 0x56, 0xf5, 0x5c, 0x3b, 0xfc, 0x66, - 0xf1, 0xf9, 0x0e, 0x80, 0xc7, 0xd5, 0xe8, 0x4b, 0xee, 0x6b, 0xe1, 0xc6, 0x41, 0xb2, 0x3c, 0xae, - 0x7e, 0x4b, 0x1b, 0xec, 0x2e, 0x74, 0x91, 0xbd, 0x50, 0xc2, 0xa5, 0x68, 0x35, 0x9c, 0x8e, 0xc7, - 0xd5, 0xe7, 0x4a, 0xb8, 0xa9, 0x5f, 0x9d, 0xff, 0xdd, 0x2f, 0x76, 0x00, 0x8d, 0x4b, 0x21, 0x62, - 0x54, 0xda, 0x4b, 0x55, 0xcf, 0x1f, 0xff, 0x98, 0x94, 0x4d, 0x4a, 0xa0, 0x88, 0xfd, 0xfb, 0x7a, - 0x96, 0x59, 0x59, 0x63, 0xfa, 0x76, 0xc5, 0xe0, 0x9f, 0x35, 0xec, 0xcd, 0x45, 0x18, 0x64, 0x67, - 0x70, 0x23, 0x2d, 0x99, 0xd1, 0x22, 0x74, 0x39, 0x8e, 0x4e, 0x5f, 0x5f, 0x63, 0x7b, 0xa9, 0xc2, - 0xe7, 0x46, 0x9e, 0xfd, 0x0a, 0xee, 0x4c, 0xf0, 0x54, 0x5f, 0x2d, 0xd4, 0x28, 0xe4, 0x11, 0x9f, - 0xa7, 0x47, 0xd5, 0x0b, 0xb0, 0x7f, 0x96, 0x48, 0x5d, 0xa0, 0x90, 0x72, 0x6e, 0x4d, 0x0a, 0x1b, - 0xc9, 0x79, 0x49, 0x3c, 0x1a, 0xef, 0x90, 0xeb, 0xdf, 0xc3, 0x11, 0x25, 0x0f, 0xdb, 0x55, 0xbf, - 0xa8, 0xfd, 0xa7, 0x1a, 0xec, 0x96, 0x8c, 0x61, 0x03, 0x00, 0x83, 0x7a, 0x4a, 0xbe, 0x11, 0xf1, - 0x38, 0x91, 0xc4, 0x80, 0x82, 0xf5, 0x42, 0xbe, 0x11, 0x8e, 0x35, 0x4e, 0x96, 0xec, 0x01, 0x74, - 0xf4, 0xd2, 0x48, 0x17, 0xc7, 0xb7, 0x97, 0x4b, 0x12, 0x6d, 0x6b, 0xfa, 0xcf, 0x1e, 0xc1, 0x96, - 0x39, 0xd8, 0x0b, 0x94, 0x92, 0x61, 0x3c, 0x48, 0xb0, 0xfc, 0xd1, 0x9f, 0x11, 0xc7, 0xd9, 0x1c, - 0x67, 0x84, 0xfd, 0x3b, 0xb0, 0xd2, 0xcf, 0xb2, 0xf7, 0xc0, 0x9a, 0xf3, 0x65, 0x3c, 0xda, 0xa2, - 0x6d, 0x2d, 0xa7, 0x3b, 0xe7, 0x4b, 0x1a, 0x6b, 0xd9, 0x1d, 0xe8, 0x20, 0x53, 0x2f, 0x4d, 0xbc, - 0x5b, 0x4e, 0x7b, 0xce, 0x97, 0x2f, 0x97, 0x29, 0xc3, 0xe3, 0x2a, 0x19, 0x5c, 0xe7, 0x7c, 0xf9, - 0x19, 0x57, 0xf6, 0x27, 0xd0, 0x36, 0x46, 0x7e, 0xa3, 0x83, 0x51, 0xbf, 0x5e, 0xd0, 0xff, 0x19, - 0x6c, 0xe6, 0xec, 0x66, 0x3f, 0x82, 0x5b, 0xc6, 0xc3, 0x90, 0x47, 0x9a, 0x22, 0x52, 0x38, 0x90, - 0x11, 0xf3, 0x82, 0x47, 0x1a, 0x3f, 0x69, 0x46, 0xf1, 0x3f, 0xd4, 0xa1, 0x6d, 0xc6, 0x5c, 0xf6, - 0x00, 0xc7, 0x04, 0x2e, 0xfd, 0x91, 0x74, 0x4d, 0x47, 0x3b, 0xdd, 0xfc, 0xc7, 0xdb, 0x7b, 0x1d, - 0x42, 0xff, 0xf3, 0x4f, 0x71, 0x32, 0xc0, 0x85, 0x9b, 0x03, 0xcc, 0x7a, 0x61, 0x0a, 0x67, 0xd0, - 0xd4, 0x72, 0x2e, 0x62, 0x17, 0x69, 0x8d, 0x96, 0xfb, 0x8b, 0x39, 0x85, 0xa4, 0x69, 0x42, 0xe2, - 0x2f, 0xe6, 0x18, 0x92, 0xf7, 0xc0, 0xd2, 0x81, 0xe6, 0x33, 0x62, 0x99, 0x22, 0xed, 0xd2, 0x06, - 0x32, 0x1f, 0xc0, 0x6e, 0xbe, 0x53, 0x62, 0xe7, 0x33, 0xe0, 0xbe, 0x9d, 0xf5, 0x49, 0x9c, 0xdb, - 0xef, 0x42, 0x37, 0x6d, 0x8d, 0x06, 0xe9, 0x3b, 0xdc, 0x74, 0x44, 0x76, 0x08, 0xdd, 0x30, 0x0a, - 0xc2, 0x40, 0x89, 0x28, 0x2d, 0xca, 0x52, 0x1d, 0x39, 0xa9, 0x84, 0x2d, 0xc1, 0x4a, 0xb7, 0xb1, - 0x83, 0x73, 0xd7, 0x8d, 0x84, 0x52, 0xf1, 0xb0, 0x9c, 0x90, 0xec, 0x10, 0x3a, 0xe1, 0x62, 0x3c, - 0xc2, 0x66, 0x53, 0xcc, 0xb4, 0x8b, 0xc5, 0xf8, 0xb9, 0x58, 0x25, 0x17, 0x85, 0x90, 0x28, 0x6a, - 0x37, 0xc1, 0x97, 0x22, 0x8a, 0x03, 0x62, 0x08, 0xdb, 0x87, 0xbd, 0xf2, 0x2d, 0x81, 0x1d, 0x81, - 0x95, 0x16, 0x73, 0x29, 0xe3, 0x33, 0x6b, 0x33, 0x11, 0x9c, 0x24, 0x94, 0xf4, 0x7c, 0xe1, 0x8e, - 0xb2, 0x30, 0x91, 0x45, 0x5d, 0x67, 0xd7, 0x30, 0x7e, 0x91, 0xc4, 0xc9, 0xfe, 0x21, 0xb4, 0x8d, - 0x75, 0xf4, 0xfb, 0xac, 0xc2, 0x64, 0xcc, 0xa1, 0x75, 0x65, 0x51, 0xfe, 0xb9, 0x06, 0xdd, 0xe4, - 0x16, 0x52, 0xa9, 0x54, 0x30, 0xb7, 0xfe, 0xdf, 0xcd, 0x5d, 0x77, 0x6d, 0x4b, 0x12, 0xa6, 0x99, - 0x4b, 0x98, 0x43, 0x60, 0x26, 0x2f, 0xae, 0x02, 0x2d, 0x7d, 0x6f, 0x64, 0x22, 0x68, 0x12, 0x64, - 0x8f, 0x38, 0xaf, 0x88, 0x71, 0x81, 0xfb, 0xc7, 0x5f, 0xb5, 0x60, 0xf7, 0xe4, 0xf4, 0xec, 0xfc, - 0x24, 0x0c, 0x67, 0x72, 0xc2, 0x69, 0xec, 0x19, 0x40, 0x93, 0x06, 0xbb, 0x8a, 0x27, 0x9a, 0x7e, - 0xd5, 0x0d, 0x83, 0x1d, 0x43, 0x8b, 0xe6, 0x3b, 0x56, 0xf5, 0x52, 0xd3, 0xaf, 0xbc, 0x68, 0xe0, - 0x47, 0xcc, 0x04, 0x78, 0xfd, 0xc1, 0xa6, 0x5f, 0x75, 0xdb, 0x60, 0x9f, 0x80, 0x95, 0x4d, 0x66, - 0xeb, 0x9e, 0x6d, 0xfa, 0x6b, 0xef, 0x1d, 0xa8, 0x9f, 0x35, 0xcc, 0x75, 0x8f, 0x1c, 0xfd, 0xb5, - 0x03, 0x3a, 0x7b, 0x02, 0x9d, 0x64, 0xe4, 0xa8, 0x7e, 0x58, 0xe9, 0xaf, 0xb9, 0x13, 0x60, 0x78, - 0xcc, 0xd8, 0x56, 0xf5, 0xfa, 0xd3, 0xaf, 0xbc, 0xb8, 0xb0, 0x47, 0xd0, 0x8e, 0x51, 0xbf, 0xf2, - 0x89, 0xa4, 0x5f, 0x3d, 0xd9, 0xa3, 0x93, 0xd9, 0xbc, 0xb9, 0xee, 0x85, 0xaa, 0xbf, 0xf6, 0x86, - 0xc5, 0x4e, 0x00, 0x72, 0xa3, 0xda, 0xda, 0xa7, 0xa7, 0xfe, 0xfa, 0x9b, 0x13, 0xfb, 0x18, 0xba, - 0xd9, 0x6d, 0xb8, 0xfa, 0x49, 0xa8, 0xbf, 0xee, 0x32, 0x33, 0x6e, 0xd3, 0xb3, 0xe1, 0x87, 0xff, - 0x09, 0x00, 0x00, 0xff, 0xff, 0x39, 0xa6, 0xae, 0x4d, 0xb2, 0x14, 0x00, 0x00, + // 1864 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0xcd, 0x72, 0x1b, 0xc7, + 0x11, 0x26, 0xfe, 0xb1, 0x0d, 0x8a, 0x80, 0x86, 0x92, 0x08, 0xc1, 0x95, 0x92, 0x6a, 0xcb, 0xa5, + 0x50, 0x31, 0x4d, 0x38, 0x74, 0xa4, 0x48, 0x56, 0xca, 0x15, 0x92, 0x96, 0x05, 0x46, 0xf9, 0x61, + 0x56, 0xb2, 0x52, 0x95, 0xcb, 0xd6, 0x00, 0x3b, 0x5c, 0x4c, 0x04, 0xec, 0xae, 0x77, 0x06, 0x34, + 0xa0, 0x5b, 0x2a, 0x87, 0x5c, 0x7c, 0xcf, 0x39, 0xb7, 0xbc, 0x40, 0x5e, 0x21, 0x95, 0x37, 0xc8, + 0x4d, 0x87, 0xe4, 0x96, 0x97, 0x48, 0x6a, 0x7a, 0xf6, 0x9f, 0xbb, 0xb1, 0xa3, 0x1c, 0x73, 0x21, + 0xa7, 0xb7, 0xbb, 0x07, 0xd3, 0x3d, 0xdd, 0x5f, 0x77, 0x0f, 0x5c, 0x97, 0x9b, 0x80, 0x89, 0x31, + 0xfe, 0x3d, 0x0c, 0x42, 0x5f, 0xfa, 0xa4, 0x85, 0xc4, 0xe8, 0x43, 0x97, 0xcb, 0xf9, 0x6a, 0x7a, + 0x38, 0xf3, 0x97, 0x63, 0xd7, 0x77, 0xfd, 0x31, 0x72, 0xa7, 0xab, 0x0b, 0xa4, 0x90, 0xc0, 0x95, + 0xd6, 0x1a, 0x8d, 0x33, 0xe2, 0x92, 0x79, 0x0e, 0x0b, 0x97, 0xdc, 0x93, 0x63, 0xb9, 0x5c, 0xf0, + 0xa9, 0x18, 0xcf, 0xfc, 0xe5, 0xd2, 0xf7, 0xb2, 0x3f, 0x63, 0xfe, 0xa5, 0x09, 0x1d, 0x8b, 0x7d, + 0xb9, 0x62, 0x42, 0x92, 0x7d, 0x68, 0xb2, 0xd9, 0xdc, 0x1f, 0xd6, 0xef, 0xd6, 0xf6, 0x7b, 0x47, + 0xe4, 0x50, 0xcb, 0x45, 0xdc, 0xa7, 0xb3, 0xb9, 0x3f, 0xd9, 0xb2, 0x50, 0x82, 0x7c, 0x00, 0xad, + 0x8b, 0xc5, 0x4a, 0xcc, 0x87, 0x0d, 0x14, 0xdd, 0xcd, 0x8b, 0x7e, 0xae, 0x58, 0x93, 0x2d, 0x4b, + 0xcb, 0xa8, 0x6d, 0xb9, 0x77, 0xe1, 0x0f, 0x9b, 0x65, 0xdb, 0x9e, 0x79, 0x17, 0xb8, 0xad, 0x92, + 0x20, 0x8f, 0x00, 0x04, 0x93, 0xb6, 0x1f, 0x48, 0xee, 0x7b, 0xc3, 0x16, 0xca, 0xef, 0xe5, 0xe5, + 0x5f, 0x30, 0xf9, 0x0b, 0x64, 0x4f, 0xb6, 0x2c, 0x43, 0xc4, 0x84, 0xd2, 0xe4, 0x1e, 0x97, 0xf6, + 0x6c, 0x4e, 0xb9, 0x37, 0x6c, 0x97, 0x69, 0x9e, 0x79, 0x5c, 0x9e, 0x2a, 0xb6, 0xd2, 0xe4, 0x31, + 0xa1, 0x4c, 0xf9, 0x72, 0xc5, 0xc2, 0xcd, 0xb0, 0x53, 0x66, 0xca, 0x2f, 0x15, 0x4b, 0x99, 0x82, + 0x32, 0xe4, 0x09, 0xf4, 0xa6, 0xcc, 0xe5, 0x9e, 0x3d, 0x5d, 0xf8, 0xb3, 0xd7, 0xc3, 0x2e, 0xaa, + 0x0c, 0xf3, 0x2a, 0x27, 0x4a, 0xe0, 0x44, 0xf1, 0x27, 0x5b, 0x16, 0x4c, 0x13, 0x8a, 0x1c, 0x41, + 0x77, 0x36, 0x67, 0xb3, 0xd7, 0xb6, 0x5c, 0x0f, 0x0d, 0xd4, 0xbc, 0x99, 0xd7, 0x3c, 0x55, 0xdc, + 0x97, 0xeb, 0xc9, 0x96, 0xd5, 0x99, 0xe9, 0xa5, 0xb2, 0xcb, 0x61, 0x0b, 0x7e, 0xc9, 0x42, 0xa5, + 0xb5, 0x5b, 0x66, 0xd7, 0x67, 0x9a, 0x8f, 0x7a, 0x86, 0x13, 0x13, 0xe4, 0x01, 0x18, 0xcc, 0x73, + 0xa2, 0x83, 0xf6, 0x50, 0xf1, 0x56, 0xe1, 0x46, 0x3d, 0x27, 0x3e, 0x66, 0x97, 0x45, 0x6b, 0x72, + 0x08, 0x6d, 0x15, 0x25, 0x5c, 0x0e, 0xb7, 0x51, 0xe7, 0x46, 0xe1, 0x88, 0xc8, 0x9b, 0x6c, 0x59, + 0x91, 0xd4, 0x49, 0x07, 0x5a, 0x97, 0x74, 0xb1, 0x62, 0xe6, 0x77, 0xa1, 0x97, 0x89, 0x14, 0x32, + 0x84, 0xce, 0x92, 0x09, 0x41, 0x5d, 0x36, 0xac, 0xdd, 0xad, 0xed, 0x1b, 0x56, 0x4c, 0x9a, 0x3b, + 0xb0, 0x9d, 0x8d, 0x93, 0x8c, 0xa2, 0x8a, 0x05, 0xa5, 0x78, 0xc9, 0x42, 0xa1, 0x02, 0x20, 0x52, + 0x8c, 0x48, 0xf3, 0x13, 0x18, 0x14, 0x83, 0x80, 0x0c, 0xa0, 0xf1, 0x9a, 0x6d, 0x22, 0x49, 0xb5, + 0x24, 0x37, 0xa2, 0x03, 0x61, 0x14, 0x1b, 0x56, 0x74, 0xba, 0xdf, 0xd7, 0x12, 0xe5, 0x24, 0x0e, + 0xc8, 0x43, 0x80, 0x4b, 0xba, 0xe0, 0x0e, 0x95, 0x7e, 0x28, 0x86, 0xb5, 0xbb, 0x8d, 0xfd, 0xde, + 0xd1, 0x20, 0xb2, 0xf7, 0x55, 0xcc, 0x38, 0x69, 0xfe, 0xf5, 0xed, 0x9d, 0x2d, 0x2b, 0x23, 0x49, + 0x9e, 0xc0, 0xb6, 0xcb, 0x3c, 0x26, 0xb8, 0xb0, 0x2f, 0xf8, 0x82, 0x15, 0xf2, 0xe5, 0x99, 0x66, + 0x7d, 0xce, 0x17, 0x2c, 0xd2, 0xed, 0xb9, 0xe9, 0x27, 0xd3, 0x49, 0xcc, 0xc7, 0xd8, 0x22, 0x04, + 0x9a, 0x0e, 0x95, 0x14, 0x4d, 0xd8, 0xb6, 0x70, 0xad, 0xbe, 0x05, 0x54, 0xce, 0x23, 0x13, 0x70, + 0x4d, 0x6e, 0x41, 0x7b, 0xce, 0xb8, 0x3b, 0x97, 0x98, 0x73, 0x0d, 0x2b, 0xa2, 0x94, 0xbd, 0x41, + 0xe8, 0x5f, 0x32, 0x4c, 0xaf, 0xae, 0xa5, 0x09, 0xf3, 0x6f, 0x35, 0xb8, 0x7e, 0x25, 0x1e, 0xd5, + 0xbe, 0x73, 0x2a, 0xe6, 0xf1, 0x6f, 0xa9, 0x35, 0xf9, 0x40, 0xed, 0x4b, 0x1d, 0x16, 0x46, 0x66, + 0x5c, 0x8b, 0xcc, 0x98, 0xe0, 0xc7, 0xc8, 0x82, 0x48, 0x84, 0xfc, 0x30, 0xe7, 0xb1, 0x06, 0x7a, + 0x2c, 0x0e, 0xc7, 0x17, 0xdc, 0xf5, 0xb8, 0xe7, 0x26, 0x8e, 0xcb, 0xb9, 0x6c, 0x02, 0x37, 0xa6, + 0x9b, 0x37, 0xd4, 0x93, 0xdc, 0x63, 0x76, 0x66, 0x8b, 0x26, 0x6e, 0xd1, 0x8f, 0xb6, 0x78, 0x7a, + 0xc9, 0x1d, 0xe6, 0xcd, 0x62, 0xbf, 0xed, 0x26, 0x2a, 0xc9, 0xa6, 0xc2, 0xbc, 0x0b, 0x3b, 0xf9, + 0x74, 0x21, 0x3b, 0x50, 0x97, 0xeb, 0xc8, 0xa6, 0xba, 0x5c, 0x9b, 0x66, 0x72, 0xd5, 0x49, 0x6a, + 0x5c, 0x91, 0xb9, 0x0f, 0xfd, 0x42, 0x16, 0x64, 0x1c, 0x5c, 0xcb, 0x3a, 0xd8, 0xec, 0xc3, 0xb5, + 0x5c, 0xf0, 0x9b, 0x5f, 0xb7, 0xa0, 0x6b, 0x31, 0x11, 0xf8, 0x9e, 0x60, 0xe4, 0x11, 0x18, 0x6c, + 0x3d, 0x63, 0x1a, 0xb1, 0x6a, 0x05, 0x3c, 0xd0, 0x32, 0x4f, 0x63, 0xbe, 0x4a, 0xd0, 0x44, 0x98, + 0xdc, 0xcf, 0xa1, 0xed, 0x6e, 0x51, 0x29, 0x0b, 0xb7, 0x07, 0x79, 0xb8, 0xbd, 0x51, 0x90, 0x2d, + 0xe0, 0xed, 0xfd, 0x1c, 0xde, 0x16, 0x37, 0xce, 0x01, 0xee, 0xe3, 0x12, 0xc0, 0x2d, 0x1e, 0xbf, + 0x02, 0x71, 0x1f, 0x97, 0x20, 0xee, 0xf0, 0xca, 0x6f, 0x95, 0x42, 0xee, 0x41, 0x1e, 0x72, 0x8b, + 0xe6, 0x14, 0x30, 0xf7, 0x47, 0x65, 0x98, 0x7b, 0xbb, 0xa0, 0x53, 0x09, 0xba, 0x1f, 0x5f, 0x01, + 0xdd, 0x5b, 0x05, 0xd5, 0x12, 0xd4, 0x7d, 0x9c, 0x43, 0x5d, 0x28, 0xb5, 0xad, 0x02, 0x76, 0x1f, + 0x5e, 0x85, 0xdd, 0xbd, 0xe2, 0xd5, 0x96, 0xe1, 0xee, 0xb8, 0x80, 0xbb, 0x37, 0x8b, 0xa7, 0xac, + 0x04, 0xde, 0xfb, 0x2a, 0xd3, 0x0b, 0x91, 0xa6, 0x50, 0x81, 0x85, 0xa1, 0x1f, 0x46, 0xc8, 0xa8, + 0x09, 0x73, 0x5f, 0x61, 0x4f, 0x1a, 0x5f, 0xff, 0x01, 0xa4, 0x31, 0xe8, 0x33, 0xd1, 0x65, 0xfe, + 0xa1, 0x96, 0xea, 0x22, 0x4e, 0x67, 0x71, 0xcb, 0x88, 0x70, 0x2b, 0x83, 0xdd, 0xf5, 0x1c, 0x76, + 0x93, 0xef, 0xc1, 0xf5, 0x05, 0x15, 0x52, 0xfb, 0xc5, 0xce, 0x01, 0x59, 0x5f, 0x31, 0xb4, 0x43, + 0x34, 0xa2, 0x7d, 0x08, 0xbb, 0x19, 0x59, 0x1a, 0x04, 0x36, 0x82, 0x56, 0x13, 0x93, 0x77, 0x90, + 0x48, 0x1f, 0x07, 0xc1, 0x84, 0x8a, 0xb9, 0xf9, 0xb3, 0xd4, 0xfe, 0xb4, 0x2e, 0x10, 0x68, 0xce, + 0x7c, 0x47, 0x9b, 0x75, 0xcd, 0xc2, 0xb5, 0xaa, 0x15, 0x0b, 0xdf, 0xc5, 0x5f, 0x35, 0x2c, 0xb5, + 0x54, 0x52, 0x49, 0xa6, 0x18, 0x3a, 0x25, 0xcc, 0xe7, 0xe9, 0x76, 0xff, 0x73, 0xa5, 0x30, 0xff, + 0x5c, 0x4b, 0xfd, 0x98, 0xc0, 0xfd, 0xbb, 0x1d, 0x4c, 0x5d, 0x29, 0xf7, 0x1c, 0xb6, 0xc6, 0x34, + 0x6d, 0x58, 0x9a, 0x88, 0x0b, 0x60, 0x1b, 0x9d, 0x93, 0x2f, 0x80, 0x1d, 0xfc, 0xa6, 0x89, 0xa8, + 0x4c, 0xf8, 0x17, 0x98, 0x3f, 0xdb, 0x96, 0x26, 0x32, 0x98, 0x67, 0xe4, 0x30, 0xef, 0x1c, 0xc8, + 0xd5, 0xcc, 0x22, 0x9f, 0x40, 0x53, 0x52, 0x37, 0xb6, 0x7f, 0xe7, 0x50, 0xb7, 0x93, 0x87, 0xcf, + 0x5f, 0x9d, 0x53, 0x1e, 0x9e, 0xdc, 0x52, 0xd6, 0xff, 0xf3, 0xed, 0x9d, 0x1d, 0x25, 0x73, 0xe0, + 0x2f, 0xb9, 0x64, 0xcb, 0x40, 0x6e, 0x2c, 0xd4, 0x31, 0xff, 0x55, 0x53, 0x88, 0x9b, 0xcb, 0xb8, + 0x52, 0x5f, 0xc4, 0x61, 0x55, 0xcf, 0x94, 0xc3, 0x6f, 0xe7, 0x9f, 0xef, 0x00, 0xb8, 0x54, 0xd8, + 0x5f, 0x51, 0x4f, 0x32, 0x27, 0x72, 0x92, 0xe1, 0x52, 0xf1, 0x2b, 0xfc, 0x40, 0x6e, 0x43, 0x57, + 0xb1, 0x57, 0x82, 0x39, 0xe8, 0xad, 0x86, 0xd5, 0x71, 0xa9, 0xf8, 0x42, 0x30, 0x27, 0xb1, 0xab, + 0xf3, 0xdf, 0xdb, 0x45, 0xf6, 0xa1, 0x71, 0xc1, 0x58, 0x84, 0x4a, 0x83, 0x44, 0xf5, 0xec, 0xe1, + 0x0f, 0x50, 0x59, 0x87, 0x84, 0x12, 0x31, 0x7f, 0x5b, 0x4f, 0x23, 0x2b, 0x2d, 0x4c, 0xff, 0x5f, + 0x3e, 0xf8, 0x07, 0xb6, 0x61, 0x79, 0x18, 0x24, 0xa7, 0x70, 0x3d, 0x49, 0x19, 0x7b, 0x15, 0x38, + 0x54, 0xb2, 0x6f, 0xca, 0xb1, 0x41, 0xa2, 0xf0, 0x85, 0x96, 0x27, 0x3f, 0x87, 0xbd, 0x99, 0xda, + 0xd5, 0x13, 0x2b, 0x61, 0x07, 0x34, 0xa4, 0xcb, 0x64, 0xab, 0x7a, 0x0e, 0xf6, 0x4f, 0x63, 0xa9, + 0x73, 0x25, 0x24, 0xac, 0x9b, 0xb3, 0xdc, 0x87, 0x78, 0xbf, 0xd8, 0x1f, 0x8d, 0x77, 0x88, 0xf5, + 0xf7, 0x55, 0x8b, 0x92, 0x85, 0xed, 0xb2, 0x1b, 0x35, 0xff, 0x58, 0x83, 0x7e, 0xe1, 0x30, 0x64, + 0x0c, 0xa0, 0x51, 0x4f, 0xf0, 0x37, 0x2c, 0x6a, 0x27, 0x62, 0x1f, 0xa0, 0xb3, 0x5e, 0xf0, 0x37, + 0xcc, 0x32, 0xa6, 0xf1, 0x92, 0xdc, 0x83, 0x8e, 0x5c, 0x6b, 0xe9, 0x7c, 0xfb, 0xf6, 0x72, 0x8d, + 0xa2, 0x6d, 0x89, 0xff, 0xc9, 0x03, 0xd8, 0xd6, 0x1b, 0xbb, 0xbe, 0x10, 0x3c, 0x88, 0x1a, 0x09, + 0x92, 0xdd, 0xfa, 0x19, 0x72, 0xac, 0xde, 0x34, 0x25, 0xcc, 0x5f, 0x83, 0x91, 0xfc, 0x2c, 0x79, + 0x0f, 0x8c, 0x25, 0x5d, 0xdb, 0xd3, 0x8d, 0xbe, 0x9f, 0xda, 0x7e, 0xcb, 0xea, 0x2e, 0xe9, 0xfa, + 0x44, 0xd1, 0x64, 0x0f, 0x3a, 0x8a, 0x29, 0xd7, 0xda, 0xdf, 0x2d, 0xab, 0xbd, 0xa4, 0xeb, 0x97, + 0xeb, 0x84, 0xe1, 0x52, 0x11, 0x37, 0xae, 0x4b, 0xba, 0x7e, 0x46, 0x85, 0xf9, 0x29, 0xb4, 0xf5, + 0x21, 0xbf, 0xd5, 0xc6, 0x4a, 0xbf, 0x9e, 0xd3, 0xff, 0x31, 0xf4, 0x32, 0xe7, 0x26, 0xdf, 0x87, + 0x9b, 0xda, 0xc2, 0x80, 0x86, 0x12, 0x3d, 0x92, 0xdb, 0x90, 0x20, 0xf3, 0x9c, 0x86, 0x52, 0xfd, + 0x24, 0x6e, 0xad, 0x9a, 0xe4, 0x5e, 0xa6, 0x5b, 0x57, 0xb7, 0x24, 0xf9, 0x92, 0x45, 0xfd, 0x1f, + 0xae, 0x55, 0xca, 0x60, 0x87, 0x63, 0x73, 0x27, 0xae, 0x69, 0x48, 0x9f, 0x39, 0xe4, 0x18, 0x06, + 0x85, 0x90, 0x13, 0x91, 0x5f, 0xab, 0x62, 0xad, 0x3f, 0x2b, 0xdc, 0xf7, 0x47, 0xb9, 0xba, 0xd2, + 0x2c, 0x8f, 0xf9, 0x5c, 0x23, 0xfd, 0x3e, 0xec, 0xa8, 0x8a, 0x28, 0x24, 0x95, 0xcc, 0xfe, 0x8d, + 0x88, 0xba, 0xb6, 0x6d, 0x6b, 0x9b, 0x06, 0xc1, 0x0b, 0xf5, 0xf1, 0x27, 0xc2, 0xf7, 0xcc, 0xdf, + 0xd5, 0xa1, 0xad, 0x1b, 0x78, 0x72, 0x2f, 0x63, 0x00, 0xd6, 0xea, 0x93, 0xde, 0xdf, 0xdf, 0xde, + 0xe9, 0x60, 0x5d, 0x3b, 0xfb, 0x2c, 0xb5, 0x26, 0x2d, 0x05, 0xf5, 0xdc, 0x7c, 0x11, 0x3b, 0xa5, + 0x91, 0x71, 0xca, 0x1e, 0x74, 0xbc, 0xd5, 0x12, 0x2f, 0xbb, 0xa9, 0x2f, 0xdb, 0x5b, 0x2d, 0xd5, + 0x65, 0xbf, 0x07, 0x86, 0xf4, 0x25, 0x5d, 0x20, 0x4b, 0xc3, 0x4f, 0x17, 0x3f, 0x28, 0xe6, 0x3d, + 0xe8, 0x67, 0x7b, 0x00, 0x55, 0xd3, 0x75, 0xd9, 0xba, 0x96, 0x76, 0x00, 0x6a, 0x22, 0xb9, 0x0d, + 0xdd, 0xa4, 0xe8, 0xeb, 0x1a, 0xd6, 0xa1, 0xba, 0xd6, 0x93, 0x03, 0xe8, 0x06, 0xa1, 0x1f, 0xf8, + 0x82, 0x85, 0x09, 0xdc, 0x14, 0xbd, 0x95, 0x48, 0x98, 0x1c, 0x8c, 0xe4, 0xb3, 0xea, 0x4d, 0xa8, + 0xe3, 0x84, 0x4c, 0x88, 0x68, 0x0c, 0x88, 0x49, 0x72, 0x00, 0x9d, 0x60, 0x35, 0xb5, 0x55, 0x19, + 0xcd, 0xe7, 0xd0, 0xf9, 0x6a, 0xfa, 0x9c, 0x6d, 0xe2, 0x11, 0x28, 0x40, 0x0a, 0x0b, 0xa9, 0xff, + 0x15, 0x0b, 0x23, 0x87, 0x68, 0xc2, 0xf4, 0x60, 0x50, 0x9c, 0x7f, 0xc8, 0x21, 0x18, 0xc9, 0xc5, + 0x15, 0x72, 0x39, 0x3d, 0x6d, 0x2a, 0xa2, 0x7a, 0x24, 0xc1, 0x5d, 0x8f, 0x39, 0x76, 0xea, 0x26, + 0x3c, 0x51, 0xd7, 0xea, 0x6b, 0xc6, 0x4f, 0x63, 0x3f, 0x99, 0x1f, 0x41, 0x5b, 0x9f, 0x0e, 0xef, + 0x67, 0x13, 0xc4, 0x0d, 0x1c, 0xae, 0x4b, 0xe1, 0xe6, 0x4f, 0x35, 0xe8, 0xc6, 0xf3, 0x55, 0xa9, + 0x52, 0xee, 0xb8, 0xf5, 0x6f, 0x3e, 0x6e, 0xd5, 0x40, 0x1a, 0x07, 0x4c, 0x33, 0x13, 0x30, 0x07, + 0x40, 0x74, 0x5c, 0x5c, 0xfa, 0x92, 0x7b, 0xae, 0xad, 0x3d, 0xa8, 0x03, 0x64, 0x80, 0x9c, 0x57, + 0xc8, 0x38, 0x57, 0xdf, 0x8f, 0xbe, 0x6e, 0x41, 0xff, 0xf8, 0xe4, 0xf4, 0xec, 0x38, 0x08, 0x16, + 0x7c, 0x46, 0xb1, 0xa1, 0x1b, 0x43, 0x13, 0x5b, 0xd6, 0x92, 0x57, 0xa9, 0x51, 0xd9, 0xec, 0x44, + 0x8e, 0xa0, 0x85, 0x9d, 0x2b, 0x29, 0x7b, 0x9c, 0x1a, 0x95, 0x8e, 0x50, 0xea, 0x47, 0x74, 0x6f, + 0x7b, 0xf5, 0x8d, 0x6a, 0x54, 0x36, 0x47, 0x91, 0x4f, 0xc1, 0x48, 0x7b, 0xce, 0xaa, 0x97, 0xaa, + 0x51, 0xe5, 0x44, 0xa5, 0xf4, 0xd3, 0x56, 0xa0, 0xea, 0x5d, 0x67, 0x54, 0x39, 0x7a, 0x90, 0x47, + 0xd0, 0x89, 0x9b, 0xa9, 0xf2, 0xb7, 0xa4, 0x51, 0xc5, 0xb4, 0xa3, 0xdc, 0xa3, 0x1b, 0xd2, 0xb2, + 0x07, 0xaf, 0x51, 0xe9, 0x48, 0x46, 0x1e, 0x40, 0x3b, 0xaa, 0x67, 0xa5, 0xaf, 0x42, 0xa3, 0xf2, + 0x99, 0x45, 0x19, 0x99, 0x76, 0xd2, 0x55, 0x8f, 0x72, 0xa3, 0xca, 0xd9, 0x91, 0x1c, 0x03, 0x64, + 0x9a, 0xd0, 0xca, 0xd7, 0xb6, 0x51, 0xf5, 0x4c, 0x48, 0x9e, 0x40, 0x37, 0x9d, 0xf3, 0xcb, 0x5f, + 0xc1, 0x46, 0x55, 0x63, 0xda, 0xb4, 0x8d, 0x2f, 0xa5, 0x1f, 0xff, 0x3b, 0x00, 0x00, 0xff, 0xff, + 0x7a, 0x20, 0xd7, 0x6b, 0xa5, 0x15, 0x00, 0x00, } diff --git a/types/types.proto b/types/types.proto index 2cea82d0..bddf13cb 100644 --- a/types/types.proto +++ b/types/types.proto @@ -48,7 +48,7 @@ message RequestSetOption { message RequestInitChain { repeated Validator validators = 1 [(gogoproto.nullable)=false]; - bytes genesis_bytes = 2; + GenesisFile genesis_file = 2 [(gogoproto.nullable)=false]; } message RequestQuery { @@ -214,6 +214,14 @@ message BlockGossip { //---------------------------------------- // Blockchain Types +message GenesisFile { + int64 time = 1; + string chain_id = 2; + ConsensusParams consensus_params = 3; + repeated Validator validators = 4; + bytes app_state_json = 5; +} + // just the minimum the app might need message Header { // basics From c681347ee3c4906b169d39ffc4def87714494cbd Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Thu, 31 May 2018 23:58:02 -0400 Subject: [PATCH 33/40] move genesis fields into RequestInitChain. some nullable=false --- example/kvstore/helpers.go | 3 +- types/types.pb.go | 376 ++++++++++++++++++------------------- types/types.proto | 26 ++- 3 files changed, 190 insertions(+), 215 deletions(-) diff --git a/example/kvstore/helpers.go b/example/kvstore/helpers.go index 6510c455..63bc31a6 100644 --- a/example/kvstore/helpers.go +++ b/example/kvstore/helpers.go @@ -33,7 +33,6 @@ func RandVals(cnt int) []types.Validator { // don't make any tx that modify the validator state func InitKVStore(app *PersistentKVStoreApplication) { app.InitChain(types.RequestInitChain{ - Validators: RandVals(1), - GenesisFile: types.GenesisFile{}, + Validators: RandVals(1), }) } diff --git a/types/types.pb.go b/types/types.pb.go index a4faff08..369cfde1 100644 --- a/types/types.pb.go +++ b/types/types.pb.go @@ -37,7 +37,6 @@ It has these top-level messages: BlockSize TxSize BlockGossip - GenesisFile Header Validator SigningValidator @@ -533,8 +532,11 @@ func (m *RequestSetOption) GetValue() string { } type RequestInitChain struct { - Validators []Validator `protobuf:"bytes,1,rep,name=validators" json:"validators"` - GenesisFile GenesisFile `protobuf:"bytes,2,opt,name=genesis_file,json=genesisFile" json:"genesis_file"` + Time int64 `protobuf:"varint,1,opt,name=time,proto3" json:"time,omitempty"` + ChainId string `protobuf:"bytes,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + ConsensusParams *ConsensusParams `protobuf:"bytes,3,opt,name=consensus_params,json=consensusParams" json:"consensus_params,omitempty"` + Validators []Validator `protobuf:"bytes,4,rep,name=validators" json:"validators"` + AppStateBytes []byte `protobuf:"bytes,5,opt,name=app_state_bytes,json=appStateBytes,proto3" json:"app_state_bytes,omitempty"` } func (m *RequestInitChain) Reset() { *m = RequestInitChain{} } @@ -542,6 +544,27 @@ func (m *RequestInitChain) String() string { return proto.CompactText func (*RequestInitChain) ProtoMessage() {} func (*RequestInitChain) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{5} } +func (m *RequestInitChain) GetTime() int64 { + if m != nil { + return m.Time + } + return 0 +} + +func (m *RequestInitChain) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +func (m *RequestInitChain) GetConsensusParams() *ConsensusParams { + if m != nil { + return m.ConsensusParams + } + return nil +} + func (m *RequestInitChain) GetValidators() []Validator { if m != nil { return m.Validators @@ -549,11 +572,11 @@ func (m *RequestInitChain) GetValidators() []Validator { return nil } -func (m *RequestInitChain) GetGenesisFile() GenesisFile { +func (m *RequestInitChain) GetAppStateBytes() []byte { if m != nil { - return m.GenesisFile + return m.AppStateBytes } - return GenesisFile{} + return nil } type RequestQuery struct { @@ -597,10 +620,10 @@ func (m *RequestQuery) GetProve() bool { } type RequestBeginBlock struct { - Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` - Header Header `protobuf:"bytes,2,opt,name=header" json:"header"` - Validators []*SigningValidator `protobuf:"bytes,3,rep,name=validators" json:"validators,omitempty"` - ByzantineValidators []Evidence `protobuf:"bytes,4,rep,name=byzantine_validators,json=byzantineValidators" json:"byzantine_validators"` + Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` + Header Header `protobuf:"bytes,2,opt,name=header" json:"header"` + Validators []SigningValidator `protobuf:"bytes,3,rep,name=validators" json:"validators"` + ByzantineValidators []Evidence `protobuf:"bytes,4,rep,name=byzantine_validators,json=byzantineValidators" json:"byzantine_validators"` } func (m *RequestBeginBlock) Reset() { *m = RequestBeginBlock{} } @@ -622,7 +645,7 @@ func (m *RequestBeginBlock) GetHeader() Header { return Header{} } -func (m *RequestBeginBlock) GetValidators() []*SigningValidator { +func (m *RequestBeginBlock) GetValidators() []SigningValidator { if m != nil { return m.Validators } @@ -1239,7 +1262,8 @@ func (m *ResponseSetOption) GetInfo() string { } type ResponseInitChain struct { - Validators []Validator `protobuf:"bytes,1,rep,name=validators" json:"validators"` + ConsensusParams *ConsensusParams `protobuf:"bytes,1,opt,name=consensus_params,json=consensusParams" json:"consensus_params,omitempty"` + Validators []Validator `protobuf:"bytes,2,rep,name=validators" json:"validators"` } func (m *ResponseInitChain) Reset() { *m = ResponseInitChain{} } @@ -1247,6 +1271,13 @@ func (m *ResponseInitChain) String() string { return proto.CompactTex func (*ResponseInitChain) ProtoMessage() {} func (*ResponseInitChain) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{18} } +func (m *ResponseInitChain) GetConsensusParams() *ConsensusParams { + if m != nil { + return m.ConsensusParams + } + return nil +} + func (m *ResponseInitChain) GetValidators() []Validator { if m != nil { return m.Validators @@ -1647,54 +1678,6 @@ func (m *BlockGossip) GetBlockPartSizeBytes() int32 { return 0 } -type GenesisFile struct { - Time int64 `protobuf:"varint,1,opt,name=time,proto3" json:"time,omitempty"` - ChainId string `protobuf:"bytes,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` - ConsensusParams *ConsensusParams `protobuf:"bytes,3,opt,name=consensus_params,json=consensusParams" json:"consensus_params,omitempty"` - Validators []*Validator `protobuf:"bytes,4,rep,name=validators" json:"validators,omitempty"` - AppStateJson []byte `protobuf:"bytes,5,opt,name=app_state_json,json=appStateJson,proto3" json:"app_state_json,omitempty"` -} - -func (m *GenesisFile) Reset() { *m = GenesisFile{} } -func (m *GenesisFile) String() string { return proto.CompactTextString(m) } -func (*GenesisFile) ProtoMessage() {} -func (*GenesisFile) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{29} } - -func (m *GenesisFile) GetTime() int64 { - if m != nil { - return m.Time - } - return 0 -} - -func (m *GenesisFile) GetChainId() string { - if m != nil { - return m.ChainId - } - return "" -} - -func (m *GenesisFile) GetConsensusParams() *ConsensusParams { - if m != nil { - return m.ConsensusParams - } - return nil -} - -func (m *GenesisFile) GetValidators() []*Validator { - if m != nil { - return m.Validators - } - return nil -} - -func (m *GenesisFile) GetAppStateJson() []byte { - if m != nil { - return m.AppStateJson - } - return nil -} - // just the minimum the app might need type Header struct { // basics @@ -1708,13 +1691,13 @@ type Header struct { LastBlockHash []byte `protobuf:"bytes,6,opt,name=last_block_hash,json=lastBlockHash,proto3" json:"last_block_hash,omitempty"` AppHash []byte `protobuf:"bytes,7,opt,name=app_hash,json=appHash,proto3" json:"app_hash,omitempty"` // consensus - Proposer *Validator `protobuf:"bytes,8,opt,name=proposer" json:"proposer,omitempty"` + Proposer Validator `protobuf:"bytes,8,opt,name=proposer" json:"proposer"` } func (m *Header) Reset() { *m = Header{} } func (m *Header) String() string { return proto.CompactTextString(m) } func (*Header) ProtoMessage() {} -func (*Header) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{30} } +func (*Header) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{29} } func (m *Header) GetChainID() string { if m != nil { @@ -1765,11 +1748,11 @@ func (m *Header) GetAppHash() []byte { return nil } -func (m *Header) GetProposer() *Validator { +func (m *Header) GetProposer() Validator { if m != nil { return m.Proposer } - return nil + return Validator{} } // Validator @@ -1782,7 +1765,7 @@ type Validator struct { func (m *Validator) Reset() { *m = Validator{} } func (m *Validator) String() string { return proto.CompactTextString(m) } func (*Validator) ProtoMessage() {} -func (*Validator) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{31} } +func (*Validator) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{30} } func (m *Validator) GetAddress() []byte { if m != nil { @@ -1807,20 +1790,20 @@ func (m *Validator) GetPower() int64 { // Validator with an extra bool type SigningValidator struct { - Validator *Validator `protobuf:"bytes,1,opt,name=validator" json:"validator,omitempty"` - SignedLastBlock bool `protobuf:"varint,2,opt,name=signed_last_block,json=signedLastBlock,proto3" json:"signed_last_block,omitempty"` + Validator Validator `protobuf:"bytes,1,opt,name=validator" json:"validator"` + SignedLastBlock bool `protobuf:"varint,2,opt,name=signed_last_block,json=signedLastBlock,proto3" json:"signed_last_block,omitempty"` } func (m *SigningValidator) Reset() { *m = SigningValidator{} } func (m *SigningValidator) String() string { return proto.CompactTextString(m) } func (*SigningValidator) ProtoMessage() {} -func (*SigningValidator) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{32} } +func (*SigningValidator) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{31} } -func (m *SigningValidator) GetValidator() *Validator { +func (m *SigningValidator) GetValidator() Validator { if m != nil { return m.Validator } - return nil + return Validator{} } func (m *SigningValidator) GetSignedLastBlock() bool { @@ -1838,7 +1821,7 @@ type PubKey struct { func (m *PubKey) Reset() { *m = PubKey{} } func (m *PubKey) String() string { return proto.CompactTextString(m) } func (*PubKey) ProtoMessage() {} -func (*PubKey) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{33} } +func (*PubKey) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{32} } func (m *PubKey) GetType() string { if m != nil { @@ -1855,17 +1838,17 @@ func (m *PubKey) GetData() []byte { } type Evidence struct { - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Validator *Validator `protobuf:"bytes,2,opt,name=validator" json:"validator,omitempty"` - Height int64 `protobuf:"varint,3,opt,name=height,proto3" json:"height,omitempty"` - Time int64 `protobuf:"varint,4,opt,name=time,proto3" json:"time,omitempty"` - TotalVotingPower int64 `protobuf:"varint,5,opt,name=total_voting_power,json=totalVotingPower,proto3" json:"total_voting_power,omitempty"` + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Validator Validator `protobuf:"bytes,2,opt,name=validator" json:"validator"` + Height int64 `protobuf:"varint,3,opt,name=height,proto3" json:"height,omitempty"` + Time int64 `protobuf:"varint,4,opt,name=time,proto3" json:"time,omitempty"` + TotalVotingPower int64 `protobuf:"varint,5,opt,name=total_voting_power,json=totalVotingPower,proto3" json:"total_voting_power,omitempty"` } func (m *Evidence) Reset() { *m = Evidence{} } func (m *Evidence) String() string { return proto.CompactTextString(m) } func (*Evidence) ProtoMessage() {} -func (*Evidence) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{34} } +func (*Evidence) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{33} } func (m *Evidence) GetType() string { if m != nil { @@ -1874,11 +1857,11 @@ func (m *Evidence) GetType() string { return "" } -func (m *Evidence) GetValidator() *Validator { +func (m *Evidence) GetValidator() Validator { if m != nil { return m.Validator } - return nil + return Validator{} } func (m *Evidence) GetHeight() int64 { @@ -1932,7 +1915,6 @@ func init() { proto.RegisterType((*BlockSize)(nil), "types.BlockSize") proto.RegisterType((*TxSize)(nil), "types.TxSize") proto.RegisterType((*BlockGossip)(nil), "types.BlockGossip") - proto.RegisterType((*GenesisFile)(nil), "types.GenesisFile") proto.RegisterType((*Header)(nil), "types.Header") proto.RegisterType((*Validator)(nil), "types.Validator") proto.RegisterType((*SigningValidator)(nil), "types.SigningValidator") @@ -2345,122 +2327,120 @@ var _ABCIApplication_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("types/types.proto", fileDescriptorTypes) } var fileDescriptorTypes = []byte{ - // 1864 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0xcd, 0x72, 0x1b, 0xc7, - 0x11, 0x26, 0xfe, 0xb1, 0x0d, 0x8a, 0x80, 0x86, 0x92, 0x08, 0xc1, 0x95, 0x92, 0x6a, 0xcb, 0xa5, - 0x50, 0x31, 0x4d, 0x38, 0x74, 0xa4, 0x48, 0x56, 0xca, 0x15, 0x92, 0x96, 0x05, 0x46, 0xf9, 0x61, - 0x56, 0xb2, 0x52, 0x95, 0xcb, 0xd6, 0x00, 0x3b, 0x5c, 0x4c, 0x04, 0xec, 0xae, 0x77, 0x06, 0x34, - 0xa0, 0x5b, 0x2a, 0x87, 0x5c, 0x7c, 0xcf, 0x39, 0xb7, 0xbc, 0x40, 0x5e, 0x21, 0x95, 0x37, 0xc8, - 0x4d, 0x87, 0xe4, 0x96, 0x97, 0x48, 0x6a, 0x7a, 0xf6, 0x9f, 0xbb, 0xb1, 0xa3, 0x1c, 0x73, 0x21, - 0xa7, 0xb7, 0xbb, 0x07, 0xd3, 0x3d, 0xdd, 0x5f, 0x77, 0x0f, 0x5c, 0x97, 0x9b, 0x80, 0x89, 0x31, - 0xfe, 0x3d, 0x0c, 0x42, 0x5f, 0xfa, 0xa4, 0x85, 0xc4, 0xe8, 0x43, 0x97, 0xcb, 0xf9, 0x6a, 0x7a, - 0x38, 0xf3, 0x97, 0x63, 0xd7, 0x77, 0xfd, 0x31, 0x72, 0xa7, 0xab, 0x0b, 0xa4, 0x90, 0xc0, 0x95, - 0xd6, 0x1a, 0x8d, 0x33, 0xe2, 0x92, 0x79, 0x0e, 0x0b, 0x97, 0xdc, 0x93, 0x63, 0xb9, 0x5c, 0xf0, - 0xa9, 0x18, 0xcf, 0xfc, 0xe5, 0xd2, 0xf7, 0xb2, 0x3f, 0x63, 0xfe, 0xa5, 0x09, 0x1d, 0x8b, 0x7d, - 0xb9, 0x62, 0x42, 0x92, 0x7d, 0x68, 0xb2, 0xd9, 0xdc, 0x1f, 0xd6, 0xef, 0xd6, 0xf6, 0x7b, 0x47, - 0xe4, 0x50, 0xcb, 0x45, 0xdc, 0xa7, 0xb3, 0xb9, 0x3f, 0xd9, 0xb2, 0x50, 0x82, 0x7c, 0x00, 0xad, - 0x8b, 0xc5, 0x4a, 0xcc, 0x87, 0x0d, 0x14, 0xdd, 0xcd, 0x8b, 0x7e, 0xae, 0x58, 0x93, 0x2d, 0x4b, - 0xcb, 0xa8, 0x6d, 0xb9, 0x77, 0xe1, 0x0f, 0x9b, 0x65, 0xdb, 0x9e, 0x79, 0x17, 0xb8, 0xad, 0x92, - 0x20, 0x8f, 0x00, 0x04, 0x93, 0xb6, 0x1f, 0x48, 0xee, 0x7b, 0xc3, 0x16, 0xca, 0xef, 0xe5, 0xe5, - 0x5f, 0x30, 0xf9, 0x0b, 0x64, 0x4f, 0xb6, 0x2c, 0x43, 0xc4, 0x84, 0xd2, 0xe4, 0x1e, 0x97, 0xf6, - 0x6c, 0x4e, 0xb9, 0x37, 0x6c, 0x97, 0x69, 0x9e, 0x79, 0x5c, 0x9e, 0x2a, 0xb6, 0xd2, 0xe4, 0x31, - 0xa1, 0x4c, 0xf9, 0x72, 0xc5, 0xc2, 0xcd, 0xb0, 0x53, 0x66, 0xca, 0x2f, 0x15, 0x4b, 0x99, 0x82, - 0x32, 0xe4, 0x09, 0xf4, 0xa6, 0xcc, 0xe5, 0x9e, 0x3d, 0x5d, 0xf8, 0xb3, 0xd7, 0xc3, 0x2e, 0xaa, - 0x0c, 0xf3, 0x2a, 0x27, 0x4a, 0xe0, 0x44, 0xf1, 0x27, 0x5b, 0x16, 0x4c, 0x13, 0x8a, 0x1c, 0x41, - 0x77, 0x36, 0x67, 0xb3, 0xd7, 0xb6, 0x5c, 0x0f, 0x0d, 0xd4, 0xbc, 0x99, 0xd7, 0x3c, 0x55, 0xdc, - 0x97, 0xeb, 0xc9, 0x96, 0xd5, 0x99, 0xe9, 0xa5, 0xb2, 0xcb, 0x61, 0x0b, 0x7e, 0xc9, 0x42, 0xa5, - 0xb5, 0x5b, 0x66, 0xd7, 0x67, 0x9a, 0x8f, 0x7a, 0x86, 0x13, 0x13, 0xe4, 0x01, 0x18, 0xcc, 0x73, - 0xa2, 0x83, 0xf6, 0x50, 0xf1, 0x56, 0xe1, 0x46, 0x3d, 0x27, 0x3e, 0x66, 0x97, 0x45, 0x6b, 0x72, - 0x08, 0x6d, 0x15, 0x25, 0x5c, 0x0e, 0xb7, 0x51, 0xe7, 0x46, 0xe1, 0x88, 0xc8, 0x9b, 0x6c, 0x59, - 0x91, 0xd4, 0x49, 0x07, 0x5a, 0x97, 0x74, 0xb1, 0x62, 0xe6, 0x77, 0xa1, 0x97, 0x89, 0x14, 0x32, - 0x84, 0xce, 0x92, 0x09, 0x41, 0x5d, 0x36, 0xac, 0xdd, 0xad, 0xed, 0x1b, 0x56, 0x4c, 0x9a, 0x3b, - 0xb0, 0x9d, 0x8d, 0x93, 0x8c, 0xa2, 0x8a, 0x05, 0xa5, 0x78, 0xc9, 0x42, 0xa1, 0x02, 0x20, 0x52, - 0x8c, 0x48, 0xf3, 0x13, 0x18, 0x14, 0x83, 0x80, 0x0c, 0xa0, 0xf1, 0x9a, 0x6d, 0x22, 0x49, 0xb5, - 0x24, 0x37, 0xa2, 0x03, 0x61, 0x14, 0x1b, 0x56, 0x74, 0xba, 0xdf, 0xd7, 0x12, 0xe5, 0x24, 0x0e, - 0xc8, 0x43, 0x80, 0x4b, 0xba, 0xe0, 0x0e, 0x95, 0x7e, 0x28, 0x86, 0xb5, 0xbb, 0x8d, 0xfd, 0xde, - 0xd1, 0x20, 0xb2, 0xf7, 0x55, 0xcc, 0x38, 0x69, 0xfe, 0xf5, 0xed, 0x9d, 0x2d, 0x2b, 0x23, 0x49, - 0x9e, 0xc0, 0xb6, 0xcb, 0x3c, 0x26, 0xb8, 0xb0, 0x2f, 0xf8, 0x82, 0x15, 0xf2, 0xe5, 0x99, 0x66, - 0x7d, 0xce, 0x17, 0x2c, 0xd2, 0xed, 0xb9, 0xe9, 0x27, 0xd3, 0x49, 0xcc, 0xc7, 0xd8, 0x22, 0x04, - 0x9a, 0x0e, 0x95, 0x14, 0x4d, 0xd8, 0xb6, 0x70, 0xad, 0xbe, 0x05, 0x54, 0xce, 0x23, 0x13, 0x70, - 0x4d, 0x6e, 0x41, 0x7b, 0xce, 0xb8, 0x3b, 0x97, 0x98, 0x73, 0x0d, 0x2b, 0xa2, 0x94, 0xbd, 0x41, - 0xe8, 0x5f, 0x32, 0x4c, 0xaf, 0xae, 0xa5, 0x09, 0xf3, 0x6f, 0x35, 0xb8, 0x7e, 0x25, 0x1e, 0xd5, - 0xbe, 0x73, 0x2a, 0xe6, 0xf1, 0x6f, 0xa9, 0x35, 0xf9, 0x40, 0xed, 0x4b, 0x1d, 0x16, 0x46, 0x66, - 0x5c, 0x8b, 0xcc, 0x98, 0xe0, 0xc7, 0xc8, 0x82, 0x48, 0x84, 0xfc, 0x30, 0xe7, 0xb1, 0x06, 0x7a, - 0x2c, 0x0e, 0xc7, 0x17, 0xdc, 0xf5, 0xb8, 0xe7, 0x26, 0x8e, 0xcb, 0xb9, 0x6c, 0x02, 0x37, 0xa6, - 0x9b, 0x37, 0xd4, 0x93, 0xdc, 0x63, 0x76, 0x66, 0x8b, 0x26, 0x6e, 0xd1, 0x8f, 0xb6, 0x78, 0x7a, - 0xc9, 0x1d, 0xe6, 0xcd, 0x62, 0xbf, 0xed, 0x26, 0x2a, 0xc9, 0xa6, 0xc2, 0xbc, 0x0b, 0x3b, 0xf9, - 0x74, 0x21, 0x3b, 0x50, 0x97, 0xeb, 0xc8, 0xa6, 0xba, 0x5c, 0x9b, 0x66, 0x72, 0xd5, 0x49, 0x6a, - 0x5c, 0x91, 0xb9, 0x0f, 0xfd, 0x42, 0x16, 0x64, 0x1c, 0x5c, 0xcb, 0x3a, 0xd8, 0xec, 0xc3, 0xb5, - 0x5c, 0xf0, 0x9b, 0x5f, 0xb7, 0xa0, 0x6b, 0x31, 0x11, 0xf8, 0x9e, 0x60, 0xe4, 0x11, 0x18, 0x6c, - 0x3d, 0x63, 0x1a, 0xb1, 0x6a, 0x05, 0x3c, 0xd0, 0x32, 0x4f, 0x63, 0xbe, 0x4a, 0xd0, 0x44, 0x98, - 0xdc, 0xcf, 0xa1, 0xed, 0x6e, 0x51, 0x29, 0x0b, 0xb7, 0x07, 0x79, 0xb8, 0xbd, 0x51, 0x90, 0x2d, - 0xe0, 0xed, 0xfd, 0x1c, 0xde, 0x16, 0x37, 0xce, 0x01, 0xee, 0xe3, 0x12, 0xc0, 0x2d, 0x1e, 0xbf, - 0x02, 0x71, 0x1f, 0x97, 0x20, 0xee, 0xf0, 0xca, 0x6f, 0x95, 0x42, 0xee, 0x41, 0x1e, 0x72, 0x8b, - 0xe6, 0x14, 0x30, 0xf7, 0x47, 0x65, 0x98, 0x7b, 0xbb, 0xa0, 0x53, 0x09, 0xba, 0x1f, 0x5f, 0x01, - 0xdd, 0x5b, 0x05, 0xd5, 0x12, 0xd4, 0x7d, 0x9c, 0x43, 0x5d, 0x28, 0xb5, 0xad, 0x02, 0x76, 0x1f, - 0x5e, 0x85, 0xdd, 0xbd, 0xe2, 0xd5, 0x96, 0xe1, 0xee, 0xb8, 0x80, 0xbb, 0x37, 0x8b, 0xa7, 0xac, - 0x04, 0xde, 0xfb, 0x2a, 0xd3, 0x0b, 0x91, 0xa6, 0x50, 0x81, 0x85, 0xa1, 0x1f, 0x46, 0xc8, 0xa8, - 0x09, 0x73, 0x5f, 0x61, 0x4f, 0x1a, 0x5f, 0xff, 0x01, 0xa4, 0x31, 0xe8, 0x33, 0xd1, 0x65, 0xfe, - 0xa1, 0x96, 0xea, 0x22, 0x4e, 0x67, 0x71, 0xcb, 0x88, 0x70, 0x2b, 0x83, 0xdd, 0xf5, 0x1c, 0x76, - 0x93, 0xef, 0xc1, 0xf5, 0x05, 0x15, 0x52, 0xfb, 0xc5, 0xce, 0x01, 0x59, 0x5f, 0x31, 0xb4, 0x43, - 0x34, 0xa2, 0x7d, 0x08, 0xbb, 0x19, 0x59, 0x1a, 0x04, 0x36, 0x82, 0x56, 0x13, 0x93, 0x77, 0x90, - 0x48, 0x1f, 0x07, 0xc1, 0x84, 0x8a, 0xb9, 0xf9, 0xb3, 0xd4, 0xfe, 0xb4, 0x2e, 0x10, 0x68, 0xce, - 0x7c, 0x47, 0x9b, 0x75, 0xcd, 0xc2, 0xb5, 0xaa, 0x15, 0x0b, 0xdf, 0xc5, 0x5f, 0x35, 0x2c, 0xb5, - 0x54, 0x52, 0x49, 0xa6, 0x18, 0x3a, 0x25, 0xcc, 0xe7, 0xe9, 0x76, 0xff, 0x73, 0xa5, 0x30, 0xff, - 0x5c, 0x4b, 0xfd, 0x98, 0xc0, 0xfd, 0xbb, 0x1d, 0x4c, 0x5d, 0x29, 0xf7, 0x1c, 0xb6, 0xc6, 0x34, - 0x6d, 0x58, 0x9a, 0x88, 0x0b, 0x60, 0x1b, 0x9d, 0x93, 0x2f, 0x80, 0x1d, 0xfc, 0xa6, 0x89, 0xa8, - 0x4c, 0xf8, 0x17, 0x98, 0x3f, 0xdb, 0x96, 0x26, 0x32, 0x98, 0x67, 0xe4, 0x30, 0xef, 0x1c, 0xc8, - 0xd5, 0xcc, 0x22, 0x9f, 0x40, 0x53, 0x52, 0x37, 0xb6, 0x7f, 0xe7, 0x50, 0xb7, 0x93, 0x87, 0xcf, - 0x5f, 0x9d, 0x53, 0x1e, 0x9e, 0xdc, 0x52, 0xd6, 0xff, 0xf3, 0xed, 0x9d, 0x1d, 0x25, 0x73, 0xe0, - 0x2f, 0xb9, 0x64, 0xcb, 0x40, 0x6e, 0x2c, 0xd4, 0x31, 0xff, 0x55, 0x53, 0x88, 0x9b, 0xcb, 0xb8, - 0x52, 0x5f, 0xc4, 0x61, 0x55, 0xcf, 0x94, 0xc3, 0x6f, 0xe7, 0x9f, 0xef, 0x00, 0xb8, 0x54, 0xd8, - 0x5f, 0x51, 0x4f, 0x32, 0x27, 0x72, 0x92, 0xe1, 0x52, 0xf1, 0x2b, 0xfc, 0x40, 0x6e, 0x43, 0x57, - 0xb1, 0x57, 0x82, 0x39, 0xe8, 0xad, 0x86, 0xd5, 0x71, 0xa9, 0xf8, 0x42, 0x30, 0x27, 0xb1, 0xab, - 0xf3, 0xdf, 0xdb, 0x45, 0xf6, 0xa1, 0x71, 0xc1, 0x58, 0x84, 0x4a, 0x83, 0x44, 0xf5, 0xec, 0xe1, - 0x0f, 0x50, 0x59, 0x87, 0x84, 0x12, 0x31, 0x7f, 0x5b, 0x4f, 0x23, 0x2b, 0x2d, 0x4c, 0xff, 0x5f, - 0x3e, 0xf8, 0x07, 0xb6, 0x61, 0x79, 0x18, 0x24, 0xa7, 0x70, 0x3d, 0x49, 0x19, 0x7b, 0x15, 0x38, - 0x54, 0xb2, 0x6f, 0xca, 0xb1, 0x41, 0xa2, 0xf0, 0x85, 0x96, 0x27, 0x3f, 0x87, 0xbd, 0x99, 0xda, - 0xd5, 0x13, 0x2b, 0x61, 0x07, 0x34, 0xa4, 0xcb, 0x64, 0xab, 0x7a, 0x0e, 0xf6, 0x4f, 0x63, 0xa9, - 0x73, 0x25, 0x24, 0xac, 0x9b, 0xb3, 0xdc, 0x87, 0x78, 0xbf, 0xd8, 0x1f, 0x8d, 0x77, 0x88, 0xf5, - 0xf7, 0x55, 0x8b, 0x92, 0x85, 0xed, 0xb2, 0x1b, 0x35, 0xff, 0x58, 0x83, 0x7e, 0xe1, 0x30, 0x64, - 0x0c, 0xa0, 0x51, 0x4f, 0xf0, 0x37, 0x2c, 0x6a, 0x27, 0x62, 0x1f, 0xa0, 0xb3, 0x5e, 0xf0, 0x37, - 0xcc, 0x32, 0xa6, 0xf1, 0x92, 0xdc, 0x83, 0x8e, 0x5c, 0x6b, 0xe9, 0x7c, 0xfb, 0xf6, 0x72, 0x8d, - 0xa2, 0x6d, 0x89, 0xff, 0xc9, 0x03, 0xd8, 0xd6, 0x1b, 0xbb, 0xbe, 0x10, 0x3c, 0x88, 0x1a, 0x09, - 0x92, 0xdd, 0xfa, 0x19, 0x72, 0xac, 0xde, 0x34, 0x25, 0xcc, 0x5f, 0x83, 0x91, 0xfc, 0x2c, 0x79, - 0x0f, 0x8c, 0x25, 0x5d, 0xdb, 0xd3, 0x8d, 0xbe, 0x9f, 0xda, 0x7e, 0xcb, 0xea, 0x2e, 0xe9, 0xfa, - 0x44, 0xd1, 0x64, 0x0f, 0x3a, 0x8a, 0x29, 0xd7, 0xda, 0xdf, 0x2d, 0xab, 0xbd, 0xa4, 0xeb, 0x97, - 0xeb, 0x84, 0xe1, 0x52, 0x11, 0x37, 0xae, 0x4b, 0xba, 0x7e, 0x46, 0x85, 0xf9, 0x29, 0xb4, 0xf5, - 0x21, 0xbf, 0xd5, 0xc6, 0x4a, 0xbf, 0x9e, 0xd3, 0xff, 0x31, 0xf4, 0x32, 0xe7, 0x26, 0xdf, 0x87, - 0x9b, 0xda, 0xc2, 0x80, 0x86, 0x12, 0x3d, 0x92, 0xdb, 0x90, 0x20, 0xf3, 0x9c, 0x86, 0x52, 0xfd, - 0x24, 0x6e, 0xad, 0x9a, 0xe4, 0x5e, 0xa6, 0x5b, 0x57, 0xb7, 0x24, 0xf9, 0x92, 0x45, 0xfd, 0x1f, - 0xae, 0x55, 0xca, 0x60, 0x87, 0x63, 0x73, 0x27, 0xae, 0x69, 0x48, 0x9f, 0x39, 0xe4, 0x18, 0x06, - 0x85, 0x90, 0x13, 0x91, 0x5f, 0xab, 0x62, 0xad, 0x3f, 0x2b, 0xdc, 0xf7, 0x47, 0xb9, 0xba, 0xd2, - 0x2c, 0x8f, 0xf9, 0x5c, 0x23, 0xfd, 0x3e, 0xec, 0xa8, 0x8a, 0x28, 0x24, 0x95, 0xcc, 0xfe, 0x8d, - 0x88, 0xba, 0xb6, 0x6d, 0x6b, 0x9b, 0x06, 0xc1, 0x0b, 0xf5, 0xf1, 0x27, 0xc2, 0xf7, 0xcc, 0xdf, - 0xd5, 0xa1, 0xad, 0x1b, 0x78, 0x72, 0x2f, 0x63, 0x00, 0xd6, 0xea, 0x93, 0xde, 0xdf, 0xdf, 0xde, - 0xe9, 0x60, 0x5d, 0x3b, 0xfb, 0x2c, 0xb5, 0x26, 0x2d, 0x05, 0xf5, 0xdc, 0x7c, 0x11, 0x3b, 0xa5, - 0x91, 0x71, 0xca, 0x1e, 0x74, 0xbc, 0xd5, 0x12, 0x2f, 0xbb, 0xa9, 0x2f, 0xdb, 0x5b, 0x2d, 0xd5, - 0x65, 0xbf, 0x07, 0x86, 0xf4, 0x25, 0x5d, 0x20, 0x4b, 0xc3, 0x4f, 0x17, 0x3f, 0x28, 0xe6, 0x3d, - 0xe8, 0x67, 0x7b, 0x00, 0x55, 0xd3, 0x75, 0xd9, 0xba, 0x96, 0x76, 0x00, 0x6a, 0x22, 0xb9, 0x0d, - 0xdd, 0xa4, 0xe8, 0xeb, 0x1a, 0xd6, 0xa1, 0xba, 0xd6, 0x93, 0x03, 0xe8, 0x06, 0xa1, 0x1f, 0xf8, - 0x82, 0x85, 0x09, 0xdc, 0x14, 0xbd, 0x95, 0x48, 0x98, 0x1c, 0x8c, 0xe4, 0xb3, 0xea, 0x4d, 0xa8, - 0xe3, 0x84, 0x4c, 0x88, 0x68, 0x0c, 0x88, 0x49, 0x72, 0x00, 0x9d, 0x60, 0x35, 0xb5, 0x55, 0x19, - 0xcd, 0xe7, 0xd0, 0xf9, 0x6a, 0xfa, 0x9c, 0x6d, 0xe2, 0x11, 0x28, 0x40, 0x0a, 0x0b, 0xa9, 0xff, - 0x15, 0x0b, 0x23, 0x87, 0x68, 0xc2, 0xf4, 0x60, 0x50, 0x9c, 0x7f, 0xc8, 0x21, 0x18, 0xc9, 0xc5, - 0x15, 0x72, 0x39, 0x3d, 0x6d, 0x2a, 0xa2, 0x7a, 0x24, 0xc1, 0x5d, 0x8f, 0x39, 0x76, 0xea, 0x26, - 0x3c, 0x51, 0xd7, 0xea, 0x6b, 0xc6, 0x4f, 0x63, 0x3f, 0x99, 0x1f, 0x41, 0x5b, 0x9f, 0x0e, 0xef, - 0x67, 0x13, 0xc4, 0x0d, 0x1c, 0xae, 0x4b, 0xe1, 0xe6, 0x4f, 0x35, 0xe8, 0xc6, 0xf3, 0x55, 0xa9, - 0x52, 0xee, 0xb8, 0xf5, 0x6f, 0x3e, 0x6e, 0xd5, 0x40, 0x1a, 0x07, 0x4c, 0x33, 0x13, 0x30, 0x07, - 0x40, 0x74, 0x5c, 0x5c, 0xfa, 0x92, 0x7b, 0xae, 0xad, 0x3d, 0xa8, 0x03, 0x64, 0x80, 0x9c, 0x57, - 0xc8, 0x38, 0x57, 0xdf, 0x8f, 0xbe, 0x6e, 0x41, 0xff, 0xf8, 0xe4, 0xf4, 0xec, 0x38, 0x08, 0x16, - 0x7c, 0x46, 0xb1, 0xa1, 0x1b, 0x43, 0x13, 0x5b, 0xd6, 0x92, 0x57, 0xa9, 0x51, 0xd9, 0xec, 0x44, - 0x8e, 0xa0, 0x85, 0x9d, 0x2b, 0x29, 0x7b, 0x9c, 0x1a, 0x95, 0x8e, 0x50, 0xea, 0x47, 0x74, 0x6f, - 0x7b, 0xf5, 0x8d, 0x6a, 0x54, 0x36, 0x47, 0x91, 0x4f, 0xc1, 0x48, 0x7b, 0xce, 0xaa, 0x97, 0xaa, - 0x51, 0xe5, 0x44, 0xa5, 0xf4, 0xd3, 0x56, 0xa0, 0xea, 0x5d, 0x67, 0x54, 0x39, 0x7a, 0x90, 0x47, - 0xd0, 0x89, 0x9b, 0xa9, 0xf2, 0xb7, 0xa4, 0x51, 0xc5, 0xb4, 0xa3, 0xdc, 0xa3, 0x1b, 0xd2, 0xb2, - 0x07, 0xaf, 0x51, 0xe9, 0x48, 0x46, 0x1e, 0x40, 0x3b, 0xaa, 0x67, 0xa5, 0xaf, 0x42, 0xa3, 0xf2, - 0x99, 0x45, 0x19, 0x99, 0x76, 0xd2, 0x55, 0x8f, 0x72, 0xa3, 0xca, 0xd9, 0x91, 0x1c, 0x03, 0x64, - 0x9a, 0xd0, 0xca, 0xd7, 0xb6, 0x51, 0xf5, 0x4c, 0x48, 0x9e, 0x40, 0x37, 0x9d, 0xf3, 0xcb, 0x5f, - 0xc1, 0x46, 0x55, 0x63, 0xda, 0xb4, 0x8d, 0x2f, 0xa5, 0x1f, 0xff, 0x3b, 0x00, 0x00, 0xff, 0xff, - 0x7a, 0x20, 0xd7, 0x6b, 0xa5, 0x15, 0x00, 0x00, + // 1832 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0x4b, 0x6f, 0x1b, 0xc9, + 0x11, 0x16, 0xdf, 0x9c, 0xd2, 0x83, 0x74, 0xcb, 0xb6, 0x68, 0x2e, 0x02, 0x1b, 0x83, 0xc0, 0x91, + 0xb3, 0x5a, 0x31, 0xd1, 0xae, 0x0d, 0x7b, 0x37, 0x59, 0x44, 0xd2, 0x3a, 0x4b, 0x61, 0xf3, 0x50, + 0xc6, 0x5e, 0x07, 0xc8, 0x85, 0x68, 0x72, 0x5a, 0xc3, 0x81, 0x39, 0x8f, 0x9d, 0x6e, 0x6a, 0x29, + 0xdf, 0x72, 0x0c, 0xb0, 0xc8, 0x35, 0xe7, 0xfc, 0x81, 0xdc, 0xf2, 0x17, 0x82, 0xfc, 0x89, 0xf8, + 0x90, 0xe4, 0x94, 0x3f, 0x91, 0xa0, 0xaa, 0xe7, 0xad, 0xa1, 0xa1, 0x6c, 0x8e, 0xb9, 0x48, 0x5d, + 0x5d, 0x55, 0x3d, 0x5d, 0xc5, 0xaa, 0xaf, 0xaa, 0x1a, 0x6e, 0xa9, 0xab, 0x50, 0xc8, 0x11, 0xfd, + 0x3d, 0x0c, 0xa3, 0x40, 0x05, 0xac, 0x45, 0xc4, 0xf0, 0x03, 0xc7, 0x55, 0xf3, 0xe5, 0xf4, 0x70, + 0x16, 0x78, 0x23, 0x27, 0x70, 0x82, 0x11, 0x71, 0xa7, 0xcb, 0x0b, 0xa2, 0x88, 0xa0, 0x95, 0xd6, + 0x1a, 0x8e, 0x72, 0xe2, 0x4a, 0xf8, 0xb6, 0x88, 0x3c, 0xd7, 0x57, 0x23, 0xe5, 0x2d, 0xdc, 0xa9, + 0x1c, 0xcd, 0x02, 0xcf, 0x0b, 0xfc, 0xfc, 0x67, 0xcc, 0xbf, 0x34, 0xa1, 0x63, 0x89, 0xaf, 0x96, + 0x42, 0x2a, 0xb6, 0x0f, 0x4d, 0x31, 0x9b, 0x07, 0x83, 0xfa, 0x83, 0xda, 0xfe, 0xe6, 0x11, 0x3b, + 0xd4, 0x72, 0x31, 0xf7, 0xf9, 0x6c, 0x1e, 0x8c, 0x37, 0x2c, 0x92, 0x60, 0xef, 0x43, 0xeb, 0x62, + 0xb1, 0x94, 0xf3, 0x41, 0x83, 0x44, 0x77, 0x8b, 0xa2, 0x3f, 0x45, 0xd6, 0x78, 0xc3, 0xd2, 0x32, + 0x78, 0xac, 0xeb, 0x5f, 0x04, 0x83, 0x66, 0xd5, 0xb1, 0x67, 0xfe, 0x05, 0x1d, 0x8b, 0x12, 0xec, + 0x29, 0x80, 0x14, 0x6a, 0x12, 0x84, 0xca, 0x0d, 0xfc, 0x41, 0x8b, 0xe4, 0xf7, 0x8a, 0xf2, 0x2f, + 0x84, 0xfa, 0x25, 0xb1, 0xc7, 0x1b, 0x96, 0x21, 0x13, 0x02, 0x35, 0x5d, 0xdf, 0x55, 0x93, 0xd9, + 0x9c, 0xbb, 0xfe, 0xa0, 0x5d, 0xa5, 0x79, 0xe6, 0xbb, 0xea, 0x14, 0xd9, 0xa8, 0xe9, 0x26, 0x04, + 0x9a, 0xf2, 0xd5, 0x52, 0x44, 0x57, 0x83, 0x4e, 0x95, 0x29, 0xbf, 0x42, 0x16, 0x9a, 0x42, 0x32, + 0xec, 0x13, 0xd8, 0x9c, 0x0a, 0xc7, 0xf5, 0x27, 0xd3, 0x45, 0x30, 0x7b, 0x3d, 0xe8, 0x92, 0xca, + 0xa0, 0xa8, 0x72, 0x82, 0x02, 0x27, 0xc8, 0x1f, 0x6f, 0x58, 0x30, 0x4d, 0x29, 0x76, 0x04, 0xdd, + 0xd9, 0x5c, 0xcc, 0x5e, 0x4f, 0xd4, 0x6a, 0x60, 0x90, 0xe6, 0x9d, 0xa2, 0xe6, 0x29, 0x72, 0x5f, + 0xae, 0xc6, 0x1b, 0x56, 0x67, 0xa6, 0x97, 0x68, 0x97, 0x2d, 0x16, 0xee, 0xa5, 0x88, 0x50, 0x6b, + 0xb7, 0xca, 0xae, 0xcf, 0x34, 0x9f, 0xf4, 0x0c, 0x3b, 0x21, 0xd8, 0x63, 0x30, 0x84, 0x6f, 0xc7, + 0x17, 0xdd, 0x24, 0xc5, 0xbb, 0xa5, 0x5f, 0xd4, 0xb7, 0x93, 0x6b, 0x76, 0x45, 0xbc, 0x66, 0x87, + 0xd0, 0xc6, 0x28, 0x71, 0xd5, 0x60, 0x8b, 0x74, 0x6e, 0x97, 0xae, 0x48, 0xbc, 0xf1, 0x86, 0x15, + 0x4b, 0x9d, 0x74, 0xa0, 0x75, 0xc9, 0x17, 0x4b, 0x61, 0x7e, 0x0f, 0x36, 0x73, 0x91, 0xc2, 0x06, + 0xd0, 0xf1, 0x84, 0x94, 0xdc, 0x11, 0x83, 0xda, 0x83, 0xda, 0xbe, 0x61, 0x25, 0xa4, 0xb9, 0x03, + 0x5b, 0xf9, 0x38, 0xc9, 0x29, 0x62, 0x2c, 0xa0, 0xe2, 0xa5, 0x88, 0x24, 0x06, 0x40, 0xac, 0x18, + 0x93, 0xe6, 0xc7, 0xd0, 0x2f, 0x07, 0x01, 0xeb, 0x43, 0xe3, 0xb5, 0xb8, 0x8a, 0x25, 0x71, 0xc9, + 0x6e, 0xc7, 0x17, 0xa2, 0x28, 0x36, 0xac, 0xf8, 0x76, 0xff, 0xac, 0xa5, 0xca, 0x69, 0x1c, 0x30, + 0x06, 0x4d, 0xe5, 0x7a, 0xfa, 0x82, 0x0d, 0x8b, 0xd6, 0xec, 0x1e, 0xfe, 0x48, 0xdc, 0xf5, 0x27, + 0xae, 0x1d, 0x9f, 0xd0, 0x21, 0xfa, 0xcc, 0x66, 0xc7, 0xd0, 0x9f, 0x05, 0xbe, 0x14, 0xbe, 0x5c, + 0xca, 0x49, 0xc8, 0x23, 0xee, 0xc9, 0x38, 0xfe, 0x13, 0xc7, 0x9e, 0x26, 0xec, 0x73, 0xe2, 0x5a, + 0xbd, 0x59, 0x71, 0x83, 0x3d, 0x01, 0xb8, 0xe4, 0x0b, 0xd7, 0xe6, 0x2a, 0x88, 0xe4, 0xa0, 0xf9, + 0xa0, 0xb1, 0xbf, 0x79, 0xd4, 0x8f, 0x95, 0x5f, 0x25, 0x8c, 0x93, 0xe6, 0x5f, 0xdf, 0xde, 0xdf, + 0xb0, 0x72, 0x92, 0xec, 0x21, 0xf4, 0x78, 0x18, 0x4e, 0xa4, 0xe2, 0x4a, 0x4c, 0xa6, 0x57, 0x4a, + 0x48, 0xca, 0x8e, 0x2d, 0x6b, 0x9b, 0x87, 0xe1, 0x0b, 0xdc, 0x3d, 0xc1, 0x4d, 0xd3, 0x4e, 0x7d, + 0x4b, 0x81, 0x8b, 0x16, 0xda, 0x5c, 0x71, 0xb2, 0x70, 0xcb, 0xa2, 0x35, 0xee, 0x85, 0x5c, 0xcd, + 0x63, 0xeb, 0x68, 0xcd, 0xee, 0x42, 0x7b, 0x2e, 0x5c, 0x67, 0xae, 0xc8, 0xa0, 0x86, 0x15, 0x53, + 0xe8, 0xcc, 0x30, 0x0a, 0x2e, 0x05, 0xe5, 0x6e, 0xd7, 0xd2, 0x84, 0xf9, 0xb7, 0x1a, 0xdc, 0xba, + 0x16, 0xec, 0x78, 0xee, 0x9c, 0xcb, 0x79, 0xf2, 0x2d, 0x5c, 0xb3, 0xf7, 0xf1, 0x5c, 0x6e, 0x8b, + 0x28, 0xc6, 0x94, 0xed, 0xd8, 0xd6, 0x31, 0x6d, 0xc6, 0x86, 0xc6, 0x22, 0xec, 0xc7, 0x05, 0xe7, + 0x34, 0xc8, 0x39, 0x49, 0xac, 0xbf, 0x70, 0x1d, 0xdf, 0xf5, 0x9d, 0x77, 0xf9, 0x68, 0x0c, 0xb7, + 0xa7, 0x57, 0x6f, 0xb8, 0xaf, 0x5c, 0x5f, 0x4c, 0xae, 0x79, 0xb9, 0x17, 0x1f, 0xf4, 0xfc, 0xd2, + 0xb5, 0x85, 0x3f, 0x13, 0xf1, 0x01, 0xbb, 0xa9, 0x4a, 0x7a, 0xb4, 0x34, 0x1f, 0xc0, 0x4e, 0x31, + 0x23, 0xd9, 0x0e, 0xd4, 0xd5, 0x2a, 0xb6, 0xac, 0xae, 0x56, 0xa6, 0x99, 0x46, 0x53, 0x9a, 0x7d, + 0xd7, 0x64, 0x1e, 0x41, 0xaf, 0x94, 0x68, 0x39, 0x37, 0xd7, 0xf2, 0x6e, 0x36, 0x7b, 0xb0, 0x5d, + 0xc8, 0x2f, 0xf3, 0x9b, 0x16, 0x74, 0x2d, 0x21, 0x43, 0x0c, 0x1f, 0xf6, 0x14, 0x0c, 0xb1, 0x9a, + 0x09, 0x0d, 0x8a, 0xb5, 0x12, 0xe4, 0x68, 0x99, 0xe7, 0x09, 0x1f, 0x31, 0x20, 0x15, 0x66, 0x8f, + 0x0a, 0x80, 0xbe, 0x5b, 0x56, 0xca, 0x23, 0xfa, 0x41, 0x11, 0xd1, 0x6f, 0x97, 0x64, 0x4b, 0x90, + 0xfe, 0xa8, 0x00, 0xe9, 0xe5, 0x83, 0x0b, 0x98, 0xfe, 0xac, 0x02, 0xd3, 0xcb, 0xd7, 0x5f, 0x03, + 0xea, 0xcf, 0x2a, 0x40, 0x7d, 0x70, 0xed, 0x5b, 0x95, 0xa8, 0x7e, 0x50, 0x44, 0xf5, 0xb2, 0x39, + 0x25, 0x58, 0xff, 0x51, 0x15, 0xac, 0xdf, 0x2b, 0xe9, 0xac, 0xc5, 0xf5, 0x0f, 0xaf, 0xe1, 0xfa, + 0xdd, 0x92, 0x6a, 0x05, 0xb0, 0x3f, 0x2b, 0x00, 0x3b, 0x54, 0xda, 0xb6, 0x06, 0xd9, 0x9f, 0x5c, + 0x47, 0xf6, 0xbd, 0xf2, 0x4f, 0x5b, 0x05, 0xed, 0xa3, 0x12, 0xb4, 0xdf, 0x29, 0xdf, 0x72, 0x2d, + 0xb6, 0x3f, 0xc2, 0x7c, 0x2f, 0x45, 0x1a, 0x62, 0x83, 0x88, 0xa2, 0x20, 0x8a, 0xc1, 0x57, 0x13, + 0xe6, 0x3e, 0x22, 0x50, 0x16, 0x5f, 0xef, 0xa8, 0x03, 0x14, 0xf4, 0xb9, 0xe8, 0x32, 0xff, 0x50, + 0xcb, 0x74, 0xa9, 0x14, 0xe4, 0xd1, 0xcb, 0x88, 0xd1, 0x2b, 0x57, 0x1e, 0xea, 0x85, 0xf2, 0xc0, + 0xbe, 0x0f, 0xb7, 0x16, 0x5c, 0x2a, 0xed, 0x97, 0x49, 0x01, 0xce, 0x7a, 0xc8, 0xd0, 0x0e, 0xd1, + 0xb8, 0xf6, 0x01, 0xec, 0xe6, 0x64, 0x11, 0x5a, 0x09, 0xba, 0x9a, 0x94, 0xbc, 0xfd, 0x54, 0xfa, + 0x38, 0x0c, 0xc7, 0x5c, 0xce, 0xcd, 0x9f, 0x67, 0xf6, 0x67, 0xa5, 0x87, 0x41, 0x73, 0x16, 0xd8, + 0xda, 0xac, 0x6d, 0x8b, 0xd6, 0x58, 0x8e, 0x16, 0x81, 0x43, 0x5f, 0x35, 0x2c, 0x5c, 0xa2, 0x54, + 0x9a, 0x29, 0x86, 0x4e, 0x09, 0xf3, 0xf7, 0xb5, 0xec, 0xbc, 0xac, 0x1a, 0x55, 0x95, 0x97, 0xda, + 0xff, 0x52, 0x5e, 0xea, 0x37, 0x2d, 0x2f, 0xe6, 0x9f, 0x6b, 0xd9, 0x6f, 0x91, 0x16, 0x8e, 0x6f, + 0x67, 0x1c, 0x86, 0x85, 0xeb, 0xdb, 0x62, 0x45, 0xa9, 0xde, 0xb0, 0x34, 0x91, 0xd4, 0xe9, 0x36, + 0x39, 0xb8, 0x58, 0xa7, 0x3b, 0xb4, 0xa7, 0x89, 0xb8, 0xe0, 0x04, 0x17, 0x94, 0x83, 0x5b, 0x96, + 0x26, 0x72, 0xb8, 0x69, 0x14, 0x70, 0xf3, 0x1c, 0xd8, 0xf5, 0xec, 0x64, 0x1f, 0x43, 0x53, 0x71, + 0x07, 0x9d, 0x87, 0xf6, 0xef, 0x1c, 0xea, 0xae, 0xf7, 0xf0, 0x8b, 0x57, 0xe7, 0xdc, 0x8d, 0x4e, + 0xee, 0xa2, 0xf5, 0xff, 0x7a, 0x7b, 0x7f, 0x07, 0x65, 0x0e, 0x02, 0xcf, 0x55, 0xc2, 0x0b, 0xd5, + 0x95, 0x45, 0x3a, 0xe6, 0xbf, 0x6b, 0x88, 0xda, 0x85, 0xac, 0xad, 0xf4, 0x45, 0x12, 0x9a, 0xf5, + 0x5c, 0x61, 0xbd, 0x99, 0x7f, 0xbe, 0x03, 0xe0, 0x70, 0x39, 0xf9, 0x9a, 0xfb, 0x4a, 0xd8, 0xb1, + 0x93, 0x0c, 0x87, 0xcb, 0x5f, 0xd3, 0x06, 0xf6, 0x1f, 0xc8, 0x5e, 0x4a, 0x61, 0x93, 0xb7, 0x1a, + 0x56, 0xc7, 0xe1, 0xf2, 0x4b, 0x29, 0xec, 0xd4, 0xae, 0xce, 0x7f, 0x6f, 0x17, 0xdb, 0x87, 0xc6, + 0x85, 0x10, 0x31, 0xb2, 0xf5, 0x53, 0xd5, 0xb3, 0x27, 0x1f, 0x91, 0xb2, 0x0e, 0x09, 0x14, 0x31, + 0x7f, 0x5b, 0xcf, 0x82, 0x33, 0x2b, 0x6e, 0xff, 0x5f, 0x3e, 0xf8, 0x07, 0x75, 0x8b, 0x45, 0x28, + 0x65, 0xa7, 0x70, 0x2b, 0x4d, 0x99, 0xc9, 0x32, 0xb4, 0x39, 0x76, 0x61, 0xb5, 0x77, 0xe6, 0x58, + 0x3f, 0x55, 0xf8, 0x52, 0xcb, 0xb3, 0x5f, 0xc0, 0x5e, 0x29, 0xc9, 0xd3, 0xa3, 0xea, 0xef, 0xcc, + 0xf5, 0x3b, 0xc5, 0x5c, 0x4f, 0xce, 0x4b, 0xfc, 0xd1, 0xf8, 0x16, 0xb1, 0xfe, 0x5d, 0x6c, 0x73, + 0xf2, 0xd0, 0x5f, 0xf5, 0x8b, 0x9a, 0x7f, 0xac, 0x41, 0xaf, 0x74, 0x19, 0x36, 0x02, 0xd0, 0xc8, + 0x29, 0xdd, 0x37, 0x22, 0x06, 0xa9, 0xc4, 0x07, 0xe4, 0xac, 0x17, 0xee, 0x1b, 0x61, 0x19, 0xd3, + 0x64, 0xc9, 0x1e, 0x42, 0x47, 0xad, 0xb4, 0x74, 0xb1, 0x11, 0x7c, 0xb9, 0x22, 0xd1, 0xb6, 0xa2, + 0xff, 0xec, 0x31, 0x6c, 0xe9, 0x83, 0x9d, 0x40, 0x4a, 0x37, 0x8c, 0x9b, 0x11, 0x96, 0x3f, 0xfa, + 0x73, 0xe2, 0x58, 0x9b, 0xd3, 0x8c, 0x30, 0x7f, 0x03, 0x46, 0xfa, 0x59, 0xf6, 0x1e, 0x18, 0x1e, + 0x5f, 0xc5, 0x5d, 0x32, 0xde, 0xad, 0x65, 0x75, 0x3d, 0xbe, 0xa2, 0x06, 0x99, 0xed, 0x41, 0x07, + 0x99, 0x6a, 0xa5, 0xfd, 0xdd, 0xb2, 0xda, 0x1e, 0x5f, 0xbd, 0x5c, 0xa5, 0x0c, 0x87, 0xcb, 0xa4, + 0x05, 0xf6, 0xf8, 0xea, 0x73, 0x2e, 0xcd, 0x4f, 0xa1, 0xad, 0x2f, 0x79, 0xa3, 0x83, 0x51, 0xbf, + 0x5e, 0xd0, 0xff, 0x09, 0x6c, 0xe6, 0xee, 0xcd, 0x7e, 0x08, 0x77, 0xb4, 0x85, 0x21, 0x8f, 0x14, + 0x79, 0xa4, 0x70, 0x20, 0x23, 0xe6, 0x39, 0x8f, 0x14, 0x7e, 0x52, 0x37, 0xf5, 0xbf, 0xab, 0x43, + 0x5b, 0x37, 0xcc, 0xec, 0x61, 0x6e, 0x3a, 0xa1, 0xaa, 0x78, 0xb2, 0xf9, 0xf7, 0xb7, 0xf7, 0x3b, + 0x54, 0x40, 0xce, 0x3e, 0xcb, 0x46, 0x95, 0x0c, 0x30, 0xeb, 0x85, 0x7e, 0x3e, 0x99, 0x78, 0x1a, + 0xb9, 0x89, 0x67, 0x0f, 0x3a, 0xfe, 0xd2, 0x23, 0x97, 0x34, 0xb5, 0x4b, 0xfc, 0xa5, 0x87, 0x2e, + 0x79, 0x0f, 0x0c, 0x15, 0x28, 0xbe, 0x20, 0x96, 0x4e, 0xd2, 0x2e, 0x6d, 0x20, 0xf3, 0x21, 0xf4, + 0xf2, 0xd5, 0x16, 0xab, 0xa7, 0x06, 0xf7, 0xed, 0xac, 0xd6, 0xe2, 0x04, 0x70, 0x0f, 0xba, 0x69, + 0x79, 0xd5, 0x48, 0xdf, 0xe1, 0xba, 0xaa, 0xe2, 0x3c, 0x1c, 0x46, 0x41, 0x18, 0x48, 0x11, 0xa5, + 0x49, 0x59, 0x9d, 0x47, 0xa9, 0x9c, 0xe9, 0x82, 0x91, 0x32, 0xb1, 0x17, 0xe0, 0xb6, 0x1d, 0x09, + 0x29, 0xe3, 0xb6, 0x3b, 0x21, 0xd9, 0x01, 0x74, 0xc2, 0xe5, 0x74, 0x82, 0x25, 0xa7, 0x18, 0x6f, + 0xe7, 0xcb, 0xe9, 0x17, 0xe2, 0x2a, 0x19, 0x3c, 0x42, 0xa2, 0xa8, 0xe8, 0x04, 0x5f, 0x8b, 0x28, + 0x76, 0x8b, 0x26, 0x4c, 0x05, 0xfd, 0xf2, 0xd4, 0xc1, 0x3e, 0x02, 0x23, 0x4d, 0xe9, 0x52, 0xdc, + 0x97, 0xef, 0x9c, 0x09, 0x62, 0x67, 0x22, 0x5d, 0xc7, 0x17, 0xf6, 0x24, 0x73, 0x19, 0xdd, 0xab, + 0x6b, 0xf5, 0x34, 0xe3, 0x67, 0x89, 0xcf, 0xcc, 0x1f, 0x40, 0x5b, 0xdf, 0x91, 0x7e, 0xab, 0xab, + 0x30, 0x69, 0x9b, 0x68, 0x5d, 0x99, 0xa0, 0x7f, 0xaa, 0x41, 0x37, 0x99, 0x6a, 0x2a, 0x95, 0x0a, + 0x97, 0xae, 0xdf, 0xf4, 0xd2, 0xeb, 0x46, 0xc2, 0x24, 0x84, 0x9a, 0xb9, 0x10, 0x3a, 0x00, 0xa6, + 0x23, 0xe5, 0x32, 0x50, 0xae, 0xef, 0x4c, 0xb4, 0x37, 0x75, 0xc8, 0xf4, 0x89, 0xf3, 0x8a, 0x18, + 0xe7, 0xb8, 0x7f, 0xf4, 0x4d, 0x0b, 0x7a, 0xc7, 0x27, 0xa7, 0x67, 0xc7, 0x61, 0xb8, 0x70, 0x67, + 0x9c, 0x9a, 0xa9, 0x11, 0x34, 0xa9, 0x5d, 0xac, 0x78, 0x74, 0x1a, 0x56, 0xcd, 0x2d, 0xec, 0x08, + 0x5a, 0xd4, 0x35, 0xb2, 0xaa, 0xb7, 0xa7, 0x61, 0xe5, 0xf8, 0x82, 0x1f, 0xd1, 0x7d, 0xe5, 0xf5, + 0x27, 0xa8, 0x61, 0xd5, 0x0c, 0xc3, 0x3e, 0x05, 0x23, 0xeb, 0xf7, 0xd6, 0x3d, 0x44, 0x0d, 0xd7, + 0x4e, 0x33, 0xa8, 0x9f, 0x95, 0xd0, 0x75, 0xcf, 0x36, 0xc3, 0xb5, 0x6d, 0x3f, 0x7b, 0x0a, 0x9d, + 0xa4, 0x09, 0xa9, 0x7e, 0x2a, 0x1a, 0xae, 0x99, 0x34, 0xd0, 0x3d, 0xba, 0x91, 0xab, 0x7a, 0xcf, + 0x1a, 0x56, 0x8e, 0x43, 0xec, 0x31, 0xb4, 0xe3, 0x3a, 0x50, 0xf9, 0xe8, 0x33, 0xac, 0x9e, 0x17, + 0xd0, 0xc8, 0xac, 0x89, 0x5d, 0xf7, 0xe6, 0x36, 0x5c, 0x3b, 0xb7, 0xb1, 0x63, 0x80, 0x5c, 0xf3, + 0xb6, 0xf6, 0x31, 0x6d, 0xb8, 0x7e, 0x1e, 0x63, 0x9f, 0x40, 0x37, 0x9b, 0xb1, 0xab, 0x1f, 0xb9, + 0x86, 0xeb, 0x46, 0xa4, 0x69, 0x9b, 0x1e, 0x42, 0x3f, 0xfc, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x76, 0x56, 0x8a, 0x69, 0x84, 0x15, 0x00, 0x00, } diff --git a/types/types.proto b/types/types.proto index bddf13cb..3d247266 100644 --- a/types/types.proto +++ b/types/types.proto @@ -47,8 +47,11 @@ message RequestSetOption { } message RequestInitChain { - repeated Validator validators = 1 [(gogoproto.nullable)=false]; - GenesisFile genesis_file = 2 [(gogoproto.nullable)=false]; + int64 time = 1; + string chain_id = 2; + ConsensusParams consensus_params = 3; + repeated Validator validators = 4 [(gogoproto.nullable)=false]; + bytes app_state_bytes = 5; } message RequestQuery { @@ -61,7 +64,7 @@ message RequestQuery { message RequestBeginBlock { bytes hash = 1; Header header = 2 [(gogoproto.nullable)=false]; - repeated SigningValidator validators = 3; + repeated SigningValidator validators = 3 [(gogoproto.nullable)=false]; repeated Evidence byzantine_validators = 4 [(gogoproto.nullable)=false]; } @@ -128,7 +131,8 @@ message ResponseSetOption { } message ResponseInitChain { - repeated Validator validators = 1 [(gogoproto.nullable)=false]; + ConsensusParams consensus_params = 1; + repeated Validator validators = 2 [(gogoproto.nullable)=false]; } message ResponseQuery { @@ -214,14 +218,6 @@ message BlockGossip { //---------------------------------------- // Blockchain Types -message GenesisFile { - int64 time = 1; - string chain_id = 2; - ConsensusParams consensus_params = 3; - repeated Validator validators = 4; - bytes app_state_json = 5; -} - // just the minimum the app might need message Header { // basics @@ -238,7 +234,7 @@ message Header { bytes app_hash = 7; // consensus - Validator proposer = 8; + Validator proposer = 8 [(gogoproto.nullable)=false]; } // Validator @@ -250,7 +246,7 @@ message Validator { // Validator with an extra bool message SigningValidator { - Validator validator = 1; + Validator validator = 1 [(gogoproto.nullable)=false]; bool signed_last_block = 2; } @@ -261,7 +257,7 @@ message PubKey { message Evidence { string type = 1; - Validator validator = 2; + Validator validator = 2 [(gogoproto.nullable)=false]; int64 height = 3; int64 time = 4; int64 total_voting_power = 5; From 9af8b7a7c87478869f8c280ed9539470b8f470b4 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Fri, 1 Jun 2018 22:03:47 -0400 Subject: [PATCH 34/40] fix tests file --- tests/server/client.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/server/client.go b/tests/server/client.go index 5dac680c..5ef978c7 100644 --- a/tests/server/client.go +++ b/tests/server/client.go @@ -19,8 +19,7 @@ func InitChain(client abcicli.Client) error { vals[i] = types.Ed25519Validator(pubkey, int64(power)) } _, err := client.InitChainSync(types.RequestInitChain{ - Validators: vals, - GenesisFile: types.GenesisFile{}, + Validators: vals, }) if err != nil { fmt.Printf("Failed test: InitChain - %v\n", err) From 80e7807caed5ce71ffb87be79cbedcef6ff0fca1 Mon Sep 17 00:00:00 2001 From: Zach Date: Tue, 5 Jun 2018 10:27:55 -0400 Subject: [PATCH 35/40] move spec to markdown (#260) --- specification.md | 249 ++++++++++++++++++++++++++++++++++++++++++++++ specification.rst | 2 + 2 files changed, 251 insertions(+) create mode 100644 specification.md diff --git a/specification.md b/specification.md new file mode 100644 index 00000000..e3d86c0a --- /dev/null +++ b/specification.md @@ -0,0 +1,249 @@ +# ABCI Specification + +## Message Types + +ABCI requests/responses are defined as simple Protobuf messages in [this +schema file](https://github.com/tendermint/abci/blob/master/types/types.proto). +TendermintCore sends the requests, and the ABCI application sends the +responses. Here, we provide an overview of the messages types and how +they are used by Tendermint. Then we describe each request-response pair +as a function with arguments and return values, and add some notes on +usage. + +Some messages (`Echo, Info, InitChain, BeginBlock, EndBlock, Commit`), +don't return errors because an error would indicate a critical failure +in the application and there's nothing Tendermint can do. The problem +should be addressed and both Tendermint and the application restarted. +All other messages (`SetOption, Query, CheckTx, DeliverTx`) return an +application-specific response `Code uint32`, where only `0` is reserved +for `OK`. + +Some messages (`SetOption, Query, CheckTx, DeliverTx`) return +non-deterministic data in the form of `Info` and `Log`. The `Log` is +intended for the literal output from the application's logger, while the +`Info` is any additional info that should be returned. + +The first time a new blockchain is started, Tendermint calls +`InitChain`. From then on, the Block Execution Sequence that causes the +committed state to be updated is as follows: + +`BeginBlock, [DeliverTx], EndBlock, Commit` + +where one `DeliverTx` is called for each transaction in the block. +Cryptographic commitments to the results of DeliverTx, EndBlock, and +Commit are included in the header of the next block. + +Tendermint opens three connections to the application to handle the +different message types: + +- `Consensus Connection - InitChain, BeginBlock, DeliverTx, EndBlock, Commit` +- `Mempool Connection - CheckTx` +- `Info Connection - Info, SetOption, Query` + +The `Flush` message is used on every connection, and the `Echo` message +is only used for debugging. + +Note that messages may be sent concurrently across all connections -a +typical application will thus maintain a distinct state for each +connection. They may be referred to as the `DeliverTx state`, the +`CheckTx state`, and the `Commit state` respectively. + +See below for more details on the message types and how they are used. + +### Echo + +- **Arguments**: + - `Message (string)`: A string to echo back +- **Returns**: + - `Message (string)`: The input string +- **Usage**: + - Echo a string to test an abci client/server implementation + +### Flush + +- **Usage**: + - Signals that messages queued on the client should be flushed to + the server. It is called periodically by the client + implementation to ensure asynchronous requests are actually + sent, and is called immediately to make a synchronous request, + which returns when the Flush response comes back. + +### Info + +- **Arguments**: + - `Version (string)`: The Tendermint version +- **Returns**: + - `Data (string)`: Some arbitrary information + - `Version (Version)`: Version information + - `LastBlockHeight (int64)`: Latest block for which the app has + called Commit + - `LastBlockAppHash ([]byte)`: Latest result of Commit +- **Usage**: + - Return information about the application state. + - Used to sync Tendermint with the application during a handshake + that happens on startup. + - Tendermint expects `LastBlockAppHash` and `LastBlockHeight` to + be updated during `Commit`, ensuring that `Commit` is never + called twice for the same block height. + +### SetOption + +- **Arguments**: + - `Key (string)`: Key to set + - `Value (string)`: Value to set for key +- **Returns**: + - `Code (uint32)`: Response code + - `Log (string)`: The output of the application's logger. May + be non-deterministic. + - `Info (string)`: Additional information. May + be non-deterministic. +- **Usage**: + - Set non-consensus critical application specific options. + - e.g. Key="min-fee", Value="100fermion" could set the minimum fee + required for CheckTx (but not DeliverTx - that would be + consensus critical). + +### InitChain + +- **Arguments**: + - `Validators ([]Validator)`: Initial genesis validators + - `AppStateBytes ([]byte)`: Serialized initial application state +- **Usage**: + - Called once upon genesis. + +### Query + +- **Arguments**: + - `Data ([]byte)`: Raw query bytes. Can be used with or in lieu + of Path. + - `Path (string)`: Path of request, like an HTTP GET path. Can be + used with or in liue of Data. + - Apps MUST interpret '/store' as a query by key on the + underlying store. The key SHOULD be specified in the Data field. + - Apps SHOULD allow queries over specific types like + '/accounts/...' or '/votes/...' + - `Height (int64)`: The block height for which you want the query + (default=0 returns data for the latest committed block). Note + that this is the height of the block containing the + application's Merkle root hash, which represents the state as it + was after committing the block at Height-1 + - `Prove (bool)`: Return Merkle proof with response if possible +- **Returns**: + - `Code (uint32)`: Response code. + - `Log (string)`: The output of the application's logger. May + be non-deterministic. + - `Info (string)`: Additional information. May + be non-deterministic. + - `Index (int64)`: The index of the key in the tree. + - `Key ([]byte)`: The key of the matching data. + - `Value ([]byte)`: The value of the matching data. + - `Proof ([]byte)`: Proof for the data, if requested. + - `Height (int64)`: The block height from which data was derived. + Note that this is the height of the block containing the + application's Merkle root hash, which represents the state as it + was after committing the block at Height-1 +- **Usage**: + - Query for data from the application at current or past height. + - Optionally return Merkle proof. + +### BeginBlock + +- **Arguments**: + - `Hash ([]byte)`: The block's hash. This can be derived from the + block header. + - `Header (struct{})`: The block header + - `AbsentValidators ([]int32)`: List of indices of validators not + included in the LastCommit + - `ByzantineValidators ([]Evidence)`: List of evidence of + validators that acted maliciously +- **Usage**: + - Signals the beginning of a new block. Called prior to + any DeliverTxs. + - The header is expected to at least contain the Height. + - The `AbsentValidators` and `ByzantineValidators` can be used to + determine rewards and punishments for the validators. + +### CheckTx + +- **Arguments**: + - `Tx ([]byte)`: The request transaction bytes +- **Returns**: + - `Code (uint32)`: Response code + - `Data ([]byte)`: Result bytes, if any. + - `Log (string)`: The output of the application's logger. May + be non-deterministic. + - `Info (string)`: Additional information. May + be non-deterministic. + - `GasWanted (int64)`: Amount of gas request for transaction. + - `GasUsed (int64)`: Amount of gas consumed by transaction. + - `Tags ([]cmn.KVPair)`: Key-Value tags for filtering and indexing + transactions (eg. by account). + - `Fee (cmn.KI64Pair)`: Fee paid for the transaction. +- **Usage**: Validate a mempool transaction, prior to broadcasting + or proposing. CheckTx should perform stateful but light-weight + checks of the validity of the transaction (like checking signatures + and account balances), but need not execute in full (like running a + smart contract). + + Tendermint runs CheckTx and DeliverTx concurrently with eachother, + though on distinct ABCI connections - the mempool connection and the + consensus connection, respectively. + + The application should maintain a separate state to support CheckTx. + This state can be reset to the latest committed state during + `Commit`, where Tendermint ensures the mempool is locked and not + sending new `CheckTx`. After `Commit`, the mempool will rerun + CheckTx on all remaining transactions, throwing out any that are no + longer valid. + + Keys and values in Tags must be UTF-8 encoded strings (e.g. + "account.owner": "Bob", "balance": "100.0", "date": "2018-01-02") + +### DeliverTx + +- **Arguments**: + - `Tx ([]byte)`: The request transaction bytes. +- **Returns**: + - `Code (uint32)`: Response code. + - `Data ([]byte)`: Result bytes, if any. + - `Log (string)`: The output of the application's logger. May + be non-deterministic. + - `Info (string)`: Additional information. May + be non-deterministic. + - `GasWanted (int64)`: Amount of gas requested for transaction. + - `GasUsed (int64)`: Amount of gas consumed by transaction. + - `Tags ([]cmn.KVPair)`: Key-Value tags for filtering and indexing + transactions (eg. by account). + - `Fee (cmn.KI64Pair)`: Fee paid for the transaction. +- **Usage**: + - Deliver a transaction to be executed in full by the application. + If the transaction is valid, returns CodeType.OK. + - Keys and values in Tags must be UTF-8 encoded strings (e.g. + "account.owner": "Bob", "balance": "100.0", + "time": "2018-01-02T12:30:00Z") + +### EndBlock + +- **Arguments**: + - `Height (int64)`: Height of the block just executed. +- **Returns**: + - `ValidatorUpdates ([]Validator)`: Changes to validator set (set + voting power to 0 to remove). + - `ConsensusParamUpdates (ConsensusParams)`: Changes to + consensus-critical time, size, and other parameters. +- **Usage**: + - Signals the end of a block. + - Called prior to each Commit, after all transactions. + - Validator set and consensus params are updated with the result. + - Validator pubkeys are expected to be go-wire encoded. + +### Commit + +- **Returns**: + - `Data ([]byte)`: The Merkle root hash +- **Usage**: + - Persist the application state. + - Return a Merkle root hash of the application state. + - It's critical that all application instances return the + same hash. If not, they will not be able to agree on the next + block, because the hash is included in the next block! diff --git a/specification.rst b/specification.rst index 8ebe8892..8d8530de 100644 --- a/specification.rst +++ b/specification.rst @@ -1,6 +1,8 @@ ABCI Specification ================== +NOTE: this file has moved to `specification.md <./specification.md>`__. It is left to prevent link breakages for the forseable future. It can safely be deleted in a few months. + Message Types ~~~~~~~~~~~~~ From bc07d066476908b8e5696672061f29e0f28f1507 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Tue, 5 Jun 2018 23:37:15 -0700 Subject: [PATCH 36/40] update changelog, version, spec --- CHANGELOG.md | 19 ++++++-- specification.md | 114 +++++++++++++++++++++++++++++++++++++-------- version/version.go | 6 +-- 3 files changed, 113 insertions(+), 26 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f966c343..2584353d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,10 +6,23 @@ BREAKING CHANGES: -- [types] Added `type` field to `Evidence` (opaque bytes indicating kind of fraud) -- [types] Added `time` field to `Evidence` (note that this is the timestamp of the block which was double-signed, not the time the evidence was received) +- [example/dummy] Remove. See example/kvstore +- [types] Upgrade many messages: + - RequestInitChain takes all fields from a Genesis file + - RequestBeginBlock provides a list of all validators and whether or not + they signed + - Header: remove some fields, add proposer + - BlockID, PartSetHeader: remove + - Validator: includes address + - PubKey: new message with `type` and `data` + - Evidence: add type and more fields -TODO +FEATURES: + +- [types] Add some fields + - ResponseInitChain includes ConsensusParams and Validators + - ResponseBeginBlock includes tags + - ResponseEndBlock includes tags ## 0.10.3 (April 9, 2018) diff --git a/specification.md b/specification.md index e3d86c0a..3d8a905c 100644 --- a/specification.md +++ b/specification.md @@ -50,11 +50,13 @@ connection. They may be referred to as the `DeliverTx state`, the See below for more details on the message types and how they are used. +## Request/Response Messages + ### Echo -- **Arguments**: +- **Request**: - `Message (string)`: A string to echo back -- **Returns**: +- **Response**: - `Message (string)`: The input string - **Usage**: - Echo a string to test an abci client/server implementation @@ -70,9 +72,9 @@ See below for more details on the message types and how they are used. ### Info -- **Arguments**: +- **Request**: - `Version (string)`: The Tendermint version -- **Returns**: +- **Response**: - `Data (string)`: Some arbitrary information - `Version (Version)`: Version information - `LastBlockHeight (int64)`: Latest block for which the app has @@ -88,10 +90,10 @@ See below for more details on the message types and how they are used. ### SetOption -- **Arguments**: +- **Request**: - `Key (string)`: Key to set - `Value (string)`: Value to set for key -- **Returns**: +- **Response**: - `Code (uint32)`: Response code - `Log (string)`: The output of the application's logger. May be non-deterministic. @@ -105,15 +107,19 @@ See below for more details on the message types and how they are used. ### InitChain -- **Arguments**: +- **Request**: - `Validators ([]Validator)`: Initial genesis validators - `AppStateBytes ([]byte)`: Serialized initial application state +- **Response**: + - `ConsensusParams (ConsensusParams)`: Initial + consensus-critical parameters. + - `Validators ([]Validator)`: Initial validator set. - **Usage**: - Called once upon genesis. ### Query -- **Arguments**: +- **Request**: - `Data ([]byte)`: Raw query bytes. Can be used with or in lieu of Path. - `Path (string)`: Path of request, like an HTTP GET path. Can be @@ -128,7 +134,7 @@ See below for more details on the message types and how they are used. application's Merkle root hash, which represents the state as it was after committing the block at Height-1 - `Prove (bool)`: Return Merkle proof with response if possible -- **Returns**: +- **Response**: - `Code (uint32)`: Response code. - `Log (string)`: The output of the application's logger. May be non-deterministic. @@ -148,26 +154,28 @@ See below for more details on the message types and how they are used. ### BeginBlock -- **Arguments**: +- **Request**: - `Hash ([]byte)`: The block's hash. This can be derived from the block header. - `Header (struct{})`: The block header - - `AbsentValidators ([]int32)`: List of indices of validators not - included in the LastCommit + - `Validators ([]SigningValidator)`: List of validators in the current validator + set and whether or not they signed a vote in the LastCommit - `ByzantineValidators ([]Evidence)`: List of evidence of validators that acted maliciously +- **Response**: + - `Tags ([]cmn.KVPair)`: Key-Value tags for filtering and indexing - **Usage**: - Signals the beginning of a new block. Called prior to any DeliverTxs. - The header is expected to at least contain the Height. - - The `AbsentValidators` and `ByzantineValidators` can be used to + - The `Validators` and `ByzantineValidators` can be used to determine rewards and punishments for the validators. ### CheckTx -- **Arguments**: +- **Request**: - `Tx ([]byte)`: The request transaction bytes -- **Returns**: +- **Response**: - `Code (uint32)`: Response code - `Data ([]byte)`: Result bytes, if any. - `Log (string)`: The output of the application's logger. May @@ -201,9 +209,9 @@ See below for more details on the message types and how they are used. ### DeliverTx -- **Arguments**: +- **Request**: - `Tx ([]byte)`: The request transaction bytes. -- **Returns**: +- **Response**: - `Code (uint32)`: Response code. - `Data ([]byte)`: Result bytes, if any. - `Log (string)`: The output of the application's logger. May @@ -224,13 +232,14 @@ See below for more details on the message types and how they are used. ### EndBlock -- **Arguments**: +- **Request**: - `Height (int64)`: Height of the block just executed. -- **Returns**: +- **Response**: - `ValidatorUpdates ([]Validator)`: Changes to validator set (set voting power to 0 to remove). - `ConsensusParamUpdates (ConsensusParams)`: Changes to consensus-critical time, size, and other parameters. + - `Tags ([]cmn.KVPair)`: Key-Value tags for filtering and indexing - **Usage**: - Signals the end of a block. - Called prior to each Commit, after all transactions. @@ -239,7 +248,7 @@ See below for more details on the message types and how they are used. ### Commit -- **Returns**: +- **Response**: - `Data ([]byte)`: The Merkle root hash - **Usage**: - Persist the application state. @@ -247,3 +256,68 @@ See below for more details on the message types and how they are used. - It's critical that all application instances return the same hash. If not, they will not be able to agree on the next block, because the hash is included in the next block! + +## Data Messages + +### Header + +- **Fields**: + - `ChainID (string)`: ID of the blockchain + - `Height (int64)`: Height of the block in the chain + - `Time (int64)`: Unix time of the block + - `NumTxs (int32)`: Number of transactions in the block + - `TotalTxs (int64)`: Total number of transactions in the blockchain until + now + - `LastBlockHash ([]byte)`: Hash of the previous (parent) block + - `AppHash ([]byte)`: Data returned by the last call to `Commit` - typically the + Merkle root of the application state after executing the previous block's + transactions + - `Proposer (Validator)`: Original proposer for the block +- **Usage**: + - Provided in RequestBeginBlock + - Provides important context about the current state of the blockchain - + especially height and time. + - Provides the proposer of the current block, for use in proposer-based + reward mechanisms. + +### Validator + +- **Fields**: + - `Address ([]byte)`: Address of the validator (hash of the public key) + - `PubKey (PubKey)`: Public key of the validator + - `Power (int64)`: Voting power of the validator +- **Usage**: + - Provides all identifying information about the validator + +### SigningValidator + +- **Fields**: + - `Validator (Validator)`: A validator + - `SignedLastBlock (bool)`: Indicated whether or not the validator signed + the last block +- **Usage**: + - Indicates whether a validator signed the last block, allowing for rewards + based on validator availability + +### PubKey + +- **Fields**: + - `Type (string)`: Type of the public key. A simple string like `"ed25519"`. + In the future, may indicate a serialization algorithm to parse the `Data`, + for instance `"amino"`. + - `Data ([]byte)`: Public key data. For a simple public key, it's just the + raw bytes. If the `Type` indicates an encoding algorithm, this is the + encoded public key. +- **Usage**: + - A generic and extensible typed public key + +### Evidence + +- **Fields**: + - `Type (string)`: Type of the evidence. A hierarchical path like + "duplicate/vote". + - `Validator (Validator`: The offending validator + - `Height (int64)`: Height when the offense was committed + - `Time (int64)`: Unix time of the block at height `Height` + - `TotalVotingPower (int64)`: Total voting power of the validator set at + height `Height` diff --git a/version/version.go b/version/version.go index 7313f5ee..e813a01c 100644 --- a/version/version.go +++ b/version/version.go @@ -3,7 +3,7 @@ package version // NOTE: we should probably be versioning the ABCI and the abci-cli separately const Maj = "0" -const Min = "10" -const Fix = "4" +const Min = "11" +const Fix = "0" -const Version = "0.10.4-dev" +const Version = "0.11.0" From 8fa7c493bc0f458a725bf3e50b3b1a8046cbeb1b Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Wed, 6 Jun 2018 00:01:38 -0700 Subject: [PATCH 37/40] add val_set_hash to header --- specification.md | 1 + types/types.pb.go | 241 ++++++++++++++++++++++++---------------------- types/types.proto | 5 +- 3 files changed, 129 insertions(+), 118 deletions(-) diff --git a/specification.md b/specification.md index 3d8a905c..2b0179f1 100644 --- a/specification.md +++ b/specification.md @@ -269,6 +269,7 @@ See below for more details on the message types and how they are used. - `TotalTxs (int64)`: Total number of transactions in the blockchain until now - `LastBlockHash ([]byte)`: Hash of the previous (parent) block + - `ValSetHash ([]byte)`: Hash of the validator set for this block - `AppHash ([]byte)`: Data returned by the last call to `Commit` - typically the Merkle root of the application state after executing the previous block's transactions diff --git a/types/types.pb.go b/types/types.pb.go index 369cfde1..72de6b53 100644 --- a/types/types.pb.go +++ b/types/types.pb.go @@ -1689,9 +1689,10 @@ type Header struct { TotalTxs int64 `protobuf:"varint,5,opt,name=total_txs,json=totalTxs,proto3" json:"total_txs,omitempty"` // hashes LastBlockHash []byte `protobuf:"bytes,6,opt,name=last_block_hash,json=lastBlockHash,proto3" json:"last_block_hash,omitempty"` - AppHash []byte `protobuf:"bytes,7,opt,name=app_hash,json=appHash,proto3" json:"app_hash,omitempty"` + ValSetHash []byte `protobuf:"bytes,7,opt,name=val_set_hash,json=valSetHash,proto3" json:"val_set_hash,omitempty"` + AppHash []byte `protobuf:"bytes,8,opt,name=app_hash,json=appHash,proto3" json:"app_hash,omitempty"` // consensus - Proposer Validator `protobuf:"bytes,8,opt,name=proposer" json:"proposer"` + Proposer Validator `protobuf:"bytes,9,opt,name=proposer" json:"proposer"` } func (m *Header) Reset() { *m = Header{} } @@ -1741,6 +1742,13 @@ func (m *Header) GetLastBlockHash() []byte { return nil } +func (m *Header) GetValSetHash() []byte { + if m != nil { + return m.ValSetHash + } + return nil +} + func (m *Header) GetAppHash() []byte { if m != nil { return m.AppHash @@ -2327,120 +2335,121 @@ var _ABCIApplication_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("types/types.proto", fileDescriptorTypes) } var fileDescriptorTypes = []byte{ - // 1832 bytes of a gzipped FileDescriptorProto + // 1849 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0x4b, 0x6f, 0x1b, 0xc9, - 0x11, 0x16, 0xdf, 0x9c, 0xd2, 0x83, 0x74, 0xcb, 0xb6, 0x68, 0x2e, 0x02, 0x1b, 0x83, 0xc0, 0x91, + 0x11, 0x16, 0xdf, 0x9c, 0xd2, 0x83, 0x74, 0xcb, 0xb6, 0x68, 0x2e, 0x02, 0x0b, 0x83, 0xc0, 0x91, 0xb3, 0x5a, 0x31, 0xd1, 0xae, 0x0d, 0x7b, 0x37, 0x59, 0x44, 0xd2, 0x3a, 0x4b, 0x61, 0xf3, 0x50, - 0xc6, 0x5e, 0x07, 0xc8, 0x85, 0x68, 0x72, 0x5a, 0xc3, 0x81, 0x39, 0x8f, 0x9d, 0x6e, 0x6a, 0x29, - 0xdf, 0x72, 0x0c, 0xb0, 0xc8, 0x35, 0xe7, 0xfc, 0x81, 0xdc, 0xf2, 0x17, 0x82, 0xfc, 0x89, 0xf8, - 0x90, 0xe4, 0x94, 0x3f, 0x91, 0xa0, 0xaa, 0xe7, 0xad, 0xa1, 0xa1, 0x6c, 0x8e, 0xb9, 0x48, 0x5d, - 0x5d, 0x55, 0x3d, 0x5d, 0xc5, 0xaa, 0xaf, 0xaa, 0x1a, 0x6e, 0xa9, 0xab, 0x50, 0xc8, 0x11, 0xfd, - 0x3d, 0x0c, 0xa3, 0x40, 0x05, 0xac, 0x45, 0xc4, 0xf0, 0x03, 0xc7, 0x55, 0xf3, 0xe5, 0xf4, 0x70, - 0x16, 0x78, 0x23, 0x27, 0x70, 0x82, 0x11, 0x71, 0xa7, 0xcb, 0x0b, 0xa2, 0x88, 0xa0, 0x95, 0xd6, - 0x1a, 0x8e, 0x72, 0xe2, 0x4a, 0xf8, 0xb6, 0x88, 0x3c, 0xd7, 0x57, 0x23, 0xe5, 0x2d, 0xdc, 0xa9, - 0x1c, 0xcd, 0x02, 0xcf, 0x0b, 0xfc, 0xfc, 0x67, 0xcc, 0xbf, 0x34, 0xa1, 0x63, 0x89, 0xaf, 0x96, - 0x42, 0x2a, 0xb6, 0x0f, 0x4d, 0x31, 0x9b, 0x07, 0x83, 0xfa, 0x83, 0xda, 0xfe, 0xe6, 0x11, 0x3b, - 0xd4, 0x72, 0x31, 0xf7, 0xf9, 0x6c, 0x1e, 0x8c, 0x37, 0x2c, 0x92, 0x60, 0xef, 0x43, 0xeb, 0x62, - 0xb1, 0x94, 0xf3, 0x41, 0x83, 0x44, 0x77, 0x8b, 0xa2, 0x3f, 0x45, 0xd6, 0x78, 0xc3, 0xd2, 0x32, - 0x78, 0xac, 0xeb, 0x5f, 0x04, 0x83, 0x66, 0xd5, 0xb1, 0x67, 0xfe, 0x05, 0x1d, 0x8b, 0x12, 0xec, - 0x29, 0x80, 0x14, 0x6a, 0x12, 0x84, 0xca, 0x0d, 0xfc, 0x41, 0x8b, 0xe4, 0xf7, 0x8a, 0xf2, 0x2f, - 0x84, 0xfa, 0x25, 0xb1, 0xc7, 0x1b, 0x96, 0x21, 0x13, 0x02, 0x35, 0x5d, 0xdf, 0x55, 0x93, 0xd9, - 0x9c, 0xbb, 0xfe, 0xa0, 0x5d, 0xa5, 0x79, 0xe6, 0xbb, 0xea, 0x14, 0xd9, 0xa8, 0xe9, 0x26, 0x04, - 0x9a, 0xf2, 0xd5, 0x52, 0x44, 0x57, 0x83, 0x4e, 0x95, 0x29, 0xbf, 0x42, 0x16, 0x9a, 0x42, 0x32, - 0xec, 0x13, 0xd8, 0x9c, 0x0a, 0xc7, 0xf5, 0x27, 0xd3, 0x45, 0x30, 0x7b, 0x3d, 0xe8, 0x92, 0xca, - 0xa0, 0xa8, 0x72, 0x82, 0x02, 0x27, 0xc8, 0x1f, 0x6f, 0x58, 0x30, 0x4d, 0x29, 0x76, 0x04, 0xdd, - 0xd9, 0x5c, 0xcc, 0x5e, 0x4f, 0xd4, 0x6a, 0x60, 0x90, 0xe6, 0x9d, 0xa2, 0xe6, 0x29, 0x72, 0x5f, - 0xae, 0xc6, 0x1b, 0x56, 0x67, 0xa6, 0x97, 0x68, 0x97, 0x2d, 0x16, 0xee, 0xa5, 0x88, 0x50, 0x6b, - 0xb7, 0xca, 0xae, 0xcf, 0x34, 0x9f, 0xf4, 0x0c, 0x3b, 0x21, 0xd8, 0x63, 0x30, 0x84, 0x6f, 0xc7, - 0x17, 0xdd, 0x24, 0xc5, 0xbb, 0xa5, 0x5f, 0xd4, 0xb7, 0x93, 0x6b, 0x76, 0x45, 0xbc, 0x66, 0x87, - 0xd0, 0xc6, 0x28, 0x71, 0xd5, 0x60, 0x8b, 0x74, 0x6e, 0x97, 0xae, 0x48, 0xbc, 0xf1, 0x86, 0x15, - 0x4b, 0x9d, 0x74, 0xa0, 0x75, 0xc9, 0x17, 0x4b, 0x61, 0x7e, 0x0f, 0x36, 0x73, 0x91, 0xc2, 0x06, - 0xd0, 0xf1, 0x84, 0x94, 0xdc, 0x11, 0x83, 0xda, 0x83, 0xda, 0xbe, 0x61, 0x25, 0xa4, 0xb9, 0x03, - 0x5b, 0xf9, 0x38, 0xc9, 0x29, 0x62, 0x2c, 0xa0, 0xe2, 0xa5, 0x88, 0x24, 0x06, 0x40, 0xac, 0x18, - 0x93, 0xe6, 0xc7, 0xd0, 0x2f, 0x07, 0x01, 0xeb, 0x43, 0xe3, 0xb5, 0xb8, 0x8a, 0x25, 0x71, 0xc9, - 0x6e, 0xc7, 0x17, 0xa2, 0x28, 0x36, 0xac, 0xf8, 0x76, 0xff, 0xac, 0xa5, 0xca, 0x69, 0x1c, 0x30, - 0x06, 0x4d, 0xe5, 0x7a, 0xfa, 0x82, 0x0d, 0x8b, 0xd6, 0xec, 0x1e, 0xfe, 0x48, 0xdc, 0xf5, 0x27, - 0xae, 0x1d, 0x9f, 0xd0, 0x21, 0xfa, 0xcc, 0x66, 0xc7, 0xd0, 0x9f, 0x05, 0xbe, 0x14, 0xbe, 0x5c, - 0xca, 0x49, 0xc8, 0x23, 0xee, 0xc9, 0x38, 0xfe, 0x13, 0xc7, 0x9e, 0x26, 0xec, 0x73, 0xe2, 0x5a, - 0xbd, 0x59, 0x71, 0x83, 0x3d, 0x01, 0xb8, 0xe4, 0x0b, 0xd7, 0xe6, 0x2a, 0x88, 0xe4, 0xa0, 0xf9, - 0xa0, 0xb1, 0xbf, 0x79, 0xd4, 0x8f, 0x95, 0x5f, 0x25, 0x8c, 0x93, 0xe6, 0x5f, 0xdf, 0xde, 0xdf, - 0xb0, 0x72, 0x92, 0xec, 0x21, 0xf4, 0x78, 0x18, 0x4e, 0xa4, 0xe2, 0x4a, 0x4c, 0xa6, 0x57, 0x4a, - 0x48, 0xca, 0x8e, 0x2d, 0x6b, 0x9b, 0x87, 0xe1, 0x0b, 0xdc, 0x3d, 0xc1, 0x4d, 0xd3, 0x4e, 0x7d, - 0x4b, 0x81, 0x8b, 0x16, 0xda, 0x5c, 0x71, 0xb2, 0x70, 0xcb, 0xa2, 0x35, 0xee, 0x85, 0x5c, 0xcd, - 0x63, 0xeb, 0x68, 0xcd, 0xee, 0x42, 0x7b, 0x2e, 0x5c, 0x67, 0xae, 0xc8, 0xa0, 0x86, 0x15, 0x53, - 0xe8, 0xcc, 0x30, 0x0a, 0x2e, 0x05, 0xe5, 0x6e, 0xd7, 0xd2, 0x84, 0xf9, 0xb7, 0x1a, 0xdc, 0xba, - 0x16, 0xec, 0x78, 0xee, 0x9c, 0xcb, 0x79, 0xf2, 0x2d, 0x5c, 0xb3, 0xf7, 0xf1, 0x5c, 0x6e, 0x8b, - 0x28, 0xc6, 0x94, 0xed, 0xd8, 0xd6, 0x31, 0x6d, 0xc6, 0x86, 0xc6, 0x22, 0xec, 0xc7, 0x05, 0xe7, - 0x34, 0xc8, 0x39, 0x49, 0xac, 0xbf, 0x70, 0x1d, 0xdf, 0xf5, 0x9d, 0x77, 0xf9, 0x68, 0x0c, 0xb7, - 0xa7, 0x57, 0x6f, 0xb8, 0xaf, 0x5c, 0x5f, 0x4c, 0xae, 0x79, 0xb9, 0x17, 0x1f, 0xf4, 0xfc, 0xd2, - 0xb5, 0x85, 0x3f, 0x13, 0xf1, 0x01, 0xbb, 0xa9, 0x4a, 0x7a, 0xb4, 0x34, 0x1f, 0xc0, 0x4e, 0x31, - 0x23, 0xd9, 0x0e, 0xd4, 0xd5, 0x2a, 0xb6, 0xac, 0xae, 0x56, 0xa6, 0x99, 0x46, 0x53, 0x9a, 0x7d, - 0xd7, 0x64, 0x1e, 0x41, 0xaf, 0x94, 0x68, 0x39, 0x37, 0xd7, 0xf2, 0x6e, 0x36, 0x7b, 0xb0, 0x5d, - 0xc8, 0x2f, 0xf3, 0x9b, 0x16, 0x74, 0x2d, 0x21, 0x43, 0x0c, 0x1f, 0xf6, 0x14, 0x0c, 0xb1, 0x9a, - 0x09, 0x0d, 0x8a, 0xb5, 0x12, 0xe4, 0x68, 0x99, 0xe7, 0x09, 0x1f, 0x31, 0x20, 0x15, 0x66, 0x8f, - 0x0a, 0x80, 0xbe, 0x5b, 0x56, 0xca, 0x23, 0xfa, 0x41, 0x11, 0xd1, 0x6f, 0x97, 0x64, 0x4b, 0x90, - 0xfe, 0xa8, 0x00, 0xe9, 0xe5, 0x83, 0x0b, 0x98, 0xfe, 0xac, 0x02, 0xd3, 0xcb, 0xd7, 0x5f, 0x03, - 0xea, 0xcf, 0x2a, 0x40, 0x7d, 0x70, 0xed, 0x5b, 0x95, 0xa8, 0x7e, 0x50, 0x44, 0xf5, 0xb2, 0x39, - 0x25, 0x58, 0xff, 0x51, 0x15, 0xac, 0xdf, 0x2b, 0xe9, 0xac, 0xc5, 0xf5, 0x0f, 0xaf, 0xe1, 0xfa, - 0xdd, 0x92, 0x6a, 0x05, 0xb0, 0x3f, 0x2b, 0x00, 0x3b, 0x54, 0xda, 0xb6, 0x06, 0xd9, 0x9f, 0x5c, - 0x47, 0xf6, 0xbd, 0xf2, 0x4f, 0x5b, 0x05, 0xed, 0xa3, 0x12, 0xb4, 0xdf, 0x29, 0xdf, 0x72, 0x2d, - 0xb6, 0x3f, 0xc2, 0x7c, 0x2f, 0x45, 0x1a, 0x62, 0x83, 0x88, 0xa2, 0x20, 0x8a, 0xc1, 0x57, 0x13, - 0xe6, 0x3e, 0x22, 0x50, 0x16, 0x5f, 0xef, 0xa8, 0x03, 0x14, 0xf4, 0xb9, 0xe8, 0x32, 0xff, 0x50, - 0xcb, 0x74, 0xa9, 0x14, 0xe4, 0xd1, 0xcb, 0x88, 0xd1, 0x2b, 0x57, 0x1e, 0xea, 0x85, 0xf2, 0xc0, - 0xbe, 0x0f, 0xb7, 0x16, 0x5c, 0x2a, 0xed, 0x97, 0x49, 0x01, 0xce, 0x7a, 0xc8, 0xd0, 0x0e, 0xd1, - 0xb8, 0xf6, 0x01, 0xec, 0xe6, 0x64, 0x11, 0x5a, 0x09, 0xba, 0x9a, 0x94, 0xbc, 0xfd, 0x54, 0xfa, - 0x38, 0x0c, 0xc7, 0x5c, 0xce, 0xcd, 0x9f, 0x67, 0xf6, 0x67, 0xa5, 0x87, 0x41, 0x73, 0x16, 0xd8, - 0xda, 0xac, 0x6d, 0x8b, 0xd6, 0x58, 0x8e, 0x16, 0x81, 0x43, 0x5f, 0x35, 0x2c, 0x5c, 0xa2, 0x54, - 0x9a, 0x29, 0x86, 0x4e, 0x09, 0xf3, 0xf7, 0xb5, 0xec, 0xbc, 0xac, 0x1a, 0x55, 0x95, 0x97, 0xda, - 0xff, 0x52, 0x5e, 0xea, 0x37, 0x2d, 0x2f, 0xe6, 0x9f, 0x6b, 0xd9, 0x6f, 0x91, 0x16, 0x8e, 0x6f, - 0x67, 0x1c, 0x86, 0x85, 0xeb, 0xdb, 0x62, 0x45, 0xa9, 0xde, 0xb0, 0x34, 0x91, 0xd4, 0xe9, 0x36, - 0x39, 0xb8, 0x58, 0xa7, 0x3b, 0xb4, 0xa7, 0x89, 0xb8, 0xe0, 0x04, 0x17, 0x94, 0x83, 0x5b, 0x96, - 0x26, 0x72, 0xb8, 0x69, 0x14, 0x70, 0xf3, 0x1c, 0xd8, 0xf5, 0xec, 0x64, 0x1f, 0x43, 0x53, 0x71, - 0x07, 0x9d, 0x87, 0xf6, 0xef, 0x1c, 0xea, 0xae, 0xf7, 0xf0, 0x8b, 0x57, 0xe7, 0xdc, 0x8d, 0x4e, - 0xee, 0xa2, 0xf5, 0xff, 0x7a, 0x7b, 0x7f, 0x07, 0x65, 0x0e, 0x02, 0xcf, 0x55, 0xc2, 0x0b, 0xd5, - 0x95, 0x45, 0x3a, 0xe6, 0xbf, 0x6b, 0x88, 0xda, 0x85, 0xac, 0xad, 0xf4, 0x45, 0x12, 0x9a, 0xf5, - 0x5c, 0x61, 0xbd, 0x99, 0x7f, 0xbe, 0x03, 0xe0, 0x70, 0x39, 0xf9, 0x9a, 0xfb, 0x4a, 0xd8, 0xb1, - 0x93, 0x0c, 0x87, 0xcb, 0x5f, 0xd3, 0x06, 0xf6, 0x1f, 0xc8, 0x5e, 0x4a, 0x61, 0x93, 0xb7, 0x1a, - 0x56, 0xc7, 0xe1, 0xf2, 0x4b, 0x29, 0xec, 0xd4, 0xae, 0xce, 0x7f, 0x6f, 0x17, 0xdb, 0x87, 0xc6, - 0x85, 0x10, 0x31, 0xb2, 0xf5, 0x53, 0xd5, 0xb3, 0x27, 0x1f, 0x91, 0xb2, 0x0e, 0x09, 0x14, 0x31, - 0x7f, 0x5b, 0xcf, 0x82, 0x33, 0x2b, 0x6e, 0xff, 0x5f, 0x3e, 0xf8, 0x07, 0x75, 0x8b, 0x45, 0x28, - 0x65, 0xa7, 0x70, 0x2b, 0x4d, 0x99, 0xc9, 0x32, 0xb4, 0x39, 0x76, 0x61, 0xb5, 0x77, 0xe6, 0x58, - 0x3f, 0x55, 0xf8, 0x52, 0xcb, 0xb3, 0x5f, 0xc0, 0x5e, 0x29, 0xc9, 0xd3, 0xa3, 0xea, 0xef, 0xcc, - 0xf5, 0x3b, 0xc5, 0x5c, 0x4f, 0xce, 0x4b, 0xfc, 0xd1, 0xf8, 0x16, 0xb1, 0xfe, 0x5d, 0x6c, 0x73, - 0xf2, 0xd0, 0x5f, 0xf5, 0x8b, 0x9a, 0x7f, 0xac, 0x41, 0xaf, 0x74, 0x19, 0x36, 0x02, 0xd0, 0xc8, - 0x29, 0xdd, 0x37, 0x22, 0x06, 0xa9, 0xc4, 0x07, 0xe4, 0xac, 0x17, 0xee, 0x1b, 0x61, 0x19, 0xd3, - 0x64, 0xc9, 0x1e, 0x42, 0x47, 0xad, 0xb4, 0x74, 0xb1, 0x11, 0x7c, 0xb9, 0x22, 0xd1, 0xb6, 0xa2, - 0xff, 0xec, 0x31, 0x6c, 0xe9, 0x83, 0x9d, 0x40, 0x4a, 0x37, 0x8c, 0x9b, 0x11, 0x96, 0x3f, 0xfa, - 0x73, 0xe2, 0x58, 0x9b, 0xd3, 0x8c, 0x30, 0x7f, 0x03, 0x46, 0xfa, 0x59, 0xf6, 0x1e, 0x18, 0x1e, - 0x5f, 0xc5, 0x5d, 0x32, 0xde, 0xad, 0x65, 0x75, 0x3d, 0xbe, 0xa2, 0x06, 0x99, 0xed, 0x41, 0x07, - 0x99, 0x6a, 0xa5, 0xfd, 0xdd, 0xb2, 0xda, 0x1e, 0x5f, 0xbd, 0x5c, 0xa5, 0x0c, 0x87, 0xcb, 0xa4, - 0x05, 0xf6, 0xf8, 0xea, 0x73, 0x2e, 0xcd, 0x4f, 0xa1, 0xad, 0x2f, 0x79, 0xa3, 0x83, 0x51, 0xbf, - 0x5e, 0xd0, 0xff, 0x09, 0x6c, 0xe6, 0xee, 0xcd, 0x7e, 0x08, 0x77, 0xb4, 0x85, 0x21, 0x8f, 0x14, - 0x79, 0xa4, 0x70, 0x20, 0x23, 0xe6, 0x39, 0x8f, 0x14, 0x7e, 0x52, 0x37, 0xf5, 0xbf, 0xab, 0x43, - 0x5b, 0x37, 0xcc, 0xec, 0x61, 0x6e, 0x3a, 0xa1, 0xaa, 0x78, 0xb2, 0xf9, 0xf7, 0xb7, 0xf7, 0x3b, - 0x54, 0x40, 0xce, 0x3e, 0xcb, 0x46, 0x95, 0x0c, 0x30, 0xeb, 0x85, 0x7e, 0x3e, 0x99, 0x78, 0x1a, - 0xb9, 0x89, 0x67, 0x0f, 0x3a, 0xfe, 0xd2, 0x23, 0x97, 0x34, 0xb5, 0x4b, 0xfc, 0xa5, 0x87, 0x2e, - 0x79, 0x0f, 0x0c, 0x15, 0x28, 0xbe, 0x20, 0x96, 0x4e, 0xd2, 0x2e, 0x6d, 0x20, 0xf3, 0x21, 0xf4, - 0xf2, 0xd5, 0x16, 0xab, 0xa7, 0x06, 0xf7, 0xed, 0xac, 0xd6, 0xe2, 0x04, 0x70, 0x0f, 0xba, 0x69, - 0x79, 0xd5, 0x48, 0xdf, 0xe1, 0xba, 0xaa, 0xe2, 0x3c, 0x1c, 0x46, 0x41, 0x18, 0x48, 0x11, 0xa5, - 0x49, 0x59, 0x9d, 0x47, 0xa9, 0x9c, 0xe9, 0x82, 0x91, 0x32, 0xb1, 0x17, 0xe0, 0xb6, 0x1d, 0x09, - 0x29, 0xe3, 0xb6, 0x3b, 0x21, 0xd9, 0x01, 0x74, 0xc2, 0xe5, 0x74, 0x82, 0x25, 0xa7, 0x18, 0x6f, - 0xe7, 0xcb, 0xe9, 0x17, 0xe2, 0x2a, 0x19, 0x3c, 0x42, 0xa2, 0xa8, 0xe8, 0x04, 0x5f, 0x8b, 0x28, - 0x76, 0x8b, 0x26, 0x4c, 0x05, 0xfd, 0xf2, 0xd4, 0xc1, 0x3e, 0x02, 0x23, 0x4d, 0xe9, 0x52, 0xdc, - 0x97, 0xef, 0x9c, 0x09, 0x62, 0x67, 0x22, 0x5d, 0xc7, 0x17, 0xf6, 0x24, 0x73, 0x19, 0xdd, 0xab, - 0x6b, 0xf5, 0x34, 0xe3, 0x67, 0x89, 0xcf, 0xcc, 0x1f, 0x40, 0x5b, 0xdf, 0x91, 0x7e, 0xab, 0xab, - 0x30, 0x69, 0x9b, 0x68, 0x5d, 0x99, 0xa0, 0x7f, 0xaa, 0x41, 0x37, 0x99, 0x6a, 0x2a, 0x95, 0x0a, - 0x97, 0xae, 0xdf, 0xf4, 0xd2, 0xeb, 0x46, 0xc2, 0x24, 0x84, 0x9a, 0xb9, 0x10, 0x3a, 0x00, 0xa6, - 0x23, 0xe5, 0x32, 0x50, 0xae, 0xef, 0x4c, 0xb4, 0x37, 0x75, 0xc8, 0xf4, 0x89, 0xf3, 0x8a, 0x18, - 0xe7, 0xb8, 0x7f, 0xf4, 0x4d, 0x0b, 0x7a, 0xc7, 0x27, 0xa7, 0x67, 0xc7, 0x61, 0xb8, 0x70, 0x67, - 0x9c, 0x9a, 0xa9, 0x11, 0x34, 0xa9, 0x5d, 0xac, 0x78, 0x74, 0x1a, 0x56, 0xcd, 0x2d, 0xec, 0x08, - 0x5a, 0xd4, 0x35, 0xb2, 0xaa, 0xb7, 0xa7, 0x61, 0xe5, 0xf8, 0x82, 0x1f, 0xd1, 0x7d, 0xe5, 0xf5, - 0x27, 0xa8, 0x61, 0xd5, 0x0c, 0xc3, 0x3e, 0x05, 0x23, 0xeb, 0xf7, 0xd6, 0x3d, 0x44, 0x0d, 0xd7, - 0x4e, 0x33, 0xa8, 0x9f, 0x95, 0xd0, 0x75, 0xcf, 0x36, 0xc3, 0xb5, 0x6d, 0x3f, 0x7b, 0x0a, 0x9d, - 0xa4, 0x09, 0xa9, 0x7e, 0x2a, 0x1a, 0xae, 0x99, 0x34, 0xd0, 0x3d, 0xba, 0x91, 0xab, 0x7a, 0xcf, - 0x1a, 0x56, 0x8e, 0x43, 0xec, 0x31, 0xb4, 0xe3, 0x3a, 0x50, 0xf9, 0xe8, 0x33, 0xac, 0x9e, 0x17, - 0xd0, 0xc8, 0xac, 0x89, 0x5d, 0xf7, 0xe6, 0x36, 0x5c, 0x3b, 0xb7, 0xb1, 0x63, 0x80, 0x5c, 0xf3, - 0xb6, 0xf6, 0x31, 0x6d, 0xb8, 0x7e, 0x1e, 0x63, 0x9f, 0x40, 0x37, 0x9b, 0xb1, 0xab, 0x1f, 0xb9, - 0x86, 0xeb, 0x46, 0xa4, 0x69, 0x9b, 0x1e, 0x42, 0x3f, 0xfc, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, - 0x76, 0x56, 0x8a, 0x69, 0x84, 0x15, 0x00, 0x00, + 0x46, 0x5e, 0x07, 0xc8, 0x85, 0x68, 0x72, 0x5a, 0xc3, 0x81, 0xc9, 0x99, 0xd9, 0xe9, 0xa6, 0x96, + 0xf2, 0x2d, 0xf7, 0x45, 0xae, 0x39, 0xe7, 0x1c, 0x20, 0xb7, 0xfc, 0x85, 0x20, 0x7f, 0x22, 0x3e, + 0x24, 0x39, 0xe5, 0x4f, 0x24, 0xa8, 0xea, 0x79, 0x73, 0x68, 0x28, 0x9b, 0x63, 0x2e, 0x52, 0x57, + 0x57, 0x55, 0x4f, 0x57, 0xb1, 0xea, 0xab, 0xaa, 0x86, 0x3b, 0xea, 0x26, 0x10, 0x72, 0x40, 0x7f, + 0x8f, 0x82, 0xd0, 0x57, 0x3e, 0x6b, 0x10, 0xd1, 0xff, 0xc0, 0x71, 0xd5, 0x74, 0x31, 0x3e, 0x9a, + 0xf8, 0xf3, 0x81, 0xe3, 0x3b, 0xfe, 0x80, 0xb8, 0xe3, 0xc5, 0x15, 0x51, 0x44, 0xd0, 0x4a, 0x6b, + 0xf5, 0x07, 0x19, 0x71, 0x25, 0x3c, 0x5b, 0x84, 0x73, 0xd7, 0x53, 0x03, 0x35, 0x9f, 0xb9, 0x63, + 0x39, 0x98, 0xf8, 0xf3, 0xb9, 0xef, 0x65, 0x3f, 0x63, 0xfe, 0xa5, 0x0e, 0x2d, 0x4b, 0x7c, 0xb5, + 0x10, 0x52, 0xb1, 0x03, 0xa8, 0x8b, 0xc9, 0xd4, 0xef, 0x55, 0xf7, 0x2b, 0x07, 0x9b, 0xc7, 0xec, + 0x48, 0xcb, 0x45, 0xdc, 0x17, 0x93, 0xa9, 0x3f, 0xdc, 0xb0, 0x48, 0x82, 0xbd, 0x0f, 0x8d, 0xab, + 0xd9, 0x42, 0x4e, 0x7b, 0x35, 0x12, 0xdd, 0xcd, 0x8b, 0xfe, 0x14, 0x59, 0xc3, 0x0d, 0x4b, 0xcb, + 0xe0, 0xb1, 0xae, 0x77, 0xe5, 0xf7, 0xea, 0x65, 0xc7, 0x9e, 0x7b, 0x57, 0x74, 0x2c, 0x4a, 0xb0, + 0x67, 0x00, 0x52, 0xa8, 0x91, 0x1f, 0x28, 0xd7, 0xf7, 0x7a, 0x0d, 0x92, 0xdf, 0xcb, 0xcb, 0x5f, + 0x0a, 0xf5, 0x4b, 0x62, 0x0f, 0x37, 0x2c, 0x43, 0xc6, 0x04, 0x6a, 0xba, 0x9e, 0xab, 0x46, 0x93, + 0x29, 0x77, 0xbd, 0x5e, 0xb3, 0x4c, 0xf3, 0xdc, 0x73, 0xd5, 0x19, 0xb2, 0x51, 0xd3, 0x8d, 0x09, + 0x34, 0xe5, 0xab, 0x85, 0x08, 0x6f, 0x7a, 0xad, 0x32, 0x53, 0x7e, 0x85, 0x2c, 0x34, 0x85, 0x64, + 0xd8, 0x27, 0xb0, 0x39, 0x16, 0x8e, 0xeb, 0x8d, 0xc6, 0x33, 0x7f, 0xf2, 0xba, 0xd7, 0x26, 0x95, + 0x5e, 0x5e, 0xe5, 0x14, 0x05, 0x4e, 0x91, 0x3f, 0xdc, 0xb0, 0x60, 0x9c, 0x50, 0xec, 0x18, 0xda, + 0x93, 0xa9, 0x98, 0xbc, 0x1e, 0xa9, 0x65, 0xcf, 0x20, 0xcd, 0x7b, 0x79, 0xcd, 0x33, 0xe4, 0xbe, + 0x5c, 0x0e, 0x37, 0xac, 0xd6, 0x44, 0x2f, 0xd1, 0x2e, 0x5b, 0xcc, 0xdc, 0x6b, 0x11, 0xa2, 0xd6, + 0x6e, 0x99, 0x5d, 0x9f, 0x69, 0x3e, 0xe9, 0x19, 0x76, 0x4c, 0xb0, 0x27, 0x60, 0x08, 0xcf, 0x8e, + 0x2e, 0xba, 0x49, 0x8a, 0xf7, 0x0b, 0xbf, 0xa8, 0x67, 0xc7, 0xd7, 0x6c, 0x8b, 0x68, 0xcd, 0x8e, + 0xa0, 0x89, 0x51, 0xe2, 0xaa, 0xde, 0x16, 0xe9, 0xdc, 0x2d, 0x5c, 0x91, 0x78, 0xc3, 0x0d, 0x2b, + 0x92, 0x3a, 0x6d, 0x41, 0xe3, 0x9a, 0xcf, 0x16, 0xc2, 0xfc, 0x1e, 0x6c, 0x66, 0x22, 0x85, 0xf5, + 0xa0, 0x35, 0x17, 0x52, 0x72, 0x47, 0xf4, 0x2a, 0xfb, 0x95, 0x03, 0xc3, 0x8a, 0x49, 0x73, 0x07, + 0xb6, 0xb2, 0x71, 0x92, 0x51, 0xc4, 0x58, 0x40, 0xc5, 0x6b, 0x11, 0x4a, 0x0c, 0x80, 0x48, 0x31, + 0x22, 0xcd, 0x8f, 0xa1, 0x5b, 0x0c, 0x02, 0xd6, 0x85, 0xda, 0x6b, 0x71, 0x13, 0x49, 0xe2, 0x92, + 0xdd, 0x8d, 0x2e, 0x44, 0x51, 0x6c, 0x58, 0xd1, 0xed, 0xfe, 0x59, 0x49, 0x94, 0x93, 0x38, 0x60, + 0x0c, 0xea, 0xca, 0x9d, 0xeb, 0x0b, 0xd6, 0x2c, 0x5a, 0xb3, 0x07, 0xf8, 0x23, 0x71, 0xd7, 0x1b, + 0xb9, 0x76, 0x74, 0x42, 0x8b, 0xe8, 0x73, 0x9b, 0x9d, 0x40, 0x77, 0xe2, 0x7b, 0x52, 0x78, 0x72, + 0x21, 0x47, 0x01, 0x0f, 0xf9, 0x5c, 0x46, 0xf1, 0x1f, 0x3b, 0xf6, 0x2c, 0x66, 0x5f, 0x10, 0xd7, + 0xea, 0x4c, 0xf2, 0x1b, 0xec, 0x29, 0xc0, 0x35, 0x9f, 0xb9, 0x36, 0x57, 0x7e, 0x28, 0x7b, 0xf5, + 0xfd, 0xda, 0xc1, 0xe6, 0x71, 0x37, 0x52, 0x7e, 0x15, 0x33, 0x4e, 0xeb, 0x7f, 0x7d, 0xfb, 0x70, + 0xc3, 0xca, 0x48, 0xb2, 0x47, 0xd0, 0xe1, 0x41, 0x30, 0x92, 0x8a, 0x2b, 0x31, 0x1a, 0xdf, 0x28, + 0x21, 0x29, 0x3b, 0xb6, 0xac, 0x6d, 0x1e, 0x04, 0x97, 0xb8, 0x7b, 0x8a, 0x9b, 0xa6, 0x9d, 0xf8, + 0x96, 0x02, 0x17, 0x2d, 0xb4, 0xb9, 0xe2, 0x64, 0xe1, 0x96, 0x45, 0x6b, 0xdc, 0x0b, 0xb8, 0x9a, + 0x46, 0xd6, 0xd1, 0x9a, 0xdd, 0x87, 0xe6, 0x54, 0xb8, 0xce, 0x54, 0x91, 0x41, 0x35, 0x2b, 0xa2, + 0xd0, 0x99, 0x41, 0xe8, 0x5f, 0x0b, 0xca, 0xdd, 0xb6, 0xa5, 0x09, 0xf3, 0x6f, 0x15, 0xb8, 0xb3, + 0x12, 0xec, 0x78, 0xee, 0x94, 0xcb, 0x69, 0xfc, 0x2d, 0x5c, 0xb3, 0xf7, 0xf1, 0x5c, 0x6e, 0x8b, + 0x30, 0xc2, 0x94, 0xed, 0xc8, 0xd6, 0x21, 0x6d, 0x46, 0x86, 0x46, 0x22, 0xec, 0xc7, 0x39, 0xe7, + 0xd4, 0xc8, 0x39, 0x71, 0xac, 0x5f, 0xba, 0x8e, 0xe7, 0x7a, 0xce, 0xbb, 0x7c, 0x34, 0x84, 0xbb, + 0xe3, 0x9b, 0x37, 0xdc, 0x53, 0xae, 0x27, 0x46, 0x2b, 0x5e, 0xee, 0x44, 0x07, 0xbd, 0xb8, 0x76, + 0x6d, 0xe1, 0x4d, 0x44, 0x74, 0xc0, 0x6e, 0xa2, 0x92, 0x1c, 0x2d, 0xcd, 0x7d, 0xd8, 0xc9, 0x67, + 0x24, 0xdb, 0x81, 0xaa, 0x5a, 0x46, 0x96, 0x55, 0xd5, 0xd2, 0x34, 0x93, 0x68, 0x4a, 0xb2, 0x6f, + 0x45, 0xe6, 0x31, 0x74, 0x0a, 0x89, 0x96, 0x71, 0x73, 0x25, 0xeb, 0x66, 0xb3, 0x03, 0xdb, 0xb9, + 0xfc, 0x32, 0xbf, 0x69, 0x40, 0xdb, 0x12, 0x32, 0xc0, 0xf0, 0x61, 0xcf, 0xc0, 0x10, 0xcb, 0x89, + 0xd0, 0xa0, 0x58, 0x29, 0x40, 0x8e, 0x96, 0x79, 0x11, 0xf3, 0x11, 0x03, 0x12, 0x61, 0xf6, 0x38, + 0x07, 0xe8, 0xbb, 0x45, 0xa5, 0x2c, 0xa2, 0x1f, 0xe6, 0x11, 0xfd, 0x6e, 0x41, 0xb6, 0x00, 0xe9, + 0x8f, 0x73, 0x90, 0x5e, 0x3c, 0x38, 0x87, 0xe9, 0xcf, 0x4b, 0x30, 0xbd, 0x78, 0xfd, 0x35, 0xa0, + 0xfe, 0xbc, 0x04, 0xd4, 0x7b, 0x2b, 0xdf, 0x2a, 0x45, 0xf5, 0xc3, 0x3c, 0xaa, 0x17, 0xcd, 0x29, + 0xc0, 0xfa, 0x8f, 0xca, 0x60, 0xfd, 0x41, 0x41, 0x67, 0x2d, 0xae, 0x7f, 0xb8, 0x82, 0xeb, 0xf7, + 0x0b, 0xaa, 0x25, 0xc0, 0xfe, 0x3c, 0x07, 0xec, 0x50, 0x6a, 0xdb, 0x1a, 0x64, 0x7f, 0xba, 0x8a, + 0xec, 0x7b, 0xc5, 0x9f, 0xb6, 0x0c, 0xda, 0x07, 0x05, 0x68, 0xbf, 0x57, 0xbc, 0xe5, 0x5a, 0x6c, + 0x7f, 0x8c, 0xf9, 0x5e, 0x88, 0x34, 0xc4, 0x06, 0x11, 0x86, 0x7e, 0x18, 0x81, 0xaf, 0x26, 0xcc, + 0x03, 0x44, 0xa0, 0x34, 0xbe, 0xde, 0x51, 0x07, 0x28, 0xe8, 0x33, 0xd1, 0x65, 0xfe, 0xbe, 0x92, + 0xea, 0x52, 0x29, 0xc8, 0xa2, 0x97, 0x11, 0xa1, 0x57, 0xa6, 0x3c, 0x54, 0x73, 0xe5, 0x81, 0x7d, + 0x1f, 0xee, 0xcc, 0xb8, 0x54, 0xda, 0x2f, 0xa3, 0x1c, 0x9c, 0x75, 0x90, 0xa1, 0x1d, 0xa2, 0x71, + 0xed, 0x03, 0xd8, 0xcd, 0xc8, 0x22, 0xb4, 0x12, 0x74, 0xd5, 0x29, 0x79, 0xbb, 0x89, 0xf4, 0x49, + 0x10, 0x0c, 0xb9, 0x9c, 0x9a, 0x3f, 0x4f, 0xed, 0x4f, 0x4b, 0x0f, 0x83, 0xfa, 0xc4, 0xb7, 0xb5, + 0x59, 0xdb, 0x16, 0xad, 0xb1, 0x1c, 0xcd, 0x7c, 0x87, 0xbe, 0x6a, 0x58, 0xb8, 0x44, 0xa9, 0x24, + 0x53, 0x0c, 0x9d, 0x12, 0xe6, 0xef, 0x2a, 0xe9, 0x79, 0x69, 0x35, 0x2a, 0x2b, 0x2f, 0x95, 0xff, + 0xa5, 0xbc, 0x54, 0x6f, 0x5b, 0x5e, 0xcc, 0x3f, 0x57, 0xd2, 0xdf, 0x22, 0x29, 0x1c, 0xdf, 0xce, + 0x38, 0x0c, 0x0b, 0xd7, 0xb3, 0xc5, 0x92, 0x52, 0xbd, 0x66, 0x69, 0x22, 0xae, 0xd3, 0x4d, 0x72, + 0x70, 0xbe, 0x4e, 0xb7, 0x68, 0x4f, 0x13, 0x51, 0xc1, 0xf1, 0xaf, 0x28, 0x07, 0xb7, 0x2c, 0x4d, + 0x64, 0x70, 0xd3, 0xc8, 0xe1, 0xe6, 0x05, 0xb0, 0xd5, 0xec, 0x64, 0x1f, 0x43, 0x5d, 0x71, 0x07, + 0x9d, 0x87, 0xf6, 0xef, 0x1c, 0xe9, 0xae, 0xf7, 0xe8, 0x8b, 0x57, 0x17, 0xdc, 0x0d, 0x4f, 0xef, + 0xa3, 0xf5, 0xff, 0x7a, 0xfb, 0x70, 0x07, 0x65, 0x0e, 0xfd, 0xb9, 0xab, 0xc4, 0x3c, 0x50, 0x37, + 0x16, 0xe9, 0x98, 0xff, 0xae, 0x20, 0x6a, 0xe7, 0xb2, 0xb6, 0xd4, 0x17, 0x71, 0x68, 0x56, 0x33, + 0x85, 0xf5, 0x76, 0xfe, 0xf9, 0x0e, 0x80, 0xc3, 0xe5, 0xe8, 0x6b, 0xee, 0x29, 0x61, 0x47, 0x4e, + 0x32, 0x1c, 0x2e, 0x7f, 0x4d, 0x1b, 0xd8, 0x7f, 0x20, 0x7b, 0x21, 0x85, 0x4d, 0xde, 0xaa, 0x59, + 0x2d, 0x87, 0xcb, 0x2f, 0xa5, 0xb0, 0x13, 0xbb, 0x5a, 0xff, 0xbd, 0x5d, 0xec, 0x00, 0x6a, 0x57, + 0x42, 0x44, 0xc8, 0xd6, 0x4d, 0x54, 0xcf, 0x9f, 0x7e, 0x44, 0xca, 0x3a, 0x24, 0x50, 0xc4, 0xfc, + 0x6d, 0x35, 0x0d, 0xce, 0xb4, 0xb8, 0xfd, 0x7f, 0xf9, 0xe0, 0x1f, 0xd4, 0x2d, 0xe6, 0xa1, 0x94, + 0x9d, 0xc1, 0x9d, 0x24, 0x65, 0x46, 0x8b, 0xc0, 0xe6, 0xd8, 0x85, 0x55, 0xde, 0x99, 0x63, 0xdd, + 0x44, 0xe1, 0x4b, 0x2d, 0xcf, 0x7e, 0x01, 0x7b, 0x85, 0x24, 0x4f, 0x8e, 0xaa, 0xbe, 0x33, 0xd7, + 0xef, 0xe5, 0x73, 0x3d, 0x3e, 0x2f, 0xf6, 0x47, 0xed, 0x5b, 0xc4, 0xfa, 0x77, 0xb1, 0xcd, 0xc9, + 0x42, 0x7f, 0xd9, 0x2f, 0x6a, 0xfe, 0xa1, 0x02, 0x9d, 0xc2, 0x65, 0xd8, 0x00, 0x40, 0x23, 0xa7, + 0x74, 0xdf, 0x88, 0x08, 0xa4, 0x62, 0x1f, 0x90, 0xb3, 0x2e, 0xdd, 0x37, 0xc2, 0x32, 0xc6, 0xf1, + 0x92, 0x3d, 0x82, 0x96, 0x5a, 0x6a, 0xe9, 0x7c, 0x23, 0xf8, 0x72, 0x49, 0xa2, 0x4d, 0x45, 0xff, + 0xd9, 0x13, 0xd8, 0xd2, 0x07, 0x3b, 0xbe, 0x94, 0x6e, 0x10, 0x35, 0x23, 0x2c, 0x7b, 0xf4, 0xe7, + 0xc4, 0xb1, 0x36, 0xc7, 0x29, 0x61, 0xfe, 0x06, 0x8c, 0xe4, 0xb3, 0xec, 0x3d, 0x30, 0xe6, 0x7c, + 0x19, 0x75, 0xc9, 0x78, 0xb7, 0x86, 0xd5, 0x9e, 0xf3, 0x25, 0x35, 0xc8, 0x6c, 0x0f, 0x5a, 0xc8, + 0x54, 0x4b, 0xed, 0xef, 0x86, 0xd5, 0x9c, 0xf3, 0xe5, 0xcb, 0x65, 0xc2, 0x70, 0xb8, 0x8c, 0x5b, + 0xe0, 0x39, 0x5f, 0x7e, 0xce, 0xa5, 0xf9, 0x29, 0x34, 0xf5, 0x25, 0x6f, 0x75, 0x30, 0xea, 0x57, + 0x73, 0xfa, 0x3f, 0x81, 0xcd, 0xcc, 0xbd, 0xd9, 0x0f, 0xe1, 0x9e, 0xb6, 0x30, 0xe0, 0xa1, 0x22, + 0x8f, 0xe4, 0x0e, 0x64, 0xc4, 0xbc, 0xe0, 0xa1, 0xc2, 0x4f, 0xea, 0xa6, 0xfe, 0x8f, 0x55, 0x68, + 0xea, 0x86, 0x99, 0x3d, 0xca, 0x4c, 0x27, 0x54, 0x15, 0x4f, 0x37, 0xff, 0xfe, 0xf6, 0x61, 0x8b, + 0x0a, 0xc8, 0xf9, 0x67, 0xe9, 0xa8, 0x92, 0x02, 0x66, 0x35, 0xd7, 0xcf, 0xc7, 0x13, 0x4f, 0x2d, + 0x33, 0xf1, 0xec, 0x41, 0xcb, 0x5b, 0xcc, 0xc9, 0x25, 0x75, 0xed, 0x12, 0x6f, 0x31, 0x47, 0x97, + 0xbc, 0x07, 0x86, 0xf2, 0x15, 0x9f, 0x11, 0x4b, 0x27, 0x69, 0x9b, 0x36, 0x90, 0xf9, 0x08, 0x3a, + 0xd9, 0x6a, 0x8b, 0xd5, 0x53, 0x83, 0xfb, 0x76, 0x5a, 0x6b, 0x71, 0x02, 0xd8, 0x87, 0xad, 0x6b, + 0x3e, 0x1b, 0x61, 0x0b, 0x48, 0x42, 0x1a, 0xed, 0xb1, 0xf8, 0x5c, 0x0a, 0x45, 0x12, 0x0f, 0xa0, + 0x9d, 0x14, 0x60, 0x8d, 0xfa, 0x2d, 0xae, 0xeb, 0x2e, 0x4e, 0xcc, 0x41, 0xe8, 0x07, 0xbe, 0x14, + 0x61, 0xd4, 0x59, 0xad, 0xcb, 0xb4, 0x44, 0xce, 0x74, 0xc1, 0x48, 0x98, 0xd8, 0x2d, 0x70, 0xdb, + 0x0e, 0x85, 0x94, 0x51, 0x63, 0x1e, 0x93, 0xec, 0x10, 0x5a, 0xc1, 0x62, 0x3c, 0xc2, 0xa2, 0x94, + 0x8f, 0xc8, 0x8b, 0xc5, 0xf8, 0x0b, 0x71, 0x13, 0x8f, 0x26, 0x01, 0x51, 0x54, 0x96, 0xfc, 0xaf, + 0x45, 0x18, 0x39, 0x4e, 0x13, 0xa6, 0x82, 0x6e, 0x71, 0x2e, 0x61, 0x1f, 0x81, 0x91, 0x24, 0x7d, + 0x21, 0x33, 0x8a, 0x77, 0x4e, 0x05, 0xb1, 0x77, 0x91, 0xae, 0xe3, 0x09, 0x7b, 0x94, 0x3a, 0x95, + 0xee, 0xd5, 0xb6, 0x3a, 0x9a, 0xf1, 0xb3, 0xd8, 0xab, 0xe6, 0x0f, 0xa0, 0xa9, 0xef, 0x48, 0xbf, + 0xe6, 0x4d, 0x10, 0x37, 0x56, 0xb4, 0x2e, 0x4d, 0xe1, 0x3f, 0x55, 0xa0, 0x1d, 0xcf, 0x3d, 0xa5, + 0x4a, 0xb9, 0x4b, 0x57, 0x6f, 0x7b, 0xe9, 0x75, 0x43, 0x63, 0x1c, 0x64, 0xf5, 0x4c, 0x90, 0x1d, + 0x02, 0xd3, 0xb1, 0x74, 0xed, 0x2b, 0xd7, 0x73, 0x46, 0xda, 0x9b, 0x3a, 0xa8, 0xba, 0xc4, 0x79, + 0x45, 0x8c, 0x0b, 0xdc, 0x3f, 0xfe, 0xa6, 0x01, 0x9d, 0x93, 0xd3, 0xb3, 0xf3, 0x93, 0x20, 0x98, + 0xb9, 0x13, 0x4e, 0xed, 0xd6, 0x00, 0xea, 0xd4, 0x50, 0x96, 0x3c, 0x4b, 0xf5, 0xcb, 0x26, 0x1b, + 0x76, 0x0c, 0x0d, 0xea, 0x2b, 0x59, 0xd9, 0xeb, 0x54, 0xbf, 0x74, 0xc0, 0xc1, 0x8f, 0xe8, 0xce, + 0x73, 0xf5, 0x91, 0xaa, 0x5f, 0x36, 0xe5, 0xb0, 0x4f, 0xc1, 0x48, 0x3b, 0xc2, 0x75, 0x4f, 0x55, + 0xfd, 0xb5, 0xf3, 0x0e, 0xea, 0xa7, 0x45, 0x76, 0xdd, 0xc3, 0x4e, 0x7f, 0xed, 0x60, 0xc0, 0x9e, + 0x41, 0x2b, 0x6e, 0x53, 0xca, 0x1f, 0x93, 0xfa, 0x6b, 0x66, 0x11, 0x74, 0x8f, 0x6e, 0xf5, 0xca, + 0x5e, 0xbc, 0xfa, 0xa5, 0x03, 0x13, 0x7b, 0x02, 0xcd, 0xa8, 0x52, 0x94, 0x3e, 0x0b, 0xf5, 0xcb, + 0x27, 0x0a, 0x34, 0x32, 0x6d, 0x73, 0xd7, 0xbd, 0xca, 0xf5, 0xd7, 0x4e, 0x76, 0xec, 0x04, 0x20, + 0xd3, 0xde, 0xad, 0x7d, 0x6e, 0xeb, 0xaf, 0x9f, 0xd8, 0xd8, 0x27, 0xd0, 0x4e, 0xa7, 0xf0, 0xf2, + 0x67, 0xb0, 0xfe, 0xba, 0x21, 0x6a, 0xdc, 0xa4, 0xa7, 0xd2, 0x0f, 0xff, 0x13, 0x00, 0x00, 0xff, + 0xff, 0x11, 0x05, 0x99, 0x2e, 0xa6, 0x15, 0x00, 0x00, } diff --git a/types/types.proto b/types/types.proto index 3d247266..a1c55375 100644 --- a/types/types.proto +++ b/types/types.proto @@ -231,10 +231,11 @@ message Header { // hashes bytes last_block_hash = 6; - bytes app_hash = 7; + bytes val_set_hash = 7; + bytes app_hash = 8; // consensus - Validator proposer = 8 [(gogoproto.nullable)=false]; + Validator proposer = 9 [(gogoproto.nullable)=false]; } // Validator From 72330e660975a03f6bf4503fbf2a506ea6cb0468 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Wed, 6 Jun 2018 00:17:18 -0700 Subject: [PATCH 38/40] val_set_hash -> validators_hash --- specification.md | 2 +- types/types.pb.go | 244 +++++++++++++++++++++++----------------------- types/types.proto | 2 +- 3 files changed, 124 insertions(+), 124 deletions(-) diff --git a/specification.md b/specification.md index 2b0179f1..25b9d7d0 100644 --- a/specification.md +++ b/specification.md @@ -269,7 +269,7 @@ See below for more details on the message types and how they are used. - `TotalTxs (int64)`: Total number of transactions in the blockchain until now - `LastBlockHash ([]byte)`: Hash of the previous (parent) block - - `ValSetHash ([]byte)`: Hash of the validator set for this block + - `ValidatorsHash ([]byte)`: Hash of the validator set for this block - `AppHash ([]byte)`: Data returned by the last call to `Commit` - typically the Merkle root of the application state after executing the previous block's transactions diff --git a/types/types.pb.go b/types/types.pb.go index 72de6b53..a6b806fe 100644 --- a/types/types.pb.go +++ b/types/types.pb.go @@ -1688,9 +1688,9 @@ type Header struct { NumTxs int32 `protobuf:"varint,4,opt,name=num_txs,json=numTxs,proto3" json:"num_txs,omitempty"` TotalTxs int64 `protobuf:"varint,5,opt,name=total_txs,json=totalTxs,proto3" json:"total_txs,omitempty"` // hashes - LastBlockHash []byte `protobuf:"bytes,6,opt,name=last_block_hash,json=lastBlockHash,proto3" json:"last_block_hash,omitempty"` - ValSetHash []byte `protobuf:"bytes,7,opt,name=val_set_hash,json=valSetHash,proto3" json:"val_set_hash,omitempty"` - AppHash []byte `protobuf:"bytes,8,opt,name=app_hash,json=appHash,proto3" json:"app_hash,omitempty"` + LastBlockHash []byte `protobuf:"bytes,6,opt,name=last_block_hash,json=lastBlockHash,proto3" json:"last_block_hash,omitempty"` + ValidatorsHash []byte `protobuf:"bytes,7,opt,name=validators_hash,json=validatorsHash,proto3" json:"validators_hash,omitempty"` + AppHash []byte `protobuf:"bytes,8,opt,name=app_hash,json=appHash,proto3" json:"app_hash,omitempty"` // consensus Proposer Validator `protobuf:"bytes,9,opt,name=proposer" json:"proposer"` } @@ -1742,9 +1742,9 @@ func (m *Header) GetLastBlockHash() []byte { return nil } -func (m *Header) GetValSetHash() []byte { +func (m *Header) GetValidatorsHash() []byte { if m != nil { - return m.ValSetHash + return m.ValidatorsHash } return nil } @@ -2335,121 +2335,121 @@ var _ABCIApplication_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("types/types.proto", fileDescriptorTypes) } var fileDescriptorTypes = []byte{ - // 1849 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0x4b, 0x6f, 0x1b, 0xc9, - 0x11, 0x16, 0xdf, 0x9c, 0xd2, 0x83, 0x74, 0xcb, 0xb6, 0x68, 0x2e, 0x02, 0x0b, 0x83, 0xc0, 0x91, - 0xb3, 0x5a, 0x31, 0xd1, 0xae, 0x0d, 0x7b, 0x37, 0x59, 0x44, 0xd2, 0x3a, 0x4b, 0x61, 0xf3, 0x50, - 0x46, 0x5e, 0x07, 0xc8, 0x85, 0x68, 0x72, 0x5a, 0xc3, 0x81, 0xc9, 0x99, 0xd9, 0xe9, 0xa6, 0x96, - 0xf2, 0x2d, 0xf7, 0x45, 0xae, 0x39, 0xe7, 0x1c, 0x20, 0xb7, 0xfc, 0x85, 0x20, 0x7f, 0x22, 0x3e, - 0x24, 0x39, 0xe5, 0x4f, 0x24, 0xa8, 0xea, 0x79, 0x73, 0x68, 0x28, 0x9b, 0x63, 0x2e, 0x52, 0x57, - 0x57, 0x55, 0x4f, 0x57, 0xb1, 0xea, 0xab, 0xaa, 0x86, 0x3b, 0xea, 0x26, 0x10, 0x72, 0x40, 0x7f, - 0x8f, 0x82, 0xd0, 0x57, 0x3e, 0x6b, 0x10, 0xd1, 0xff, 0xc0, 0x71, 0xd5, 0x74, 0x31, 0x3e, 0x9a, - 0xf8, 0xf3, 0x81, 0xe3, 0x3b, 0xfe, 0x80, 0xb8, 0xe3, 0xc5, 0x15, 0x51, 0x44, 0xd0, 0x4a, 0x6b, - 0xf5, 0x07, 0x19, 0x71, 0x25, 0x3c, 0x5b, 0x84, 0x73, 0xd7, 0x53, 0x03, 0x35, 0x9f, 0xb9, 0x63, - 0x39, 0x98, 0xf8, 0xf3, 0xb9, 0xef, 0x65, 0x3f, 0x63, 0xfe, 0xa5, 0x0e, 0x2d, 0x4b, 0x7c, 0xb5, - 0x10, 0x52, 0xb1, 0x03, 0xa8, 0x8b, 0xc9, 0xd4, 0xef, 0x55, 0xf7, 0x2b, 0x07, 0x9b, 0xc7, 0xec, - 0x48, 0xcb, 0x45, 0xdc, 0x17, 0x93, 0xa9, 0x3f, 0xdc, 0xb0, 0x48, 0x82, 0xbd, 0x0f, 0x8d, 0xab, - 0xd9, 0x42, 0x4e, 0x7b, 0x35, 0x12, 0xdd, 0xcd, 0x8b, 0xfe, 0x14, 0x59, 0xc3, 0x0d, 0x4b, 0xcb, - 0xe0, 0xb1, 0xae, 0x77, 0xe5, 0xf7, 0xea, 0x65, 0xc7, 0x9e, 0x7b, 0x57, 0x74, 0x2c, 0x4a, 0xb0, - 0x67, 0x00, 0x52, 0xa8, 0x91, 0x1f, 0x28, 0xd7, 0xf7, 0x7a, 0x0d, 0x92, 0xdf, 0xcb, 0xcb, 0x5f, - 0x0a, 0xf5, 0x4b, 0x62, 0x0f, 0x37, 0x2c, 0x43, 0xc6, 0x04, 0x6a, 0xba, 0x9e, 0xab, 0x46, 0x93, - 0x29, 0x77, 0xbd, 0x5e, 0xb3, 0x4c, 0xf3, 0xdc, 0x73, 0xd5, 0x19, 0xb2, 0x51, 0xd3, 0x8d, 0x09, - 0x34, 0xe5, 0xab, 0x85, 0x08, 0x6f, 0x7a, 0xad, 0x32, 0x53, 0x7e, 0x85, 0x2c, 0x34, 0x85, 0x64, - 0xd8, 0x27, 0xb0, 0x39, 0x16, 0x8e, 0xeb, 0x8d, 0xc6, 0x33, 0x7f, 0xf2, 0xba, 0xd7, 0x26, 0x95, - 0x5e, 0x5e, 0xe5, 0x14, 0x05, 0x4e, 0x91, 0x3f, 0xdc, 0xb0, 0x60, 0x9c, 0x50, 0xec, 0x18, 0xda, - 0x93, 0xa9, 0x98, 0xbc, 0x1e, 0xa9, 0x65, 0xcf, 0x20, 0xcd, 0x7b, 0x79, 0xcd, 0x33, 0xe4, 0xbe, - 0x5c, 0x0e, 0x37, 0xac, 0xd6, 0x44, 0x2f, 0xd1, 0x2e, 0x5b, 0xcc, 0xdc, 0x6b, 0x11, 0xa2, 0xd6, - 0x6e, 0x99, 0x5d, 0x9f, 0x69, 0x3e, 0xe9, 0x19, 0x76, 0x4c, 0xb0, 0x27, 0x60, 0x08, 0xcf, 0x8e, - 0x2e, 0xba, 0x49, 0x8a, 0xf7, 0x0b, 0xbf, 0xa8, 0x67, 0xc7, 0xd7, 0x6c, 0x8b, 0x68, 0xcd, 0x8e, - 0xa0, 0x89, 0x51, 0xe2, 0xaa, 0xde, 0x16, 0xe9, 0xdc, 0x2d, 0x5c, 0x91, 0x78, 0xc3, 0x0d, 0x2b, - 0x92, 0x3a, 0x6d, 0x41, 0xe3, 0x9a, 0xcf, 0x16, 0xc2, 0xfc, 0x1e, 0x6c, 0x66, 0x22, 0x85, 0xf5, - 0xa0, 0x35, 0x17, 0x52, 0x72, 0x47, 0xf4, 0x2a, 0xfb, 0x95, 0x03, 0xc3, 0x8a, 0x49, 0x73, 0x07, - 0xb6, 0xb2, 0x71, 0x92, 0x51, 0xc4, 0x58, 0x40, 0xc5, 0x6b, 0x11, 0x4a, 0x0c, 0x80, 0x48, 0x31, - 0x22, 0xcd, 0x8f, 0xa1, 0x5b, 0x0c, 0x02, 0xd6, 0x85, 0xda, 0x6b, 0x71, 0x13, 0x49, 0xe2, 0x92, - 0xdd, 0x8d, 0x2e, 0x44, 0x51, 0x6c, 0x58, 0xd1, 0xed, 0xfe, 0x59, 0x49, 0x94, 0x93, 0x38, 0x60, - 0x0c, 0xea, 0xca, 0x9d, 0xeb, 0x0b, 0xd6, 0x2c, 0x5a, 0xb3, 0x07, 0xf8, 0x23, 0x71, 0xd7, 0x1b, - 0xb9, 0x76, 0x74, 0x42, 0x8b, 0xe8, 0x73, 0x9b, 0x9d, 0x40, 0x77, 0xe2, 0x7b, 0x52, 0x78, 0x72, - 0x21, 0x47, 0x01, 0x0f, 0xf9, 0x5c, 0x46, 0xf1, 0x1f, 0x3b, 0xf6, 0x2c, 0x66, 0x5f, 0x10, 0xd7, - 0xea, 0x4c, 0xf2, 0x1b, 0xec, 0x29, 0xc0, 0x35, 0x9f, 0xb9, 0x36, 0x57, 0x7e, 0x28, 0x7b, 0xf5, - 0xfd, 0xda, 0xc1, 0xe6, 0x71, 0x37, 0x52, 0x7e, 0x15, 0x33, 0x4e, 0xeb, 0x7f, 0x7d, 0xfb, 0x70, - 0xc3, 0xca, 0x48, 0xb2, 0x47, 0xd0, 0xe1, 0x41, 0x30, 0x92, 0x8a, 0x2b, 0x31, 0x1a, 0xdf, 0x28, - 0x21, 0x29, 0x3b, 0xb6, 0xac, 0x6d, 0x1e, 0x04, 0x97, 0xb8, 0x7b, 0x8a, 0x9b, 0xa6, 0x9d, 0xf8, - 0x96, 0x02, 0x17, 0x2d, 0xb4, 0xb9, 0xe2, 0x64, 0xe1, 0x96, 0x45, 0x6b, 0xdc, 0x0b, 0xb8, 0x9a, - 0x46, 0xd6, 0xd1, 0x9a, 0xdd, 0x87, 0xe6, 0x54, 0xb8, 0xce, 0x54, 0x91, 0x41, 0x35, 0x2b, 0xa2, - 0xd0, 0x99, 0x41, 0xe8, 0x5f, 0x0b, 0xca, 0xdd, 0xb6, 0xa5, 0x09, 0xf3, 0x6f, 0x15, 0xb8, 0xb3, - 0x12, 0xec, 0x78, 0xee, 0x94, 0xcb, 0x69, 0xfc, 0x2d, 0x5c, 0xb3, 0xf7, 0xf1, 0x5c, 0x6e, 0x8b, - 0x30, 0xc2, 0x94, 0xed, 0xc8, 0xd6, 0x21, 0x6d, 0x46, 0x86, 0x46, 0x22, 0xec, 0xc7, 0x39, 0xe7, - 0xd4, 0xc8, 0x39, 0x71, 0xac, 0x5f, 0xba, 0x8e, 0xe7, 0x7a, 0xce, 0xbb, 0x7c, 0x34, 0x84, 0xbb, - 0xe3, 0x9b, 0x37, 0xdc, 0x53, 0xae, 0x27, 0x46, 0x2b, 0x5e, 0xee, 0x44, 0x07, 0xbd, 0xb8, 0x76, - 0x6d, 0xe1, 0x4d, 0x44, 0x74, 0xc0, 0x6e, 0xa2, 0x92, 0x1c, 0x2d, 0xcd, 0x7d, 0xd8, 0xc9, 0x67, - 0x24, 0xdb, 0x81, 0xaa, 0x5a, 0x46, 0x96, 0x55, 0xd5, 0xd2, 0x34, 0x93, 0x68, 0x4a, 0xb2, 0x6f, - 0x45, 0xe6, 0x31, 0x74, 0x0a, 0x89, 0x96, 0x71, 0x73, 0x25, 0xeb, 0x66, 0xb3, 0x03, 0xdb, 0xb9, - 0xfc, 0x32, 0xbf, 0x69, 0x40, 0xdb, 0x12, 0x32, 0xc0, 0xf0, 0x61, 0xcf, 0xc0, 0x10, 0xcb, 0x89, - 0xd0, 0xa0, 0x58, 0x29, 0x40, 0x8e, 0x96, 0x79, 0x11, 0xf3, 0x11, 0x03, 0x12, 0x61, 0xf6, 0x38, - 0x07, 0xe8, 0xbb, 0x45, 0xa5, 0x2c, 0xa2, 0x1f, 0xe6, 0x11, 0xfd, 0x6e, 0x41, 0xb6, 0x00, 0xe9, - 0x8f, 0x73, 0x90, 0x5e, 0x3c, 0x38, 0x87, 0xe9, 0xcf, 0x4b, 0x30, 0xbd, 0x78, 0xfd, 0x35, 0xa0, - 0xfe, 0xbc, 0x04, 0xd4, 0x7b, 0x2b, 0xdf, 0x2a, 0x45, 0xf5, 0xc3, 0x3c, 0xaa, 0x17, 0xcd, 0x29, - 0xc0, 0xfa, 0x8f, 0xca, 0x60, 0xfd, 0x41, 0x41, 0x67, 0x2d, 0xae, 0x7f, 0xb8, 0x82, 0xeb, 0xf7, - 0x0b, 0xaa, 0x25, 0xc0, 0xfe, 0x3c, 0x07, 0xec, 0x50, 0x6a, 0xdb, 0x1a, 0x64, 0x7f, 0xba, 0x8a, - 0xec, 0x7b, 0xc5, 0x9f, 0xb6, 0x0c, 0xda, 0x07, 0x05, 0x68, 0xbf, 0x57, 0xbc, 0xe5, 0x5a, 0x6c, - 0x7f, 0x8c, 0xf9, 0x5e, 0x88, 0x34, 0xc4, 0x06, 0x11, 0x86, 0x7e, 0x18, 0x81, 0xaf, 0x26, 0xcc, - 0x03, 0x44, 0xa0, 0x34, 0xbe, 0xde, 0x51, 0x07, 0x28, 0xe8, 0x33, 0xd1, 0x65, 0xfe, 0xbe, 0x92, - 0xea, 0x52, 0x29, 0xc8, 0xa2, 0x97, 0x11, 0xa1, 0x57, 0xa6, 0x3c, 0x54, 0x73, 0xe5, 0x81, 0x7d, - 0x1f, 0xee, 0xcc, 0xb8, 0x54, 0xda, 0x2f, 0xa3, 0x1c, 0x9c, 0x75, 0x90, 0xa1, 0x1d, 0xa2, 0x71, - 0xed, 0x03, 0xd8, 0xcd, 0xc8, 0x22, 0xb4, 0x12, 0x74, 0xd5, 0x29, 0x79, 0xbb, 0x89, 0xf4, 0x49, - 0x10, 0x0c, 0xb9, 0x9c, 0x9a, 0x3f, 0x4f, 0xed, 0x4f, 0x4b, 0x0f, 0x83, 0xfa, 0xc4, 0xb7, 0xb5, - 0x59, 0xdb, 0x16, 0xad, 0xb1, 0x1c, 0xcd, 0x7c, 0x87, 0xbe, 0x6a, 0x58, 0xb8, 0x44, 0xa9, 0x24, - 0x53, 0x0c, 0x9d, 0x12, 0xe6, 0xef, 0x2a, 0xe9, 0x79, 0x69, 0x35, 0x2a, 0x2b, 0x2f, 0x95, 0xff, - 0xa5, 0xbc, 0x54, 0x6f, 0x5b, 0x5e, 0xcc, 0x3f, 0x57, 0xd2, 0xdf, 0x22, 0x29, 0x1c, 0xdf, 0xce, - 0x38, 0x0c, 0x0b, 0xd7, 0xb3, 0xc5, 0x92, 0x52, 0xbd, 0x66, 0x69, 0x22, 0xae, 0xd3, 0x4d, 0x72, - 0x70, 0xbe, 0x4e, 0xb7, 0x68, 0x4f, 0x13, 0x51, 0xc1, 0xf1, 0xaf, 0x28, 0x07, 0xb7, 0x2c, 0x4d, - 0x64, 0x70, 0xd3, 0xc8, 0xe1, 0xe6, 0x05, 0xb0, 0xd5, 0xec, 0x64, 0x1f, 0x43, 0x5d, 0x71, 0x07, - 0x9d, 0x87, 0xf6, 0xef, 0x1c, 0xe9, 0xae, 0xf7, 0xe8, 0x8b, 0x57, 0x17, 0xdc, 0x0d, 0x4f, 0xef, - 0xa3, 0xf5, 0xff, 0x7a, 0xfb, 0x70, 0x07, 0x65, 0x0e, 0xfd, 0xb9, 0xab, 0xc4, 0x3c, 0x50, 0x37, - 0x16, 0xe9, 0x98, 0xff, 0xae, 0x20, 0x6a, 0xe7, 0xb2, 0xb6, 0xd4, 0x17, 0x71, 0x68, 0x56, 0x33, - 0x85, 0xf5, 0x76, 0xfe, 0xf9, 0x0e, 0x80, 0xc3, 0xe5, 0xe8, 0x6b, 0xee, 0x29, 0x61, 0x47, 0x4e, - 0x32, 0x1c, 0x2e, 0x7f, 0x4d, 0x1b, 0xd8, 0x7f, 0x20, 0x7b, 0x21, 0x85, 0x4d, 0xde, 0xaa, 0x59, - 0x2d, 0x87, 0xcb, 0x2f, 0xa5, 0xb0, 0x13, 0xbb, 0x5a, 0xff, 0xbd, 0x5d, 0xec, 0x00, 0x6a, 0x57, - 0x42, 0x44, 0xc8, 0xd6, 0x4d, 0x54, 0xcf, 0x9f, 0x7e, 0x44, 0xca, 0x3a, 0x24, 0x50, 0xc4, 0xfc, - 0x6d, 0x35, 0x0d, 0xce, 0xb4, 0xb8, 0xfd, 0x7f, 0xf9, 0xe0, 0x1f, 0xd4, 0x2d, 0xe6, 0xa1, 0x94, - 0x9d, 0xc1, 0x9d, 0x24, 0x65, 0x46, 0x8b, 0xc0, 0xe6, 0xd8, 0x85, 0x55, 0xde, 0x99, 0x63, 0xdd, - 0x44, 0xe1, 0x4b, 0x2d, 0xcf, 0x7e, 0x01, 0x7b, 0x85, 0x24, 0x4f, 0x8e, 0xaa, 0xbe, 0x33, 0xd7, - 0xef, 0xe5, 0x73, 0x3d, 0x3e, 0x2f, 0xf6, 0x47, 0xed, 0x5b, 0xc4, 0xfa, 0x77, 0xb1, 0xcd, 0xc9, - 0x42, 0x7f, 0xd9, 0x2f, 0x6a, 0xfe, 0xa1, 0x02, 0x9d, 0xc2, 0x65, 0xd8, 0x00, 0x40, 0x23, 0xa7, - 0x74, 0xdf, 0x88, 0x08, 0xa4, 0x62, 0x1f, 0x90, 0xb3, 0x2e, 0xdd, 0x37, 0xc2, 0x32, 0xc6, 0xf1, - 0x92, 0x3d, 0x82, 0x96, 0x5a, 0x6a, 0xe9, 0x7c, 0x23, 0xf8, 0x72, 0x49, 0xa2, 0x4d, 0x45, 0xff, - 0xd9, 0x13, 0xd8, 0xd2, 0x07, 0x3b, 0xbe, 0x94, 0x6e, 0x10, 0x35, 0x23, 0x2c, 0x7b, 0xf4, 0xe7, - 0xc4, 0xb1, 0x36, 0xc7, 0x29, 0x61, 0xfe, 0x06, 0x8c, 0xe4, 0xb3, 0xec, 0x3d, 0x30, 0xe6, 0x7c, - 0x19, 0x75, 0xc9, 0x78, 0xb7, 0x86, 0xd5, 0x9e, 0xf3, 0x25, 0x35, 0xc8, 0x6c, 0x0f, 0x5a, 0xc8, - 0x54, 0x4b, 0xed, 0xef, 0x86, 0xd5, 0x9c, 0xf3, 0xe5, 0xcb, 0x65, 0xc2, 0x70, 0xb8, 0x8c, 0x5b, - 0xe0, 0x39, 0x5f, 0x7e, 0xce, 0xa5, 0xf9, 0x29, 0x34, 0xf5, 0x25, 0x6f, 0x75, 0x30, 0xea, 0x57, - 0x73, 0xfa, 0x3f, 0x81, 0xcd, 0xcc, 0xbd, 0xd9, 0x0f, 0xe1, 0x9e, 0xb6, 0x30, 0xe0, 0xa1, 0x22, - 0x8f, 0xe4, 0x0e, 0x64, 0xc4, 0xbc, 0xe0, 0xa1, 0xc2, 0x4f, 0xea, 0xa6, 0xfe, 0x8f, 0x55, 0x68, - 0xea, 0x86, 0x99, 0x3d, 0xca, 0x4c, 0x27, 0x54, 0x15, 0x4f, 0x37, 0xff, 0xfe, 0xf6, 0x61, 0x8b, - 0x0a, 0xc8, 0xf9, 0x67, 0xe9, 0xa8, 0x92, 0x02, 0x66, 0x35, 0xd7, 0xcf, 0xc7, 0x13, 0x4f, 0x2d, - 0x33, 0xf1, 0xec, 0x41, 0xcb, 0x5b, 0xcc, 0xc9, 0x25, 0x75, 0xed, 0x12, 0x6f, 0x31, 0x47, 0x97, - 0xbc, 0x07, 0x86, 0xf2, 0x15, 0x9f, 0x11, 0x4b, 0x27, 0x69, 0x9b, 0x36, 0x90, 0xf9, 0x08, 0x3a, - 0xd9, 0x6a, 0x8b, 0xd5, 0x53, 0x83, 0xfb, 0x76, 0x5a, 0x6b, 0x71, 0x02, 0xd8, 0x87, 0xad, 0x6b, - 0x3e, 0x1b, 0x61, 0x0b, 0x48, 0x42, 0x1a, 0xed, 0xb1, 0xf8, 0x5c, 0x0a, 0x45, 0x12, 0x0f, 0xa0, - 0x9d, 0x14, 0x60, 0x8d, 0xfa, 0x2d, 0xae, 0xeb, 0x2e, 0x4e, 0xcc, 0x41, 0xe8, 0x07, 0xbe, 0x14, - 0x61, 0xd4, 0x59, 0xad, 0xcb, 0xb4, 0x44, 0xce, 0x74, 0xc1, 0x48, 0x98, 0xd8, 0x2d, 0x70, 0xdb, - 0x0e, 0x85, 0x94, 0x51, 0x63, 0x1e, 0x93, 0xec, 0x10, 0x5a, 0xc1, 0x62, 0x3c, 0xc2, 0xa2, 0x94, - 0x8f, 0xc8, 0x8b, 0xc5, 0xf8, 0x0b, 0x71, 0x13, 0x8f, 0x26, 0x01, 0x51, 0x54, 0x96, 0xfc, 0xaf, - 0x45, 0x18, 0x39, 0x4e, 0x13, 0xa6, 0x82, 0x6e, 0x71, 0x2e, 0x61, 0x1f, 0x81, 0x91, 0x24, 0x7d, - 0x21, 0x33, 0x8a, 0x77, 0x4e, 0x05, 0xb1, 0x77, 0x91, 0xae, 0xe3, 0x09, 0x7b, 0x94, 0x3a, 0x95, - 0xee, 0xd5, 0xb6, 0x3a, 0x9a, 0xf1, 0xb3, 0xd8, 0xab, 0xe6, 0x0f, 0xa0, 0xa9, 0xef, 0x48, 0xbf, - 0xe6, 0x4d, 0x10, 0x37, 0x56, 0xb4, 0x2e, 0x4d, 0xe1, 0x3f, 0x55, 0xa0, 0x1d, 0xcf, 0x3d, 0xa5, - 0x4a, 0xb9, 0x4b, 0x57, 0x6f, 0x7b, 0xe9, 0x75, 0x43, 0x63, 0x1c, 0x64, 0xf5, 0x4c, 0x90, 0x1d, - 0x02, 0xd3, 0xb1, 0x74, 0xed, 0x2b, 0xd7, 0x73, 0x46, 0xda, 0x9b, 0x3a, 0xa8, 0xba, 0xc4, 0x79, - 0x45, 0x8c, 0x0b, 0xdc, 0x3f, 0xfe, 0xa6, 0x01, 0x9d, 0x93, 0xd3, 0xb3, 0xf3, 0x93, 0x20, 0x98, - 0xb9, 0x13, 0x4e, 0xed, 0xd6, 0x00, 0xea, 0xd4, 0x50, 0x96, 0x3c, 0x4b, 0xf5, 0xcb, 0x26, 0x1b, - 0x76, 0x0c, 0x0d, 0xea, 0x2b, 0x59, 0xd9, 0xeb, 0x54, 0xbf, 0x74, 0xc0, 0xc1, 0x8f, 0xe8, 0xce, - 0x73, 0xf5, 0x91, 0xaa, 0x5f, 0x36, 0xe5, 0xb0, 0x4f, 0xc1, 0x48, 0x3b, 0xc2, 0x75, 0x4f, 0x55, - 0xfd, 0xb5, 0xf3, 0x0e, 0xea, 0xa7, 0x45, 0x76, 0xdd, 0xc3, 0x4e, 0x7f, 0xed, 0x60, 0xc0, 0x9e, - 0x41, 0x2b, 0x6e, 0x53, 0xca, 0x1f, 0x93, 0xfa, 0x6b, 0x66, 0x11, 0x74, 0x8f, 0x6e, 0xf5, 0xca, - 0x5e, 0xbc, 0xfa, 0xa5, 0x03, 0x13, 0x7b, 0x02, 0xcd, 0xa8, 0x52, 0x94, 0x3e, 0x0b, 0xf5, 0xcb, - 0x27, 0x0a, 0x34, 0x32, 0x6d, 0x73, 0xd7, 0xbd, 0xca, 0xf5, 0xd7, 0x4e, 0x76, 0xec, 0x04, 0x20, - 0xd3, 0xde, 0xad, 0x7d, 0x6e, 0xeb, 0xaf, 0x9f, 0xd8, 0xd8, 0x27, 0xd0, 0x4e, 0xa7, 0xf0, 0xf2, - 0x67, 0xb0, 0xfe, 0xba, 0x21, 0x6a, 0xdc, 0xa4, 0xa7, 0xd2, 0x0f, 0xff, 0x13, 0x00, 0x00, 0xff, - 0xff, 0x11, 0x05, 0x99, 0x2e, 0xa6, 0x15, 0x00, 0x00, + // 1846 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0xcd, 0x6e, 0x1b, 0xc9, + 0x11, 0x16, 0xff, 0x39, 0xa5, 0x1f, 0xd2, 0x2d, 0xdb, 0xa2, 0xb9, 0x08, 0x6c, 0x0c, 0x02, 0xaf, + 0x9c, 0xd5, 0x8a, 0x89, 0x76, 0x6d, 0xd8, 0xbb, 0xc9, 0x22, 0x92, 0xd6, 0x59, 0x0a, 0x9b, 0x1f, + 0x65, 0xec, 0x75, 0x80, 0x5c, 0x88, 0x26, 0xa7, 0x45, 0x0e, 0x4c, 0xce, 0xcc, 0x4e, 0x37, 0xb5, + 0x94, 0x6f, 0xb9, 0x2f, 0x72, 0xcd, 0x39, 0x2f, 0x90, 0x43, 0x80, 0xbc, 0x42, 0x90, 0x97, 0x88, + 0x0f, 0x49, 0x4e, 0x79, 0x89, 0x04, 0x55, 0xdd, 0xf3, 0xab, 0xa1, 0xe1, 0x38, 0xc7, 0xbd, 0x48, + 0x5d, 0x5d, 0x55, 0x3d, 0x5d, 0xc5, 0xaa, 0xaf, 0xaa, 0x1a, 0x6e, 0xa8, 0xab, 0x50, 0xc8, 0x01, + 0xfd, 0x3d, 0x0c, 0xa3, 0x40, 0x05, 0xac, 0x41, 0x44, 0xff, 0xc3, 0xa9, 0xa7, 0x66, 0xcb, 0xf1, + 0xe1, 0x24, 0x58, 0x0c, 0xa6, 0xc1, 0x34, 0x18, 0x10, 0x77, 0xbc, 0xbc, 0x20, 0x8a, 0x08, 0x5a, + 0x69, 0xad, 0xfe, 0x20, 0x23, 0xae, 0x84, 0xef, 0x8a, 0x68, 0xe1, 0xf9, 0x6a, 0xa0, 0x16, 0x73, + 0x6f, 0x2c, 0x07, 0x93, 0x60, 0xb1, 0x08, 0xfc, 0xec, 0x67, 0xec, 0xbf, 0xd6, 0xa1, 0xe5, 0x88, + 0xaf, 0x97, 0x42, 0x2a, 0xb6, 0x0f, 0x75, 0x31, 0x99, 0x05, 0xbd, 0xea, 0xbd, 0xca, 0xfe, 0xe6, + 0x11, 0x3b, 0xd4, 0x72, 0x86, 0xfb, 0x74, 0x32, 0x0b, 0x86, 0x1b, 0x0e, 0x49, 0xb0, 0x0f, 0xa0, + 0x71, 0x31, 0x5f, 0xca, 0x59, 0xaf, 0x46, 0xa2, 0xbb, 0x79, 0xd1, 0x9f, 0x21, 0x6b, 0xb8, 0xe1, + 0x68, 0x19, 0x3c, 0xd6, 0xf3, 0x2f, 0x82, 0x5e, 0xbd, 0xec, 0xd8, 0x33, 0xff, 0x82, 0x8e, 0x45, + 0x09, 0xf6, 0x18, 0x40, 0x0a, 0x35, 0x0a, 0x42, 0xe5, 0x05, 0x7e, 0xaf, 0x41, 0xf2, 0x7b, 0x79, + 0xf9, 0x67, 0x42, 0xfd, 0x8a, 0xd8, 0xc3, 0x0d, 0xc7, 0x92, 0x31, 0x81, 0x9a, 0x9e, 0xef, 0xa9, + 0xd1, 0x64, 0xc6, 0x3d, 0xbf, 0xd7, 0x2c, 0xd3, 0x3c, 0xf3, 0x3d, 0x75, 0x8a, 0x6c, 0xd4, 0xf4, + 0x62, 0x02, 0x4d, 0xf9, 0x7a, 0x29, 0xa2, 0xab, 0x5e, 0xab, 0xcc, 0x94, 0x5f, 0x23, 0x0b, 0x4d, + 0x21, 0x19, 0xf6, 0x29, 0x6c, 0x8e, 0xc5, 0xd4, 0xf3, 0x47, 0xe3, 0x79, 0x30, 0x79, 0xd9, 0x6b, + 0x93, 0x4a, 0x2f, 0xaf, 0x72, 0x82, 0x02, 0x27, 0xc8, 0x1f, 0x6e, 0x38, 0x30, 0x4e, 0x28, 0x76, + 0x04, 0xed, 0xc9, 0x4c, 0x4c, 0x5e, 0x8e, 0xd4, 0xaa, 0x67, 0x91, 0xe6, 0xad, 0xbc, 0xe6, 0x29, + 0x72, 0x9f, 0xaf, 0x86, 0x1b, 0x4e, 0x6b, 0xa2, 0x97, 0x68, 0x97, 0x2b, 0xe6, 0xde, 0xa5, 0x88, + 0x50, 0x6b, 0xb7, 0xcc, 0xae, 0xcf, 0x35, 0x9f, 0xf4, 0x2c, 0x37, 0x26, 0xd8, 0x43, 0xb0, 0x84, + 0xef, 0x9a, 0x8b, 0x6e, 0x92, 0xe2, 0xed, 0xc2, 0x2f, 0xea, 0xbb, 0xf1, 0x35, 0xdb, 0xc2, 0xac, + 0xd9, 0x21, 0x34, 0x31, 0x4a, 0x3c, 0xd5, 0xdb, 0x22, 0x9d, 0x9b, 0x85, 0x2b, 0x12, 0x6f, 0xb8, + 0xe1, 0x18, 0xa9, 0x93, 0x16, 0x34, 0x2e, 0xf9, 0x7c, 0x29, 0xec, 0xf7, 0x61, 0x33, 0x13, 0x29, + 0xac, 0x07, 0xad, 0x85, 0x90, 0x92, 0x4f, 0x45, 0xaf, 0x72, 0xaf, 0xb2, 0x6f, 0x39, 0x31, 0x69, + 0xef, 0xc0, 0x56, 0x36, 0x4e, 0x32, 0x8a, 0x18, 0x0b, 0xa8, 0x78, 0x29, 0x22, 0x89, 0x01, 0x60, + 0x14, 0x0d, 0x69, 0x7f, 0x02, 0xdd, 0x62, 0x10, 0xb0, 0x2e, 0xd4, 0x5e, 0x8a, 0x2b, 0x23, 0x89, + 0x4b, 0x76, 0xd3, 0x5c, 0x88, 0xa2, 0xd8, 0x72, 0xcc, 0xed, 0xfe, 0x55, 0x49, 0x94, 0x93, 0x38, + 0x60, 0x0c, 0xea, 0xca, 0x5b, 0xe8, 0x0b, 0xd6, 0x1c, 0x5a, 0xb3, 0x3b, 0xf8, 0x23, 0x71, 0xcf, + 0x1f, 0x79, 0xae, 0x39, 0xa1, 0x45, 0xf4, 0x99, 0xcb, 0x8e, 0xa1, 0x3b, 0x09, 0x7c, 0x29, 0x7c, + 0xb9, 0x94, 0xa3, 0x90, 0x47, 0x7c, 0x21, 0x4d, 0xfc, 0xc7, 0x8e, 0x3d, 0x8d, 0xd9, 0xe7, 0xc4, + 0x75, 0x3a, 0x93, 0xfc, 0x06, 0x7b, 0x04, 0x70, 0xc9, 0xe7, 0x9e, 0xcb, 0x55, 0x10, 0xc9, 0x5e, + 0xfd, 0x5e, 0x6d, 0x7f, 0xf3, 0xa8, 0x6b, 0x94, 0x5f, 0xc4, 0x8c, 0x93, 0xfa, 0xdf, 0x5e, 0xdf, + 0xdd, 0x70, 0x32, 0x92, 0xec, 0x3e, 0x74, 0x78, 0x18, 0x8e, 0xa4, 0xe2, 0x4a, 0x8c, 0xc6, 0x57, + 0x4a, 0x48, 0xca, 0x8e, 0x2d, 0x67, 0x9b, 0x87, 0xe1, 0x33, 0xdc, 0x3d, 0xc1, 0x4d, 0xdb, 0x4d, + 0x7c, 0x4b, 0x81, 0x8b, 0x16, 0xba, 0x5c, 0x71, 0xb2, 0x70, 0xcb, 0xa1, 0x35, 0xee, 0x85, 0x5c, + 0xcd, 0x8c, 0x75, 0xb4, 0x66, 0xb7, 0xa1, 0x39, 0x13, 0xde, 0x74, 0xa6, 0xc8, 0xa0, 0x9a, 0x63, + 0x28, 0x74, 0x66, 0x18, 0x05, 0x97, 0x82, 0x72, 0xb7, 0xed, 0x68, 0xc2, 0xfe, 0x7b, 0x05, 0x6e, + 0x5c, 0x0b, 0x76, 0x3c, 0x77, 0xc6, 0xe5, 0x2c, 0xfe, 0x16, 0xae, 0xd9, 0x07, 0x78, 0x2e, 0x77, + 0x45, 0x64, 0x30, 0x65, 0xdb, 0xd8, 0x3a, 0xa4, 0x4d, 0x63, 0xa8, 0x11, 0x61, 0x3f, 0xc9, 0x39, + 0xa7, 0x46, 0xce, 0x89, 0x63, 0xfd, 0x99, 0x37, 0xf5, 0x3d, 0x7f, 0xfa, 0x26, 0x1f, 0x0d, 0xe1, + 0xe6, 0xf8, 0xea, 0x15, 0xf7, 0x95, 0xe7, 0x8b, 0xd1, 0x35, 0x2f, 0x77, 0xcc, 0x41, 0x4f, 0x2f, + 0x3d, 0x57, 0xf8, 0x13, 0x61, 0x0e, 0xd8, 0x4d, 0x54, 0x92, 0xa3, 0xa5, 0x7d, 0x0f, 0x76, 0xf2, + 0x19, 0xc9, 0x76, 0xa0, 0xaa, 0x56, 0xc6, 0xb2, 0xaa, 0x5a, 0xd9, 0x76, 0x12, 0x4d, 0x49, 0xf6, + 0x5d, 0x93, 0x79, 0x00, 0x9d, 0x42, 0xa2, 0x65, 0xdc, 0x5c, 0xc9, 0xba, 0xd9, 0xee, 0xc0, 0x76, + 0x2e, 0xbf, 0xec, 0x6f, 0x1b, 0xd0, 0x76, 0x84, 0x0c, 0x31, 0x7c, 0xd8, 0x63, 0xb0, 0xc4, 0x6a, + 0x22, 0x34, 0x28, 0x56, 0x0a, 0x90, 0xa3, 0x65, 0x9e, 0xc6, 0x7c, 0xc4, 0x80, 0x44, 0x98, 0x3d, + 0xc8, 0x01, 0xfa, 0x6e, 0x51, 0x29, 0x8b, 0xe8, 0x07, 0x79, 0x44, 0xbf, 0x59, 0x90, 0x2d, 0x40, + 0xfa, 0x83, 0x1c, 0xa4, 0x17, 0x0f, 0xce, 0x61, 0xfa, 0x93, 0x12, 0x4c, 0x2f, 0x5e, 0x7f, 0x0d, + 0xa8, 0x3f, 0x29, 0x01, 0xf5, 0xde, 0xb5, 0x6f, 0x95, 0xa2, 0xfa, 0x41, 0x1e, 0xd5, 0x8b, 0xe6, + 0x14, 0x60, 0xfd, 0xc7, 0x65, 0xb0, 0x7e, 0xa7, 0xa0, 0xb3, 0x16, 0xd7, 0x3f, 0xba, 0x86, 0xeb, + 0xb7, 0x0b, 0xaa, 0x25, 0xc0, 0xfe, 0x24, 0x07, 0xec, 0x50, 0x6a, 0xdb, 0x1a, 0x64, 0x7f, 0x74, + 0x1d, 0xd9, 0xf7, 0x8a, 0x3f, 0x6d, 0x19, 0xb4, 0x0f, 0x0a, 0xd0, 0x7e, 0xab, 0x78, 0xcb, 0xb5, + 0xd8, 0xfe, 0x00, 0xf3, 0xbd, 0x10, 0x69, 0x88, 0x0d, 0x22, 0x8a, 0x82, 0xc8, 0x80, 0xaf, 0x26, + 0xec, 0x7d, 0x44, 0xa0, 0x34, 0xbe, 0xde, 0x50, 0x07, 0x28, 0xe8, 0x33, 0xd1, 0x65, 0xff, 0xa1, + 0x92, 0xea, 0x52, 0x29, 0xc8, 0xa2, 0x97, 0x65, 0xd0, 0x2b, 0x53, 0x1e, 0xaa, 0xb9, 0xf2, 0xc0, + 0x7e, 0x00, 0x37, 0xe6, 0x5c, 0x2a, 0xed, 0x97, 0x51, 0x0e, 0xce, 0x3a, 0xc8, 0xd0, 0x0e, 0xd1, + 0xb8, 0xf6, 0x21, 0xec, 0x66, 0x64, 0x11, 0x5a, 0x09, 0xba, 0xea, 0x94, 0xbc, 0xdd, 0x44, 0xfa, + 0x38, 0x0c, 0x87, 0x5c, 0xce, 0xec, 0x5f, 0xa4, 0xf6, 0xa7, 0xa5, 0x87, 0x41, 0x7d, 0x12, 0xb8, + 0xda, 0xac, 0x6d, 0x87, 0xd6, 0x58, 0x8e, 0xe6, 0xc1, 0x94, 0xbe, 0x6a, 0x39, 0xb8, 0x44, 0xa9, + 0x24, 0x53, 0x2c, 0x9d, 0x12, 0xf6, 0xef, 0x2b, 0xe9, 0x79, 0x69, 0x35, 0x2a, 0x2b, 0x2f, 0x95, + 0xff, 0xa7, 0xbc, 0x54, 0xdf, 0xb6, 0xbc, 0xd8, 0x7f, 0xa9, 0xa4, 0xbf, 0x45, 0x52, 0x38, 0xde, + 0xcd, 0x38, 0x0c, 0x0b, 0xcf, 0x77, 0xc5, 0x8a, 0x52, 0xbd, 0xe6, 0x68, 0x22, 0xae, 0xd3, 0x4d, + 0x72, 0x70, 0xbe, 0x4e, 0xb7, 0x68, 0x4f, 0x13, 0xa6, 0xe0, 0x04, 0x17, 0x94, 0x83, 0x5b, 0x8e, + 0x26, 0x32, 0xb8, 0x69, 0xe5, 0x70, 0xf3, 0x1c, 0xd8, 0xf5, 0xec, 0x64, 0x9f, 0x40, 0x5d, 0xf1, + 0x29, 0x3a, 0x0f, 0xed, 0xdf, 0x39, 0xd4, 0x5d, 0xef, 0xe1, 0x97, 0x2f, 0xce, 0xb9, 0x17, 0x9d, + 0xdc, 0x46, 0xeb, 0xff, 0xfd, 0xfa, 0xee, 0x0e, 0xca, 0x1c, 0x04, 0x0b, 0x4f, 0x89, 0x45, 0xa8, + 0xae, 0x1c, 0xd2, 0xb1, 0xff, 0x53, 0x41, 0xd4, 0xce, 0x65, 0x6d, 0xa9, 0x2f, 0xe2, 0xd0, 0xac, + 0x66, 0x0a, 0xeb, 0xdb, 0xf9, 0xe7, 0x7b, 0x00, 0x53, 0x2e, 0x47, 0xdf, 0x70, 0x5f, 0x09, 0xd7, + 0x38, 0xc9, 0x9a, 0x72, 0xf9, 0x1b, 0xda, 0xc0, 0xfe, 0x03, 0xd9, 0x4b, 0x29, 0x5c, 0xf2, 0x56, + 0xcd, 0x69, 0x4d, 0xb9, 0xfc, 0x4a, 0x0a, 0x37, 0xb1, 0xab, 0xf5, 0xbf, 0xdb, 0xc5, 0xf6, 0xa1, + 0x76, 0x21, 0x84, 0x41, 0xb6, 0x6e, 0xa2, 0x7a, 0xf6, 0xe8, 0x63, 0x52, 0xd6, 0x21, 0x81, 0x22, + 0xf6, 0xef, 0xaa, 0x69, 0x70, 0xa6, 0xc5, 0xed, 0xbb, 0xe5, 0x83, 0x7f, 0x52, 0xb7, 0x98, 0x87, + 0x52, 0x76, 0x0a, 0x37, 0x92, 0x94, 0x19, 0x2d, 0x43, 0x97, 0x63, 0x17, 0x56, 0x79, 0x63, 0x8e, + 0x75, 0x13, 0x85, 0xaf, 0xb4, 0x3c, 0xfb, 0x25, 0xec, 0x15, 0x92, 0x3c, 0x39, 0xaa, 0xfa, 0xc6, + 0x5c, 0xbf, 0x95, 0xcf, 0xf5, 0xf8, 0xbc, 0xd8, 0x1f, 0xb5, 0x77, 0x88, 0xf5, 0xef, 0x63, 0x9b, + 0x93, 0x85, 0xfe, 0xb2, 0x5f, 0xd4, 0xfe, 0x63, 0x05, 0x3a, 0x85, 0xcb, 0xb0, 0x01, 0x80, 0x46, + 0x4e, 0xe9, 0xbd, 0x12, 0x06, 0xa4, 0x62, 0x1f, 0x90, 0xb3, 0x9e, 0x79, 0xaf, 0x84, 0x63, 0x8d, + 0xe3, 0x25, 0xbb, 0x0f, 0x2d, 0xb5, 0xd2, 0xd2, 0xf9, 0x46, 0xf0, 0xf9, 0x8a, 0x44, 0x9b, 0x8a, + 0xfe, 0xb3, 0x87, 0xb0, 0xa5, 0x0f, 0x9e, 0x06, 0x52, 0x7a, 0xa1, 0x69, 0x46, 0x58, 0xf6, 0xe8, + 0x2f, 0x88, 0xe3, 0x6c, 0x8e, 0x53, 0xc2, 0xfe, 0x2d, 0x58, 0xc9, 0x67, 0xd9, 0x7b, 0x60, 0x2d, + 0xf8, 0xca, 0x74, 0xc9, 0x78, 0xb7, 0x86, 0xd3, 0x5e, 0xf0, 0x15, 0x35, 0xc8, 0x6c, 0x0f, 0x5a, + 0xc8, 0x54, 0x2b, 0xed, 0xef, 0x86, 0xd3, 0x5c, 0xf0, 0xd5, 0xf3, 0x55, 0xc2, 0x98, 0x72, 0x19, + 0xb7, 0xc0, 0x0b, 0xbe, 0xfa, 0x82, 0x4b, 0xfb, 0x33, 0x68, 0xea, 0x4b, 0xbe, 0xd5, 0xc1, 0xa8, + 0x5f, 0xcd, 0xe9, 0xff, 0x14, 0x36, 0x33, 0xf7, 0x66, 0x3f, 0x82, 0x5b, 0xda, 0xc2, 0x90, 0x47, + 0x8a, 0x3c, 0x92, 0x3b, 0x90, 0x11, 0xf3, 0x9c, 0x47, 0x0a, 0x3f, 0xa9, 0x9b, 0xfa, 0x3f, 0x57, + 0xa1, 0xa9, 0x1b, 0x66, 0x76, 0x3f, 0x33, 0x9d, 0x50, 0x55, 0x3c, 0xd9, 0xfc, 0xc7, 0xeb, 0xbb, + 0x2d, 0x2a, 0x20, 0x67, 0x9f, 0xa7, 0xa3, 0x4a, 0x0a, 0x98, 0xd5, 0x5c, 0x3f, 0x1f, 0x4f, 0x3c, + 0xb5, 0xcc, 0xc4, 0xb3, 0x07, 0x2d, 0x7f, 0xb9, 0x20, 0x97, 0xd4, 0xb5, 0x4b, 0xfc, 0xe5, 0x02, + 0x5d, 0xf2, 0x1e, 0x58, 0x2a, 0x50, 0x7c, 0x4e, 0x2c, 0x9d, 0xa4, 0x6d, 0xda, 0x40, 0xe6, 0x7d, + 0xe8, 0x64, 0xab, 0x2d, 0x56, 0x4f, 0x0d, 0xee, 0xdb, 0x69, 0xad, 0xc5, 0x09, 0xe0, 0x7d, 0xe8, + 0xa4, 0x85, 0x46, 0xcb, 0x69, 0xc0, 0xdf, 0x49, 0xb7, 0x49, 0xf0, 0x0e, 0xb4, 0x93, 0x3a, 0xac, + 0xc1, 0xbf, 0xc5, 0x75, 0xf9, 0xc5, 0xc1, 0x39, 0x8c, 0x82, 0x30, 0x90, 0x22, 0x32, 0x0d, 0xd6, + 0xba, 0x84, 0x4b, 0xe4, 0x6c, 0x0f, 0xac, 0x84, 0x89, 0x4d, 0x03, 0x77, 0xdd, 0x48, 0x48, 0x69, + 0xfa, 0xf3, 0x98, 0x64, 0x07, 0xd0, 0x0a, 0x97, 0xe3, 0x11, 0xd6, 0xa6, 0x7c, 0x60, 0x9e, 0x2f, + 0xc7, 0x5f, 0x8a, 0xab, 0x78, 0x42, 0x09, 0x89, 0xa2, 0xea, 0x14, 0x7c, 0x23, 0x22, 0xe3, 0x3f, + 0x4d, 0xd8, 0x0a, 0xba, 0xc5, 0xf1, 0x84, 0x7d, 0x0c, 0x56, 0x62, 0x5f, 0x21, 0x41, 0x8a, 0x77, + 0x4e, 0x05, 0xb1, 0x85, 0x91, 0xde, 0xd4, 0x17, 0xee, 0x28, 0xf5, 0x2d, 0xdd, 0xab, 0xed, 0x74, + 0x34, 0xe3, 0xe7, 0xb1, 0x73, 0xed, 0x1f, 0x42, 0x53, 0xdf, 0x91, 0x7e, 0xd4, 0xab, 0x30, 0xee, + 0xaf, 0x68, 0x5d, 0x9a, 0xc9, 0x7f, 0xaa, 0x40, 0x3b, 0x1e, 0x7f, 0x4a, 0x95, 0x72, 0x97, 0xae, + 0xbe, 0xed, 0xa5, 0xd7, 0xcd, 0x8e, 0x71, 0xac, 0xd5, 0x33, 0xb1, 0x76, 0x00, 0x4c, 0x87, 0xd4, + 0x65, 0xa0, 0x3c, 0x7f, 0x3a, 0xd2, 0xde, 0xd4, 0xb1, 0xd5, 0x25, 0xce, 0x0b, 0x62, 0x9c, 0xe3, + 0xfe, 0xd1, 0xb7, 0x0d, 0xe8, 0x1c, 0x9f, 0x9c, 0x9e, 0x1d, 0x87, 0xe1, 0xdc, 0x9b, 0x70, 0xea, + 0xba, 0x06, 0x50, 0xa7, 0xbe, 0xb2, 0xe4, 0x75, 0xaa, 0x5f, 0x36, 0xe0, 0xb0, 0x23, 0x68, 0x50, + 0x7b, 0xc9, 0xca, 0x1e, 0xa9, 0xfa, 0xa5, 0x73, 0x0e, 0x7e, 0x44, 0x37, 0xa0, 0xd7, 0xdf, 0xaa, + 0xfa, 0x65, 0xc3, 0x0e, 0xfb, 0x0c, 0xac, 0xb4, 0x31, 0x5c, 0xf7, 0x62, 0xd5, 0x5f, 0x3b, 0xf6, + 0xa0, 0x7e, 0x5a, 0x6b, 0xd7, 0xbd, 0xef, 0xf4, 0xd7, 0xce, 0x07, 0xec, 0x31, 0xb4, 0xe2, 0x6e, + 0xa5, 0xfc, 0x4d, 0xa9, 0xbf, 0x66, 0x24, 0x41, 0xf7, 0xe8, 0x8e, 0xaf, 0xec, 0xe1, 0xab, 0x5f, + 0x3a, 0x37, 0xb1, 0x87, 0xd0, 0x34, 0x05, 0xa3, 0xf4, 0x75, 0xa8, 0x5f, 0x3e, 0x58, 0xa0, 0x91, + 0x69, 0xb7, 0xbb, 0xee, 0x71, 0xae, 0xbf, 0x76, 0xc0, 0x63, 0xc7, 0x00, 0x99, 0x2e, 0x6f, 0xed, + 0xab, 0x5b, 0x7f, 0xfd, 0xe0, 0xc6, 0x3e, 0x85, 0x76, 0x3a, 0x8c, 0x97, 0xbf, 0x86, 0xf5, 0xd7, + 0xcd, 0x52, 0xe3, 0x26, 0xbd, 0x98, 0x7e, 0xf4, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe5, 0xf3, + 0xb2, 0x34, 0xad, 0x15, 0x00, 0x00, } diff --git a/types/types.proto b/types/types.proto index a1c55375..b4f4b2aa 100644 --- a/types/types.proto +++ b/types/types.proto @@ -231,7 +231,7 @@ message Header { // hashes bytes last_block_hash = 6; - bytes val_set_hash = 7; + bytes validators_hash = 7; bytes app_hash = 8; // consensus From 3f6da94d55a60c165389e4935e8f9ec192179916 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Wed, 6 Jun 2018 12:52:11 -0700 Subject: [PATCH 39/40] update Makefile --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 1823812e..7d1c4b2e 100644 --- a/Makefile +++ b/Makefile @@ -171,4 +171,4 @@ devdoc_clean: # To avoid unintended conflicts with file names, always add to .PHONY # unless there is a reason not to. # https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html -.PHONY: check protoc build dist install check_tools get_tools get_protoc update_tools get_vendor_deps test test_race test_integrations fmt metalinter metalinter_all docker_build docker_run docker_run_rm devdoc_init devdoc devdoc_save devdoc_clean +.PHONY: check protoc build dist install check_tools get_tools get_protoc update_tools get_vendor_deps test test_race fmt metalinter metalinter_all docker_build docker_run docker_run_rm devdoc_init devdoc devdoc_save devdoc_clean From 084f2e5b8c40d58f61b314c2729405db3e3ce686 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Wed, 6 Jun 2018 13:17:11 -0700 Subject: [PATCH 40/40] update readme --- README.md | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index e6051cc3..6de9f706 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,8 @@ Blockchains are systems for multi-master state machine replication. **ABCI** is an interface that defines the boundary between the replication engine (the blockchain), and the state machine (the application). -By using a socket protocol, we enable a consensus engine running in one process -to manage an application state running in another. - -For background information on ABCI, motivations, and tendermint, please visit [the documentation](http://tendermint.readthedocs.io/en/master/). -The two guides to focus on are the `Application Development Guide` and `Using ABCI-CLI`. +Using a socket protocol, a consensus engine running in one process +can manage an application state running in another. Previously, the ABCI was referred to as TMSP. @@ -17,8 +14,19 @@ The community has provided a number of addtional implementations, see the [Tende ## Specification -The [primary specification](https://github.com/tendermint/abci/blob/master/types/types.proto) -is made using Protocol Buffers. To build it, run +A detailed description of the ABCI methods and message types is contained in: + +- [A prose specification](specification.md) +- [A protobuf file](https://github.com/tendermint/abci/blob/master/types/types.proto) +- [A Go interface](https://github.com/tendermint/abci/blob/master/types/application.go). + +For more background information on ABCI, motivations, and tendermint, please visit [the documentation](http://tendermint.readthedocs.io/en/master/). +The two guides to focus on are the `Application Development Guide` and `Using ABCI-CLI`. + + +## Protocl Buffers + +To compile the protobuf file, run: ``` make protoc @@ -28,12 +36,10 @@ See `protoc --help` and [the Protocol Buffers site](https://developers.google.co for details on compiling for other languages. Note we also include a [GRPC](http://www.grpc.io/docs) service definition. -For the specification as an interface in Go, see the -[types/application.go file](https://github.com/tendermint/abci/blob/master/types/application.go). +## Install ABCI-CLI -See the [spec file](specification.rst) for a detailed description of the message types. - -## Install +The `abci-cli` is a simple tool for debugging ABCI servers and running some +example apps. To install it: ``` go get github.com/tendermint/abci