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 39a24e0..da5bc72 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 f1fa5d4..3cfc8e0 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 92cbe7d..b0e88d4 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 363ceab..804ebba 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 3cfc8e0..421292f 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 c71e371..cbb8b6c 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 e7bcbc9..2516b9f 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 b0e88d4..4c31bf1 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 804ebba..ad6fd4b 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 9273198..1dc1e23 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 e1077c9..7313f5e 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 4c31bf1..fc55a67 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 ad6fd4b..fc1994e 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 fc55a67..70d749a 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 fc1994e..0e177a4 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 fd22668..d147c6a 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 4dc5e96..2743fa2 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 70d749a..639855e 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 0e177a4..189b50d 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 d15c4e1..0fef579 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 64a989a..81dceb7 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 978b26e..e69de29 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 0000000..abbbbe5 --- /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 e69de29..0000000 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 81dceb7..f44dc5e 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 d147c6a..3ff0464 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 f44dc5e..13a9547 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 416145f..0000000 --- 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 0fef579..da05af9 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 639855e..23b4255 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 189b50d..00777dc 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 | 51 ++++++++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/types/types.proto b/types/types.proto index 00777dc..2fe8ea7 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]; +// Validator for use in responses +message ResponseValidator { + PubKey pub_key = 1; + int64 power = 2; } -message PartSetHeader { - int32 total = 1; - bytes hash = 2; +// Validator for use in requests +message RequestValidator { + bytes address = 1; + int32 index = 2; + PubKey pub_key = 3; + int64 power = 4; } -message Validator { - bytes pub_key = 1; - int64 power = 2; +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 2fe8ea7..d1f27ea 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 d1f27ea..2010130 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 | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/types/types.proto b/types/types.proto index 2010130..2cea82d 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 +message Validator { + bytes address = 1; + PubKey pub_key = 2 [(gogoproto.nullable)=false]; + int64 power = 3; } -// Validator for use in requests -message RequestValidator { - bytes address = 1; - int32 index = 2; - PubKey pub_key = 3; - int64 power = 4; +// 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 | 401 +++++++++++++------------- types/util.go | 15 +- 13 files changed, 249 insertions(+), 897 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 13a9547..d5aa536 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 fe9d1c2..0000000 --- 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 1dc1e23..0000000 --- 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 79aa439..0000000 --- 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 548fe74..0000000 --- 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 30885bc..0000000 --- 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 cbb8b6c..da826fe 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 b3d29ff..ff3e492 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 888258f..02f7ce7 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 2516b9f..14b4007 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 0000000..e5cd5fb --- /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 23b4255..e04a4f4 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,118 +1695,122 @@ 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 m.LastBlockHash } return nil } -func (m *Header) GetDataHash() []byte { +func (m *Header) GetAppHash() []byte { if m != nil { - return m.DataHash + return m.AppHash } return nil } -func (m *Header) GetValidatorsHash() []byte { +func (m *Header) GetProposer() *Validator { if m != nil { - return m.ValidatorsHash + return m.Proposer } return nil } -func (m *Header) GetAppHash() []byte { +// 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"` +} + +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 (m *Validator) GetAddress() []byte { if m != nil { - return m.AppHash + return m.Address } 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 *Validator) GetPubKey() PubKey { if m != nil { - return m.Hash + return m.PubKey } - return nil + return PubKey{} } -func (m *BlockID) GetParts() PartSetHeader { +func (m *Validator) GetPower() int64 { if m != nil { - return m.Parts + return m.Power } - return PartSetHeader{} + return 0 } -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"` +// 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 *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 *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 *PartSetHeader) GetTotal() int32 { +func (m *SigningValidator) GetValidator() *Validator { if m != nil { - return m.Total + return m.Validator } - return 0 + return nil } -func (m *PartSetHeader) GetHash() []byte { +func (m *SigningValidator) GetSignedLastBlock() bool { if m != nil { - return m.Hash + return m.SignedLastBlock } - return nil + return false } -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"` +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 *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 (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 *Validator) GetPubKey() []byte { +func (m *PubKey) GetType() string { if m != nil { - return m.PubKey + return m.Type } - return nil + return "" } -func (m *Validator) GetPower() int64 { +func (m *PubKey) GetData() []byte { if m != nil { - return m.Power + return m.Data } - return 0 + 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 da5bc72..0924ab5 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 52e4b67..e200ebf 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 e5cd5fb..0000000 --- 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 0924ab5..e443a33 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 0000000..5355a49 --- /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 dbf409f..dbd7f06 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 ef1bc92..d1eb40b 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 0000000..3e35119 --- /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 0000000..8b14fdf --- /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 64bf5fe..804c558 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 a6d5df6..3437da6 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 da826fe..e302a6d 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 4ccbc56..573168d 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 ff3e492..32c6679 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 02f7ce7..0009586 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 eb26dc3..d9aa974 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 d1eb40b..03d0c8f 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 5355a49..287f9e8 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 3e35119..476121b 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 8b14fdf..983efa2 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 | 521 +++++++++++++------------- types/types.proto | 31 +- types/validator.go | 2 +- 14 files changed, 400 insertions(+), 405 deletions(-) delete mode 100644 types/protoreplace/protoreplace.go diff --git a/Gopkg.lock b/Gopkg.lock index 6bc40c0..d7340d6 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 3f9a207..ca7cd51 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 d5aa536..3886258 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 0009586..fda7a7a 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 14b4007..e1d0285 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 dbd7f06..9bbf01a 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 e200ebf..e4d1c68 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 21d3595..fb93a0a 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 476121b..dbf5021 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 3ea0c73..0000000 --- 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 983efa2..63cea44 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 e04a4f4..6f6a887 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) } - -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, +func init() { proto.RegisterFile("types/types.proto", fileDescriptor0) } + +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 2cea82d..c97b738 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 e443a33..f73c978 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 3886258..101e79b 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 3ff0464..ab77338 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 d5aa536..1823812 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 6e34407..5d4c196 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 741dd7b..5bceb85 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 d7340d6..13fe0e5 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 ca7cd51..235b071 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 | 207 ++++------ types/types.pb.go | 521 +++++++++++++------------- types/types.proto | 31 +- types/{validator.go => util.go} | 15 - 23 files changed, 620 insertions(+), 874 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 13fe0e5..6bc40c0 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -30,14 +30,25 @@ version = "v1.7.0" [[projects]] - name = "github.com/golang/protobuf" + 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 = [ "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 235b071..3f9a207 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 29a3172..1823812 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 804c558..64bf5fe 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 3437da6..a6d5df6 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 e302a6d..da826fe 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 573168d..4ccbc56 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 32c6679..ff3e492 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 fda7a7a..02f7ce7 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 d9aa974..eb26dc3 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 e1d0285..14b4007 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 03d0c8f..ef1bc92 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 287f9e8..0000000 --- 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 9bbf01a..0000000 --- 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 e4d1c68..52e4b67 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 fb93a0a..21d3595 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 dbf5021..0000000 --- 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 0000000..3ea0c73 --- /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 0000000..e5cd5fb --- /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 63cea44..dbf409f 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" +) -type ResultEcho struct { - Message string `json:"message,omitempty"` -} +const ( + CodeTypeOK uint32 = 0 +) -type ResultFlush struct { +// IsOK returns true if Code is OK. +func (r ResponseCheckTx) 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 ResponseCheckTx) IsErr() bool { + return r.Code != CodeTypeOK } -func FromResultInfo(res ResultInfo) ResponseInfo { - return ResponseInfo(res) +// IsOK returns true if Code is OK. +func (r ResponseDeliverTx) 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 ResponseDeliverTx) IsErr() bool { + return r.Code != CodeTypeOK } -func FromResultSetOption(res ResultSetOption) ResponseSetOption { - return ResponseSetOption(res) +// IsOK returns true if Code is OK. +func (r ResponseQuery) IsOK() bool { + return r.Code == CodeTypeOK } -type ResultInitChain struct { - Validators []Validator `json:"validators"` +// IsErr returns true if Code is something other than OK. +func (r ResponseQuery) IsErr() bool { + return r.Code != CodeTypeOK } -func FromResultInitChain(res ResultInitChain) ResponseInitChain { - vals := valsToPointers(res.Validators) - return ResponseInitChain{ - Validators: vals, +//--------------------------------------------------------------------------- +// 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{} +) -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) MarshalJSON() ([]byte, error) { + s, err := jsonpbMarshaller.MarshalToString(r) + return []byte(s), err } -func FromResultQuery(res ResultQuery) ResponseQuery { - return ResponseQuery(res) +func (r *ResponseSetOption) UnmarshalJSON(b []byte) error { + reader := bytes.NewBuffer(b) + return jsonpbUnmarshaller.Unmarshal(reader, r) } -type ResultBeginBlock struct { - Tags []cmn.KVPair `json:"tags,omitempty"` +func (r *ResponseCheckTx) MarshalJSON() ([]byte, error) { + s, err := jsonpbMarshaller.MarshalToString(r) + return []byte(s), err } -func FromResultBeginBlock(res ResultBeginBlock) ResponseBeginBlock { - tags := tagsToPointers(res.Tags) - return ResponseBeginBlock{ - Tags: tags, - } +func (r *ResponseCheckTx) UnmarshalJSON(b []byte) error { + reader := bytes.NewBuffer(b) + return jsonpbUnmarshaller.Unmarshal(reader, r) } -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 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 *ResponseDeliverTx) 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 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 *ResponseDeliverTx) UnmarshalJSON(b []byte) error { + reader := bytes.NewBuffer(b) + return jsonpbUnmarshaller.Unmarshal(reader, r) } -type ResultEndBlock struct { - ValidatorUpdates []Validator `json:"validator_updates"` - ConsensusParamUpdates *ConsensusParams `json:"consensus_param_updates,omitempty"` - Tags []cmn.KVPair `json:"tags,omitempty"` +func (r *ResponseQuery) MarshalJSON() ([]byte, error) { + s, err := jsonpbMarshaller.MarshalToString(r) + return []byte(s), err } -func FromResultEndBlock(res ResultEndBlock) ResponseEndBlock { - tags := tagsToPointers(res.Tags) - vals := valsToPointers(res.ValidatorUpdates) - return ResponseEndBlock{ - ValidatorUpdates: vals, - ConsensusParamUpdates: res.ConsensusParamUpdates, - Tags: tags, - } +func (r *ResponseQuery) UnmarshalJSON(b []byte) error { + reader := bytes.NewBuffer(b) + return jsonpbUnmarshaller.Unmarshal(reader, r) } -type ResultCommit struct { - // reserve 1 - Data []byte `json:"data,omitempty"` +func (r *ResponseCommit) MarshalJSON() ([]byte, error) { + s, err := jsonpbMarshaller.MarshalToString(r) + return []byte(s), err } -func FromResultCommit(res ResultCommit) ResponseCommit { - return ResponseCommit(res) +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. -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 +// jsonEncodingRoundTripper ensures that asserted +// interfaces implement both MarshalJSON and UnmarshalJSON +type jsonRoundTripper interface { + json.Marshaler + json.Unmarshaler } -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 6f6a887..e04a4f4 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) } - -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, +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, } diff --git a/types/types.proto b/types/types.proto index c97b738..2cea82d 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 f73c978..0924ab5 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 da05af9..f966c34 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 da826fe..6510c45 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 14b4007..5dac680 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 e04a4f4..a4faff0 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 2cea82d..bddf13c 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 6510c45..63bc31a 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 a4faff0..369cfde 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 bddf13c..3d24726 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 5dac680..5ef978c 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 0000000..e3d86c0 --- /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 8ebe889..8d8530d 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 f966c34..2584353 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 e3d86c0..3d8a905 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 7313f5e..e813a01 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 3d8a905..2b0179f 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 369cfde..72de6b5 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 3d24726..a1c5537 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 2b0179f..25b9d7d 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 72de6b5..a6b806f 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 a1c5537..b4f4b2a 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 1823812..7d1c4b2 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 e6051cc..6de9f70 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). - -See the [spec file](specification.rst) for a detailed description of the message types. +## Install ABCI-CLI -## 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