From b59fe60e65e5f8e51b20c4bba4b9b564001d478e Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Fri, 1 Dec 2017 00:35:14 -0500 Subject: [PATCH 1/8] abci-cli: prefix flag variables with flag --- cmd/abci-cli/abci-cli.go | 68 ++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/cmd/abci-cli/abci-cli.go b/cmd/abci-cli/abci-cli.go index ef8b9063..e7fae52e 100644 --- a/cmd/abci-cli/abci-cli.go +++ b/cmd/abci-cli/abci-cli.go @@ -32,23 +32,23 @@ var ( // flags var ( // global - address string - abci string - verbose bool // for the println output - logLevel string // for the logger + flagAddress string + flagAbci string + flagVerbose bool // for the println output + flagLogLevel string // for the logger // query - path string - height int - prove bool + flagPath string + flagHeight int + flagProve bool // counter - addrC string - serial bool + flagAddrC string + flagSerial bool // dummy - addrD string - persist string + flagAddrD string + flagPersist string ) var RootCmd = &cobra.Command{ @@ -65,7 +65,7 @@ var RootCmd = &cobra.Command{ } if logger == nil { - allowLevel, err := log.AllowLevel(logLevel) + allowLevel, err := log.AllowLevel(flagLogLevel) if err != nil { return err } @@ -73,7 +73,7 @@ var RootCmd = &cobra.Command{ } if client == nil { var err error - client, err = abcicli.NewClient(address, abci, false) + client, err = abcicli.NewClient(flagAddress, flagAbci, false) if err != nil { return err } @@ -99,7 +99,7 @@ type response struct { type queryResponse struct { Key []byte Value []byte - Height uint64 + Height int64 Proof []byte } @@ -110,26 +110,26 @@ func Execute() error { } func addGlobalFlags() { - RootCmd.PersistentFlags().StringVarP(&address, "address", "", "tcp://0.0.0.0:46658", "Address of application socket") - RootCmd.PersistentFlags().StringVarP(&abci, "abci", "", "socket", "Either socket or grpc") - RootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "Print the command and results as if it were a console session") - RootCmd.PersistentFlags().StringVarP(&logLevel, "log_level", "", "debug", "Set the logger level") + RootCmd.PersistentFlags().StringVarP(&flagAddress, "address", "", "tcp://0.0.0.0:46658", "Address of application socket") + RootCmd.PersistentFlags().StringVarP(&flagAbci, "abci", "", "socket", "Either socket or grpc") + RootCmd.PersistentFlags().BoolVarP(&flagVerbose, "verbose", "v", false, "Print the command and results as if it were a console session") + RootCmd.PersistentFlags().StringVarP(&flagLogLevel, "log_level", "", "debug", "Set the logger level") } func addQueryFlags() { - queryCmd.PersistentFlags().StringVarP(&path, "path", "", "/store", "Path to prefix query with") - queryCmd.PersistentFlags().IntVarP(&height, "height", "", 0, "Height to query the blockchain at") - queryCmd.PersistentFlags().BoolVarP(&prove, "prove", "", false, "Whether or not to return a merkle proof of the query result") + queryCmd.PersistentFlags().StringVarP(&flagPath, "path", "", "/store", "Path to prefix query with") + queryCmd.PersistentFlags().IntVarP(&flagHeight, "height", "", 0, "Height to query the blockchain at") + queryCmd.PersistentFlags().BoolVarP(&flagProve, "prove", "", false, "Whether or not to return a merkle proof of the query result") } func addCounterFlags() { - counterCmd.PersistentFlags().StringVarP(&addrC, "addr", "", "tcp://0.0.0.0:46658", "Listen address") - counterCmd.PersistentFlags().BoolVarP(&serial, "serial", "", false, "Enforce incrementing (serial) transactions") + 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(&addrD, "addr", "", "tcp://0.0.0.0:46658", "Listen address") - dummyCmd.PersistentFlags().StringVarP(&persist, "persist", "", "", "Directory to use for a database") + 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 addCommands() { RootCmd.AddCommand(batchCmd) @@ -433,9 +433,9 @@ func cmdQuery(cmd *cobra.Command, args []string) error { resQuery, err := client.QuerySync(types.RequestQuery{ Data: queryBytes, - Path: path, - Height: uint64(height), - Prove: prove, + Path: flagPath, + Height: int64(flagHeight), + Prove: flagProve, }) if err != nil { return err @@ -455,12 +455,12 @@ func cmdQuery(cmd *cobra.Command, args []string) error { func cmdCounter(cmd *cobra.Command, args []string) error { - app := counter.NewCounterApplication(serial) + app := counter.NewCounterApplication(flagSerial) logger := log.NewTMLogger(log.NewSyncWriter(os.Stdout)) // Start the listener - srv, err := server.NewServer(addrC, abci, app) + srv, err := server.NewServer(flagAddrC, flagAbci, app) if err != nil { return err } @@ -482,15 +482,15 @@ func cmdDummy(cmd *cobra.Command, args []string) error { // Create the application - in memory or persisted to disk var app types.Application - if persist == "" { + if flagPersist == "" { app = dummy.NewDummyApplication() } else { - app = dummy.NewPersistentDummyApplication(persist) + app = dummy.NewPersistentDummyApplication(flagPersist) app.(*dummy.PersistentDummyApplication).SetLogger(logger.With("module", "dummy")) } // Start the listener - srv, err := server.NewServer(addrD, abci, app) + srv, err := server.NewServer(flagAddrD, flagAbci, app) if err != nil { return err } @@ -511,7 +511,7 @@ func cmdDummy(cmd *cobra.Command, args []string) error { func printResponse(cmd *cobra.Command, args []string, rsp response) { - if verbose { + if flagVerbose { fmt.Println(">", cmd.Use, strings.Join(args, " ")) } From 0ad7dea71fb9cf188e057a41e78175ae765fef04 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Fri, 1 Dec 2017 00:41:07 -0500 Subject: [PATCH 2/8] uint64 -> int64 --- CHANGELOG.md | 2 + Makefile | 8 +- example/dummy/dummy_test.go | 8 +- example/dummy/helpers.go | 2 +- example/dummy/persistent_dummy.go | 9 +- types/types.pb.go | 234 +++++++++++++++--------------- types/types.proto | 24 +-- types/validators.go | 5 +- 8 files changed, 148 insertions(+), 144 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8dba7032..b1449a43 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ BREAKING CHANGES: - [types] switched to using `gogo/protobuf` for code generation - [types] use `customtype` feature of `gogo/protobuf` to replace `[]byte` with `data.Bytes` in all generated types :) - this eliminates the need for additional types like ResultQuery + - [types] `pubKey` -> `pub_key` + - [types] `uint64` -> `int64` - [abci-cli] codes are printed as their number instead of a message, except for `code == 0`, which is still printed as `OK` FEATURES: diff --git a/Makefile b/Makefile index e6a7af36..ebe8f3a9 100644 --- a/Makefile +++ b/Makefile @@ -6,6 +6,8 @@ GOTOOLS = \ github.com/gogo/protobuf/protoc-gen-gogo \ github.com/gogo/protobuf/gogoproto +INCLUDE = -I=. -I=${GOPATH}/src -I=${GOPATH}/src/github.com/gogo/protobuf/protobuf + all: install test PACKAGES=$(shell go list ./... | grep -v '/vendor/') @@ -24,7 +26,7 @@ protoc: ## On "error while loading shared libraries: libprotobuf.so.14: cannot open shared object file: No such file or directory" ## ldconfig (may require sudo) ## https://stackoverflow.com/a/25518702 - protoc -I=. -I=${GOPATH}/src -I=${GOPATH}/src/github.com/gogo/protobuf/protobuf --gogo_out=plugins=grpc:. types/*.proto + protoc $(INCLUDE) --gogo_out=plugins=grpc:. types/*.proto install: @ go install ./cmd/... @@ -67,11 +69,11 @@ get_vendor_deps: ensure_tools @ glide install metalinter: - protoc --lint_out=. types/*.proto + protoc $(INCLUDE) --lint_out=. types/*.proto gometalinter --vendor --deadline=600s --enable-all --disable=lll ./... metalinter_test: - # protoc --lint_out=. types/*.proto + protoc $(INCLUDE) --lint_out=. types/*.proto gometalinter --vendor --deadline=600s --disable-all \ --enable=maligned \ --enable=deadcode \ diff --git a/example/dummy/dummy_test.go b/example/dummy/dummy_test.go index 738da6e8..ec4d2e33 100644 --- a/example/dummy/dummy_test.go +++ b/example/dummy/dummy_test.go @@ -82,7 +82,7 @@ func TestPersistentDummyInfo(t *testing.T) { } dummy := NewPersistentDummyApplication(dir) InitDummy(dummy) - height := uint64(0) + height := int64(0) resInfo := dummy.Info(types.RequestInfo{}) if resInfo.LastBlockHeight != height { @@ -90,10 +90,10 @@ func TestPersistentDummyInfo(t *testing.T) { } // make and apply block - height = uint64(1) + height = int64(1) hash := []byte("foo") header := &types.Header{ - Height: uint64(height), + Height: int64(height), } dummy.BeginBlock(types.RequestBeginBlock{hash, header}) dummy.EndBlock(types.RequestEndBlock{header.Height}) @@ -173,7 +173,7 @@ func TestValSetChanges(t *testing.T) { func makeApplyBlock(t *testing.T, dummy types.Application, heightInt int, diff []*types.Validator, txs ...[]byte) { // make and apply block - height := uint64(heightInt) + height := int64(heightInt) hash := []byte("foo") header := &types.Header{ Height: height, diff --git a/example/dummy/helpers.go b/example/dummy/helpers.go index 55c464de..d6b4338c 100644 --- a/example/dummy/helpers.go +++ b/example/dummy/helpers.go @@ -11,7 +11,7 @@ import ( func RandVal(i int) *types.Validator { pubkey := crypto.GenPrivKeyEd25519FromSecret([]byte(cmn.Fmt("test%d", i))).PubKey().Bytes() power := cmn.RandUint16() + 1 - return &types.Validator{pubkey, uint64(power)} + return &types.Validator{pubkey, int64(power)} } // RandVals returns a list of cnt validators for initializing diff --git a/example/dummy/persistent_dummy.go b/example/dummy/persistent_dummy.go index 1d72bea1..6f389c50 100644 --- a/example/dummy/persistent_dummy.go +++ b/example/dummy/persistent_dummy.go @@ -55,7 +55,8 @@ func (app *PersistentDummyApplication) SetLogger(l log.Logger) { func (app *PersistentDummyApplication) Info(req types.RequestInfo) types.ResponseInfo { res := app.app.Info(req) - res.LastBlockHeight = app.app.state.LatestVersion() + var latestVersion uint64 = app.app.state.LatestVersion() // TODO: change to int64 + res.LastBlockHeight = int64(latestVersion) res.LastBlockAppHash = app.app.state.Hash() return res } @@ -145,7 +146,7 @@ func (app *PersistentDummyApplication) Validators() (validators []*types.Validat return } -func MakeValSetChangeTx(pubkey []byte, power uint64) []byte { +func MakeValSetChangeTx(pubkey []byte, power int64) []byte { return []byte(cmn.Fmt("val:%X/%d", pubkey, power)) } @@ -181,7 +182,7 @@ func (app *PersistentDummyApplication) execValidatorTx(tx []byte) types.Response } // decode the power - power, err := strconv.Atoi(powerS) + power, err := strconv.ParseInt(powerS, 10, 64) if err != nil { return types.ResponseDeliverTx{ Code: code.CodeTypeEncodingError, @@ -189,7 +190,7 @@ func (app *PersistentDummyApplication) execValidatorTx(tx []byte) types.Response } // update - return app.updateValidator(&types.Validator{pubkey, uint64(power)}) + return app.updateValidator(&types.Validator{pubkey, power}) } // add, update, or remove a validator diff --git a/types/types.pb.go b/types/types.pb.go index 61a56cac..094f3012 100644 --- a/types/types.pb.go +++ b/types/types.pb.go @@ -582,7 +582,7 @@ func (m *RequestCheckTx) GetTx() []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 uint64 `protobuf:"varint,3,opt,name=height,proto3" json:"height,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"` } @@ -605,7 +605,7 @@ func (m *RequestQuery) GetPath() string { return "" } -func (m *RequestQuery) GetHeight() uint64 { +func (m *RequestQuery) GetHeight() int64 { if m != nil { return m.Height } @@ -668,7 +668,7 @@ func (m *RequestBeginBlock) GetHeader() *Header { } type RequestEndBlock struct { - Height uint64 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"` + Height int64 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"` } func (m *RequestEndBlock) Reset() { *m = RequestEndBlock{} } @@ -676,7 +676,7 @@ func (m *RequestEndBlock) String() string { return proto.CompactTextS func (*RequestEndBlock) ProtoMessage() {} func (*RequestEndBlock) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{11} } -func (m *RequestEndBlock) GetHeight() uint64 { +func (m *RequestEndBlock) GetHeight() int64 { if m != nil { return m.Height } @@ -1157,7 +1157,7 @@ func (*ResponseFlush) Descriptor() ([]byte, []int) { return fileDescriptorTypes, 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 uint64 `protobuf:"varint,3,opt,name=last_block_height,json=lastBlockHeight,proto3" json:"last_block_height,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"` } @@ -1180,7 +1180,7 @@ func (m *ResponseInfo) GetVersion() string { return "" } -func (m *ResponseInfo) GetLastBlockHeight() uint64 { +func (m *ResponseInfo) GetLastBlockHeight() int64 { if m != nil { return m.LastBlockHeight } @@ -1247,8 +1247,8 @@ type ResponseCheckTx struct { Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` Data github_com_tendermint_go_wire_data.Bytes `protobuf:"bytes,2,opt,name=data,proto3,customtype=github.com/tendermint/go-wire/data.Bytes" json:"data"` Log string `protobuf:"bytes,3,opt,name=log,proto3" json:"log,omitempty"` - Gas uint64 `protobuf:"varint,4,opt,name=gas,proto3" json:"gas,omitempty"` - Fee uint64 `protobuf:"varint,5,opt,name=fee,proto3" json:"fee,omitempty"` + Gas int64 `protobuf:"varint,4,opt,name=gas,proto3" json:"gas,omitempty"` + Fee int64 `protobuf:"varint,5,opt,name=fee,proto3" json:"fee,omitempty"` } func (m *ResponseCheckTx) Reset() { *m = ResponseCheckTx{} } @@ -1270,14 +1270,14 @@ func (m *ResponseCheckTx) GetLog() string { return "" } -func (m *ResponseCheckTx) GetGas() uint64 { +func (m *ResponseCheckTx) GetGas() int64 { if m != nil { return m.Gas } return 0 } -func (m *ResponseCheckTx) GetFee() uint64 { +func (m *ResponseCheckTx) GetFee() int64 { if m != nil { return m.Fee } @@ -1290,7 +1290,7 @@ type ResponseQuery struct { Key github_com_tendermint_go_wire_data.Bytes `protobuf:"bytes,3,opt,name=key,proto3,customtype=github.com/tendermint/go-wire/data.Bytes" json:"key"` Value github_com_tendermint_go_wire_data.Bytes `protobuf:"bytes,4,opt,name=value,proto3,customtype=github.com/tendermint/go-wire/data.Bytes" json:"value"` Proof github_com_tendermint_go_wire_data.Bytes `protobuf:"bytes,5,opt,name=proof,proto3,customtype=github.com/tendermint/go-wire/data.Bytes" json:"proof"` - Height uint64 `protobuf:"varint,6,opt,name=height,proto3" json:"height,omitempty"` + Height int64 `protobuf:"varint,6,opt,name=height,proto3" json:"height,omitempty"` Log string `protobuf:"bytes,7,opt,name=log,proto3" json:"log,omitempty"` } @@ -1313,7 +1313,7 @@ func (m *ResponseQuery) GetIndex() int64 { return 0 } -func (m *ResponseQuery) GetHeight() uint64 { +func (m *ResponseQuery) GetHeight() int64 { if m != nil { return m.Height } @@ -1386,9 +1386,9 @@ func (m *ResponseEndBlock) GetDiffs() []*Validator { type Header struct { ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` - Height uint64 `protobuf:"varint,2,opt,name=height,proto3" json:"height,omitempty"` - Time uint64 `protobuf:"varint,3,opt,name=time,proto3" json:"time,omitempty"` - NumTxs uint64 `protobuf:"varint,4,opt,name=num_txs,json=numTxs,proto3" json:"num_txs,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 int64 `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,omitempty"` 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"` @@ -1408,21 +1408,21 @@ func (m *Header) GetChainId() string { return "" } -func (m *Header) GetHeight() uint64 { +func (m *Header) GetHeight() int64 { if m != nil { return m.Height } return 0 } -func (m *Header) GetTime() uint64 { +func (m *Header) GetTime() int64 { if m != nil { return m.Time } return 0 } -func (m *Header) GetNumTxs() uint64 { +func (m *Header) GetNumTxs() int64 { if m != nil { return m.NumTxs } @@ -1489,7 +1489,7 @@ func (m *BlockID) GetParts() *PartSetHeader { } type PartSetHeader struct { - Total uint64 `protobuf:"varint,1,opt,name=total,proto3" json:"total,omitempty"` + Total int64 `protobuf:"varint,1,opt,name=total,proto3" json:"total,omitempty"` Hash []byte `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash,omitempty"` } @@ -1498,7 +1498,7 @@ func (m *PartSetHeader) String() string { return proto.CompactTextStr func (*PartSetHeader) ProtoMessage() {} func (*PartSetHeader) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{27} } -func (m *PartSetHeader) GetTotal() uint64 { +func (m *PartSetHeader) GetTotal() int64 { if m != nil { return m.Total } @@ -1513,8 +1513,8 @@ func (m *PartSetHeader) GetHash() []byte { } type Validator struct { - PubKey []byte `protobuf:"bytes,1,opt,name=pubKey,proto3" json:"pubKey,omitempty"` - Power uint64 `protobuf:"varint,2,opt,name=power,proto3" json:"power,omitempty"` + 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"` } func (m *Validator) Reset() { *m = Validator{} } @@ -1529,7 +1529,7 @@ func (m *Validator) GetPubKey() []byte { return nil } -func (m *Validator) GetPower() uint64 { +func (m *Validator) GetPower() int64 { if m != nil { return m.Power } @@ -2015,98 +2015,98 @@ var _ABCIApplication_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("types/types.proto", fileDescriptorTypes) } var fileDescriptorTypes = []byte{ - // 1485 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcd, 0x8e, 0x13, 0x47, - 0x10, 0x5e, 0xdb, 0xe3, 0xbf, 0xf2, 0xfe, 0x98, 0x66, 0x03, 0xc6, 0x1c, 0x80, 0x91, 0x08, 0xbb, - 0x04, 0xd6, 0x64, 0x11, 0x11, 0x1b, 0xa2, 0x48, 0x6b, 0x16, 0x62, 0x0b, 0x89, 0x90, 0x61, 0xc5, - 0xd5, 0x1a, 0x7b, 0xda, 0xf6, 0x08, 0x7b, 0x66, 0x98, 0x69, 0x2f, 0x5e, 0x29, 0x8f, 0xc0, 0x3d, - 0xe7, 0xe4, 0x12, 0x29, 0x2f, 0x90, 0x37, 0x88, 0xf2, 0x0c, 0x39, 0xf0, 0x2c, 0x51, 0x55, 0xf7, - 0xfc, 0xee, 0x0c, 0x07, 0x0e, 0x5c, 0x56, 0x5d, 0x5d, 0xf5, 0xb5, 0xab, 0x7a, 0xaa, 0xbf, 0xaa, - 0x5a, 0xb8, 0x24, 0xce, 0x3d, 0x1e, 0xf4, 0xe8, 0xef, 0x81, 0xe7, 0xbb, 0xc2, 0x65, 0x55, 0x12, - 0xba, 0xf7, 0x67, 0xb6, 0x98, 0xaf, 0xc6, 0x07, 0x13, 0x77, 0xd9, 0x9b, 0xb9, 0x33, 0xb7, 0x47, - 0xda, 0xf1, 0x6a, 0x4a, 0x12, 0x09, 0xb4, 0x92, 0x28, 0xfd, 0x1f, 0x0d, 0xea, 0x06, 0x7f, 0xb7, - 0xe2, 0x81, 0x60, 0x7b, 0xa0, 0xf1, 0xc9, 0xdc, 0xed, 0x94, 0x6e, 0x96, 0xf6, 0x5a, 0x87, 0xec, - 0x40, 0x9e, 0xae, 0xb4, 0xcf, 0x26, 0x73, 0x77, 0xb0, 0x61, 0x90, 0x05, 0xfb, 0x06, 0xaa, 0xd3, - 0xc5, 0x2a, 0x98, 0x77, 0xca, 0x64, 0x7a, 0x39, 0x6d, 0xfa, 0x1c, 0x55, 0x83, 0x0d, 0x43, 0xda, - 0xe0, 0xb1, 0xb6, 0x33, 0x75, 0x3b, 0x95, 0xbc, 0x63, 0x87, 0xce, 0x94, 0x8e, 0x45, 0x0b, 0xf6, - 0x18, 0x20, 0xe0, 0x62, 0xe4, 0x7a, 0xc2, 0x76, 0x9d, 0x8e, 0x46, 0xf6, 0x57, 0xd3, 0xf6, 0xaf, - 0xb9, 0xf8, 0x99, 0xd4, 0x83, 0x0d, 0xa3, 0x19, 0x84, 0x02, 0x22, 0x2d, 0xbe, 0xb0, 0xcf, 0xb8, - 0x3f, 0x12, 0xeb, 0x4e, 0x35, 0x0f, 0x79, 0x22, 0xf5, 0xa7, 0x6b, 0x44, 0x5a, 0xa1, 0xc0, 0x0e, - 0xa1, 0x31, 0x99, 0xf3, 0xc9, 0x5b, 0xc4, 0xd5, 0x08, 0xf7, 0x55, 0x1a, 0xf7, 0x14, 0xb5, 0x84, - 0xaa, 0x4f, 0xe4, 0x92, 0x1d, 0x40, 0x6d, 0xe2, 0x2e, 0x97, 0xb6, 0xe8, 0xd4, 0x09, 0xb1, 0x9b, - 0x41, 0x90, 0x6e, 0xb0, 0x61, 0x28, 0x2b, 0xbc, 0xae, 0x77, 0x2b, 0xee, 0x9f, 0x77, 0x1a, 0x79, - 0xd7, 0xf5, 0x0b, 0xaa, 0xf0, 0xba, 0xc8, 0x06, 0x43, 0xb1, 0x1d, 0x5b, 0x8c, 0x26, 0x73, 0xd3, - 0x76, 0x3a, 0xcd, 0xbc, 0x50, 0x86, 0x8e, 0x2d, 0x9e, 0xa2, 0x1a, 0x43, 0xb1, 0x43, 0x81, 0x3d, - 0x81, 0xd6, 0x98, 0xcf, 0x6c, 0x67, 0x34, 0x5e, 0xb8, 0x93, 0xb7, 0x1d, 0x20, 0x68, 0x27, 0x0d, - 0xed, 0xa3, 0x41, 0x1f, 0xf5, 0x83, 0x0d, 0x03, 0xc6, 0x91, 0xc4, 0x1e, 0x41, 0x93, 0x3b, 0x96, - 0x82, 0xb6, 0x08, 0x7a, 0x25, 0x93, 0x01, 0x8e, 0x15, 0x02, 0x1b, 0x5c, 0xad, 0xfb, 0x75, 0xa8, - 0x9e, 0x99, 0x8b, 0x15, 0xd7, 0xef, 0x40, 0x2b, 0x91, 0x29, 0xac, 0x03, 0xf5, 0x25, 0x0f, 0x02, - 0x73, 0xc6, 0x29, 0x9d, 0x9a, 0x46, 0x28, 0xea, 0xdb, 0xb0, 0x99, 0xcc, 0x93, 0x04, 0x10, 0x73, - 0x01, 0x81, 0x67, 0xdc, 0x0f, 0x30, 0x01, 0x14, 0x50, 0x89, 0xfa, 0xf7, 0xd0, 0xce, 0x26, 0x01, - 0x6b, 0x43, 0xe5, 0x2d, 0x3f, 0x57, 0x96, 0xb8, 0x64, 0xbb, 0xca, 0x21, 0x4a, 0xcd, 0xa6, 0xa1, - 0xbc, 0xd3, 0x23, 0x6c, 0x94, 0x06, 0x6c, 0x1b, 0xca, 0x62, 0x4d, 0xd0, 0x4d, 0xa3, 0x2c, 0xd6, - 0xfa, 0x4d, 0xd8, 0x4e, 0x7f, 0xf2, 0x0b, 0x16, 0x56, 0xe4, 0x3a, 0x7d, 0x33, 0xc6, 0x40, 0xb3, - 0x4c, 0x61, 0x2a, 0x0b, 0x5a, 0xe3, 0x9e, 0x67, 0x8a, 0xb9, 0xfa, 0x79, 0x5a, 0xb3, 0x2b, 0x50, - 0x9b, 0x73, 0x7b, 0x36, 0x17, 0xf4, 0x06, 0x34, 0x43, 0x49, 0xe8, 0xab, 0xe7, 0xbb, 0x67, 0x9c, - 0x52, 0xbd, 0x61, 0x48, 0x41, 0xdf, 0x81, 0xad, 0x54, 0x22, 0xe9, 0x27, 0x91, 0xf3, 0xd1, 0x87, - 0x67, 0x0f, 0x00, 0xce, 0xcc, 0x85, 0x6d, 0x99, 0xc2, 0xf5, 0x83, 0x4e, 0xe9, 0x66, 0x65, 0xaf, - 0x75, 0xd8, 0x56, 0xdf, 0xeb, 0x4d, 0xa8, 0x30, 0x12, 0x36, 0xfa, 0x4b, 0xb8, 0x74, 0x21, 0x07, - 0xd0, 0xdb, 0xb9, 0x19, 0xcc, 0xc3, 0x08, 0x70, 0xcd, 0x6e, 0xa3, 0xb7, 0xa6, 0xc5, 0x7d, 0xf5, - 0xba, 0xb7, 0xd4, 0xb1, 0x03, 0xda, 0x34, 0x94, 0x52, 0xdf, 0x87, 0x9d, 0x4c, 0x62, 0x24, 0xe2, - 0x2c, 0x25, 0xe3, 0xd4, 0x3f, 0x54, 0xa1, 0x61, 0xf0, 0xc0, 0x73, 0x9d, 0x80, 0xb3, 0xc7, 0xd0, - 0xe4, 0xeb, 0x09, 0x97, 0x6f, 0xbc, 0x94, 0xc9, 0x51, 0x69, 0xf3, 0x2c, 0xd4, 0x63, 0x7e, 0x47, - 0xc6, 0x6c, 0x5f, 0xf1, 0x53, 0x96, 0x74, 0x14, 0x28, 0x49, 0x50, 0xf7, 0x42, 0x82, 0xaa, 0x64, - 0x1e, 0xa8, 0xb4, 0xcd, 0x30, 0xd4, 0xbe, 0x62, 0x28, 0x2d, 0xf7, 0xe0, 0x14, 0x45, 0x1d, 0xa5, - 0x28, 0xaa, 0x9a, 0xeb, 0x7e, 0x01, 0x47, 0x1d, 0xa5, 0x38, 0xaa, 0x96, 0x0b, 0x2d, 0x20, 0xa9, - 0x87, 0x09, 0x92, 0xaa, 0x67, 0xde, 0xa6, 0x04, 0xe6, 0xb0, 0x54, 0x2f, 0x62, 0xa9, 0x46, 0x86, - 0xd7, 0x14, 0x24, 0x4b, 0x53, 0xf7, 0x42, 0x9a, 0x6a, 0xe6, 0x5e, 0x5a, 0x86, 0xa7, 0x8e, 0x52, - 0x3c, 0x05, 0xb9, 0xe1, 0x14, 0x10, 0xd5, 0x0f, 0x69, 0xa2, 0x92, 0x6c, 0x73, 0x2d, 0x83, 0x2d, - 0x64, 0xaa, 0xef, 0x92, 0x4c, 0xb5, 0x99, 0xe1, 0x47, 0x95, 0x0b, 0x9f, 0xa4, 0xaa, 0x7d, 0x7c, - 0x09, 0x99, 0x4c, 0xc3, 0xb7, 0xc8, 0x7d, 0xdf, 0xf5, 0x15, 0x97, 0x48, 0x41, 0xdf, 0xc3, 0x17, - 0x1f, 0xe7, 0xd7, 0x27, 0x68, 0x8d, 0x5e, 0x6d, 0x22, 0xbb, 0xf4, 0xdf, 0x4a, 0x31, 0x96, 0x98, - 0x2d, 0xc9, 0x16, 0x4d, 0xc5, 0x16, 0x09, 0xb6, 0x2b, 0xa7, 0xd8, 0x8e, 0xdd, 0x85, 0x4b, 0x0b, - 0x33, 0x10, 0x32, 0xcc, 0x51, 0x8a, 0x3e, 0x76, 0x50, 0x21, 0xe3, 0x93, 0x3c, 0x72, 0x1f, 0x2e, - 0x27, 0x6c, 0x4d, 0xcf, 0x1b, 0xd1, 0xa3, 0xd6, 0xe8, 0x51, 0xb7, 0x23, 0xeb, 0x63, 0xcf, 0x1b, - 0x98, 0xc1, 0x5c, 0xbf, 0x1d, 0xc7, 0x9f, 0x62, 0xd2, 0x85, 0x3b, 0x0b, 0x99, 0x74, 0xe1, 0xce, - 0xf4, 0x3f, 0x4a, 0xb1, 0x5d, 0xcc, 0x9a, 0x0c, 0xb4, 0x89, 0x6b, 0xc9, 0xf0, 0xb7, 0x0c, 0x5a, - 0xb3, 0x13, 0x15, 0x19, 0x86, 0xb0, 0xd9, 0x7f, 0xf0, 0xef, 0xc7, 0x1b, 0x1b, 0xff, 0x7d, 0xbc, - 0xb1, 0x97, 0xe8, 0x44, 0x04, 0x77, 0x2c, 0xee, 0x2f, 0x6d, 0x47, 0xf4, 0x66, 0xee, 0xfd, 0xf7, - 0xb6, 0xcf, 0x7b, 0x88, 0x38, 0xe8, 0x9f, 0x0b, 0x1e, 0xa8, 0xbb, 0x50, 0x1e, 0x54, 0x22, 0x0f, - 0xd8, 0x2d, 0xd0, 0x84, 0x39, 0x0b, 0x3a, 0x1a, 0xd1, 0x5b, 0xc8, 0x43, 0x2f, 0xde, 0xbc, 0x32, - 0x6d, 0xdf, 0x20, 0x95, 0xfe, 0x7b, 0x09, 0x69, 0x28, 0xf5, 0x06, 0xbe, 0xa8, 0x8b, 0x6d, 0xa8, - 0xcc, 0xcc, 0x80, 0xae, 0x5a, 0x33, 0x70, 0x89, 0x3b, 0x53, 0xce, 0x89, 0x1a, 0x34, 0x03, 0x97, - 0xfa, 0xdf, 0xe5, 0x38, 0x37, 0xa2, 0xc2, 0x71, 0xc1, 0xc3, 0x5d, 0xa8, 0xda, 0x8e, 0xc5, 0xd7, - 0xe4, 0x62, 0xc5, 0x90, 0x02, 0xeb, 0xcb, 0x02, 0x57, 0xf9, 0x4c, 0xb7, 0xa9, 0x24, 0x3e, 0x0f, - 0x4b, 0xa2, 0xf6, 0x99, 0xa7, 0x48, 0x38, 0x9e, 0xe3, 0xf9, 0xae, 0x3b, 0xa5, 0xd8, 0x3e, 0xeb, - 0x1c, 0x82, 0x27, 0xca, 0x44, 0x2d, 0x55, 0x0e, 0xd5, 0xed, 0xd6, 0xe3, 0x14, 0xfc, 0x15, 0x4b, - 0x72, 0x92, 0xad, 0xbe, 0xe4, 0xb7, 0xd5, 0x2f, 0xc7, 0xf9, 0x1f, 0x11, 0x99, 0xbe, 0x0b, 0xec, - 0x22, 0x43, 0xc9, 0xde, 0x24, 0xcd, 0x3d, 0xec, 0x6b, 0xa8, 0x5a, 0xf6, 0x74, 0x5a, 0x5c, 0x9d, - 0xa5, 0x5a, 0xff, 0xb3, 0x0c, 0x35, 0x59, 0x5b, 0xd9, 0x35, 0xe4, 0x79, 0xd3, 0x76, 0x46, 0xb6, - 0x15, 0xf2, 0x0b, 0xc9, 0x43, 0x2b, 0x71, 0x69, 0xe5, 0xd4, 0xa5, 0x31, 0xd0, 0x84, 0xbd, 0xe4, - 0x8a, 0x1a, 0x68, 0xcd, 0xae, 0x42, 0xdd, 0x59, 0x2d, 0x47, 0x62, 0x1d, 0x26, 0x66, 0xcd, 0x59, - 0x2d, 0x4f, 0xd7, 0x01, 0x3b, 0x84, 0xad, 0x04, 0x51, 0xd8, 0x96, 0x2a, 0x60, 0xdb, 0xca, 0x35, - 0xf2, 0x7b, 0x78, 0x62, 0xb4, 0x22, 0xca, 0x18, 0x5a, 0x6c, 0x0f, 0x88, 0x41, 0x46, 0xb2, 0x48, - 0x48, 0x66, 0xa9, 0x11, 0xb3, 0x6c, 0xe3, 0xbe, 0xaa, 0x22, 0xd8, 0x38, 0x5c, 0x87, 0x26, 0xde, - 0xa4, 0x34, 0xa9, 0x93, 0x49, 0x03, 0x37, 0x48, 0x79, 0x07, 0x76, 0xe2, 0x66, 0x44, 0x9a, 0x34, - 0xe4, 0x29, 0xf1, 0x36, 0x19, 0x5e, 0x83, 0x46, 0xc4, 0x60, 0x4d, 0xb2, 0xa8, 0x9b, 0x8a, 0xb8, - 0x86, 0x50, 0x57, 0x2e, 0xe6, 0x36, 0x2e, 0x77, 0xa1, 0xea, 0x99, 0xbe, 0x08, 0x54, 0x83, 0x10, - 0xd6, 0xaf, 0x57, 0xa6, 0x8f, 0x1d, 0xa3, 0x6a, 0x5f, 0xa4, 0x89, 0x7e, 0x04, 0x5b, 0xa9, 0x7d, - 0x7c, 0x7e, 0xc2, 0x15, 0xe6, 0x42, 0xb5, 0x2e, 0x52, 0x88, 0x7e, 0xa6, 0x1c, 0xff, 0x8c, 0x7e, - 0x04, 0xcd, 0xe8, 0x1b, 0xe2, 0x67, 0xf1, 0x56, 0xe3, 0x17, 0xaa, 0x07, 0xdd, 0x34, 0x94, 0x44, - 0xad, 0x9d, 0xfb, 0x5e, 0xf5, 0x50, 0x9a, 0x21, 0x05, 0xfd, 0xaf, 0x12, 0xd4, 0x24, 0x7d, 0xe5, - 0x74, 0xae, 0xdf, 0x52, 0x4b, 0xb7, 0xe2, 0x23, 0x74, 0x9b, 0x70, 0xdb, 0xd1, 0xb4, 0x24, 0x41, - 0x07, 0xa7, 0xe7, 0x1e, 0x37, 0x9a, 0x64, 0x85, 0x4b, 0x76, 0x0b, 0x36, 0x25, 0x24, 0x10, 0xbe, - 0xed, 0x84, 0xc9, 0xdb, 0xa2, 0xbd, 0xd7, 0xb4, 0x85, 0x1f, 0x45, 0x9a, 0xd8, 0x8e, 0xa0, 0x6c, - 0xa8, 0x18, 0x0d, 0xda, 0x18, 0x3a, 0x42, 0xbf, 0x0e, 0x1a, 0x9d, 0x03, 0x50, 0x7b, 0x7d, 0x6a, - 0x0c, 0x5f, 0xfe, 0xd4, 0xde, 0x60, 0x75, 0xa8, 0x0c, 0x5f, 0x9e, 0xb6, 0x4b, 0x87, 0x1f, 0xaa, - 0xb0, 0x73, 0xdc, 0x7f, 0x3a, 0x3c, 0xf6, 0xbc, 0x85, 0x3d, 0x31, 0xa9, 0x4a, 0xf4, 0x40, 0xa3, - 0x3a, 0x98, 0x33, 0x1c, 0x76, 0xf3, 0x1a, 0x32, 0x76, 0x08, 0x55, 0x2a, 0x87, 0x2c, 0x6f, 0x46, - 0xec, 0xe6, 0xf6, 0x65, 0xf8, 0x23, 0xb2, 0x60, 0x5e, 0x1c, 0x15, 0xbb, 0x79, 0xcd, 0x19, 0xfb, - 0x11, 0x9a, 0x71, 0x21, 0x2b, 0x1a, 0x18, 0xbb, 0x85, 0x6d, 0x1a, 0xe2, 0xe3, 0x02, 0x57, 0x34, - 0x36, 0x76, 0x0b, 0x7b, 0x35, 0xf6, 0x18, 0xea, 0x61, 0xed, 0xc9, 0x1f, 0x1e, 0xbb, 0x05, 0xed, - 0x1a, 0x5e, 0x8f, 0xac, 0x08, 0x79, 0x33, 0x61, 0x37, 0xb7, 0x03, 0x63, 0x8f, 0xa0, 0xa6, 0xc8, - 0x30, 0x77, 0xee, 0xec, 0xe6, 0xf7, 0x79, 0x18, 0x64, 0x3c, 0x3e, 0x14, 0x0d, 0x94, 0xdd, 0xc2, - 0x0e, 0x8e, 0x1d, 0x03, 0x24, 0x06, 0x87, 0xc2, 0xb1, 0xb2, 0x5b, 0xdc, 0xc7, 0xb1, 0x27, 0xd0, - 0x88, 0x67, 0x85, 0xfc, 0xe1, 0xb2, 0x5b, 0xd4, 0xca, 0x8d, 0x6b, 0xf4, 0x0f, 0x8b, 0x87, 0xff, - 0x07, 0x00, 0x00, 0xff, 0xff, 0xfe, 0xbb, 0x93, 0x98, 0xfb, 0x10, 0x00, 0x00, + // 1488 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcd, 0x8e, 0x13, 0xc7, + 0x13, 0x5f, 0x7f, 0xdb, 0xe5, 0xfd, 0x30, 0xcd, 0xfe, 0x61, 0x30, 0x07, 0x60, 0x24, 0xfe, 0xec, + 0x12, 0x58, 0x93, 0x45, 0x44, 0x2c, 0x44, 0x91, 0xd6, 0x2c, 0xc4, 0x16, 0x12, 0x21, 0xc3, 0x8a, + 0xab, 0x35, 0xf6, 0xb4, 0xed, 0x11, 0xf6, 0xcc, 0x30, 0xd3, 0x5e, 0xbc, 0x52, 0x1e, 0x81, 0x7b, + 0xce, 0xc9, 0x25, 0x52, 0x5e, 0x20, 0x6f, 0x10, 0xe5, 0x19, 0x72, 0xe0, 0x59, 0xa2, 0xaa, 0xee, + 0xf9, 0xdc, 0x19, 0x0e, 0x1c, 0xb8, 0xac, 0xba, 0xba, 0xea, 0xd7, 0xae, 0xea, 0xa9, 0xfe, 0x55, + 0xd5, 0xc2, 0x25, 0x71, 0xee, 0xf1, 0xa0, 0x47, 0x7f, 0x0f, 0x3c, 0xdf, 0x15, 0x2e, 0xab, 0x91, + 0xd0, 0xbd, 0x3f, 0xb3, 0xc5, 0x7c, 0x35, 0x3e, 0x98, 0xb8, 0xcb, 0xde, 0xcc, 0x9d, 0xb9, 0x3d, + 0xd2, 0x8e, 0x57, 0x53, 0x92, 0x48, 0xa0, 0x95, 0x44, 0xe9, 0x7f, 0x57, 0xa1, 0x61, 0xf0, 0xf7, + 0x2b, 0x1e, 0x08, 0xb6, 0x07, 0x55, 0x3e, 0x99, 0xbb, 0x5a, 0xe9, 0x66, 0x69, 0xaf, 0x7d, 0xc8, + 0x0e, 0xe4, 0xe9, 0x4a, 0xfb, 0x7c, 0x32, 0x77, 0x07, 0x1b, 0x06, 0x59, 0xb0, 0x6f, 0xa0, 0x36, + 0x5d, 0xac, 0x82, 0xb9, 0x56, 0x26, 0xd3, 0xcb, 0x69, 0xd3, 0x17, 0xa8, 0x1a, 0x6c, 0x18, 0xd2, + 0x06, 0x8f, 0xb5, 0x9d, 0xa9, 0xab, 0x55, 0xf2, 0x8e, 0x1d, 0x3a, 0x53, 0x3a, 0x16, 0x2d, 0xd8, + 0x63, 0x80, 0x80, 0x8b, 0x91, 0xeb, 0x09, 0xdb, 0x75, 0xb4, 0x2a, 0xd9, 0x5f, 0x4d, 0xdb, 0xbf, + 0xe1, 0xe2, 0x27, 0x52, 0x0f, 0x36, 0x8c, 0x56, 0x10, 0x0a, 0x88, 0xb4, 0xf8, 0xc2, 0x3e, 0xe3, + 0xfe, 0x48, 0xac, 0xb5, 0x5a, 0x1e, 0xf2, 0x44, 0xea, 0x4f, 0xd7, 0x88, 0xb4, 0x42, 0x81, 0x1d, + 0x42, 0x73, 0x32, 0xe7, 0x93, 0x77, 0x88, 0xab, 0x13, 0xee, 0x7f, 0x69, 0xdc, 0x33, 0xd4, 0x12, + 0xaa, 0x31, 0x91, 0x4b, 0x76, 0x00, 0xf5, 0x89, 0xbb, 0x5c, 0xda, 0x42, 0x6b, 0x10, 0x62, 0x37, + 0x83, 0x20, 0xdd, 0x60, 0xc3, 0x50, 0x56, 0x78, 0x5d, 0xef, 0x57, 0xdc, 0x3f, 0xd7, 0x9a, 0x79, + 0xd7, 0xf5, 0x33, 0xaa, 0xf0, 0xba, 0xc8, 0x06, 0x43, 0xb1, 0x1d, 0x5b, 0x8c, 0x26, 0x73, 0xd3, + 0x76, 0xb4, 0x56, 0x5e, 0x28, 0x43, 0xc7, 0x16, 0xcf, 0x50, 0x8d, 0xa1, 0xd8, 0xa1, 0xc0, 0x9e, + 0x42, 0x7b, 0xcc, 0x67, 0xb6, 0x33, 0x1a, 0x2f, 0xdc, 0xc9, 0x3b, 0x0d, 0x08, 0xaa, 0xa5, 0xa1, + 0x7d, 0x34, 0xe8, 0xa3, 0x7e, 0xb0, 0x61, 0xc0, 0x38, 0x92, 0xd8, 0x23, 0x68, 0x71, 0xc7, 0x52, + 0xd0, 0x36, 0x41, 0xaf, 0x64, 0x32, 0xc0, 0xb1, 0x42, 0x60, 0x93, 0xab, 0x75, 0xbf, 0x01, 0xb5, + 0x33, 0x73, 0xb1, 0xe2, 0xfa, 0x1d, 0x68, 0x27, 0x32, 0x85, 0x69, 0xd0, 0x58, 0xf2, 0x20, 0x30, + 0x67, 0x9c, 0xd2, 0xa9, 0x65, 0x84, 0xa2, 0xbe, 0x0d, 0x9b, 0xc9, 0x3c, 0x49, 0x00, 0x31, 0x17, + 0x10, 0x78, 0xc6, 0xfd, 0x00, 0x13, 0x40, 0x01, 0x95, 0xa8, 0x3f, 0x81, 0x4e, 0x36, 0x09, 0x58, + 0x07, 0x2a, 0xef, 0xf8, 0xb9, 0xb2, 0xc4, 0x25, 0xdb, 0x55, 0x0e, 0x51, 0x6a, 0xb6, 0x0c, 0xe5, + 0x9d, 0x1e, 0x61, 0xa3, 0x34, 0x60, 0xdb, 0x50, 0x16, 0x6b, 0x82, 0x6e, 0x1a, 0x65, 0xb1, 0xd6, + 0x6f, 0xc2, 0x76, 0xfa, 0x93, 0x5f, 0xb0, 0xb0, 0x22, 0xd7, 0xe9, 0x9b, 0x31, 0x06, 0x55, 0xcb, + 0x14, 0xa6, 0xb2, 0xa0, 0x35, 0xee, 0x79, 0xa6, 0x98, 0xab, 0x9f, 0xa7, 0x35, 0xbb, 0x02, 0xf5, + 0x39, 0xb7, 0x67, 0x73, 0x41, 0x6f, 0xa0, 0x62, 0x28, 0x09, 0x7d, 0xf5, 0x7c, 0xf7, 0x8c, 0x53, + 0xaa, 0x37, 0x0d, 0x29, 0xe8, 0x3b, 0xb0, 0x95, 0x4a, 0x24, 0xfd, 0x24, 0x72, 0x3e, 0xfa, 0xf0, + 0xec, 0x01, 0xc0, 0x99, 0xb9, 0xb0, 0x2d, 0x53, 0xb8, 0x7e, 0xa0, 0x95, 0x6e, 0x56, 0xf6, 0xda, + 0x87, 0x1d, 0xf5, 0xbd, 0xde, 0x86, 0x0a, 0x23, 0x61, 0xa3, 0xbf, 0x82, 0x4b, 0x17, 0x72, 0x00, + 0xbd, 0x9d, 0x9b, 0xc1, 0x3c, 0x8c, 0x00, 0xd7, 0xec, 0x36, 0x7a, 0x6b, 0x5a, 0xdc, 0x57, 0xaf, + 0x7b, 0x4b, 0x1d, 0x3b, 0xa0, 0x4d, 0x43, 0x29, 0xf5, 0x7d, 0xd8, 0xc9, 0x24, 0x46, 0x22, 0xce, + 0x52, 0x32, 0x4e, 0xfd, 0x63, 0x0d, 0x9a, 0x06, 0x0f, 0x3c, 0xd7, 0x09, 0x38, 0x7b, 0x0c, 0x2d, + 0xbe, 0x9e, 0x70, 0xf9, 0xc6, 0x4b, 0x99, 0x1c, 0x95, 0x36, 0xcf, 0x43, 0x3d, 0xe6, 0x77, 0x64, + 0xcc, 0xf6, 0x15, 0x3f, 0x65, 0x49, 0x47, 0x81, 0x92, 0x04, 0x75, 0x2f, 0x24, 0xa8, 0x4a, 0xe6, + 0x81, 0x4a, 0xdb, 0x0c, 0x43, 0xed, 0x2b, 0x86, 0xaa, 0xe6, 0x1e, 0x9c, 0xa2, 0xa8, 0xa3, 0x14, + 0x45, 0xd5, 0x72, 0xdd, 0x2f, 0xe0, 0xa8, 0xa3, 0x14, 0x47, 0xd5, 0x73, 0xa1, 0x05, 0x24, 0xf5, + 0x30, 0x41, 0x52, 0x8d, 0xcc, 0xdb, 0x94, 0xc0, 0x1c, 0x96, 0xea, 0x45, 0x2c, 0xd5, 0xcc, 0xf0, + 0x9a, 0x82, 0x64, 0x69, 0xea, 0x5e, 0x48, 0x53, 0xad, 0xdc, 0x4b, 0xcb, 0xf0, 0xd4, 0x51, 0x8a, + 0xa7, 0x20, 0x37, 0x9c, 0x02, 0xa2, 0xfa, 0x3e, 0x4d, 0x54, 0x92, 0x6d, 0xae, 0x65, 0xb0, 0x85, + 0x4c, 0xf5, 0x5d, 0x92, 0xa9, 0x36, 0x33, 0xfc, 0xa8, 0x72, 0xe1, 0xb3, 0x54, 0xb5, 0x8f, 0x2f, + 0x21, 0x93, 0x69, 0xf8, 0x16, 0xb9, 0xef, 0xbb, 0xbe, 0xe2, 0x12, 0x29, 0xe8, 0x7b, 0xf8, 0xe2, + 0xe3, 0xfc, 0xfa, 0x0c, 0xad, 0xd1, 0xab, 0x4d, 0x64, 0x97, 0xfe, 0x6b, 0x29, 0xc6, 0x12, 0xb3, + 0x25, 0xd9, 0xa2, 0xa5, 0xd8, 0x22, 0xc1, 0x76, 0xe5, 0x14, 0xdb, 0xb1, 0xbb, 0x70, 0x69, 0x61, + 0x06, 0x42, 0x86, 0x39, 0x4a, 0xd1, 0xc7, 0x0e, 0x2a, 0x64, 0x7c, 0x92, 0x47, 0xee, 0xc3, 0xe5, + 0x84, 0xad, 0xe9, 0x79, 0x23, 0x7a, 0xd4, 0x55, 0x7a, 0xd4, 0x9d, 0xc8, 0xfa, 0xd8, 0xf3, 0x06, + 0x66, 0x30, 0xd7, 0x6f, 0xc7, 0xf1, 0xa7, 0x98, 0x74, 0xe1, 0xce, 0x42, 0x26, 0x5d, 0xb8, 0x33, + 0xfd, 0xf7, 0x52, 0x6c, 0x17, 0xb3, 0x26, 0x83, 0xea, 0xc4, 0xb5, 0x64, 0xf8, 0x5b, 0x06, 0xad, + 0xd9, 0x89, 0x8a, 0x0c, 0x43, 0xd8, 0xec, 0x3f, 0xf8, 0xe7, 0xd3, 0x8d, 0x8d, 0x7f, 0x3f, 0xdd, + 0xd8, 0x4b, 0x74, 0x22, 0x82, 0x3b, 0x16, 0xf7, 0x97, 0xb6, 0x23, 0x7a, 0x33, 0xf7, 0xfe, 0x07, + 0xdb, 0xe7, 0x3d, 0x44, 0x1c, 0xf4, 0xcf, 0x05, 0x0f, 0xd4, 0x5d, 0x28, 0x0f, 0x2a, 0x91, 0x07, + 0xec, 0x16, 0x54, 0x85, 0x39, 0x0b, 0xb4, 0x2a, 0xd1, 0x5b, 0xc8, 0x43, 0x2f, 0xdf, 0xbe, 0x36, + 0x6d, 0xdf, 0x20, 0x95, 0xfe, 0x5b, 0x09, 0x69, 0x28, 0xf5, 0x06, 0xbe, 0xaa, 0x8b, 0x1d, 0xa8, + 0xcc, 0xcc, 0x80, 0xae, 0xba, 0x62, 0xe0, 0x12, 0x77, 0xa6, 0x9c, 0x13, 0x35, 0x54, 0x0c, 0x5c, + 0xea, 0x7f, 0x95, 0xe3, 0xdc, 0x88, 0x0a, 0xc7, 0x05, 0x0f, 0x77, 0xa1, 0x66, 0x3b, 0x16, 0x5f, + 0x93, 0x8b, 0x15, 0x43, 0x0a, 0xac, 0x2f, 0x0b, 0x5c, 0xe5, 0x0b, 0xdd, 0xa6, 0x92, 0xf8, 0x22, + 0x2c, 0x89, 0xd5, 0x2f, 0x3c, 0x45, 0xc2, 0xf1, 0x1c, 0xcf, 0x77, 0xdd, 0x29, 0xc5, 0xf6, 0x45, + 0xe7, 0x10, 0x3c, 0x51, 0x26, 0xea, 0xa9, 0x72, 0xa8, 0x6e, 0xb7, 0x11, 0xa7, 0xe0, 0x2f, 0x58, + 0x92, 0x93, 0x6c, 0xf5, 0x35, 0xbf, 0xad, 0x7e, 0x39, 0xce, 0xff, 0x88, 0xc8, 0xf4, 0x5d, 0x60, + 0x17, 0x19, 0x4a, 0xf6, 0x26, 0x69, 0xee, 0x61, 0xff, 0x87, 0x9a, 0x65, 0x4f, 0xa7, 0xc5, 0xd5, + 0x59, 0xaa, 0xf5, 0x3f, 0xca, 0x50, 0x97, 0xb5, 0x95, 0x5d, 0x43, 0x9e, 0x37, 0x6d, 0x67, 0x64, + 0x5b, 0x21, 0xbf, 0x90, 0x3c, 0xb4, 0x12, 0x97, 0x56, 0x4e, 0x5d, 0x1a, 0x83, 0xaa, 0xb0, 0x97, + 0x5c, 0x51, 0x03, 0xad, 0xd9, 0x55, 0x68, 0x38, 0xab, 0xe5, 0x48, 0xac, 0xc3, 0xc4, 0xac, 0x3b, + 0xab, 0xe5, 0xe9, 0x3a, 0x60, 0x87, 0xb0, 0x95, 0x20, 0x0a, 0xdb, 0x52, 0x05, 0x6c, 0x5b, 0xb9, + 0x46, 0x7e, 0x0f, 0x4f, 0x8c, 0x76, 0x44, 0x19, 0x43, 0x8b, 0xed, 0x01, 0x31, 0xc8, 0x48, 0x16, + 0x09, 0xc9, 0x2c, 0x75, 0x62, 0x96, 0x6d, 0xdc, 0x57, 0x55, 0x04, 0x1b, 0x87, 0xeb, 0xd0, 0xc2, + 0x9b, 0x94, 0x26, 0x0d, 0x32, 0x69, 0xe2, 0x06, 0x29, 0xef, 0xc0, 0x4e, 0xdc, 0x8c, 0x48, 0x93, + 0xa6, 0x3c, 0x25, 0xde, 0x26, 0xc3, 0x6b, 0xd0, 0x8c, 0x18, 0xac, 0x45, 0x16, 0x0d, 0x53, 0x11, + 0xd7, 0x10, 0x1a, 0xca, 0xc5, 0xdc, 0xc6, 0xe5, 0x2e, 0xd4, 0x3c, 0xd3, 0x17, 0x81, 0x6a, 0x10, + 0xc2, 0xfa, 0xf5, 0xda, 0xf4, 0xb1, 0x63, 0x54, 0xed, 0x8b, 0x34, 0xd1, 0x8f, 0x60, 0x2b, 0xb5, + 0x8f, 0xcf, 0x4f, 0xb8, 0xc2, 0x5c, 0xa8, 0xd6, 0x45, 0x0a, 0xd1, 0xcf, 0x94, 0xe3, 0x9f, 0xd1, + 0x9f, 0x40, 0x2b, 0xfa, 0x86, 0x78, 0xd5, 0xde, 0x6a, 0x3c, 0x0a, 0x9b, 0xd0, 0x4d, 0xa3, 0xee, + 0xad, 0xc6, 0x2f, 0x65, 0x1f, 0xea, 0xb9, 0x1f, 0x54, 0x13, 0x55, 0x31, 0xa4, 0xa0, 0xff, 0x59, + 0x82, 0xba, 0xe4, 0xaf, 0x9c, 0xd6, 0xf5, 0x5b, 0xea, 0xe9, 0x56, 0x7c, 0x84, 0x7e, 0x13, 0x6e, + 0x3b, 0x1a, 0x97, 0x24, 0xe8, 0xe0, 0xf4, 0xdc, 0xe3, 0x46, 0x8b, 0xac, 0x70, 0xc9, 0x6e, 0xc1, + 0xa6, 0x84, 0x04, 0xc2, 0xb7, 0x9d, 0x30, 0x7b, 0xdb, 0xb4, 0xf7, 0x86, 0xb6, 0xf0, 0xab, 0x48, + 0x13, 0xdb, 0x11, 0x2a, 0x1d, 0x9a, 0xb4, 0x31, 0x74, 0x84, 0x7e, 0x1d, 0xaa, 0x74, 0x0e, 0x40, + 0xfd, 0xcd, 0xa9, 0x31, 0x7c, 0xf5, 0x63, 0x67, 0x83, 0x35, 0xa0, 0x32, 0x7c, 0x75, 0xda, 0x29, + 0x1d, 0x7e, 0xac, 0xc1, 0xce, 0x71, 0xff, 0xd9, 0xf0, 0xd8, 0xf3, 0x16, 0xf6, 0xc4, 0xa4, 0x32, + 0xd1, 0x83, 0x2a, 0x15, 0xc2, 0x9c, 0xe9, 0xb0, 0x9b, 0xd7, 0x91, 0xb1, 0x43, 0xa8, 0x51, 0x3d, + 0x64, 0x79, 0x43, 0x62, 0x37, 0xb7, 0x31, 0xc3, 0x1f, 0x91, 0x15, 0xf3, 0xe2, 0xac, 0xd8, 0xcd, + 0xeb, 0xce, 0xd8, 0x0f, 0xd0, 0x8a, 0x2b, 0x59, 0xd1, 0xc4, 0xd8, 0x2d, 0xec, 0xd3, 0x10, 0x1f, + 0x57, 0xb8, 0xa2, 0xb9, 0xb1, 0x5b, 0xd8, 0xac, 0xb1, 0xc7, 0xd0, 0x08, 0x8b, 0x4f, 0xfe, 0xf4, + 0xd8, 0x2d, 0xe8, 0xd7, 0xf0, 0x7a, 0x64, 0x49, 0xc8, 0x1b, 0x0a, 0xbb, 0xb9, 0x2d, 0x18, 0x7b, + 0x04, 0x75, 0xc5, 0x86, 0xb9, 0x83, 0x67, 0x37, 0xbf, 0xd1, 0xc3, 0x20, 0xe3, 0xf9, 0xa1, 0x68, + 0xa2, 0xec, 0x16, 0xb6, 0x70, 0xec, 0x18, 0x20, 0x31, 0x39, 0x14, 0xce, 0x95, 0xdd, 0xe2, 0x46, + 0x8e, 0x3d, 0x85, 0x66, 0x3c, 0x2c, 0xe4, 0x4f, 0x97, 0xdd, 0xa2, 0x5e, 0x6e, 0x5c, 0xa7, 0xff, + 0x58, 0x3c, 0xfc, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x34, 0x61, 0x21, 0x91, 0xfc, 0x10, 0x00, 0x00, } diff --git a/types/types.proto b/types/types.proto index 2754a362..d40e8885 100644 --- a/types/types.proto +++ b/types/types.proto @@ -52,7 +52,7 @@ message RequestCheckTx{ message RequestQuery{ bytes data = 1; string path = 2; - uint64 height = 3; + int64 height = 3; bool prove = 4; } @@ -69,7 +69,7 @@ message RequestBeginBlock{ } message RequestEndBlock{ - uint64 height = 1; + int64 height = 1; } //---------------------------------------- @@ -107,7 +107,7 @@ message ResponseFlush{ message ResponseInfo { string data = 1; string version = 2; - uint64 last_block_height = 3; + int64 last_block_height = 3; bytes last_block_app_hash = 4; } @@ -126,8 +126,8 @@ message ResponseCheckTx{ uint32 code = 1; bytes data = 2 [(gogoproto.customtype) = "github.com/tendermint/go-wire/data.Bytes", (gogoproto.nullable) = false]; string log = 3; - uint64 gas = 4; - uint64 fee = 5; + int64 gas = 4; + int64 fee = 5; } message ResponseQuery{ @@ -136,7 +136,7 @@ message ResponseQuery{ bytes key = 3 [(gogoproto.customtype) = "github.com/tendermint/go-wire/data.Bytes", (gogoproto.nullable) = false]; bytes value = 4 [(gogoproto.customtype) = "github.com/tendermint/go-wire/data.Bytes", (gogoproto.nullable) = false]; bytes proof = 5 [(gogoproto.customtype) = "github.com/tendermint/go-wire/data.Bytes", (gogoproto.nullable) = false]; - uint64 height = 6; + int64 height = 6; string log = 7; } @@ -162,9 +162,9 @@ message ResponseEndBlock{ message Header { string chain_id = 1; - uint64 height = 2; - uint64 time = 3; - uint64 num_txs = 4; + int64 height = 2; + int64 time = 3; + int64 num_txs = 4; BlockID last_block_id = 5; bytes last_commit_hash = 6; bytes data_hash = 7; @@ -178,13 +178,13 @@ message BlockID { } message PartSetHeader { - uint64 total = 1; + int64 total = 1; bytes hash = 2; } message Validator { - bytes pubKey = 1; - uint64 power = 2; + bytes pub_key = 1; + int64 power = 2; } //---------------------------------------- diff --git a/types/validators.go b/types/validators.go index 95258aa2..6bbe3f84 100644 --- a/types/validators.go +++ b/types/validators.go @@ -8,8 +8,7 @@ import ( cmn "github.com/tendermint/tmlibs/common" ) -// validators implements sort - +// Validators is a list of validators that implements the Sort interface type Validators []*Validator func (v Validators) Len() int { @@ -31,7 +30,7 @@ func (v Validators) Swap(i, j int) { type validatorPretty struct { PubKey data.Bytes `json:"pub_key"` - Power uint64 `json:"power"` + Power int64 `json:"power"` } func ValidatorsString(vs Validators) string { From b7a75ce8c31f19730e64c1485b4b2f53f038f9e7 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Fri, 1 Dec 2017 01:16:00 -0500 Subject: [PATCH 3/8] update readme --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index f2546c00..0deec181 100644 --- a/README.md +++ b/README.md @@ -102,8 +102,8 @@ Here, we describe the requests and responses as function arguments and return va * `Code (uint32)`: Response code * `Data ([]byte)`: Result bytes, if any * `Log (string)`: Debug or error message - * `Gas (uint64)`: Amount of gas consumed by transaction - * `Fee (uint64)`: Fee paid by transaction + * `Gas (int64)`: Amount of gas consumed by transaction + * `Fee (int64)`: Fee paid by transaction * __Usage__:
Validate a mempool transaction, prior to broadcasting or proposing. This message should not mutate the main state, but application developers may want to keep a separate CheckTx state that gets reset upon Commit. @@ -127,14 +127,14 @@ Here, we describe the requests and responses as function arguments and return va * `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 (uint64)`: 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 + * `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 * `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 (uint64)`: 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 + * `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 * `Log (string)`: Debug or error message *Please note* The current implementation of go-merkle doesn't support querying proofs from past blocks, so for the present moment, any height other than 0 will return an error (recall height=0 defaults to latest block). Hopefully this will be improved soon(ish) @@ -142,7 +142,7 @@ Here, we describe the requests and responses as function arguments and return va * __Returns__: * `Data (string)`: Some arbitrary information * `Version (Version)`: Version information - * `LastBlockHeight (uint64)`: Latest block for which the app has called Commit + * `LastBlockHeight (int64)`: Latest block for which the app has called Commit * `LastBlockAppHash ([]byte)`: Latest result of Commit * __Usage__:
@@ -173,7 +173,7 @@ Here, we describe the requests and responses as function arguments and return va #### EndBlock * __Arguments__: - * `Height (uint64)`: The block height that ended + * `Height (int64)`: The block height that ended * __Returns__: * `Diffs ([]Validator)`: Changed validators with new voting powers (0 to remove) * __Usage__:
From b39e768a1af4ece98e60de2ae3ba480a4ce041d5 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Fri, 1 Dec 2017 02:50:17 -0500 Subject: [PATCH 4/8] disable metalinter on CI --- circle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/circle.yml b/circle.yml index c6904fae..7d4545e5 100644 --- a/circle.yml +++ b/circle.yml @@ -16,7 +16,7 @@ checkout: test: override: - - cd $REPO && make get_vendor_deps && make metalinter_test && make test_integrations + - cd $REPO && make get_vendor_deps && make test_integrations post: - cd "$REPO" && bash <(curl -s https://codecov.io/bash) -f coverage.txt - cd "$REPO" && mv coverage.txt "${CIRCLE_ARTIFACTS}" From 3d3d1288d1bdd2255fd9002b00b1615deef1b0b5 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Fri, 1 Dec 2017 00:51:20 -0500 Subject: [PATCH 5/8] types: consolidate some file --- types/application.go | 52 +++++++++++++++++++++++++- types/base_app.go | 44 ---------------------- types/kvpair.go | 19 ---------- types/{validators.go => util.go} | 34 +++++++++++++---- types/{kvpair_test.go => util_test.go} | 0 5 files changed, 78 insertions(+), 71 deletions(-) delete mode 100644 types/base_app.go delete mode 100644 types/kvpair.go rename types/{validators.go => util.go} (60%) rename types/{kvpair_test.go => util_test.go} (100%) diff --git a/types/application.go b/types/application.go index bb9a0030..f0ce1895 100644 --- a/types/application.go +++ b/types/application.go @@ -25,7 +25,57 @@ type Application interface { Commit() ResponseCommit // Commit the state and return the application Merkle root hash } -//------------------------------------ +//------------------------------------------------------- +// BaseApplication is a base form of Application + +var _ Application = (*BaseApplication)(nil) + +type BaseApplication struct { +} + +func NewBaseApplication() *BaseApplication { + return &BaseApplication{} +} + +func (BaseApplication) Info(req RequestInfo) ResponseInfo { + return ResponseInfo{} +} + +func (BaseApplication) SetOption(req RequestSetOption) ResponseSetOption { + return ResponseSetOption{} +} + +func (BaseApplication) DeliverTx(tx []byte) ResponseDeliverTx { + return ResponseDeliverTx{Code: CodeTypeOK} +} + +func (BaseApplication) CheckTx(tx []byte) ResponseCheckTx { + return ResponseCheckTx{Code: CodeTypeOK} +} + +func (BaseApplication) Commit() ResponseCommit { + return ResponseCommit{Code: CodeTypeOK} +} + +func (BaseApplication) Query(req RequestQuery) ResponseQuery { + return ResponseQuery{Code: CodeTypeOK} +} + +func (BaseApplication) InitChain(req RequestInitChain) ResponseInitChain { + return ResponseInitChain{} +} + +func (BaseApplication) BeginBlock(req RequestBeginBlock) ResponseBeginBlock { + return ResponseBeginBlock{} +} + +func (BaseApplication) EndBlock(req RequestEndBlock) ResponseEndBlock { + return ResponseEndBlock{} +} + +//------------------------------------------------------- + +var _ Application = (*GRPCApplication)(nil) // GRPCApplication is a GRPC wrapper for Application type GRPCApplication struct { diff --git a/types/base_app.go b/types/base_app.go deleted file mode 100644 index 1998e9dc..00000000 --- a/types/base_app.go +++ /dev/null @@ -1,44 +0,0 @@ -package types - -type BaseApplication struct { -} - -func NewBaseApplication() *BaseApplication { - return &BaseApplication{} -} - -func (BaseApplication) Info(req RequestInfo) ResponseInfo { - return ResponseInfo{} -} - -func (BaseApplication) SetOption(req RequestSetOption) ResponseSetOption { - return ResponseSetOption{} -} - -func (BaseApplication) DeliverTx(tx []byte) ResponseDeliverTx { - return ResponseDeliverTx{Code: CodeTypeOK} -} - -func (BaseApplication) CheckTx(tx []byte) ResponseCheckTx { - return ResponseCheckTx{Code: CodeTypeOK} -} - -func (BaseApplication) Commit() ResponseCommit { - return ResponseCommit{Code: CodeTypeOK} -} - -func (BaseApplication) Query(req RequestQuery) ResponseQuery { - return ResponseQuery{Code: CodeTypeOK} -} - -func (BaseApplication) InitChain(req RequestInitChain) ResponseInitChain { - return ResponseInitChain{} -} - -func (BaseApplication) BeginBlock(req RequestBeginBlock) ResponseBeginBlock { - return ResponseBeginBlock{} -} - -func (BaseApplication) EndBlock(req RequestEndBlock) ResponseEndBlock { - return ResponseEndBlock{} -} diff --git a/types/kvpair.go b/types/kvpair.go deleted file mode 100644 index c7aad440..00000000 --- a/types/kvpair.go +++ /dev/null @@ -1,19 +0,0 @@ -package types - -// KVPairInt is a helper method to build KV pair with an integer value. -func KVPairInt(key string, val int64) *KVPair { - return &KVPair{ - Key: key, - ValueInt: val, - ValueType: KVPair_INT, - } -} - -// KVPairString is a helper method to build KV pair with a string value. -func KVPairString(key, val string) *KVPair { - return &KVPair{ - Key: key, - ValueString: val, - ValueType: KVPair_STRING, - } -} diff --git a/types/validators.go b/types/util.go similarity index 60% rename from types/validators.go rename to types/util.go index 6bbe3f84..17c53f65 100644 --- a/types/validators.go +++ b/types/util.go @@ -8,6 +8,8 @@ import ( cmn "github.com/tendermint/tmlibs/common" ) +//------------------------------------------------------------------------------ + // Validators is a list of validators that implements the Sort interface type Validators []*Validator @@ -26,13 +28,6 @@ func (v Validators) Swap(i, j int) { v[j] = v1 } -//------------------------------------- - -type validatorPretty struct { - PubKey data.Bytes `json:"pub_key"` - Power int64 `json:"power"` -} - func ValidatorsString(vs Validators) string { s := make([]validatorPretty, len(vs)) for i, v := range vs { @@ -44,3 +39,28 @@ func ValidatorsString(vs Validators) string { } return string(b) } + +type validatorPretty struct { + PubKey data.Bytes `json:"pub_key"` + Power int64 `json:"power"` +} + +//------------------------------------------------------------------------------ + +// KVPairInt is a helper method to build KV pair with an integer value. +func KVPairInt(key string, val int64) *KVPair { + return &KVPair{ + Key: key, + ValueInt: val, + ValueType: KVPair_INT, + } +} + +// KVPairString is a helper method to build KV pair with a string value. +func KVPairString(key, val string) *KVPair { + return &KVPair{ + Key: key, + ValueString: val, + ValueType: KVPair_STRING, + } +} diff --git a/types/kvpair_test.go b/types/util_test.go similarity index 100% rename from types/kvpair_test.go rename to types/util_test.go From 9272756c498e524273baff0ec5c6578e5fae5de4 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Fri, 1 Dec 2017 01:05:13 -0500 Subject: [PATCH 6/8] types: add note about ReadMessage having no cap --- types/application.go | 2 -- types/messages.go | 50 +++++++++++++++++++++--------------------- types/messages_test.go | 28 +++++++++++++++++++++++ 3 files changed, 53 insertions(+), 27 deletions(-) create mode 100644 types/messages_test.go diff --git a/types/application.go b/types/application.go index f0ce1895..6c0b8bd0 100644 --- a/types/application.go +++ b/types/application.go @@ -75,8 +75,6 @@ func (BaseApplication) EndBlock(req RequestEndBlock) ResponseEndBlock { //------------------------------------------------------- -var _ Application = (*GRPCApplication)(nil) - // GRPCApplication is a GRPC wrapper for Application type GRPCApplication struct { app Application diff --git a/types/messages.go b/types/messages.go index 7b9c81f9..5ce234cf 100644 --- a/types/messages.go +++ b/types/messages.go @@ -7,6 +7,31 @@ import ( wire "github.com/tendermint/go-wire" ) +// WriteMessage writes a length-delimited protobuf message. +func WriteMessage(msg proto.Message, w io.Writer) error { + bz, err := proto.Marshal(msg) + if err != nil { + return err + } + var n int + wire.WriteByteSlice(bz, w, &n, &err) + return err +} + +// ReadMessage reads a length delimited protobuf message. +func ReadMessage(r io.Reader, msg proto.Message) error { + var n int + var err error + bz := wire.ReadByteSlice(r, 0, &n, &err) //XXX: no max + if err != nil { + return err + } + err = proto.Unmarshal(bz, msg) + return err +} + +//---------------------------------------- + func ToRequestEcho(message string) *Request { return &Request{ Value: &Request_Echo{&RequestEcho{message}}, @@ -146,28 +171,3 @@ func ToResponseEndBlock(res ResponseEndBlock) *Response { Value: &Response_EndBlock{&res}, } } - -//---------------------------------------- - -// Write proto message, length delimited -func WriteMessage(msg proto.Message, w io.Writer) error { - bz, err := proto.Marshal(msg) - if err != nil { - return err - } - var n int - wire.WriteByteSlice(bz, w, &n, &err) - return err -} - -// Read proto message, length delimited -func ReadMessage(r io.Reader, msg proto.Message) error { - var n int - var err error - bz := wire.ReadByteSlice(r, 0, &n, &err) - if err != nil { - return err - } - err = proto.Unmarshal(bz, msg) - return err -} diff --git a/types/messages_test.go b/types/messages_test.go new file mode 100644 index 00000000..7f078979 --- /dev/null +++ b/types/messages_test.go @@ -0,0 +1,28 @@ +package types + +import ( + "bytes" + "testing" + + "github.com/gogo/protobuf/proto" + "github.com/stretchr/testify/assert" +) + +func TestWriteReadMessage(t *testing.T) { + cases := []proto.Message{ + &RequestEcho{"hello"}, + // TODO: add the rest + } + + for _, c := range cases { + buf := new(bytes.Buffer) + err := WriteMessage(c, buf) + assert.Nil(t, err) + + msg := new(RequestEcho) + err = ReadMessage(buf, msg) + assert.Nil(t, err) + + assert.Equal(t, c, msg) + } +} From b20273439de2d532f8480c6557f2ebff0854ac69 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Fri, 1 Dec 2017 01:09:16 -0500 Subject: [PATCH 7/8] types: RequestBeginBlock includes absent and byzantine validators --- CHANGELOG.md | 7 +- Makefile | 6 +- README.md | 4 +- types/types.pb.go | 242 +++++++++++++++++++++++++++------------------- types/types.proto | 7 ++ 5 files changed, 161 insertions(+), 105 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b1449a43..5395989f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,9 +17,10 @@ BREAKING CHANGES: - [abci-cli] codes are printed as their number instead of a message, except for `code == 0`, which is still printed as `OK` FEATURES: - - [types] added Tags field to ResponseDeliverTx - - [types] added Gas and Fee fields to ResponseCheckTx - - [dummy] DeliverTx returns tags + - [types] ResponseDeliverTx: added `tags` field + - [types] ResponseCheckTx: added `gas` and `fee` fields + - [types] RequestBeginBlock: added `absent_validators` and `byzantine_validators` fields + - [dummy] DeliverTx returns an owner tag and a key tag - [abci-cli] added `log_level` flag to control the logger ## 0.7.1 (November 14, 2017) diff --git a/Makefile b/Makefile index ebe8f3a9..d2384ae4 100644 --- a/Makefile +++ b/Makefile @@ -26,7 +26,7 @@ protoc: ## On "error while loading shared libraries: libprotobuf.so.14: cannot open shared object file: No such file or directory" ## ldconfig (may require sudo) ## https://stackoverflow.com/a/25518702 - protoc $(INCLUDE) --gogo_out=plugins=grpc:. types/*.proto + protoc $(INCLUDE) --gogo_out=plugins=grpc:. --lint_out=. types/*.proto install: @ go install ./cmd/... @@ -38,14 +38,14 @@ dist: @ bash scripts/dist.sh @ bash scripts/publish.sh -test: +test: @ find . -path ./vendor -prune -o -name "*.sock" -exec rm {} \; @ echo "==> Running linter" @ make metalinter_test @ echo "==> Running go test" @ go test $(PACKAGES) -test_race: +test_race: @ find . -path ./vendor -prune -o -name "*.sock" -exec rm {} \; @ echo "==> Running go test --race" @go test -v -race $(PACKAGES) diff --git a/README.md b/README.md index 0deec181..1b7f8900 100644 --- a/README.md +++ b/README.md @@ -168,8 +168,10 @@ Here, we describe the requests and responses as function arguments and return va * __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. + 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. #### EndBlock * __Arguments__: diff --git a/types/types.pb.go b/types/types.pb.go index 094f3012..02d63e61 100644 --- a/types/types.pb.go +++ b/types/types.pb.go @@ -37,6 +37,7 @@ It has these top-level messages: BlockID PartSetHeader Validator + Evidence KVPair */ package types @@ -81,7 +82,7 @@ var KVPair_Type_value = map[string]int32{ func (x KVPair_Type) String() string { return proto.EnumName(KVPair_Type_name, int32(x)) } -func (KVPair_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptorTypes, []int{29, 0} } +func (KVPair_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptorTypes, []int{30, 0} } type Request struct { // Types that are valid to be assigned to Value: @@ -644,8 +645,10 @@ func (m *RequestInitChain) GetValidators() []*Validator { } 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"` + Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` + Header *Header `protobuf:"bytes,2,opt,name=header" json:"header,omitempty"` + AbsentValidators []int32 `protobuf:"varint,3,rep,packed,name=absent_validators,json=absentValidators" json:"absent_validators,omitempty"` + ByzantineValidators []*Evidence `protobuf:"bytes,4,rep,name=byzantine_validators,json=byzantineValidators" json:"byzantine_validators,omitempty"` } func (m *RequestBeginBlock) Reset() { *m = RequestBeginBlock{} } @@ -667,6 +670,20 @@ func (m *RequestBeginBlock) GetHeader() *Header { return nil } +func (m *RequestBeginBlock) GetAbsentValidators() []int32 { + if m != nil { + return m.AbsentValidators + } + return nil +} + +func (m *RequestBeginBlock) GetByzantineValidators() []*Evidence { + if m != nil { + return m.ByzantineValidators + } + return nil +} + type RequestEndBlock struct { Height int64 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"` } @@ -1536,6 +1553,30 @@ func (m *Validator) GetPower() int64 { return 0 } +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"` +} + +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{29} } + +func (m *Evidence) GetPubKey() []byte { + if m != nil { + return m.PubKey + } + return nil +} + +func (m *Evidence) GetHeight() int64 { + if m != nil { + return m.Height + } + return 0 +} + type KVPair struct { Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` ValueType KVPair_Type `protobuf:"varint,2,opt,name=value_type,json=valueType,proto3,enum=types.KVPair_Type" json:"value_type,omitempty"` @@ -1546,7 +1587,7 @@ type KVPair struct { func (m *KVPair) Reset() { *m = KVPair{} } func (m *KVPair) String() string { return proto.CompactTextString(m) } func (*KVPair) ProtoMessage() {} -func (*KVPair) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{29} } +func (*KVPair) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{30} } func (m *KVPair) GetKey() string { if m != nil { @@ -1606,6 +1647,7 @@ func init() { proto.RegisterType((*BlockID)(nil), "types.BlockID") proto.RegisterType((*PartSetHeader)(nil), "types.PartSetHeader") proto.RegisterType((*Validator)(nil), "types.Validator") + proto.RegisterType((*Evidence)(nil), "types.Evidence") proto.RegisterType((*KVPair)(nil), "types.KVPair") proto.RegisterEnum("types.KVPair_Type", KVPair_Type_name, KVPair_Type_value) } @@ -2015,98 +2057,102 @@ var _ABCIApplication_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("types/types.proto", fileDescriptorTypes) } var fileDescriptorTypes = []byte{ - // 1488 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcd, 0x8e, 0x13, 0xc7, - 0x13, 0x5f, 0x7f, 0xdb, 0xe5, 0xfd, 0x30, 0xcd, 0xfe, 0x61, 0x30, 0x07, 0x60, 0x24, 0xfe, 0xec, - 0x12, 0x58, 0x93, 0x45, 0x44, 0x2c, 0x44, 0x91, 0xd6, 0x2c, 0xc4, 0x16, 0x12, 0x21, 0xc3, 0x8a, - 0xab, 0x35, 0xf6, 0xb4, 0xed, 0x11, 0xf6, 0xcc, 0x30, 0xd3, 0x5e, 0xbc, 0x52, 0x1e, 0x81, 0x7b, - 0xce, 0xc9, 0x25, 0x52, 0x5e, 0x20, 0x6f, 0x10, 0xe5, 0x19, 0x72, 0xe0, 0x59, 0xa2, 0xaa, 0xee, - 0xf9, 0xdc, 0x19, 0x0e, 0x1c, 0xb8, 0xac, 0xba, 0xba, 0xea, 0xd7, 0xae, 0xea, 0xa9, 0xfe, 0x55, - 0xd5, 0xc2, 0x25, 0x71, 0xee, 0xf1, 0xa0, 0x47, 0x7f, 0x0f, 0x3c, 0xdf, 0x15, 0x2e, 0xab, 0x91, - 0xd0, 0xbd, 0x3f, 0xb3, 0xc5, 0x7c, 0x35, 0x3e, 0x98, 0xb8, 0xcb, 0xde, 0xcc, 0x9d, 0xb9, 0x3d, - 0xd2, 0x8e, 0x57, 0x53, 0x92, 0x48, 0xa0, 0x95, 0x44, 0xe9, 0x7f, 0x57, 0xa1, 0x61, 0xf0, 0xf7, - 0x2b, 0x1e, 0x08, 0xb6, 0x07, 0x55, 0x3e, 0x99, 0xbb, 0x5a, 0xe9, 0x66, 0x69, 0xaf, 0x7d, 0xc8, - 0x0e, 0xe4, 0xe9, 0x4a, 0xfb, 0x7c, 0x32, 0x77, 0x07, 0x1b, 0x06, 0x59, 0xb0, 0x6f, 0xa0, 0x36, - 0x5d, 0xac, 0x82, 0xb9, 0x56, 0x26, 0xd3, 0xcb, 0x69, 0xd3, 0x17, 0xa8, 0x1a, 0x6c, 0x18, 0xd2, - 0x06, 0x8f, 0xb5, 0x9d, 0xa9, 0xab, 0x55, 0xf2, 0x8e, 0x1d, 0x3a, 0x53, 0x3a, 0x16, 0x2d, 0xd8, - 0x63, 0x80, 0x80, 0x8b, 0x91, 0xeb, 0x09, 0xdb, 0x75, 0xb4, 0x2a, 0xd9, 0x5f, 0x4d, 0xdb, 0xbf, - 0xe1, 0xe2, 0x27, 0x52, 0x0f, 0x36, 0x8c, 0x56, 0x10, 0x0a, 0x88, 0xb4, 0xf8, 0xc2, 0x3e, 0xe3, - 0xfe, 0x48, 0xac, 0xb5, 0x5a, 0x1e, 0xf2, 0x44, 0xea, 0x4f, 0xd7, 0x88, 0xb4, 0x42, 0x81, 0x1d, - 0x42, 0x73, 0x32, 0xe7, 0x93, 0x77, 0x88, 0xab, 0x13, 0xee, 0x7f, 0x69, 0xdc, 0x33, 0xd4, 0x12, - 0xaa, 0x31, 0x91, 0x4b, 0x76, 0x00, 0xf5, 0x89, 0xbb, 0x5c, 0xda, 0x42, 0x6b, 0x10, 0x62, 0x37, - 0x83, 0x20, 0xdd, 0x60, 0xc3, 0x50, 0x56, 0x78, 0x5d, 0xef, 0x57, 0xdc, 0x3f, 0xd7, 0x9a, 0x79, - 0xd7, 0xf5, 0x33, 0xaa, 0xf0, 0xba, 0xc8, 0x06, 0x43, 0xb1, 0x1d, 0x5b, 0x8c, 0x26, 0x73, 0xd3, - 0x76, 0xb4, 0x56, 0x5e, 0x28, 0x43, 0xc7, 0x16, 0xcf, 0x50, 0x8d, 0xa1, 0xd8, 0xa1, 0xc0, 0x9e, - 0x42, 0x7b, 0xcc, 0x67, 0xb6, 0x33, 0x1a, 0x2f, 0xdc, 0xc9, 0x3b, 0x0d, 0x08, 0xaa, 0xa5, 0xa1, - 0x7d, 0x34, 0xe8, 0xa3, 0x7e, 0xb0, 0x61, 0xc0, 0x38, 0x92, 0xd8, 0x23, 0x68, 0x71, 0xc7, 0x52, - 0xd0, 0x36, 0x41, 0xaf, 0x64, 0x32, 0xc0, 0xb1, 0x42, 0x60, 0x93, 0xab, 0x75, 0xbf, 0x01, 0xb5, - 0x33, 0x73, 0xb1, 0xe2, 0xfa, 0x1d, 0x68, 0x27, 0x32, 0x85, 0x69, 0xd0, 0x58, 0xf2, 0x20, 0x30, - 0x67, 0x9c, 0xd2, 0xa9, 0x65, 0x84, 0xa2, 0xbe, 0x0d, 0x9b, 0xc9, 0x3c, 0x49, 0x00, 0x31, 0x17, - 0x10, 0x78, 0xc6, 0xfd, 0x00, 0x13, 0x40, 0x01, 0x95, 0xa8, 0x3f, 0x81, 0x4e, 0x36, 0x09, 0x58, - 0x07, 0x2a, 0xef, 0xf8, 0xb9, 0xb2, 0xc4, 0x25, 0xdb, 0x55, 0x0e, 0x51, 0x6a, 0xb6, 0x0c, 0xe5, - 0x9d, 0x1e, 0x61, 0xa3, 0x34, 0x60, 0xdb, 0x50, 0x16, 0x6b, 0x82, 0x6e, 0x1a, 0x65, 0xb1, 0xd6, - 0x6f, 0xc2, 0x76, 0xfa, 0x93, 0x5f, 0xb0, 0xb0, 0x22, 0xd7, 0xe9, 0x9b, 0x31, 0x06, 0x55, 0xcb, - 0x14, 0xa6, 0xb2, 0xa0, 0x35, 0xee, 0x79, 0xa6, 0x98, 0xab, 0x9f, 0xa7, 0x35, 0xbb, 0x02, 0xf5, - 0x39, 0xb7, 0x67, 0x73, 0x41, 0x6f, 0xa0, 0x62, 0x28, 0x09, 0x7d, 0xf5, 0x7c, 0xf7, 0x8c, 0x53, - 0xaa, 0x37, 0x0d, 0x29, 0xe8, 0x3b, 0xb0, 0x95, 0x4a, 0x24, 0xfd, 0x24, 0x72, 0x3e, 0xfa, 0xf0, - 0xec, 0x01, 0xc0, 0x99, 0xb9, 0xb0, 0x2d, 0x53, 0xb8, 0x7e, 0xa0, 0x95, 0x6e, 0x56, 0xf6, 0xda, - 0x87, 0x1d, 0xf5, 0xbd, 0xde, 0x86, 0x0a, 0x23, 0x61, 0xa3, 0xbf, 0x82, 0x4b, 0x17, 0x72, 0x00, - 0xbd, 0x9d, 0x9b, 0xc1, 0x3c, 0x8c, 0x00, 0xd7, 0xec, 0x36, 0x7a, 0x6b, 0x5a, 0xdc, 0x57, 0xaf, - 0x7b, 0x4b, 0x1d, 0x3b, 0xa0, 0x4d, 0x43, 0x29, 0xf5, 0x7d, 0xd8, 0xc9, 0x24, 0x46, 0x22, 0xce, - 0x52, 0x32, 0x4e, 0xfd, 0x63, 0x0d, 0x9a, 0x06, 0x0f, 0x3c, 0xd7, 0x09, 0x38, 0x7b, 0x0c, 0x2d, - 0xbe, 0x9e, 0x70, 0xf9, 0xc6, 0x4b, 0x99, 0x1c, 0x95, 0x36, 0xcf, 0x43, 0x3d, 0xe6, 0x77, 0x64, - 0xcc, 0xf6, 0x15, 0x3f, 0x65, 0x49, 0x47, 0x81, 0x92, 0x04, 0x75, 0x2f, 0x24, 0xa8, 0x4a, 0xe6, - 0x81, 0x4a, 0xdb, 0x0c, 0x43, 0xed, 0x2b, 0x86, 0xaa, 0xe6, 0x1e, 0x9c, 0xa2, 0xa8, 0xa3, 0x14, - 0x45, 0xd5, 0x72, 0xdd, 0x2f, 0xe0, 0xa8, 0xa3, 0x14, 0x47, 0xd5, 0x73, 0xa1, 0x05, 0x24, 0xf5, - 0x30, 0x41, 0x52, 0x8d, 0xcc, 0xdb, 0x94, 0xc0, 0x1c, 0x96, 0xea, 0x45, 0x2c, 0xd5, 0xcc, 0xf0, - 0x9a, 0x82, 0x64, 0x69, 0xea, 0x5e, 0x48, 0x53, 0xad, 0xdc, 0x4b, 0xcb, 0xf0, 0xd4, 0x51, 0x8a, - 0xa7, 0x20, 0x37, 0x9c, 0x02, 0xa2, 0xfa, 0x3e, 0x4d, 0x54, 0x92, 0x6d, 0xae, 0x65, 0xb0, 0x85, - 0x4c, 0xf5, 0x5d, 0x92, 0xa9, 0x36, 0x33, 0xfc, 0xa8, 0x72, 0xe1, 0xb3, 0x54, 0xb5, 0x8f, 0x2f, - 0x21, 0x93, 0x69, 0xf8, 0x16, 0xb9, 0xef, 0xbb, 0xbe, 0xe2, 0x12, 0x29, 0xe8, 0x7b, 0xf8, 0xe2, - 0xe3, 0xfc, 0xfa, 0x0c, 0xad, 0xd1, 0xab, 0x4d, 0x64, 0x97, 0xfe, 0x6b, 0x29, 0xc6, 0x12, 0xb3, - 0x25, 0xd9, 0xa2, 0xa5, 0xd8, 0x22, 0xc1, 0x76, 0xe5, 0x14, 0xdb, 0xb1, 0xbb, 0x70, 0x69, 0x61, - 0x06, 0x42, 0x86, 0x39, 0x4a, 0xd1, 0xc7, 0x0e, 0x2a, 0x64, 0x7c, 0x92, 0x47, 0xee, 0xc3, 0xe5, - 0x84, 0xad, 0xe9, 0x79, 0x23, 0x7a, 0xd4, 0x55, 0x7a, 0xd4, 0x9d, 0xc8, 0xfa, 0xd8, 0xf3, 0x06, - 0x66, 0x30, 0xd7, 0x6f, 0xc7, 0xf1, 0xa7, 0x98, 0x74, 0xe1, 0xce, 0x42, 0x26, 0x5d, 0xb8, 0x33, - 0xfd, 0xf7, 0x52, 0x6c, 0x17, 0xb3, 0x26, 0x83, 0xea, 0xc4, 0xb5, 0x64, 0xf8, 0x5b, 0x06, 0xad, - 0xd9, 0x89, 0x8a, 0x0c, 0x43, 0xd8, 0xec, 0x3f, 0xf8, 0xe7, 0xd3, 0x8d, 0x8d, 0x7f, 0x3f, 0xdd, - 0xd8, 0x4b, 0x74, 0x22, 0x82, 0x3b, 0x16, 0xf7, 0x97, 0xb6, 0x23, 0x7a, 0x33, 0xf7, 0xfe, 0x07, - 0xdb, 0xe7, 0x3d, 0x44, 0x1c, 0xf4, 0xcf, 0x05, 0x0f, 0xd4, 0x5d, 0x28, 0x0f, 0x2a, 0x91, 0x07, - 0xec, 0x16, 0x54, 0x85, 0x39, 0x0b, 0xb4, 0x2a, 0xd1, 0x5b, 0xc8, 0x43, 0x2f, 0xdf, 0xbe, 0x36, - 0x6d, 0xdf, 0x20, 0x95, 0xfe, 0x5b, 0x09, 0x69, 0x28, 0xf5, 0x06, 0xbe, 0xaa, 0x8b, 0x1d, 0xa8, - 0xcc, 0xcc, 0x80, 0xae, 0xba, 0x62, 0xe0, 0x12, 0x77, 0xa6, 0x9c, 0x13, 0x35, 0x54, 0x0c, 0x5c, - 0xea, 0x7f, 0x95, 0xe3, 0xdc, 0x88, 0x0a, 0xc7, 0x05, 0x0f, 0x77, 0xa1, 0x66, 0x3b, 0x16, 0x5f, - 0x93, 0x8b, 0x15, 0x43, 0x0a, 0xac, 0x2f, 0x0b, 0x5c, 0xe5, 0x0b, 0xdd, 0xa6, 0x92, 0xf8, 0x22, - 0x2c, 0x89, 0xd5, 0x2f, 0x3c, 0x45, 0xc2, 0xf1, 0x1c, 0xcf, 0x77, 0xdd, 0x29, 0xc5, 0xf6, 0x45, - 0xe7, 0x10, 0x3c, 0x51, 0x26, 0xea, 0xa9, 0x72, 0xa8, 0x6e, 0xb7, 0x11, 0xa7, 0xe0, 0x2f, 0x58, - 0x92, 0x93, 0x6c, 0xf5, 0x35, 0xbf, 0xad, 0x7e, 0x39, 0xce, 0xff, 0x88, 0xc8, 0xf4, 0x5d, 0x60, - 0x17, 0x19, 0x4a, 0xf6, 0x26, 0x69, 0xee, 0x61, 0xff, 0x87, 0x9a, 0x65, 0x4f, 0xa7, 0xc5, 0xd5, - 0x59, 0xaa, 0xf5, 0x3f, 0xca, 0x50, 0x97, 0xb5, 0x95, 0x5d, 0x43, 0x9e, 0x37, 0x6d, 0x67, 0x64, - 0x5b, 0x21, 0xbf, 0x90, 0x3c, 0xb4, 0x12, 0x97, 0x56, 0x4e, 0x5d, 0x1a, 0x83, 0xaa, 0xb0, 0x97, - 0x5c, 0x51, 0x03, 0xad, 0xd9, 0x55, 0x68, 0x38, 0xab, 0xe5, 0x48, 0xac, 0xc3, 0xc4, 0xac, 0x3b, - 0xab, 0xe5, 0xe9, 0x3a, 0x60, 0x87, 0xb0, 0x95, 0x20, 0x0a, 0xdb, 0x52, 0x05, 0x6c, 0x5b, 0xb9, - 0x46, 0x7e, 0x0f, 0x4f, 0x8c, 0x76, 0x44, 0x19, 0x43, 0x8b, 0xed, 0x01, 0x31, 0xc8, 0x48, 0x16, - 0x09, 0xc9, 0x2c, 0x75, 0x62, 0x96, 0x6d, 0xdc, 0x57, 0x55, 0x04, 0x1b, 0x87, 0xeb, 0xd0, 0xc2, - 0x9b, 0x94, 0x26, 0x0d, 0x32, 0x69, 0xe2, 0x06, 0x29, 0xef, 0xc0, 0x4e, 0xdc, 0x8c, 0x48, 0x93, - 0xa6, 0x3c, 0x25, 0xde, 0x26, 0xc3, 0x6b, 0xd0, 0x8c, 0x18, 0xac, 0x45, 0x16, 0x0d, 0x53, 0x11, - 0xd7, 0x10, 0x1a, 0xca, 0xc5, 0xdc, 0xc6, 0xe5, 0x2e, 0xd4, 0x3c, 0xd3, 0x17, 0x81, 0x6a, 0x10, - 0xc2, 0xfa, 0xf5, 0xda, 0xf4, 0xb1, 0x63, 0x54, 0xed, 0x8b, 0x34, 0xd1, 0x8f, 0x60, 0x2b, 0xb5, - 0x8f, 0xcf, 0x4f, 0xb8, 0xc2, 0x5c, 0xa8, 0xd6, 0x45, 0x0a, 0xd1, 0xcf, 0x94, 0xe3, 0x9f, 0xd1, - 0x9f, 0x40, 0x2b, 0xfa, 0x86, 0x78, 0xd5, 0xde, 0x6a, 0x3c, 0x0a, 0x9b, 0xd0, 0x4d, 0xa3, 0xee, - 0xad, 0xc6, 0x2f, 0x65, 0x1f, 0xea, 0xb9, 0x1f, 0x54, 0x13, 0x55, 0x31, 0xa4, 0xa0, 0xff, 0x59, - 0x82, 0xba, 0xe4, 0xaf, 0x9c, 0xd6, 0xf5, 0x5b, 0xea, 0xe9, 0x56, 0x7c, 0x84, 0x7e, 0x13, 0x6e, - 0x3b, 0x1a, 0x97, 0x24, 0xe8, 0xe0, 0xf4, 0xdc, 0xe3, 0x46, 0x8b, 0xac, 0x70, 0xc9, 0x6e, 0xc1, - 0xa6, 0x84, 0x04, 0xc2, 0xb7, 0x9d, 0x30, 0x7b, 0xdb, 0xb4, 0xf7, 0x86, 0xb6, 0xf0, 0xab, 0x48, - 0x13, 0xdb, 0x11, 0x2a, 0x1d, 0x9a, 0xb4, 0x31, 0x74, 0x84, 0x7e, 0x1d, 0xaa, 0x74, 0x0e, 0x40, - 0xfd, 0xcd, 0xa9, 0x31, 0x7c, 0xf5, 0x63, 0x67, 0x83, 0x35, 0xa0, 0x32, 0x7c, 0x75, 0xda, 0x29, - 0x1d, 0x7e, 0xac, 0xc1, 0xce, 0x71, 0xff, 0xd9, 0xf0, 0xd8, 0xf3, 0x16, 0xf6, 0xc4, 0xa4, 0x32, - 0xd1, 0x83, 0x2a, 0x15, 0xc2, 0x9c, 0xe9, 0xb0, 0x9b, 0xd7, 0x91, 0xb1, 0x43, 0xa8, 0x51, 0x3d, - 0x64, 0x79, 0x43, 0x62, 0x37, 0xb7, 0x31, 0xc3, 0x1f, 0x91, 0x15, 0xf3, 0xe2, 0xac, 0xd8, 0xcd, - 0xeb, 0xce, 0xd8, 0x0f, 0xd0, 0x8a, 0x2b, 0x59, 0xd1, 0xc4, 0xd8, 0x2d, 0xec, 0xd3, 0x10, 0x1f, - 0x57, 0xb8, 0xa2, 0xb9, 0xb1, 0x5b, 0xd8, 0xac, 0xb1, 0xc7, 0xd0, 0x08, 0x8b, 0x4f, 0xfe, 0xf4, - 0xd8, 0x2d, 0xe8, 0xd7, 0xf0, 0x7a, 0x64, 0x49, 0xc8, 0x1b, 0x0a, 0xbb, 0xb9, 0x2d, 0x18, 0x7b, - 0x04, 0x75, 0xc5, 0x86, 0xb9, 0x83, 0x67, 0x37, 0xbf, 0xd1, 0xc3, 0x20, 0xe3, 0xf9, 0xa1, 0x68, - 0xa2, 0xec, 0x16, 0xb6, 0x70, 0xec, 0x18, 0x20, 0x31, 0x39, 0x14, 0xce, 0x95, 0xdd, 0xe2, 0x46, - 0x8e, 0x3d, 0x85, 0x66, 0x3c, 0x2c, 0xe4, 0x4f, 0x97, 0xdd, 0xa2, 0x5e, 0x6e, 0x5c, 0xa7, 0xff, - 0x58, 0x3c, 0xfc, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x34, 0x61, 0x21, 0x91, 0xfc, 0x10, 0x00, 0x00, + // 1551 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x98, 0xcb, 0x8e, 0x13, 0x47, + 0x17, 0xc7, 0x6d, 0xb7, 0xaf, 0xc7, 0x73, 0xf1, 0xd4, 0xcc, 0x07, 0xc6, 0x2c, 0x18, 0x5a, 0xe2, + 0xc3, 0xc3, 0x65, 0xcc, 0x37, 0x88, 0x4f, 0x0c, 0x44, 0x91, 0xc6, 0x0c, 0xc4, 0x16, 0x12, 0x21, + 0xcd, 0x88, 0xad, 0xd5, 0x76, 0x97, 0xed, 0x12, 0x76, 0x77, 0xd3, 0x5d, 0x1e, 0x3c, 0x51, 0x1e, + 0x81, 0x7d, 0xd6, 0xc9, 0x26, 0x52, 0x5e, 0x20, 0xcb, 0xec, 0xa2, 0x3c, 0x43, 0x16, 0x3c, 0x4b, + 0x54, 0xa7, 0xaa, 0xaf, 0xd3, 0xcd, 0x82, 0x05, 0x9b, 0x51, 0x5d, 0xce, 0xbf, 0x7c, 0xaa, 0xfa, + 0xd4, 0xef, 0x9c, 0x1a, 0xd8, 0xe1, 0x17, 0x2e, 0xf5, 0x7b, 0xf8, 0xf7, 0xd0, 0xf5, 0x1c, 0xee, + 0x90, 0x0a, 0x76, 0x3a, 0xf7, 0x67, 0x8c, 0xcf, 0x57, 0xe3, 0xc3, 0x89, 0xb3, 0xec, 0xcd, 0x9c, + 0x99, 0xd3, 0xc3, 0xd9, 0xf1, 0x6a, 0x8a, 0x3d, 0xec, 0x60, 0x4b, 0xaa, 0xf4, 0xbf, 0xca, 0x50, + 0x33, 0xe8, 0xfb, 0x15, 0xf5, 0x39, 0xe9, 0x42, 0x99, 0x4e, 0xe6, 0x4e, 0xbb, 0xb8, 0x5f, 0xec, + 0x36, 0x8f, 0xc8, 0xa1, 0x5c, 0x5d, 0xcd, 0x3e, 0x9f, 0xcc, 0x9d, 0x41, 0xc1, 0x40, 0x0b, 0x72, + 0x17, 0x2a, 0xd3, 0xc5, 0xca, 0x9f, 0xb7, 0x4b, 0x68, 0xba, 0x9b, 0x34, 0x7d, 0x21, 0xa6, 0x06, + 0x05, 0x43, 0xda, 0x88, 0x65, 0x99, 0x3d, 0x75, 0xda, 0x5a, 0xd6, 0xb2, 0x43, 0x7b, 0x8a, 0xcb, + 0x0a, 0x0b, 0xf2, 0x18, 0xc0, 0xa7, 0x7c, 0xe4, 0xb8, 0x9c, 0x39, 0x76, 0xbb, 0x8c, 0xf6, 0x57, + 0x93, 0xf6, 0x6f, 0x28, 0xff, 0x1e, 0xa7, 0x07, 0x05, 0xa3, 0xe1, 0x07, 0x1d, 0xa1, 0xb4, 0xe8, + 0x82, 0x9d, 0x53, 0x6f, 0xc4, 0xd7, 0xed, 0x4a, 0x96, 0xf2, 0x54, 0xce, 0x9f, 0xad, 0x85, 0xd2, + 0x0a, 0x3a, 0xe4, 0x08, 0xea, 0x93, 0x39, 0x9d, 0xbc, 0x13, 0xba, 0x2a, 0xea, 0xfe, 0x93, 0xd4, + 0x3d, 0x13, 0xb3, 0xa8, 0xaa, 0x4d, 0x64, 0x93, 0x1c, 0x42, 0x75, 0xe2, 0x2c, 0x97, 0x8c, 0xb7, + 0x6b, 0xa8, 0xd8, 0x4b, 0x29, 0x70, 0x6e, 0x50, 0x30, 0x94, 0x95, 0x38, 0xae, 0xf7, 0x2b, 0xea, + 0x5d, 0xb4, 0xeb, 0x59, 0xc7, 0xf5, 0x83, 0x98, 0x12, 0xc7, 0x85, 0x36, 0x62, 0x2b, 0xcc, 0x66, + 0x7c, 0x34, 0x99, 0x9b, 0xcc, 0x6e, 0x37, 0xb2, 0xb6, 0x32, 0xb4, 0x19, 0x7f, 0x26, 0xa6, 0xc5, + 0x56, 0x58, 0xd0, 0x21, 0x4f, 0xa1, 0x39, 0xa6, 0x33, 0x66, 0x8f, 0xc6, 0x0b, 0x67, 0xf2, 0xae, + 0x0d, 0x28, 0x6d, 0x27, 0xa5, 0x7d, 0x61, 0xd0, 0x17, 0xf3, 0x83, 0x82, 0x01, 0xe3, 0xb0, 0x47, + 0x1e, 0x41, 0x83, 0xda, 0x96, 0x92, 0x36, 0x51, 0x7a, 0x25, 0x15, 0x01, 0xb6, 0x15, 0x08, 0xeb, + 0x54, 0xb5, 0xfb, 0x35, 0xa8, 0x9c, 0x9b, 0x8b, 0x15, 0xd5, 0x6f, 0x43, 0x33, 0x16, 0x29, 0xa4, + 0x0d, 0xb5, 0x25, 0xf5, 0x7d, 0x73, 0x46, 0x31, 0x9c, 0x1a, 0x46, 0xd0, 0xd5, 0xb7, 0x60, 0x23, + 0x1e, 0x27, 0x31, 0xa1, 0x88, 0x05, 0x21, 0x3c, 0xa7, 0x9e, 0x2f, 0x02, 0x40, 0x09, 0x55, 0x57, + 0x7f, 0x02, 0xad, 0x74, 0x10, 0x90, 0x16, 0x68, 0xef, 0xe8, 0x85, 0xb2, 0x14, 0x4d, 0xb2, 0xa7, + 0x1c, 0xc2, 0xd0, 0x6c, 0x18, 0xca, 0x3b, 0x3d, 0xd4, 0x86, 0x61, 0x40, 0xb6, 0xa0, 0xc4, 0xd7, + 0x28, 0xdd, 0x30, 0x4a, 0x7c, 0xad, 0xef, 0xc3, 0x56, 0xf2, 0x93, 0x5f, 0xb2, 0xb0, 0x42, 0xd7, + 0xf1, 0x9b, 0x11, 0x02, 0x65, 0xcb, 0xe4, 0xa6, 0xb2, 0xc0, 0xb6, 0x18, 0x73, 0x4d, 0x3e, 0x57, + 0x3f, 0x8f, 0x6d, 0x72, 0x05, 0xaa, 0x73, 0xca, 0x66, 0x73, 0x8e, 0x77, 0x40, 0x33, 0x54, 0x4f, + 0xf8, 0xea, 0x7a, 0xce, 0x39, 0xc5, 0x50, 0xaf, 0x1b, 0xb2, 0xa3, 0x6f, 0xc3, 0x66, 0x22, 0x90, + 0xf4, 0xd3, 0xd0, 0xf9, 0xf0, 0xc3, 0x93, 0x07, 0x00, 0xe7, 0xe6, 0x82, 0x59, 0x26, 0x77, 0x3c, + 0xbf, 0x5d, 0xdc, 0xd7, 0xba, 0xcd, 0xa3, 0x96, 0xfa, 0x5e, 0x6f, 0x83, 0x09, 0x23, 0x66, 0xa3, + 0xff, 0x59, 0x84, 0x9d, 0x4b, 0x41, 0x20, 0xdc, 0x9d, 0x9b, 0xfe, 0x3c, 0xd8, 0x82, 0x68, 0x93, + 0x5b, 0xc2, 0x5d, 0xd3, 0xa2, 0x9e, 0xba, 0xde, 0x9b, 0x6a, 0xdd, 0x01, 0x0e, 0x1a, 0x6a, 0x92, + 0xdc, 0x85, 0x1d, 0x73, 0xec, 0x53, 0x9b, 0x8f, 0x62, 0x9e, 0x68, 0xfb, 0x5a, 0xb7, 0x62, 0xb4, + 0xe4, 0x44, 0xe8, 0x88, 0x4f, 0xfa, 0xb0, 0x37, 0xbe, 0xf8, 0xd1, 0xb4, 0x39, 0xb3, 0x69, 0xdc, + 0xbe, 0x8c, 0x9e, 0x6f, 0xab, 0x5f, 0x78, 0x7e, 0xce, 0x2c, 0x6a, 0x4f, 0xa8, 0xb1, 0x1b, 0x1a, + 0x47, 0x6b, 0xe8, 0x07, 0xb0, 0x9d, 0x0a, 0xc5, 0xd8, 0xc9, 0x16, 0xe3, 0x27, 0xab, 0x7f, 0xac, + 0x40, 0xdd, 0xa0, 0xbe, 0xeb, 0xd8, 0x3e, 0x25, 0x8f, 0xa1, 0x41, 0xd7, 0x13, 0x2a, 0xa9, 0x52, + 0x4c, 0xdd, 0x0a, 0x69, 0xf3, 0x3c, 0x98, 0x17, 0x37, 0x2a, 0x34, 0x26, 0x07, 0x8a, 0x88, 0x69, + 0xcc, 0x29, 0x51, 0x1c, 0x89, 0xf7, 0x02, 0x24, 0x6a, 0x29, 0x24, 0x48, 0xdb, 0x14, 0x13, 0x0f, + 0x14, 0x13, 0xcb, 0x99, 0x0b, 0x27, 0xa0, 0x78, 0x9c, 0x80, 0x62, 0x25, 0xd3, 0xfd, 0x1c, 0x2a, + 0x1e, 0x27, 0xa8, 0x58, 0xcd, 0x94, 0xe6, 0x60, 0xf1, 0x61, 0x0c, 0x8b, 0xb5, 0x14, 0x0d, 0xa4, + 0x30, 0x83, 0x8b, 0xbd, 0x90, 0x8b, 0xf5, 0x14, 0x49, 0x95, 0x24, 0x0d, 0xc6, 0x7b, 0x01, 0x18, + 0x1b, 0x99, 0x87, 0x96, 0x22, 0xe3, 0x71, 0x82, 0x8c, 0x90, 0xb9, 0x9d, 0x1c, 0x34, 0x7e, 0x93, + 0x44, 0xa3, 0xe4, 0xdb, 0xb5, 0x94, 0x36, 0x97, 0x8d, 0xff, 0x8f, 0xb3, 0x71, 0x23, 0x45, 0x64, + 0x15, 0x0b, 0x9f, 0x85, 0xe3, 0x81, 0xb8, 0x7a, 0xa9, 0x48, 0x13, 0xb7, 0x9f, 0x7a, 0x9e, 0xe3, + 0x29, 0x7a, 0xc9, 0x8e, 0xde, 0x15, 0x8c, 0x89, 0xe2, 0xeb, 0x33, 0x20, 0x45, 0x4e, 0xc4, 0xa2, + 0x4b, 0xff, 0xb9, 0x18, 0x69, 0x91, 0xa5, 0x71, 0x3e, 0x35, 0x14, 0x9f, 0x62, 0x7c, 0x2d, 0x25, + 0xf8, 0x4a, 0xee, 0xc0, 0xce, 0xc2, 0xf4, 0xb9, 0xdc, 0xe6, 0x28, 0x01, 0xac, 0x6d, 0x31, 0x21, + 0xf7, 0x27, 0xc9, 0x75, 0x1f, 0x76, 0x63, 0xb6, 0xa6, 0xeb, 0x8e, 0x90, 0x22, 0x65, 0xa4, 0x48, + 0x2b, 0xb4, 0x3e, 0x71, 0xdd, 0x81, 0xe9, 0xcf, 0xf5, 0x5b, 0xd1, 0xfe, 0x13, 0xec, 0x5e, 0x38, + 0xb3, 0x80, 0xdd, 0x0b, 0x67, 0xa6, 0xff, 0x5a, 0x8c, 0xec, 0x22, 0x4e, 0x13, 0x28, 0x4f, 0x1c, + 0x4b, 0x6e, 0x7f, 0xd3, 0xc0, 0x36, 0x39, 0x55, 0x3b, 0x13, 0x5b, 0xd8, 0xe8, 0x3f, 0xf8, 0xfb, + 0xd3, 0x8d, 0xc2, 0x3f, 0x9f, 0x6e, 0x74, 0x63, 0xb5, 0x0f, 0xa7, 0xb6, 0x45, 0xbd, 0x25, 0xb3, + 0x79, 0x6f, 0xe6, 0xdc, 0xff, 0xc0, 0x3c, 0xda, 0x13, 0x8a, 0xc3, 0xfe, 0x05, 0xa7, 0xbe, 0x3a, + 0x0b, 0xe5, 0x81, 0x16, 0x7a, 0x40, 0x6e, 0x42, 0x99, 0x9b, 0xb3, 0x00, 0x4b, 0x01, 0xf8, 0x5e, + 0xbe, 0x7d, 0x6d, 0x32, 0xcf, 0xc0, 0x29, 0xfd, 0x97, 0xa2, 0xc0, 0x50, 0xe2, 0x0e, 0x7c, 0x55, + 0x17, 0x5b, 0xa0, 0xcd, 0x4c, 0x1f, 0x8f, 0x5a, 0x33, 0x44, 0x53, 0x8c, 0x4c, 0x29, 0x45, 0x34, + 0x68, 0x86, 0x68, 0xea, 0x7f, 0x94, 0xa2, 0xd8, 0x08, 0x53, 0xd5, 0x25, 0x0f, 0xf7, 0xa0, 0xc2, + 0x6c, 0x8b, 0xae, 0xd1, 0x45, 0xcd, 0x90, 0x1d, 0xd2, 0x97, 0x29, 0x55, 0xfb, 0x42, 0xb7, 0x31, + 0x09, 0xbf, 0x08, 0x92, 0x70, 0xf9, 0x0b, 0x57, 0x91, 0x72, 0xb1, 0x8e, 0xeb, 0x39, 0xce, 0x14, + 0xf7, 0xf6, 0x45, 0xeb, 0xa0, 0x3c, 0x96, 0x26, 0xaa, 0x89, 0x04, 0xac, 0x4e, 0xb7, 0x16, 0x85, + 0xe0, 0x4f, 0xa2, 0x08, 0x88, 0xd3, 0xea, 0x6b, 0x7e, 0x5b, 0x7d, 0x37, 0x8a, 0xff, 0x10, 0x64, + 0xfa, 0x1e, 0x90, 0xcb, 0x84, 0x92, 0xd5, 0x50, 0x92, 0x3d, 0xe4, 0xbf, 0x50, 0xb1, 0xd8, 0x74, + 0x9a, 0x5f, 0x0f, 0xc8, 0x69, 0xfd, 0xb7, 0x12, 0x54, 0x65, 0x32, 0x27, 0xd7, 0x04, 0xe7, 0x4d, + 0x66, 0x8f, 0x98, 0x15, 0xf0, 0x05, 0xfb, 0x43, 0x2b, 0x76, 0x68, 0xa5, 0xc4, 0xa1, 0x11, 0x28, + 0x73, 0xb6, 0xa4, 0x0a, 0x0d, 0xd8, 0x26, 0x57, 0xa1, 0x66, 0xaf, 0x96, 0x23, 0xbe, 0x0e, 0x02, + 0xb3, 0x6a, 0xaf, 0x96, 0x67, 0x6b, 0x9f, 0x1c, 0xc1, 0x66, 0x0c, 0x14, 0xcc, 0x52, 0x09, 0x6c, + 0x4b, 0xb9, 0x86, 0x7e, 0x0f, 0x4f, 0x8d, 0x66, 0x88, 0x8c, 0xa1, 0x45, 0xba, 0x80, 0x04, 0x19, + 0xc9, 0x24, 0x21, 0xc9, 0x52, 0x45, 0xb2, 0x6c, 0x89, 0x71, 0x95, 0x45, 0x44, 0xa5, 0x72, 0x1d, + 0x1a, 0xe2, 0x24, 0xa5, 0x49, 0x0d, 0x4d, 0xea, 0x62, 0x00, 0x27, 0x6f, 0xc3, 0x76, 0x54, 0x68, + 0x48, 0x93, 0xba, 0x5c, 0x25, 0x1a, 0x46, 0xc3, 0x6b, 0x50, 0x0f, 0x09, 0xd6, 0x40, 0x8b, 0x9a, + 0xa9, 0xc0, 0x35, 0x84, 0x9a, 0x72, 0x31, 0xb3, 0x52, 0xba, 0x03, 0x15, 0xd7, 0xf4, 0xb8, 0xaf, + 0x0a, 0x84, 0x20, 0x7f, 0xbd, 0x36, 0x3d, 0x51, 0xa3, 0xaa, 0x7a, 0x49, 0x9a, 0xe8, 0xc7, 0xb0, + 0x99, 0x18, 0x17, 0xd7, 0x8f, 0x3b, 0xdc, 0x5c, 0xa8, 0xd2, 0x45, 0x76, 0xc2, 0x9f, 0x29, 0x45, + 0x3f, 0xa3, 0x3f, 0x81, 0x46, 0xf8, 0x0d, 0xc5, 0x51, 0xbb, 0xab, 0xf1, 0x28, 0x28, 0x7b, 0x37, + 0x8c, 0xaa, 0xbb, 0x1a, 0xbf, 0x94, 0x95, 0xaf, 0xeb, 0x7c, 0x50, 0x55, 0x9b, 0x66, 0xc8, 0x8e, + 0xfe, 0x14, 0xea, 0x41, 0x55, 0x95, 0x2f, 0xcd, 0xf9, 0xd4, 0xfa, 0xef, 0x45, 0xa8, 0x4a, 0xf8, + 0x65, 0x54, 0xda, 0xff, 0xc3, 0x12, 0x74, 0x45, 0x47, 0x62, 0xd3, 0x28, 0xdc, 0x0a, 0x5f, 0x77, + 0x52, 0x74, 0x78, 0x76, 0xe1, 0x52, 0xa3, 0x81, 0x56, 0xa2, 0x49, 0x6e, 0xc2, 0x86, 0x94, 0xf8, + 0xdc, 0x63, 0x76, 0x10, 0xfa, 0x4d, 0x1c, 0x7b, 0x83, 0x43, 0xe2, 0x93, 0x4a, 0x13, 0x66, 0x73, + 0x15, 0x4b, 0x75, 0x1c, 0x18, 0xda, 0x5c, 0xbf, 0x0e, 0x65, 0x5c, 0x07, 0xa0, 0xfa, 0xe6, 0xcc, + 0x18, 0xbe, 0xfa, 0xae, 0x55, 0x20, 0x35, 0xd0, 0x86, 0xaf, 0xce, 0x5a, 0xc5, 0xa3, 0x8f, 0x15, + 0xd8, 0x3e, 0xe9, 0x3f, 0x1b, 0x9e, 0xb8, 0xee, 0x82, 0x4d, 0x4c, 0xcc, 0x31, 0x3d, 0x28, 0x63, + 0x16, 0xcd, 0x78, 0xcc, 0x76, 0xb2, 0xca, 0x39, 0x72, 0x04, 0x15, 0x4c, 0xa6, 0x24, 0xeb, 0x4d, + 0xdb, 0xc9, 0xac, 0xea, 0xc4, 0x8f, 0xc8, 0x74, 0x7b, 0xf9, 0x69, 0xdb, 0xc9, 0x2a, 0xed, 0xc8, + 0xb7, 0xd0, 0x88, 0xd2, 0x60, 0xde, 0x03, 0xb7, 0x93, 0x5b, 0xe4, 0x09, 0x7d, 0x94, 0x1e, 0xf3, + 0x9e, 0xb9, 0x9d, 0xdc, 0x4a, 0x8f, 0x3c, 0x86, 0x5a, 0x90, 0xb9, 0xb2, 0x1f, 0xbb, 0x9d, 0x9c, + 0x62, 0x4f, 0x1c, 0x8f, 0xcc, 0x27, 0x59, 0x6f, 0xd8, 0x4e, 0x66, 0xfd, 0x46, 0x1e, 0x41, 0x55, + 0xa1, 0x34, 0xf3, 0x9d, 0xdc, 0xc9, 0xae, 0x12, 0xc5, 0x26, 0xa3, 0xe7, 0x4e, 0xde, 0x03, 0xb8, + 0x93, 0x5b, 0xff, 0x91, 0x13, 0x80, 0xd8, 0x3b, 0x27, 0xf7, 0x19, 0xdc, 0xc9, 0xaf, 0x02, 0x89, + 0xb8, 0x3b, 0xe1, 0x4b, 0x23, 0xfb, 0x31, 0xdc, 0xc9, 0x2b, 0x04, 0xc7, 0x55, 0xfc, 0x07, 0xcb, + 0xc3, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x39, 0xd6, 0x39, 0x74, 0xab, 0x11, 0x00, 0x00, } diff --git a/types/types.proto b/types/types.proto index d40e8885..6538ba2d 100644 --- a/types/types.proto +++ b/types/types.proto @@ -66,6 +66,8 @@ message RequestInitChain{ message RequestBeginBlock{ bytes hash = 1; Header header = 2; + repeated int32 absent_validators = 3; + repeated Evidence byzantine_validators = 4; } message RequestEndBlock{ @@ -187,6 +189,11 @@ message Validator { int64 power = 2; } +message Evidence { + bytes pub_key = 1; + int64 height = 2; +} + //---------------------------------------- // Abstract types From fc90b2de1c3b257291ccdfef346614aa2a08ac54 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Fri, 1 Dec 2017 11:33:07 -0500 Subject: [PATCH 8/8] fix dummy test --- example/dummy/dummy_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/example/dummy/dummy_test.go b/example/dummy/dummy_test.go index ec4d2e33..bfe9ef7a 100644 --- a/example/dummy/dummy_test.go +++ b/example/dummy/dummy_test.go @@ -95,7 +95,7 @@ func TestPersistentDummyInfo(t *testing.T) { header := &types.Header{ Height: int64(height), } - dummy.BeginBlock(types.RequestBeginBlock{hash, header}) + dummy.BeginBlock(types.RequestBeginBlock{hash, header, nil, nil}) dummy.EndBlock(types.RequestEndBlock{header.Height}) dummy.Commit() @@ -179,7 +179,7 @@ func makeApplyBlock(t *testing.T, dummy types.Application, heightInt int, diff [ Height: height, } - dummy.BeginBlock(types.RequestBeginBlock{hash, header}) + dummy.BeginBlock(types.RequestBeginBlock{hash, header, nil, nil}) for _, tx := range txs { if r := dummy.DeliverTx(tx); r.IsErr() { t.Fatal(r)