Browse Source

Merge pull request #171 from tendermint/sdk2

WIP: Sdk2
pull/1780/head
Ethan Buchman 7 years ago
committed by GitHub
parent
commit
ffbe912ff3
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
28 changed files with 588 additions and 662 deletions
  1. +2
    -0
      .gitignore
  2. +11
    -0
      CHANGELOG.md
  3. +105
    -55
      Makefile
  4. +18
    -5
      README.md
  5. +1
    -1
      circle.yml
  6. +10
    -10
      cmd/abci-cli/abci-cli.go
  7. +0
    -2
      example/code/code.go
  8. +11
    -9
      example/counter/counter.go
  9. +8
    -10
      example/dummy/dummy.go
  10. +13
    -13
      example/dummy/dummy_test.go
  11. +4
    -4
      example/dummy/helpers.go
  12. +12
    -13
      example/dummy/persistent_dummy.go
  13. +21
    -26
      glide.lock
  14. +1
    -1
      glide.yaml
  15. +13
    -13
      scripts/dist_build.sh
  16. +0
    -17
      specification.rst
  17. +7
    -10
      tests/server/client.go
  18. +3
    -1
      tests/test.sh
  19. +0
    -3
      tests/test_app/app.go
  20. +23
    -23
      tests/test_cli/test.sh
  21. +2
    -2
      types/application.go
  22. +7
    -5
      types/messages_test.go
  23. +1
    -36
      types/result.go
  24. +0
    -74
      types/result_test.go
  25. +267
    -245
      types/types.pb.go
  26. +43
    -41
      types/types.proto
  27. +5
    -28
      types/util.go
  28. +0
    -15
      types/util_test.go

+ 2
- 0
.gitignore View File

@ -1,3 +1,5 @@
vendor vendor
.glide .glide
types/types.pb.go types/types.pb.go
*.sw[op]
abci-cli

+ 11
- 0
CHANGELOG.md View File

@ -1,5 +1,16 @@
# Changelog # Changelog
## 0.10.0 (TBD)
BREAKING CHANGES:
- [types] Drop gogo custom type magic with data.Bytes
- [types] Add `info string` field to responses for SetOption, Query, CheckTx, DeliverTx
- [types] Remove IsOk/IsErr methods from response types.
- [types] Replace KVPair with common.KVPair
- [types] Updates to CheckTx/DeliverTx around tags and fees
- [types] Remove code and log from Commit
## 0.9.0 (December 28, 2017) ## 0.9.0 (December 28, 2017)
BREAKING CHANGES: BREAKING CHANGES:


+ 105
- 55
Makefile View File

