Remove Proof message, replace with more flexible Query

This commit is contained in:
Jae Kwon 2017-01-23 23:42:09 -08:00
parent 4bdddf9829
commit 2a4894310d
22 changed files with 429 additions and 579 deletions

View File

@ -85,27 +85,20 @@ ABCI requests/responses are simple Protobuf messages. Check out the [schema fil
#### Query #### Query
* __Arguments__: * __Arguments__:
* `Query ([]byte)`: The query request bytes * `Data ([]byte)`: Raw query bytes. Can be used with or in lieu of Path.
* `Path (string)`: Path of request * `Path (string)`: Path of request, like an HTTP GET path. Can be used with or in liue of Data.
* Apps MUST interpret '/store' as a query by key on the underlying store. The key SHOULD be specified in the Data field.
* Apps SHOULD allow queries over specific types like '/accounts/...' or '/votes/...'
* `Height (uint64)`: The block height for which you want the query (default=0 returns data for the latest committed block) * `Height (uint64)`: The block height for which you want the query (default=0 returns data for the latest committed block)
* `Prove (bool)`: Return Merkle proof with response * `Prove (bool)`: Return Merkle proof with response if possible
* __Returns__:
* `Data ([]byte)`: The query response bytes
* `Log (string)`: Debug or error message
* `Height (uint64)`: The block height from which data was derived
* `Proof ([]byte)`: Proof for the data, if requested
#### Proof
* __Arguments__:
* `Key ([]byte)`: The key whose data you want to verifiably query
* `Height (uint64)`: The block height for which you want the proof (default=0 returns the proof for last committed block)
* __Returns__: * __Returns__:
* `Code (uint32)`: Response code * `Code (uint32)`: Response code
* `Data ([]byte)`: The query response bytes * `Key ([]byte)`: The key of the matching data
* `Value ([]byte)`: The value of the matching data
* `Proof ([]byte)`: Proof for the data, if requested
* `Height (uint64)`: The block height from which data was derived
* `Log (string)`: Debug or error message * `Log (string)`: Debug or error message
* __Usage__:<br/> *Please note* The current implementation of go-merkle doesn't support querying proofs from past blocks, so for the present moment, any height other than 0 will return an error. Hopefully this will be improved soon(ish)
Return a Merkle proof from the key/value pair back to the application hash.<br/>
*Please note* The current implementation of go-merkle doesn't support querying proofs from past blocks, so for the present moment, any height other than 0 will return an error. Hopefully this will be improved soon(ish)
#### Flush #### Flush
* __Usage__:<br/> * __Usage__:<br/>

View File

@ -20,8 +20,7 @@ type Client interface {
SetOptionAsync(key string, value string) *ReqRes SetOptionAsync(key string, value string) *ReqRes
DeliverTxAsync(tx []byte) *ReqRes DeliverTxAsync(tx []byte) *ReqRes
CheckTxAsync(tx []byte) *ReqRes CheckTxAsync(tx []byte) *ReqRes
QueryAsync(tx []byte) *ReqRes QueryAsync(reqQuery types.RequestQuery) *ReqRes
ProofAsync(key []byte, blockHeight uint64) *ReqRes
CommitAsync() *ReqRes CommitAsync() *ReqRes
FlushSync() error FlushSync() error
@ -30,8 +29,7 @@ type Client interface {
SetOptionSync(key string, value string) (res types.Result) SetOptionSync(key string, value string) (res types.Result)
DeliverTxSync(tx []byte) (res types.Result) DeliverTxSync(tx []byte) (res types.Result)
CheckTxSync(tx []byte) (res types.Result) CheckTxSync(tx []byte) (res types.Result)
QuerySync(tx []byte) (res types.Result) QuerySync(reqQuery types.RequestQuery) (resQuery types.ResponseQuery, err error)
ProofSync(key []byte, blockHeight uint64) (res types.Result)
CommitSync() (res types.Result) CommitSync() (res types.Result)
InitChainAsync(validators []*types.Validator) *ReqRes InitChainAsync(validators []*types.Validator) *ReqRes

View File

@ -173,8 +173,8 @@ func (cli *grpcClient) CheckTxAsync(tx []byte) *ReqRes {
return cli.finishAsyncCall(req, &types.Response{&types.Response_CheckTx{res}}) return cli.finishAsyncCall(req, &types.Response{&types.Response_CheckTx{res}})
} }
func (cli *grpcClient) QueryAsync(query []byte) *ReqRes { func (cli *grpcClient) QueryAsync(reqQuery types.RequestQuery) *ReqRes {
req := types.ToRequestQuery(query) req := types.ToRequestQuery(reqQuery)
res, err := cli.client.Query(context.Background(), req.GetQuery(), grpc.FailFast(true)) res, err := cli.client.Query(context.Background(), req.GetQuery(), grpc.FailFast(true))
if err != nil { if err != nil {
cli.StopForError(err) cli.StopForError(err)
@ -182,15 +182,6 @@ func (cli *grpcClient) QueryAsync(query []byte) *ReqRes {
return cli.finishAsyncCall(req, &types.Response{&types.Response_Query{res}}) return cli.finishAsyncCall(req, &types.Response{&types.Response_Query{res}})
} }
func (cli *grpcClient) ProofAsync(key []byte, blockHeight uint64) *ReqRes {
req := types.ToRequestProof(key, blockHeight)
res, err := cli.client.Proof(context.Background(), req.GetProof(), grpc.FailFast(true))
if err != nil {
cli.StopForError(err)
}
return cli.finishAsyncCall(req, &types.Response{&types.Response_Proof{res}})
}
func (cli *grpcClient) CommitAsync() *ReqRes { func (cli *grpcClient) CommitAsync() *ReqRes {
req := types.ToRequestCommit() req := types.ToRequestCommit()
res, err := cli.client.Commit(context.Background(), req.GetCommit(), grpc.FailFast(true)) res, err := cli.client.Commit(context.Background(), req.GetCommit(), grpc.FailFast(true))
@ -264,7 +255,7 @@ func (cli *grpcClient) EchoSync(msg string) (res types.Result) {
return res return res
} }
resp := reqres.Response.GetEcho() resp := reqres.Response.GetEcho()
return types.NewResultOK([]byte(resp.Message), LOG) return types.NewResultOK([]byte(resp.Message), "")
} }
func (cli *grpcClient) FlushSync() error { func (cli *grpcClient) FlushSync() error {
@ -310,22 +301,15 @@ func (cli *grpcClient) CheckTxSync(tx []byte) (res types.Result) {
return types.Result{Code: resp.Code, Data: resp.Data, Log: resp.Log} return types.Result{Code: resp.Code, Data: resp.Data, Log: resp.Log}
} }
func (cli *grpcClient) ProofSync(key []byte, blockHeight uint64) (res types.Result) { func (cli *grpcClient) QuerySync(reqQuery types.RequestQuery) (resQuery types.ResponseQuery, err error) {
reqres := cli.ProofAsync(key, blockHeight) reqres := cli.QueryAsync(reqQuery)
if res := cli.checkErrGetResult(); res.IsErr() { if err = cli.Error(); err != nil {
return res return resQuery, err
} }
resp := reqres.Response.GetProof() if resQuery_ := reqres.Response.GetQuery(); resQuery_ != nil {
return types.Result{Code: resp.Code, Data: resp.Data, Log: resp.Log} return *resQuery_, nil
}
func (cli *grpcClient) QuerySync(query []byte) (res types.Result) {
reqres := cli.QueryAsync(query)
if res := cli.checkErrGetResult(); res.IsErr() {
return res
} }
resp := reqres.Response.GetQuery() return resQuery, nil
return types.Result{Code: resp.Code, Data: resp.Data, Log: resp.Log}
} }
func (cli *grpcClient) CommitSync() (res types.Result) { func (cli *grpcClient) CommitSync() (res types.Result) {

View File

@ -89,23 +89,13 @@ func (app *localClient) CheckTxAsync(tx []byte) *ReqRes {
) )
} }
func (app *localClient) QueryAsync(tx []byte) *ReqRes { func (app *localClient) QueryAsync(reqQuery types.RequestQuery) *ReqRes {
app.mtx.Lock() app.mtx.Lock()
res := app.Application.Query(tx) resQuery := app.Application.Query(reqQuery)
app.mtx.Unlock() app.mtx.Unlock()
return app.callback( return app.callback(
types.ToRequestQuery(tx), types.ToRequestQuery(reqQuery),
types.ToResponseQuery(res.Code, res.Data, res.Log), types.ToResponseQuery(resQuery),
)
}
func (app *localClient) ProofAsync(key []byte, blockHeight uint64) *ReqRes {
app.mtx.Lock()
res := app.Application.Proof(key, blockHeight)
app.mtx.Unlock()
return app.callback(
types.ToRequestProof(key, blockHeight),
types.ToResponseQuery(res.Code, res.Data, res.Log),
) )
} }
@ -195,18 +185,11 @@ func (app *localClient) CheckTxSync(tx []byte) (res types.Result) {
return res return res
} }
func (app *localClient) QuerySync(query []byte) (res types.Result) { func (app *localClient) QuerySync(reqQuery types.RequestQuery) (resQuery types.ResponseQuery, err error) {
app.mtx.Lock() app.mtx.Lock()
res = app.Application.Query(query) resQuery = app.Application.Query(reqQuery)
app.mtx.Unlock() app.mtx.Unlock()
return res return resQuery, nil
}
func (app *localClient) ProofSync(key []byte, blockHeight uint64) (res types.Result) {
app.mtx.Lock()
res = app.Application.Proof(key, blockHeight)
app.mtx.Unlock()
return res
} }
func (app *localClient) CommitSync() (res types.Result) { func (app *localClient) CommitSync() (res types.Result) {

View File

@ -251,12 +251,8 @@ func (cli *socketClient) CheckTxAsync(tx []byte) *ReqRes {
return cli.queueRequest(types.ToRequestCheckTx(tx)) return cli.queueRequest(types.ToRequestCheckTx(tx))
} }
func (cli *socketClient) QueryAsync(query []byte) *ReqRes { func (cli *socketClient) QueryAsync(reqQuery types.RequestQuery) *ReqRes {
return cli.queueRequest(types.ToRequestQuery(query)) return cli.queueRequest(types.ToRequestQuery(reqQuery))
}
func (cli *socketClient) ProofAsync(key []byte, blockHeight uint64) *ReqRes {
return cli.queueRequest(types.ToRequestProof(key, blockHeight))
} }
func (cli *socketClient) CommitAsync() *ReqRes { func (cli *socketClient) CommitAsync() *ReqRes {
@ -284,7 +280,7 @@ func (cli *socketClient) EchoSync(msg string) (res types.Result) {
return types.ErrInternalError.SetLog(err.Error()) return types.ErrInternalError.SetLog(err.Error())
} }
resp := reqres.Response.GetEcho() resp := reqres.Response.GetEcho()
return types.Result{Code: OK, Data: []byte(resp.Message), Log: LOG} return types.Result{Code: OK, Data: []byte(resp.Message)}
} }
func (cli *socketClient) FlushSync() error { func (cli *socketClient) FlushSync() error {
@ -304,9 +300,8 @@ func (cli *socketClient) InfoSync() (resInfo types.ResponseInfo, err error) {
} }
if resInfo_ := reqres.Response.GetInfo(); resInfo_ != nil { if resInfo_ := reqres.Response.GetInfo(); resInfo_ != nil {
return *resInfo_, nil return *resInfo_, nil
} else {
return resInfo, nil
} }
return resInfo, nil
} }
func (cli *socketClient) SetOptionSync(key string, value string) (res types.Result) { func (cli *socketClient) SetOptionSync(key string, value string) (res types.Result) {
@ -339,25 +334,18 @@ func (cli *socketClient) CheckTxSync(tx []byte) (res types.Result) {
return types.Result{Code: resp.Code, Data: resp.Data, Log: resp.Log} return types.Result{Code: resp.Code, Data: resp.Data, Log: resp.Log}
} }
func (cli *socketClient) QuerySync(query []byte) (res types.Result) { func (cli *socketClient) QuerySync(reqQuery types.RequestQuery) (resQuery types.ResponseQuery, err error) {
reqres := cli.queueRequest(types.ToRequestQuery(query)) reqres := cli.queueRequest(types.ToRequestQuery(reqQuery))
cli.FlushSync() cli.FlushSync()
if err := cli.Error(); err != nil { if err := cli.Error(); err != nil {
return types.ErrInternalError.SetLog(err.Error()) return resQuery, err
} }
resp := reqres.Response.GetQuery() if resQuery_ := reqres.Response.GetQuery(); resQuery_ != nil {
return types.Result{Code: resp.Code, Data: resp.Data, Log: resp.Log} return *resQuery_, nil
}
return resQuery, nil
} }
func (cli *socketClient) ProofSync(key []byte, blockHeight uint64) (res types.Result) {
reqres := cli.queueRequest(types.ToRequestProof(key, blockHeight))
cli.FlushSync()
if err := cli.Error(); err != nil {
return types.ErrInternalError.SetLog(err.Error())
}
resp := reqres.Response.GetProof()
return types.Result{Code: resp.Code, Data: resp.Data, Log: resp.Log}
}
func (cli *socketClient) CommitSync() (res types.Result) { func (cli *socketClient) CommitSync() (res types.Result) {
reqres := cli.queueRequest(types.ToRequestCommit()) reqres := cli.queueRequest(types.ToRequestCommit())
cli.FlushSync() cli.FlushSync()
@ -450,8 +438,6 @@ func resMatchesReq(req *types.Request, res *types.Response) (ok bool) {
_, ok = res.Value.(*types.Response_Commit) _, ok = res.Value.(*types.Response_Commit)
case *types.Request_Query: case *types.Request_Query:
_, ok = res.Value.(*types.Response_Query) _, ok = res.Value.(*types.Response_Query)
case *types.Request_Proof:
_, ok = res.Value.(*types.Response_Proof)
case *types.Request_InitChain: case *types.Request_InitChain:
_, ok = res.Value.(*types.Response_InitChain) _, ok = res.Value.(*types.Response_InitChain)
case *types.Request_BeginBlock: case *types.Request_BeginBlock:

View File

@ -7,7 +7,6 @@ import (
"fmt" "fmt"
"io" "io"
"os" "os"
"strconv"
"strings" "strings"
"github.com/tendermint/abci/client" "github.com/tendermint/abci/client"
@ -16,28 +15,15 @@ import (
"github.com/urfave/cli" "github.com/urfave/cli"
) )
//structure for data passed to print response // Structure for data passed to print response.
// variables must be exposed for JSON to read
type response struct { type response struct {
Res types.Result Data []byte
Data string Code types.CodeType
PrintCode bool Key []byte
Code string Value []byte
} Log string
Height string
func newResponse(res types.Result, data string, printCode bool) *response { Proof []byte
rsp := &response{
Res: res,
Data: data,
PrintCode: printCode,
Code: "",
}
if printCode {
rsp.Code = res.Code.String()
}
return rsp
} }
// client is a global variable so it can be reused by the console // client is a global variable so it can be reused by the console
@ -132,13 +118,6 @@ func main() {
return cmdQuery(c) return cmdQuery(c)
}, },
}, },
{
Name: "proof",
Usage: "Get proof for a key",
Action: func(c *cli.Context) error {
return cmdProof(c)
},
},
} }
app.Before = before app.Before = before
err := app.Run(os.Args) err := app.Run(os.Args)
@ -228,9 +207,10 @@ func cmdEcho(c *cli.Context) error {
if len(args) != 1 { if len(args) != 1 {
return errors.New("Command echo takes 1 argument") return errors.New("Command echo takes 1 argument")
} }
res := client.EchoSync(args[0]) resEcho := client.EchoSync(args[0])
rsp := newResponse(res, string(res.Data), false) printResponse(c, response{
printResponse(c, rsp) Data: resEcho.Data,
})
return nil return nil
} }
@ -240,8 +220,9 @@ func cmdInfo(c *cli.Context) error {
if err != nil { if err != nil {
return err return err
} }
rsp := newResponse(types.Result{}, string(resInfo.Data), false) printResponse(c, response{
printResponse(c, rsp) Data: []byte(resInfo.Data),
})
return nil return nil
} }
@ -251,9 +232,10 @@ func cmdSetOption(c *cli.Context) error {
if len(args) != 2 { if len(args) != 2 {
return errors.New("Command set_option takes 2 arguments (key, value)") return errors.New("Command set_option takes 2 arguments (key, value)")
} }
res := client.SetOptionSync(args[0], args[1]) resSetOption := client.SetOptionSync(args[0], args[1])
rsp := newResponse(res, Fmt("%s=%s", args[0], args[1]), false) printResponse(c, response{
printResponse(c, rsp) Log: resSetOption.Log,
})
return nil return nil
} }
@ -268,8 +250,11 @@ func cmdDeliverTx(c *cli.Context) error {
return err return err
} }
res := client.DeliverTxSync(txBytes) res := client.DeliverTxSync(txBytes)
rsp := newResponse(res, string(res.Data), true) printResponse(c, response{
printResponse(c, rsp) Code: res.Code,
Data: res.Data,
Log: res.Log,
})
return nil return nil
} }
@ -284,20 +269,26 @@ func cmdCheckTx(c *cli.Context) error {
return err return err
} }
res := client.CheckTxSync(txBytes) res := client.CheckTxSync(txBytes)
rsp := newResponse(res, string(res.Data), true) printResponse(c, response{
printResponse(c, rsp) Code: res.Code,
Data: res.Data,
Log: res.Log,
})
return nil return nil
} }
// Get application Merkle root hash // Get application Merkle root hash
func cmdCommit(c *cli.Context) error { func cmdCommit(c *cli.Context) error {
res := client.CommitSync() res := client.CommitSync()
rsp := newResponse(res, Fmt("0x%X", res.Data), false) printResponse(c, response{
printResponse(c, rsp) Data: res.Data,
Log: res.Log,
})
return nil return nil
} }
// Query application state // Query application state
// TODO: Make request and response support all fields.
func cmdQuery(c *cli.Context) error { func cmdQuery(c *cli.Context) error {
args := c.Args() args := c.Args()
if len(args) != 1 { if len(args) != 1 {
@ -307,36 +298,29 @@ func cmdQuery(c *cli.Context) error {
if err != nil { if err != nil {
return err return err
} }
res := client.QuerySync(queryBytes) resQuery, err := client.QuerySync(types.RequestQuery{
rsp := newResponse(res, string(res.Data), true) Data: queryBytes,
printResponse(c, rsp) Path: "/store", // TOOD expose
return nil Height: 0, // TODO expose
} Prove: true, // TODO expose
})
// Prove application state
func cmdProof(c *cli.Context) error {
args := c.Args()
if len(args) < 1 {
return errors.New("Command proof takes 1 or 2 arguments")
}
keyBytes, err := stringOrHexToBytes(c.Args()[0])
if err != nil { if err != nil {
return err return err
} }
printResponse(c, response{
var height uint64 Code: resQuery.Code,
if len(args) == 2 { Key: resQuery.Key,
height, _ = strconv.ParseUint(args[1], 10, 0) Value: resQuery.Value,
} Log: resQuery.Log,
res := client.ProofSync(keyBytes, height) Height: fmt.Sprintf("%v", resQuery.Height),
rsp := newResponse(res, string(res.Data), true) Proof: resQuery.Proof,
printResponse(c, rsp) })
return nil return nil
} }
//-------------------------------------------------------------------------------- //--------------------------------------------------------------------------------
func printResponse(c *cli.Context, rsp *response) { func printResponse(c *cli.Context, rsp response) {
verbose := c.GlobalBool("verbose") verbose := c.GlobalBool("verbose")
@ -344,19 +328,29 @@ func printResponse(c *cli.Context, rsp *response) {
fmt.Println(">", c.Command.Name, strings.Join(c.Args(), " ")) fmt.Println(">", c.Command.Name, strings.Join(c.Args(), " "))
} }
if rsp.PrintCode { if rsp.Code != types.CodeType_OK {
fmt.Printf("-> code: %s\n", rsp.Code) fmt.Printf("-> code: %s\n", rsp.Code.String())
} }
if len(rsp.Data) != 0 {
//if pr.res.Error != "" {
// fmt.Printf("-> error: %s\n", pr.res.Error)
//}
if rsp.Data != "" {
fmt.Printf("-> data: %s\n", rsp.Data) fmt.Printf("-> data: %s\n", rsp.Data)
fmt.Printf("-> data.hex: %X\n", rsp.Data)
} }
if rsp.Res.Log != "" { if len(rsp.Key) != 0 {
fmt.Printf("-> log: %s\n", rsp.Res.Log) fmt.Printf("-> key: %s\n", rsp.Key)
fmt.Printf("-> key.hex: %X\n", rsp.Key)
}
if len(rsp.Value) != 0 {
fmt.Printf("-> value: %s\n", rsp.Value)
fmt.Printf("-> value.hex: %X\n", rsp.Value)
}
if rsp.Log != "" {
fmt.Printf("-> log: %s\n", rsp.Log)
}
if rsp.Height != "" {
fmt.Printf("-> height: %s\n", rsp.Height)
}
if rsp.Proof != nil {
fmt.Printf("-> proof: %X\n", rsp.Proof)
} }
if verbose { if verbose {

View File

@ -3,9 +3,9 @@ package main
import ( import (
"flag" "flag"
. "github.com/tendermint/go-common"
"github.com/tendermint/abci/example/counter" "github.com/tendermint/abci/example/counter"
"github.com/tendermint/abci/server" "github.com/tendermint/abci/server"
. "github.com/tendermint/go-common"
) )
func main() { func main() {

View File

@ -57,12 +57,10 @@ func (app *ChainAwareApplication) Commit() types.Result {
return types.NewResultOK([]byte("nil"), "") return types.NewResultOK([]byte("nil"), "")
} }
func (app *ChainAwareApplication) Query(query []byte) types.Result { func (app *ChainAwareApplication) Query(reqQuery types.RequestQuery) (resQuery types.ResponseQuery) {
return types.NewResultOK([]byte(Fmt("%d,%d", app.beginCount, app.endCount)), "") return types.ResponseQuery{
} Value: []byte(Fmt("%d,%d", app.beginCount, app.endCount)),
}
func (app *ChainAwareApplication) Proof(key []byte, blockHeight uint64) types.Result {
return types.NewResultOK(nil, Fmt("Proof is not supported"))
} }
func (app *ChainAwareApplication) BeginBlock(hash []byte, header *types.Header) { func (app *ChainAwareApplication) BeginBlock(hash []byte, header *types.Header) {

View File

@ -5,10 +5,10 @@ import (
"strings" "strings"
"testing" "testing"
. "github.com/tendermint/go-common"
"github.com/tendermint/abci/client" "github.com/tendermint/abci/client"
"github.com/tendermint/abci/server" "github.com/tendermint/abci/server"
"github.com/tendermint/abci/types" "github.com/tendermint/abci/types"
. "github.com/tendermint/go-common"
) )
func TestChainAware(t *testing.T) { func TestChainAware(t *testing.T) {
@ -39,10 +39,10 @@ func TestChainAware(t *testing.T) {
client.CommitSync() client.CommitSync()
} }
r := app.Query(nil) r := app.Query(types.RequestQuery{})
spl := strings.Split(string(r.Data), ",") spl := strings.Split(string(r.Value), ",")
if len(spl) != 2 { if len(spl) != 2 {
t.Fatal("expected %d,%d ; got %s", n, n, string(r.Data)) t.Fatal("expected %d,%d ; got %s", n, n, string(r.Value))
} }
beginCount, _ := strconv.Atoi(spl[0]) beginCount, _ := strconv.Atoi(spl[0])
endCount, _ := strconv.Atoi(spl[1]) endCount, _ := strconv.Atoi(spl[1])

View File

@ -71,19 +71,14 @@ func (app *CounterApplication) Commit() types.Result {
} }
} }
func (app *CounterApplication) Query(query []byte) types.Result { func (app *CounterApplication) Query(reqQuery types.RequestQuery) types.ResponseQuery {
queryStr := string(query)
switch queryStr { switch reqQuery.Path {
case "hash": case "hash":
return types.NewResultOK(nil, Fmt("%v", app.hashCount)) return types.ResponseQuery{Value: []byte(Fmt("%v", app.hashCount))}
case "tx": case "tx":
return types.NewResultOK(nil, Fmt("%v", app.txCount)) return types.ResponseQuery{Value: []byte(Fmt("%v", app.txCount))}
} }
return types.ErrUnknownRequest.SetLog(Fmt("Invalid nonce. Expected hash or tx, got %v", queryStr)) return types.ResponseQuery{Log: Fmt("Invalid query path. Expected hash or tx, got %v", reqQuery.Path)}
}
func (app *CounterApplication) Proof(key []byte, blockHeight uint64) types.Result {
return types.NewResultOK(nil, Fmt("Proof is not supported"))
} }

View File

@ -1,13 +1,11 @@
package dummy package dummy
import ( import (
"encoding/hex"
"strings" "strings"
"github.com/tendermint/abci/types" "github.com/tendermint/abci/types"
. "github.com/tendermint/go-common" . "github.com/tendermint/go-common"
"github.com/tendermint/go-merkle" "github.com/tendermint/go-merkle"
"github.com/tendermint/go-wire"
) )
type DummyApplication struct { type DummyApplication struct {
@ -47,30 +45,28 @@ func (app *DummyApplication) Commit() types.Result {
return types.NewResultOK(hash, "") return types.NewResultOK(hash, "")
} }
func (app *DummyApplication) Query(query []byte) types.Result { func (app *DummyApplication) Query(reqQuery types.RequestQuery) (resQuery types.ResponseQuery) {
index, value, exists := app.state.Get(query) if reqQuery.Prove {
value, proof, exists := app.state.Proof(reqQuery.Data)
queryResult := QueryResult{index, string(value), hex.EncodeToString(value), exists} resQuery.Index = -1 // TODO make Proof return index
return types.NewResultOK(wire.JSONBytes(queryResult), "") resQuery.Key = reqQuery.Data
} resQuery.Value = value
resQuery.Proof = proof
func (app *DummyApplication) Proof(key []byte, blockHeight uint64) types.Result { if exists {
// TODO: when go-merkle supports querying older blocks without possible panics, resQuery.Log = "exists"
// we should store a cache and allow a query. But for now it is impossible. } else {
// And this is just a Dummy application anyway, what do you expect? ;) resQuery.Log = "does not exist"
if blockHeight != 0 { }
return types.ErrUnknownRequest return
} else {
index, value, exists := app.state.Get(reqQuery.Data)
resQuery.Index = int64(index)
resQuery.Value = value
if exists {
resQuery.Log = "exists"
} else {
resQuery.Log = "does not exist"
}
return
} }
proof, exists := app.state.Proof(key)
if !exists {
return types.NewResultOK(nil, Fmt("Cannot find key = %v", key))
}
return types.NewResultOK(proof, "Found the key")
}
type QueryResult struct {
Index int `json:"index"`
Value string `json:"value"`
ValueHex string `json:"valueHex"`
Exists bool `json:"exists"`
} }

View File

@ -6,7 +6,6 @@ import (
"sort" "sort"
"testing" "testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
abcicli "github.com/tendermint/abci/client" abcicli "github.com/tendermint/abci/client"
"github.com/tendermint/abci/server" "github.com/tendermint/abci/server"
@ -14,7 +13,6 @@ import (
. "github.com/tendermint/go-common" . "github.com/tendermint/go-common"
"github.com/tendermint/go-crypto" "github.com/tendermint/go-crypto"
merkle "github.com/tendermint/go-merkle" merkle "github.com/tendermint/go-merkle"
"github.com/tendermint/go-wire"
) )
func testDummy(t *testing.T, app types.Application, tx []byte, key, value string) { func testDummy(t *testing.T, app types.Application, tx []byte, key, value string) {
@ -25,21 +23,24 @@ func testDummy(t *testing.T, app types.Application, tx []byte, key, value string
require.False(t, ar.IsErr(), ar) require.False(t, ar.IsErr(), ar)
// make sure query is fine // make sure query is fine
r := app.Query([]byte(key)) resQuery := app.Query(types.RequestQuery{
require.False(t, r.IsErr(), r) Path: "/store",
q := new(QueryResult) Data: []byte(key),
err := wire.ReadJSONBytes(r.Data, q) })
require.Nil(t, err) require.Equal(t, types.CodeType_OK, resQuery.Code)
require.Equal(t, value, q.Value) require.Equal(t, value, string(resQuery.Value))
// make sure proof is fine // make sure proof is fine
rp := app.Proof([]byte(key), 0) resQuery = app.Query(types.RequestQuery{
require.False(t, rp.IsErr(), rp) Path: "/store",
p, err := merkle.LoadProof(rp.Data) Data: []byte(key),
Prove: true,
})
require.Equal(t, types.CodeType_OK, resQuery.Code)
require.Equal(t, value, string(resQuery.Value))
proof, err := merkle.ReadProof(resQuery.Proof)
require.Nil(t, err) require.Nil(t, err)
require.True(t, p.Valid()) require.True(t, proof.Verify([]byte(key), resQuery.Value, proof.RootHash)) // NOTE: we have no way to verify the RootHash
assert.Equal(t, []byte(key), p.Key())
assert.Equal(t, []byte(value), p.Value())
} }
func TestDummyKV(t *testing.T) { func TestDummyKV(t *testing.T) {
@ -285,19 +286,24 @@ func testClient(t *testing.T, app abcicli.Client, tx []byte, key, value string)
require.False(t, ar.IsErr(), ar) require.False(t, ar.IsErr(), ar)
// make sure query is fine // make sure query is fine
r := app.QuerySync([]byte(key)) resQuery, err := app.QuerySync(types.RequestQuery{
require.False(t, r.IsErr(), r) Path: "/store",
q := new(QueryResult) Data: []byte(key),
err := wire.ReadJSONBytes(r.Data, q) })
require.Nil(t, err) require.Nil(t, err)
require.Equal(t, value, q.Value) require.Equal(t, types.CodeType_OK, resQuery.Code)
require.Equal(t, value, string(resQuery.Value))
// make sure proof is fine // make sure proof is fine
rp := app.ProofSync([]byte(key), 0) resQuery, err = app.QuerySync(types.RequestQuery{
require.False(t, rp.IsErr(), rp) Path: "/store",
p, err := merkle.LoadProof(rp.Data) Data: []byte(key),
Prove: true,
})
require.Nil(t, err) require.Nil(t, err)
require.True(t, p.Valid()) require.Equal(t, types.CodeType_OK, resQuery.Code)
assert.Equal(t, []byte(key), p.Key()) require.Equal(t, value, string(resQuery.Value))
assert.Equal(t, []byte(value), p.Value()) proof, err := merkle.ReadProof(resQuery.Proof)
require.Nil(t, err)
require.True(t, proof.Verify([]byte(key), resQuery.Value, proof.RootHash)) // NOTE: we have no way to verify the RootHash
} }

View File

@ -89,12 +89,8 @@ func (app *PersistentDummyApplication) Commit() types.Result {
return types.NewResultOK(appHash, "") return types.NewResultOK(appHash, "")
} }
func (app *PersistentDummyApplication) Query(query []byte) types.Result { func (app *PersistentDummyApplication) Query(reqQuery types.RequestQuery) types.ResponseQuery {
return app.app.Query(query) return app.app.Query(reqQuery)
}
func (app *PersistentDummyApplication) Proof(key []byte, blockHeight uint64) types.Result {
return app.app.Proof(key, blockHeight)
} }
// Save the validators in the merkle tree // Save the validators in the merkle tree

View File

@ -31,10 +31,6 @@ func (app *NilApplication) Commit() types.Result {
return types.NewResultOK([]byte("nil"), "") return types.NewResultOK([]byte("nil"), "")
} }
func (app *NilApplication) Query(query []byte) types.Result { func (app *NilApplication) Query(reqQuery types.RequestQuery) (resQuery types.ResponseQuery) {
return types.NewResultOK(nil, "") return resQuery
}
func (app *NilApplication) Proof(key []byte, blockHeight uint64) types.Result {
return types.NewResultOK(nil, "")
} }

2
glide.lock generated
View File

@ -53,7 +53,7 @@ imports:
- name: github.com/tendermint/go-logger - name: github.com/tendermint/go-logger
version: cefb3a45c0bf3c493a04e9bcd9b1540528be59f2 version: cefb3a45c0bf3c493a04e9bcd9b1540528be59f2
- name: github.com/tendermint/go-merkle - name: github.com/tendermint/go-merkle
version: 7a86b4486f2cd84ac885c5bbc609fdee2905f5d1 version: 653cb1f631528351ddbc359b994eb0c96f0341cd
- name: github.com/tendermint/go-process - name: github.com/tendermint/go-process
version: b27edfd189b1a01a0b099f7e9f8263589cf04909 version: b27edfd189b1a01a0b099f7e9f8263589cf04909
- name: github.com/tendermint/go-wire - name: github.com/tendermint/go-wire

View File

@ -8,8 +8,8 @@ import (
"strings" "strings"
"sync" "sync"
. "github.com/tendermint/go-common"
"github.com/tendermint/abci/types" "github.com/tendermint/abci/types"
. "github.com/tendermint/go-common"
) )
// var maxNumberConnections = 2 // var maxNumberConnections = 2
@ -184,11 +184,8 @@ func (s *SocketServer) handleRequest(req *types.Request, responses chan<- *types
res := s.app.Commit() res := s.app.Commit()
responses <- types.ToResponseCommit(res.Code, res.Data, res.Log) responses <- types.ToResponseCommit(res.Code, res.Data, res.Log)
case *types.Request_Query: case *types.Request_Query:
res := s.app.Query(r.Query.Query) resQuery := s.app.Query(*r.Query)
responses <- types.ToResponseQuery(res.Code, res.Data, res.Log) responses <- types.ToResponseQuery(resQuery)
case *types.Request_Proof:
res := s.app.Proof(r.Proof.Key, r.Proof.Height)
responses <- types.ToResponseProof(res.Code, res.Data, res.Log)
case *types.Request_InitChain: case *types.Request_InitChain:
if app, ok := s.app.(types.BlockchainAware); ok { if app, ok := s.app.(types.BlockchainAware); ok {
app.InitChain(r.InitChain.Validators) app.InitChain(r.InitChain.Validators)

View File

@ -0,0 +1,44 @@
> echo hello
-> data: hello
-> data.hex: 68656C6C6F
> info
-> data: {"size":0}
-> data.hex: 7B2273697A65223A307D
> commit
> deliver_tx "abc"
> info
-> data: {"size":1}
-> data.hex: 7B2273697A65223A317D
> commit
-> data: uü~„»×ˆíX$ðlú‡
-> data.hex: 750502FC7E84BBD788ED589624F06CFA871845D1
> query "abc"
-> key: abc
-> key.hex: 616263
-> value: abc
-> value.hex: 616263
-> log: exists
-> height: 0
-> proof: 010114750502FC7E84BBD788ED589624F06CFA871845D1000114750502FC7E84BBD788ED589624F06CFA871845D1
> deliver_tx "def=xyz"
> commit
-> data: v9;Š.E†°iLbžËQ²†ïÕ
-> data.hex: 76393B8A182E450286B0694C629ECB51B286EFD5
> query "def"
-> key: def
-> key.hex: 646566
-> value: xyz
-> value.hex: 78797A
-> log: exists
-> height: 0
-> proof: 010114C08027141879A7B95E1339565CE60D7DB7A115EB01010101020114750502FC7E84BBD788ED589624F06CFA871845D100011476393B8A182E450286B0694C629ECB51B286EFD5

View File

@ -20,10 +20,7 @@ type Application interface {
CheckTx(tx []byte) Result CheckTx(tx []byte) Result
// Query for state // Query for state
Query(query []byte) Result Query(reqQuery RequestQuery) ResponseQuery
// Get proof for state
Proof(key []byte, blockHeight uint64) Result
// Return the application Merkle root hash // Return the application Merkle root hash
Commit() Result Commit() Result
@ -81,13 +78,8 @@ func (app *GRPCApplication) CheckTx(ctx context.Context, req *RequestCheckTx) (*
} }
func (app *GRPCApplication) Query(ctx context.Context, req *RequestQuery) (*ResponseQuery, error) { func (app *GRPCApplication) Query(ctx context.Context, req *RequestQuery) (*ResponseQuery, error) {
r := app.app.Query(req.Query) resQuery := app.app.Query(*req)
return &ResponseQuery{r.Code, r.Data, r.Log}, nil return &resQuery, nil
}
func (app *GRPCApplication) Proof(ctx context.Context, req *RequestProof) (*ResponseProof, error) {
r := app.app.Proof(req.Key, req.Height)
return &ResponseProof{r.Code, r.Data, r.Log}, nil
} }
func (app *GRPCApplication) Commit(ctx context.Context, req *RequestCommit) (*ResponseCommit, error) { func (app *GRPCApplication) Commit(ctx context.Context, req *RequestCommit) (*ResponseCommit, error) {

3
types/code.go Normal file
View File

@ -0,0 +1,3 @@
package types
func (c CodeType) IsOK() bool { return c == CodeType_OK }

View File

@ -49,15 +49,9 @@ func ToRequestCommit() *Request {
} }
} }
func ToRequestQuery(queryBytes []byte) *Request { func ToRequestQuery(reqQuery RequestQuery) *Request {
return &Request{ return &Request{
Value: &Request_Query{&RequestQuery{queryBytes}}, Value: &Request_Query{&reqQuery},
}
}
func ToRequestProof(key []byte, blockHeight uint64) *Request {
return &Request{
Value: &Request_Proof{&RequestProof{key, blockHeight}},
} }
} }
@ -129,15 +123,9 @@ func ToResponseCommit(code CodeType, data []byte, log string) *Response {
} }
} }
func ToResponseQuery(code CodeType, data []byte, log string) *Response { func ToResponseQuery(resQuery ResponseQuery) *Response {
return &Response{ return &Response{
Value: &Response_Query{&ResponseQuery{code, data, log}}, Value: &Response_Query{&resQuery},
}
}
func ToResponseProof(code CodeType, data []byte, log string) *Response {
return &Response{
Value: &Response_Proof{&ResponseProof{code, data, log}},
} }
} }

View File

@ -17,7 +17,6 @@ It has these top-level messages:
RequestDeliverTx RequestDeliverTx
RequestCheckTx RequestCheckTx
RequestQuery RequestQuery
RequestProof
RequestCommit RequestCommit
RequestInitChain RequestInitChain
RequestBeginBlock RequestBeginBlock
@ -31,7 +30,6 @@ It has these top-level messages:
ResponseDeliverTx ResponseDeliverTx
ResponseCheckTx ResponseCheckTx
ResponseQuery ResponseQuery
ResponseProof
ResponseCommit ResponseCommit
ResponseInitChain ResponseInitChain
ResponseBeginBlock ResponseBeginBlock
@ -83,7 +81,6 @@ const (
MessageType_InitChain MessageType = 21 MessageType_InitChain MessageType = 21
MessageType_BeginBlock MessageType = 22 MessageType_BeginBlock MessageType = 22
MessageType_EndBlock MessageType = 23 MessageType_EndBlock MessageType = 23
MessageType_Proof MessageType = 24
) )
var MessageType_name = map[int32]string{ var MessageType_name = map[int32]string{
@ -100,7 +97,6 @@ var MessageType_name = map[int32]string{
21: "InitChain", 21: "InitChain",
22: "BeginBlock", 22: "BeginBlock",
23: "EndBlock", 23: "EndBlock",
24: "Proof",
} }
var MessageType_value = map[string]int32{ var MessageType_value = map[string]int32{
"NullMessage": 0, "NullMessage": 0,
@ -116,7 +112,6 @@ var MessageType_value = map[string]int32{
"InitChain": 21, "InitChain": 21,
"BeginBlock": 22, "BeginBlock": 22,
"EndBlock": 23, "EndBlock": 23,
"Proof": 24,
} }
func (x MessageType) String() string { func (x MessageType) String() string {
@ -245,7 +240,6 @@ type Request struct {
// *Request_InitChain // *Request_InitChain
// *Request_BeginBlock // *Request_BeginBlock
// *Request_EndBlock // *Request_EndBlock
// *Request_Proof
Value isRequest_Value `protobuf_oneof:"value"` Value isRequest_Value `protobuf_oneof:"value"`
} }
@ -291,9 +285,6 @@ type Request_BeginBlock struct {
type Request_EndBlock struct { type Request_EndBlock struct {
EndBlock *RequestEndBlock `protobuf:"bytes,11,opt,name=end_block,json=endBlock,oneof"` EndBlock *RequestEndBlock `protobuf:"bytes,11,opt,name=end_block,json=endBlock,oneof"`
} }
type Request_Proof struct {
Proof *RequestProof `protobuf:"bytes,12,opt,name=proof,oneof"`
}
func (*Request_Echo) isRequest_Value() {} func (*Request_Echo) isRequest_Value() {}
func (*Request_Flush) isRequest_Value() {} func (*Request_Flush) isRequest_Value() {}
@ -306,7 +297,6 @@ func (*Request_Query) isRequest_Value() {}
func (*Request_InitChain) isRequest_Value() {} func (*Request_InitChain) isRequest_Value() {}
func (*Request_BeginBlock) isRequest_Value() {} func (*Request_BeginBlock) isRequest_Value() {}
func (*Request_EndBlock) isRequest_Value() {} func (*Request_EndBlock) isRequest_Value() {}
func (*Request_Proof) isRequest_Value() {}
func (m *Request) GetValue() isRequest_Value { func (m *Request) GetValue() isRequest_Value {
if m != nil { if m != nil {
@ -392,13 +382,6 @@ func (m *Request) GetEndBlock() *RequestEndBlock {
return nil return nil
} }
func (m *Request) GetProof() *RequestProof {
if x, ok := m.GetValue().(*Request_Proof); ok {
return x.Proof
}
return nil
}
// XXX_OneofFuncs is for the internal use of the proto package. // XXX_OneofFuncs is for the internal use of the proto package.
func (*Request) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { func (*Request) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
return _Request_OneofMarshaler, _Request_OneofUnmarshaler, _Request_OneofSizer, []interface{}{ return _Request_OneofMarshaler, _Request_OneofUnmarshaler, _Request_OneofSizer, []interface{}{
@ -413,7 +396,6 @@ func (*Request) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error
(*Request_InitChain)(nil), (*Request_InitChain)(nil),
(*Request_BeginBlock)(nil), (*Request_BeginBlock)(nil),
(*Request_EndBlock)(nil), (*Request_EndBlock)(nil),
(*Request_Proof)(nil),
} }
} }
@ -476,11 +458,6 @@ func _Request_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
if err := b.EncodeMessage(x.EndBlock); err != nil { if err := b.EncodeMessage(x.EndBlock); err != nil {
return err return err
} }
case *Request_Proof:
b.EncodeVarint(12<<3 | proto.WireBytes)
if err := b.EncodeMessage(x.Proof); err != nil {
return err
}
case nil: case nil:
default: default:
return fmt.Errorf("Request.Value has unexpected type %T", x) return fmt.Errorf("Request.Value has unexpected type %T", x)
@ -579,14 +556,6 @@ func _Request_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer
err := b.DecodeMessage(msg) err := b.DecodeMessage(msg)
m.Value = &Request_EndBlock{msg} m.Value = &Request_EndBlock{msg}
return true, err return true, err
case 12: // value.proof
if wire != proto.WireBytes {
return true, proto.ErrInternalBadWireType
}
msg := new(RequestProof)
err := b.DecodeMessage(msg)
m.Value = &Request_Proof{msg}
return true, err
default: default:
return false, nil return false, nil
} }
@ -651,11 +620,6 @@ func _Request_OneofSizer(msg proto.Message) (n int) {
n += proto.SizeVarint(11<<3 | proto.WireBytes) n += proto.SizeVarint(11<<3 | proto.WireBytes)
n += proto.SizeVarint(uint64(s)) n += proto.SizeVarint(uint64(s))
n += s n += s
case *Request_Proof:
s := proto.Size(x.Proof)
n += proto.SizeVarint(12<<3 | proto.WireBytes)
n += proto.SizeVarint(uint64(s))
n += s
case nil: case nil:
default: default:
panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
@ -752,7 +716,10 @@ func (m *RequestCheckTx) GetTx() []byte {
} }
type RequestQuery struct { type RequestQuery struct {
Query []byte `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"` Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
Path string `protobuf:"bytes,2,opt,name=path" json:"path,omitempty"`
Height uint64 `protobuf:"varint,3,opt,name=height" json:"height,omitempty"`
Prove bool `protobuf:"varint,4,opt,name=prove" json:"prove,omitempty"`
} }
func (m *RequestQuery) Reset() { *m = RequestQuery{} } func (m *RequestQuery) Reset() { *m = RequestQuery{} }
@ -760,44 +727,41 @@ func (m *RequestQuery) String() string { return proto.CompactTextStri
func (*RequestQuery) ProtoMessage() {} func (*RequestQuery) ProtoMessage() {}
func (*RequestQuery) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } func (*RequestQuery) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
func (m *RequestQuery) GetQuery() []byte { func (m *RequestQuery) GetData() []byte {
if m != nil { if m != nil {
return m.Query return m.Data
} }
return nil return nil
} }
type RequestProof struct { func (m *RequestQuery) GetPath() string {
Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
Height uint64 `protobuf:"varint,2,opt,name=height" json:"height,omitempty"`
}
func (m *RequestProof) Reset() { *m = RequestProof{} }
func (m *RequestProof) String() string { return proto.CompactTextString(m) }
func (*RequestProof) ProtoMessage() {}
func (*RequestProof) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
func (m *RequestProof) GetKey() []byte {
if m != nil { if m != nil {
return m.Key return m.Path
} }
return nil return ""
} }
func (m *RequestProof) GetHeight() uint64 { func (m *RequestQuery) GetHeight() uint64 {
if m != nil { if m != nil {
return m.Height return m.Height
} }
return 0 return 0
} }
func (m *RequestQuery) GetProve() bool {
if m != nil {
return m.Prove
}
return false
}
type RequestCommit struct { type RequestCommit struct {
} }
func (m *RequestCommit) Reset() { *m = RequestCommit{} } func (m *RequestCommit) Reset() { *m = RequestCommit{} }
func (m *RequestCommit) String() string { return proto.CompactTextString(m) } func (m *RequestCommit) String() string { return proto.CompactTextString(m) }
func (*RequestCommit) ProtoMessage() {} func (*RequestCommit) ProtoMessage() {}
func (*RequestCommit) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } func (*RequestCommit) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
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,omitempty"`
@ -806,7 +770,7 @@ type RequestInitChain struct {
func (m *RequestInitChain) Reset() { *m = RequestInitChain{} } func (m *RequestInitChain) Reset() { *m = RequestInitChain{} }
func (m *RequestInitChain) String() string { return proto.CompactTextString(m) } func (m *RequestInitChain) String() string { return proto.CompactTextString(m) }
func (*RequestInitChain) ProtoMessage() {} func (*RequestInitChain) ProtoMessage() {}
func (*RequestInitChain) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } func (*RequestInitChain) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
func (m *RequestInitChain) GetValidators() []*Validator { func (m *RequestInitChain) GetValidators() []*Validator {
if m != nil { if m != nil {
@ -823,7 +787,7 @@ type RequestBeginBlock struct {
func (m *RequestBeginBlock) Reset() { *m = RequestBeginBlock{} } func (m *RequestBeginBlock) Reset() { *m = RequestBeginBlock{} }
func (m *RequestBeginBlock) String() string { return proto.CompactTextString(m) } func (m *RequestBeginBlock) String() string { return proto.CompactTextString(m) }
func (*RequestBeginBlock) ProtoMessage() {} func (*RequestBeginBlock) ProtoMessage() {}
func (*RequestBeginBlock) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } func (*RequestBeginBlock) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
func (m *RequestBeginBlock) GetHash() []byte { func (m *RequestBeginBlock) GetHash() []byte {
if m != nil { if m != nil {
@ -846,7 +810,7 @@ type RequestEndBlock struct {
func (m *RequestEndBlock) Reset() { *m = RequestEndBlock{} } func (m *RequestEndBlock) Reset() { *m = RequestEndBlock{} }
func (m *RequestEndBlock) String() string { return proto.CompactTextString(m) } func (m *RequestEndBlock) String() string { return proto.CompactTextString(m) }
func (*RequestEndBlock) ProtoMessage() {} func (*RequestEndBlock) ProtoMessage() {}
func (*RequestEndBlock) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } func (*RequestEndBlock) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
func (m *RequestEndBlock) GetHeight() uint64 { func (m *RequestEndBlock) GetHeight() uint64 {
if m != nil { if m != nil {
@ -869,14 +833,13 @@ type Response struct {
// *Response_InitChain // *Response_InitChain
// *Response_BeginBlock // *Response_BeginBlock
// *Response_EndBlock // *Response_EndBlock
// *Response_Proof
Value isResponse_Value `protobuf_oneof:"value"` Value isResponse_Value `protobuf_oneof:"value"`
} }
func (m *Response) Reset() { *m = Response{} } func (m *Response) Reset() { *m = Response{} }
func (m *Response) String() string { return proto.CompactTextString(m) } func (m *Response) String() string { return proto.CompactTextString(m) }
func (*Response) ProtoMessage() {} func (*Response) ProtoMessage() {}
func (*Response) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } func (*Response) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
type isResponse_Value interface { type isResponse_Value interface {
isResponse_Value() isResponse_Value()
@ -918,9 +881,6 @@ type Response_BeginBlock struct {
type Response_EndBlock struct { type Response_EndBlock struct {
EndBlock *ResponseEndBlock `protobuf:"bytes,12,opt,name=end_block,json=endBlock,oneof"` EndBlock *ResponseEndBlock `protobuf:"bytes,12,opt,name=end_block,json=endBlock,oneof"`
} }
type Response_Proof struct {
Proof *ResponseProof `protobuf:"bytes,13,opt,name=proof,oneof"`
}
func (*Response_Exception) isResponse_Value() {} func (*Response_Exception) isResponse_Value() {}
func (*Response_Echo) isResponse_Value() {} func (*Response_Echo) isResponse_Value() {}
@ -934,7 +894,6 @@ func (*Response_Query) isResponse_Value() {}
func (*Response_InitChain) isResponse_Value() {} func (*Response_InitChain) isResponse_Value() {}
func (*Response_BeginBlock) isResponse_Value() {} func (*Response_BeginBlock) isResponse_Value() {}
func (*Response_EndBlock) isResponse_Value() {} func (*Response_EndBlock) isResponse_Value() {}
func (*Response_Proof) isResponse_Value() {}
func (m *Response) GetValue() isResponse_Value { func (m *Response) GetValue() isResponse_Value {
if m != nil { if m != nil {
@ -1027,13 +986,6 @@ func (m *Response) GetEndBlock() *ResponseEndBlock {
return nil return nil
} }
func (m *Response) GetProof() *ResponseProof {
if x, ok := m.GetValue().(*Response_Proof); ok {
return x.Proof
}
return nil
}
// XXX_OneofFuncs is for the internal use of the proto package. // XXX_OneofFuncs is for the internal use of the proto package.
func (*Response) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { func (*Response) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
return _Response_OneofMarshaler, _Response_OneofUnmarshaler, _Response_OneofSizer, []interface{}{ return _Response_OneofMarshaler, _Response_OneofUnmarshaler, _Response_OneofSizer, []interface{}{
@ -1049,7 +1001,6 @@ func (*Response) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) erro
(*Response_InitChain)(nil), (*Response_InitChain)(nil),
(*Response_BeginBlock)(nil), (*Response_BeginBlock)(nil),
(*Response_EndBlock)(nil), (*Response_EndBlock)(nil),
(*Response_Proof)(nil),
} }
} }
@ -1117,11 +1068,6 @@ func _Response_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
if err := b.EncodeMessage(x.EndBlock); err != nil { if err := b.EncodeMessage(x.EndBlock); err != nil {
return err return err
} }
case *Response_Proof:
b.EncodeVarint(13<<3 | proto.WireBytes)
if err := b.EncodeMessage(x.Proof); err != nil {
return err
}
case nil: case nil:
default: default:
return fmt.Errorf("Response.Value has unexpected type %T", x) return fmt.Errorf("Response.Value has unexpected type %T", x)
@ -1228,14 +1174,6 @@ func _Response_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffe
err := b.DecodeMessage(msg) err := b.DecodeMessage(msg)
m.Value = &Response_EndBlock{msg} m.Value = &Response_EndBlock{msg}
return true, err return true, err
case 13: // value.proof
if wire != proto.WireBytes {
return true, proto.ErrInternalBadWireType
}
msg := new(ResponseProof)
err := b.DecodeMessage(msg)
m.Value = &Response_Proof{msg}
return true, err
default: default:
return false, nil return false, nil
} }
@ -1305,11 +1243,6 @@ func _Response_OneofSizer(msg proto.Message) (n int) {
n += proto.SizeVarint(12<<3 | proto.WireBytes) n += proto.SizeVarint(12<<3 | proto.WireBytes)
n += proto.SizeVarint(uint64(s)) n += proto.SizeVarint(uint64(s))
n += s n += s
case *Response_Proof:
s := proto.Size(x.Proof)
n += proto.SizeVarint(13<<3 | proto.WireBytes)
n += proto.SizeVarint(uint64(s))
n += s
case nil: case nil:
default: default:
panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
@ -1324,7 +1257,7 @@ type ResponseException struct {
func (m *ResponseException) Reset() { *m = ResponseException{} } func (m *ResponseException) Reset() { *m = ResponseException{} }
func (m *ResponseException) String() string { return proto.CompactTextString(m) } func (m *ResponseException) String() string { return proto.CompactTextString(m) }
func (*ResponseException) ProtoMessage() {} func (*ResponseException) ProtoMessage() {}
func (*ResponseException) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } func (*ResponseException) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
func (m *ResponseException) GetError() string { func (m *ResponseException) GetError() string {
if m != nil { if m != nil {
@ -1340,7 +1273,7 @@ type ResponseEcho struct {
func (m *ResponseEcho) Reset() { *m = ResponseEcho{} } func (m *ResponseEcho) Reset() { *m = ResponseEcho{} }
func (m *ResponseEcho) String() string { return proto.CompactTextString(m) } func (m *ResponseEcho) String() string { return proto.CompactTextString(m) }
func (*ResponseEcho) ProtoMessage() {} func (*ResponseEcho) ProtoMessage() {}
func (*ResponseEcho) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } func (*ResponseEcho) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
func (m *ResponseEcho) GetMessage() string { func (m *ResponseEcho) GetMessage() string {
if m != nil { if m != nil {
@ -1355,7 +1288,7 @@ type ResponseFlush struct {
func (m *ResponseFlush) Reset() { *m = ResponseFlush{} } func (m *ResponseFlush) Reset() { *m = ResponseFlush{} }
func (m *ResponseFlush) String() string { return proto.CompactTextString(m) } func (m *ResponseFlush) String() string { return proto.CompactTextString(m) }
func (*ResponseFlush) ProtoMessage() {} func (*ResponseFlush) ProtoMessage() {}
func (*ResponseFlush) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } func (*ResponseFlush) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
type ResponseInfo struct { type ResponseInfo struct {
Data string `protobuf:"bytes,1,opt,name=data" json:"data,omitempty"` Data string `protobuf:"bytes,1,opt,name=data" json:"data,omitempty"`
@ -1367,7 +1300,7 @@ type ResponseInfo struct {
func (m *ResponseInfo) Reset() { *m = ResponseInfo{} } func (m *ResponseInfo) Reset() { *m = ResponseInfo{} }
func (m *ResponseInfo) String() string { return proto.CompactTextString(m) } func (m *ResponseInfo) String() string { return proto.CompactTextString(m) }
func (*ResponseInfo) ProtoMessage() {} func (*ResponseInfo) ProtoMessage() {}
func (*ResponseInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } func (*ResponseInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
func (m *ResponseInfo) GetData() string { func (m *ResponseInfo) GetData() string {
if m != nil { if m != nil {
@ -1404,7 +1337,7 @@ type ResponseSetOption struct {
func (m *ResponseSetOption) Reset() { *m = ResponseSetOption{} } func (m *ResponseSetOption) Reset() { *m = ResponseSetOption{} }
func (m *ResponseSetOption) String() string { return proto.CompactTextString(m) } func (m *ResponseSetOption) String() string { return proto.CompactTextString(m) }
func (*ResponseSetOption) ProtoMessage() {} func (*ResponseSetOption) ProtoMessage() {}
func (*ResponseSetOption) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } func (*ResponseSetOption) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
func (m *ResponseSetOption) GetLog() string { func (m *ResponseSetOption) GetLog() string {
if m != nil { if m != nil {
@ -1422,7 +1355,7 @@ type ResponseDeliverTx struct {
func (m *ResponseDeliverTx) Reset() { *m = ResponseDeliverTx{} } func (m *ResponseDeliverTx) Reset() { *m = ResponseDeliverTx{} }
func (m *ResponseDeliverTx) String() string { return proto.CompactTextString(m) } func (m *ResponseDeliverTx) String() string { return proto.CompactTextString(m) }
func (*ResponseDeliverTx) ProtoMessage() {} func (*ResponseDeliverTx) ProtoMessage() {}
func (*ResponseDeliverTx) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } func (*ResponseDeliverTx) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
func (m *ResponseDeliverTx) GetCode() CodeType { func (m *ResponseDeliverTx) GetCode() CodeType {
if m != nil { if m != nil {
@ -1454,7 +1387,7 @@ type ResponseCheckTx struct {
func (m *ResponseCheckTx) Reset() { *m = ResponseCheckTx{} } func (m *ResponseCheckTx) Reset() { *m = ResponseCheckTx{} }
func (m *ResponseCheckTx) String() string { return proto.CompactTextString(m) } func (m *ResponseCheckTx) String() string { return proto.CompactTextString(m) }
func (*ResponseCheckTx) ProtoMessage() {} func (*ResponseCheckTx) ProtoMessage() {}
func (*ResponseCheckTx) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } func (*ResponseCheckTx) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
func (m *ResponseCheckTx) GetCode() CodeType { func (m *ResponseCheckTx) GetCode() CodeType {
if m != nil { if m != nil {
@ -1478,15 +1411,19 @@ func (m *ResponseCheckTx) GetLog() string {
} }
type ResponseQuery struct { type ResponseQuery struct {
Code CodeType `protobuf:"varint,1,opt,name=code,enum=types.CodeType" json:"code,omitempty"` Code CodeType `protobuf:"varint,1,opt,name=code,enum=types.CodeType" json:"code,omitempty"`
Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` Index int64 `protobuf:"varint,2,opt,name=index" json:"index,omitempty"`
Log string `protobuf:"bytes,3,opt,name=log" json:"log,omitempty"` Key []byte `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"`
Value []byte `protobuf:"bytes,4,opt,name=value,proto3" json:"value,omitempty"`
Proof []byte `protobuf:"bytes,5,opt,name=proof,proto3" json:"proof,omitempty"`
Height uint64 `protobuf:"varint,6,opt,name=height" json:"height,omitempty"`
Log string `protobuf:"bytes,7,opt,name=log" json:"log,omitempty"`
} }
func (m *ResponseQuery) Reset() { *m = ResponseQuery{} } func (m *ResponseQuery) Reset() { *m = ResponseQuery{} }
func (m *ResponseQuery) String() string { return proto.CompactTextString(m) } func (m *ResponseQuery) String() string { return proto.CompactTextString(m) }
func (*ResponseQuery) ProtoMessage() {} func (*ResponseQuery) ProtoMessage() {}
func (*ResponseQuery) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } func (*ResponseQuery) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }
func (m *ResponseQuery) GetCode() CodeType { func (m *ResponseQuery) GetCode() CodeType {
if m != nil { if m != nil {
@ -1495,13 +1432,41 @@ func (m *ResponseQuery) GetCode() CodeType {
return CodeType_OK return CodeType_OK
} }
func (m *ResponseQuery) GetData() []byte { func (m *ResponseQuery) GetIndex() int64 {
if m != nil { if m != nil {
return m.Data return m.Index
}
return 0
}
func (m *ResponseQuery) GetKey() []byte {
if m != nil {
return m.Key
} }
return nil return nil
} }
func (m *ResponseQuery) GetValue() []byte {
if m != nil {
return m.Value
}
return nil
}
func (m *ResponseQuery) GetProof() []byte {
if m != nil {
return m.Proof
}
return nil
}
func (m *ResponseQuery) GetHeight() uint64 {
if m != nil {
return m.Height
}
return 0
}
func (m *ResponseQuery) GetLog() string { func (m *ResponseQuery) GetLog() string {
if m != nil { if m != nil {
return m.Log return m.Log
@ -1509,38 +1474,6 @@ func (m *ResponseQuery) GetLog() string {
return "" return ""
} }
type ResponseProof struct {
Code CodeType `protobuf:"varint,1,opt,name=code,enum=types.CodeType" json:"code,omitempty"`
Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
Log string `protobuf:"bytes,3,opt,name=log" json:"log,omitempty"`
}
func (m *ResponseProof) Reset() { *m = ResponseProof{} }
func (m *ResponseProof) String() string { return proto.CompactTextString(m) }
func (*ResponseProof) ProtoMessage() {}
func (*ResponseProof) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }
func (m *ResponseProof) GetCode() CodeType {
if m != nil {
return m.Code
}
return CodeType_OK
}
func (m *ResponseProof) GetData() []byte {
if m != nil {
return m.Data
}
return nil
}
func (m *ResponseProof) GetLog() string {
if m != nil {
return m.Log
}
return ""
}
type ResponseCommit struct { type ResponseCommit struct {
Code CodeType `protobuf:"varint,1,opt,name=code,enum=types.CodeType" json:"code,omitempty"` Code CodeType `protobuf:"varint,1,opt,name=code,enum=types.CodeType" json:"code,omitempty"`
Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
@ -1550,7 +1483,7 @@ type ResponseCommit struct {
func (m *ResponseCommit) Reset() { *m = ResponseCommit{} } func (m *ResponseCommit) Reset() { *m = ResponseCommit{} }
func (m *ResponseCommit) String() string { return proto.CompactTextString(m) } func (m *ResponseCommit) String() string { return proto.CompactTextString(m) }
func (*ResponseCommit) ProtoMessage() {} func (*ResponseCommit) ProtoMessage() {}
func (*ResponseCommit) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } func (*ResponseCommit) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }
func (m *ResponseCommit) GetCode() CodeType { func (m *ResponseCommit) GetCode() CodeType {
if m != nil { if m != nil {
@ -1579,7 +1512,7 @@ type ResponseInitChain struct {
func (m *ResponseInitChain) Reset() { *m = ResponseInitChain{} } func (m *ResponseInitChain) Reset() { *m = ResponseInitChain{} }
func (m *ResponseInitChain) String() string { return proto.CompactTextString(m) } func (m *ResponseInitChain) String() string { return proto.CompactTextString(m) }
func (*ResponseInitChain) ProtoMessage() {} func (*ResponseInitChain) ProtoMessage() {}
func (*ResponseInitChain) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } func (*ResponseInitChain) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }
type ResponseBeginBlock struct { type ResponseBeginBlock struct {
} }
@ -1587,7 +1520,7 @@ type ResponseBeginBlock struct {
func (m *ResponseBeginBlock) Reset() { *m = ResponseBeginBlock{} } func (m *ResponseBeginBlock) Reset() { *m = ResponseBeginBlock{} }
func (m *ResponseBeginBlock) String() string { return proto.CompactTextString(m) } func (m *ResponseBeginBlock) String() string { return proto.CompactTextString(m) }
func (*ResponseBeginBlock) ProtoMessage() {} func (*ResponseBeginBlock) ProtoMessage() {}
func (*ResponseBeginBlock) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } func (*ResponseBeginBlock) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} }
type ResponseEndBlock struct { type ResponseEndBlock struct {
Diffs []*Validator `protobuf:"bytes,4,rep,name=diffs" json:"diffs,omitempty"` Diffs []*Validator `protobuf:"bytes,4,rep,name=diffs" json:"diffs,omitempty"`
@ -1596,7 +1529,7 @@ type ResponseEndBlock struct {
func (m *ResponseEndBlock) Reset() { *m = ResponseEndBlock{} } func (m *ResponseEndBlock) Reset() { *m = ResponseEndBlock{} }
func (m *ResponseEndBlock) String() string { return proto.CompactTextString(m) } func (m *ResponseEndBlock) String() string { return proto.CompactTextString(m) }
func (*ResponseEndBlock) ProtoMessage() {} func (*ResponseEndBlock) ProtoMessage() {}
func (*ResponseEndBlock) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } func (*ResponseEndBlock) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }
func (m *ResponseEndBlock) GetDiffs() []*Validator { func (m *ResponseEndBlock) GetDiffs() []*Validator {
if m != nil { if m != nil {
@ -1620,7 +1553,7 @@ type Header struct {
func (m *Header) Reset() { *m = Header{} } func (m *Header) Reset() { *m = Header{} }
func (m *Header) String() string { return proto.CompactTextString(m) } func (m *Header) String() string { return proto.CompactTextString(m) }
func (*Header) ProtoMessage() {} func (*Header) ProtoMessage() {}
func (*Header) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } func (*Header) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }
func (m *Header) GetChainId() string { func (m *Header) GetChainId() string {
if m != nil { if m != nil {
@ -1693,7 +1626,7 @@ type BlockID struct {
func (m *BlockID) Reset() { *m = BlockID{} } func (m *BlockID) Reset() { *m = BlockID{} }
func (m *BlockID) String() string { return proto.CompactTextString(m) } func (m *BlockID) String() string { return proto.CompactTextString(m) }
func (*BlockID) ProtoMessage() {} func (*BlockID) ProtoMessage() {}
func (*BlockID) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } func (*BlockID) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }
func (m *BlockID) GetHash() []byte { func (m *BlockID) GetHash() []byte {
if m != nil { if m != nil {
@ -1717,7 +1650,7 @@ type PartSetHeader struct {
func (m *PartSetHeader) Reset() { *m = PartSetHeader{} } func (m *PartSetHeader) Reset() { *m = PartSetHeader{} }
func (m *PartSetHeader) String() string { return proto.CompactTextString(m) } func (m *PartSetHeader) String() string { return proto.CompactTextString(m) }
func (*PartSetHeader) ProtoMessage() {} func (*PartSetHeader) ProtoMessage() {}
func (*PartSetHeader) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } func (*PartSetHeader) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }
func (m *PartSetHeader) GetTotal() uint64 { func (m *PartSetHeader) GetTotal() uint64 {
if m != nil { if m != nil {
@ -1741,7 +1674,7 @@ type Validator struct {
func (m *Validator) Reset() { *m = Validator{} } func (m *Validator) Reset() { *m = Validator{} }
func (m *Validator) String() string { return proto.CompactTextString(m) } func (m *Validator) String() string { return proto.CompactTextString(m) }
func (*Validator) ProtoMessage() {} func (*Validator) ProtoMessage() {}
func (*Validator) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } func (*Validator) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} }
func (m *Validator) GetPubKey() []byte { func (m *Validator) GetPubKey() []byte {
if m != nil { if m != nil {
@ -1766,7 +1699,6 @@ func init() {
proto.RegisterType((*RequestDeliverTx)(nil), "types.RequestDeliverTx") proto.RegisterType((*RequestDeliverTx)(nil), "types.RequestDeliverTx")
proto.RegisterType((*RequestCheckTx)(nil), "types.RequestCheckTx") proto.RegisterType((*RequestCheckTx)(nil), "types.RequestCheckTx")
proto.RegisterType((*RequestQuery)(nil), "types.RequestQuery") proto.RegisterType((*RequestQuery)(nil), "types.RequestQuery")
proto.RegisterType((*RequestProof)(nil), "types.RequestProof")
proto.RegisterType((*RequestCommit)(nil), "types.RequestCommit") proto.RegisterType((*RequestCommit)(nil), "types.RequestCommit")
proto.RegisterType((*RequestInitChain)(nil), "types.RequestInitChain") proto.RegisterType((*RequestInitChain)(nil), "types.RequestInitChain")
proto.RegisterType((*RequestBeginBlock)(nil), "types.RequestBeginBlock") proto.RegisterType((*RequestBeginBlock)(nil), "types.RequestBeginBlock")
@ -1780,7 +1712,6 @@ func init() {
proto.RegisterType((*ResponseDeliverTx)(nil), "types.ResponseDeliverTx") proto.RegisterType((*ResponseDeliverTx)(nil), "types.ResponseDeliverTx")
proto.RegisterType((*ResponseCheckTx)(nil), "types.ResponseCheckTx") proto.RegisterType((*ResponseCheckTx)(nil), "types.ResponseCheckTx")
proto.RegisterType((*ResponseQuery)(nil), "types.ResponseQuery") proto.RegisterType((*ResponseQuery)(nil), "types.ResponseQuery")
proto.RegisterType((*ResponseProof)(nil), "types.ResponseProof")
proto.RegisterType((*ResponseCommit)(nil), "types.ResponseCommit") proto.RegisterType((*ResponseCommit)(nil), "types.ResponseCommit")
proto.RegisterType((*ResponseInitChain)(nil), "types.ResponseInitChain") proto.RegisterType((*ResponseInitChain)(nil), "types.ResponseInitChain")
proto.RegisterType((*ResponseBeginBlock)(nil), "types.ResponseBeginBlock") proto.RegisterType((*ResponseBeginBlock)(nil), "types.ResponseBeginBlock")
@ -1811,7 +1742,6 @@ type ABCIApplicationClient interface {
DeliverTx(ctx context.Context, in *RequestDeliverTx, opts ...grpc.CallOption) (*ResponseDeliverTx, error) DeliverTx(ctx context.Context, in *RequestDeliverTx, opts ...grpc.CallOption) (*ResponseDeliverTx, error)
CheckTx(ctx context.Context, in *RequestCheckTx, opts ...grpc.CallOption) (*ResponseCheckTx, error) CheckTx(ctx context.Context, in *RequestCheckTx, opts ...grpc.CallOption) (*ResponseCheckTx, error)
Query(ctx context.Context, in *RequestQuery, opts ...grpc.CallOption) (*ResponseQuery, error) Query(ctx context.Context, in *RequestQuery, opts ...grpc.CallOption) (*ResponseQuery, error)
Proof(ctx context.Context, in *RequestProof, opts ...grpc.CallOption) (*ResponseProof, error)
Commit(ctx context.Context, in *RequestCommit, opts ...grpc.CallOption) (*ResponseCommit, error) Commit(ctx context.Context, in *RequestCommit, opts ...grpc.CallOption) (*ResponseCommit, error)
InitChain(ctx context.Context, in *RequestInitChain, opts ...grpc.CallOption) (*ResponseInitChain, error) InitChain(ctx context.Context, in *RequestInitChain, opts ...grpc.CallOption) (*ResponseInitChain, error)
BeginBlock(ctx context.Context, in *RequestBeginBlock, opts ...grpc.CallOption) (*ResponseBeginBlock, error) BeginBlock(ctx context.Context, in *RequestBeginBlock, opts ...grpc.CallOption) (*ResponseBeginBlock, error)
@ -1889,15 +1819,6 @@ func (c *aBCIApplicationClient) Query(ctx context.Context, in *RequestQuery, opt
return out, nil return out, nil
} }
func (c *aBCIApplicationClient) Proof(ctx context.Context, in *RequestProof, opts ...grpc.CallOption) (*ResponseProof, error) {
out := new(ResponseProof)
err := grpc.Invoke(ctx, "/types.ABCIApplication/Proof", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *aBCIApplicationClient) Commit(ctx context.Context, in *RequestCommit, opts ...grpc.CallOption) (*ResponseCommit, error) { func (c *aBCIApplicationClient) Commit(ctx context.Context, in *RequestCommit, opts ...grpc.CallOption) (*ResponseCommit, error) {
out := new(ResponseCommit) out := new(ResponseCommit)
err := grpc.Invoke(ctx, "/types.ABCIApplication/Commit", in, out, c.cc, opts...) err := grpc.Invoke(ctx, "/types.ABCIApplication/Commit", in, out, c.cc, opts...)
@ -1944,7 +1865,6 @@ type ABCIApplicationServer interface {
DeliverTx(context.Context, *RequestDeliverTx) (*ResponseDeliverTx, error) DeliverTx(context.Context, *RequestDeliverTx) (*ResponseDeliverTx, error)
CheckTx(context.Context, *RequestCheckTx) (*ResponseCheckTx, error) CheckTx(context.Context, *RequestCheckTx) (*ResponseCheckTx, error)
Query(context.Context, *RequestQuery) (*ResponseQuery, error) Query(context.Context, *RequestQuery) (*ResponseQuery, error)
Proof(context.Context, *RequestProof) (*ResponseProof, error)
Commit(context.Context, *RequestCommit) (*ResponseCommit, error) Commit(context.Context, *RequestCommit) (*ResponseCommit, error)
InitChain(context.Context, *RequestInitChain) (*ResponseInitChain, error) InitChain(context.Context, *RequestInitChain) (*ResponseInitChain, error)
BeginBlock(context.Context, *RequestBeginBlock) (*ResponseBeginBlock, error) BeginBlock(context.Context, *RequestBeginBlock) (*ResponseBeginBlock, error)
@ -2081,24 +2001,6 @@ func _ABCIApplication_Query_Handler(srv interface{}, ctx context.Context, dec fu
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _ABCIApplication_Proof_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(RequestProof)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ABCIApplicationServer).Proof(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/types.ABCIApplication/Proof",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ABCIApplicationServer).Proof(ctx, req.(*RequestProof))
}
return interceptor(ctx, in, info, handler)
}
func _ABCIApplication_Commit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _ABCIApplication_Commit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(RequestCommit) in := new(RequestCommit)
if err := dec(in); err != nil { if err := dec(in); err != nil {
@ -2203,10 +2105,6 @@ var _ABCIApplication_serviceDesc = grpc.ServiceDesc{
MethodName: "Query", MethodName: "Query",
Handler: _ABCIApplication_Query_Handler, Handler: _ABCIApplication_Query_Handler,
}, },
{
MethodName: "Proof",
Handler: _ABCIApplication_Proof_Handler,
},
{ {
MethodName: "Commit", MethodName: "Commit",
Handler: _ABCIApplication_Commit_Handler, Handler: _ABCIApplication_Commit_Handler,
@ -2231,112 +2129,112 @@ var _ABCIApplication_serviceDesc = grpc.ServiceDesc{
func init() { proto.RegisterFile("types/types.proto", fileDescriptor0) } func init() { proto.RegisterFile("types/types.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{ var fileDescriptor0 = []byte{
// 1710 bytes of a gzipped FileDescriptorProto // 1711 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xb4, 0x58, 0x5b, 0x6f, 0xe4, 0x48, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x58, 0x4b, 0x6f, 0xe4, 0xc6,
0x15, 0x8e, 0x3b, 0x7d, 0x3d, 0x9d, 0x74, 0x2a, 0x27, 0x37, 0xa7, 0xe1, 0x61, 0x64, 0x58, 0x36, 0x11, 0x16, 0xe7, 0x3d, 0x35, 0xd2, 0xa8, 0x55, 0x1a, 0x49, 0xd4, 0x24, 0x87, 0x05, 0x03, 0xc7,
0x33, 0x0c, 0x33, 0x28, 0xab, 0x45, 0x13, 0x16, 0x21, 0x25, 0x33, 0xd9, 0xa4, 0xb5, 0xda, 0x99, 0xda, 0x8d, 0xb3, 0x1b, 0xc8, 0x70, 0xb0, 0x8a, 0x83, 0x00, 0xd2, 0xae, 0xbc, 0x1a, 0x18, 0xde,
0xe0, 0x9d, 0xdd, 0x07, 0x40, 0xb4, 0x9c, 0x76, 0x75, 0xb7, 0x89, 0xdb, 0xf6, 0xf8, 0x92, 0x4d, 0x55, 0xe8, 0xb5, 0x2f, 0x09, 0x32, 0xa0, 0x86, 0x3d, 0x33, 0x8c, 0xa8, 0x26, 0x97, 0x6c, 0xca,
0xf8, 0x23, 0xfc, 0x04, 0x7e, 0x01, 0x2f, 0x3c, 0xf1, 0x84, 0xc4, 0xfd, 0xf2, 0x57, 0xf8, 0x03, 0x52, 0x7e, 0x83, 0xef, 0xf9, 0x09, 0xb9, 0x07, 0xc8, 0x29, 0xf7, 0x00, 0x79, 0x3f, 0x7e, 0x51,
0xe8, 0x54, 0x95, 0xaf, 0xb1, 0x79, 0x9a, 0x7d, 0x69, 0xb9, 0xce, 0xad, 0xea, 0x54, 0x7d, 0xe7, 0xd0, 0x0f, 0x3e, 0x45, 0x1a, 0x3e, 0xf8, 0x32, 0x60, 0x3d, 0xbb, 0xab, 0xba, 0xea, 0xeb, 0xea,
0xab, 0xd3, 0x05, 0xdb, 0xf1, 0x7d, 0xc0, 0xa3, 0xe7, 0xe2, 0xf7, 0x59, 0x10, 0xfa, 0xb1, 0x8f, 0x81, 0x1d, 0x7e, 0x1f, 0xd2, 0xf8, 0x99, 0xfc, 0x7d, 0x1a, 0x46, 0x01, 0x0f, 0xb0, 0x2b, 0x09,
0x1d, 0x31, 0x30, 0xfe, 0xdb, 0x86, 0x9e, 0xc9, 0xdf, 0x25, 0x3c, 0x8a, 0xf1, 0x08, 0xda, 0x7c, 0xeb, 0x2f, 0x1d, 0xe8, 0xdb, 0xf4, 0x5d, 0x42, 0x63, 0x8e, 0x47, 0xd0, 0xa1, 0x8b, 0x75, 0x60,
0xb6, 0xf4, 0x75, 0xed, 0x91, 0x76, 0x34, 0x3c, 0xc6, 0x67, 0xd2, 0x5c, 0x69, 0xcf, 0x67, 0x4b, 0x1a, 0x8f, 0x8c, 0xa3, 0xd1, 0x31, 0x3e, 0x55, 0xea, 0x5a, 0x7a, 0xbe, 0x58, 0x07, 0x17, 0x1b,
0xff, 0x72, 0xcd, 0x14, 0x16, 0xf8, 0x7d, 0xe8, 0xcc, 0xdd, 0x24, 0x5a, 0xea, 0x2d, 0x61, 0xba, 0xb6, 0xd4, 0xc0, 0x1f, 0x41, 0x77, 0xe9, 0x27, 0xf1, 0xda, 0x6c, 0x49, 0xd5, 0xdd, 0xb2, 0xea,
0x53, 0x36, 0xfd, 0x94, 0x54, 0x97, 0x6b, 0xa6, 0xb4, 0xa1, 0xb0, 0x8e, 0x37, 0xf7, 0xf5, 0xf5, 0x27, 0x42, 0x74, 0xb1, 0x61, 0x2b, 0x1d, 0xe1, 0xd6, 0x63, 0xcb, 0xc0, 0x6c, 0xd7, 0xb9, 0x9d,
0xba, 0xb0, 0x13, 0x6f, 0x2e, 0xc2, 0x92, 0x05, 0xbe, 0x00, 0x88, 0x78, 0x3c, 0xf5, 0x83, 0xd8, 0xb1, 0xa5, 0x74, 0x2b, 0x34, 0xf0, 0x39, 0x40, 0x4c, 0xf9, 0x3c, 0x08, 0xb9, 0x17, 0x30, 0xb3,
0xf1, 0x3d, 0xbd, 0x2d, 0xec, 0x0f, 0xca, 0xf6, 0x5f, 0xf0, 0xf8, 0x8d, 0x50, 0x5f, 0xae, 0x99, 0x23, 0xf5, 0x0f, 0xca, 0xfa, 0x9f, 0x53, 0xfe, 0x46, 0x8a, 0x2f, 0x36, 0xec, 0x61, 0x9c, 0x12,
0x83, 0x28, 0x1d, 0x90, 0xa7, 0xcd, 0x5d, 0xe7, 0x96, 0x87, 0xd3, 0xf8, 0x4e, 0xef, 0xd4, 0x79, 0xc2, 0xd2, 0xa5, 0xbe, 0x77, 0x4b, 0xa3, 0x39, 0xbf, 0x33, 0xbb, 0x75, 0x96, 0x2f, 0x95, 0xfc,
0xbe, 0x92, 0xfa, 0xb7, 0x77, 0xe4, 0x69, 0xa7, 0x03, 0x3c, 0x86, 0xfe, 0x6c, 0xc9, 0x67, 0x37, 0xed, 0x9d, 0xb0, 0x74, 0x53, 0x02, 0x8f, 0x61, 0xb0, 0x58, 0xd3, 0xc5, 0xb5, 0xb0, 0xeb, 0x49,
0xe4, 0xd7, 0x15, 0x7e, 0x7b, 0x65, 0xbf, 0x97, 0xa4, 0x15, 0x5e, 0xbd, 0x99, 0xfc, 0xc4, 0x67, 0xbb, 0xbd, 0xb2, 0xdd, 0x0b, 0x21, 0x95, 0x56, 0xfd, 0x85, 0xfa, 0xc4, 0xa7, 0xd0, 0x5b, 0x04,
0xd0, 0x9d, 0xf9, 0xab, 0x95, 0x13, 0xeb, 0x3d, 0xe1, 0xb1, 0x5b, 0xf1, 0x10, 0xba, 0xcb, 0x35, 0x37, 0x37, 0x1e, 0x37, 0xfb, 0xd2, 0x62, 0x52, 0xb1, 0x90, 0xb2, 0x8b, 0x0d, 0x5b, 0x6b, 0x89,
0x53, 0x59, 0xd1, 0x76, 0xbd, 0x4b, 0x78, 0x78, 0xaf, 0xf7, 0xeb, 0xb6, 0xeb, 0x67, 0xa4, 0xa2, 0x74, 0xbd, 0x4b, 0x68, 0x74, 0x6f, 0x0e, 0xea, 0xd2, 0xf5, 0x4b, 0x21, 0x12, 0xe9, 0x92, 0x3a,
0xed, 0x12, 0x36, 0x94, 0x8a, 0xe3, 0x39, 0xf1, 0x74, 0xb6, 0xb4, 0x1c, 0x4f, 0x1f, 0xd4, 0xa5, 0x22, 0x14, 0x8f, 0x79, 0x7c, 0xbe, 0x58, 0x3b, 0x1e, 0x33, 0x87, 0x75, 0xa1, 0xcc, 0x98, 0xc7,
0x32, 0xf1, 0x9c, 0xf8, 0x25, 0xa9, 0x29, 0x15, 0x27, 0x1d, 0xe0, 0x27, 0x30, 0xbc, 0xe6, 0x0b, 0x5f, 0x08, 0xb1, 0x08, 0xc5, 0x4b, 0x09, 0xfc, 0x18, 0x46, 0x57, 0x74, 0xe5, 0xb1, 0xf9, 0x95,
0xc7, 0x9b, 0x5e, 0xbb, 0xfe, 0xec, 0x46, 0x07, 0xe1, 0xaa, 0x97, 0x5d, 0xcf, 0xc8, 0xe0, 0x8c, 0x1f, 0x2c, 0xae, 0x4d, 0x90, 0xa6, 0x66, 0xd9, 0xf4, 0x4c, 0x28, 0x9c, 0x09, 0xf9, 0xc5, 0x86,
0xf4, 0x97, 0x6b, 0x26, 0x5c, 0x67, 0x23, 0xfc, 0x18, 0x06, 0xdc, 0xb3, 0x95, 0xeb, 0x50, 0xb8, 0x0d, 0x57, 0x19, 0x85, 0x1f, 0xc1, 0x90, 0x32, 0x57, 0x9b, 0x8e, 0xa4, 0xe9, 0x7e, 0xa5, 0x02,
0xee, 0x57, 0x10, 0xe0, 0xd9, 0xa9, 0x63, 0x9f, 0xab, 0x6f, 0x4a, 0x2d, 0x08, 0x7d, 0x7f, 0xae, 0x98, 0x9b, 0x1a, 0x0e, 0xa8, 0xfe, 0x3e, 0xeb, 0x43, 0xf7, 0xd6, 0xf1, 0x13, 0x6a, 0xbd, 0x0f,
0x6f, 0xd4, 0xa5, 0x76, 0x45, 0x2a, 0x4a, 0x4d, 0xd8, 0x9c, 0xf5, 0xa0, 0x73, 0x6b, 0xb9, 0x09, 0xa3, 0x42, 0xa5, 0xa0, 0x09, 0xfd, 0x1b, 0x1a, 0xc7, 0xce, 0x8a, 0xca, 0x72, 0x1a, 0xda, 0x29,
0x37, 0x3e, 0x84, 0x61, 0x01, 0x56, 0xa8, 0x43, 0x6f, 0xc5, 0xa3, 0xc8, 0x5a, 0x70, 0x81, 0xbd, 0x69, 0x8d, 0x61, 0xb3, 0x58, 0x27, 0xd6, 0x56, 0x66, 0x28, 0x6a, 0xc1, 0xfa, 0x19, 0x90, 0xea,
0x81, 0x99, 0x0e, 0x8d, 0x11, 0x6c, 0x14, 0x41, 0x65, 0x6c, 0x66, 0x8e, 0x04, 0x1c, 0xe3, 0xc7, 0x51, 0x23, 0x81, 0xf6, 0x35, 0xbd, 0xd7, 0x8e, 0xc4, 0x27, 0x4e, 0xf4, 0xb2, 0xb2, 0x00, 0x87,
0xc0, 0xaa, 0xb8, 0x40, 0x06, 0xeb, 0x37, 0xfc, 0x5e, 0x05, 0xa2, 0x4f, 0xdc, 0x55, 0xd3, 0x0a, 0xb6, 0xde, 0x83, 0x95, 0xd9, 0x66, 0x87, 0x8d, 0x63, 0x68, 0xf1, 0x3b, 0x69, 0xba, 0x69, 0xb7,
0xb4, 0x0e, 0x4c, 0xb5, 0x06, 0x23, 0xf3, 0xcd, 0x90, 0x81, 0x23, 0x68, 0xc5, 0x77, 0xc2, 0x75, 0xf8, 0x9d, 0xf5, 0x08, 0xc6, 0xe5, 0x83, 0x7d, 0xa0, 0xe1, 0x66, 0x1b, 0x94, 0x27, 0x83, 0x08,
0xc3, 0x6c, 0xc5, 0x77, 0xc6, 0x23, 0x18, 0x95, 0x51, 0xf0, 0xc0, 0xe2, 0xbb, 0xd9, 0x02, 0xc5, 0x1d, 0xd7, 0xe1, 0x8e, 0xd6, 0x90, 0xdf, 0x82, 0x17, 0x3a, 0x7c, 0xad, 0x97, 0x97, 0xdf, 0xb8,
0x31, 0xd2, 0x5c, 0xf2, 0xa8, 0xa5, 0x89, 0x1c, 0x18, 0x2f, 0x32, 0x2b, 0xb1, 0x23, 0xc5, 0x35, 0x0f, 0xbd, 0x35, 0xf5, 0x56, 0x6b, 0x2e, 0x2b, 0xbd, 0x63, 0x6b, 0x4a, 0xec, 0x35, 0x8c, 0x82,
0x6e, 0xc8, 0x35, 0xee, 0x43, 0x77, 0xc9, 0x9d, 0xc5, 0x32, 0x16, 0x8b, 0x6c, 0x9b, 0x6a, 0x64, 0x5b, 0x2a, 0x0b, 0x7a, 0x60, 0x2b, 0xc2, 0xda, 0x86, 0xad, 0x52, 0xb9, 0x58, 0x2f, 0xb3, 0xcd,
0x6c, 0xc1, 0x66, 0x09, 0x55, 0xc6, 0xab, 0x6c, 0xd9, 0x19, 0x0a, 0xf0, 0x87, 0x00, 0xb7, 0x96, 0x67, 0xc7, 0x8b, 0x3f, 0x01, 0xb8, 0x75, 0x7c, 0xcf, 0x75, 0x78, 0x10, 0xc5, 0xa6, 0xf1, 0xa8,
0xeb, 0xd8, 0x56, 0xec, 0x87, 0x91, 0xae, 0x3d, 0x5a, 0x3f, 0x1a, 0x1e, 0x33, 0x75, 0x12, 0x5f, 0x7d, 0x34, 0x3a, 0x26, 0xfa, 0x54, 0xbe, 0x4c, 0x05, 0x76, 0x41, 0xc7, 0x7a, 0x0d, 0x3b, 0x0f,
0xa5, 0x0a, 0xb3, 0x60, 0x63, 0xbc, 0x86, 0xed, 0x07, 0x80, 0x40, 0x84, 0xf6, 0xd2, 0x8a, 0x96, 0x4e, 0x5a, 0xec, 0x76, 0xed, 0xc4, 0xeb, 0x34, 0x02, 0xf1, 0x8d, 0xef, 0x89, 0xdd, 0x3a, 0x2e,
0x6a, 0x59, 0xe2, 0x1b, 0x3f, 0xa0, 0x75, 0x59, 0x36, 0x0f, 0x55, 0xa9, 0x6f, 0xaa, 0xb0, 0x97, 0x8d, 0x74, 0x0f, 0x6f, 0x69, 0xb7, 0x17, 0x92, 0x69, 0x6b, 0xa1, 0xf5, 0x18, 0xb6, 0x2b, 0xc7,
0x42, 0x68, 0x2a, 0xa5, 0xf1, 0x18, 0xb6, 0x2a, 0x28, 0x29, 0x64, 0xa4, 0x95, 0x32, 0xfa, 0x43, 0x5f, 0x88, 0xd3, 0x28, 0xc6, 0x69, 0x7d, 0xdd, 0x85, 0x81, 0x4d, 0xe3, 0x30, 0x60, 0x31, 0xc5,
0x07, 0xfa, 0x26, 0x8f, 0x02, 0xdf, 0x8b, 0x38, 0xbe, 0x80, 0x01, 0xbf, 0x9b, 0x71, 0x59, 0xf0, 0xe7, 0x30, 0xa4, 0x77, 0x0b, 0xaa, 0x3a, 0xd9, 0xa8, 0x54, 0xa2, 0xd2, 0x39, 0x4f, 0xe5, 0xa2,
0x5a, 0x05, 0xb0, 0xd2, 0xe6, 0x3c, 0xd5, 0x13, 0xd8, 0x33, 0x63, 0x7c, 0xac, 0xc8, 0xaa, 0xca, 0x8a, 0x33, 0x65, 0x7c, 0xac, 0x51, 0xa8, 0x0a, 0x2d, 0xda, 0xa8, 0x08, 0x43, 0x1f, 0xa4, 0x30,
0x40, 0xca, 0xa9, 0xc8, 0x56, 0x4f, 0x53, 0xb6, 0x5a, 0xaf, 0x54, 0xab, 0xb4, 0xad, 0xd0, 0xd5, 0xd4, 0xae, 0xb4, 0xa1, 0xd2, 0xad, 0xe0, 0xd0, 0x63, 0x8d, 0x43, 0x9d, 0x5a, 0xc7, 0x25, 0x20,
0x63, 0x45, 0x57, 0xed, 0xda, 0xc0, 0x25, 0xbe, 0x3a, 0x29, 0xf1, 0x55, 0xa7, 0x76, 0xf9, 0x0d, 0x3a, 0x29, 0x01, 0x51, 0xb7, 0x76, 0xfb, 0x0d, 0x48, 0x74, 0x52, 0x42, 0xa2, 0x5e, 0xad, 0x69,
0x84, 0x75, 0x52, 0x22, 0xac, 0x6e, 0xad, 0x6b, 0x03, 0x63, 0x7d, 0x54, 0x60, 0xac, 0x5e, 0xa5, 0x03, 0x14, 0x7d, 0x58, 0x80, 0xa2, 0x7e, 0xa5, 0x03, 0x95, 0x61, 0x0d, 0x16, 0x3d, 0xcb, 0xb0,
0x50, 0xa5, 0x63, 0x0d, 0x65, 0x3d, 0xcf, 0x28, 0xab, 0x5f, 0x21, 0x39, 0xe5, 0x52, 0xe5, 0xac, 0x68, 0x50, 0x41, 0x2f, 0x6d, 0x52, 0x05, 0xa3, 0x0f, 0x52, 0x30, 0x1a, 0xd6, 0x26, 0xad, 0x82,
0xa7, 0x29, 0x90, 0x07, 0xb5, 0x9b, 0x56, 0x21, 0xad, 0x93, 0x12, 0x69, 0x41, 0x6d, 0x3a, 0x0d, 0x46, 0x27, 0x25, 0x34, 0x82, 0xda, 0x70, 0x1a, 0xe0, 0xe8, 0xe7, 0x65, 0x38, 0x52, 0x98, 0x72,
0xac, 0xf5, 0x93, 0x32, 0x6b, 0x49, 0xea, 0x39, 0xac, 0xf8, 0x36, 0xd2, 0xd6, 0x8f, 0x8a, 0xb4, 0x58, 0xb1, 0x6d, 0xc4, 0xa3, 0x9f, 0x16, 0xf1, 0x68, 0xb3, 0x82, 0x82, 0xba, 0x16, 0xbe, 0x11,
0xb5, 0x51, 0x21, 0x4b, 0x85, 0x85, 0x3a, 0xde, 0x7a, 0x9a, 0xf2, 0xd6, 0x66, 0x6d, 0x7a, 0x4d, 0x90, 0x1e, 0x8b, 0x4e, 0xa8, 0x54, 0x9a, 0xe8, 0x45, 0x1a, 0x45, 0x41, 0xa4, 0xb1, 0x44, 0x11,
0xc4, 0xf5, 0x98, 0xea, 0xa6, 0x82, 0x4b, 0xaa, 0x79, 0x1e, 0x86, 0x7e, 0xa8, 0x38, 0x47, 0x0e, 0xd6, 0x91, 0xe8, 0xf8, 0xbc, 0xbe, 0xbe, 0x01, 0xbc, 0x64, 0xd7, 0x16, 0xaa, 0xcb, 0xfa, 0xbd,
0x8c, 0x23, 0xaa, 0xf9, 0x1c, 0x8d, 0xff, 0x87, 0xe4, 0x44, 0x8d, 0x17, 0xb0, 0x68, 0xfc, 0x56, 0x91, 0xdb, 0x8a, 0x12, 0x2a, 0xa1, 0xc5, 0x50, 0xa3, 0x85, 0x09, 0xfd, 0x5b, 0x1a, 0xc5, 0xa2,
0xcb, 0x7d, 0x09, 0x70, 0x54, 0x99, 0xb6, 0x15, 0x5b, 0xca, 0x51, 0x7c, 0x53, 0xbc, 0x5b, 0x1e, 0x96, 0x14, 0x60, 0xa4, 0x24, 0x3e, 0x81, 0x1d, 0xdf, 0x89, 0xb9, 0x0a, 0x73, 0x5e, 0x82, 0x8f,
0x46, 0x84, 0x3c, 0xc9, 0x6b, 0xe9, 0x10, 0x9f, 0xc0, 0xb6, 0x6b, 0x45, 0xb1, 0xdc, 0x94, 0xa9, 0x6d, 0x21, 0x50, 0xf1, 0x29, 0x1c, 0xf9, 0x31, 0xec, 0x16, 0x74, 0x9d, 0x30, 0x9c, 0xcb, 0xa6,
0x2a, 0xc2, 0x75, 0x51, 0x84, 0x5b, 0xa4, 0x90, 0xbb, 0x21, 0xc4, 0xf8, 0x03, 0xd8, 0x29, 0xd8, 0xee, 0xc8, 0xa6, 0x26, 0x99, 0xf6, 0x69, 0x18, 0x5e, 0x38, 0xf1, 0xda, 0x7a, 0x2f, 0x8f, 0xbf,
0x5a, 0x41, 0x30, 0x15, 0x14, 0xd0, 0x16, 0x14, 0xc0, 0x32, 0xeb, 0xd3, 0x20, 0xb8, 0xb4, 0xa2, 0x84, 0xa4, 0x7e, 0xb0, 0x4a, 0x91, 0xd4, 0x0f, 0x56, 0xd6, 0x6f, 0x72, 0xb5, 0x1c, 0x34, 0x7f,
0xa5, 0xf1, 0x41, 0x9e, 0x7f, 0x89, 0x71, 0x5d, 0x7f, 0x91, 0x32, 0xae, 0xeb, 0x2f, 0x8c, 0x5f, 0x00, 0x9d, 0x45, 0xe0, 0xaa, 0xe8, 0xc7, 0xc7, 0xdb, 0x3a, 0xef, 0x2f, 0x02, 0x97, 0xbe, 0xbd,
0xe5, 0x66, 0x39, 0xb9, 0x7e, 0x07, 0xda, 0x33, 0xdf, 0x96, 0xd9, 0x8f, 0x8e, 0xb7, 0xd4, 0x8e, 0x0f, 0xa9, 0x2d, 0x85, 0x59, 0xa4, 0xad, 0x02, 0x2e, 0x6a, 0xff, 0xed, 0xdc, 0xff, 0xaf, 0x05,
0xbf, 0xf4, 0x6d, 0xfe, 0xf6, 0x3e, 0xe0, 0xa6, 0x50, 0x66, 0x99, 0xb6, 0x24, 0x07, 0x89, 0x4c, 0x80, 0x94, 0xaa, 0xf7, 0xbb, 0xf4, 0xfe, 0x47, 0x23, 0x3f, 0x10, 0x85, 0xd6, 0xdf, 0xca, 0xf9,
0x55, 0xfc, 0xf5, 0x3c, 0xfe, 0x2f, 0x89, 0x6e, 0x4a, 0x58, 0x7f, 0x9f, 0xd1, 0x7f, 0x9e, 0x9f, 0x04, 0xba, 0x1e, 0x73, 0xe9, 0x9d, 0xf4, 0xde, 0xb6, 0x15, 0x91, 0x5e, 0x33, 0x6d, 0xb9, 0x62,
0x87, 0x24, 0xf5, 0x6f, 0x26, 0xb6, 0xbc, 0x0a, 0xde, 0x63, 0xec, 0x5f, 0xd0, 0x6d, 0x55, 0x2c, 0xf9, 0x9a, 0x51, 0x49, 0x56, 0x84, 0x06, 0xf4, 0x60, 0x29, 0x81, 0x61, 0xd3, 0x56, 0x44, 0x01,
0xe7, 0xf7, 0x19, 0x7c, 0x27, 0x3f, 0xd2, 0xac, 0x90, 0x8d, 0x5d, 0xc0, 0x87, 0x15, 0x2a, 0x6f, 0x16, 0x7b, 0x25, 0xf8, 0xd7, 0x9b, 0xee, 0xe7, 0x9b, 0xfe, 0x95, 0xb8, 0x82, 0x8a, 0xdd, 0xf9,
0xe5, 0x72, 0xed, 0xe1, 0xf7, 0xa0, 0x63, 0x3b, 0xf3, 0x79, 0xa4, 0xb7, 0x1b, 0x6e, 0x27, 0xa9, 0x5d, 0x66, 0x64, 0x37, 0x3f, 0xcf, 0xac, 0x2f, 0xad, 0x09, 0xe0, 0xc3, 0x86, 0x53, 0x57, 0x6d,
0x36, 0x7e, 0xd7, 0x82, 0xae, 0xbc, 0x5b, 0xf0, 0x90, 0x78, 0xce, 0x72, 0xbc, 0xa9, 0x63, 0xa7, 0xb9, 0x95, 0xf0, 0x87, 0xd0, 0x75, 0xbd, 0xe5, 0x32, 0x36, 0x3b, 0x0d, 0x97, 0x8d, 0x12, 0x5b,
0x15, 0x23, 0xc6, 0x13, 0xbb, 0xe9, 0xb6, 0xa4, 0x54, 0x62, 0x67, 0xc5, 0x15, 0xd8, 0xc5, 0x37, 0x7f, 0x68, 0x41, 0x4f, 0x5d, 0x15, 0x78, 0x28, 0x60, 0xcb, 0xf1, 0xd8, 0xdc, 0x73, 0xd3, 0x76,
0x1e, 0x40, 0xcf, 0x4b, 0x56, 0xd3, 0xf8, 0x2e, 0x12, 0xa8, 0x6e, 0x9b, 0x5d, 0x2f, 0x59, 0xbd, 0x91, 0xf4, 0xcc, 0x2d, 0xe4, 0xa4, 0x55, 0xca, 0x09, 0x42, 0x87, 0x7b, 0x37, 0x54, 0x57, 0xba,
0xbd, 0x8b, 0xf0, 0x18, 0x36, 0x0b, 0xd0, 0x77, 0x6c, 0x45, 0xe0, 0x23, 0xb5, 0x34, 0xb1, 0xee, 0xfc, 0xc6, 0x03, 0xe8, 0xb3, 0xe4, 0x66, 0xce, 0xef, 0x62, 0x99, 0xed, 0x8e, 0xdd, 0x63, 0xc9,
0xc9, 0x2b, 0x73, 0x98, 0x15, 0xc1, 0xc4, 0xc6, 0x23, 0x10, 0x35, 0x31, 0x95, 0x24, 0x29, 0x6b, 0xcd, 0xdb, 0xbb, 0x18, 0x8f, 0x61, 0xab, 0x50, 0xf7, 0x9e, 0xab, 0xf1, 0x78, 0xac, 0xb7, 0x26,
0xa5, 0x2b, 0xf6, 0x6d, 0x44, 0x72, 0xc5, 0xa2, 0x74, 0x71, 0x7e, 0x0b, 0x06, 0xb4, 0x93, 0xd2, 0xf7, 0x3d, 0x7b, 0x69, 0x8f, 0xb2, 0x0e, 0x98, 0xb9, 0x78, 0x04, 0xb2, 0x21, 0xe6, 0x0a, 0xf3,
0xa4, 0x27, 0x4c, 0xfa, 0x24, 0x10, 0xca, 0x0f, 0x61, 0x2b, 0xbf, 0x8c, 0xa5, 0x49, 0x5f, 0x46, 0x54, 0xa3, 0xf4, 0x64, 0xde, 0xc6, 0x82, 0xaf, 0x41, 0x51, 0xdc, 0x83, 0xdf, 0x83, 0xa1, 0xc8,
0xc9, 0xc5, 0xc2, 0xf0, 0x10, 0xfa, 0x59, 0x4d, 0x0e, 0x84, 0x45, 0xcf, 0x52, 0xa5, 0x38, 0x81, 0xa4, 0x52, 0xe9, 0x4b, 0x95, 0x81, 0x60, 0x48, 0xe1, 0xfb, 0xb0, 0x9d, 0xdf, 0xad, 0x4a, 0x65,
0x9e, 0x5a, 0x62, 0xed, 0xc5, 0xfd, 0x04, 0x3a, 0x81, 0x15, 0xc6, 0x91, 0xba, 0x20, 0x53, 0x82, 0xa0, 0xbc, 0xe4, 0x6c, 0xa9, 0x78, 0x08, 0x83, 0xac, 0x21, 0x87, 0x52, 0xa3, 0xef, 0xe8, 0x3e,
0xbb, 0xb2, 0x42, 0xea, 0x95, 0xd4, 0xf5, 0x2d, 0x4d, 0x8c, 0x13, 0xd8, 0x2c, 0xc9, 0x89, 0xd1, 0x9c, 0x41, 0x5f, 0x6f, 0xb1, 0xf6, 0x1e, 0x7e, 0x02, 0xdd, 0xd0, 0x89, 0x78, 0xac, 0xef, 0xbb,
0x62, 0x3f, 0xb6, 0x5c, 0x75, 0x75, 0xcb, 0x41, 0x36, 0x4d, 0x2b, 0x9f, 0xc6, 0x38, 0x81, 0x41, 0x14, 0x8e, 0x2f, 0x9d, 0x48, 0x0c, 0x40, 0xfa, 0x36, 0x56, 0x2a, 0xd6, 0x09, 0x6c, 0x95, 0xf8,
0x76, 0x86, 0x74, 0x2c, 0x41, 0x72, 0xfd, 0x59, 0xd6, 0xd9, 0xa8, 0x11, 0x85, 0x0b, 0xfc, 0xaf, 0xa2, 0x12, 0x79, 0xc0, 0x1d, 0x5f, 0xdf, 0xc4, 0x8a, 0xc8, 0x96, 0x69, 0xe5, 0xcb, 0x58, 0x27,
0x55, 0x0f, 0xd1, 0x36, 0xe5, 0xe0, 0xc9, 0x9f, 0x34, 0x18, 0x7e, 0x2e, 0x29, 0x90, 0xd0, 0x88, 0x30, 0xcc, 0xce, 0x50, 0x1c, 0x4b, 0x98, 0x5c, 0x7d, 0xaa, 0x47, 0xaa, 0x4d, 0x5b, 0x53, 0xb2,
0x5b, 0x30, 0x7c, 0x9d, 0xb8, 0xae, 0x12, 0xb1, 0x35, 0xec, 0x43, 0x9b, 0x98, 0x93, 0x69, 0x38, 0xb0, 0x83, 0xaf, 0xf4, 0x48, 0xd0, 0xb1, 0x15, 0xf1, 0xe4, 0xcf, 0x06, 0x8c, 0x3e, 0x53, 0xf8,
0x80, 0x8e, 0x60, 0x46, 0xd6, 0x22, 0x21, 0x51, 0x22, 0x5b, 0xc7, 0x4d, 0x18, 0x64, 0x1c, 0xc4, 0x27, 0xaa, 0x11, 0xb7, 0x61, 0xf4, 0x3a, 0xf1, 0x7d, 0xcd, 0x22, 0x1b, 0x38, 0x80, 0x8e, 0x80,
0xda, 0x34, 0xcc, 0x28, 0x99, 0x75, 0x68, 0x98, 0x51, 0x0f, 0xdb, 0xc6, 0x21, 0xf4, 0x14, 0x53, 0x4d, 0x62, 0xe0, 0x10, 0xba, 0x12, 0x16, 0x49, 0x4b, 0x30, 0x05, 0x1e, 0x92, 0x36, 0x6e, 0xc1,
0x30, 0x44, 0x80, 0xae, 0x3c, 0x29, 0xb6, 0x43, 0xa1, 0x45, 0x91, 0xb3, 0x5d, 0x72, 0xc9, 0xa0, 0x30, 0x03, 0x20, 0xd2, 0x11, 0x64, 0x86, 0xc7, 0xa4, 0x2b, 0xc8, 0x0c, 0x77, 0xc8, 0x0e, 0x8e,
0xcd, 0xf6, 0x70, 0x04, 0x90, 0x83, 0x9a, 0xed, 0xe3, 0x06, 0xf4, 0x53, 0x38, 0xb3, 0x03, 0xf2, 0xa0, 0xaf, 0x61, 0x82, 0x20, 0x02, 0xf4, 0xd4, 0x49, 0x91, 0x5d, 0xe1, 0x5a, 0x36, 0x38, 0x99,
0x13, 0x05, 0xcc, 0xf4, 0x27, 0xbf, 0xef, 0x40, 0x3f, 0xad, 0x29, 0xec, 0x42, 0xeb, 0xcd, 0x67, 0x08, 0x93, 0xac, 0xb4, 0xc9, 0x1e, 0x8e, 0x01, 0xf2, 0xa2, 0x26, 0xfb, 0xb8, 0x09, 0x83, 0xb4,
0x6c, 0x0d, 0xb7, 0x61, 0x73, 0xe2, 0xc5, 0x3c, 0xf4, 0x2c, 0xf7, 0x9c, 0xee, 0x03, 0xa6, 0x91, 0x9c, 0xc9, 0xc1, 0x93, 0x3f, 0x75, 0x61, 0x90, 0x36, 0x12, 0xf6, 0xa0, 0xf5, 0xe6, 0x53, 0xb2,
0xe8, 0xdc, 0x9b, 0xf9, 0xb6, 0xe3, 0x2d, 0xa4, 0xa8, 0x45, 0x31, 0xcf, 0x2c, 0xfb, 0xb5, 0xef, 0x81, 0x3b, 0xb0, 0x35, 0x63, 0x9c, 0x46, 0xcc, 0xf1, 0xcf, 0xc5, 0x0d, 0x40, 0x0c, 0xc1, 0x3a,
0xcd, 0x38, 0x5b, 0x47, 0x06, 0x1b, 0x5f, 0x7a, 0x56, 0x12, 0x2f, 0xfd, 0xd0, 0xf9, 0x0d, 0xb7, 0x67, 0x8b, 0xc0, 0xf5, 0xd8, 0x4a, 0xb1, 0x5a, 0xc2, 0xd1, 0x99, 0xe3, 0xbe, 0x0e, 0xd8, 0x82,
0x59, 0x1b, 0xf7, 0x60, 0x7b, 0xe2, 0x45, 0xc9, 0x7c, 0xee, 0xcc, 0x1c, 0xee, 0xc5, 0x9f, 0x26, 0x92, 0x36, 0x12, 0xd8, 0xfc, 0x82, 0x39, 0x09, 0x5f, 0x07, 0x91, 0xf7, 0x3b, 0xea, 0x92, 0x0e,
0x9e, 0x1d, 0xb1, 0x0e, 0x22, 0x8c, 0xbe, 0xf4, 0x6e, 0x3c, 0xff, 0x6b, 0x4f, 0x75, 0x5d, 0xac, 0xee, 0xc1, 0xce, 0x8c, 0xc5, 0xc9, 0x72, 0xe9, 0x2d, 0x3c, 0xca, 0xf8, 0x27, 0x09, 0x73, 0x63,
0x8b, 0x3a, 0xec, 0x9e, 0x59, 0x11, 0x7f, 0x95, 0x04, 0xae, 0x33, 0xb3, 0x62, 0x7e, 0x6a, 0xdb, 0xd2, 0x45, 0x84, 0xf1, 0x17, 0xec, 0x9a, 0x05, 0x5f, 0x31, 0x3d, 0x39, 0x91, 0x1e, 0x9a, 0x30,
0x21, 0x8f, 0x22, 0xc6, 0x29, 0x08, 0x69, 0xca, 0x73, 0xcf, 0x53, 0x87, 0x52, 0x7c, 0xce, 0x23, 0x39, 0x73, 0x62, 0xfa, 0x32, 0x09, 0x7d, 0x6f, 0xe1, 0x70, 0x7a, 0xea, 0xba, 0x11, 0x8d, 0x63,
0xb6, 0xc0, 0x43, 0xd8, 0x7b, 0xa0, 0x11, 0x33, 0x2f, 0xf1, 0xdb, 0xa0, 0x57, 0x55, 0x17, 0x56, 0x42, 0x85, 0x13, 0x21, 0x29, 0xaf, 0xbd, 0x4c, 0x0d, 0x4a, 0xfe, 0x29, 0x8d, 0xc9, 0x0a, 0x0f,
0x74, 0x15, 0x3a, 0x33, 0xce, 0x1c, 0xdc, 0x05, 0x26, 0xb5, 0x02, 0xc6, 0x13, 0x2f, 0x48, 0x62, 0x61, 0xef, 0x81, 0x44, 0xae, 0xbc, 0xc6, 0xef, 0x83, 0x59, 0x15, 0xbd, 0x72, 0xe2, 0xcb, 0xc8,
0xf6, 0xeb, 0x74, 0x7e, 0x25, 0x7d, 0x93, 0xc4, 0x24, 0xbe, 0xa9, 0x88, 0xaf, 0x04, 0x54, 0x98, 0x5b, 0x50, 0xe2, 0xe1, 0x04, 0x88, 0x92, 0xca, 0xda, 0x9d, 0xb1, 0x30, 0xe1, 0xe4, 0xb7, 0xe9,
0x8b, 0x07, 0xb0, 0x53, 0x10, 0x7f, 0x41, 0xf9, 0xd1, 0xee, 0xac, 0xf2, 0xf5, 0x4a, 0x85, 0xb3, 0xfa, 0x9a, 0xfb, 0x26, 0xe1, 0x82, 0x7d, 0x5d, 0x61, 0x5f, 0xca, 0xfa, 0x20, 0x3e, 0x1e, 0xc0,
0xf0, 0xac, 0x38, 0x09, 0x39, 0xf3, 0x70, 0x1f, 0x90, 0x34, 0x6a, 0x4b, 0xd2, 0xc4, 0xfd, 0x74, 0x6e, 0x81, 0xfd, 0xb9, 0x88, 0x4f, 0x64, 0xe7, 0x26, 0xdf, 0xaf, 0x12, 0x78, 0x2b, 0xe6, 0xf0,
0x06, 0x25, 0x57, 0x33, 0x04, 0x55, 0xb1, 0x9b, 0x2c, 0x1c, 0x8f, 0xbd, 0xc3, 0x3d, 0x60, 0x17, 0x24, 0xa2, 0x84, 0xe1, 0x3e, 0xa0, 0x90, 0xe8, 0x94, 0xa4, 0x81, 0x07, 0xe9, 0x0a, 0x9a, 0xaf,
0xfe, 0xad, 0x92, 0x9e, 0x7b, 0xb1, 0x13, 0xdf, 0xb3, 0x3f, 0x6b, 0xb8, 0x0b, 0x5b, 0xb9, 0xf8, 0x57, 0x08, 0xab, 0x6c, 0x3f, 0x59, 0x79, 0x8c, 0xbc, 0xc3, 0x3d, 0x20, 0xaf, 0x82, 0x5b, 0xcd,
0x22, 0xf4, 0x93, 0x80, 0xfd, 0x45, 0xc3, 0x03, 0xc0, 0x5c, 0x7a, 0x15, 0xfa, 0x81, 0x1f, 0x59, 0x3d, 0x67, 0xdc, 0xe3, 0xf7, 0xe4, 0xaf, 0x06, 0x4e, 0x60, 0x3b, 0x67, 0xbf, 0x8a, 0x82, 0x24,
0x2e, 0xfb, 0xab, 0x86, 0xfb, 0xb0, 0x7d, 0xe1, 0xdf, 0x66, 0xa7, 0x20, 0x1d, 0xfe, 0x96, 0x3a, 0x24, 0x7f, 0x33, 0xf0, 0x00, 0x30, 0xe7, 0x5e, 0x46, 0x41, 0x18, 0xc4, 0x8e, 0x4f, 0xfe, 0x6e,
0x64, 0xf2, 0xcf, 0xf9, 0xea, 0x9a, 0x87, 0xec, 0xef, 0x1a, 0x1e, 0xc2, 0x6e, 0x51, 0x91, 0xc5, 0xe0, 0x3e, 0xec, 0xbc, 0x0a, 0x6e, 0xb3, 0x53, 0x50, 0x06, 0xff, 0x48, 0x0d, 0x32, 0xfe, 0x67,
0xfa, 0x87, 0xa6, 0x56, 0x94, 0xa9, 0xbe, 0xf2, 0x63, 0xce, 0xfe, 0x99, 0x8a, 0xd5, 0x3e, 0xa8, 0xf4, 0xe6, 0x8a, 0x46, 0xe4, 0x9f, 0x06, 0x1e, 0xc2, 0xa4, 0x28, 0xc8, 0x7c, 0xfd, 0xcb, 0xd0,
0x40, 0xff, 0xd2, 0x70, 0x07, 0x46, 0xb9, 0x58, 0xd8, 0xfe, 0x5b, 0xc3, 0x31, 0xec, 0x95, 0x84, 0x3b, 0xca, 0x44, 0x5f, 0x06, 0x9c, 0x92, 0x7f, 0xa7, 0x6c, 0x9d, 0x07, 0xed, 0xe8, 0x3f, 0x06,
0x8e, 0xb7, 0xb8, 0xa2, 0xea, 0x63, 0xff, 0xd1, 0x8e, 0xff, 0xd8, 0x81, 0xad, 0xd3, 0xb3, 0x97, 0xee, 0xc2, 0x38, 0x67, 0x4b, 0xdd, 0xff, 0x1a, 0x38, 0x85, 0xbd, 0x12, 0xd3, 0x63, 0xab, 0x4b,
0x93, 0xd3, 0x40, 0x4e, 0x40, 0x77, 0xf9, 0x73, 0x59, 0x73, 0x58, 0xf3, 0xef, 0x7f, 0x5c, 0xd7, 0xd1, 0x72, 0xe4, 0x7f, 0xc6, 0xf1, 0xd7, 0x5d, 0xd8, 0x3e, 0x3d, 0x7b, 0x31, 0x3b, 0x0d, 0xd5,
0x64, 0xe3, 0xb1, 0x2a, 0x4d, 0xac, 0x7b, 0x04, 0x18, 0xd7, 0xf6, 0xda, 0x34, 0x89, 0x6c, 0x6b, 0x02, 0xe2, 0xf6, 0x7e, 0xa6, 0x1a, 0x0d, 0x6b, 0x9e, 0xe6, 0xd3, 0xba, 0x41, 0x19, 0x8f, 0x75,
0x1e, 0xbe, 0x05, 0x8c, 0xeb, 0x1a, 0x6e, 0xfc, 0x69, 0xa1, 0xd4, 0xb1, 0xe9, 0x45, 0x60, 0xdc, 0x3f, 0x62, 0xdd, 0x0b, 0x7d, 0x5a, 0x3b, 0x2f, 0x8b, 0x45, 0xd4, 0x20, 0xf3, 0xf0, 0xa1, 0x3e,
0xd8, 0x7a, 0x93, 0x7f, 0xde, 0x87, 0x34, 0xbd, 0x0b, 0x8c, 0x1b, 0xfb, 0x6f, 0x7c, 0x91, 0xb1, 0xad, 0x1b, 0x9a, 0xf1, 0x17, 0x85, 0xfe, 0xc6, 0xa6, 0xe7, 0xfa, 0xb4, 0x71, 0x7c, 0x16, 0xf6,
0x07, 0xd6, 0xbf, 0x0e, 0x8c, 0x1b, 0x5a, 0x70, 0xda, 0x1e, 0xd9, 0x43, 0xd4, 0xfd, 0xe9, 0x1f, 0xf9, 0xe4, 0xd1, 0xf4, 0x68, 0x9f, 0x36, 0xce, 0xd0, 0xf8, 0x3c, 0x83, 0x0c, 0xac, 0x7f, 0xba,
0xd7, 0x76, 0xd5, 0xe4, 0x23, 0x7b, 0x83, 0xba, 0x7f, 0xd3, 0xe3, 0xda, 0x56, 0x15, 0x3f, 0x4e, 0x4f, 0x1b, 0xc6, 0x68, 0x91, 0x1e, 0x35, 0x34, 0xd4, 0xbd, 0xc8, 0xa7, 0xb5, 0x93, 0x31, 0x7e,
0x29, 0x0d, 0x6b, 0x1f, 0x23, 0xc6, 0xf5, 0xfd, 0x3e, 0x6d, 0x4c, 0xfe, 0x37, 0xb2, 0xe9, 0x95, 0x94, 0x62, 0x12, 0xd6, 0xbe, 0xfa, 0xa7, 0xf5, 0xf3, 0xb7, 0x08, 0x32, 0x7f, 0xd6, 0x35, 0x3d,
0x61, 0xdc, 0xd8, 0xc9, 0xe3, 0x69, 0x91, 0x23, 0xb1, 0xf1, 0xad, 0x61, 0xdc, 0xdc, 0xcf, 0xe3, 0xe7, 0xa7, 0x8d, 0x93, 0x35, 0x9e, 0x16, 0x41, 0x0e, 0x1b, 0x1f, 0xf5, 0xd3, 0xe6, 0xf9, 0x1a,
0x27, 0x39, 0xad, 0x62, 0xc3, 0x8b, 0xc3, 0xb8, 0xa9, 0xa5, 0xbf, 0xee, 0x8a, 0xc7, 0xac, 0x8f, 0x3f, 0xce, 0x71, 0x11, 0x1b, 0x9e, 0xf6, 0xd3, 0xa6, 0x11, 0xfb, 0xaa, 0x27, 0xff, 0x35, 0xfa,
0xfe, 0x17, 0x00, 0x00, 0xff, 0xff, 0x1e, 0x2e, 0xe2, 0x17, 0xe1, 0x12, 0x00, 0x00, 0xf0, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x73, 0x34, 0x90, 0x2d, 0x4a, 0x12, 0x00, 0x00,
} }

View File

@ -113,7 +113,7 @@ message RequestCheckTx{
} }
message RequestQuery{ message RequestQuery{
bytes query = 1; bytes data = 1;
string path = 2; string path = 2;
uint64 height = 3; uint64 height = 3;
bool prove = 4; bool prove = 4;
@ -191,10 +191,13 @@ message ResponseCheckTx{
} }
message ResponseQuery{ message ResponseQuery{
bytes data = 2; CodeType code = 1;
string log = 3; int64 index = 2;
uint64 height = 4; bytes key = 3;
bytes value = 4;
bytes proof = 5; bytes proof = 5;
uint64 height = 6;
string log = 7;
} }
message ResponseCommit{ message ResponseCommit{