@ -1,18 +1,56 @@
GOTOOLS = \ GOTOOLS = \
github.com/mitchellh/gox \
github.com/Masterminds/glide \
github.com/gogo/protobuf/protoc-gen-gogo \
github.com/gogo/protobuf/gogoproto
#gopkg.in/alecthomas/gometalinter.v2 \
github.com/mitchellh/gox \
github.com/Masterminds/glide \
gopkg.in/alecthomas/gometalinter.v2 \
github.com/gogo/protobuf/protoc-gen-gogo \
github.com/gogo/protobuf/gogoproto
GOTOOLS_CHECK = gox glide gometalinter.v2 protoc protoc-gen-gogo
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 -I=${GOPATH}/src/github.com/gogo/protobuf/protobuf
all: protoc install test
all: check get_vendor_deps protoc build test install metalinter
PACKAGES=$(shell go list ./... | grep -v '/vendor/')
check: check_tools
########################################
### Build
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
@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
build:
@go build -i ./cmd/...
dist:
@bash scripts/dist.sh
@bash scripts/publish.sh
install_protoc:
# https://github.com/google/protobuf/releases
install:
@go install ./cmd/...
########################################
### Tools & dependencies
check_tools:
@# https://stackoverflow.com/a/25668869
@echo "Found tools: $(foreach tool,$(GOTOOLS_CHECK),\
$(if $(shell which $(tool)),$(tool),$(error "No $(tool) in PATH")))"
get_tools:
@echo "--> Installing tools"
go get -u -v $(GOTOOLS)
@gometalinter.v2 --install
get_protoc:
@# https://github.com/google/protobuf/releases
curl -L https://github.com/google/protobuf/releases/download/v3.4.1/protobuf-cpp-3.4.1.tar.gz | tar xvz && \ curl -L https://github.com/google/protobuf/releases/download/v3.4.1/protobuf-cpp-3.4.1.tar.gz | tar xvz && \
cd protobuf-3.4.1 && \ cd protobuf-3.4.1 && \
DIST_LANG=cpp ./configure && \ DIST_LANG=cpp ./configure && \
@ -21,60 +59,41 @@ install_protoc:
cd .. && \ cd .. && \
rm -rf protobuf-3.4.1 rm -rf protobuf-3.4.1
protoc:
## Note to self:
## 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
@ 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
update_tools:
@echo "--> Updating tools"
@go get -u $(GOTOOLS)
install:
@ go install ./cmd/...
get_vendor_deps:
@rm -rf vendor/
@echo "--> Running glide install"
@glide install
build:
@ go build -i ./cmd/...
dist:
@ bash scripts/dist.sh
@ bash scripts/publish.sh
########################################
### Testing
test: test:
@ find . -path ./vendor -prune -o -name "*.sock" -exec rm {} \;
@ echo "==> Running go test"
@ go test $(PACKAGES)
@find . -path ./vendor -prune -o -name "*.sock" -exec rm {} \;
@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)
@find . -path ./vendor -prune -o -name "*.sock" -exec rm {} \;
@echo "==> Running go test --race"
@go test -v -race $(PACKAGES)
test_integrations: test_integrations:
@ bash test.sh
fmt:
@ go fmt ./...
@bash test.sh
get_deps:
@ go get -d $(PACKAGES)
ensure_tools:
go get -u -v $(GOTOOLS)
#@ gometalinter.v2 --install
get_vendor_deps: ensure_tools
@ rm -rf vendor/
@ echo "--> Running glide install"
@ glide install
########################################
### Formatting, linting, and vetting
metalinter_all:
protoc $(INCLUDE) --lint_out=. types/*.proto
gometalinter.v2 --vendor --deadline=600s --enable-all --disable=lll ./...
fmt:
@go fmt ./...
metalinter: metalinter:
@ echo "==> Running linter"
@echo "==> Running linter"
gometalinter.v2 --vendor --deadline=600s --disable-all \ gometalinter.v2 --vendor --deadline=600s --disable-all \
--enable=maligned \ --enable=maligned \
--enable=deadcode \ --enable=deadcode \
@ -92,7 +111,6 @@ metalinter:
--enable=varcheck \ --enable=varcheck \
--enable=vetshadow \ --enable=vetshadow \
./... ./...
#--enable=gas \ #--enable=gas \
#--enable=dupl \ #--enable=dupl \
#--enable=errcheck \ #--enable=errcheck \
@ -103,10 +121,42 @@ metalinter:
#--enable=unparam \ #--enable=unparam \
#--enable=vet \ #--enable=vet \
build-docker:
metalinter_all:
protoc $(INCLUDE) --lint_out=. types/*.proto
gometalinter.v2 --vendor --deadline=600s --enable-all --disable=lll ./...
########################################
### Docker
DEVDOC_SAVE = docker commit `docker ps -a -n 1 -q` devdoc:local
docker_build:
docker build -t "tendermint/abci-dev" -f Dockerfile.develop . docker build -t "tendermint/abci-dev" -f Dockerfile.develop .
run-docker:
docker run -it --rm -v "$PWD:/go/src/github.com/tendermint/abci" -w "/go/src/github.com/tendermint/abci" "tendermint/abci-dev" /bin/bash
docker_run:
docker run -it -v "$(CURDIR):/go/src/github.com/tendermint/abci" -w "/go/src/github.com/tendermint/abci" "tendermint/abci-dev" /bin/bash
docker_run_rm:
docker run -it --rm -v "$(CURDIR):/go/src/github.com/tendermint/abci" -w "/go/src/github.com/tendermint/abci" "tendermint/abci-dev" /bin/bash
devdoc_init:
docker run -it -v "$(CURDIR):/go/src/github.com/tendermint/abci" -w "/go/src/github.com/tendermint/abci" tendermint/devdoc echo
# TODO make this safer
$(call DEVDOC_SAVE)
devdoc:
docker run -it -v "$(CURDIR):/go/src/github.com/tendermint/abci" -w "/go/src/github.com/tendermint/abci" devdoc:local bash
devdoc_save:
# TODO make this safer
$(call DEVDOC_SAVE)
devdoc_clean:
docker rmi $$(docker images -f "dangling=true" -q)
.PHONY: all build test fmt get_deps ensure_tools protoc install_protoc build-docker run-docker
# 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

+ 18
- 5
README.md View File

@ -15,6 +15,24 @@ Previously, the ABCI was referred to as TMSP.
The community has provided a number of addtional implementations, see the [Tendermint Ecosystem](https://tendermint.com/ecosystem) The community has provided a number of addtional implementations, see the [Tendermint Ecosystem](https://tendermint.com/ecosystem)
## Specification
The [primary specification](https://github.com/tendermint/abci/blob/master/types/types.proto)
is made using Protocol Buffers. To build it, run
```
make protoc
```
See `protoc --help` and [the Protocol Buffers site](https://developers.google.com/protocol-buffers)
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 ## Install
``` ```
@ -140,8 +158,3 @@ func cmdDummy(cmd *cobra.Command, args []string) error {
} }
``` ```
and can be found in [this file](cmd/abci-cli/abci-cli.go).
## Specification
See the [spec file](specification.rst) for more information.

+ 1
- 1
circle.yml View File

@ -15,7 +15,7 @@ checkout:
test: test:
override: override:
- cd $REPO && make get_vendor_deps && make test_integrations
- cd $REPO && make get_tools check get_vendor_deps install test_integrations
post: post:
- cd "$REPO" && bash <(curl -s https://codecov.io/bash) -f coverage.txt - cd "$REPO" && bash <(curl -s https://codecov.io/bash) -f coverage.txt
- cd "$REPO" && mv coverage.txt "${CIRCLE_ARTIFACTS}" - cd "$REPO" && mv coverage.txt "${CIRCLE_ARTIFACTS}"

+ 10
- 10
cmd/abci-cli/abci-cli.go View File

@ -92,6 +92,7 @@ type response struct {
// generic abci response // generic abci response
Data []byte Data []byte
Code uint32 Code uint32
Info string
Log string Log string
Query *queryResponse Query *queryResponse
@ -184,7 +185,7 @@ var consoleCmd = &cobra.Command{
Use: "console", Use: "console",
Short: "start an interactive ABCI console for multiple commands", Short: "start an interactive ABCI console for multiple commands",
Long: `start an interactive ABCI console for multiple commands Long: `start an interactive ABCI console for multiple commands
This command opens an interactive console for running any of the other commands This command opens an interactive console for running any of the other commands
without opening a new connection each time without opening a new connection each time
`, `,
@ -519,14 +520,11 @@ func cmdSetOption(cmd *cobra.Command, args []string) error {
} }
key, val := args[0], args[1] key, val := args[0], args[1]
res, err := client.SetOptionSync(types.RequestSetOption{key, val})
_, err := client.SetOptionSync(types.RequestSetOption{key, val})
if err != nil { if err != nil {
return err return err
} }
printResponse(cmd, args, response{
Code: res.Code,
Log: res.Log,
})
printResponse(cmd, args, response{Log: "OK (SetOption doesn't return anything.)"}) // NOTE: Nothing to show...
return nil return nil
} }
@ -550,6 +548,7 @@ func cmdDeliverTx(cmd *cobra.Command, args []string) error {
printResponse(cmd, args, response{ printResponse(cmd, args, response{
Code: res.Code, Code: res.Code,
Data: res.Data, Data: res.Data,
Info: res.Info,
Log: res.Log, Log: res.Log,
}) })
return nil return nil
@ -560,7 +559,7 @@ func cmdCheckTx(cmd *cobra.Command, args []string) error {
if len(args) == 0 { if len(args) == 0 {
printResponse(cmd, args, response{ printResponse(cmd, args, response{
Code: codeBad, Code: codeBad,
Log: "want the tx",
Info: "want the tx",
}) })
return nil return nil
} }
@ -575,6 +574,7 @@ func cmdCheckTx(cmd *cobra.Command, args []string) error {
printResponse(cmd, args, response{ printResponse(cmd, args, response{
Code: res.Code, Code: res.Code,
Data: res.Data, Data: res.Data,
Info: res.Info,
Log: res.Log, Log: res.Log,
}) })
return nil return nil
@ -587,9 +587,7 @@ func cmdCommit(cmd *cobra.Command, args []string) error {
return err return err
} }
printResponse(cmd, args, response{ printResponse(cmd, args, response{
Code: res.Code,
Data: res.Data, Data: res.Data,
Log: res.Log,
}) })
return nil return nil
} }
@ -599,7 +597,8 @@ func cmdQuery(cmd *cobra.Command, args []string) error {
if len(args) == 0 { if len(args) == 0 {
printResponse(cmd, args, response{ printResponse(cmd, args, response{
Code: codeBad, Code: codeBad,
Log: "want the query",
Info: "want the query",
Log: "",
}) })
return nil return nil
} }
@ -619,6 +618,7 @@ func cmdQuery(cmd *cobra.Command, args []string) error {
} }
printResponse(cmd, args, response{ printResponse(cmd, args, response{
Code: resQuery.Code, Code: resQuery.Code,
Info: resQuery.Info,
Log: resQuery.Log, Log: resQuery.Log,
Query: &queryResponse{ Query: &queryResponse{
Key: resQuery.Key, Key: resQuery.Key,


+ 0
- 2
example/code/code.go View File

@ -6,6 +6,4 @@ const (
CodeTypeEncodingError uint32 = 1 CodeTypeEncodingError uint32 = 1
CodeTypeBadNonce uint32 = 2 CodeTypeBadNonce uint32 = 2
CodeTypeUnauthorized uint32 = 3 CodeTypeUnauthorized uint32 = 3
CodeTypeBadOption uint32 = 101
) )

+ 11
- 9
example/counter/counter.go View File

@ -30,15 +30,17 @@ func (app *CounterApplication) SetOption(req types.RequestSetOption) types.Respo
if key == "serial" && value == "on" { if key == "serial" && value == "on" {
app.serial = true app.serial = true
} else { } else {
return types.ResponseSetOption{
Code: code.CodeTypeBadOption,
Log: cmn.Fmt("Unknown key (%s) or value (%s)", key, value),
}
/*
TODO Panic and have the ABCI server pass an exception.
The client can call SetOptionSync() and get an `error`.
return types.ResponseSetOption{
Error: cmn.Fmt("Unknown key (%s) or value (%s)", key, value),
}
*/
return types.ResponseSetOption{}
} }
return types.ResponseSetOption{
Code: code.CodeTypeOK,
}
return types.ResponseSetOption{}
} }
func (app *CounterApplication) DeliverTx(tx []byte) types.ResponseDeliverTx { func (app *CounterApplication) DeliverTx(tx []byte) types.ResponseDeliverTx {
@ -83,11 +85,11 @@ func (app *CounterApplication) CheckTx(tx []byte) types.ResponseCheckTx {
func (app *CounterApplication) Commit() (resp types.ResponseCommit) { func (app *CounterApplication) Commit() (resp types.ResponseCommit) {
app.hashCount++ app.hashCount++
if app.txCount == 0 { if app.txCount == 0 {
return types.ResponseCommit{Code: code.CodeTypeOK}
return types.ResponseCommit{}
} }
hash := make([]byte, 8) hash := make([]byte, 8)
binary.BigEndian.PutUint64(hash, uint64(app.txCount)) binary.BigEndian.PutUint64(hash, uint64(app.txCount))
return types.ResponseCommit{Code: code.CodeTypeOK, Data: hash}
return types.ResponseCommit{Data: hash}
} }
func (app *CounterApplication) Query(reqQuery types.RequestQuery) types.ResponseQuery { func (app *CounterApplication) Query(reqQuery types.RequestQuery) types.ResponseQuery {


+ 8
- 10
example/dummy/dummy.go View File

@ -6,8 +6,8 @@ import (
"github.com/tendermint/abci/example/code" "github.com/tendermint/abci/example/code"
"github.com/tendermint/abci/types" "github.com/tendermint/abci/types"
wire "github.com/tendermint/go-wire"
"github.com/tendermint/iavl" "github.com/tendermint/iavl"
cmn "github.com/tendermint/tmlibs/common"
dbm "github.com/tendermint/tmlibs/db" dbm "github.com/tendermint/tmlibs/db"
) )
@ -20,7 +20,7 @@ type DummyApplication struct {
} }
func NewDummyApplication() *DummyApplication { func NewDummyApplication() *DummyApplication {
state := iavl.NewVersionedTree(0, dbm.NewMemDB())
state := iavl.NewVersionedTree(dbm.NewMemDB(), 0)
return &DummyApplication{state: state} return &DummyApplication{state: state}
} }
@ -39,9 +39,9 @@ func (app *DummyApplication) DeliverTx(tx []byte) types.ResponseDeliverTx {
} }
app.state.Set(key, value) app.state.Set(key, value)
tags := []*types.KVPair{
{Key: "app.creator", ValueType: types.KVPair_STRING, ValueString: "jae"},
{Key: "app.key", ValueType: types.KVPair_STRING, ValueString: string(key)},
tags := []cmn.KVPair{
{[]byte("app.creator"), []byte("jae")},
{[]byte("app.key"), key},
} }
return types.ResponseDeliverTx{Code: code.CodeTypeOK, Tags: tags} return types.ResponseDeliverTx{Code: code.CodeTypeOK, Tags: tags}
} }
@ -56,16 +56,14 @@ func (app *DummyApplication) Commit() types.ResponseCommit {
var err error var err error
if app.state.Size() > 0 { if app.state.Size() > 0 {
// just add one more to height (kind of arbitrarily stupid)
height := app.state.LatestVersion() + 1
hash, err = app.state.SaveVersion(height)
hash, _, err = app.state.SaveVersion()
if err != nil { if err != nil {
// if this wasn't a dummy app, we'd do something smarter // if this wasn't a dummy app, we'd do something smarter
panic(err) panic(err)
} }
} }
return types.ResponseCommit{Code: code.CodeTypeOK, Data: hash}
return types.ResponseCommit{Data: hash}
} }
func (app *DummyApplication) Query(reqQuery types.RequestQuery) (resQuery types.ResponseQuery) { func (app *DummyApplication) Query(reqQuery types.RequestQuery) (resQuery types.ResponseQuery) {
@ -78,7 +76,7 @@ func (app *DummyApplication) Query(reqQuery types.RequestQuery) (resQuery types.
resQuery.Index = -1 // TODO make Proof return index resQuery.Index = -1 // TODO make Proof return index
resQuery.Key = reqQuery.Data resQuery.Key = reqQuery.Data
resQuery.Value = value resQuery.Value = value
resQuery.Proof = wire.BinaryBytes(proof)
resQuery.Proof = proof.Bytes()
if value != nil { if value != nil {
resQuery.Log = "exists" resQuery.Log = "exists"
} else { } else {


+ 13
- 13
example/dummy/dummy_test.go View File

@ -41,9 +41,9 @@ func testDummy(t *testing.T, app types.Application, tx []byte, key, value string
}) })
require.EqualValues(t, code.CodeTypeOK, resQuery.Code) require.EqualValues(t, code.CodeTypeOK, resQuery.Code)
require.Equal(t, value, string(resQuery.Value)) require.Equal(t, value, string(resQuery.Value))
proof, err := iavl.ReadKeyExistsProof(resQuery.Proof)
proof, err := iavl.ReadKeyProof(resQuery.Proof)
require.Nil(t, err) require.Nil(t, err)
err = proof.Verify([]byte(key), resQuery.Value, proof.RootHash)
err = proof.Verify([]byte(key), resQuery.Value, proof.Root())
require.Nil(t, err, "%+v", err) // NOTE: we have no way to verify the RootHash require.Nil(t, err, "%+v", err) // NOTE: we have no way to verify the RootHash
} }
@ -92,7 +92,7 @@ func TestPersistentDummyInfo(t *testing.T) {
// make and apply block // make and apply block
height = int64(1) height = int64(1)
hash := []byte("foo") hash := []byte("foo")
header := &types.Header{
header := types.Header{
Height: int64(height), Height: int64(height),
} }
dummy.BeginBlock(types.RequestBeginBlock{hash, header, nil, nil}) dummy.BeginBlock(types.RequestBeginBlock{hash, header, nil, nil})
@ -124,11 +124,11 @@ func TestValUpdates(t *testing.T) {
vals1, vals2 := vals[:nInit], dummy.Validators() vals1, vals2 := vals[:nInit], dummy.Validators()
valsEqual(t, vals1, vals2) valsEqual(t, vals1, vals2)
var v1, v2, v3 *types.Validator
var v1, v2, v3 types.Validator
// add some validators // add some validators
v1, v2 = vals[nInit], vals[nInit+1] v1, v2 = vals[nInit], vals[nInit+1]
diff := []*types.Validator{v1, v2}
diff := []types.Validator{v1, v2}
tx1 := MakeValSetChangeTx(v1.PubKey, v1.Power) tx1 := MakeValSetChangeTx(v1.PubKey, v1.Power)
tx2 := MakeValSetChangeTx(v2.PubKey, v2.Power) tx2 := MakeValSetChangeTx(v2.PubKey, v2.Power)
@ -142,7 +142,7 @@ func TestValUpdates(t *testing.T) {
v1.Power = 0 v1.Power = 0
v2.Power = 0 v2.Power = 0
v3.Power = 0 v3.Power = 0
diff = []*types.Validator{v1, v2, v3}
diff = []types.Validator{v1, v2, v3}
tx1 = MakeValSetChangeTx(v1.PubKey, v1.Power) tx1 = MakeValSetChangeTx(v1.PubKey, v1.Power)
tx2 = MakeValSetChangeTx(v2.PubKey, v2.Power) tx2 = MakeValSetChangeTx(v2.PubKey, v2.Power)
tx3 := MakeValSetChangeTx(v3.PubKey, v3.Power) tx3 := MakeValSetChangeTx(v3.PubKey, v3.Power)
@ -160,22 +160,22 @@ func TestValUpdates(t *testing.T) {
} else { } else {
v1.Power = 5 v1.Power = 5
} }
diff = []*types.Validator{v1}
diff = []types.Validator{v1}
tx1 = MakeValSetChangeTx(v1.PubKey, v1.Power) tx1 = MakeValSetChangeTx(v1.PubKey, v1.Power)
makeApplyBlock(t, dummy, 3, diff, tx1) makeApplyBlock(t, dummy, 3, diff, tx1)
vals1 = append([]*types.Validator{v1}, vals1[1:]...)
vals1 = append([]types.Validator{v1}, vals1[1:]...)
vals2 = dummy.Validators() vals2 = dummy.Validators()
valsEqual(t, vals1, vals2) valsEqual(t, vals1, vals2)
} }
func makeApplyBlock(t *testing.T, dummy types.Application, heightInt int, diff []*types.Validator, txs ...[]byte) {
func makeApplyBlock(t *testing.T, dummy types.Application, heightInt int, diff []types.Validator, txs ...[]byte) {
// make and apply block // make and apply block
height := int64(heightInt) height := int64(heightInt)
hash := []byte("foo") hash := []byte("foo")
header := &types.Header{
header := types.Header{
Height: height, Height: height,
} }
@ -193,7 +193,7 @@ func makeApplyBlock(t *testing.T, dummy types.Application, heightInt int, diff [
} }
// order doesn't matter // order doesn't matter
func valsEqual(t *testing.T, vals1, vals2 []*types.Validator) {
func valsEqual(t *testing.T, vals1, vals2 []types.Validator) {
if len(vals1) != len(vals2) { if len(vals1) != len(vals2) {
t.Fatalf("vals dont match in len. got %d, expected %d", len(vals2), len(vals1)) t.Fatalf("vals dont match in len. got %d, expected %d", len(vals2), len(vals1))
} }
@ -310,8 +310,8 @@ func testClient(t *testing.T, app abcicli.Client, tx []byte, key, value string)
require.Nil(t, err) require.Nil(t, err)
require.Equal(t, code.CodeTypeOK, resQuery.Code) require.Equal(t, code.CodeTypeOK, resQuery.Code)
require.Equal(t, value, string(resQuery.Value)) require.Equal(t, value, string(resQuery.Value))
proof, err := iavl.ReadKeyExistsProof(resQuery.Proof)
proof, err := iavl.ReadKeyProof(resQuery.Proof)
require.Nil(t, err) require.Nil(t, err)
err = proof.Verify([]byte(key), resQuery.Value, proof.RootHash)
err = proof.Verify([]byte(key), resQuery.Value, proof.Root())
require.Nil(t, err, "%+v", err) // NOTE: we have no way to verify the RootHash require.Nil(t, err, "%+v", err) // NOTE: we have no way to verify the RootHash
} }

+ 4
- 4
example/dummy/helpers.go View File

@ -8,18 +8,18 @@ import (
// RandVal creates one random validator, with a key derived // RandVal creates one random validator, with a key derived
// from the input value // from the input value
func RandVal(i int) *types.Validator {
func RandVal(i int) types.Validator {
pubkey := crypto.GenPrivKeyEd25519FromSecret([]byte(cmn.Fmt("test%d", i))).PubKey().Bytes() pubkey := crypto.GenPrivKeyEd25519FromSecret([]byte(cmn.Fmt("test%d", i))).PubKey().Bytes()
power := cmn.RandUint16() + 1 power := cmn.RandUint16() + 1
return &types.Validator{pubkey, int64(power)}
return types.Validator{pubkey, int64(power)}
} }
// RandVals returns a list of cnt validators for initializing // RandVals returns a list of cnt validators for initializing
// the application. Note that the keys are deterministically // the application. Note that the keys are deterministically
// derived from the index in the array, while the power is // derived from the index in the array, while the power is
// random (Change this if not desired) // random (Change this if not desired)
func RandVals(cnt int) []*types.Validator {
res := make([]*types.Validator, cnt)
func RandVals(cnt int) []types.Validator {
res := make([]types.Validator, cnt)
for i := 0; i < cnt; i++ { for i := 0; i < cnt; i++ {
res[i] = RandVal(i) res[i] = RandVal(i)
} }


+ 12
- 13
example/dummy/persistent_dummy.go View File

@ -28,7 +28,7 @@ type PersistentDummyApplication struct {
app *DummyApplication app *DummyApplication
// validator set // validator set
ValUpdates []*types.Validator
ValUpdates []types.Validator
logger log.Logger logger log.Logger
} }
@ -40,7 +40,7 @@ func NewPersistentDummyApplication(dbDir string) *PersistentDummyApplication {
panic(err) panic(err)
} }
stateTree := iavl.NewVersionedTree(500, db)
stateTree := iavl.NewVersionedTree(db, 500)
stateTree.Load() stateTree.Load()
return &PersistentDummyApplication{ return &PersistentDummyApplication{
@ -55,8 +55,7 @@ func (app *PersistentDummyApplication) SetLogger(l log.Logger) {
func (app *PersistentDummyApplication) Info(req types.RequestInfo) types.ResponseInfo { func (app *PersistentDummyApplication) Info(req types.RequestInfo) types.ResponseInfo {
res := app.app.Info(req) res := app.app.Info(req)
var latestVersion uint64 = app.app.state.LatestVersion() // TODO: change to int64
res.LastBlockHeight = int64(latestVersion)
res.LastBlockHeight = app.app.state.Version64()
res.LastBlockAppHash = app.app.state.Hash() res.LastBlockAppHash = app.app.state.Hash()
return res return res
} }
@ -87,18 +86,18 @@ func (app *PersistentDummyApplication) CheckTx(tx []byte) types.ResponseCheckTx
func (app *PersistentDummyApplication) Commit() types.ResponseCommit { func (app *PersistentDummyApplication) Commit() types.ResponseCommit {
// Save a new version for next height // Save a new version for next height
height := app.app.state.LatestVersion() + 1
var height int64
var appHash []byte var appHash []byte
var err error var err error
appHash, err = app.app.state.SaveVersion(height)
appHash, height, err = app.app.state.SaveVersion()
if err != nil { if err != nil {
// if this wasn't a dummy app, we'd do something smarter // if this wasn't a dummy app, we'd do something smarter
panic(err) panic(err)
} }
app.logger.Info("Commit block", "height", height, "root", appHash) app.logger.Info("Commit block", "height", height, "root", appHash)
return types.ResponseCommit{Code: code.CodeTypeOK, Data: appHash}
return types.ResponseCommit{Data: appHash}
} }
func (app *PersistentDummyApplication) Query(reqQuery types.RequestQuery) types.ResponseQuery { func (app *PersistentDummyApplication) Query(reqQuery types.RequestQuery) types.ResponseQuery {
@ -119,7 +118,7 @@ func (app *PersistentDummyApplication) InitChain(req types.RequestInitChain) typ
// Track the block hash and header information // Track the block hash and header information
func (app *PersistentDummyApplication) BeginBlock(req types.RequestBeginBlock) types.ResponseBeginBlock { func (app *PersistentDummyApplication) BeginBlock(req types.RequestBeginBlock) types.ResponseBeginBlock {
// reset valset changes // reset valset changes
app.ValUpdates = make([]*types.Validator, 0)
app.ValUpdates = make([]types.Validator, 0)
return types.ResponseBeginBlock{} return types.ResponseBeginBlock{}
} }
@ -131,7 +130,7 @@ func (app *PersistentDummyApplication) EndBlock(req types.RequestEndBlock) types
//--------------------------------------------- //---------------------------------------------
// update validators // update validators
func (app *PersistentDummyApplication) Validators() (validators []*types.Validator) {
func (app *PersistentDummyApplication) Validators() (validators []types.Validator) {
app.app.state.Iterate(func(key, value []byte) bool { app.app.state.Iterate(func(key, value []byte) bool {
if isValidatorTx(key) { if isValidatorTx(key) {
validator := new(types.Validator) validator := new(types.Validator)
@ -139,7 +138,7 @@ func (app *PersistentDummyApplication) Validators() (validators []*types.Validat
if err != nil { if err != nil {
panic(err) panic(err)
} }
validators = append(validators, validator)
validators = append(validators, *validator)
} }
return false return false
}) })
@ -190,11 +189,11 @@ func (app *PersistentDummyApplication) execValidatorTx(tx []byte) types.Response
} }
// update // update
return app.updateValidator(&types.Validator{pubkey, power})
return app.updateValidator(types.Validator{pubkey, power})
} }
// add, update, or remove a validator // add, update, or remove a validator
func (app *PersistentDummyApplication) updateValidator(v *types.Validator) types.ResponseDeliverTx {
func (app *PersistentDummyApplication) updateValidator(v types.Validator) types.ResponseDeliverTx {
key := []byte("val:" + string(v.PubKey)) key := []byte("val:" + string(v.PubKey))
if v.Power == 0 { if v.Power == 0 {
// remove validator // remove validator
@ -207,7 +206,7 @@ func (app *PersistentDummyApplication) updateValidator(v *types.Validator) types
} else { } else {
// add or update validator // add or update validator
value := bytes.NewBuffer(make([]byte, 0)) value := bytes.NewBuffer(make([]byte, 0))
if err := types.WriteMessage(v, value); err != nil {
if err := types.WriteMessage(&v, value); err != nil {
return types.ResponseDeliverTx{ return types.ResponseDeliverTx{
Code: code.CodeTypeEncodingError, Code: code.CodeTypeEncodingError,
Log: fmt.Sprintf("Error encoding validator: %v", err)} Log: fmt.Sprintf("Error encoding validator: %v", err)}


+ 21
- 26
glide.lock View File

@ -1,34 +1,31 @@
hash: 6cb2c869c8ce7d9e43b1e8930b9b1bc974ebb3d36d4b704fc78b77efba956a13
updated: 2017-11-30T17:08:29.176515576-05:00
hash: 1fbe2d780f4901d78d2e986a694e6335ae07715317c7d680db64e1d69f08aff7
updated: 2018-01-05T22:07:26.119496005-05:00
imports: imports:
- name: github.com/btcsuite/btcd - name: github.com/btcsuite/btcd
version: 2e60448ffcc6bf78332d1fe590260095f554dd78
version: c7588cbf7690cd9f047a28efa2dcd8f2435a4e5e
subpackages: subpackages:
- btcec - btcec
- name: github.com/go-kit/kit - name: github.com/go-kit/kit
version: e3b2152e0063c5f05efea89ecbe297852af2a92d
version: e2b298466b32c7cd5579a9b9b07e968fc9d9452c
subpackages: subpackages:
- log - log
- log/level - log/level
- log/term - log/term
- name: github.com/go-logfmt/logfmt - name: github.com/go-logfmt/logfmt
version: 390ab7935ee28ec6b286364bba9b4dd6410cb3d5 version: 390ab7935ee28ec6b286364bba9b4dd6410cb3d5
- name: github.com/go-playground/locales
version: e4cbcb5d0652150d40ad0646651076b6bd2be4f6
subpackages:
- currency
- name: github.com/go-playground/universal-translator
version: 71201497bace774495daed26a3874fd339e0b538
- name: github.com/go-stack/stack - name: github.com/go-stack/stack
version: 259ab82a6cad3992b4e21ff5cac294ccb06474bc
version: 817915b46b97fd7bb80e8ab6b69f01a53ac3eebf
- name: github.com/gogo/protobuf - name: github.com/gogo/protobuf
version: 342cbe0a04158f6dcb03ca0079991a51a4248c02 version: 342cbe0a04158f6dcb03ca0079991a51a4248c02
subpackages: subpackages:
- gogoproto - gogoproto
- jsonpb
- proto - proto
- protoc-gen-gogo/descriptor - protoc-gen-gogo/descriptor
- sortkeys
- types
- name: github.com/golang/protobuf - name: github.com/golang/protobuf
version: 1e59b77b52bf8e4b449a57e6f79f21226d571845
version: 1643683e1b54a9e88ad26d98f81400c8c9d9f4f9
subpackages: subpackages:
- proto - proto
- ptypes - ptypes
@ -44,13 +41,13 @@ imports:
- name: github.com/kr/logfmt - name: github.com/kr/logfmt
version: b84e30acd515aadc4b783ad4ff83aff3299bdfe0 version: b84e30acd515aadc4b783ad4ff83aff3299bdfe0
- name: github.com/pkg/errors - name: github.com/pkg/errors
version: f15c970de5b76fac0b59abb32d62c17cc7bed265
version: 645ef00459ed84a119197bfb8d8205042c6df63d
- name: github.com/spf13/cobra - name: github.com/spf13/cobra
version: 7b2c5ac9fc04fc5efafb60700713d4fa609b777b version: 7b2c5ac9fc04fc5efafb60700713d4fa609b777b
- name: github.com/spf13/pflag - name: github.com/spf13/pflag
version: 4c012f6dcd9546820e378d0bdda4d8fc772cdfea
version: 97afa5e7ca8a08a383cb259e06636b5e2cc7897f
- name: github.com/syndtr/goleveldb - name: github.com/syndtr/goleveldb
version: adf24ef3f94bd13ec4163060b21a5678f22b429b
version: b89cc31ef7977104127d34c1bd31ebd1a9db2199
subpackages: subpackages:
- leveldb - leveldb
- leveldb/cache - leveldb/cache
@ -65,27 +62,27 @@ imports:
- leveldb/table - leveldb/table
- leveldb/util - leveldb/util
- name: github.com/tendermint/ed25519 - name: github.com/tendermint/ed25519
version: d8387025d2b9d158cf4efb07e7ebf814bcce2057
version: 1f52c6f8b8a5c7908aff4497c186af344b428925
subpackages: subpackages:
- edwards25519 - edwards25519
- extra25519 - extra25519
- name: github.com/tendermint/go-crypto - name: github.com/tendermint/go-crypto
version: b4f04f196cd719660e43b91202cd60d9a95b1837
version: 3ebe3250ff67e8af92f00ec3dc427c14a7eb1066
- name: github.com/tendermint/go-wire - name: github.com/tendermint/go-wire
version: 5ab49b4c6ad674da6b81442911cf713ef0afb544
version: 27be46e25124ddf775e23317a83647ce62a93f6b
subpackages: subpackages:
- data - data
- name: github.com/tendermint/iavl - name: github.com/tendermint/iavl
version: 595f3dcd5b6cd4a292e90757ae6d367fd7a6e653
version: ed0bbf0acc51e75f72c76099293113c2d67199b9
- name: github.com/tendermint/tmlibs - name: github.com/tendermint/tmlibs
version: 21fb7819891997c96838308b4eba5a50b07ff03f
version: 1afc0340069d38e71f137bc9e4fa4fadf12f76df
subpackages: subpackages:
- common - common
- db - db
- log - log
- process - process
- name: golang.org/x/crypto - name: golang.org/x/crypto
version: 94eea52f7b742c7cbe0b03b22f0c4c8631ece122
version: edd5e9b0879d13ee6970a50153d85b8fec9f7686
subpackages: subpackages:
- nacl/secretbox - nacl/secretbox
- openpgp/armor - openpgp/armor
@ -94,7 +91,7 @@ imports:
- ripemd160 - ripemd160
- salsa20/salsa - salsa20/salsa
- name: golang.org/x/net - name: golang.org/x/net
version: a8b9294777976932365dabb6640cf1468d95c70f
version: cd69bc3fc700721b709c3a59e16e24c67b58f6ff
subpackages: subpackages:
- context - context
- http2 - http2
@ -104,14 +101,14 @@ imports:
- lex/httplex - lex/httplex
- trace - trace
- name: golang.org/x/text - name: golang.org/x/text
version: 75cc3cad82b5f47d3fb229ddda8c5167da14f294
version: c01e4764d870b77f8abe5096ee19ad20d80e8075
subpackages: subpackages:
- secure/bidirule - secure/bidirule
- transform - transform
- unicode/bidi - unicode/bidi
- unicode/norm - unicode/norm
- name: google.golang.org/genproto - name: google.golang.org/genproto
version: 7f0da29060c682909f650ad8ed4e515bd74fa12a
version: f676e0f3ac6395ff1a529ae59a6670878a8371a6
subpackages: subpackages:
- googleapis/rpc/status - googleapis/rpc/status
- name: google.golang.org/grpc - name: google.golang.org/grpc
@ -133,8 +130,6 @@ imports:
- status - status
- tap - tap
- transport - transport
- name: gopkg.in/go-playground/validator.v9
version: 61caf9d3038e1af346dbf5c2e16f6678e1548364
testImports: testImports:
- name: github.com/davecgh/go-spew - name: github.com/davecgh/go-spew
version: 04cdfd42973bb9c8589fd6a731800cf222fde1a9 version: 04cdfd42973bb9c8589fd6a731800cf222fde1a9


+ 1
- 1
glide.yaml View File

@ -13,7 +13,7 @@ import:
subpackages: subpackages:
- data - data
- package: github.com/tendermint/iavl - package: github.com/tendermint/iavl
version: develop
version: sdk2
- package: github.com/tendermint/tmlibs - package: github.com/tendermint/tmlibs
version: develop version: develop
subpackages: subpackages:


+ 13
- 13
scripts/dist_build.sh View File

@ -19,7 +19,7 @@ XC_ARCH=${XC_ARCH:-"386 amd64 arm"}
XC_OS=${XC_OS:-"solaris darwin freebsd linux windows"} XC_OS=${XC_OS:-"solaris darwin freebsd linux windows"}
# Make sure build tools are available. # Make sure build tools are available.
make tools
make get_tools
# Get VENDORED dependencies # Get VENDORED dependencies
make get_vendor_deps make get_vendor_deps
@ -29,23 +29,23 @@ BINARY="abci-cli"
# Build! # Build!
echo "==> Building..." echo "==> Building..."
"$(which gox)" \ "$(which gox)" \
-os="${XC_OS}" \
-arch="${XC_ARCH}" \
-osarch="!darwin/arm !solaris/amd64 !freebsd/amd64" \
-ldflags "-X ${GIT_IMPORT}.GitCommit='${GIT_COMMIT}' -X ${GIT_IMPORT}.GitDescribe='${GIT_DESCRIBE}'" \
-output "build/pkg/{{.OS}}_{{.Arch}}/$BINARY" \
-tags="${BUILD_TAGS}" \
github.com/tendermint/abci/cmd/$BINARY
-os="${XC_OS}" \
-arch="${XC_ARCH}" \
-osarch="!darwin/arm !solaris/amd64 !freebsd/amd64" \
-ldflags "-X ${GIT_IMPORT}.GitCommit='${GIT_COMMIT}' -X ${GIT_IMPORT}.GitDescribe='${GIT_DESCRIBE}'" \
-output "build/pkg/{{.OS}}_{{.Arch}}/$BINARY" \
-tags="${BUILD_TAGS}" \
github.com/tendermint/abci/cmd/$BINARY
# Zip all the files. # Zip all the files.
echo "==> Packaging..." echo "==> Packaging..."
for PLATFORM in $(find ./build/pkg -mindepth 1 -maxdepth 1 -type d); do for PLATFORM in $(find ./build/pkg -mindepth 1 -maxdepth 1 -type d); do
OSARCH=$(basename "${PLATFORM}")
echo "--> ${OSARCH}"
OSARCH=$(basename "${PLATFORM}")
echo "--> ${OSARCH}"
pushd "$PLATFORM" >/dev/null 2>&1
zip "../${OSARCH}.zip" ./*
popd >/dev/null 2>&1
pushd "$PLATFORM" >/dev/null 2>&1
zip "../${OSARCH}.zip" ./*
popd >/dev/null 2>&1
done done


+ 0
- 17
specification.rst View File

@ -1,23 +1,6 @@
Specification Specification
============= =============
The `primary
specification <https://github.com/tendermint/abci/blob/master/types/types.proto>`__
is made using Protocol Buffers. To build it, run
::
make protoc
See ``protoc --help`` and `the Protocol Buffers
site <https://developers.google.com/protocol-buffers/>`__ 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>`__.
Message Types Message Types
~~~~~~~~~~~~~ ~~~~~~~~~~~~~


+ 7
- 10
tests/server/client.go View File

@ -13,11 +13,11 @@ import (
func InitChain(client abcicli.Client) error { func InitChain(client abcicli.Client) error {
total := 10 total := 10
vals := make([]*types.Validator, total)
vals := make([]types.Validator, total)
for i := 0; i < total; i++ { for i := 0; i < total; i++ {
pubkey := crypto.GenPrivKeyEd25519FromSecret([]byte(cmn.Fmt("test%d", i))).PubKey().Bytes() pubkey := crypto.GenPrivKeyEd25519FromSecret([]byte(cmn.Fmt("test%d", i))).PubKey().Bytes()
power := cmn.RandInt() power := cmn.RandInt()
vals[i] = &types.Validator{pubkey, int64(power)}
vals[i] = types.Validator{pubkey, int64(power)}
} }
_, err := client.InitChainSync(types.RequestInitChain{Validators: vals}) _, err := client.InitChainSync(types.RequestInitChain{Validators: vals})
if err != nil { if err != nil {
@ -29,12 +29,10 @@ func InitChain(client abcicli.Client) error {
} }
func SetOption(client abcicli.Client, key, value string) error { func SetOption(client abcicli.Client, key, value string) error {
res, err := client.SetOptionSync(types.RequestSetOption{Key: key, Value: value})
log := res.GetLog()
_, err := client.SetOptionSync(types.RequestSetOption{Key: key, Value: value})
if err != nil { if err != nil {
fmt.Println("Failed test: SetOption") fmt.Println("Failed test: SetOption")
fmt.Printf("setting %v=%v: \nlog: %v\n", key, value, log)
fmt.Println("Failed test: SetOption")
fmt.Printf("error while setting %v=%v: \nerror: %v\n", key, value)
return err return err
} }
fmt.Println("Passed test: SetOption") fmt.Println("Passed test: SetOption")
@ -43,16 +41,15 @@ func SetOption(client abcicli.Client, key, value string) error {
func Commit(client abcicli.Client, hashExp []byte) error { func Commit(client abcicli.Client, hashExp []byte) error {
res, err := client.CommitSync() res, err := client.CommitSync()
_, data := res.Code, res.Data
data := res.Data
if err != nil { if err != nil {
fmt.Println("Failed test: Commit") fmt.Println("Failed test: Commit")
fmt.Printf("committing %v\nlog: %v\n", res.GetLog(), err)
fmt.Printf("error while committing: %v\n", err)
return err return err
} }
if !bytes.Equal(data, hashExp) { if !bytes.Equal(data, hashExp) {
fmt.Println("Failed test: Commit") fmt.Println("Failed test: Commit")
fmt.Printf("Commit hash was unexpected. Got %X expected %X\n",
data.Bytes(), hashExp)
fmt.Printf("Commit hash was unexpected. Got %X expected %X\n", data, hashExp)
return errors.New("CommitTx failed") return errors.New("CommitTx failed")
} }
fmt.Println("Passed test: Commit") fmt.Println("Passed test: Commit")


+ 3
- 1
tests/test.sh View File

@ -5,5 +5,7 @@ set -e
bash tests/test_app/test.sh bash tests/test_app/test.sh
# test the cli against the examples in the tutorial at tendermint.com # test the cli against the examples in the tutorial at tendermint.com
bash tests/test_cli/test.sh
# TODO: make these less fragile
# bash tests/test_cli/test.sh

+ 0
- 3
tests/test_app/app.go View File

@ -37,9 +37,6 @@ func commit(client abcicli.Client, hashExp []byte) {
if err != nil { if err != nil {
panicf("client error: %v", err) panicf("client error: %v", err)
} }
if res.IsErr() {
panicf("committing err %v\n", res)
}
if !bytes.Equal(res.Data, hashExp) { if !bytes.Equal(res.Data, hashExp) {
panicf("Commit hash was unexpected. Got %X expected %X", res.Data, hashExp) panicf("Commit hash was unexpected. Got %X expected %X", res.Data, hashExp)
} }


+ 23
- 23
tests/test_cli/test.sh View File

@ -10,29 +10,29 @@ DIR="$( cd -P "$( dirname "$SOURCE" )/../.." && pwd )"
cd "$DIR" || exit cd "$DIR" || exit
function testExample() { function testExample() {
N=$1
INPUT=$2
APP="$3 $4"
echo "Example $N: $APP"
$APP &> /dev/null &
sleep 2
abci-cli --log_level=error --verbose batch < "$INPUT" > "${INPUT}.out.new"
killall "$3"
pre=$(sha256sum < "${INPUT}.out")
post=$(sha256sum < "${INPUT}.out.new")
if [[ "$pre" != "$post" ]]; then
echo "You broke the tutorial"
echo "Got:"
cat "${INPUT}.out.new"
echo "Expected:"
cat "${INPUT}.out"
exit 1
fi
rm "${INPUT}".out.new
N=$1
INPUT=$2
APP="$3 $4"
echo "Example $N: $APP"
$APP &> /dev/null &
sleep 2
abci-cli --log_level=error --verbose batch < "$INPUT" > "${INPUT}.out.new"
killall "$3"
pre=$(shasum < "${INPUT}.out")
post=$(shasum < "${INPUT}.out.new")
if [[ "$pre" != "$post" ]]; then
echo "You broke the tutorial"
echo "Got:"
cat "${INPUT}.out.new"
echo "Expected:"
cat "${INPUT}.out"
exit 1
fi
rm "${INPUT}".out.new
} }
testExample 1 tests/test_cli/ex1.abci abci-cli dummy testExample 1 tests/test_cli/ex1.abci abci-cli dummy


+ 2
- 2
types/application.go View File

@ -42,7 +42,7 @@ func (BaseApplication) Info(req RequestInfo) ResponseInfo {
} }
func (BaseApplication) SetOption(req RequestSetOption) ResponseSetOption { func (BaseApplication) SetOption(req RequestSetOption) ResponseSetOption {
return ResponseSetOption{Code: CodeTypeOK}
return ResponseSetOption{}
} }
func (BaseApplication) DeliverTx(tx []byte) ResponseDeliverTx { func (BaseApplication) DeliverTx(tx []byte) ResponseDeliverTx {
@ -54,7 +54,7 @@ func (BaseApplication) CheckTx(tx []byte) ResponseCheckTx {
} }
func (BaseApplication) Commit() ResponseCommit { func (BaseApplication) Commit() ResponseCommit {
return ResponseCommit{Code: CodeTypeOK}
return ResponseCommit{}
} }
func (BaseApplication) Query(req RequestQuery) ResponseQuery { func (BaseApplication) Query(req RequestQuery) ResponseQuery {


+ 7
- 5
types/messages_test.go View File

@ -8,18 +8,20 @@ import (
"github.com/gogo/protobuf/proto" "github.com/gogo/protobuf/proto"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
cmn "github.com/tendermint/tmlibs/common"
) )
func TestMarshalJSON(t *testing.T) { func TestMarshalJSON(t *testing.T) {
b, err := json.Marshal(&ResponseDeliverTx{}) b, err := json.Marshal(&ResponseDeliverTx{})
assert.Nil(t, err) assert.Nil(t, err)
assert.True(t, strings.Contains(string(b), "code"))
// Do not include empty fields.
assert.False(t, strings.Contains(string(b), "code"))
r1 := ResponseCheckTx{ r1 := ResponseCheckTx{
Code: 1,
Data: []byte("hello"),
Gas: 43,
Fee: 12,
Code: 1,
Data: []byte("hello"),
GasWanted: 43,
Fee: cmn.KI64Pair{[]byte("pho"), 12},
} }
b, err = json.Marshal(&r1) b, err = json.Marshal(&r1)
assert.Nil(t, err) assert.Nil(t, err)


+ 1
- 36
types/result.go View File

@ -3,7 +3,6 @@ package types
import ( import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"fmt"
"github.com/gogo/protobuf/jsonpb" "github.com/gogo/protobuf/jsonpb"
) )
@ -22,11 +21,6 @@ func (r ResponseCheckTx) IsErr() bool {
return r.Code != CodeTypeOK return r.Code != CodeTypeOK
} }
// Error implements error interface by formatting response as string.
func (r ResponseCheckTx) Error() string {
return fmtError(r.Code, r.Log)
}
// IsOK returns true if Code is OK. // IsOK returns true if Code is OK.
func (r ResponseDeliverTx) IsOK() bool { func (r ResponseDeliverTx) IsOK() bool {
return r.Code == CodeTypeOK return r.Code == CodeTypeOK
@ -37,26 +31,6 @@ func (r ResponseDeliverTx) IsErr() bool {
return r.Code != CodeTypeOK return r.Code != CodeTypeOK
} }
// Error implements error interface by formatting response as string.
func (r ResponseDeliverTx) Error() string {
return fmtError(r.Code, r.Log)
}
// IsOK returns true if Code is OK.
func (r ResponseCommit) IsOK() bool {
return r.Code == CodeTypeOK
}
// IsErr returns true if Code is something other than OK.
func (r ResponseCommit) IsErr() bool {
return r.Code != CodeTypeOK
}
// Error implements error interface by formatting response as string.
func (r ResponseCommit) Error() string {
return fmtError(r.Code, r.Log)
}
// IsOK returns true if Code is OK. // IsOK returns true if Code is OK.
func (r ResponseQuery) IsOK() bool { func (r ResponseQuery) IsOK() bool {
return r.Code == CodeTypeOK return r.Code == CodeTypeOK
@ -67,15 +41,6 @@ func (r ResponseQuery) IsErr() bool {
return r.Code != CodeTypeOK return r.Code != CodeTypeOK
} }
// Error implements error interface by formatting response as string.
func (r ResponseQuery) Error() string {
return fmtError(r.Code, r.Log)
}
func fmtError(code uint32, log string) string {
return fmt.Sprintf("Error code (%d): %s", code, log)
}
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// override JSON marshalling so we dont emit defaults (ie. disable omitempty) // override JSON marshalling so we dont emit defaults (ie. disable omitempty)
// note we need Unmarshal functions too because protobuf had the bright idea // note we need Unmarshal functions too because protobuf had the bright idea
@ -84,7 +49,7 @@ func fmtError(code uint32, log string) string {
var ( var (
jsonpbMarshaller = jsonpb.Marshaler{ jsonpbMarshaller = jsonpb.Marshaler{
EnumsAsInts: true, EnumsAsInts: true,
EmitDefaults: true,
EmitDefaults: false,
} }
jsonpbUnmarshaller = jsonpb.Unmarshaler{} jsonpbUnmarshaller = jsonpb.Unmarshaler{}
) )


+ 0
- 74
types/result_test.go View File

@ -1,74 +0,0 @@
package types
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestResponseQuery(t *testing.T) {
res := ResponseQuery{
Code: CodeTypeOK,
Index: 0,
Key: []byte("hello"),
Value: []byte("world"),
Height: 1,
}
assert.False(t, res.IsErr())
res = ResponseQuery{
Code: 1,
Index: 0,
Key: []byte("hello"),
Value: []byte("world"),
Height: 1,
Log: "bad",
}
assert.True(t, res.IsErr())
assert.Equal(t, "Error code (1): bad", res.Error())
}
func TestResponseDeliverTx(t *testing.T) {
res := ResponseDeliverTx{
Code: CodeTypeOK,
Data: []byte("Victor Mancha"),
}
assert.False(t, res.IsErr())
res = ResponseDeliverTx{
Code: 1,
Log: "bad",
}
assert.True(t, res.IsErr())
assert.Equal(t, "Error code (1): bad", res.Error())
}
func TestResponseCheckTx(t *testing.T) {
res := ResponseCheckTx{
Code: CodeTypeOK,
Data: []byte("Talos"),
}
assert.False(t, res.IsErr())
res = ResponseCheckTx{
Code: 1,
Log: "bad",
}
assert.True(t, res.IsErr())
assert.Equal(t, "Error code (1): bad", res.Error())
}
func TestResponseCommit(t *testing.T) {
res := ResponseCommit{
Code: CodeTypeOK,
Data: []byte("Old Lace"),
}
assert.False(t, res.IsErr())
res = ResponseCommit{
Code: 1,
Log: "bad",
}
assert.True(t, res.IsErr())
assert.Equal(t, "Error code (1): bad", res.Error())
}

+ 267
- 245
types/types.pb.go View File

@ -42,7 +42,6 @@ It has these top-level messages:
PartSetHeader PartSetHeader
Validator Validator
Evidence Evidence
KVPair
*/ */
//nolint: gas //nolint: gas
package types package types
@ -51,8 +50,7 @@ import proto "github.com/gogo/protobuf/proto"
import fmt "fmt" import fmt "fmt"
import math "math" import math "math"
import _ "github.com/gogo/protobuf/gogoproto" import _ "github.com/gogo/protobuf/gogoproto"
import github_com_tendermint_go_wire_data "github.com/tendermint/go-wire/data"
import common "github.com/tendermint/tmlibs/common"
import context "golang.org/x/net/context" import context "golang.org/x/net/context"
import grpc "google.golang.org/grpc" import grpc "google.golang.org/grpc"
@ -68,27 +66,6 @@ var _ = math.Inf
// proto package needs to be updated. // proto package needs to be updated.
const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package
type KVPair_Type int32
const (
KVPair_STRING KVPair_Type = 0
KVPair_INT KVPair_Type = 1
)
var KVPair_Type_name = map[int32]string{
0: "STRING",
1: "INT",
}
var KVPair_Type_value = map[string]int32{
"STRING": 0,
"INT": 1,
}
func (x KVPair_Type) String() string {
return proto.EnumName(KVPair_Type_name, int32(x))
}
func (KVPair_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptorTypes, []int{34, 0} }
type Request struct { type Request struct {
// Types that are valid to be assigned to Value: // Types that are valid to be assigned to Value:
// *Request_Echo // *Request_Echo
@ -529,6 +506,7 @@ func (m *RequestInfo) GetVersion() string {
return "" return ""
} }
// nondeterministic
type RequestSetOption struct { type RequestSetOption struct {
Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,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"` Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
@ -554,7 +532,7 @@ func (m *RequestSetOption) GetValue() string {
} }
type RequestInitChain struct { type RequestInitChain struct {
Validators []*Validator `protobuf:"bytes,1,rep,name=validators" json:"validators,omitempty"`
Validators []Validator `protobuf:"bytes,1,rep,name=validators" json:"validators"`
} }
func (m *RequestInitChain) Reset() { *m = RequestInitChain{} } func (m *RequestInitChain) Reset() { *m = RequestInitChain{} }
@ -562,7 +540,7 @@ func (m *RequestInitChain) String() string { return proto.CompactText
func (*RequestInitChain) ProtoMessage() {} func (*RequestInitChain) ProtoMessage() {}
func (*RequestInitChain) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{5} } func (*RequestInitChain) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{5} }
func (m *RequestInitChain) GetValidators() []*Validator {
func (m *RequestInitChain) GetValidators() []Validator {
if m != nil { if m != nil {
return m.Validators return m.Validators
} }
@ -610,10 +588,10 @@ func (m *RequestQuery) GetProve() bool {
} }
type RequestBeginBlock struct { 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"`
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"`
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"`
ByzantineValidators []Evidence `protobuf:"bytes,4,rep,name=byzantine_validators,json=byzantineValidators" json:"byzantine_validators"`
} }
func (m *RequestBeginBlock) Reset() { *m = RequestBeginBlock{} } func (m *RequestBeginBlock) Reset() { *m = RequestBeginBlock{} }
@ -628,11 +606,11 @@ func (m *RequestBeginBlock) GetHash() []byte {
return nil return nil
} }
func (m *RequestBeginBlock) GetHeader() *Header {
func (m *RequestBeginBlock) GetHeader() Header {
if m != nil { if m != nil {
return m.Header return m.Header
} }
return nil
return Header{}
} }
func (m *RequestBeginBlock) GetAbsentValidators() []int32 { func (m *RequestBeginBlock) GetAbsentValidators() []int32 {
@ -642,7 +620,7 @@ func (m *RequestBeginBlock) GetAbsentValidators() []int32 {
return nil return nil
} }
func (m *RequestBeginBlock) GetByzantineValidators() []*Evidence {
func (m *RequestBeginBlock) GetByzantineValidators() []Evidence {
if m != nil { if m != nil {
return m.ByzantineValidators return m.ByzantineValidators
} }
@ -1136,6 +1114,7 @@ func _Response_OneofSizer(msg proto.Message) (n int) {
return n return n
} }
// nondeterministic
type ResponseException struct { type ResponseException struct {
Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"`
} }
@ -1216,9 +1195,12 @@ func (m *ResponseInfo) GetLastBlockAppHash() []byte {
return nil return nil
} }
// nondeterministic
type ResponseSetOption struct { type ResponseSetOption struct {
Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"`
Log string `protobuf:"bytes,2,opt,name=log,proto3" json:"log,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"`
} }
func (m *ResponseSetOption) Reset() { *m = ResponseSetOption{} } func (m *ResponseSetOption) Reset() { *m = ResponseSetOption{} }
@ -1240,6 +1222,13 @@ func (m *ResponseSetOption) GetLog() string {
return "" return ""
} }
func (m *ResponseSetOption) GetInfo() string {
if m != nil {
return m.Info
}
return ""
}
type ResponseInitChain struct { type ResponseInitChain struct {
} }
@ -1249,13 +1238,15 @@ func (*ResponseInitChain) ProtoMessage() {}
func (*ResponseInitChain) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{18} } func (*ResponseInitChain) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{18} }
type ResponseQuery struct { type ResponseQuery struct {
Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"`
Index int64 `protobuf:"varint,2,opt,name=index,proto3" json:"index,omitempty"`
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 int64 `protobuf:"varint,6,opt,name=height,proto3" json:"height,omitempty"`
Log string `protobuf:"bytes,7,opt,name=log,proto3" json:"log,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,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,proto3" json:"height,omitempty"`
} }
func (m *ResponseQuery) Reset() { *m = ResponseQuery{} } func (m *ResponseQuery) Reset() { *m = ResponseQuery{} }
@ -1270,6 +1261,20 @@ func (m *ResponseQuery) GetCode() uint32 {
return 0 return 0
} }
func (m *ResponseQuery) GetLog() string {
if m != nil {
return m.Log
}
return ""
}
func (m *ResponseQuery) GetInfo() string {
if m != nil {
return m.Info
}
return ""
}
func (m *ResponseQuery) GetIndex() int64 { func (m *ResponseQuery) GetIndex() int64 {
if m != nil { if m != nil {
return m.Index return m.Index
@ -1277,18 +1282,32 @@ func (m *ResponseQuery) GetIndex() int64 {
return 0 return 0
} }
func (m *ResponseQuery) GetHeight() int64 {
func (m *ResponseQuery) GetKey() []byte {
if m != nil { if m != nil {
return m.Height
return m.Key
} }
return 0
return nil
} }
func (m *ResponseQuery) GetLog() string {
func (m *ResponseQuery) GetValue() []byte {
if m != nil { if m != nil {
return m.Log
return m.Value
} }
return ""
return nil
}
func (m *ResponseQuery) GetProof() []byte {
if m != nil {
return m.Proof
}
return nil
}
func (m *ResponseQuery) GetHeight() int64 {
if m != nil {
return m.Height
}
return 0
} }
type ResponseBeginBlock struct { type ResponseBeginBlock struct {
@ -1300,11 +1319,14 @@ func (*ResponseBeginBlock) ProtoMessage() {}
func (*ResponseBeginBlock) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{20} } func (*ResponseBeginBlock) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{20} }
type ResponseCheckTx struct { 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 int64 `protobuf:"varint,4,opt,name=gas,proto3" json:"gas,omitempty"`
Fee int64 `protobuf:"varint,5,opt,name=fee,proto3" 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"`
// int64 gas_used = 6;
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) Reset() { *m = ResponseCheckTx{} }
@ -1319,6 +1341,13 @@ func (m *ResponseCheckTx) GetCode() uint32 {
return 0 return 0
} }
func (m *ResponseCheckTx) GetData() []byte {
if m != nil {
return m.Data
}
return nil
}
func (m *ResponseCheckTx) GetLog() string { func (m *ResponseCheckTx) GetLog() string {
if m != nil { if m != nil {
return m.Log return m.Log
@ -1326,25 +1355,42 @@ func (m *ResponseCheckTx) GetLog() string {
return "" return ""
} }
func (m *ResponseCheckTx) GetGas() int64 {
func (m *ResponseCheckTx) GetInfo() string {
if m != nil { if m != nil {
return m.Gas
return m.Info
}
return ""
}
func (m *ResponseCheckTx) GetGasWanted() int64 {
if m != nil {
return m.GasWanted
} }
return 0 return 0
} }
func (m *ResponseCheckTx) GetFee() int64 {
func (m *ResponseCheckTx) GetTags() []common.KVPair {
if m != nil {
return m.Tags
}
return nil
}
func (m *ResponseCheckTx) GetFee() common.KI64Pair {
if m != nil { if m != nil {
return m.Fee return m.Fee
} }
return 0
return common.KI64Pair{}
} }
type ResponseDeliverTx struct { type ResponseDeliverTx 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"`
Tags []*KVPair `protobuf:"bytes,4,rep,name=tags" json:"tags,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"`
} }
func (m *ResponseDeliverTx) Reset() { *m = ResponseDeliverTx{} } func (m *ResponseDeliverTx) Reset() { *m = ResponseDeliverTx{} }
@ -1359,6 +1405,13 @@ func (m *ResponseDeliverTx) GetCode() uint32 {
return 0 return 0
} }
func (m *ResponseDeliverTx) GetData() []byte {
if m != nil {
return m.Data
}
return nil
}
func (m *ResponseDeliverTx) GetLog() string { func (m *ResponseDeliverTx) GetLog() string {
if m != nil { if m != nil {
return m.Log return m.Log
@ -1366,7 +1419,28 @@ func (m *ResponseDeliverTx) GetLog() string {
return "" return ""
} }
func (m *ResponseDeliverTx) GetTags() []*KVPair {
func (m *ResponseDeliverTx) GetInfo() string {
if m != nil {
return m.Info
}
return ""
}
func (m *ResponseDeliverTx) GetGasWanted() int64 {
if m != nil {
return m.GasWanted
}
return 0
}
func (m *ResponseDeliverTx) GetGasUsed() int64 {
if m != nil {
return m.GasUsed
}
return 0
}
func (m *ResponseDeliverTx) GetTags() []common.KVPair {
if m != nil { if m != nil {
return m.Tags return m.Tags
} }
@ -1374,7 +1448,7 @@ func (m *ResponseDeliverTx) GetTags() []*KVPair {
} }
type ResponseEndBlock struct { 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"` ConsensusParamUpdates *ConsensusParams `protobuf:"bytes,2,opt,name=consensus_param_updates,json=consensusParamUpdates" json:"consensus_param_updates,omitempty"`
} }
@ -1383,7 +1457,7 @@ func (m *ResponseEndBlock) String() string { return proto.CompactText
func (*ResponseEndBlock) ProtoMessage() {} func (*ResponseEndBlock) ProtoMessage() {}
func (*ResponseEndBlock) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{23} } func (*ResponseEndBlock) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{23} }
func (m *ResponseEndBlock) GetValidatorUpdates() []*Validator {
func (m *ResponseEndBlock) GetValidatorUpdates() []Validator {
if m != nil { if m != nil {
return m.ValidatorUpdates return m.ValidatorUpdates
} }
@ -1398,9 +1472,8 @@ func (m *ResponseEndBlock) GetConsensusParamUpdates() *ConsensusParams {
} }
type ResponseCommit struct { type ResponseCommit 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"`
// reserve 1
Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
} }
func (m *ResponseCommit) Reset() { *m = ResponseCommit{} } func (m *ResponseCommit) Reset() { *m = ResponseCommit{} }
@ -1408,18 +1481,11 @@ func (m *ResponseCommit) String() string { return proto.CompactTextSt
func (*ResponseCommit) ProtoMessage() {} func (*ResponseCommit) ProtoMessage() {}
func (*ResponseCommit) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{24} } func (*ResponseCommit) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{24} }
func (m *ResponseCommit) GetCode() uint32 {
func (m *ResponseCommit) GetData() []byte {
if m != nil { if m != nil {
return m.Code
}
return 0
}
func (m *ResponseCommit) GetLog() string {
if m != nil {
return m.Log
return m.Data
} }
return ""
return nil
} }
// ConsensusParams contains all consensus-relevant parameters // ConsensusParams contains all consensus-relevant parameters
@ -1534,15 +1600,15 @@ func (m *BlockGossip) GetBlockPartSizeBytes() int32 {
} }
type Header struct { 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,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"`
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"`
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"`
} }
func (m *Header) Reset() { *m = Header{} } func (m *Header) Reset() { *m = Header{} }
@ -1578,11 +1644,11 @@ func (m *Header) GetNumTxs() int32 {
return 0 return 0
} }
func (m *Header) GetLastBlockID() *BlockID {
func (m *Header) GetLastBlockID() BlockID {
if m != nil { if m != nil {
return m.LastBlockID return m.LastBlockID
} }
return nil
return BlockID{}
} }
func (m *Header) GetLastCommitHash() []byte { func (m *Header) GetLastCommitHash() []byte {
@ -1614,8 +1680,8 @@ func (m *Header) GetAppHash() []byte {
} }
type BlockID struct { 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,omitempty"`
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) Reset() { *m = BlockID{} }
@ -1630,11 +1696,11 @@ func (m *BlockID) GetHash() []byte {
return nil return nil
} }
func (m *BlockID) GetParts() *PartSetHeader {
func (m *BlockID) GetParts() PartSetHeader {
if m != nil { if m != nil {
return m.Parts return m.Parts
} }
return nil
return PartSetHeader{}
} }
type PartSetHeader struct { type PartSetHeader struct {
@ -1709,46 +1775,6 @@ func (m *Evidence) GetHeight() int64 {
return 0 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"`
ValueString string `protobuf:"bytes,3,opt,name=value_string,json=valueString,proto3" json:"value_string,omitempty"`
ValueInt int64 `protobuf:"varint,4,opt,name=value_int,json=valueInt,proto3" json:"value_int,omitempty"`
}
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{34} }
func (m *KVPair) GetKey() string {
if m != nil {
return m.Key
}
return ""
}
func (m *KVPair) GetValueType() KVPair_Type {
if m != nil {
return m.ValueType
}
return KVPair_STRING
}
func (m *KVPair) GetValueString() string {
if m != nil {
return m.ValueString
}
return ""
}
func (m *KVPair) GetValueInt() int64 {
if m != nil {
return m.ValueInt
}
return 0
}
func init() { func init() {
proto.RegisterType((*Request)(nil), "types.Request") proto.RegisterType((*Request)(nil), "types.Request")
proto.RegisterType((*RequestEcho)(nil), "types.RequestEcho") proto.RegisterType((*RequestEcho)(nil), "types.RequestEcho")
@ -1784,8 +1810,6 @@ func init() {
proto.RegisterType((*PartSetHeader)(nil), "types.PartSetHeader") proto.RegisterType((*PartSetHeader)(nil), "types.PartSetHeader")
proto.RegisterType((*Validator)(nil), "types.Validator") proto.RegisterType((*Validator)(nil), "types.Validator")
proto.RegisterType((*Evidence)(nil), "types.Evidence") proto.RegisterType((*Evidence)(nil), "types.Evidence")
proto.RegisterType((*KVPair)(nil), "types.KVPair")
proto.RegisterEnum("types.KVPair_Type", KVPair_Type_name, KVPair_Type_value)
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
@ -2193,116 +2217,114 @@ var _ABCIApplication_serviceDesc = grpc.ServiceDesc{
func init() { proto.RegisterFile("types/types.proto", fileDescriptorTypes) } func init() { proto.RegisterFile("types/types.proto", fileDescriptorTypes) }
var fileDescriptorTypes = []byte{ var fileDescriptorTypes = []byte{
// 1766 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcd, 0x72, 0x1b, 0xc7,
0x11, 0x26, 0xfe, 0xb1, 0x0d, 0xfe, 0x80, 0x43, 0x4a, 0x82, 0xa1, 0x83, 0xe8, 0xad, 0x8a, 0x0d,
0xd9, 0x16, 0x69, 0xd3, 0xa5, 0x94, 0x68, 0x27, 0xae, 0x08, 0xa4, 0x2c, 0xa2, 0x9c, 0x52, 0x94,
0x15, 0xe3, 0x43, 0x2e, 0xa8, 0x01, 0x76, 0x08, 0x6c, 0x09, 0xd8, 0x5d, 0xef, 0x0e, 0x68, 0x50,
0x95, 0x47, 0xf0, 0x3d, 0xe7, 0xe4, 0x98, 0x17, 0xc8, 0x31, 0xa7, 0xa4, 0xf2, 0x0c, 0x39, 0xe8,
0xe0, 0x27, 0x49, 0x75, 0xcf, 0xec, 0x2f, 0x76, 0x53, 0x29, 0x1d, 0x74, 0x01, 0x66, 0xa6, 0x7f,
0xb6, 0xbb, 0xa7, 0xe7, 0xeb, 0x9e, 0x81, 0x7d, 0x79, 0xeb, 0x8b, 0xf0, 0x84, 0x7e, 0x8f, 0xfd,
0xc0, 0x93, 0x1e, 0x6b, 0xd0, 0xa4, 0xff, 0x68, 0xe6, 0xc8, 0xf9, 0x6a, 0x72, 0x3c, 0xf5, 0x96,
0x27, 0x33, 0x6f, 0xe6, 0x9d, 0x10, 0x75, 0xb2, 0xba, 0xa6, 0x19, 0x4d, 0x68, 0xa4, 0xa4, 0xcc,
0x7f, 0xd5, 0xa1, 0x65, 0x89, 0x1f, 0x56, 0x22, 0x94, 0x6c, 0x00, 0x75, 0x31, 0x9d, 0x7b, 0xbd,
0xea, 0x51, 0x65, 0xd0, 0x39, 0x65, 0xc7, 0x4a, 0xbb, 0xa6, 0x3e, 0x9b, 0xce, 0xbd, 0xcb, 0x2d,
0x8b, 0x38, 0xd8, 0xa7, 0xd0, 0xb8, 0x5e, 0xac, 0xc2, 0x79, 0xaf, 0x46, 0xac, 0x07, 0x59, 0xd6,
0x6f, 0x91, 0x74, 0xb9, 0x65, 0x29, 0x1e, 0x54, 0xeb, 0xb8, 0xd7, 0x5e, 0xaf, 0x5e, 0xa4, 0x76,
0xe4, 0x5e, 0x93, 0x5a, 0xe4, 0x60, 0x4f, 0x00, 0x42, 0x21, 0xc7, 0x9e, 0x2f, 0x1d, 0xcf, 0xed,
0x35, 0x88, 0xff, 0x5e, 0x96, 0xff, 0x95, 0x90, 0xbf, 0x23, 0xf2, 0xe5, 0x96, 0x65, 0x84, 0xd1,
0x04, 0x25, 0x1d, 0xd7, 0x91, 0xe3, 0xe9, 0x9c, 0x3b, 0x6e, 0xaf, 0x59, 0x24, 0x39, 0x72, 0x1d,
0x79, 0x8e, 0x64, 0x94, 0x74, 0xa2, 0x09, 0xba, 0xf2, 0xc3, 0x4a, 0x04, 0xb7, 0xbd, 0x56, 0x91,
0x2b, 0xbf, 0x47, 0x12, 0xba, 0x42, 0x3c, 0xec, 0x6b, 0xe8, 0x4c, 0xc4, 0xcc, 0x71, 0xc7, 0x93,
0x85, 0x37, 0x7d, 0xdd, 0x6b, 0x93, 0x48, 0x2f, 0x2b, 0x32, 0x44, 0x86, 0x21, 0xd2, 0x2f, 0xb7,
0x2c, 0x98, 0xc4, 0x33, 0x76, 0x0a, 0xed, 0xe9, 0x5c, 0x4c, 0x5f, 0x8f, 0xe5, 0xba, 0x67, 0x90,
0xe4, 0x9d, 0xac, 0xe4, 0x39, 0x52, 0xaf, 0xd6, 0x97, 0x5b, 0x56, 0x6b, 0xaa, 0x86, 0xe8, 0x97,
0x2d, 0x16, 0xce, 0x8d, 0x08, 0x50, 0xea, 0xa0, 0xc8, 0xaf, 0x0b, 0x45, 0x27, 0x39, 0xc3, 0x8e,
0x26, 0xec, 0x31, 0x18, 0xc2, 0xb5, 0xb5, 0xa1, 0x1d, 0x12, 0xbc, 0x9b, 0xdb, 0x51, 0xd7, 0x8e,
0xcc, 0x6c, 0x0b, 0x3d, 0x66, 0xc7, 0xd0, 0x9c, 0x7a, 0xcb, 0xa5, 0x23, 0x7b, 0xdb, 0x24, 0x73,
0x98, 0x33, 0x91, 0x68, 0x97, 0x5b, 0x96, 0xe6, 0x1a, 0xb6, 0xa0, 0x71, 0xc3, 0x17, 0x2b, 0x61,
0x7e, 0x0c, 0x9d, 0x54, 0xa6, 0xb0, 0x1e, 0xb4, 0x96, 0x22, 0x0c, 0xf9, 0x4c, 0xf4, 0x2a, 0x47,
0x95, 0x81, 0x61, 0x45, 0x53, 0x73, 0x17, 0xb6, 0xd3, 0x79, 0x92, 0x12, 0xc4, 0x5c, 0x40, 0xc1,
0x1b, 0x11, 0x84, 0x98, 0x00, 0x5a, 0x50, 0x4f, 0xcd, 0xaf, 0xa0, 0x9b, 0x4f, 0x02, 0xd6, 0x85,
0xda, 0x6b, 0x71, 0xab, 0x39, 0x71, 0xc8, 0x0e, 0xb5, 0x41, 0x94, 0xc5, 0x86, 0xa5, 0xad, 0xbb,
0x88, 0x65, 0xe3, 0x34, 0x60, 0x9f, 0x03, 0xdc, 0xf0, 0x85, 0x63, 0x73, 0xe9, 0x05, 0x61, 0xaf,
0x72, 0x54, 0x1b, 0x74, 0x4e, 0xbb, 0xda, 0xdd, 0xef, 0x23, 0x82, 0x95, 0xe2, 0x31, 0xed, 0xd8,
0x74, 0xca, 0x0b, 0xc6, 0xa0, 0x6e, 0x73, 0xc9, 0xe9, 0xf3, 0xdb, 0x16, 0x8d, 0x71, 0xcd, 0xe7,
0x72, 0xae, 0x3f, 0x4f, 0x63, 0x76, 0x17, 0x9a, 0x73, 0xe1, 0xcc, 0xe6, 0x92, 0xce, 0x4b, 0xcd,
0xd2, 0x33, 0xb4, 0xd5, 0x0f, 0xbc, 0x1b, 0x41, 0x47, 0xa3, 0x6d, 0xa9, 0x89, 0xf9, 0x8f, 0x0a,
0xec, 0x6f, 0xe4, 0x12, 0xea, 0x9d, 0xf3, 0x70, 0x1e, 0x7d, 0x0b, 0xc7, 0xec, 0x17, 0xa8, 0x97,
0xdb, 0x22, 0xd0, 0x47, 0x76, 0x47, 0x5b, 0x7f, 0x49, 0x8b, 0x96, 0x26, 0xb2, 0x4f, 0x61, 0x9f,
0x4f, 0x42, 0xe1, 0xca, 0x71, 0xca, 0xdf, 0xda, 0x51, 0x6d, 0xd0, 0xb0, 0xba, 0x8a, 0x10, 0xbb,
0x1b, 0xb2, 0x21, 0x1c, 0x4e, 0x6e, 0xdf, 0x70, 0x57, 0x3a, 0xae, 0x48, 0xf3, 0xd7, 0x29, 0x3e,
0x7b, 0xfa, 0x0b, 0xcf, 0x6e, 0x1c, 0x5b, 0xb8, 0x53, 0x61, 0x1d, 0xc4, 0xcc, 0x89, 0x0e, 0xf3,
0x08, 0x76, 0xb3, 0x29, 0xcd, 0x76, 0xa1, 0x2a, 0xd7, 0xda, 0xf6, 0xaa, 0x5c, 0x9b, 0x66, 0xbc,
0x1f, 0x71, 0xfa, 0x6e, 0xf0, 0x3c, 0x84, 0xbd, 0x5c, 0xa6, 0xa6, 0x02, 0x59, 0x49, 0x07, 0xd2,
0xdc, 0x83, 0x9d, 0x4c, 0x82, 0x9a, 0x3f, 0x35, 0xa0, 0x6d, 0x89, 0xd0, 0xf7, 0xdc, 0x50, 0xb0,
0x27, 0x60, 0x88, 0xf5, 0x54, 0x28, 0x54, 0xa9, 0xe4, 0xce, 0xac, 0xe2, 0x79, 0x16, 0xd1, 0xf1,
0x10, 0xc5, 0xcc, 0xec, 0x61, 0x06, 0x11, 0x0f, 0xf2, 0x42, 0x69, 0x48, 0xfc, 0x2c, 0x0b, 0x89,
0x87, 0x39, 0xde, 0x1c, 0x26, 0x3e, 0xcc, 0x60, 0x62, 0x5e, 0x71, 0x06, 0x14, 0xcf, 0x0a, 0x40,
0x31, 0x6f, 0x7e, 0x09, 0x2a, 0x9e, 0x15, 0xa0, 0x62, 0x6f, 0xe3, 0x5b, 0x85, 0xb0, 0xf8, 0x59,
0x16, 0x16, 0xf3, 0xee, 0xe4, 0x70, 0xf1, 0x57, 0x45, 0xb8, 0xf8, 0x41, 0x4e, 0xa6, 0x14, 0x18,
0xbf, 0xdc, 0x00, 0xc6, 0xbb, 0x39, 0xd1, 0x02, 0x64, 0x3c, 0xcb, 0x20, 0x23, 0x14, 0xfa, 0x56,
0x02, 0x8d, 0xbf, 0xdc, 0x84, 0xc6, 0x7b, 0xf9, 0xad, 0x2d, 0xc2, 0xc6, 0x93, 0x1c, 0x36, 0xde,
0xc9, 0x5b, 0x59, 0x0a, 0x8e, 0x0f, 0xf1, 0x44, 0xe7, 0x32, 0x0d, 0x4f, 0xbf, 0x08, 0x02, 0x2f,
0xd0, 0xe8, 0xa5, 0x26, 0xe6, 0x00, 0x31, 0x26, 0xc9, 0xaf, 0xff, 0x01, 0xa4, 0x94, 0xf4, 0xa9,
0xec, 0x32, 0xff, 0x5c, 0x49, 0x64, 0x09, 0x4b, 0xd3, 0xf8, 0x64, 0x68, 0x7c, 0x4a, 0xe1, 0x6b,
0x35, 0x83, 0xaf, 0xec, 0x13, 0xd8, 0x5f, 0xf0, 0x50, 0xaa, 0xb8, 0x8c, 0x33, 0x80, 0xb5, 0x87,
0x04, 0x15, 0x10, 0x85, 0x5c, 0x8f, 0xe0, 0x20, 0xc5, 0xcb, 0x7d, 0x7f, 0x4c, 0xe0, 0x54, 0xa7,
0xc3, 0xdb, 0x8d, 0xb9, 0x9f, 0xfa, 0xfe, 0x25, 0x0f, 0xe7, 0xe6, 0x59, 0xe2, 0x7f, 0x82, 0xdd,
0x0c, 0xea, 0x53, 0xcf, 0x56, 0x6e, 0xed, 0x58, 0x34, 0x46, 0x3c, 0x5f, 0x78, 0x33, 0x6d, 0x19,
0x0e, 0xcd, 0x83, 0x44, 0x34, 0x4e, 0x55, 0xf3, 0xef, 0xd5, 0xc4, 0xf7, 0x18, 0x8a, 0x37, 0x94,
0x1d, 0x42, 0xc3, 0x71, 0x6d, 0xb1, 0x26, 0x75, 0x35, 0x4b, 0x4d, 0xd8, 0x50, 0x95, 0x0c, 0x74,
0x6c, 0x7b, 0xf8, 0xf9, 0xbf, 0xdf, 0x3e, 0xd8, 0xfa, 0xcf, 0xdb, 0x07, 0x83, 0x54, 0xd7, 0x24,
0x85, 0x6b, 0x8b, 0x60, 0xe9, 0xb8, 0xf2, 0x64, 0xe6, 0x3d, 0xfa, 0xd1, 0x09, 0xc4, 0x09, 0x46,
0xee, 0x78, 0x78, 0x2b, 0x45, 0xa8, 0x8a, 0xcc, 0xb7, 0x51, 0x91, 0xa9, 0xbf, 0xa3, 0x16, 0x25,
0x8e, 0x7a, 0xfc, 0xc0, 0xf3, 0xae, 0xe9, 0x58, 0xbf, 0x93, 0x1e, 0x12, 0x4f, 0xe1, 0x62, 0x33,
0x53, 0x60, 0x74, 0x38, 0x5b, 0x49, 0x38, 0x0f, 0x81, 0x6d, 0x9e, 0x47, 0xf3, 0x2f, 0x15, 0xc4,
0xda, 0xcc, 0x59, 0x2b, 0x8c, 0xe8, 0x85, 0x4e, 0xa8, 0xea, 0x3b, 0x9a, 0xab, 0x52, 0x50, 0x5b,
0x55, 0x8b, 0xad, 0xc2, 0x95, 0x19, 0x0f, 0x29, 0x9a, 0x35, 0x0b, 0x87, 0xb8, 0x72, 0x2d, 0x04,
0xc5, 0xa5, 0x66, 0xe1, 0xd0, 0xfc, 0x6b, 0x25, 0xc9, 0x84, 0xa4, 0x68, 0xbc, 0x4f, 0x2b, 0x3f,
0x84, 0xba, 0xe4, 0xb3, 0xa8, 0x14, 0x46, 0xc5, 0xf6, 0xbb, 0xef, 0x5f, 0x72, 0x27, 0xb0, 0x88,
0x84, 0x81, 0xec, 0xe6, 0x31, 0x84, 0xfd, 0x1a, 0xf6, 0xe3, 0x42, 0x3a, 0x5e, 0xf9, 0x36, 0x97,
0xa2, 0xbc, 0xdf, 0xe8, 0xc6, 0xac, 0x7f, 0x50, 0x9c, 0xec, 0x05, 0xdc, 0x9b, 0xa2, 0x3e, 0x37,
0x5c, 0x85, 0x63, 0x9f, 0x07, 0x7c, 0x19, 0x2b, 0xa9, 0x66, 0xd0, 0xf2, 0x3c, 0xe2, 0x7a, 0x89,
0x4c, 0xa1, 0x75, 0x67, 0x9a, 0x59, 0xd0, 0xfa, 0xcc, 0x3f, 0x61, 0x75, 0x4e, 0x23, 0xd6, 0xfb,
0x0c, 0x22, 0xa5, 0x5a, 0xce, 0x50, 0x76, 0x02, 0xa0, 0x80, 0x24, 0x74, 0xde, 0x08, 0x5d, 0xa1,
0xa3, 0xc8, 0x50, 0x08, 0x5f, 0x39, 0x6f, 0x84, 0x65, 0x4c, 0xa2, 0x21, 0xfb, 0x08, 0x5a, 0x72,
0xad, 0xb8, 0xb3, 0x9d, 0xcf, 0xd5, 0x9a, 0x58, 0x9b, 0x92, 0xfe, 0xd9, 0x63, 0xd8, 0x56, 0x8a,
0x67, 0x5e, 0x18, 0x3a, 0xbe, 0xae, 0xcd, 0x2c, 0xad, 0xfa, 0x39, 0x51, 0xac, 0xce, 0x24, 0x99,
0x98, 0x7f, 0x04, 0x23, 0xfe, 0x2c, 0xbb, 0x0f, 0xc6, 0x92, 0xaf, 0xc7, 0x93, 0x5b, 0xb5, 0x6b,
0x95, 0x41, 0xc3, 0x6a, 0x2f, 0xf9, 0x9a, 0xbc, 0x64, 0xf7, 0xa0, 0x85, 0x44, 0xb9, 0x56, 0x7b,
0xd1, 0xb0, 0x9a, 0x4b, 0xbe, 0xbe, 0x5a, 0xc7, 0x04, 0xcc, 0x6a, 0xdd, 0xf3, 0x2d, 0xf9, 0xfa,
0x39, 0x0f, 0xcd, 0x6f, 0xa0, 0xa9, 0x8c, 0xfc, 0xbf, 0x14, 0xa3, 0x7c, 0x35, 0x23, 0xff, 0x1b,
0xe8, 0xa4, 0xec, 0x66, 0x5f, 0xc0, 0x1d, 0xe5, 0xa1, 0xcf, 0x03, 0x49, 0x11, 0xc9, 0x28, 0x64,
0x44, 0x7c, 0xc9, 0x03, 0x89, 0x9f, 0x24, 0xd5, 0xe6, 0x3f, 0xab, 0xd0, 0x54, 0x1d, 0x22, 0xfb,
0x08, 0x2b, 0x2f, 0x77, 0xdc, 0xb1, 0x63, 0xab, 0x22, 0x31, 0xec, 0xfc, 0xfc, 0xf6, 0x41, 0x8b,
0x40, 0x76, 0x74, 0x81, 0xc5, 0x16, 0x07, 0x76, 0x0a, 0x5f, 0xaa, 0x19, 0x7c, 0x61, 0x50, 0x97,
0xce, 0x52, 0x68, 0x17, 0x69, 0x8c, 0x96, 0xbb, 0xab, 0x25, 0x85, 0xa4, 0xae, 0x42, 0xe2, 0xae,
0x96, 0x18, 0x92, 0x73, 0xd8, 0x49, 0xd5, 0x0c, 0xc7, 0xd6, 0xbd, 0xcc, 0x6e, 0x7a, 0x37, 0x46,
0x17, 0xc3, 0xbd, 0x9f, 0xdf, 0x3e, 0xe8, 0xfc, 0x36, 0xaa, 0x20, 0xa3, 0x0b, 0xab, 0x13, 0x97,
0x93, 0x91, 0xcd, 0x06, 0x40, 0xd5, 0x65, 0xac, 0x2a, 0xac, 0xaa, 0x3a, 0x4d, 0xaa, 0x3a, 0xbb,
0xb8, 0xae, 0x4b, 0x30, 0x36, 0xc7, 0xf7, 0xc1, 0xc0, 0x14, 0x54, 0x2c, 0x2d, 0x62, 0x69, 0xe3,
0x02, 0x11, 0x3f, 0x86, 0xbd, 0xa4, 0xb7, 0x55, 0x2c, 0x6d, 0xa5, 0x25, 0x59, 0x26, 0xc6, 0x0f,
0xa0, 0x1d, 0x57, 0x37, 0x83, 0x38, 0x5a, 0x5c, 0x17, 0xb5, 0x11, 0xb4, 0xb4, 0x89, 0x85, 0xcd,
0xf9, 0x27, 0xd0, 0xc0, 0x3d, 0x89, 0x0e, 0x69, 0xd4, 0x41, 0xd1, 0x5e, 0x08, 0xa9, 0x5b, 0x74,
0xc5, 0x62, 0x9e, 0xc1, 0x4e, 0x66, 0x1d, 0x4b, 0x97, 0xf4, 0x24, 0x5f, 0xe8, 0x6d, 0x54, 0x93,
0xf8, 0x33, 0xd5, 0xe4, 0x33, 0xe6, 0x57, 0x60, 0xc4, 0xe0, 0x81, 0xb1, 0xf7, 0x57, 0x93, 0x71,
0x74, 0x25, 0xda, 0xb6, 0x9a, 0xfe, 0x6a, 0xf2, 0x9d, 0xba, 0x15, 0xf9, 0xde, 0x8f, 0xfa, 0xa2,
0x50, 0xb3, 0xd4, 0xc4, 0xfc, 0x1a, 0xda, 0x51, 0x23, 0x5f, 0x2e, 0x5a, 0xb2, 0xf7, 0xe6, 0xdf,
0x2a, 0xd0, 0x54, 0xd8, 0x57, 0x70, 0x0b, 0xfb, 0x82, 0xee, 0x56, 0x2b, 0x31, 0x46, 0xa7, 0x49,
0x70, 0x37, 0x3e, 0x76, 0x4a, 0xe8, 0xf8, 0xea, 0xd6, 0x17, 0x96, 0x41, 0x5c, 0x38, 0x64, 0x1f,
0xc2, 0xb6, 0x12, 0x09, 0x65, 0xe0, 0xb8, 0x11, 0x66, 0x74, 0x68, 0xed, 0x15, 0x2d, 0xe1, 0x96,
0x2a, 0x16, 0xc7, 0x95, 0xba, 0x58, 0xb4, 0x69, 0x61, 0xe4, 0x4a, 0xf3, 0x3e, 0xd4, 0x49, 0x0f,
0x40, 0xf3, 0xd5, 0x95, 0x35, 0x7a, 0xf1, 0xbc, 0xbb, 0xc5, 0x5a, 0x50, 0x1b, 0xbd, 0xb8, 0xea,
0x56, 0x4e, 0x7f, 0x6a, 0xc0, 0xde, 0xd3, 0xe1, 0xf9, 0xe8, 0xa9, 0xef, 0x2f, 0x9c, 0x29, 0xa7,
0xfe, 0xe3, 0x04, 0xea, 0xd4, 0x61, 0x15, 0x3c, 0x74, 0xf4, 0x8b, 0x5a, 0x7d, 0x76, 0x0a, 0x0d,
0x6a, 0xb4, 0x58, 0xd1, 0x7b, 0x47, 0xbf, 0xb0, 0xe3, 0xc7, 0x8f, 0xa8, 0x56, 0x6c, 0xf3, 0xd9,
0xa3, 0x5f, 0xd4, 0xf6, 0xb3, 0x6f, 0xc0, 0x48, 0x5a, 0xa4, 0xb2, 0xc7, 0x8f, 0x7e, 0xe9, 0x05,
0x00, 0xe5, 0x93, 0xea, 0x58, 0xf6, 0x54, 0xd0, 0x2f, 0xed, 0x94, 0xd9, 0x13, 0x68, 0x45, 0x1d,
0x40, 0xf1, 0xf3, 0x44, 0xbf, 0xa4, 0x39, 0xc7, 0xf0, 0xa8, 0x5e, 0xac, 0xe8, 0x0d, 0xa5, 0x5f,
0x78, 0x83, 0x60, 0x8f, 0xa1, 0xa9, 0x6b, 0x50, 0xe1, 0x43, 0x43, 0xbf, 0xb8, 0xc5, 0x46, 0x27,
0x93, 0x7b, 0x7c, 0xd9, 0x3b, 0x4f, 0xbf, 0xf4, 0xaa, 0xc3, 0x9e, 0x02, 0xa4, 0xae, 0xd6, 0xa5,
0x0f, 0x38, 0xfd, 0xf2, 0x2b, 0x0c, 0xc3, 0xb3, 0x13, 0x5f, 0x4b, 0x8b, 0x1f, 0x56, 0xfa, 0x65,
0xb7, 0x8a, 0x49, 0x93, 0x1e, 0xdf, 0xbe, 0xfc, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7b, 0xb9,
0xeb, 0x12, 0xc7, 0x13, 0x00, 0x00,
// 1732 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xdb, 0x6e, 0x1b, 0xbd,
0x11, 0xb6, 0xce, 0xda, 0x91, 0x2d, 0xdb, 0xf4, 0x49, 0xd1, 0x8f, 0xc2, 0xc6, 0xa2, 0x48, 0xe4,
0x26, 0xb1, 0x5a, 0xa7, 0x09, 0xe2, 0xa4, 0x08, 0x6a, 0xd9, 0x69, 0xa4, 0xa6, 0x6d, 0xd2, 0xcd,
0xa1, 0x40, 0x6f, 0x04, 0x4a, 0x4b, 0x4b, 0x8b, 0x68, 0x0f, 0xd1, 0x52, 0x8e, 0x9c, 0x67, 0xc8,
0x7d, 0xaf, 0x7b, 0xd5, 0x27, 0xe8, 0x2b, 0x14, 0x2d, 0xfa, 0x00, 0xbd, 0xf3, 0x45, 0xd0, 0xab,
0x3e, 0x45, 0x31, 0x24, 0xf7, 0xe8, 0xdd, 0x36, 0x68, 0x81, 0xff, 0xc6, 0xe6, 0xec, 0x7c, 0x33,
0xe4, 0x90, 0xc3, 0x6f, 0x46, 0x84, 0x4d, 0x7e, 0xe5, 0x31, 0xbf, 0x2b, 0xfe, 0x1e, 0x79, 0x73,
0x97, 0xbb, 0xa4, 0x22, 0x84, 0xf6, 0xfd, 0x89, 0xc5, 0xa7, 0x8b, 0xd1, 0xd1, 0xd8, 0xb5, 0xbb,
0x13, 0x77, 0xe2, 0x76, 0x85, 0x76, 0xb4, 0xb8, 0x10, 0x92, 0x10, 0xc4, 0x48, 0x5a, 0xb5, 0xbb,
0x31, 0x38, 0x67, 0x8e, 0xc9, 0xe6, 0xb6, 0xe5, 0xf0, 0x2e, 0xb7, 0x67, 0xd6, 0xc8, 0xef, 0x8e,
0x5d, 0xdb, 0x76, 0x9d, 0xf8, 0x34, 0xfa, 0x5f, 0xca, 0x50, 0x33, 0xd8, 0xc7, 0x05, 0xf3, 0x39,
0xe9, 0x40, 0x99, 0x8d, 0xa7, 0x6e, 0xab, 0x78, 0x50, 0xe8, 0x34, 0x8e, 0xc9, 0x91, 0xc4, 0x29,
0xed, 0xf3, 0xf1, 0xd4, 0xed, 0xaf, 0x18, 0x02, 0x41, 0xee, 0x42, 0xe5, 0x62, 0xb6, 0xf0, 0xa7,
0xad, 0x92, 0x80, 0x6e, 0x25, 0xa1, 0xbf, 0x40, 0x55, 0x7f, 0xc5, 0x90, 0x18, 0x74, 0x6b, 0x39,
0x17, 0x6e, 0xab, 0x9c, 0xe5, 0x76, 0xe0, 0x5c, 0x08, 0xb7, 0x88, 0x20, 0x8f, 0x01, 0x7c, 0xc6,
0x87, 0xae, 0xc7, 0x2d, 0xd7, 0x69, 0x55, 0x04, 0x7e, 0x2f, 0x89, 0x7f, 0xc3, 0xf8, 0x2b, 0xa1,
0xee, 0xaf, 0x18, 0x9a, 0x1f, 0x08, 0x68, 0x69, 0x39, 0x16, 0x1f, 0x8e, 0xa7, 0xd4, 0x72, 0x5a,
0xd5, 0x2c, 0xcb, 0x81, 0x63, 0xf1, 0x33, 0x54, 0xa3, 0xa5, 0x15, 0x08, 0x18, 0xca, 0xc7, 0x05,
0x9b, 0x5f, 0xb5, 0x6a, 0x59, 0xa1, 0xfc, 0x16, 0x55, 0x18, 0x8a, 0xc0, 0x90, 0xa7, 0xd0, 0x18,
0xb1, 0x89, 0xe5, 0x0c, 0x47, 0x33, 0x77, 0xfc, 0xa1, 0x55, 0x17, 0x26, 0xad, 0xa4, 0x49, 0x0f,
0x01, 0x3d, 0xd4, 0xf7, 0x57, 0x0c, 0x18, 0x85, 0x12, 0x39, 0x86, 0xfa, 0x78, 0xca, 0xc6, 0x1f,
0x86, 0x7c, 0xd9, 0xd2, 0x84, 0xe5, 0x4e, 0xd2, 0xf2, 0x0c, 0xb5, 0x6f, 0x97, 0xfd, 0x15, 0xa3,
0x36, 0x96, 0x43, 0x8c, 0xcb, 0x64, 0x33, 0xeb, 0x92, 0xcd, 0xd1, 0x6a, 0x2b, 0x2b, 0xae, 0x73,
0xa9, 0x17, 0x76, 0x9a, 0x19, 0x08, 0xe4, 0x21, 0x68, 0xcc, 0x31, 0xd5, 0x42, 0x1b, 0xc2, 0x70,
0x37, 0x75, 0xa2, 0x8e, 0x19, 0x2c, 0xb3, 0xce, 0xd4, 0x98, 0x1c, 0x41, 0x15, 0xb3, 0xc4, 0xe2,
0xad, 0x55, 0x61, 0xb3, 0x9d, 0x5a, 0xa2, 0xd0, 0xf5, 0x57, 0x0c, 0x85, 0xea, 0xd5, 0xa0, 0x72,
0x49, 0x67, 0x0b, 0xa6, 0xdf, 0x81, 0x46, 0x2c, 0x53, 0x48, 0x0b, 0x6a, 0x36, 0xf3, 0x7d, 0x3a,
0x61, 0xad, 0xc2, 0x41, 0xa1, 0xa3, 0x19, 0x81, 0xa8, 0x37, 0x61, 0x35, 0x9e, 0x27, 0x31, 0x43,
0xcc, 0x05, 0x34, 0xbc, 0x64, 0x73, 0x1f, 0x13, 0x40, 0x19, 0x2a, 0x51, 0x7f, 0x02, 0x1b, 0xe9,
0x24, 0x20, 0x1b, 0x50, 0xfa, 0xc0, 0xae, 0x14, 0x12, 0x87, 0x64, 0x5b, 0x2d, 0x48, 0x64, 0xb1,
0x66, 0xa8, 0xd5, 0xfd, 0x32, 0xb4, 0x0d, 0xd3, 0x80, 0x3c, 0x02, 0xb8, 0xa4, 0x33, 0xcb, 0xa4,
0xdc, 0x9d, 0xfb, 0xad, 0xc2, 0x41, 0xa9, 0xd3, 0x38, 0xde, 0x50, 0xe1, 0xbe, 0x0f, 0x14, 0xbd,
0xf2, 0x5f, 0xaf, 0xf7, 0x57, 0x8c, 0x18, 0x52, 0x37, 0xc3, 0x00, 0x44, 0x76, 0x10, 0x02, 0x65,
0x93, 0x72, 0x2a, 0x16, 0xb1, 0x6a, 0x88, 0x31, 0x7e, 0xf3, 0x28, 0x9f, 0xaa, 0x45, 0x88, 0x31,
0xd9, 0x85, 0xea, 0x94, 0x59, 0x93, 0x29, 0x17, 0xb7, 0xa6, 0x64, 0x28, 0x09, 0x57, 0xec, 0xcd,
0xdd, 0x4b, 0x26, 0x2e, 0x48, 0xdd, 0x90, 0x82, 0xfe, 0xf7, 0x02, 0x6c, 0xde, 0xc8, 0x28, 0xf4,
0x3b, 0xa5, 0xfe, 0x34, 0x98, 0x0b, 0xc7, 0xe4, 0x2e, 0xfa, 0xa5, 0x26, 0x9b, 0xab, 0x8b, 0xbb,
0xa6, 0x62, 0xe8, 0x8b, 0x8f, 0x2a, 0x00, 0x05, 0x21, 0x77, 0x61, 0x93, 0x8e, 0x7c, 0xe6, 0xf0,
0x61, 0x2c, 0xf6, 0xd2, 0x41, 0xa9, 0x53, 0x31, 0x36, 0xa4, 0x22, 0x0c, 0xdd, 0x27, 0x7d, 0xd8,
0x1e, 0x5d, 0x7d, 0xa6, 0x0e, 0xb7, 0x1c, 0x16, 0xc7, 0x97, 0xc5, 0x5e, 0xad, 0xab, 0x79, 0x9e,
0x5f, 0x5a, 0x26, 0x73, 0xc6, 0x4c, 0xcd, 0xb4, 0x15, 0x9a, 0x44, 0x9e, 0xf4, 0x03, 0x68, 0x26,
0x93, 0x9c, 0x34, 0xa1, 0xc8, 0x97, 0x2a, 0x8e, 0x22, 0x5f, 0xea, 0x7a, 0x78, 0x42, 0x61, 0x42,
0xdf, 0xc0, 0x1c, 0xc2, 0x7a, 0x2a, 0x77, 0x63, 0x9b, 0x5a, 0x88, 0x6f, 0xaa, 0xbe, 0x0e, 0x6b,
0x89, 0x94, 0xd5, 0xbf, 0x54, 0xa0, 0x6e, 0x30, 0xdf, 0x73, 0x1d, 0x9f, 0x91, 0xc7, 0xa0, 0xb1,
0xe5, 0x98, 0x49, 0x9e, 0x29, 0xa4, 0x6e, 0xb1, 0xc4, 0x3c, 0x0f, 0xf4, 0x78, 0xad, 0x42, 0x30,
0x39, 0x4c, 0x70, 0xe4, 0x56, 0xda, 0x28, 0x4e, 0x92, 0xf7, 0x92, 0x24, 0xb9, 0x9d, 0xc2, 0xa6,
0x58, 0xf2, 0x30, 0xc1, 0x92, 0x69, 0xc7, 0x09, 0x9a, 0x3c, 0xc9, 0xa0, 0xc9, 0xf4, 0xf2, 0x73,
0x78, 0xf2, 0x24, 0x83, 0x27, 0x5b, 0x37, 0xe6, 0xca, 0x24, 0xca, 0x7b, 0x49, 0xa2, 0x4c, 0x87,
0x93, 0x62, 0xca, 0x9f, 0x65, 0x31, 0xe5, 0xad, 0x94, 0x4d, 0x2e, 0x55, 0x3e, 0xb8, 0x41, 0x95,
0xbb, 0x29, 0xd3, 0x0c, 0xae, 0x3c, 0x49, 0x70, 0x25, 0x64, 0xc6, 0x96, 0x43, 0x96, 0x8f, 0x6e,
0x92, 0xe5, 0x5e, 0xfa, 0x68, 0xb3, 0xd8, 0xb2, 0x9b, 0x62, 0xcb, 0x9d, 0xf4, 0x2a, 0x73, 0xe9,
0xf2, 0x10, 0x6f, 0x77, 0x2a, 0xd3, 0x90, 0x09, 0xd8, 0x7c, 0xee, 0xce, 0x15, 0x9f, 0x49, 0x41,
0xef, 0x20, 0xdf, 0x44, 0xf9, 0xf5, 0x1f, 0xa8, 0x55, 0x24, 0x7d, 0x2c, 0xbb, 0xf4, 0x3f, 0x14,
0x22, 0x5b, 0xc1, 0xae, 0x71, 0xae, 0xd2, 0x14, 0x57, 0xc5, 0x18, 0xb7, 0x98, 0x60, 0x5c, 0xf2,
0x23, 0xd8, 0x9c, 0x51, 0x9f, 0xcb, 0x7d, 0x19, 0x26, 0xc8, 0x6b, 0x1d, 0x15, 0x72, 0x43, 0x24,
0x8b, 0xdd, 0x87, 0xad, 0x18, 0x96, 0x7a, 0xde, 0x50, 0x10, 0x55, 0x59, 0x5c, 0xde, 0x8d, 0x10,
0x7d, 0xea, 0x79, 0x7d, 0xea, 0x4f, 0xf5, 0x5f, 0x47, 0xf1, 0x47, 0x6c, 0x4e, 0xa0, 0x3c, 0x76,
0x4d, 0x19, 0xd6, 0x9a, 0x21, 0xc6, 0xc8, 0xf0, 0x33, 0x77, 0x22, 0x66, 0xd5, 0x0c, 0x1c, 0x22,
0x2a, 0xbc, 0x29, 0x9a, 0xbc, 0x12, 0xfa, 0x56, 0xe4, 0x2e, 0x4c, 0x5f, 0xfd, 0xcf, 0x85, 0x68,
0x3f, 0x42, 0xaa, 0xfe, 0xdf, 0x26, 0xc0, 0xa3, 0xb1, 0x1c, 0x93, 0x2d, 0xc5, 0x75, 0x2b, 0x19,
0x52, 0x08, 0xca, 0x4f, 0x55, 0x04, 0x99, 0x2c, 0x3f, 0x35, 0xf1, 0x4d, 0x0a, 0x8a, 0xe2, 0xdd,
0x0b, 0x71, 0x0f, 0x56, 0x0d, 0x29, 0xc4, 0xb8, 0x4b, 0x4b, 0x70, 0xd7, 0x36, 0x90, 0x9b, 0x37,
0x44, 0xff, 0x67, 0x01, 0xd9, 0x2f, 0x91, 0xfd, 0x99, 0xf1, 0x04, 0x47, 0x5c, 0x8c, 0x95, 0xa3,
0x6f, 0x8b, 0xf1, 0x07, 0x00, 0x13, 0xea, 0x0f, 0x3f, 0x51, 0x87, 0x33, 0x53, 0x05, 0xaa, 0x4d,
0xa8, 0xff, 0x3b, 0xf1, 0x81, 0x3c, 0x81, 0x32, 0xa7, 0x13, 0xbf, 0x55, 0x13, 0xec, 0xdf, 0x3c,
0x92, 0xdd, 0xe4, 0xd1, 0xcb, 0xf7, 0xaf, 0xa9, 0x35, 0xef, 0xed, 0x22, 0xf9, 0xff, 0xeb, 0x7a,
0xbf, 0x89, 0x98, 0x7b, 0xae, 0x6d, 0x71, 0x66, 0x7b, 0xfc, 0xca, 0x10, 0x36, 0xa4, 0x03, 0xa5,
0x0b, 0xc6, 0x14, 0x0d, 0x6c, 0x84, 0xa6, 0x83, 0x47, 0x3f, 0x15, 0xc6, 0xb2, 0x72, 0x20, 0x44,
0xff, 0x47, 0x21, 0x3a, 0xca, 0xa8, 0x12, 0x7c, 0xaf, 0x81, 0xde, 0x82, 0x3a, 0xaa, 0x17, 0x3e,
0x33, 0xc5, 0xd1, 0x96, 0x8c, 0xda, 0x84, 0xfa, 0xef, 0xfc, 0xff, 0x6f, 0x0f, 0xf4, 0x3f, 0x15,
0xb0, 0xc4, 0x25, 0xd9, 0x84, 0x9c, 0xc1, 0x66, 0x58, 0x58, 0x87, 0x0b, 0xcf, 0xa4, 0x9c, 0xfd,
0xb7, 0x5e, 0x64, 0x23, 0x34, 0x78, 0x27, 0xf1, 0xe4, 0x37, 0xb0, 0x37, 0x46, 0xaf, 0x8e, 0xbf,
0xf0, 0x87, 0x1e, 0x9d, 0x53, 0x3b, 0x74, 0x55, 0x4c, 0xb0, 0xe7, 0x59, 0x80, 0x7a, 0x8d, 0x20,
0xdf, 0xd8, 0x19, 0x27, 0x3e, 0x28, 0x7f, 0xfa, 0x0f, 0xb1, 0x5a, 0xc7, 0x19, 0x2c, 0x6b, 0xaf,
0xf5, 0x3f, 0x16, 0x60, 0x3d, 0xe5, 0x90, 0x74, 0x01, 0x24, 0x01, 0xf8, 0xd6, 0x67, 0xa6, 0x2a,
0x6b, 0x10, 0x87, 0x08, 0xf8, 0x8d, 0xf5, 0x99, 0x19, 0xda, 0x28, 0x18, 0x92, 0xdb, 0x50, 0xe3,
0x4b, 0x89, 0x4e, 0x76, 0x2f, 0x6f, 0x97, 0x02, 0x5a, 0xe5, 0xe2, 0x3f, 0x79, 0x08, 0xab, 0xd2,
0xf1, 0xc4, 0xf5, 0x7d, 0xcb, 0x53, 0x35, 0x95, 0xc4, 0x5d, 0xbf, 0x10, 0x1a, 0xa3, 0x31, 0x8a,
0x04, 0xfd, 0xf7, 0xa0, 0x85, 0xd3, 0x92, 0xef, 0x40, 0xb3, 0xe9, 0x72, 0x38, 0xba, 0x92, 0x7b,
0x5c, 0xe8, 0x54, 0x8c, 0xba, 0x4d, 0x97, 0x3d, 0x94, 0xc9, 0x1e, 0xd4, 0x50, 0xc9, 0x97, 0x72,
0xcf, 0x2a, 0x46, 0xd5, 0xa6, 0xcb, 0xb7, 0xcb, 0x50, 0x31, 0xa1, 0x7e, 0xd0, 0xb7, 0xd9, 0x74,
0xf9, 0x82, 0xfa, 0xfa, 0x33, 0xa8, 0xca, 0x45, 0x7e, 0x93, 0x63, 0xb4, 0x2f, 0x26, 0xec, 0x7f,
0x0e, 0x8d, 0xd8, 0xba, 0xc9, 0x4f, 0x60, 0x47, 0x46, 0xe8, 0xd1, 0x39, 0x17, 0x3b, 0x92, 0x70,
0x48, 0x84, 0xf2, 0x35, 0x9d, 0x73, 0x9c, 0x52, 0xb8, 0xd6, 0xff, 0x56, 0x84, 0xaa, 0xec, 0xf2,
0xc8, 0x6d, 0xac, 0x98, 0xd4, 0x72, 0x86, 0x96, 0x29, 0xc9, 0xbd, 0xd7, 0xf8, 0x7a, 0xbd, 0x5f,
0x13, 0x44, 0x38, 0x38, 0xc7, 0x22, 0x89, 0x03, 0x33, 0xc6, 0x39, 0xc5, 0x44, 0x13, 0x4a, 0xa0,
0xcc, 0x2d, 0x9b, 0xa9, 0x10, 0xc5, 0x18, 0x57, 0xee, 0x2c, 0x6c, 0xb1, 0x25, 0x65, 0xb9, 0x25,
0xce, 0xc2, 0xc6, 0x2d, 0x79, 0x01, 0x6b, 0x31, 0xae, 0xb7, 0x4c, 0xd5, 0x83, 0x34, 0xe3, 0xa7,
0x31, 0x38, 0xef, 0x6d, 0x61, 0xba, 0x7e, 0xbd, 0xde, 0x6f, 0xfc, 0x2a, 0x60, 0xff, 0xc1, 0xb9,
0xd1, 0x08, 0x4b, 0xc1, 0xc0, 0x24, 0x1d, 0x10, 0x95, 0x61, 0x28, 0xab, 0xa3, 0xac, 0x18, 0x92,
0x4c, 0x9b, 0xf8, 0x5d, 0x95, 0x4f, 0x6c, 0x72, 0xbf, 0x03, 0x0d, 0x93, 0x4e, 0x42, 0x24, 0xb7,
0xd6, 0xf1, 0x83, 0x50, 0xde, 0x81, 0xf5, 0xa8, 0x3b, 0x95, 0x10, 0x49, 0xb4, 0xcd, 0xe8, 0xb3,
0x00, 0xde, 0x82, 0x7a, 0x58, 0x99, 0x34, 0x81, 0xa8, 0x51, 0x55, 0x90, 0x5e, 0x41, 0x4d, 0x2d,
0x31, 0xb3, 0xc9, 0xfe, 0x31, 0x54, 0xf0, 0x5c, 0x82, 0x0b, 0x15, 0x74, 0x3f, 0xe2, 0x3c, 0x18,
0x4f, 0xb4, 0xda, 0x12, 0xa8, 0x9f, 0xc0, 0x5a, 0x42, 0x8b, 0x45, 0x80, 0xbb, 0x9c, 0xce, 0xd4,
0x81, 0x4a, 0x21, 0x9c, 0xac, 0x18, 0x4d, 0xa6, 0x3f, 0x01, 0x2d, 0xbc, 0xf4, 0x78, 0x0a, 0xde,
0x62, 0x34, 0x0c, 0x7e, 0xe6, 0xac, 0x1a, 0x55, 0x6f, 0x31, 0x7a, 0x29, 0x4b, 0x8d, 0xe7, 0x7e,
0x52, 0x6d, 0x7f, 0xc9, 0x90, 0x82, 0xfe, 0x14, 0xea, 0x41, 0x43, 0x9e, 0x6f, 0x9a, 0x93, 0x05,
0xc7, 0x5f, 0x2a, 0xb0, 0x7e, 0xda, 0x3b, 0x1b, 0x9c, 0x7a, 0xde, 0xcc, 0x1a, 0x53, 0x51, 0x94,
0xbb, 0x50, 0x16, 0x6d, 0x47, 0xc6, 0x7b, 0x40, 0x3b, 0xab, 0xff, 0x25, 0xc7, 0x50, 0x11, 0xdd,
0x07, 0xc9, 0x7a, 0x16, 0x68, 0x67, 0xb6, 0xc1, 0x38, 0x89, 0xec, 0x4f, 0x6e, 0xbe, 0x0e, 0xb4,
0xb3, 0x7a, 0x61, 0xf2, 0x0c, 0xb4, 0xa8, 0x6f, 0xc8, 0x7b, 0x23, 0x68, 0xe7, 0x76, 0xc5, 0x68,
0x1f, 0x55, 0x97, 0xbc, 0x5f, 0xd4, 0xed, 0xdc, 0xf6, 0x91, 0x3c, 0x86, 0x5a, 0x50, 0x84, 0xb3,
0x7f, 0xc5, 0xb7, 0x73, 0x3a, 0x56, 0xdc, 0x1e, 0xd9, 0x8c, 0x64, 0x3d, 0x35, 0xb4, 0x33, 0xdb,
0x6a, 0xf2, 0x10, 0xaa, 0x8a, 0x88, 0x33, 0x7f, 0x8f, 0xb7, 0xb3, 0xfb, 0x4e, 0x0c, 0x32, 0xfa,
0xb9, 0x9b, 0xf7, 0x1c, 0xd2, 0xce, 0xed, 0xff, 0xc9, 0x29, 0x40, 0xec, 0xb7, 0x67, 0xee, 0x3b,
0x47, 0x3b, 0xbf, 0xaf, 0x27, 0x98, 0x8e, 0xe1, 0x6f, 0xb5, 0xec, 0xf7, 0x87, 0x76, 0x5e, 0xab,
0x3d, 0xaa, 0x8a, 0x37, 0xaa, 0x07, 0xff, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x13, 0xc6, 0x62, 0xb1,
0x1f, 0x13, 0x00, 0x00,
} }

+ 43
- 41
types/types.proto View File

@ -4,8 +4,11 @@ package types;
// For more information on gogo.proto, see: // For more information on gogo.proto, see:
// https://github.com/gogo/protobuf/blob/master/extensions.md // https://github.com/gogo/protobuf/blob/master/extensions.md
import "github.com/gogo/protobuf/gogoproto/gogo.proto"; 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 // 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 // Request types
@ -37,16 +40,17 @@ message RequestInfo {
string version = 1; string version = 1;
} }
// nondeterministic
message RequestSetOption { message RequestSetOption {
string key = 1; string key = 1;
string value = 2; string value = 2;
} }
message RequestInitChain { message RequestInitChain {
repeated Validator validators = 1;
repeated Validator validators = 1 [(gogoproto.nullable)=false];
} }
message RequestQuery{
message RequestQuery {
bytes data = 1; bytes data = 1;
string path = 2; string path = 2;
int64 height = 3; int64 height = 3;
@ -55,9 +59,9 @@ message RequestQuery{
message RequestBeginBlock { message RequestBeginBlock {
bytes hash = 1; bytes hash = 1;
Header header = 2;
Header header = 2 [(gogoproto.nullable)=false];
repeated int32 absent_validators = 3; repeated int32 absent_validators = 3;
repeated Evidence byzantine_validators = 4;
repeated Evidence byzantine_validators = 4 [(gogoproto.nullable)=false];
} }
message RequestCheckTx { message RequestCheckTx {
@ -68,7 +72,7 @@ message RequestDeliverTx {
bytes tx = 1; bytes tx = 1;
} }
message RequestEndBlock{
message RequestEndBlock {
int64 height = 1; int64 height = 1;
} }
@ -95,6 +99,7 @@ message Response {
} }
} }
// nondeterministic
message ResponseException { message ResponseException {
string error = 1; string error = 1;
} }
@ -113,9 +118,12 @@ message ResponseInfo {
bytes last_block_app_hash = 4; bytes last_block_app_hash = 4;
} }
// nondeterministic
message ResponseSetOption { message ResponseSetOption {
uint32 code = 1; uint32 code = 1;
string log = 2;
// bytes data = 2;
string log = 3;
string info = 4;
} }
message ResponseInitChain { message ResponseInitChain {
@ -123,12 +131,14 @@ message ResponseInitChain {
message ResponseQuery { message ResponseQuery {
uint32 code = 1; uint32 code = 1;
int64 index = 2;
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];
int64 height = 6;
string log = 7;
// bytes data = 2; // use "value" instead.
string log = 3; // nondeterministic
string info = 4; // nondeterministic
int64 index = 5;
bytes key = 6;
bytes value = 7;
bytes proof = 8;
int64 height = 9;
} }
message ResponseBeginBlock { message ResponseBeginBlock {
@ -136,28 +146,34 @@ message ResponseBeginBlock {
message ResponseCheckTx { message ResponseCheckTx {
uint32 code = 1; uint32 code = 1;
bytes data = 2 [(gogoproto.customtype) = "github.com/tendermint/go-wire/data.Bytes", (gogoproto.nullable) = false];
string log = 3;
int64 gas = 4;
int64 fee = 5;
bytes data = 2;
string log = 3; // nondeterministic
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];
} }
message ResponseDeliverTx { message ResponseDeliverTx {
uint32 code = 1; uint32 code = 1;
bytes data = 2 [(gogoproto.customtype) = "github.com/tendermint/go-wire/data.Bytes", (gogoproto.nullable) = false];
string log = 3;
repeated KVPair tags = 4;
bytes data = 2;
string log = 3; // nondeterministic
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;
} }
message ResponseEndBlock { message ResponseEndBlock {
repeated Validator validator_updates = 1;
repeated Validator validator_updates = 1 [(gogoproto.nullable)=false];
ConsensusParams consensus_param_updates = 2; ConsensusParams consensus_param_updates = 2;
} }
message ResponseCommit { message ResponseCommit {
uint32 code = 1;
bytes data = 2 [(gogoproto.customtype) = "github.com/tendermint/go-wire/data.Bytes", (gogoproto.nullable) = false];
string log = 3;
// reserve 1
bytes data = 2;
} }
//---------------------------------------- //----------------------------------------
@ -179,7 +195,7 @@ message BlockSize {
} }
// TxSize contain limits on the tx size. // TxSize contain limits on the tx size.
message TxSize{
message TxSize {
int32 max_bytes = 1; int32 max_bytes = 1;
int64 max_gas = 2; int64 max_gas = 2;
} }
@ -195,11 +211,11 @@ message BlockGossip {
// Blockchain Types // Blockchain Types
message Header { message Header {
string chain_id = 1 [(gogoproto.customname) = "ChainID"];
string chain_id = 1 [(gogoproto.customname)="ChainID"];
int64 height = 2; int64 height = 2;
int64 time = 3; int64 time = 3;
int32 num_txs = 4; int32 num_txs = 4;
BlockID last_block_id = 5 [(gogoproto.customname) = "LastBlockID"];
BlockID last_block_id = 5 [(gogoproto.customname)="LastBlockID", (gogoproto.nullable)=false];
bytes last_commit_hash = 6; bytes last_commit_hash = 6;
bytes data_hash = 7; bytes data_hash = 7;
bytes validators_hash = 8; bytes validators_hash = 8;
@ -208,7 +224,7 @@ message Header {
message BlockID { message BlockID {
bytes hash = 1; bytes hash = 1;
PartSetHeader parts = 2;
PartSetHeader parts = 2 [(gogoproto.nullable)=false];
} }
message PartSetHeader { message PartSetHeader {
@ -226,20 +242,6 @@ message Evidence {
int64 height = 2; int64 height = 2;
} }
//----------------------------------------
// Abstract types
message KVPair {
string key = 1;
enum Type {
STRING = 0;
INT = 1;
}
Type value_type = 2;
string value_string = 3;
int64 value_int = 4;
}
//---------------------------------------- //----------------------------------------
// Service Definition // Service Definition


+ 5
- 28
types/util.go View File

@ -3,15 +3,12 @@ package types
import ( import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"github.com/tendermint/go-wire/data"
cmn "github.com/tendermint/tmlibs/common"
) )
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// Validators is a list of validators that implements the Sort interface // Validators is a list of validators that implements the Sort interface
type Validators []*Validator
type Validators []Validator
func (v Validators) Len() int { func (v Validators) Len() int {
return len(v) return len(v)
@ -31,36 +28,16 @@ func (v Validators) Swap(i, j int) {
func ValidatorsString(vs Validators) string { func ValidatorsString(vs Validators) string {
s := make([]validatorPretty, len(vs)) s := make([]validatorPretty, len(vs))
for i, v := range vs { for i, v := range vs {
s[i] = validatorPretty{v.PubKey, v.Power}
s[i] = validatorPretty(v)
} }
b, err := json.Marshal(s) b, err := json.Marshal(s)
if err != nil { if err != nil {
cmn.PanicSanity(err.Error())
panic(err.Error())
} }
return string(b) return string(b)
} }
type validatorPretty struct { 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,
}
PubKey []byte `json:"pub_key"`
Power int64 `json:"power"`
} }

+ 0
- 15
types/util_test.go View File

@ -1,15 +0,0 @@
package types
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestKVPairInt(t *testing.T) {
assert.Equal(t, KVPairInt("a", 1), &KVPair{Key: "a", ValueType: KVPair_INT, ValueInt: 1})
}
func TestKVPairString(t *testing.T) {
assert.Equal(t, KVPairString("a", "b"), &KVPair{Key: "a", ValueType: KVPair_STRING, ValueString: "b"})
}

Loading…
Cancel
Save