From 28e2b75c33f85276eb5ca153fab490353a123364 Mon Sep 17 00:00:00 2001 From: Aryan Tikarya Date: Fri, 22 Mar 2024 16:05:08 +0530 Subject: [PATCH] feat: dojima chain side handler changes --- CONTRIBUTING.md | 2 +- abci/client/client.go | 5 + abci/client/grpc_client.go | 32 + abci/client/local_client.go | 42 + abci/client/socket_client.go | 24 + abci/example/kvstore/kvstore.go | 2 +- abci/example/kvstore/persistent_kvstore.go | 16 +- abci/types/application.go | 22 + abci/types/messages.go | 32 + abci/types/types.pb.go | 2501 +++++++++++++++++--- blockchain/v0/reactor.go | 12 +- blockchain/v1/peer.go | 2 +- blockchain/v1/reactor.go | 10 +- cmd/cometbft/commands/debug/kill.go | 2 +- consensus/replay.go | 10 +- consensus/state.go | 19 + consensus/ticker.go | 2 +- consensus/types/peer_round_state.go | 2 +- consensus/types/round_state.go | 4 +- crypto/encoding/amino/amino.go | 71 + go.mod | 1 + go.sum | 8 +- libs/autofile/group.go | 2 +- libs/events/events_test.go | 2 +- p2p/base_reactor.go | 2 +- p2p/node_info_test.go | 2 +- p2p/switch.go | 12 +- privval/file.go | 10 + privval/retry_signer_client.go | 6 + privval/signer_client.go | 5 + privval/socket_listeners.go | 6 +- privval/socket_listeners_test.go | 4 +- proto/tendermint/abci/types.proto | 64 +- proto/tendermint/rpc/grpc/types.pb.go | 6 +- proto/tendermint/types/canonical.pb.go | 247 +- proto/tendermint/types/canonical.proto | 3 + proto/tendermint/types/types.pb.go | 721 +++++- proto/tendermint/types/types.proto | 13 + proxy/app_conn.go | 21 +- rpc/core/mempool.go | 2 +- rpc/grpc/types.pb.go | 63 +- rpc/jsonrpc/server/http_server.go | 2 +- rpc/jsonrpc/server/rpc_func.go | 2 +- scripts/protochermes.sh | 28 + state/execution.go | 190 +- state/services.go | 8 +- state/state.go | 6 + state/txindex/kv/kv.go | 2 +- state/validation.go | 2 +- test/e2e/app/snapshots.go | 2 +- test/e2e/runner/main.go | 2 +- test/maverick/consensus/ticker.go | 2 +- test/maverick/node/privval.go | 5 + types/block.go | 90 +- types/canonical.go | 2 + types/codec.go | 22 + types/evidence.go | 48 +- types/priv_validator.go | 15 +- types/proposal.go | 10 + types/protobuf.go | 7 +- types/side_tx.go | 58 + types/vote.go | 47 +- types/vote_set.go | 4 + 63 files changed, 3976 insertions(+), 590 deletions(-) create mode 100644 crypto/encoding/amino/amino.go create mode 100644 scripts/protochermes.sh create mode 100644 types/codec.go create mode 100644 types/side_tx.go diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 812e329e679..0e0545520b2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -105,7 +105,7 @@ specify exactly the dependency you want to update. ## Protobuf We use [Protocol Buffers](https://developers.google.com/protocol-buffers) along -with [`gogoproto`](https://github.com/cosmos/gogoproto) to generate code for use +with [`gogoproto`](https://google.golang.org/protobuf) to generate code for use across CometBFT. To generate proto stubs, lint, and check protos for breaking changes, you will diff --git a/abci/client/client.go b/abci/client/client.go index ff1f143cd86..72c02673657 100644 --- a/abci/client/client.go +++ b/abci/client/client.go @@ -56,6 +56,11 @@ type Client interface { OfferSnapshotSync(types.RequestOfferSnapshot) (*types.ResponseOfferSnapshot, error) LoadSnapshotChunkSync(types.RequestLoadSnapshotChunk) (*types.ResponseLoadSnapshotChunk, error) ApplySnapshotChunkSync(types.RequestApplySnapshotChunk) (*types.ResponseApplySnapshotChunk, error) + + BeginSideBlockAsync(types.RequestBeginSideBlock) *ReqRes + BeginSideBlockSync(types.RequestBeginSideBlock) (*types.ResponseBeginSideBlock, error) + DeliverSideTxAsync(types.RequestDeliverSideTx) *ReqRes + DeliverSideTxSync(types.RequestDeliverSideTx) (*types.ResponseDeliverSideTx, error) } //---------------------------------------- diff --git a/abci/client/grpc_client.go b/abci/client/grpc_client.go index 31a6a7f6a13..c56b3aa875d 100644 --- a/abci/client/grpc_client.go +++ b/abci/client/grpc_client.go @@ -417,3 +417,35 @@ func (cli *grpcClient) ApplySnapshotChunkSync( reqres := cli.ApplySnapshotChunkAsync(params) return cli.finishSyncCall(reqres).GetApplySnapshotChunk(), cli.Error() } + +// +// Side channel +// + +func (cli *grpcClient) DeliverSideTxAsync(params types.RequestDeliverSideTx) *ReqRes { + req := types.ToRequestDeliverSideTx(params) + res, err := cli.client.DeliverSideTx(context.Background(), req.GetDeliverSideTx(), grpc.WaitForReady(true)) + if err != nil { + cli.StopForError(err) + } + return cli.finishAsyncCall(req, &types.Response{Value: &types.Response_DeliverSideTx{DeliverSideTx: res}}) +} + +func (cli *grpcClient) BeginSideBlockAsync(params types.RequestBeginSideBlock) *ReqRes { + req := types.ToRequestBeginSideBlock(params) + res, err := cli.client.BeginSideBlock(context.Background(), req.GetBeginSideBlock(), grpc.WaitForReady(true)) + if err != nil { + cli.StopForError(err) + } + return cli.finishAsyncCall(req, &types.Response{Value: &types.Response_BeginSideBlock{BeginSideBlock: res}}) +} + +func (cli *grpcClient) BeginSideBlockSync(params types.RequestBeginSideBlock) (*types.ResponseBeginSideBlock, error) { + reqres := cli.BeginSideBlockAsync(params) + return reqres.Response.GetBeginSideBlock(), cli.Error() +} + +func (cli *grpcClient) DeliverSideTxSync(params types.RequestDeliverSideTx) (*types.ResponseDeliverSideTx, error) { + reqres := cli.DeliverSideTxAsync(params) + return reqres.Response.GetDeliverSideTx(), cli.Error() +} diff --git a/abci/client/local_client.go b/abci/client/local_client.go index b874e1b62f7..5ec90899b8e 100644 --- a/abci/client/local_client.go +++ b/abci/client/local_client.go @@ -323,6 +323,48 @@ func (app *localClient) ApplySnapshotChunkSync( return &res, nil } +// +// Side channel +// + +func (app *localClient) DeliverSideTxAsync(params types.RequestDeliverSideTx) *ReqRes { + app.mtx.Lock() + defer app.mtx.Unlock() + + res := app.Application.DeliverSideTx(params) + return app.callback( + types.ToRequestDeliverSideTx(params), + types.ToResponseDeliverSideTx(res), + ) +} + +func (app *localClient) BeginSideBlockAsync(req types.RequestBeginSideBlock) *ReqRes { + app.mtx.Lock() + defer app.mtx.Unlock() + + res := app.Application.BeginSideBlock(req) + return app.callback( + types.ToRequestBeginSideBlock(req), + types.ToResponseBeginSideBlock(res), + ) +} + +func (app *localClient) DeliverSideTxSync(req types.RequestDeliverSideTx) (*types.ResponseDeliverSideTx, error) { + app.mtx.Lock() + defer app.mtx.Unlock() + + res := app.Application.DeliverSideTx(req) + return &res, nil +} + +func (app *localClient) BeginSideBlockSync(req types.RequestBeginSideBlock) (*types.ResponseBeginSideBlock, error) { + app.mtx.Lock() + defer app.mtx.Unlock() + + res := app.Application.BeginSideBlock(req) + return &res, nil +} + //------------------------------------------------------- func (app *localClient) callback(req *types.Request, res *types.Response) *ReqRes { diff --git a/abci/client/socket_client.go b/abci/client/socket_client.go index 6cd6f573244..ba0de36f272 100644 --- a/abci/client/socket_client.go +++ b/abci/client/socket_client.go @@ -417,6 +417,30 @@ func (cli *socketClient) ApplySnapshotChunkSync( return reqres.Response.GetApplySnapshotChunk(), cli.Error() } +// +// Side channel +// + +func (cli *socketClient) BeginSideBlockAsync(req types.RequestBeginSideBlock) *ReqRes { + return cli.queueRequest(types.ToRequestBeginSideBlock(req)) +} + +func (cli *socketClient) BeginSideBlockSync(req types.RequestBeginSideBlock) (*types.ResponseBeginSideBlock, error) { + reqres := cli.queueRequest(types.ToRequestBeginSideBlock(req)) + cli.FlushSync() + return reqres.Response.GetBeginSideBlock(), cli.Error() +} + +func (cli *socketClient) DeliverSideTxAsync(req types.RequestDeliverSideTx) *ReqRes { + return cli.queueRequest(types.ToRequestDeliverSideTx(req)) +} + +func (cli *socketClient) DeliverSideTxSync(req types.RequestDeliverSideTx) (*types.ResponseDeliverSideTx, error) { + reqres := cli.queueRequest(types.ToRequestDeliverSideTx(req)) + cli.FlushSync() + return reqres.Response.GetDeliverSideTx(), cli.Error() +} + //---------------------------------------- func (cli *socketClient) queueRequest(req *types.Request) *ReqRes { diff --git a/abci/example/kvstore/kvstore.go b/abci/example/kvstore/kvstore.go index a07f9f6eff4..cc9f9566003 100644 --- a/abci/example/kvstore/kvstore.go +++ b/abci/example/kvstore/kvstore.go @@ -59,7 +59,7 @@ func prefixKey(key []byte) []byte { return append(kvPairPrefixKey, key...) } -//--------------------------------------------------- +// --------------------------------------------------- var _ types.Application = (*Application)(nil) diff --git a/abci/example/kvstore/persistent_kvstore.go b/abci/example/kvstore/persistent_kvstore.go index 7e2243358d9..9d27310037a 100644 --- a/abci/example/kvstore/persistent_kvstore.go +++ b/abci/example/kvstore/persistent_kvstore.go @@ -20,7 +20,7 @@ const ( ValidatorSetChangePrefix string = "val:" ) -//----------------------------------------- +// ----------------------------------------- var _ types.Application = (*PersistentKVStoreApplication)(nil) @@ -173,7 +173,19 @@ func (app *PersistentKVStoreApplication) ApplySnapshotChunk( return types.ResponseApplySnapshotChunk{Result: types.ResponseApplySnapshotChunk_ABORT} } -//--------------------------------------------- +// +// Side channel functions +// + +func (app *PersistentKVStoreApplication) BeginSideBlock(req types.RequestBeginSideBlock) types.ResponseBeginSideBlock { + return app.app.BeginSideBlock(req) +} + +func (app *PersistentKVStoreApplication) DeliverSideTx(req types.RequestDeliverSideTx) types.ResponseDeliverSideTx { + return app.app.DeliverSideTx(req) +} + +// --------------------------------------------- // update validators func (app *PersistentKVStoreApplication) Validators() (validators []types.ValidatorUpdate) { diff --git a/abci/types/application.go b/abci/types/application.go index a3e4e3f712b..4648d06b86a 100644 --- a/abci/types/application.go +++ b/abci/types/application.go @@ -29,6 +29,10 @@ type Application interface { OfferSnapshot(RequestOfferSnapshot) ResponseOfferSnapshot // Offer a snapshot to the application LoadSnapshotChunk(RequestLoadSnapshotChunk) ResponseLoadSnapshotChunk // Load a snapshot chunk ApplySnapshotChunk(RequestApplySnapshotChunk) ResponseApplySnapshotChunk // Apply a shapshot chunk + + // Consensus side connection + BeginSideBlock(RequestBeginSideBlock) ResponseBeginSideBlock // Signals the beginning of a block with side txs + DeliverSideTx(RequestDeliverSideTx) ResponseDeliverSideTx // Deliver a tx for full state-less processing } //------------------------------------------------------- @@ -95,6 +99,14 @@ func (BaseApplication) ApplySnapshotChunk(req RequestApplySnapshotChunk) Respons return ResponseApplySnapshotChunk{} } +func (BaseApplication) BeginSideBlock(req RequestBeginSideBlock) ResponseBeginSideBlock { + return ResponseBeginSideBlock{} +} + +func (BaseApplication) DeliverSideTx(req RequestDeliverSideTx) ResponseDeliverSideTx { + return ResponseDeliverSideTx{} +} + //------------------------------------------------------- // GRPCApplication is a GRPC wrapper for Application @@ -182,3 +194,13 @@ func (app *GRPCApplication) ApplySnapshotChunk( res := app.app.ApplySnapshotChunk(*req) return &res, nil } + +func (app *GRPCApplication) BeginSideBlock(ctx context.Context, req *RequestBeginSideBlock) (*ResponseBeginSideBlock, error) { + res := app.app.BeginSideBlock(*req) + return &res, nil +} + +func (app *GRPCApplication) DeliverSideTx(ctx context.Context, req *RequestDeliverSideTx) (*ResponseDeliverSideTx, error) { + res := app.app.DeliverSideTx(*req) + return &res, nil +} diff --git a/abci/types/messages.go b/abci/types/messages.go index 531f75fed76..cd12027d2f0 100644 --- a/abci/types/messages.go +++ b/abci/types/messages.go @@ -159,6 +159,22 @@ func ToRequestApplySnapshotChunk(req RequestApplySnapshotChunk) *Request { } } +// +// side channel +// + +func ToRequestBeginSideBlock(req RequestBeginSideBlock) *Request { + return &Request{ + Value: &Request_BeginSideBlock{&req}, + } +} + +func ToRequestDeliverSideTx(req RequestDeliverSideTx) *Request { + return &Request{ + Value: &Request_DeliverSideTx{&req}, + } +} + //---------------------------------------- func ToResponseException(errStr string) *Response { @@ -256,3 +272,19 @@ func ToResponseApplySnapshotChunk(res ResponseApplySnapshotChunk) *Response { Value: &Response_ApplySnapshotChunk{&res}, } } + +// +// side channel +// + +func ToResponseBeginSideBlock(req ResponseBeginSideBlock) *Response { + return &Response{ + Value: &Response_BeginSideBlock{&req}, + } +} + +func ToResponseDeliverSideTx(req ResponseDeliverSideTx) *Response { + return &Response{ + Value: &Response_DeliverSideTx{&req}, + } +} diff --git a/abci/types/types.pb.go b/abci/types/types.pb.go index ed0996b150f..dda9dd0e84b 100644 --- a/abci/types/types.pb.go +++ b/abci/types/types.pb.go @@ -86,6 +86,35 @@ func (EvidenceType) EnumDescriptor() ([]byte, []int) { return fileDescriptor_252557cfdd89a31a, []int{1} } +// Side-tx result type +type SideTxResultType int32 + +const ( + SideTxResultType_Skip SideTxResultType = 0 + SideTxResultType_Yes SideTxResultType = 1 + SideTxResultType_No SideTxResultType = 2 +) + +var SideTxResultType_name = map[int32]string{ + 0: "Skip", + 1: "Yes", + 2: "No", +} + +var SideTxResultType_value = map[string]int32{ + "Skip": 0, + "Yes": 1, + "No": 2, +} + +func (x SideTxResultType) String() string { + return proto.EnumName(SideTxResultType_name, int32(x)) +} + +func (SideTxResultType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_252557cfdd89a31a, []int{2} +} + type ResponseOfferSnapshot_Result int32 const ( @@ -120,7 +149,7 @@ func (x ResponseOfferSnapshot_Result) String() string { } func (ResponseOfferSnapshot_Result) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{30, 0} + return fileDescriptor_252557cfdd89a31a, []int{32, 0} } type ResponseApplySnapshotChunk_Result int32 @@ -157,7 +186,7 @@ func (x ResponseApplySnapshotChunk_Result) String() string { } func (ResponseApplySnapshotChunk_Result) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{32, 0} + return fileDescriptor_252557cfdd89a31a, []int{34, 0} } type Request struct { @@ -177,6 +206,8 @@ type Request struct { // *Request_OfferSnapshot // *Request_LoadSnapshotChunk // *Request_ApplySnapshotChunk + // *Request_BeginSideBlock + // *Request_DeliverSideTx Value isRequest_Value `protobuf_oneof:"value"` } @@ -264,6 +295,12 @@ type Request_LoadSnapshotChunk struct { type Request_ApplySnapshotChunk struct { ApplySnapshotChunk *RequestApplySnapshotChunk `protobuf:"bytes,15,opt,name=apply_snapshot_chunk,json=applySnapshotChunk,proto3,oneof" json:"apply_snapshot_chunk,omitempty"` } +type Request_BeginSideBlock struct { + BeginSideBlock *RequestBeginSideBlock `protobuf:"bytes,21,opt,name=begin_side_block,json=beginSideBlock,proto3,oneof" json:"begin_side_block,omitempty"` +} +type Request_DeliverSideTx struct { + DeliverSideTx *RequestDeliverSideTx `protobuf:"bytes,22,opt,name=deliver_side_tx,json=deliverSideTx,proto3,oneof" json:"deliver_side_tx,omitempty"` +} func (*Request_Echo) isRequest_Value() {} func (*Request_Flush) isRequest_Value() {} @@ -280,6 +317,8 @@ func (*Request_ListSnapshots) isRequest_Value() {} func (*Request_OfferSnapshot) isRequest_Value() {} func (*Request_LoadSnapshotChunk) isRequest_Value() {} func (*Request_ApplySnapshotChunk) isRequest_Value() {} +func (*Request_BeginSideBlock) isRequest_Value() {} +func (*Request_DeliverSideTx) isRequest_Value() {} func (m *Request) GetValue() isRequest_Value { if m != nil { @@ -393,6 +432,20 @@ func (m *Request) GetApplySnapshotChunk() *RequestApplySnapshotChunk { return nil } +func (m *Request) GetBeginSideBlock() *RequestBeginSideBlock { + if x, ok := m.GetValue().(*Request_BeginSideBlock); ok { + return x.BeginSideBlock + } + return nil +} + +func (m *Request) GetDeliverSideTx() *RequestDeliverSideTx { + if x, ok := m.GetValue().(*Request_DeliverSideTx); ok { + return x.DeliverSideTx + } + return nil +} + // XXX_OneofWrappers is for the internal use of the proto package. func (*Request) XXX_OneofWrappers() []interface{} { return []interface{}{ @@ -411,6 +464,8 @@ func (*Request) XXX_OneofWrappers() []interface{} { (*Request_OfferSnapshot)(nil), (*Request_LoadSnapshotChunk)(nil), (*Request_ApplySnapshotChunk)(nil), + (*Request_BeginSideBlock)(nil), + (*Request_DeliverSideTx)(nil), } } @@ -1215,6 +1270,110 @@ func (m *RequestApplySnapshotChunk) GetSender() string { return "" } +type RequestBeginSideBlock struct { + Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` + Header types1.Header `protobuf:"bytes,2,opt,name=header,proto3" json:"header"` + SideTxResults []SideTxResult `protobuf:"bytes,3,rep,name=side_tx_results,json=sideTxResults,proto3" json:"side_tx_results"` +} + +func (m *RequestBeginSideBlock) Reset() { *m = RequestBeginSideBlock{} } +func (m *RequestBeginSideBlock) String() string { return proto.CompactTextString(m) } +func (*RequestBeginSideBlock) ProtoMessage() {} +func (*RequestBeginSideBlock) Descriptor() ([]byte, []int) { + return fileDescriptor_252557cfdd89a31a, []int{16} +} +func (m *RequestBeginSideBlock) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RequestBeginSideBlock) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RequestBeginSideBlock.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RequestBeginSideBlock) XXX_Merge(src proto.Message) { + xxx_messageInfo_RequestBeginSideBlock.Merge(m, src) +} +func (m *RequestBeginSideBlock) XXX_Size() int { + return m.Size() +} +func (m *RequestBeginSideBlock) XXX_DiscardUnknown() { + xxx_messageInfo_RequestBeginSideBlock.DiscardUnknown(m) +} + +var xxx_messageInfo_RequestBeginSideBlock proto.InternalMessageInfo + +func (m *RequestBeginSideBlock) GetHash() []byte { + if m != nil { + return m.Hash + } + return nil +} + +func (m *RequestBeginSideBlock) GetHeader() types1.Header { + if m != nil { + return m.Header + } + return types1.Header{} +} + +func (m *RequestBeginSideBlock) GetSideTxResults() []SideTxResult { + if m != nil { + return m.SideTxResults + } + return nil +} + +type RequestDeliverSideTx struct { + Tx []byte `protobuf:"bytes,1,opt,name=tx,proto3" json:"tx,omitempty"` +} + +func (m *RequestDeliverSideTx) Reset() { *m = RequestDeliverSideTx{} } +func (m *RequestDeliverSideTx) String() string { return proto.CompactTextString(m) } +func (*RequestDeliverSideTx) ProtoMessage() {} +func (*RequestDeliverSideTx) Descriptor() ([]byte, []int) { + return fileDescriptor_252557cfdd89a31a, []int{17} +} +func (m *RequestDeliverSideTx) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RequestDeliverSideTx) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RequestDeliverSideTx.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RequestDeliverSideTx) XXX_Merge(src proto.Message) { + xxx_messageInfo_RequestDeliverSideTx.Merge(m, src) +} +func (m *RequestDeliverSideTx) XXX_Size() int { + return m.Size() +} +func (m *RequestDeliverSideTx) XXX_DiscardUnknown() { + xxx_messageInfo_RequestDeliverSideTx.DiscardUnknown(m) +} + +var xxx_messageInfo_RequestDeliverSideTx proto.InternalMessageInfo + +func (m *RequestDeliverSideTx) GetTx() []byte { + if m != nil { + return m.Tx + } + return nil +} + type Response struct { // Types that are valid to be assigned to Value: // @@ -1234,6 +1393,8 @@ type Response struct { // *Response_OfferSnapshot // *Response_LoadSnapshotChunk // *Response_ApplySnapshotChunk + // *Response_BeginSideBlock + // *Response_DeliverSideTx Value isResponse_Value `protobuf_oneof:"value"` } @@ -1241,7 +1402,7 @@ func (m *Response) Reset() { *m = Response{} } func (m *Response) String() string { return proto.CompactTextString(m) } func (*Response) ProtoMessage() {} func (*Response) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{16} + return fileDescriptor_252557cfdd89a31a, []int{18} } func (m *Response) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1324,6 +1485,12 @@ type Response_LoadSnapshotChunk struct { type Response_ApplySnapshotChunk struct { ApplySnapshotChunk *ResponseApplySnapshotChunk `protobuf:"bytes,16,opt,name=apply_snapshot_chunk,json=applySnapshotChunk,proto3,oneof" json:"apply_snapshot_chunk,omitempty"` } +type Response_BeginSideBlock struct { + BeginSideBlock *ResponseBeginSideBlock `protobuf:"bytes,21,opt,name=begin_side_block,json=beginSideBlock,proto3,oneof" json:"begin_side_block,omitempty"` +} +type Response_DeliverSideTx struct { + DeliverSideTx *ResponseDeliverSideTx `protobuf:"bytes,22,opt,name=deliver_side_tx,json=deliverSideTx,proto3,oneof" json:"deliver_side_tx,omitempty"` +} func (*Response_Exception) isResponse_Value() {} func (*Response_Echo) isResponse_Value() {} @@ -1341,6 +1508,8 @@ func (*Response_ListSnapshots) isResponse_Value() {} func (*Response_OfferSnapshot) isResponse_Value() {} func (*Response_LoadSnapshotChunk) isResponse_Value() {} func (*Response_ApplySnapshotChunk) isResponse_Value() {} +func (*Response_BeginSideBlock) isResponse_Value() {} +func (*Response_DeliverSideTx) isResponse_Value() {} func (m *Response) GetValue() isResponse_Value { if m != nil { @@ -1461,6 +1630,20 @@ func (m *Response) GetApplySnapshotChunk() *ResponseApplySnapshotChunk { return nil } +func (m *Response) GetBeginSideBlock() *ResponseBeginSideBlock { + if x, ok := m.GetValue().(*Response_BeginSideBlock); ok { + return x.BeginSideBlock + } + return nil +} + +func (m *Response) GetDeliverSideTx() *ResponseDeliverSideTx { + if x, ok := m.GetValue().(*Response_DeliverSideTx); ok { + return x.DeliverSideTx + } + return nil +} + // XXX_OneofWrappers is for the internal use of the proto package. func (*Response) XXX_OneofWrappers() []interface{} { return []interface{}{ @@ -1480,6 +1663,8 @@ func (*Response) XXX_OneofWrappers() []interface{} { (*Response_OfferSnapshot)(nil), (*Response_LoadSnapshotChunk)(nil), (*Response_ApplySnapshotChunk)(nil), + (*Response_BeginSideBlock)(nil), + (*Response_DeliverSideTx)(nil), } } @@ -1492,7 +1677,7 @@ func (m *ResponseException) Reset() { *m = ResponseException{} } func (m *ResponseException) String() string { return proto.CompactTextString(m) } func (*ResponseException) ProtoMessage() {} func (*ResponseException) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{17} + return fileDescriptor_252557cfdd89a31a, []int{19} } func (m *ResponseException) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1536,7 +1721,7 @@ func (m *ResponseEcho) Reset() { *m = ResponseEcho{} } func (m *ResponseEcho) String() string { return proto.CompactTextString(m) } func (*ResponseEcho) ProtoMessage() {} func (*ResponseEcho) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{18} + return fileDescriptor_252557cfdd89a31a, []int{20} } func (m *ResponseEcho) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1579,7 +1764,7 @@ func (m *ResponseFlush) Reset() { *m = ResponseFlush{} } func (m *ResponseFlush) String() string { return proto.CompactTextString(m) } func (*ResponseFlush) ProtoMessage() {} func (*ResponseFlush) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{19} + return fileDescriptor_252557cfdd89a31a, []int{21} } func (m *ResponseFlush) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1620,7 +1805,7 @@ func (m *ResponseInfo) Reset() { *m = ResponseInfo{} } func (m *ResponseInfo) String() string { return proto.CompactTextString(m) } func (*ResponseInfo) ProtoMessage() {} func (*ResponseInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{20} + return fileDescriptor_252557cfdd89a31a, []int{22} } func (m *ResponseInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1696,7 +1881,7 @@ func (m *ResponseSetOption) Reset() { *m = ResponseSetOption{} } func (m *ResponseSetOption) String() string { return proto.CompactTextString(m) } func (*ResponseSetOption) ProtoMessage() {} func (*ResponseSetOption) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{21} + return fileDescriptor_252557cfdd89a31a, []int{23} } func (m *ResponseSetOption) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1756,7 +1941,7 @@ func (m *ResponseInitChain) Reset() { *m = ResponseInitChain{} } func (m *ResponseInitChain) String() string { return proto.CompactTextString(m) } func (*ResponseInitChain) ProtoMessage() {} func (*ResponseInitChain) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{22} + return fileDescriptor_252557cfdd89a31a, []int{24} } func (m *ResponseInitChain) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1823,7 +2008,7 @@ func (m *ResponseQuery) Reset() { *m = ResponseQuery{} } func (m *ResponseQuery) String() string { return proto.CompactTextString(m) } func (*ResponseQuery) ProtoMessage() {} func (*ResponseQuery) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{23} + return fileDescriptor_252557cfdd89a31a, []int{25} } func (m *ResponseQuery) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1923,7 +2108,7 @@ func (m *ResponseBeginBlock) Reset() { *m = ResponseBeginBlock{} } func (m *ResponseBeginBlock) String() string { return proto.CompactTextString(m) } func (*ResponseBeginBlock) ProtoMessage() {} func (*ResponseBeginBlock) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{24} + return fileDescriptor_252557cfdd89a31a, []int{26} } func (m *ResponseBeginBlock) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1979,7 +2164,7 @@ func (m *ResponseCheckTx) Reset() { *m = ResponseCheckTx{} } func (m *ResponseCheckTx) String() string { return proto.CompactTextString(m) } func (*ResponseCheckTx) ProtoMessage() {} func (*ResponseCheckTx) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{25} + return fileDescriptor_252557cfdd89a31a, []int{27} } func (m *ResponseCheckTx) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2100,7 +2285,7 @@ func (m *ResponseDeliverTx) Reset() { *m = ResponseDeliverTx{} } func (m *ResponseDeliverTx) String() string { return proto.CompactTextString(m) } func (*ResponseDeliverTx) ProtoMessage() {} func (*ResponseDeliverTx) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{26} + return fileDescriptor_252557cfdd89a31a, []int{28} } func (m *ResponseDeliverTx) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2195,7 +2380,7 @@ func (m *ResponseEndBlock) Reset() { *m = ResponseEndBlock{} } func (m *ResponseEndBlock) String() string { return proto.CompactTextString(m) } func (*ResponseEndBlock) ProtoMessage() {} func (*ResponseEndBlock) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{27} + return fileDescriptor_252557cfdd89a31a, []int{29} } func (m *ResponseEndBlock) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2255,7 +2440,7 @@ func (m *ResponseCommit) Reset() { *m = ResponseCommit{} } func (m *ResponseCommit) String() string { return proto.CompactTextString(m) } func (*ResponseCommit) ProtoMessage() {} func (*ResponseCommit) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{28} + return fileDescriptor_252557cfdd89a31a, []int{30} } func (m *ResponseCommit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2306,7 +2491,7 @@ func (m *ResponseListSnapshots) Reset() { *m = ResponseListSnapshots{} } func (m *ResponseListSnapshots) String() string { return proto.CompactTextString(m) } func (*ResponseListSnapshots) ProtoMessage() {} func (*ResponseListSnapshots) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{29} + return fileDescriptor_252557cfdd89a31a, []int{31} } func (m *ResponseListSnapshots) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2350,7 +2535,7 @@ func (m *ResponseOfferSnapshot) Reset() { *m = ResponseOfferSnapshot{} } func (m *ResponseOfferSnapshot) String() string { return proto.CompactTextString(m) } func (*ResponseOfferSnapshot) ProtoMessage() {} func (*ResponseOfferSnapshot) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{30} + return fileDescriptor_252557cfdd89a31a, []int{32} } func (m *ResponseOfferSnapshot) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2394,7 +2579,7 @@ func (m *ResponseLoadSnapshotChunk) Reset() { *m = ResponseLoadSnapshotC func (m *ResponseLoadSnapshotChunk) String() string { return proto.CompactTextString(m) } func (*ResponseLoadSnapshotChunk) ProtoMessage() {} func (*ResponseLoadSnapshotChunk) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{31} + return fileDescriptor_252557cfdd89a31a, []int{33} } func (m *ResponseLoadSnapshotChunk) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2440,7 +2625,7 @@ func (m *ResponseApplySnapshotChunk) Reset() { *m = ResponseApplySnapsho func (m *ResponseApplySnapshotChunk) String() string { return proto.CompactTextString(m) } func (*ResponseApplySnapshotChunk) ProtoMessage() {} func (*ResponseApplySnapshotChunk) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{32} + return fileDescriptor_252557cfdd89a31a, []int{34} } func (m *ResponseApplySnapshotChunk) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2490,10 +2675,122 @@ func (m *ResponseApplySnapshotChunk) GetRejectSenders() []string { return nil } +type ResponseBeginSideBlock struct { + Events []Event `protobuf:"bytes,1,rep,name=events,proto3" json:"events,omitempty"` +} + +func (m *ResponseBeginSideBlock) Reset() { *m = ResponseBeginSideBlock{} } +func (m *ResponseBeginSideBlock) String() string { return proto.CompactTextString(m) } +func (*ResponseBeginSideBlock) ProtoMessage() {} +func (*ResponseBeginSideBlock) Descriptor() ([]byte, []int) { + return fileDescriptor_252557cfdd89a31a, []int{35} +} +func (m *ResponseBeginSideBlock) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResponseBeginSideBlock) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ResponseBeginSideBlock.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ResponseBeginSideBlock) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResponseBeginSideBlock.Merge(m, src) +} +func (m *ResponseBeginSideBlock) XXX_Size() int { + return m.Size() +} +func (m *ResponseBeginSideBlock) XXX_DiscardUnknown() { + xxx_messageInfo_ResponseBeginSideBlock.DiscardUnknown(m) +} + +var xxx_messageInfo_ResponseBeginSideBlock proto.InternalMessageInfo + +func (m *ResponseBeginSideBlock) GetEvents() []Event { + if m != nil { + return m.Events + } + return nil +} + +type ResponseDeliverSideTx struct { + Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Codespace string `protobuf:"bytes,2,opt,name=codespace,proto3" json:"codespace,omitempty"` + Result SideTxResultType `protobuf:"varint,4,opt,name=result,proto3,enum=tendermint.abci.SideTxResultType" json:"result,omitempty"` + Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` +} + +func (m *ResponseDeliverSideTx) Reset() { *m = ResponseDeliverSideTx{} } +func (m *ResponseDeliverSideTx) String() string { return proto.CompactTextString(m) } +func (*ResponseDeliverSideTx) ProtoMessage() {} +func (*ResponseDeliverSideTx) Descriptor() ([]byte, []int) { + return fileDescriptor_252557cfdd89a31a, []int{36} +} +func (m *ResponseDeliverSideTx) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResponseDeliverSideTx) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ResponseDeliverSideTx.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ResponseDeliverSideTx) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResponseDeliverSideTx.Merge(m, src) +} +func (m *ResponseDeliverSideTx) XXX_Size() int { + return m.Size() +} +func (m *ResponseDeliverSideTx) XXX_DiscardUnknown() { + xxx_messageInfo_ResponseDeliverSideTx.DiscardUnknown(m) +} + +var xxx_messageInfo_ResponseDeliverSideTx proto.InternalMessageInfo + +func (m *ResponseDeliverSideTx) GetCode() uint32 { + if m != nil { + return m.Code + } + return 0 +} + +func (m *ResponseDeliverSideTx) GetCodespace() string { + if m != nil { + return m.Codespace + } + return "" +} + +func (m *ResponseDeliverSideTx) GetResult() SideTxResultType { + if m != nil { + return m.Result + } + return SideTxResultType_Skip +} + +func (m *ResponseDeliverSideTx) GetData() []byte { + if m != nil { + return m.Data + } + return nil +} + // ConsensusParams contains all consensus-relevant parameters // that can be adjusted by the abci app type ConsensusParams struct { - Block *BlockParams `protobuf:"bytes,1,opt,name=block,proto3" json:"block,omitempty"` + Block *types1.BlockParams `protobuf:"bytes,1,opt,name=block,proto3" json:"block,omitempty"` Evidence *types1.EvidenceParams `protobuf:"bytes,2,opt,name=evidence,proto3" json:"evidence,omitempty"` Validator *types1.ValidatorParams `protobuf:"bytes,3,opt,name=validator,proto3" json:"validator,omitempty"` Version *types1.VersionParams `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"` @@ -2503,7 +2800,7 @@ func (m *ConsensusParams) Reset() { *m = ConsensusParams{} } func (m *ConsensusParams) String() string { return proto.CompactTextString(m) } func (*ConsensusParams) ProtoMessage() {} func (*ConsensusParams) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{33} + return fileDescriptor_252557cfdd89a31a, []int{37} } func (m *ConsensusParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2532,7 +2829,7 @@ func (m *ConsensusParams) XXX_DiscardUnknown() { var xxx_messageInfo_ConsensusParams proto.InternalMessageInfo -func (m *ConsensusParams) GetBlock() *BlockParams { +func (m *ConsensusParams) GetBlock() *types1.BlockParams { if m != nil { return m.Block } @@ -2572,7 +2869,7 @@ func (m *BlockParams) Reset() { *m = BlockParams{} } func (m *BlockParams) String() string { return proto.CompactTextString(m) } func (*BlockParams) ProtoMessage() {} func (*BlockParams) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{34} + return fileDescriptor_252557cfdd89a31a, []int{38} } func (m *BlockParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2624,7 +2921,7 @@ func (m *LastCommitInfo) Reset() { *m = LastCommitInfo{} } func (m *LastCommitInfo) String() string { return proto.CompactTextString(m) } func (*LastCommitInfo) ProtoMessage() {} func (*LastCommitInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{35} + return fileDescriptor_252557cfdd89a31a, []int{39} } func (m *LastCommitInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2679,7 +2976,7 @@ func (m *Event) Reset() { *m = Event{} } func (m *Event) String() string { return proto.CompactTextString(m) } func (*Event) ProtoMessage() {} func (*Event) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{36} + return fileDescriptor_252557cfdd89a31a, []int{40} } func (m *Event) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2733,7 +3030,7 @@ func (m *EventAttribute) Reset() { *m = EventAttribute{} } func (m *EventAttribute) String() string { return proto.CompactTextString(m) } func (*EventAttribute) ProtoMessage() {} func (*EventAttribute) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{37} + return fileDescriptor_252557cfdd89a31a, []int{41} } func (m *EventAttribute) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2797,7 +3094,7 @@ func (m *TxResult) Reset() { *m = TxResult{} } func (m *TxResult) String() string { return proto.CompactTextString(m) } func (*TxResult) ProtoMessage() {} func (*TxResult) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{38} + return fileDescriptor_252557cfdd89a31a, []int{42} } func (m *TxResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2865,7 +3162,7 @@ func (m *Validator) Reset() { *m = Validator{} } func (m *Validator) String() string { return proto.CompactTextString(m) } func (*Validator) ProtoMessage() {} func (*Validator) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{39} + return fileDescriptor_252557cfdd89a31a, []int{43} } func (m *Validator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2918,7 +3215,7 @@ func (m *ValidatorUpdate) Reset() { *m = ValidatorUpdate{} } func (m *ValidatorUpdate) String() string { return proto.CompactTextString(m) } func (*ValidatorUpdate) ProtoMessage() {} func (*ValidatorUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{40} + return fileDescriptor_252557cfdd89a31a, []int{44} } func (m *ValidatorUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2971,7 +3268,7 @@ func (m *VoteInfo) Reset() { *m = VoteInfo{} } func (m *VoteInfo) String() string { return proto.CompactTextString(m) } func (*VoteInfo) ProtoMessage() {} func (*VoteInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{41} + return fileDescriptor_252557cfdd89a31a, []int{45} } func (m *VoteInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3032,7 +3329,7 @@ func (m *Evidence) Reset() { *m = Evidence{} } func (m *Evidence) String() string { return proto.CompactTextString(m) } func (*Evidence) ProtoMessage() {} func (*Evidence) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{42} + return fileDescriptor_252557cfdd89a31a, []int{46} } func (m *Evidence) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3096,26 +3393,25 @@ func (m *Evidence) GetTotalVotingPower() int64 { return 0 } -type Snapshot struct { - Height uint64 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"` - Format uint32 `protobuf:"varint,2,opt,name=format,proto3" json:"format,omitempty"` - Chunks uint32 `protobuf:"varint,3,opt,name=chunks,proto3" json:"chunks,omitempty"` - Hash []byte `protobuf:"bytes,4,opt,name=hash,proto3" json:"hash,omitempty"` - Metadata []byte `protobuf:"bytes,5,opt,name=metadata,proto3" json:"metadata,omitempty"` +// Side-tx sig +type SideTxSig struct { + Result SideTxResultType `protobuf:"varint,1,opt,name=result,proto3,enum=tendermint.abci.SideTxResultType" json:"result,omitempty"` + Sig []byte `protobuf:"bytes,2,opt,name=sig,proto3" json:"sig,omitempty"` + Address []byte `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"` } -func (m *Snapshot) Reset() { *m = Snapshot{} } -func (m *Snapshot) String() string { return proto.CompactTextString(m) } -func (*Snapshot) ProtoMessage() {} -func (*Snapshot) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{43} +func (m *SideTxSig) Reset() { *m = SideTxSig{} } +func (m *SideTxSig) String() string { return proto.CompactTextString(m) } +func (*SideTxSig) ProtoMessage() {} +func (*SideTxSig) Descriptor() ([]byte, []int) { + return fileDescriptor_252557cfdd89a31a, []int{47} } -func (m *Snapshot) XXX_Unmarshal(b []byte) error { +func (m *SideTxSig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *Snapshot) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *SideTxSig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_Snapshot.Marshal(b, m, deterministic) + return xxx_messageInfo_SideTxSig.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -3125,30 +3421,145 @@ func (m *Snapshot) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return b[:n], nil } } -func (m *Snapshot) XXX_Merge(src proto.Message) { - xxx_messageInfo_Snapshot.Merge(m, src) +func (m *SideTxSig) XXX_Merge(src proto.Message) { + xxx_messageInfo_SideTxSig.Merge(m, src) } -func (m *Snapshot) XXX_Size() int { +func (m *SideTxSig) XXX_Size() int { return m.Size() } -func (m *Snapshot) XXX_DiscardUnknown() { - xxx_messageInfo_Snapshot.DiscardUnknown(m) +func (m *SideTxSig) XXX_DiscardUnknown() { + xxx_messageInfo_SideTxSig.DiscardUnknown(m) } -var xxx_messageInfo_Snapshot proto.InternalMessageInfo +var xxx_messageInfo_SideTxSig proto.InternalMessageInfo -func (m *Snapshot) GetHeight() uint64 { +func (m *SideTxSig) GetResult() SideTxResultType { if m != nil { - return m.Height + return m.Result } - return 0 + return SideTxResultType_Skip } -func (m *Snapshot) GetFormat() uint32 { +func (m *SideTxSig) GetSig() []byte { if m != nil { - return m.Format + return m.Sig } - return 0 + return nil +} + +func (m *SideTxSig) GetAddress() []byte { + if m != nil { + return m.Address + } + return nil +} + +// Side tx results +type SideTxResult struct { + TxHash []byte `protobuf:"bytes,1,opt,name=tx_hash,json=txHash,proto3" json:"tx_hash,omitempty"` + Sigs []SideTxSig `protobuf:"bytes,2,rep,name=sigs,proto3" json:"sigs"` +} + +func (m *SideTxResult) Reset() { *m = SideTxResult{} } +func (m *SideTxResult) String() string { return proto.CompactTextString(m) } +func (*SideTxResult) ProtoMessage() {} +func (*SideTxResult) Descriptor() ([]byte, []int) { + return fileDescriptor_252557cfdd89a31a, []int{48} +} +func (m *SideTxResult) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SideTxResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_SideTxResult.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *SideTxResult) XXX_Merge(src proto.Message) { + xxx_messageInfo_SideTxResult.Merge(m, src) +} +func (m *SideTxResult) XXX_Size() int { + return m.Size() +} +func (m *SideTxResult) XXX_DiscardUnknown() { + xxx_messageInfo_SideTxResult.DiscardUnknown(m) +} + +var xxx_messageInfo_SideTxResult proto.InternalMessageInfo + +func (m *SideTxResult) GetTxHash() []byte { + if m != nil { + return m.TxHash + } + return nil +} + +func (m *SideTxResult) GetSigs() []SideTxSig { + if m != nil { + return m.Sigs + } + return nil +} + +type Snapshot struct { + Height uint64 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"` + Format uint32 `protobuf:"varint,2,opt,name=format,proto3" json:"format,omitempty"` + Chunks uint32 `protobuf:"varint,3,opt,name=chunks,proto3" json:"chunks,omitempty"` + Hash []byte `protobuf:"bytes,4,opt,name=hash,proto3" json:"hash,omitempty"` + Metadata []byte `protobuf:"bytes,5,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (m *Snapshot) Reset() { *m = Snapshot{} } +func (m *Snapshot) String() string { return proto.CompactTextString(m) } +func (*Snapshot) ProtoMessage() {} +func (*Snapshot) Descriptor() ([]byte, []int) { + return fileDescriptor_252557cfdd89a31a, []int{49} +} +func (m *Snapshot) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Snapshot) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Snapshot.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Snapshot) XXX_Merge(src proto.Message) { + xxx_messageInfo_Snapshot.Merge(m, src) +} +func (m *Snapshot) XXX_Size() int { + return m.Size() +} +func (m *Snapshot) XXX_DiscardUnknown() { + xxx_messageInfo_Snapshot.DiscardUnknown(m) +} + +var xxx_messageInfo_Snapshot proto.InternalMessageInfo + +func (m *Snapshot) GetHeight() uint64 { + if m != nil { + return m.Height + } + return 0 +} + +func (m *Snapshot) GetFormat() uint32 { + if m != nil { + return m.Format + } + return 0 } func (m *Snapshot) GetChunks() uint32 { @@ -3175,6 +3586,7 @@ func (m *Snapshot) GetMetadata() []byte { func init() { proto.RegisterEnum("tendermint.abci.CheckTxType", CheckTxType_name, CheckTxType_value) proto.RegisterEnum("tendermint.abci.EvidenceType", EvidenceType_name, EvidenceType_value) + proto.RegisterEnum("tendermint.abci.SideTxResultType", SideTxResultType_name, SideTxResultType_value) proto.RegisterEnum("tendermint.abci.ResponseOfferSnapshot_Result", ResponseOfferSnapshot_Result_name, ResponseOfferSnapshot_Result_value) proto.RegisterEnum("tendermint.abci.ResponseApplySnapshotChunk_Result", ResponseApplySnapshotChunk_Result_name, ResponseApplySnapshotChunk_Result_value) proto.RegisterType((*Request)(nil), "tendermint.abci.Request") @@ -3193,6 +3605,8 @@ func init() { proto.RegisterType((*RequestOfferSnapshot)(nil), "tendermint.abci.RequestOfferSnapshot") proto.RegisterType((*RequestLoadSnapshotChunk)(nil), "tendermint.abci.RequestLoadSnapshotChunk") proto.RegisterType((*RequestApplySnapshotChunk)(nil), "tendermint.abci.RequestApplySnapshotChunk") + proto.RegisterType((*RequestBeginSideBlock)(nil), "tendermint.abci.RequestBeginSideBlock") + proto.RegisterType((*RequestDeliverSideTx)(nil), "tendermint.abci.RequestDeliverSideTx") proto.RegisterType((*Response)(nil), "tendermint.abci.Response") proto.RegisterType((*ResponseException)(nil), "tendermint.abci.ResponseException") proto.RegisterType((*ResponseEcho)(nil), "tendermint.abci.ResponseEcho") @@ -3210,6 +3624,8 @@ func init() { proto.RegisterType((*ResponseOfferSnapshot)(nil), "tendermint.abci.ResponseOfferSnapshot") proto.RegisterType((*ResponseLoadSnapshotChunk)(nil), "tendermint.abci.ResponseLoadSnapshotChunk") proto.RegisterType((*ResponseApplySnapshotChunk)(nil), "tendermint.abci.ResponseApplySnapshotChunk") + proto.RegisterType((*ResponseBeginSideBlock)(nil), "tendermint.abci.ResponseBeginSideBlock") + proto.RegisterType((*ResponseDeliverSideTx)(nil), "tendermint.abci.ResponseDeliverSideTx") proto.RegisterType((*ConsensusParams)(nil), "tendermint.abci.ConsensusParams") proto.RegisterType((*BlockParams)(nil), "tendermint.abci.BlockParams") proto.RegisterType((*LastCommitInfo)(nil), "tendermint.abci.LastCommitInfo") @@ -3220,187 +3636,207 @@ func init() { proto.RegisterType((*ValidatorUpdate)(nil), "tendermint.abci.ValidatorUpdate") proto.RegisterType((*VoteInfo)(nil), "tendermint.abci.VoteInfo") proto.RegisterType((*Evidence)(nil), "tendermint.abci.Evidence") + proto.RegisterType((*SideTxSig)(nil), "tendermint.abci.SideTxSig") + proto.RegisterType((*SideTxResult)(nil), "tendermint.abci.SideTxResult") proto.RegisterType((*Snapshot)(nil), "tendermint.abci.Snapshot") } func init() { proto.RegisterFile("tendermint/abci/types.proto", fileDescriptor_252557cfdd89a31a) } var fileDescriptor_252557cfdd89a31a = []byte{ - // 2782 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0x4b, 0x77, 0x23, 0xc5, - 0xf5, 0xd7, 0x5b, 0xea, 0x2b, 0xeb, 0xe1, 0x1a, 0x33, 0x08, 0x31, 0xd8, 0x43, 0x73, 0xe0, 0x0f, - 0x03, 0xd8, 0x7f, 0xcc, 0x81, 0x40, 0x20, 0x01, 0x4b, 0x68, 0x90, 0xb1, 0xb1, 0x9c, 0xb6, 0x66, - 0xc8, 0x8b, 0x69, 0x5a, 0xea, 0xb2, 0xd4, 0x8c, 0xd4, 0xdd, 0x74, 0x97, 0x8c, 0xc5, 0x32, 0x8f, - 0x0d, 0xd9, 0x90, 0x5d, 0x36, 0x7c, 0x8f, 0xac, 0xb2, 0xc9, 0x86, 0x73, 0xb2, 0x61, 0x99, 0x45, - 0x0e, 0xc9, 0x99, 0x39, 0xd9, 0xe4, 0x0b, 0x64, 0x95, 0x93, 0x9c, 0x7a, 0xf4, 0x4b, 0x52, 0x4b, - 0x32, 0x64, 0x97, 0x5d, 0xd5, 0xed, 0x7b, 0x6f, 0xab, 0xaa, 0xeb, 0xfe, 0xee, 0xef, 0xde, 0x12, - 0x3c, 0x4e, 0xb0, 0xa9, 0x63, 0x67, 0x6c, 0x98, 0x64, 0x4f, 0xeb, 0xf5, 0x8d, 0x3d, 0x32, 0xb5, - 0xb1, 0xbb, 0x6b, 0x3b, 0x16, 0xb1, 0x50, 0x25, 0x78, 0xb8, 0x4b, 0x1f, 0xd6, 0x9f, 0x08, 0x69, - 0xf7, 0x9d, 0xa9, 0x4d, 0xac, 0x3d, 0xdb, 0xb1, 0xac, 0x73, 0xae, 0x5f, 0xbf, 0x11, 0x7a, 0xcc, - 0xfc, 0x84, 0xbd, 0x45, 0x9e, 0x0a, 0xe3, 0xfb, 0x78, 0xea, 0x3d, 0x7d, 0x62, 0xce, 0xd6, 0xd6, - 0x1c, 0x6d, 0xec, 0x3d, 0xde, 0x19, 0x58, 0xd6, 0x60, 0x84, 0xf7, 0xd8, 0xac, 0x37, 0x39, 0xdf, - 0x23, 0xc6, 0x18, 0xbb, 0x44, 0x1b, 0xdb, 0x42, 0x61, 0x6b, 0x60, 0x0d, 0x2c, 0x36, 0xdc, 0xa3, - 0x23, 0x2e, 0x95, 0x7f, 0x5b, 0x80, 0xbc, 0x82, 0x3f, 0x99, 0x60, 0x97, 0xa0, 0x7d, 0xc8, 0xe0, - 0xfe, 0xd0, 0xaa, 0x25, 0x6f, 0x26, 0x9f, 0x2d, 0xee, 0xdf, 0xd8, 0x9d, 0x59, 0xdc, 0xae, 0xd0, - 0x6b, 0xf5, 0x87, 0x56, 0x3b, 0xa1, 0x30, 0x5d, 0xf4, 0x0a, 0x64, 0xcf, 0x47, 0x13, 0x77, 0x58, - 0x4b, 0x31, 0xa3, 0x27, 0xe2, 0x8c, 0x6e, 0x53, 0xa5, 0x76, 0x42, 0xe1, 0xda, 0xf4, 0x55, 0x86, - 0x79, 0x6e, 0xd5, 0xd2, 0xcb, 0x5f, 0x75, 0x68, 0x9e, 0xb3, 0x57, 0x51, 0x5d, 0xd4, 0x00, 0x70, - 0x31, 0x51, 0x2d, 0x9b, 0x18, 0x96, 0x59, 0xcb, 0x30, 0xcb, 0x27, 0xe3, 0x2c, 0xcf, 0x30, 0xe9, - 0x30, 0xc5, 0x76, 0x42, 0x91, 0x5c, 0x6f, 0x42, 0x7d, 0x18, 0xa6, 0x41, 0xd4, 0xfe, 0x50, 0x33, - 0xcc, 0x5a, 0x76, 0xb9, 0x8f, 0x43, 0xd3, 0x20, 0x4d, 0xaa, 0x48, 0x7d, 0x18, 0xde, 0x84, 0x2e, - 0xf9, 0x93, 0x09, 0x76, 0xa6, 0xb5, 0xdc, 0xf2, 0x25, 0xff, 0x88, 0x2a, 0xd1, 0x25, 0x33, 0x6d, - 0xd4, 0x82, 0x62, 0x0f, 0x0f, 0x0c, 0x53, 0xed, 0x8d, 0xac, 0xfe, 0xfd, 0x5a, 0x9e, 0x19, 0xcb, - 0x71, 0xc6, 0x0d, 0xaa, 0xda, 0xa0, 0x9a, 0xed, 0x84, 0x02, 0x3d, 0x7f, 0x86, 0xde, 0x84, 0x42, - 0x7f, 0x88, 0xfb, 0xf7, 0x55, 0x72, 0x59, 0x2b, 0x30, 0x1f, 0x3b, 0x71, 0x3e, 0x9a, 0x54, 0xaf, - 0x7b, 0xd9, 0x4e, 0x28, 0xf9, 0x3e, 0x1f, 0xd2, 0xf5, 0xeb, 0x78, 0x64, 0x5c, 0x60, 0x87, 0xda, - 0x4b, 0xcb, 0xd7, 0xff, 0x0e, 0xd7, 0x64, 0x1e, 0x24, 0xdd, 0x9b, 0xa0, 0xb7, 0x40, 0xc2, 0xa6, - 0x2e, 0x96, 0x01, 0xcc, 0xc5, 0xcd, 0xd8, 0xb3, 0x62, 0xea, 0xde, 0x22, 0x0a, 0x58, 0x8c, 0xd1, - 0x6b, 0x90, 0xeb, 0x5b, 0xe3, 0xb1, 0x41, 0x6a, 0x45, 0x66, 0xbd, 0x1d, 0xbb, 0x00, 0xa6, 0xd5, - 0x4e, 0x28, 0x42, 0x1f, 0x9d, 0x40, 0x79, 0x64, 0xb8, 0x44, 0x75, 0x4d, 0xcd, 0x76, 0x87, 0x16, - 0x71, 0x6b, 0x1b, 0xcc, 0xc3, 0xd3, 0x71, 0x1e, 0x8e, 0x0d, 0x97, 0x9c, 0x79, 0xca, 0xed, 0x84, - 0x52, 0x1a, 0x85, 0x05, 0xd4, 0x9f, 0x75, 0x7e, 0x8e, 0x1d, 0xdf, 0x61, 0xad, 0xb4, 0xdc, 0x5f, - 0x87, 0x6a, 0x7b, 0xf6, 0xd4, 0x9f, 0x15, 0x16, 0xa0, 0x9f, 0xc1, 0xb5, 0x91, 0xa5, 0xe9, 0xbe, - 0x3b, 0xb5, 0x3f, 0x9c, 0x98, 0xf7, 0x6b, 0x65, 0xe6, 0xf4, 0xb9, 0xd8, 0x1f, 0x69, 0x69, 0xba, - 0xe7, 0xa2, 0x49, 0x0d, 0xda, 0x09, 0x65, 0x73, 0x34, 0x2b, 0x44, 0xf7, 0x60, 0x4b, 0xb3, 0xed, - 0xd1, 0x74, 0xd6, 0x7b, 0x85, 0x79, 0xbf, 0x15, 0xe7, 0xfd, 0x80, 0xda, 0xcc, 0xba, 0x47, 0xda, - 0x9c, 0xb4, 0x91, 0x87, 0xec, 0x85, 0x36, 0x9a, 0x60, 0xf9, 0xff, 0xa0, 0x18, 0x0a, 0x75, 0x54, - 0x83, 0xfc, 0x18, 0xbb, 0xae, 0x36, 0xc0, 0x0c, 0x19, 0x24, 0xc5, 0x9b, 0xca, 0x65, 0xd8, 0x08, - 0x87, 0xb7, 0x3c, 0xf6, 0x0d, 0x69, 0xe0, 0x52, 0xc3, 0x0b, 0xec, 0xb8, 0x34, 0x5a, 0x85, 0xa1, - 0x98, 0xa2, 0xa7, 0xa0, 0xc4, 0x8e, 0x8f, 0xea, 0x3d, 0xa7, 0xe8, 0x91, 0x51, 0x36, 0x98, 0xf0, - 0xae, 0x50, 0xda, 0x81, 0xa2, 0xbd, 0x6f, 0xfb, 0x2a, 0x69, 0xa6, 0x02, 0xf6, 0xbe, 0x2d, 0x14, - 0xe4, 0xef, 0x43, 0x75, 0x36, 0xda, 0x51, 0x15, 0xd2, 0xf7, 0xf1, 0x54, 0xbc, 0x8f, 0x0e, 0xd1, - 0x96, 0x58, 0x16, 0x7b, 0x87, 0xa4, 0x88, 0x35, 0xfe, 0x29, 0xe5, 0x1b, 0xfb, 0x61, 0x8e, 0x5e, - 0x83, 0x0c, 0x45, 0x4d, 0x01, 0x80, 0xf5, 0x5d, 0x0e, 0xa9, 0xbb, 0x1e, 0xa4, 0xee, 0x76, 0x3d, - 0x48, 0x6d, 0x14, 0xbe, 0xfa, 0x66, 0x27, 0xf1, 0xc5, 0x5f, 0x77, 0x92, 0x0a, 0xb3, 0x40, 0x8f, - 0xd1, 0xa8, 0xd4, 0x0c, 0x53, 0x35, 0x74, 0xf1, 0x9e, 0x3c, 0x9b, 0x1f, 0xea, 0xe8, 0x08, 0xaa, - 0x7d, 0xcb, 0x74, 0xb1, 0xe9, 0x4e, 0x5c, 0x95, 0x43, 0xb6, 0x80, 0xbd, 0xf9, 0xa8, 0x69, 0x7a, - 0x8a, 0xa7, 0x4c, 0x4f, 0xa9, 0xf4, 0xa3, 0x02, 0x74, 0x1b, 0xe0, 0x42, 0x1b, 0x19, 0xba, 0x46, - 0x2c, 0xc7, 0xad, 0x65, 0x6e, 0xa6, 0x17, 0xba, 0xb9, 0xeb, 0xa9, 0xdc, 0xb1, 0x75, 0x8d, 0xe0, - 0x46, 0x86, 0xfe, 0x5a, 0x25, 0x64, 0x89, 0x9e, 0x81, 0x8a, 0x66, 0xdb, 0xaa, 0x4b, 0x34, 0x82, - 0xd5, 0xde, 0x94, 0x60, 0x97, 0x81, 0xe1, 0x86, 0x52, 0xd2, 0x6c, 0xfb, 0x8c, 0x4a, 0x1b, 0x54, - 0x88, 0x9e, 0x86, 0x32, 0x05, 0x3e, 0x43, 0x1b, 0xa9, 0x43, 0x6c, 0x0c, 0x86, 0x84, 0x81, 0x5e, - 0x5a, 0x29, 0x09, 0x69, 0x9b, 0x09, 0x65, 0xdd, 0x3f, 0x08, 0x0c, 0xf4, 0x10, 0x82, 0x8c, 0xae, - 0x11, 0x8d, 0x6d, 0xe4, 0x86, 0xc2, 0xc6, 0x54, 0x66, 0x6b, 0x64, 0x28, 0xb6, 0x87, 0x8d, 0xd1, - 0x75, 0xc8, 0x09, 0xb7, 0x69, 0xe6, 0x56, 0xcc, 0xe8, 0x37, 0xb3, 0x1d, 0xeb, 0x02, 0x33, 0x94, - 0x2f, 0x28, 0x7c, 0x22, 0xff, 0x2a, 0x05, 0x9b, 0x73, 0xf0, 0x48, 0xfd, 0x0e, 0x35, 0x77, 0xe8, - 0xbd, 0x8b, 0x8e, 0xd1, 0xab, 0xd4, 0xaf, 0xa6, 0x63, 0x47, 0xa4, 0xa5, 0x5a, 0x78, 0x8b, 0x78, - 0xca, 0x6d, 0xb3, 0xe7, 0x62, 0x6b, 0x84, 0x36, 0xea, 0x40, 0x75, 0xa4, 0xb9, 0x44, 0xe5, 0x70, - 0xa3, 0x86, 0x52, 0xd4, 0x3c, 0xc8, 0x1e, 0x6b, 0x1e, 0x40, 0xd1, 0xc3, 0x2e, 0x1c, 0x95, 0x47, - 0x11, 0x29, 0x52, 0x60, 0xab, 0x37, 0xfd, 0x4c, 0x33, 0x89, 0x61, 0x62, 0x75, 0xee, 0xcb, 0x3d, - 0x36, 0xe7, 0xb4, 0x75, 0x61, 0xe8, 0xd8, 0xec, 0x7b, 0x9f, 0xec, 0x9a, 0x6f, 0xec, 0x7f, 0x52, - 0x57, 0x56, 0xa0, 0x1c, 0x05, 0x78, 0x54, 0x86, 0x14, 0xb9, 0x14, 0x1b, 0x90, 0x22, 0x97, 0xe8, - 0xff, 0x21, 0x43, 0x17, 0xc9, 0x16, 0x5f, 0x5e, 0x90, 0x5d, 0x85, 0x5d, 0x77, 0x6a, 0x63, 0x85, - 0x69, 0xca, 0xb2, 0x1f, 0x0d, 0x3e, 0xe8, 0xcf, 0x7a, 0x95, 0x9f, 0x83, 0xca, 0x0c, 0xaa, 0x87, - 0xbe, 0x5f, 0x32, 0xfc, 0xfd, 0xe4, 0x0a, 0x94, 0x22, 0x10, 0x2e, 0x5f, 0x87, 0xad, 0x45, 0x88, - 0x2c, 0x0f, 0x7d, 0x79, 0x04, 0x59, 0xd1, 0x2b, 0x50, 0xf0, 0x21, 0x99, 0x47, 0xe3, 0xfc, 0x5e, - 0x79, 0xca, 0x8a, 0xaf, 0x4a, 0xc3, 0x90, 0x1e, 0x6b, 0x76, 0x1e, 0x52, 0xec, 0x87, 0xe7, 0x35, - 0xdb, 0x6e, 0x6b, 0xee, 0x50, 0xfe, 0x08, 0x6a, 0x71, 0x70, 0x3b, 0xb3, 0x8c, 0x8c, 0x7f, 0x0c, - 0xaf, 0x43, 0xee, 0xdc, 0x72, 0xc6, 0x1a, 0x61, 0xce, 0x4a, 0x8a, 0x98, 0xd1, 0xe3, 0xc9, 0xa1, - 0x37, 0xcd, 0xc4, 0x7c, 0x22, 0xab, 0xf0, 0x58, 0x2c, 0xe4, 0x52, 0x13, 0xc3, 0xd4, 0x31, 0xdf, - 0xcf, 0x92, 0xc2, 0x27, 0x81, 0x23, 0xfe, 0x63, 0xf9, 0x84, 0xbe, 0xd6, 0x65, 0x6b, 0x65, 0xfe, - 0x25, 0x45, 0xcc, 0xe4, 0xbf, 0x17, 0xa0, 0xa0, 0x60, 0xd7, 0xa6, 0x98, 0x80, 0x1a, 0x20, 0xe1, - 0xcb, 0x3e, 0xe6, 0x64, 0x28, 0x19, 0x4b, 0x26, 0xb8, 0x76, 0xcb, 0xd3, 0xa4, 0x99, 0xdc, 0x37, - 0x43, 0x2f, 0x0b, 0xc2, 0x17, 0xcf, 0xdd, 0x84, 0x79, 0x98, 0xf1, 0xbd, 0xea, 0x31, 0xbe, 0x74, - 0x6c, 0xf2, 0xe6, 0x56, 0x33, 0x94, 0xef, 0x65, 0x41, 0xf9, 0x32, 0x2b, 0x5e, 0x16, 0xe1, 0x7c, - 0xcd, 0x08, 0xe7, 0xcb, 0xae, 0x58, 0x66, 0x0c, 0xe9, 0x6b, 0x46, 0x48, 0x5f, 0x6e, 0x85, 0x93, - 0x18, 0xd6, 0xf7, 0xaa, 0xc7, 0xfa, 0xf2, 0x2b, 0x96, 0x3d, 0x43, 0xfb, 0x6e, 0x47, 0x69, 0x1f, - 0xa7, 0x6c, 0x4f, 0xc5, 0x5a, 0xc7, 0xf2, 0xbe, 0x1f, 0x84, 0x78, 0x9f, 0x14, 0x4b, 0xba, 0xb8, - 0x93, 0x05, 0xc4, 0xaf, 0x19, 0x21, 0x7e, 0xb0, 0x62, 0x0f, 0x62, 0x98, 0xdf, 0xdb, 0x61, 0xe6, - 0x57, 0x8c, 0x25, 0x8f, 0xe2, 0xd0, 0x2c, 0xa2, 0x7e, 0xaf, 0xfb, 0xd4, 0x6f, 0x23, 0x96, 0xbb, - 0x8a, 0x35, 0xcc, 0x72, 0xbf, 0xce, 0x1c, 0xf7, 0xe3, 0x5c, 0xed, 0x99, 0x58, 0x17, 0x2b, 0xc8, - 0x5f, 0x67, 0x8e, 0xfc, 0x95, 0x57, 0x38, 0x5c, 0xc1, 0xfe, 0x7e, 0xbe, 0x98, 0xfd, 0xc5, 0xf3, - 0x33, 0xf1, 0x33, 0xd7, 0xa3, 0x7f, 0x6a, 0x0c, 0xfd, 0xab, 0x32, 0xf7, 0xcf, 0xc7, 0xba, 0xbf, - 0x3a, 0xff, 0x7b, 0x8e, 0xa6, 0xd9, 0x19, 0xe0, 0xa0, 0x50, 0x85, 0x1d, 0xc7, 0x72, 0x04, 0xb5, - 0xe2, 0x13, 0xf9, 0x59, 0x9a, 0xf8, 0x03, 0x90, 0x58, 0xc2, 0x15, 0x59, 0x4a, 0x08, 0x01, 0x83, - 0xfc, 0xfb, 0x64, 0x60, 0xcb, 0x72, 0x65, 0x98, 0x34, 0x48, 0x82, 0x34, 0x84, 0x28, 0x64, 0x2a, - 0x4a, 0x21, 0x77, 0xa0, 0x48, 0xa1, 0x7e, 0x86, 0x1d, 0x6a, 0xb6, 0xc7, 0x0e, 0xd1, 0x2d, 0xd8, - 0x64, 0xb9, 0x9c, 0x13, 0x4d, 0x81, 0xef, 0x19, 0x96, 0xa6, 0x2a, 0xf4, 0x01, 0x3f, 0x9c, 0x1c, - 0xe8, 0x5f, 0x84, 0x6b, 0x21, 0x5d, 0x3f, 0x85, 0x70, 0x4a, 0x54, 0xf5, 0xb5, 0x0f, 0x44, 0x2e, - 0x79, 0x3f, 0xd8, 0xa0, 0x80, 0x79, 0x22, 0xc8, 0xf4, 0x2d, 0x1d, 0x0b, 0x80, 0x67, 0x63, 0xca, - 0x46, 0x47, 0xd6, 0x40, 0xc0, 0x38, 0x1d, 0x52, 0x2d, 0x1f, 0x05, 0x25, 0x0e, 0x72, 0xf2, 0x1f, - 0x93, 0x81, 0xbf, 0x80, 0x8c, 0x2e, 0xe2, 0x8d, 0xc9, 0xff, 0x0e, 0x6f, 0x4c, 0x7d, 0x6b, 0xde, - 0x18, 0x4e, 0xb0, 0xe9, 0x68, 0x82, 0xfd, 0x67, 0x32, 0xf8, 0xc2, 0x3e, 0x0b, 0xfc, 0x76, 0x3b, - 0x12, 0x64, 0xcb, 0x2c, 0xfb, 0x5e, 0x22, 0x5b, 0x0a, 0x6e, 0x9f, 0x63, 0xef, 0x8d, 0x72, 0xfb, - 0x3c, 0xcf, 0x9f, 0x6c, 0x82, 0x5e, 0x03, 0x89, 0x35, 0x5d, 0x54, 0xcb, 0x76, 0x05, 0xe0, 0x3e, - 0x1e, 0x5e, 0x2b, 0xef, 0xad, 0xec, 0x9e, 0x52, 0x9d, 0x8e, 0xed, 0x2a, 0x05, 0x5b, 0x8c, 0x42, - 0x44, 0x40, 0x8a, 0xf0, 0xd1, 0x1b, 0x20, 0xd1, 0x5f, 0xef, 0xda, 0x5a, 0x1f, 0x33, 0xf0, 0x94, - 0x94, 0x40, 0x20, 0xdf, 0x03, 0x34, 0x0f, 0xdf, 0xa8, 0x0d, 0x39, 0x7c, 0x81, 0x4d, 0x42, 0xbf, - 0x1a, 0xdd, 0xee, 0xeb, 0x0b, 0xc8, 0x1e, 0x36, 0x49, 0xa3, 0x46, 0x37, 0xf9, 0x1f, 0xdf, 0xec, - 0x54, 0xb9, 0xf6, 0x0b, 0xd6, 0xd8, 0x20, 0x78, 0x6c, 0x93, 0xa9, 0x22, 0xec, 0xe5, 0xbf, 0xa4, - 0x28, 0xf3, 0x8a, 0x40, 0xfb, 0xc2, 0xbd, 0xf5, 0x02, 0x28, 0x15, 0x62, 0xdd, 0xeb, 0xed, 0xf7, - 0x36, 0xc0, 0x40, 0x73, 0xd5, 0x4f, 0x35, 0x93, 0x60, 0x5d, 0x6c, 0x7a, 0x48, 0x82, 0xea, 0x50, - 0xa0, 0xb3, 0x89, 0x8b, 0x75, 0x51, 0x00, 0xf8, 0xf3, 0xd0, 0x3a, 0xf3, 0xdf, 0x6d, 0x9d, 0xd1, - 0x5d, 0x2e, 0xcc, 0xec, 0x72, 0x88, 0x15, 0x49, 0x61, 0x56, 0x44, 0x7f, 0x9b, 0xed, 0x18, 0x96, - 0x63, 0x90, 0x29, 0xfb, 0x34, 0x69, 0xc5, 0x9f, 0xd3, 0x3a, 0x73, 0x8c, 0xc7, 0xb6, 0x65, 0x8d, - 0x54, 0x0e, 0x5e, 0x45, 0x66, 0xba, 0x21, 0x84, 0x2d, 0x86, 0x61, 0xbf, 0x4e, 0x05, 0xe1, 0x17, - 0xb0, 0xdf, 0xff, 0xb9, 0x0d, 0x96, 0x7f, 0xc3, 0x4a, 0xe2, 0x68, 0xf2, 0x46, 0x67, 0xb0, 0xe9, - 0x87, 0xbf, 0x3a, 0x61, 0xb0, 0xe0, 0x1d, 0xe8, 0x75, 0xf1, 0xa3, 0x7a, 0x11, 0x15, 0xbb, 0xe8, - 0xc7, 0xf0, 0xe8, 0x0c, 0xb4, 0xf9, 0xae, 0x53, 0x6b, 0x22, 0xdc, 0x23, 0x51, 0x84, 0xf3, 0x3c, - 0x07, 0x7b, 0x95, 0xfe, 0x8e, 0x41, 0x77, 0x48, 0xab, 0xac, 0x30, 0x15, 0x59, 0xf8, 0xf5, 0x9f, - 0x82, 0x92, 0x83, 0x09, 0x2d, 0xfc, 0x23, 0x75, 0xec, 0x06, 0x17, 0x8a, 0xea, 0xf8, 0x14, 0x1e, - 0x59, 0x48, 0x49, 0xd0, 0xf7, 0x40, 0x0a, 0xd8, 0x4c, 0x32, 0xa6, 0x24, 0xf4, 0xcb, 0x9c, 0x40, - 0x57, 0xfe, 0x43, 0x32, 0x70, 0x19, 0x2d, 0x9c, 0x5a, 0x90, 0x73, 0xb0, 0x3b, 0x19, 0xf1, 0x52, - 0xa6, 0xbc, 0xff, 0xe2, 0x7a, 0x64, 0x86, 0x4a, 0x27, 0x23, 0xa2, 0x08, 0x63, 0xf9, 0x1e, 0xe4, - 0xb8, 0x04, 0x15, 0x21, 0x7f, 0xe7, 0xe4, 0xe8, 0xa4, 0xf3, 0xc1, 0x49, 0x35, 0x81, 0x00, 0x72, - 0x07, 0xcd, 0x66, 0xeb, 0xb4, 0x5b, 0x4d, 0x22, 0x09, 0xb2, 0x07, 0x8d, 0x8e, 0xd2, 0xad, 0xa6, - 0xa8, 0x58, 0x69, 0xbd, 0xd7, 0x6a, 0x76, 0xab, 0x69, 0xb4, 0x09, 0x25, 0x3e, 0x56, 0x6f, 0x77, - 0x94, 0xf7, 0x0f, 0xba, 0xd5, 0x4c, 0x48, 0x74, 0xd6, 0x3a, 0x79, 0xa7, 0xa5, 0x54, 0xb3, 0xf2, - 0x4b, 0xb4, 0x56, 0x8a, 0xa1, 0x3f, 0x41, 0x55, 0x94, 0x0c, 0x55, 0x45, 0xf2, 0xef, 0x52, 0x50, - 0x8f, 0xe7, 0x34, 0xe8, 0xbd, 0x99, 0x85, 0xef, 0x5f, 0x81, 0x10, 0xcd, 0xac, 0x1e, 0x3d, 0x0d, - 0x65, 0x07, 0x9f, 0x63, 0xd2, 0x1f, 0x72, 0x8e, 0xc5, 0x33, 0x66, 0x49, 0x29, 0x09, 0x29, 0x33, - 0x72, 0xb9, 0xda, 0xc7, 0xb8, 0x4f, 0x54, 0x0e, 0x45, 0xfc, 0xd0, 0x49, 0x54, 0x8d, 0x4a, 0xcf, - 0xb8, 0x50, 0xfe, 0xe8, 0x4a, 0x7b, 0x29, 0x41, 0x56, 0x69, 0x75, 0x95, 0x9f, 0x54, 0xd3, 0x08, - 0x41, 0x99, 0x0d, 0xd5, 0xb3, 0x93, 0x83, 0xd3, 0xb3, 0x76, 0x87, 0xee, 0xe5, 0x35, 0xa8, 0x78, - 0x7b, 0xe9, 0x09, 0xb3, 0xf2, 0xbf, 0x93, 0x50, 0x99, 0x09, 0x10, 0xb4, 0x0f, 0x59, 0xce, 0xd3, - 0xe3, 0xba, 0xf9, 0x2c, 0xbe, 0x45, 0x34, 0x71, 0x55, 0xf4, 0x26, 0x14, 0xb0, 0x68, 0x40, 0x2c, - 0x0a, 0x44, 0xde, 0x38, 0xf1, 0x5a, 0x14, 0xc2, 0xd4, 0xb7, 0x40, 0x6f, 0x81, 0xe4, 0x47, 0xba, - 0x28, 0x0e, 0x9f, 0x9c, 0x37, 0xf7, 0x31, 0x42, 0xd8, 0x07, 0x36, 0xe8, 0xf5, 0x80, 0xec, 0x65, - 0xe6, 0xab, 0x03, 0x61, 0xce, 0x15, 0x84, 0xb1, 0xa7, 0x2f, 0x37, 0xa1, 0x18, 0x5a, 0x0f, 0x7a, - 0x1c, 0xa4, 0xb1, 0x76, 0x29, 0x1a, 0x5b, 0xbc, 0x35, 0x51, 0x18, 0x6b, 0x97, 0xbc, 0xa7, 0xf5, - 0x28, 0xe4, 0xe9, 0xc3, 0x81, 0xc6, 0xd1, 0x26, 0xad, 0xe4, 0xc6, 0xda, 0xe5, 0xbb, 0x9a, 0x2b, - 0x7f, 0x08, 0xe5, 0x68, 0x53, 0x87, 0x9e, 0x44, 0xc7, 0x9a, 0x98, 0x3a, 0xf3, 0x91, 0x55, 0xf8, - 0x04, 0xbd, 0x02, 0xd9, 0x0b, 0x8b, 0x83, 0xd5, 0xe2, 0x90, 0xbd, 0x6b, 0x11, 0x1c, 0x6a, 0x0a, - 0x71, 0x6d, 0xf9, 0x33, 0xc8, 0x32, 0xf0, 0xa1, 0x40, 0xc2, 0xda, 0x33, 0x82, 0xe8, 0xd2, 0x31, - 0xfa, 0x10, 0x40, 0x23, 0xc4, 0x31, 0x7a, 0x93, 0xc0, 0xf1, 0xce, 0x62, 0xf0, 0x3a, 0xf0, 0xf4, - 0x1a, 0x37, 0x04, 0x8a, 0x6d, 0x05, 0xa6, 0x21, 0x24, 0x0b, 0x39, 0x94, 0x4f, 0xa0, 0x1c, 0xb5, - 0x0d, 0x37, 0x4a, 0x37, 0x16, 0x34, 0x4a, 0x7d, 0x32, 0xe5, 0x53, 0xb1, 0x34, 0x6f, 0xc5, 0xb1, - 0x89, 0xfc, 0x79, 0x12, 0x0a, 0xdd, 0x4b, 0x71, 0xac, 0x63, 0xba, 0x40, 0x81, 0x69, 0x2a, 0xdc, - 0xf3, 0xe0, 0x6d, 0xa5, 0xb4, 0xdf, 0xac, 0x7a, 0xdb, 0x0f, 0xdc, 0xcc, 0xba, 0x55, 0xa9, 0xd7, - 0xb5, 0x13, 0x60, 0xf5, 0x06, 0x48, 0xfe, 0xa9, 0xa2, 0x15, 0x83, 0xa6, 0xeb, 0x0e, 0x76, 0x5d, - 0xb1, 0x36, 0x6f, 0xca, 0x9a, 0x8a, 0xd6, 0xa7, 0xa2, 0xab, 0x92, 0x56, 0xf8, 0x44, 0xd6, 0xa1, - 0x32, 0x93, 0xb6, 0xd0, 0x1b, 0x90, 0xb7, 0x27, 0x3d, 0xd5, 0xdb, 0x9e, 0x99, 0xe0, 0xf1, 0xd8, - 0xe3, 0xa4, 0x37, 0x32, 0xfa, 0x47, 0x78, 0xea, 0xfd, 0x18, 0x7b, 0xd2, 0x3b, 0xe2, 0xbb, 0xc8, - 0xdf, 0x92, 0x0a, 0xbf, 0xe5, 0x02, 0x0a, 0xde, 0xa1, 0x40, 0x3f, 0x0c, 0xc7, 0x89, 0xd7, 0x6a, - 0x8e, 0x4d, 0xa5, 0xc2, 0x7d, 0x28, 0x4c, 0x6e, 0xc1, 0xa6, 0x6b, 0x0c, 0x4c, 0xac, 0xab, 0x41, - 0xcd, 0xc2, 0xde, 0x56, 0x50, 0x2a, 0xfc, 0xc1, 0xb1, 0x57, 0xb0, 0xc8, 0xff, 0x4a, 0x42, 0xc1, - 0x0b, 0x58, 0xf4, 0x52, 0xe8, 0xdc, 0x95, 0x17, 0x74, 0x60, 0x3c, 0xc5, 0xa0, 0x2f, 0x18, 0xfd, - 0xad, 0xa9, 0xab, 0xff, 0xd6, 0xb8, 0x06, 0xaf, 0xd7, 0x69, 0xcf, 0x5c, 0xb9, 0xd3, 0xfe, 0x02, - 0x20, 0x62, 0x11, 0x6d, 0xa4, 0x5e, 0x58, 0xc4, 0x30, 0x07, 0x2a, 0xdf, 0x6c, 0xce, 0xa8, 0xaa, - 0xec, 0xc9, 0x5d, 0xf6, 0xe0, 0x94, 0xed, 0xfb, 0x2f, 0x92, 0x50, 0xf0, 0x73, 0xe3, 0x55, 0xdb, - 0x7c, 0xd7, 0x21, 0x27, 0xe0, 0x9f, 0xf7, 0xf9, 0xc4, 0xcc, 0xef, 0x38, 0x67, 0x42, 0x1d, 0xe7, - 0x3a, 0x14, 0xc6, 0x98, 0x68, 0x8c, 0x20, 0xf0, 0xb2, 0xd1, 0x9f, 0xdf, 0x7a, 0x1d, 0x8a, 0xa1, - 0x8e, 0x2b, 0x8d, 0xbc, 0x93, 0xd6, 0x07, 0xd5, 0x44, 0x3d, 0xff, 0xf9, 0x97, 0x37, 0xd3, 0x27, - 0xf8, 0x53, 0x7a, 0x66, 0x95, 0x56, 0xb3, 0xdd, 0x6a, 0x1e, 0x55, 0x93, 0xf5, 0xe2, 0xe7, 0x5f, - 0xde, 0xcc, 0x2b, 0x98, 0x35, 0x6e, 0x6e, 0xb5, 0x61, 0x23, 0xfc, 0x55, 0xa2, 0x19, 0x04, 0x41, - 0xf9, 0x9d, 0x3b, 0xa7, 0xc7, 0x87, 0xcd, 0x83, 0x6e, 0x4b, 0xbd, 0xdb, 0xe9, 0xb6, 0xaa, 0x49, - 0xf4, 0x28, 0x5c, 0x3b, 0x3e, 0x7c, 0xb7, 0xdd, 0x55, 0x9b, 0xc7, 0x87, 0xad, 0x93, 0xae, 0x7a, - 0xd0, 0xed, 0x1e, 0x34, 0x8f, 0xaa, 0xa9, 0xfd, 0x5f, 0x02, 0x54, 0x0e, 0x1a, 0xcd, 0x43, 0x9a, - 0xfd, 0x8c, 0xbe, 0x26, 0x1a, 0x63, 0x19, 0x56, 0xb5, 0x2f, 0xbd, 0xea, 0xad, 0x2f, 0xef, 0x0b, - 0xa2, 0xdb, 0x90, 0x65, 0x05, 0x3d, 0x5a, 0x7e, 0xf7, 0x5b, 0x5f, 0xd1, 0x28, 0xa4, 0x3f, 0x86, - 0x85, 0xc7, 0xd2, 0xcb, 0xe0, 0xfa, 0xf2, 0xbe, 0x21, 0x52, 0x40, 0x0a, 0x2a, 0xf2, 0xd5, 0x97, - 0xc3, 0xf5, 0x35, 0x7a, 0x89, 0xd4, 0x67, 0x50, 0x16, 0xac, 0xbe, 0x2c, 0xad, 0xaf, 0x01, 0x60, - 0xe8, 0x18, 0xf2, 0x5e, 0x25, 0xb7, 0xea, 0xfa, 0xb6, 0xbe, 0xb2, 0xcf, 0x47, 0x3f, 0x01, 0xaf, - 0xb8, 0x97, 0xdf, 0x45, 0xd7, 0x57, 0x34, 0x2d, 0xd1, 0x21, 0xe4, 0x04, 0xd7, 0x5d, 0x71, 0x25, - 0x5b, 0x5f, 0xd5, 0xb7, 0xa3, 0x9b, 0x16, 0xb4, 0x32, 0x56, 0xdf, 0xb0, 0xd7, 0xd7, 0xe8, 0xc7, - 0xa2, 0x3b, 0x00, 0xa1, 0xfa, 0x7a, 0x8d, 0xab, 0xf3, 0xfa, 0x3a, 0x7d, 0x56, 0xd4, 0x81, 0x82, - 0x5f, 0xee, 0xac, 0xbc, 0xc8, 0xae, 0xaf, 0x6e, 0x78, 0xa2, 0x7b, 0x50, 0x8a, 0xf2, 0xfc, 0xf5, - 0xae, 0xa7, 0xeb, 0x6b, 0x76, 0x32, 0xa9, 0xff, 0x28, 0xe9, 0x5f, 0xef, 0xba, 0xba, 0xbe, 0x66, - 0x63, 0x13, 0x7d, 0x0c, 0x9b, 0xf3, 0xa4, 0x7c, 0xfd, 0xdb, 0xeb, 0xfa, 0x15, 0x5a, 0x9d, 0x68, - 0x0c, 0x68, 0x01, 0x99, 0xbf, 0xc2, 0x65, 0x76, 0xfd, 0x2a, 0x9d, 0xcf, 0x46, 0xeb, 0xab, 0x07, - 0xdb, 0xc9, 0xaf, 0x1f, 0x6c, 0x27, 0xff, 0xf6, 0x60, 0x3b, 0xf9, 0xc5, 0xc3, 0xed, 0xc4, 0xd7, - 0x0f, 0xb7, 0x13, 0x7f, 0x7e, 0xb8, 0x9d, 0xf8, 0xe9, 0xf3, 0x03, 0x83, 0x0c, 0x27, 0xbd, 0xdd, - 0xbe, 0x35, 0xde, 0x0b, 0xff, 0xd3, 0x66, 0xd1, 0xbf, 0x7f, 0x7a, 0x39, 0x96, 0xa8, 0x5e, 0xfe, - 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4e, 0x2d, 0x07, 0xd8, 0x1d, 0x24, 0x00, 0x00, + // 3069 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xcf, 0x73, 0x23, 0xc5, + 0xf5, 0xd7, 0xef, 0x1f, 0xcf, 0xd6, 0x0f, 0xf7, 0x2e, 0x46, 0x0c, 0x8b, 0xbd, 0x0c, 0xc5, 0x02, + 0x0b, 0xd8, 0x5f, 0xbc, 0x5f, 0x08, 0x1b, 0x48, 0xc0, 0x16, 0x5a, 0x64, 0x6c, 0x6c, 0x67, 0xa4, + 0x5d, 0x42, 0x12, 0x76, 0x18, 0x69, 0xda, 0xd2, 0xb0, 0xd2, 0xcc, 0xa0, 0x69, 0x19, 0x9b, 0x53, + 0x2a, 0x95, 0x5c, 0x48, 0x0e, 0x1c, 0xb9, 0xf0, 0x3f, 0xe4, 0x94, 0xca, 0x29, 0x97, 0x54, 0xa5, + 0xa8, 0xca, 0x85, 0x63, 0x0e, 0x29, 0x92, 0x82, 0x5b, 0xfe, 0x81, 0x9c, 0x52, 0x95, 0xea, 0x1f, + 0x33, 0xd3, 0x23, 0x69, 0x24, 0x19, 0xb8, 0xe5, 0xd6, 0xfd, 0xe6, 0xbd, 0x37, 0xd3, 0xaf, 0x5f, + 0xbf, 0xf7, 0x79, 0x6f, 0x1a, 0x1e, 0x25, 0xd8, 0x36, 0xf1, 0x68, 0x68, 0xd9, 0x64, 0xdb, 0xe8, + 0x74, 0xad, 0x6d, 0x72, 0xe1, 0x62, 0x6f, 0xcb, 0x1d, 0x39, 0xc4, 0x41, 0x95, 0xf0, 0xe1, 0x16, + 0x7d, 0xa8, 0x3c, 0x26, 0x71, 0x77, 0x47, 0x17, 0x2e, 0x71, 0xb6, 0xdd, 0x91, 0xe3, 0x9c, 0x72, + 0x7e, 0xe5, 0x9a, 0xf4, 0x98, 0xe9, 0x91, 0xb5, 0x45, 0x9e, 0x0a, 0xe1, 0x07, 0xf8, 0xc2, 0x7f, + 0xfa, 0xd8, 0x94, 0xac, 0x6b, 0x8c, 0x8c, 0xa1, 0xff, 0x78, 0xb3, 0xe7, 0x38, 0xbd, 0x01, 0xde, + 0x66, 0xb3, 0xce, 0xf8, 0x74, 0x9b, 0x58, 0x43, 0xec, 0x11, 0x63, 0xe8, 0x0a, 0x86, 0xab, 0x3d, + 0xa7, 0xe7, 0xb0, 0xe1, 0x36, 0x1d, 0x71, 0xaa, 0xfa, 0x87, 0x22, 0xe4, 0x35, 0xfc, 0xe1, 0x18, + 0x7b, 0x04, 0xed, 0x40, 0x06, 0x77, 0xfb, 0x4e, 0x2d, 0x79, 0x3d, 0xf9, 0xf4, 0xca, 0xce, 0xb5, + 0xad, 0x89, 0xc5, 0x6d, 0x09, 0xbe, 0x46, 0xb7, 0xef, 0x34, 0x13, 0x1a, 0xe3, 0x45, 0x2f, 0x42, + 0xf6, 0x74, 0x30, 0xf6, 0xfa, 0xb5, 0x14, 0x13, 0x7a, 0x2c, 0x4e, 0xe8, 0x0e, 0x65, 0x6a, 0x26, + 0x34, 0xce, 0x4d, 0x5f, 0x65, 0xd9, 0xa7, 0x4e, 0x2d, 0x3d, 0xff, 0x55, 0xfb, 0xf6, 0x29, 0x7b, + 0x15, 0xe5, 0x45, 0x7b, 0x00, 0x1e, 0x26, 0xba, 0xe3, 0x12, 0xcb, 0xb1, 0x6b, 0x19, 0x26, 0xf9, + 0x78, 0x9c, 0x64, 0x0b, 0x93, 0x63, 0xc6, 0xd8, 0x4c, 0x68, 0x45, 0xcf, 0x9f, 0x50, 0x1d, 0x96, + 0x6d, 0x11, 0xbd, 0xdb, 0x37, 0x2c, 0xbb, 0x96, 0x9d, 0xaf, 0x63, 0xdf, 0xb6, 0x48, 0x9d, 0x32, + 0x52, 0x1d, 0x96, 0x3f, 0xa1, 0x4b, 0xfe, 0x70, 0x8c, 0x47, 0x17, 0xb5, 0xdc, 0xfc, 0x25, 0xff, + 0x84, 0x32, 0xd1, 0x25, 0x33, 0x6e, 0xd4, 0x80, 0x95, 0x0e, 0xee, 0x59, 0xb6, 0xde, 0x19, 0x38, + 0xdd, 0x07, 0xb5, 0x3c, 0x13, 0x56, 0xe3, 0x84, 0xf7, 0x28, 0xeb, 0x1e, 0xe5, 0x6c, 0x26, 0x34, + 0xe8, 0x04, 0x33, 0xf4, 0x2a, 0x14, 0xba, 0x7d, 0xdc, 0x7d, 0xa0, 0x93, 0xf3, 0x5a, 0x81, 0xe9, + 0xd8, 0x8c, 0xd3, 0x51, 0xa7, 0x7c, 0xed, 0xf3, 0x66, 0x42, 0xcb, 0x77, 0xf9, 0x90, 0xae, 0xdf, + 0xc4, 0x03, 0xeb, 0x0c, 0x8f, 0xa8, 0x7c, 0x71, 0xfe, 0xfa, 0xdf, 0xe0, 0x9c, 0x4c, 0x43, 0xd1, + 0xf4, 0x27, 0xe8, 0x35, 0x28, 0x62, 0xdb, 0x14, 0xcb, 0x00, 0xa6, 0xe2, 0x7a, 0xac, 0xaf, 0xd8, + 0xa6, 0xbf, 0x88, 0x02, 0x16, 0x63, 0xf4, 0x32, 0xe4, 0xba, 0xce, 0x70, 0x68, 0x91, 0xda, 0x0a, + 0x93, 0xde, 0x88, 0x5d, 0x00, 0xe3, 0x6a, 0x26, 0x34, 0xc1, 0x8f, 0x8e, 0xa0, 0x3c, 0xb0, 0x3c, + 0xa2, 0x7b, 0xb6, 0xe1, 0x7a, 0x7d, 0x87, 0x78, 0xb5, 0x55, 0xa6, 0xe1, 0xc9, 0x38, 0x0d, 0x87, + 0x96, 0x47, 0x5a, 0x3e, 0x73, 0x33, 0xa1, 0x95, 0x06, 0x32, 0x81, 0xea, 0x73, 0x4e, 0x4f, 0xf1, + 0x28, 0x50, 0x58, 0x2b, 0xcd, 0xd7, 0x77, 0x4c, 0xb9, 0x7d, 0x79, 0xaa, 0xcf, 0x91, 0x09, 0xe8, + 0xe7, 0x70, 0x65, 0xe0, 0x18, 0x66, 0xa0, 0x4e, 0xef, 0xf6, 0xc7, 0xf6, 0x83, 0x5a, 0x99, 0x29, + 0x7d, 0x26, 0xf6, 0x23, 0x1d, 0xc3, 0xf4, 0x55, 0xd4, 0xa9, 0x40, 0x33, 0xa1, 0xad, 0x0d, 0x26, + 0x89, 0xe8, 0x3e, 0x5c, 0x35, 0x5c, 0x77, 0x70, 0x31, 0xa9, 0xbd, 0xc2, 0xb4, 0xdf, 0x8c, 0xd3, + 0xbe, 0x4b, 0x65, 0x26, 0xd5, 0x23, 0x63, 0x8a, 0x8a, 0x34, 0xa8, 0x72, 0x07, 0xf5, 0x2c, 0x13, + 0x8b, 0xed, 0x7d, 0x88, 0xe9, 0xbe, 0x31, 0xd7, 0x4b, 0x5b, 0x96, 0x89, 0xfd, 0x4d, 0x2e, 0x77, + 0x22, 0x14, 0x74, 0x0c, 0x15, 0xdf, 0xdf, 0x98, 0x56, 0x72, 0x5e, 0x5b, 0x9f, 0x6f, 0x61, 0xe1, + 0x74, 0x54, 0x05, 0x73, 0xbc, 0x92, 0x29, 0x13, 0xf6, 0xf2, 0x90, 0x3d, 0x33, 0x06, 0x63, 0xac, + 0x3e, 0x05, 0x2b, 0x52, 0x3c, 0x42, 0x35, 0xc8, 0x0f, 0xb1, 0xe7, 0x19, 0x3d, 0xcc, 0xc2, 0x57, + 0x51, 0xf3, 0xa7, 0x6a, 0x19, 0x56, 0xe5, 0x18, 0xa4, 0x0e, 0x03, 0x41, 0x1a, 0x5d, 0xa8, 0xe0, + 0x19, 0x1e, 0x79, 0x34, 0xa4, 0x08, 0x41, 0x31, 0x45, 0x4f, 0x40, 0x89, 0x19, 0x41, 0xf7, 0x9f, + 0xd3, 0x10, 0x97, 0xd1, 0x56, 0x19, 0xf1, 0x9e, 0x60, 0xda, 0x84, 0x15, 0x77, 0xc7, 0x0d, 0x58, + 0xd2, 0x8c, 0x05, 0xdc, 0x1d, 0x57, 0x30, 0xa8, 0x3f, 0x84, 0xea, 0x64, 0x48, 0x42, 0x55, 0x48, + 0x3f, 0xc0, 0x17, 0xe2, 0x7d, 0x74, 0x88, 0xae, 0x8a, 0x65, 0xb1, 0x77, 0x14, 0x35, 0xb1, 0xc6, + 0xbf, 0xa6, 0x02, 0xe1, 0x20, 0x16, 0xa1, 0x97, 0x21, 0x43, 0x43, 0xbb, 0x88, 0xd2, 0xca, 0x16, + 0x8f, 0xfb, 0x5b, 0x7e, 0xdc, 0xdf, 0x6a, 0xfb, 0x71, 0x7f, 0xaf, 0xf0, 0xc5, 0x57, 0x9b, 0x89, + 0x4f, 0xff, 0xb1, 0x99, 0xd4, 0x98, 0x04, 0x7a, 0x84, 0x86, 0x0e, 0xc3, 0xb2, 0x75, 0xcb, 0x14, + 0xef, 0xc9, 0xb3, 0xf9, 0xbe, 0x89, 0x0e, 0xa0, 0xda, 0x75, 0x6c, 0x0f, 0xdb, 0xde, 0xd8, 0xd3, + 0x79, 0x5e, 0x11, 0xb1, 0x79, 0xfa, 0x68, 0xd7, 0x7d, 0xc6, 0x13, 0xc6, 0xa7, 0x55, 0xba, 0x51, + 0x02, 0xba, 0x03, 0x70, 0x66, 0x0c, 0x2c, 0xd3, 0x20, 0xce, 0xc8, 0xab, 0x65, 0xae, 0xa7, 0x67, + 0xaa, 0xb9, 0xe7, 0xb3, 0xdc, 0x75, 0x4d, 0x83, 0xe0, 0xbd, 0x0c, 0xfd, 0x5a, 0x4d, 0x92, 0x44, + 0x37, 0xa0, 0x62, 0xb8, 0xae, 0xee, 0x11, 0x83, 0x60, 0xbd, 0x73, 0x41, 0xb0, 0xc7, 0x22, 0xf6, + 0xaa, 0x56, 0x32, 0x5c, 0xb7, 0x45, 0xa9, 0x7b, 0x94, 0x88, 0x9e, 0x84, 0x32, 0x8d, 0xce, 0x96, + 0x31, 0xd0, 0xfb, 0xd8, 0xea, 0xf5, 0x09, 0x8b, 0xcc, 0x69, 0xad, 0x24, 0xa8, 0x4d, 0x46, 0x54, + 0xcd, 0xc0, 0x11, 0x58, 0x64, 0x46, 0x08, 0x32, 0xa6, 0x41, 0x0c, 0x66, 0xc8, 0x55, 0x8d, 0x8d, + 0x29, 0xcd, 0x35, 0x48, 0x5f, 0x98, 0x87, 0x8d, 0xd1, 0x3a, 0xe4, 0x84, 0xda, 0x34, 0x53, 0x2b, + 0x66, 0x74, 0xcf, 0xdc, 0x91, 0x73, 0x86, 0x59, 0x2a, 0x2a, 0x68, 0x7c, 0xa2, 0xfe, 0x3a, 0x05, + 0x6b, 0x53, 0x31, 0x9c, 0xea, 0xed, 0x1b, 0x5e, 0xdf, 0x7f, 0x17, 0x1d, 0xa3, 0x97, 0xa8, 0x5e, + 0xc3, 0xc4, 0x23, 0x91, 0x3b, 0x6b, 0xb2, 0x89, 0x38, 0x2e, 0x68, 0xb2, 0xe7, 0xc2, 0x34, 0x82, + 0x1b, 0x1d, 0x43, 0x75, 0x60, 0x78, 0x44, 0xe7, 0x31, 0x51, 0x97, 0xf2, 0xe8, 0x74, 0x26, 0x38, + 0x34, 0xfc, 0x28, 0x4a, 0x9d, 0x5d, 0x28, 0x2a, 0x0f, 0x22, 0x54, 0xa4, 0xc1, 0xd5, 0xce, 0xc5, + 0xc7, 0x86, 0x4d, 0x2c, 0x1b, 0xeb, 0x53, 0x3b, 0xf7, 0xc8, 0x94, 0xd2, 0xc6, 0x99, 0x65, 0x62, + 0xbb, 0xeb, 0x6f, 0xd9, 0x95, 0x40, 0x38, 0xd8, 0x52, 0x4f, 0xd5, 0xa0, 0x1c, 0xcd, 0x42, 0xa8, + 0x0c, 0x29, 0x72, 0x2e, 0x0c, 0x90, 0x22, 0xe7, 0xe8, 0xff, 0x20, 0x43, 0x17, 0xc9, 0x16, 0x5f, + 0x9e, 0x01, 0x01, 0x84, 0x5c, 0xfb, 0xc2, 0xc5, 0x1a, 0xe3, 0x54, 0xd5, 0xe0, 0x34, 0x04, 0x99, + 0x69, 0x52, 0xab, 0xfa, 0x0c, 0x54, 0x26, 0x52, 0x8f, 0xb4, 0x7f, 0x49, 0x79, 0xff, 0xd4, 0x0a, + 0x94, 0x22, 0x79, 0x46, 0x5d, 0x87, 0xab, 0xb3, 0xd2, 0x86, 0xda, 0x0f, 0xe8, 0x91, 0xf0, 0x8f, + 0x5e, 0x84, 0x42, 0x90, 0x37, 0xf8, 0x69, 0x9c, 0xb6, 0x95, 0xcf, 0xac, 0x05, 0xac, 0xf4, 0x18, + 0x52, 0xb7, 0x66, 0xfe, 0x90, 0x62, 0x1f, 0x9e, 0x37, 0x5c, 0xb7, 0x69, 0x78, 0x7d, 0xf5, 0x7d, + 0xa8, 0xc5, 0xe5, 0x84, 0x89, 0x65, 0x64, 0x02, 0x37, 0x5c, 0x87, 0xdc, 0xa9, 0x33, 0x1a, 0x1a, + 0x84, 0x29, 0x2b, 0x69, 0x62, 0x46, 0xdd, 0x93, 0xe7, 0x87, 0x34, 0x23, 0xf3, 0x89, 0xaa, 0xc3, + 0x23, 0xb1, 0x79, 0x81, 0x8a, 0x58, 0xb6, 0x89, 0xb9, 0x3d, 0x4b, 0x1a, 0x9f, 0x84, 0x8a, 0xf8, + 0xc7, 0xf2, 0x09, 0x7d, 0xad, 0xc7, 0xd6, 0xca, 0xf4, 0x17, 0x35, 0x31, 0x53, 0x7f, 0x9f, 0x84, + 0x87, 0x66, 0x66, 0x87, 0xef, 0xf5, 0x0c, 0x1c, 0x40, 0x45, 0xe4, 0x13, 0x7d, 0x84, 0xbd, 0xf1, + 0x80, 0xd0, 0x70, 0x95, 0x9e, 0x89, 0xc6, 0x78, 0xe2, 0xd0, 0x18, 0x97, 0xd0, 0x52, 0xf2, 0x24, + 0x9a, 0xa7, 0xde, 0x08, 0xf6, 0x37, 0x92, 0x7c, 0xa6, 0x7c, 0xeb, 0x77, 0x00, 0x05, 0x0d, 0x7b, + 0x2e, 0x0d, 0x77, 0x68, 0x0f, 0x8a, 0xf8, 0xbc, 0x8b, 0x39, 0x18, 0x4d, 0xc6, 0x82, 0x39, 0xce, + 0xdd, 0xf0, 0x39, 0x29, 0x92, 0x0a, 0xc4, 0xd0, 0x2d, 0x01, 0xb8, 0xe3, 0xb1, 0xb3, 0x10, 0x97, + 0x11, 0xf7, 0x4b, 0x3e, 0xe2, 0x4e, 0xc7, 0x82, 0x27, 0x2e, 0x35, 0x01, 0xb9, 0x6f, 0x09, 0xc8, + 0x9d, 0x59, 0xf0, 0xb2, 0x08, 0xe6, 0xae, 0x47, 0x30, 0x77, 0x76, 0xc1, 0x32, 0x63, 0x40, 0x77, + 0x3d, 0x02, 0xba, 0x73, 0x0b, 0x94, 0xc4, 0xa0, 0xee, 0x97, 0x7c, 0xd4, 0x9d, 0x5f, 0xb0, 0xec, + 0x09, 0xd8, 0x7d, 0x27, 0x0a, 0xbb, 0x39, 0x64, 0x7e, 0x22, 0x56, 0x3a, 0x16, 0x77, 0xff, 0x48, + 0xc2, 0xdd, 0xc5, 0x58, 0xd0, 0xcb, 0x95, 0xcc, 0x00, 0xde, 0xf5, 0x08, 0xf0, 0x86, 0x05, 0x36, + 0x88, 0x41, 0xde, 0xaf, 0xcb, 0xc8, 0x7b, 0x25, 0x16, 0xbc, 0x0b, 0xa7, 0x99, 0x05, 0xbd, 0x6f, + 0x07, 0xd0, 0x7b, 0x35, 0xb6, 0x76, 0x10, 0x6b, 0x98, 0xc4, 0xde, 0xc7, 0x53, 0xd8, 0xbb, 0x14, + 0x0b, 0x0e, 0xb9, 0x8a, 0x05, 0xe0, 0xfb, 0x78, 0x0a, 0x7c, 0x97, 0x17, 0x28, 0x5c, 0x80, 0xbe, + 0x7f, 0x31, 0x1b, 0x7d, 0xc7, 0xe3, 0x63, 0xf1, 0x99, 0xcb, 0xc1, 0x6f, 0x3d, 0x06, 0x7e, 0x57, + 0x99, 0xfa, 0x67, 0x63, 0xd5, 0x2f, 0x8d, 0xbf, 0x5b, 0xb1, 0xf8, 0xfb, 0xa9, 0xf9, 0xee, 0x3a, + 0x0f, 0x80, 0x9f, 0xc4, 0x01, 0xf0, 0x1b, 0x8b, 0x9c, 0x6f, 0x21, 0x02, 0x7f, 0x86, 0x02, 0x9d, + 0x89, 0xf8, 0x46, 0x93, 0x05, 0x1e, 0x8d, 0x9c, 0x91, 0x00, 0xb7, 0x7c, 0xa2, 0x3e, 0x4d, 0xa1, + 0x57, 0x18, 0xcb, 0xe6, 0xa0, 0x75, 0x96, 0x94, 0xa5, 0xf8, 0xa5, 0xfe, 0x31, 0x19, 0xca, 0x32, + 0xb4, 0x22, 0xc3, 0xb6, 0xa2, 0x80, 0x6d, 0x12, 0x88, 0x4f, 0x45, 0x41, 0xfc, 0x26, 0xac, 0xd0, + 0x64, 0x3b, 0x81, 0xcf, 0x0d, 0xd7, 0xc7, 0xe7, 0xe8, 0x26, 0xac, 0x31, 0x34, 0xc5, 0xa1, 0xbe, + 0xc8, 0xb0, 0x19, 0x06, 0x14, 0x2a, 0xf4, 0x01, 0x37, 0x2c, 0x4f, 0xb5, 0xcf, 0xc3, 0x15, 0x89, + 0x37, 0x48, 0xe2, 0x1c, 0x94, 0x56, 0x03, 0xee, 0x5d, 0x91, 0xcd, 0xdf, 0x0e, 0x0d, 0x14, 0x62, + 0x7f, 0x04, 0x99, 0xae, 0x63, 0x62, 0x91, 0x62, 0xd9, 0x98, 0xd6, 0x03, 0x03, 0xa7, 0x27, 0x12, + 0x29, 0x1d, 0x52, 0xae, 0x20, 0x58, 0x17, 0x79, 0x2c, 0x56, 0xff, 0x9c, 0x0c, 0xf5, 0x85, 0xe5, + 0xc0, 0x2c, 0xe4, 0x9e, 0xfc, 0x7e, 0x90, 0x7b, 0xea, 0x5b, 0x23, 0x77, 0x19, 0xe2, 0xa4, 0xa3, + 0x10, 0xe7, 0xdf, 0xc9, 0x70, 0x87, 0x03, 0x1c, 0xfe, 0xed, 0x2c, 0x12, 0xe2, 0x95, 0x2c, 0xdb, + 0x2f, 0x81, 0x57, 0x44, 0x75, 0x95, 0x63, 0xef, 0x8d, 0x56, 0x57, 0x79, 0x8e, 0x60, 0xd8, 0x04, + 0xbd, 0x0c, 0x45, 0xd6, 0x9b, 0xd3, 0x1d, 0xd7, 0x13, 0x79, 0xe1, 0x51, 0x79, 0xad, 0xbc, 0x05, + 0xb7, 0x75, 0x42, 0x79, 0x8e, 0x5d, 0x4f, 0x2b, 0xb8, 0x62, 0x24, 0x41, 0xb1, 0x62, 0xa4, 0x22, + 0xb8, 0x06, 0x45, 0xfa, 0xf5, 0x9e, 0x6b, 0x74, 0x31, 0x8b, 0xf1, 0x45, 0x2d, 0x24, 0xa8, 0xf7, + 0x01, 0x4d, 0x67, 0x19, 0xd4, 0x84, 0x1c, 0x3e, 0xc3, 0x36, 0xa1, 0xbb, 0x46, 0xcd, 0xbd, 0x3e, + 0x03, 0x6e, 0x63, 0x9b, 0xec, 0xd5, 0xa8, 0x91, 0xff, 0xf5, 0xd5, 0x66, 0x95, 0x73, 0x3f, 0xe7, + 0x0c, 0x2d, 0x82, 0x87, 0x2e, 0xb9, 0xd0, 0x84, 0xbc, 0xfa, 0xf7, 0x14, 0xc5, 0xbe, 0x91, 0x0c, + 0x34, 0xd3, 0xb6, 0xfe, 0x01, 0x4a, 0x49, 0x75, 0xcf, 0x72, 0xf6, 0xde, 0x00, 0xe8, 0x19, 0x9e, + 0xfe, 0x91, 0x61, 0x13, 0x6c, 0x0a, 0xa3, 0x4b, 0x14, 0xa4, 0x40, 0x81, 0xce, 0xc6, 0x1e, 0x36, + 0x45, 0x09, 0x16, 0xcc, 0xa5, 0x75, 0xe6, 0xbf, 0xdb, 0x3a, 0xa3, 0x56, 0x2e, 0x4c, 0x58, 0x59, + 0xc2, 0xa5, 0x45, 0x19, 0x97, 0xd2, 0x6f, 0x73, 0x47, 0x96, 0x33, 0xb2, 0xc8, 0x05, 0xdb, 0x9a, + 0xb4, 0x16, 0xcc, 0x69, 0xa5, 0x3f, 0xc4, 0x43, 0xd7, 0x71, 0x06, 0x3a, 0x0f, 0x5e, 0x2b, 0x4c, + 0x74, 0x55, 0x10, 0x1b, 0x2c, 0x86, 0xfd, 0x26, 0x15, 0x1e, 0xbf, 0xb0, 0xfe, 0xf8, 0x9f, 0x33, + 0xb0, 0xfa, 0x5b, 0xd6, 0x94, 0x88, 0x62, 0x0c, 0xd4, 0x82, 0xb5, 0xe0, 0xf8, 0xeb, 0x63, 0x16, + 0x16, 0x7c, 0x87, 0x5e, 0x36, 0x7e, 0x54, 0xcf, 0xa2, 0x64, 0x0f, 0xfd, 0x14, 0x1e, 0x9e, 0x08, + 0x6d, 0x81, 0xea, 0xd4, 0x92, 0x11, 0xee, 0xa1, 0x68, 0x84, 0xf3, 0x35, 0x87, 0xb6, 0x4a, 0x7f, + 0xc7, 0x43, 0xb7, 0x4f, 0xeb, 0x5c, 0x19, 0x31, 0xcd, 0xdc, 0xfd, 0x27, 0xa0, 0x34, 0xc2, 0xc4, + 0xb0, 0x6c, 0x3d, 0xd2, 0x49, 0x58, 0xe5, 0x44, 0xd1, 0x9f, 0x38, 0xa1, 0x85, 0xd3, 0x0c, 0xe4, + 0x84, 0x7e, 0x00, 0xc5, 0x10, 0x74, 0x25, 0x63, 0x8a, 0xf2, 0xa0, 0xd0, 0x0c, 0x79, 0xd5, 0x3f, + 0x25, 0x43, 0x95, 0xd1, 0xd2, 0xb5, 0x01, 0x39, 0x5e, 0x37, 0x31, 0xc7, 0x2d, 0xef, 0x3c, 0xbf, + 0x1c, 0xe6, 0xda, 0xe2, 0x25, 0x93, 0x26, 0x84, 0xd5, 0xfb, 0x90, 0xe3, 0x14, 0xb4, 0x02, 0xf9, + 0xbb, 0x47, 0x07, 0x47, 0xc7, 0xef, 0x1c, 0x55, 0x13, 0x08, 0x20, 0xb7, 0x5b, 0xaf, 0x37, 0x4e, + 0xda, 0xd5, 0x24, 0x2a, 0x42, 0x76, 0x77, 0xef, 0x58, 0x6b, 0x57, 0x53, 0x94, 0xac, 0x35, 0xde, + 0x6a, 0xd4, 0xdb, 0xd5, 0x34, 0x5a, 0x83, 0x12, 0x1f, 0xeb, 0x77, 0x8e, 0xb5, 0xb7, 0x77, 0xdb, + 0xd5, 0x8c, 0x44, 0x6a, 0x35, 0x8e, 0xde, 0x68, 0x68, 0xd5, 0xac, 0xfa, 0x02, 0xad, 0x56, 0x63, + 0x50, 0x5a, 0x58, 0x97, 0x26, 0xa5, 0xba, 0x54, 0xfd, 0x2c, 0x05, 0x4a, 0x3c, 0xf4, 0x42, 0x6f, + 0x4d, 0x2c, 0x7c, 0xe7, 0x12, 0xb8, 0x6d, 0x62, 0xf5, 0xe8, 0x49, 0x28, 0x8f, 0xf0, 0x29, 0x26, + 0xdd, 0x3e, 0x87, 0x82, 0x3c, 0x63, 0x96, 0xb4, 0x92, 0xa0, 0x32, 0x21, 0x8f, 0xb3, 0x7d, 0x80, + 0xbb, 0x44, 0xe7, 0xa1, 0x88, 0x3b, 0x5d, 0x91, 0xb2, 0x51, 0x6a, 0x8b, 0x13, 0xd5, 0xf7, 0x2f, + 0x65, 0xcb, 0x22, 0x64, 0xb5, 0x46, 0x5b, 0x7b, 0xb7, 0x9a, 0x46, 0x08, 0xca, 0x6c, 0xa8, 0xb7, + 0x8e, 0x76, 0x4f, 0x5a, 0xcd, 0x63, 0x6a, 0xcb, 0x2b, 0x50, 0xf1, 0x6d, 0xe9, 0x13, 0xb3, 0x6a, + 0x07, 0xd6, 0x67, 0xe3, 0xc6, 0xef, 0x31, 0x09, 0x7d, 0x26, 0xb9, 0x5c, 0xb4, 0x9a, 0x9e, 0x15, + 0x29, 0x23, 0x91, 0x26, 0x35, 0x19, 0xca, 0x6f, 0x07, 0x7b, 0x95, 0x61, 0x7b, 0xf5, 0xf8, 0xdc, + 0xda, 0x9e, 0x35, 0x8a, 0xfc, 0xad, 0xf1, 0x0f, 0x61, 0x3a, 0x3c, 0x84, 0xea, 0x2f, 0x53, 0x50, + 0x99, 0x88, 0x0f, 0xe8, 0x16, 0x64, 0x39, 0xd0, 0x4e, 0x4e, 0x57, 0xc5, 0xbc, 0xfd, 0xc0, 0x0c, + 0x24, 0xa2, 0x09, 0xe7, 0x45, 0xaf, 0x42, 0x01, 0x8b, 0x16, 0xd8, 0xac, 0x40, 0xc4, 0xe5, 0xfc, + 0x26, 0x99, 0x10, 0x0d, 0x24, 0xd0, 0x6b, 0x50, 0x0c, 0x22, 0x9d, 0xa8, 0xe1, 0x1f, 0x9f, 0x16, + 0x0f, 0x62, 0xa4, 0x90, 0x0f, 0x65, 0xd0, 0xed, 0x10, 0xec, 0x66, 0xa6, 0x8b, 0x38, 0x21, 0xce, + 0x19, 0x84, 0xb0, 0xcf, 0xaf, 0xd6, 0x61, 0x45, 0x5a, 0x0f, 0x7a, 0x14, 0x8a, 0x43, 0xe3, 0x5c, + 0xb4, 0x56, 0x79, 0x73, 0xac, 0x30, 0x34, 0xce, 0x79, 0x57, 0xf5, 0x61, 0xc8, 0xd3, 0x87, 0x3d, + 0x83, 0x47, 0xdb, 0xb4, 0x96, 0x1b, 0x1a, 0xe7, 0x6f, 0x1a, 0x9e, 0xfa, 0x1e, 0x94, 0xa3, 0x6d, + 0x45, 0x7a, 0x12, 0x47, 0xce, 0xd8, 0x36, 0x99, 0x8e, 0xac, 0xc6, 0x27, 0xe8, 0x45, 0xc8, 0x9e, + 0x39, 0x3c, 0x58, 0xcf, 0x0e, 0x59, 0xf7, 0x1c, 0x82, 0xa5, 0xb6, 0x24, 0xe7, 0x56, 0x3f, 0x86, + 0x2c, 0x73, 0x36, 0xba, 0x87, 0xac, 0x41, 0x28, 0x80, 0x3e, 0x1d, 0xa3, 0xf7, 0x00, 0x0c, 0x42, + 0x46, 0x56, 0x67, 0x1c, 0x2a, 0xde, 0x9c, 0xed, 0xac, 0xbb, 0x3e, 0xdf, 0xde, 0x35, 0xe1, 0xb5, + 0x57, 0x43, 0x51, 0xc9, 0x73, 0x25, 0x85, 0xea, 0x11, 0x94, 0xa3, 0xb2, 0x72, 0xab, 0x7e, 0x75, + 0x46, 0xab, 0x3e, 0x00, 0x93, 0x01, 0x14, 0x4d, 0xf3, 0x66, 0x30, 0x9b, 0xa8, 0x9f, 0x24, 0xa1, + 0xe0, 0xfb, 0x67, 0x5c, 0x1f, 0x32, 0x14, 0x4d, 0xc9, 0x5d, 0x37, 0xde, 0x7c, 0x4a, 0x07, 0xed, + 0xd2, 0xd7, 0x23, 0x87, 0x61, 0xa9, 0xe6, 0x81, 0xdf, 0x33, 0x13, 0xc1, 0xfa, 0x15, 0x28, 0x06, + 0x5e, 0x45, 0x2b, 0x26, 0xc3, 0x34, 0x47, 0xd8, 0xf3, 0xc4, 0xda, 0xfc, 0x29, 0x6b, 0x6b, 0x3b, + 0x1f, 0x89, 0xbe, 0x5e, 0x5a, 0xe3, 0x13, 0xd5, 0x84, 0xca, 0x44, 0xda, 0x46, 0xaf, 0x40, 0xde, + 0x1d, 0x77, 0x74, 0xdf, 0x3c, 0x13, 0xbf, 0x71, 0x7d, 0xf4, 0x3c, 0xee, 0x0c, 0xac, 0xee, 0x01, + 0xbe, 0xf0, 0x3f, 0xc6, 0x1d, 0x77, 0x0e, 0xb8, 0x15, 0xf9, 0x5b, 0x52, 0xf2, 0x5b, 0xce, 0xa0, + 0xe0, 0x3b, 0x05, 0xfa, 0xb1, 0x7c, 0x4e, 0xfc, 0x9f, 0x1d, 0xb1, 0x50, 0x42, 0xa8, 0x97, 0x8e, + 0xc9, 0x4d, 0x58, 0xf3, 0xac, 0x9e, 0x8d, 0x4d, 0x3d, 0xac, 0xd9, 0xd8, 0xdb, 0x0a, 0x5a, 0x85, + 0x3f, 0x38, 0xf4, 0x0b, 0x36, 0xf5, 0x3f, 0x49, 0x28, 0xf8, 0x07, 0x16, 0xbd, 0x20, 0xf9, 0x5d, + 0x79, 0x46, 0xa3, 0xcc, 0x67, 0x0c, 0x3b, 0xd3, 0xd1, 0x6f, 0x4d, 0x5d, 0xfe, 0x5b, 0xe3, 0x7e, + 0x31, 0xf8, 0xff, 0x7a, 0x32, 0x97, 0xfe, 0xd7, 0xf3, 0x1c, 0x20, 0xe2, 0x10, 0x63, 0xa0, 0x9f, + 0x39, 0xc4, 0xb2, 0x7b, 0x3a, 0x37, 0x36, 0x47, 0x94, 0x55, 0xf6, 0xe4, 0x1e, 0x7b, 0x70, 0xc2, + 0xec, 0x3e, 0x82, 0x22, 0x0f, 0xa5, 0x2d, 0xab, 0x27, 0x85, 0xdd, 0xe4, 0x65, 0xc3, 0x6e, 0x15, + 0xd2, 0x9e, 0xd5, 0x13, 0x27, 0x83, 0x0e, 0x65, 0x3f, 0x4b, 0x47, 0xfc, 0x4c, 0x7d, 0x0f, 0x56, + 0x65, 0x3d, 0x34, 0xde, 0x90, 0x73, 0x5d, 0xea, 0x10, 0xe7, 0xc8, 0x39, 0xad, 0x18, 0xd1, 0xff, + 0x43, 0xc6, 0xb3, 0x7a, 0xfe, 0x69, 0x57, 0x62, 0xbe, 0xa6, 0x65, 0xf5, 0x84, 0x5d, 0x19, 0xb7, + 0xfa, 0xab, 0x24, 0x14, 0x02, 0xb8, 0x73, 0xd9, 0xde, 0xf9, 0x3a, 0xe4, 0x44, 0x46, 0xe7, 0xcd, + 0x73, 0x31, 0x0b, 0x5a, 0xd8, 0x19, 0xa9, 0x85, 0xad, 0x40, 0x61, 0x88, 0x89, 0xc1, 0xd2, 0x0d, + 0xef, 0x04, 0x04, 0xf3, 0x9b, 0xb7, 0x61, 0x45, 0xfa, 0x8d, 0x41, 0xcd, 0x73, 0xd4, 0x78, 0xa7, + 0x9a, 0x50, 0xf2, 0x9f, 0x7c, 0x7e, 0x3d, 0x7d, 0x84, 0x3f, 0xa2, 0xe6, 0xd1, 0x1a, 0xf5, 0x66, + 0xa3, 0x7e, 0x50, 0x4d, 0x2a, 0x2b, 0x9f, 0x7c, 0x7e, 0x3d, 0xaf, 0x61, 0xd6, 0x32, 0xbc, 0xd9, + 0x84, 0x55, 0xd9, 0xd1, 0xa2, 0xa0, 0x00, 0x41, 0xf9, 0x8d, 0xbb, 0x27, 0x87, 0xfb, 0xf5, 0xdd, + 0x76, 0x43, 0xbf, 0x77, 0xdc, 0x6e, 0x54, 0x93, 0xe8, 0x61, 0xb8, 0x72, 0xb8, 0xff, 0x66, 0xb3, + 0xad, 0xd7, 0x0f, 0xf7, 0x1b, 0x47, 0x6d, 0x7d, 0xb7, 0xdd, 0xde, 0xad, 0x1f, 0x54, 0x53, 0x37, + 0x9f, 0x87, 0xea, 0xe4, 0x86, 0xa1, 0x02, 0x64, 0x5a, 0x0f, 0x2c, 0xb7, 0x9a, 0x40, 0x79, 0x48, + 0xbf, 0x8b, 0xbd, 0x6a, 0x12, 0xe5, 0x20, 0x75, 0xe4, 0x54, 0x53, 0x3b, 0x7f, 0x59, 0x81, 0xca, + 0xee, 0x5e, 0x7d, 0x9f, 0xe2, 0x1f, 0xab, 0x6b, 0x88, 0x0e, 0x6e, 0x86, 0xf5, 0x6d, 0xe6, 0xde, + 0x09, 0x51, 0xe6, 0x37, 0xb0, 0xd1, 0x1d, 0xc8, 0xb2, 0x96, 0x0e, 0x9a, 0x7f, 0x49, 0x44, 0x59, + 0xd0, 0xd1, 0xa6, 0x1f, 0xc3, 0x02, 0xc4, 0xdc, 0x5b, 0x23, 0xca, 0xfc, 0x06, 0x37, 0xd2, 0xa0, + 0x18, 0xf6, 0x64, 0x16, 0xdf, 0x22, 0x51, 0x96, 0x68, 0x7a, 0x53, 0x9d, 0x61, 0x61, 0xb8, 0xf8, + 0x56, 0x85, 0xb2, 0x44, 0x08, 0x47, 0x87, 0x90, 0xf7, 0x6b, 0xf9, 0x45, 0xf7, 0x3c, 0x94, 0x85, + 0x0d, 0x69, 0xba, 0x05, 0xbc, 0xe7, 0x32, 0xff, 0xd2, 0x8a, 0xb2, 0xa0, 0xbb, 0x8e, 0xf6, 0x21, + 0x27, 0xaa, 0x9d, 0x05, 0x77, 0x37, 0x94, 0x45, 0x0d, 0x66, 0x6a, 0xb4, 0xb0, 0x99, 0xb5, 0xf8, + 0x2a, 0x8e, 0xb2, 0xc4, 0x8f, 0x03, 0x74, 0x17, 0x40, 0xea, 0xb0, 0x2c, 0x71, 0xc7, 0x46, 0x59, + 0xe6, 0x87, 0x00, 0x3a, 0x86, 0x42, 0x50, 0xf0, 0x2e, 0xbc, 0xf1, 0xa2, 0x2c, 0xee, 0xcc, 0xa3, + 0xfb, 0x50, 0x8a, 0x56, 0x7a, 0xcb, 0xdd, 0x63, 0x51, 0x96, 0x6c, 0xb9, 0x53, 0xfd, 0xd1, 0xb2, + 0x6f, 0xb9, 0x7b, 0x2d, 0xca, 0x92, 0x1d, 0x78, 0xf4, 0x01, 0xac, 0x4d, 0x97, 0x65, 0xcb, 0x5f, + 0x73, 0x51, 0x2e, 0xd1, 0x93, 0x47, 0x43, 0x40, 0x33, 0xca, 0xb9, 0x4b, 0xdc, 0x7a, 0x51, 0x2e, + 0xd3, 0xa2, 0x47, 0x06, 0x94, 0x27, 0x6a, 0xa4, 0x25, 0x2f, 0xc1, 0x28, 0xcb, 0x36, 0xeb, 0xe9, + 0xee, 0x44, 0x2b, 0xa4, 0xe5, 0xee, 0xc4, 0x28, 0x4b, 0x76, 0xee, 0xf7, 0x1a, 0x5f, 0x7c, 0xbd, + 0x91, 0xfc, 0xf2, 0xeb, 0x8d, 0xe4, 0x3f, 0xbf, 0xde, 0x48, 0x7e, 0xfa, 0xcd, 0x46, 0xe2, 0xcb, + 0x6f, 0x36, 0x12, 0x7f, 0xfb, 0x66, 0x23, 0xf1, 0xb3, 0x67, 0x7b, 0x16, 0xe9, 0x8f, 0x3b, 0x5b, + 0x5d, 0x67, 0xb8, 0x2d, 0xdf, 0x2a, 0x9c, 0x75, 0xd3, 0xb1, 0x93, 0x63, 0x68, 0xe3, 0xd6, 0x7f, + 0x03, 0x00, 0x00, 0xff, 0xff, 0x31, 0x03, 0x2f, 0x0e, 0x09, 0x29, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -3430,6 +3866,8 @@ type ABCIApplicationClient interface { OfferSnapshot(ctx context.Context, in *RequestOfferSnapshot, opts ...grpc.CallOption) (*ResponseOfferSnapshot, error) LoadSnapshotChunk(ctx context.Context, in *RequestLoadSnapshotChunk, opts ...grpc.CallOption) (*ResponseLoadSnapshotChunk, error) ApplySnapshotChunk(ctx context.Context, in *RequestApplySnapshotChunk, opts ...grpc.CallOption) (*ResponseApplySnapshotChunk, error) + BeginSideBlock(ctx context.Context, in *RequestBeginSideBlock, opts ...grpc.CallOption) (*ResponseBeginSideBlock, error) + DeliverSideTx(ctx context.Context, in *RequestDeliverSideTx, opts ...grpc.CallOption) (*ResponseDeliverSideTx, error) } type aBCIApplicationClient struct { @@ -3575,6 +4013,24 @@ func (c *aBCIApplicationClient) ApplySnapshotChunk(ctx context.Context, in *Requ return out, nil } +func (c *aBCIApplicationClient) BeginSideBlock(ctx context.Context, in *RequestBeginSideBlock, opts ...grpc.CallOption) (*ResponseBeginSideBlock, error) { + out := new(ResponseBeginSideBlock) + err := c.cc.Invoke(ctx, "/tendermint.abci.ABCIApplication/BeginSideBlock", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *aBCIApplicationClient) DeliverSideTx(ctx context.Context, in *RequestDeliverSideTx, opts ...grpc.CallOption) (*ResponseDeliverSideTx, error) { + out := new(ResponseDeliverSideTx) + err := c.cc.Invoke(ctx, "/tendermint.abci.ABCIApplication/DeliverSideTx", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ABCIApplicationServer is the server API for ABCIApplication service. type ABCIApplicationServer interface { Echo(context.Context, *RequestEcho) (*ResponseEcho, error) @@ -3592,6 +4048,8 @@ type ABCIApplicationServer interface { OfferSnapshot(context.Context, *RequestOfferSnapshot) (*ResponseOfferSnapshot, error) LoadSnapshotChunk(context.Context, *RequestLoadSnapshotChunk) (*ResponseLoadSnapshotChunk, error) ApplySnapshotChunk(context.Context, *RequestApplySnapshotChunk) (*ResponseApplySnapshotChunk, error) + BeginSideBlock(context.Context, *RequestBeginSideBlock) (*ResponseBeginSideBlock, error) + DeliverSideTx(context.Context, *RequestDeliverSideTx) (*ResponseDeliverSideTx, error) } // UnimplementedABCIApplicationServer can be embedded to have forward compatible implementations. @@ -3643,8 +4101,14 @@ func (*UnimplementedABCIApplicationServer) LoadSnapshotChunk(ctx context.Context func (*UnimplementedABCIApplicationServer) ApplySnapshotChunk(ctx context.Context, req *RequestApplySnapshotChunk) (*ResponseApplySnapshotChunk, error) { return nil, status.Errorf(codes.Unimplemented, "method ApplySnapshotChunk not implemented") } +func (*UnimplementedABCIApplicationServer) BeginSideBlock(ctx context.Context, req *RequestBeginSideBlock) (*ResponseBeginSideBlock, error) { + return nil, status.Errorf(codes.Unimplemented, "method BeginSideBlock not implemented") +} +func (*UnimplementedABCIApplicationServer) DeliverSideTx(ctx context.Context, req *RequestDeliverSideTx) (*ResponseDeliverSideTx, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeliverSideTx not implemented") +} -func RegisterABCIApplicationServer(s *grpc.Server, srv ABCIApplicationServer) { +func RegisterABCIApplicationServer(s grpc.Server, srv ABCIApplicationServer) { s.RegisterService(&_ABCIApplication_serviceDesc, srv) } @@ -3918,6 +4382,42 @@ func _ABCIApplication_ApplySnapshotChunk_Handler(srv interface{}, ctx context.Co return interceptor(ctx, in, info, handler) } +func _ABCIApplication_BeginSideBlock_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RequestBeginSideBlock) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ABCIApplicationServer).BeginSideBlock(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/tendermint.abci.ABCIApplication/BeginSideBlock", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ABCIApplicationServer).BeginSideBlock(ctx, req.(*RequestBeginSideBlock)) + } + return interceptor(ctx, in, info, handler) +} + +func _ABCIApplication_DeliverSideTx_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RequestDeliverSideTx) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ABCIApplicationServer).DeliverSideTx(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/tendermint.abci.ABCIApplication/DeliverSideTx", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ABCIApplicationServer).DeliverSideTx(ctx, req.(*RequestDeliverSideTx)) + } + return interceptor(ctx, in, info, handler) +} + var _ABCIApplication_serviceDesc = grpc.ServiceDesc{ ServiceName: "tendermint.abci.ABCIApplication", HandlerType: (*ABCIApplicationServer)(nil), @@ -3982,6 +4482,14 @@ var _ABCIApplication_serviceDesc = grpc.ServiceDesc{ MethodName: "ApplySnapshotChunk", Handler: _ABCIApplication_ApplySnapshotChunk_Handler, }, + { + MethodName: "BeginSideBlock", + Handler: _ABCIApplication_BeginSideBlock_Handler, + }, + { + MethodName: "DeliverSideTx", + Handler: _ABCIApplication_DeliverSideTx_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "tendermint/abci/types.proto", @@ -4334,6 +4842,52 @@ func (m *Request_ApplySnapshotChunk) MarshalToSizedBuffer(dAtA []byte) (int, err } return len(dAtA) - i, nil } +func (m *Request_BeginSideBlock) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Request_BeginSideBlock) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.BeginSideBlock != nil { + { + size, err := m.BeginSideBlock.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xaa + } + return len(dAtA) - i, nil +} +func (m *Request_DeliverSideTx) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Request_DeliverSideTx) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.DeliverSideTx != nil { + { + size, err := m.DeliverSideTx.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xb2 + } + return len(dAtA) - i, nil +} func (m *RequestEcho) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -4529,12 +5083,12 @@ func (m *RequestInitChain) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x12 } - n17, err17 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) - if err17 != nil { - return 0, err17 + n19, err19 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) + if err19 != nil { + return 0, err19 } - i -= n17 - i = encodeVarintTypes(dAtA, i, uint64(n17)) + i -= n19 + i = encodeVarintTypes(dAtA, i, uint64(n19)) i-- dAtA[i] = 0xa return len(dAtA) - i, nil @@ -4917,6 +5471,90 @@ func (m *RequestApplySnapshotChunk) MarshalToSizedBuffer(dAtA []byte) (int, erro return len(dAtA) - i, nil } +func (m *RequestBeginSideBlock) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RequestBeginSideBlock) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RequestBeginSideBlock) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.SideTxResults) > 0 { + for iNdEx := len(m.SideTxResults) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.SideTxResults[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + { + size, err := m.Header.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Hash) > 0 { + i -= len(m.Hash) + copy(dAtA[i:], m.Hash) + i = encodeVarintTypes(dAtA, i, uint64(len(m.Hash))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *RequestDeliverSideTx) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RequestDeliverSideTx) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RequestDeliverSideTx) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Tx) > 0 { + i -= len(m.Tx) + copy(dAtA[i:], m.Tx) + i = encodeVarintTypes(dAtA, i, uint64(len(m.Tx))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *Response) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -5287,18 +5925,64 @@ func (m *Response_ApplySnapshotChunk) MarshalToSizedBuffer(dAtA []byte) (int, er } return len(dAtA) - i, nil } -func (m *ResponseException) Marshal() (dAtA []byte, err error) { +func (m *Response_BeginSideBlock) MarshalTo(dAtA []byte) (int, error) { size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ResponseException) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() +func (m *Response_BeginSideBlock) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.BeginSideBlock != nil { + { + size, err := m.BeginSideBlock.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xaa + } + return len(dAtA) - i, nil +} +func (m *Response_DeliverSideTx) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Response_DeliverSideTx) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.DeliverSideTx != nil { + { + size, err := m.DeliverSideTx.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xb2 + } + return len(dAtA) - i, nil +} +func (m *ResponseException) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ResponseException) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } @@ -6046,20 +6730,20 @@ func (m *ResponseApplySnapshotChunk) MarshalToSizedBuffer(dAtA []byte) (int, err } } if len(m.RefetchChunks) > 0 { - dAtA41 := make([]byte, len(m.RefetchChunks)*10) - var j40 int + dAtA46 := make([]byte, len(m.RefetchChunks)*10) + var j45 int for _, num := range m.RefetchChunks { for num >= 1<<7 { - dAtA41[j40] = uint8(uint64(num)&0x7f | 0x80) + dAtA46[j45] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j40++ + j45++ } - dAtA41[j40] = uint8(num) - j40++ + dAtA46[j45] = uint8(num) + j45++ } - i -= j40 - copy(dAtA[i:], dAtA41[:j40]) - i = encodeVarintTypes(dAtA, i, uint64(j40)) + i -= j45 + copy(dAtA[i:], dAtA46[:j45]) + i = encodeVarintTypes(dAtA, i, uint64(j45)) i-- dAtA[i] = 0x12 } @@ -6071,6 +6755,90 @@ func (m *ResponseApplySnapshotChunk) MarshalToSizedBuffer(dAtA []byte) (int, err return len(dAtA) - i, nil } +func (m *ResponseBeginSideBlock) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ResponseBeginSideBlock) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResponseBeginSideBlock) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Events) > 0 { + for iNdEx := len(m.Events) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Events[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *ResponseDeliverSideTx) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ResponseDeliverSideTx) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResponseDeliverSideTx) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Result != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.Result)) + i-- + dAtA[i] = 0x20 + } + if len(m.Data) > 0 { + i -= len(m.Data) + copy(dAtA[i:], m.Data) + i = encodeVarintTypes(dAtA, i, uint64(len(m.Data))) + i-- + dAtA[i] = 0x1a + } + if len(m.Codespace) > 0 { + i -= len(m.Codespace) + copy(dAtA[i:], m.Codespace) + i = encodeVarintTypes(dAtA, i, uint64(len(m.Codespace))) + i-- + dAtA[i] = 0x12 + } + if m.Code != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.Code)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func (m *ConsensusParams) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -6499,12 +7267,12 @@ func (m *Evidence) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x28 } - n49, err49 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) - if err49 != nil { - return 0, err49 + n54, err54 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) + if err54 != nil { + return 0, err54 } - i -= n49 - i = encodeVarintTypes(dAtA, i, uint64(n49)) + i -= n54 + i = encodeVarintTypes(dAtA, i, uint64(n54)) i-- dAtA[i] = 0x22 if m.Height != 0 { @@ -6530,6 +7298,92 @@ func (m *Evidence) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *SideTxSig) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SideTxSig) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SideTxSig) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintTypes(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0x1a + } + if len(m.Sig) > 0 { + i -= len(m.Sig) + copy(dAtA[i:], m.Sig) + i = encodeVarintTypes(dAtA, i, uint64(len(m.Sig))) + i-- + dAtA[i] = 0x12 + } + if m.Result != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.Result)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *SideTxResult) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SideTxResult) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SideTxResult) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Sigs) > 0 { + for iNdEx := len(m.Sigs) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Sigs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.TxHash) > 0 { + i -= len(m.TxHash) + copy(dAtA[i:], m.TxHash) + i = encodeVarintTypes(dAtA, i, uint64(len(m.TxHash))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *Snapshot) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -6785,6 +7639,30 @@ func (m *Request_ApplySnapshotChunk) Size() (n int) { } return n } +func (m *Request_BeginSideBlock) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.BeginSideBlock != nil { + l = m.BeginSideBlock.Size() + n += 2 + l + sovTypes(uint64(l)) + } + return n +} +func (m *Request_DeliverSideTx) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.DeliverSideTx != nil { + l = m.DeliverSideTx.Size() + n += 2 + l + sovTypes(uint64(l)) + } + return n +} func (m *RequestEcho) Size() (n int) { if m == nil { return 0 @@ -7035,6 +7913,40 @@ func (m *RequestApplySnapshotChunk) Size() (n int) { return n } +func (m *RequestBeginSideBlock) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Hash) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = m.Header.Size() + n += 1 + l + sovTypes(uint64(l)) + if len(m.SideTxResults) > 0 { + for _, e := range m.SideTxResults { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + return n +} + +func (m *RequestDeliverSideTx) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Tx) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + return n +} + func (m *Response) Size() (n int) { if m == nil { return 0 @@ -7239,41 +8151,65 @@ func (m *Response_ApplySnapshotChunk) Size() (n int) { } return n } -func (m *ResponseException) Size() (n int) { +func (m *Response_BeginSideBlock) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.Error) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) + if m.BeginSideBlock != nil { + l = m.BeginSideBlock.Size() + n += 2 + l + sovTypes(uint64(l)) } return n } - -func (m *ResponseEcho) Size() (n int) { +func (m *Response_DeliverSideTx) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.Message) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) + if m.DeliverSideTx != nil { + l = m.DeliverSideTx.Size() + n += 2 + l + sovTypes(uint64(l)) } return n } - -func (m *ResponseFlush) Size() (n int) { +func (m *ResponseException) Size() (n int) { if m == nil { return 0 } var l int _ = l - return n -} - + l = len(m.Error) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + return n +} + +func (m *ResponseEcho) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Message) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + return n +} + +func (m *ResponseFlush) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func (m *ResponseInfo) Size() (n int) { if m == nil { return 0 @@ -7598,6 +8534,44 @@ func (m *ResponseApplySnapshotChunk) Size() (n int) { return n } +func (m *ResponseBeginSideBlock) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Events) > 0 { + for _, e := range m.Events { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + return n +} + +func (m *ResponseDeliverSideTx) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Code != 0 { + n += 1 + sovTypes(uint64(m.Code)) + } + l = len(m.Codespace) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = len(m.Data) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + if m.Result != 0 { + n += 1 + sovTypes(uint64(m.Result)) + } + return n +} + func (m *ConsensusParams) Size() (n int) { if m == nil { return 0 @@ -7782,6 +8756,45 @@ func (m *Evidence) Size() (n int) { return n } +func (m *SideTxSig) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Result != 0 { + n += 1 + sovTypes(uint64(m.Result)) + } + l = len(m.Sig) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = len(m.Address) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + return n +} + +func (m *SideTxResult) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.TxHash) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + if len(m.Sigs) > 0 { + for _, e := range m.Sigs { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + return n +} + func (m *Snapshot) Size() (n int) { if m == nil { return 0 @@ -8368,6 +9381,76 @@ func (m *Request) Unmarshal(dAtA []byte) error { } m.Value = &Request_ApplySnapshotChunk{v} iNdEx = postIndex + case 21: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BeginSideBlock", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &RequestBeginSideBlock{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Value = &Request_BeginSideBlock{v} + iNdEx = postIndex + case 22: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DeliverSideTx", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &RequestDeliverSideTx{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Value = &Request_DeliverSideTx{v} + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) @@ -10050,7 +11133,7 @@ func (m *RequestApplySnapshotChunk) Unmarshal(dAtA []byte) error { } return nil } -func (m *Response) Unmarshal(dAtA []byte) error { +func (m *RequestBeginSideBlock) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -10073,17 +11156,17 @@ func (m *Response) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Response: wiretype end group for non-group") + return fmt.Errorf("proto: RequestBeginSideBlock: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Response: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: RequestBeginSideBlock: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Exception", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Hash", wireType) } - var msglen int + var byteLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTypes @@ -10093,30 +11176,29 @@ func (m *Response) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + if byteLen < 0 { return ErrInvalidLengthTypes } - postIndex := iNdEx + msglen + postIndex := iNdEx + byteLen if postIndex < 0 { return ErrInvalidLengthTypes } if postIndex > l { return io.ErrUnexpectedEOF } - v := &ResponseException{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + m.Hash = append(m.Hash[:0], dAtA[iNdEx:postIndex]...) + if m.Hash == nil { + m.Hash = []byte{} } - m.Value = &Response_Exception{v} iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Echo", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -10143,15 +11225,13 @@ func (m *Response) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - v := &ResponseEcho{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } - m.Value = &Response_Echo{v} iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Flush", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SideTxResults", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -10178,17 +11258,66 @@ func (m *Response) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - v := &ResponseFlush{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.SideTxResults = append(m.SideTxResults, SideTxResult{}) + if err := m.SideTxResults[len(m.SideTxResults)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } - m.Value = &Response_Flush{v} iNdEx = postIndex - case 4: + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RequestDeliverSideTx) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RequestDeliverSideTx: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RequestDeliverSideTx: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Info", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Tx", wireType) } - var msglen int + var byteLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTypes @@ -10198,26 +11327,215 @@ func (m *Response) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + if byteLen < 0 { return ErrInvalidLengthTypes } - postIndex := iNdEx + msglen + postIndex := iNdEx + byteLen if postIndex < 0 { return ErrInvalidLengthTypes } if postIndex > l { return io.ErrUnexpectedEOF } - v := &ResponseInfo{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + m.Tx = append(m.Tx[:0], dAtA[iNdEx:postIndex]...) + if m.Tx == nil { + m.Tx = []byte{} } - m.Value = &Response_Info{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Response) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Response: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Response: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Exception", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &ResponseException{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Value = &Response_Exception{v} + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Echo", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &ResponseEcho{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Value = &Response_Echo{v} + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Flush", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &ResponseFlush{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Value = &Response_Flush{v} + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Info", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &ResponseInfo{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Value = &Response_Info{v} iNdEx = postIndex case 5: if wireType != 2 { @@ -10639,6 +11957,76 @@ func (m *Response) Unmarshal(dAtA []byte) error { } m.Value = &Response_ApplySnapshotChunk{v} iNdEx = postIndex + case 21: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BeginSideBlock", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &ResponseBeginSideBlock{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Value = &Response_BeginSideBlock{v} + iNdEx = postIndex + case 22: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DeliverSideTx", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &ResponseDeliverSideTx{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Value = &Response_DeliverSideTx{v} + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) @@ -13034,7 +14422,7 @@ func (m *ResponseApplySnapshotChunk) Unmarshal(dAtA []byte) error { } return nil } -func (m *ConsensusParams) Unmarshal(dAtA []byte) error { +func (m *ResponseBeginSideBlock) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -13057,15 +14445,253 @@ func (m *ConsensusParams) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ConsensusParams: wiretype end group for non-group") + return fmt.Errorf("proto: ResponseBeginSideBlock: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ConsensusParams: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ResponseBeginSideBlock: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Block", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Events", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Events = append(m.Events, Event{}) + if err := m.Events[len(m.Events)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ResponseDeliverSideTx) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ResponseDeliverSideTx: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResponseDeliverSideTx: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Code", wireType) + } + m.Code = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Code |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Codespace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Codespace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...) + if m.Data == nil { + m.Data = []byte{} + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Result", wireType) + } + m.Result = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Result |= SideTxResultType(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ConsensusParams) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ConsensusParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ConsensusParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Block", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -13093,7 +14719,7 @@ func (m *ConsensusParams) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.Block == nil { - m.Block = &BlockParams{} + m.Block = &types1.BlockParams{} } if err := m.Block.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -14309,6 +15935,261 @@ func (m *Evidence) Unmarshal(dAtA []byte) error { } return nil } +func (m *SideTxSig) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SideTxSig: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SideTxSig: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Result", wireType) + } + m.Result = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Result |= SideTxResultType(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Sig", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Sig = append(m.Sig[:0], dAtA[iNdEx:postIndex]...) + if m.Sig == nil { + m.Sig = []byte{} + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = append(m.Address[:0], dAtA[iNdEx:postIndex]...) + if m.Address == nil { + m.Address = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SideTxResult) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SideTxResult: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SideTxResult: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TxHash", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TxHash = append(m.TxHash[:0], dAtA[iNdEx:postIndex]...) + if m.TxHash == nil { + m.TxHash = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Sigs", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Sigs = append(m.Sigs, SideTxSig{}) + if err := m.Sigs[len(m.Sigs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *Snapshot) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/blockchain/v0/reactor.go b/blockchain/v0/reactor.go index 0ac278041dd..ddfe80cd4d4 100644 --- a/blockchain/v0/reactor.go +++ b/blockchain/v0/reactor.go @@ -153,7 +153,7 @@ func (bcR *BlockchainReactor) GetChannels() []*p2p.ChannelDescriptor { // AddPeer implements Reactor by sending our state to peer. func (bcR *BlockchainReactor) AddPeer(peer p2p.Peer) { - p2p.SendEnvelopeShim(peer, p2p.Envelope{ //nolint: staticcheck + p2p.SendEnvelopeShim(peer, p2p.Envelope{ // nolint: staticcheck ChannelID: BlockchainChannel, Message: &bcproto.StatusResponse{ Base: bcR.store.Base(), @@ -183,13 +183,13 @@ func (bcR *BlockchainReactor) respondToPeer(msg *bcproto.BlockRequest, bcR.Logger.Error("could not convert msg to protobuf", "err", err) return false } - return p2p.TrySendEnvelopeShim(src, p2p.Envelope{ //nolint: staticcheck + return p2p.TrySendEnvelopeShim(src, p2p.Envelope{ // nolint: staticcheck ChannelID: BlockchainChannel, Message: &bcproto.BlockResponse{Block: bl}, }, bcR.Logger) } - return p2p.TrySendEnvelopeShim(src, p2p.Envelope{ //nolint: staticcheck + return p2p.TrySendEnvelopeShim(src, p2p.Envelope{ // nolint: staticcheck ChannelID: BlockchainChannel, Message: &bcproto.NoBlockResponse{Height: msg.Height}, }, bcR.Logger) @@ -216,7 +216,7 @@ func (bcR *BlockchainReactor) ReceiveEnvelope(e p2p.Envelope) { bcR.pool.AddBlock(e.Src.ID(), bi, msg.Block.Size()) case *bcproto.StatusRequest: // Send peer our state. - p2p.TrySendEnvelopeShim(e.Src, p2p.Envelope{ //nolint: staticcheck + p2p.TrySendEnvelopeShim(e.Src, p2p.Envelope{ // nolint: staticcheck ChannelID: BlockchainChannel, Message: &bcproto.StatusResponse{ Height: bcR.store.Height(), @@ -285,7 +285,7 @@ func (bcR *BlockchainReactor) poolRoutine(stateSynced bool) { if peer == nil { continue } - queued := p2p.TrySendEnvelopeShim(peer, p2p.Envelope{ //nolint: staticcheck + queued := p2p.TrySendEnvelopeShim(peer, p2p.Envelope{ // nolint: staticcheck ChannelID: BlockchainChannel, Message: &bcproto.BlockRequest{Height: request.Height}, }, bcR.Logger) @@ -300,7 +300,7 @@ func (bcR *BlockchainReactor) poolRoutine(stateSynced bool) { case <-statusUpdateTicker.C: // ask for status updates - go bcR.BroadcastStatusRequest() //nolint: errcheck + go bcR.BroadcastStatusRequest() // nolint: errcheck } } diff --git a/blockchain/v1/peer.go b/blockchain/v1/peer.go index ad26585b306..2e0c38a2024 100644 --- a/blockchain/v1/peer.go +++ b/blockchain/v1/peer.go @@ -11,7 +11,7 @@ import ( "github.com/tendermint/tendermint/types" ) -//-------- +// -------- // Peer // BpPeerParams stores the peer parameters that are used when creating a peer. diff --git a/blockchain/v1/reactor.go b/blockchain/v1/reactor.go index f6fb93ab8de..b965b1d01c7 100644 --- a/blockchain/v1/reactor.go +++ b/blockchain/v1/reactor.go @@ -180,7 +180,7 @@ func (bcR *BlockchainReactor) GetChannels() []*p2p.ChannelDescriptor { // AddPeer implements Reactor by sending our state to peer. func (bcR *BlockchainReactor) AddPeer(peer p2p.Peer) { - p2p.SendEnvelopeShim(peer, p2p.Envelope{ //nolint: staticcheck + p2p.SendEnvelopeShim(peer, p2p.Envelope{ // nolint: staticcheck ChannelID: BlockchainChannel, Message: &bcproto.StatusResponse{ Base: bcR.store.Base(), @@ -206,7 +206,7 @@ func (bcR *BlockchainReactor) sendBlockToPeer(msg *bcproto.BlockRequest, bcR.Logger.Error("Could not send block message to peer", "err", err) return false } - return p2p.TrySendEnvelopeShim(src, p2p.Envelope{ //nolint: staticcheck + return p2p.TrySendEnvelopeShim(src, p2p.Envelope{ // nolint: staticcheck ChannelID: BlockchainChannel, Message: &bcproto.BlockResponse{Block: pbbi}, }, bcR.Logger) @@ -214,14 +214,14 @@ func (bcR *BlockchainReactor) sendBlockToPeer(msg *bcproto.BlockRequest, bcR.Logger.Info("peer asking for a block we don't have", "src", src, "height", msg.Height) - return p2p.TrySendEnvelopeShim(src, p2p.Envelope{ //nolint: staticcheck + return p2p.TrySendEnvelopeShim(src, p2p.Envelope{ // nolint: staticcheck ChannelID: BlockchainChannel, Message: &bcproto.NoBlockResponse{Height: msg.Height}, }, bcR.Logger) } func (bcR *BlockchainReactor) sendStatusResponseToPeer(msg *bcproto.StatusRequest, src p2p.Peer) (queued bool) { - return p2p.TrySendEnvelopeShim(src, p2p.Envelope{ //nolint: staticcheck + return p2p.TrySendEnvelopeShim(src, p2p.Envelope{ // nolint: staticcheck ChannelID: BlockchainChannel, Message: &bcproto.StatusResponse{ Base: bcR.store.Base(), @@ -509,7 +509,7 @@ func (bcR *BlockchainReactor) sendBlockRequest(peerID p2p.ID, height int64) erro return errNilPeerForBlockRequest } - queued := p2p.TrySendEnvelopeShim(peer, p2p.Envelope{ //nolint: staticcheck + queued := p2p.TrySendEnvelopeShim(peer, p2p.Envelope{ // nolint: staticcheck ChannelID: BlockchainChannel, Message: &bcproto.BlockRequest{Height: height}, }, bcR.Logger) diff --git a/cmd/cometbft/commands/debug/kill.go b/cmd/cometbft/commands/debug/kill.go index 8964bb9a133..9636e8e3fe1 100644 --- a/cmd/cometbft/commands/debug/kill.go +++ b/cmd/cometbft/commands/debug/kill.go @@ -104,7 +104,7 @@ func killProc(pid int, dir string) error { // pipe STDERR output from tailing the CometBFT process to a file // // NOTE: This will only work on UNIX systems. - cmd := exec.Command("tail", "-f", fmt.Sprintf("/proc/%d/fd/2", pid)) //nolint: gosec + cmd := exec.Command("tail", "-f", fmt.Sprintf("/proc/%d/fd/2", pid)) // nolint: gosec outFile, err := os.Create(filepath.Join(dir, "stacktrace.out")) if err != nil { diff --git a/consensus/replay.go b/consensus/replay.go index b5d50baebbf..fd3a91d6c50 100644 --- a/consensus/replay.go +++ b/consensus/replay.go @@ -27,10 +27,10 @@ var crc32c = crc32.MakeTable(crc32.Castagnoli) // The former is handled by the WAL, the latter by the proxyApp Handshake on // restart, which ultimately hands off the work to the WAL. -//----------------------------------------- +// ----------------------------------------- // 1. Recover from failure during consensus // (by replaying messages from the WAL) -//----------------------------------------- +// ----------------------------------------- // Unmarshal and apply a single message to the consensus state as if it were // received in receiveRoutine. Lines that start with "#" are ignored. @@ -165,7 +165,7 @@ LOOP: return nil } -//-------------------------------------------------------------------------------- +// -------------------------------------------------------------------------------- // Parses marker lines of the form: // #ENDHEIGHT: 12345 @@ -191,11 +191,11 @@ func makeHeightSearchFunc(height int64) auto.SearchFunc { } }*/ -//--------------------------------------------------- +// --------------------------------------------------- // 2. Recover from failure while applying the block. // (by handshaking with the app to figure out where // we were last, and using the WAL to recover there.) -//--------------------------------------------------- +// --------------------------------------------------- type Handshaker struct { stateStore sm.Store diff --git a/consensus/state.go b/consensus/state.go index 941ea1d5e68..1a630c977e4 100644 --- a/consensus/state.go +++ b/consensus/state.go @@ -1153,6 +1153,9 @@ func (cs *State) defaultDecideProposal(height int64, round int32) { // Make proposal propBlockID := types.BlockID{Hash: block.Hash(), PartSetHeader: blockParts.Header()} proposal := types.NewProposal(height, round, cs.ValidRound, propBlockID) + proposal.Data = block.DataHash // [dojimamint] add data hash to proposal + d := proposal.SignBytes(cs.state.ChainID) + cs.Logger.Info("[dojimamint] New proposal", "signBytes", d) p := proposal.ToProto() if err := cs.privValidator.SignProposal(cs.state.ChainID, p); err == nil { proposal.Signature = p.Signature @@ -2209,6 +2212,22 @@ func (cs *State) signVote( BlockID: types.BlockID{Hash: hash, PartSetHeader: header}, } + if len(cs.state.SideTxResponses) > 0 { + cs.Logger.Debug("[dojimamint] Setting side tx results to vote") + sideTxResults := make([]types.SideTxResult, 0) + for _, sideTxResponse := range cs.state.SideTxResponses { + // sign if data is available on side tx response + if len(sideTxResponse.Data) > 0 { + err := cs.privValidator.SignSideTxResult(sideTxResponse) + if err != nil { + return nil, err + } + } + sideTxResults = append(sideTxResults, sideTxResponse.SideTxResult) + } + vote.SideTxResults = sideTxResults + } + v := vote.ToProto() err := cs.privValidator.SignVote(cs.state.ChainID, v) vote.Signature = v.Signature diff --git a/consensus/ticker.go b/consensus/ticker.go index fb3571ac867..4174ff403c8 100644 --- a/consensus/ticker.go +++ b/consensus/ticker.go @@ -74,7 +74,7 @@ func (t *timeoutTicker) ScheduleTimeout(ti timeoutInfo) { t.tickChan <- ti } -//------------------------------------------------------------- +// ------------------------------------------------------------- // stop the timer and drain if necessary func (t *timeoutTicker) stopTimer() { diff --git a/consensus/types/peer_round_state.go b/consensus/types/peer_round_state.go index 07283c5b4de..0d91eb8ea7f 100644 --- a/consensus/types/peer_round_state.go +++ b/consensus/types/peer_round_state.go @@ -8,7 +8,7 @@ import ( "github.com/tendermint/tendermint/types" ) -//----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- // PeerRoundState contains the known state of a peer. // NOTE: Read-only when returned by PeerState.GetRoundState(). diff --git a/consensus/types/round_state.go b/consensus/types/round_state.go index 9e67b76c074..e0cd9b22652 100644 --- a/consensus/types/round_state.go +++ b/consensus/types/round_state.go @@ -9,7 +9,7 @@ import ( "github.com/tendermint/tendermint/types" ) -//----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- // RoundStepType enum type // RoundStepType enumerates the state of the consensus state machine @@ -59,7 +59,7 @@ func (rs RoundStepType) String() string { } } -//----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- // RoundState defines the internal consensus state. // NOTE: Not thread safe. Should only be manipulated by functions downstream diff --git a/crypto/encoding/amino/amino.go b/crypto/encoding/amino/amino.go new file mode 100644 index 00000000000..3309b746635 --- /dev/null +++ b/crypto/encoding/amino/amino.go @@ -0,0 +1,71 @@ +package cryptoAmino + +import ( + "reflect" + + amino "github.com/tendermint/go-amino" + "github.com/tendermint/tendermint/crypto" + "github.com/tendermint/tendermint/crypto/ed25519" + + "github.com/tendermint/tendermint/crypto/secp256k1" +) + +var cdc = amino.NewCodec() + +// nameTable is used to map public key concrete types back +// to their registered amino names. This should eventually be handled +// by amino. Example usage: +// nameTable[reflect.TypeOf(ed25519.PubKey{})] = ed25519.PubKeyName +var nameTable = make(map[reflect.Type]string, 3) + +func init() { + // NOTE: It's important that there be no conflicts here, + // as that would change the canonical representations, + // and therefore change the address. + // TODO: Remove above note when + // https://github.com/tendermint/go-amino/issues/9 + // is resolved + RegisterAmino(cdc) + + // TODO: Have amino provide a way to go from concrete struct to route directly. + // Its currently a private API + nameTable[reflect.TypeOf(ed25519.PubKey{})] = ed25519.PubKeyName + nameTable[reflect.TypeOf(secp256k1.PubKey{})] = secp256k1.PubKeyName + // nameTable[reflect.TypeOf(multisig.PubKeyMultisigThreshold{})] = multisig.PubKeyMultisigThresholdAminoRoute +} + +// PubKeyName returns the amino route of a pubkey +// cdc is currently passed in, as eventually this will not be using +// a package level codec. +func PubKeyName(cdc *amino.Codec, key crypto.PubKey) (string, bool) { + route, found := nameTable[reflect.TypeOf(key)] + return route, found +} + +// RegisterAmino registers all crypto related types in the given (amino) codec. +func RegisterAmino(cdc *amino.Codec) { + // These are all written here instead of + cdc.RegisterInterface((*crypto.PubKey)(nil), nil) + cdc.RegisterConcrete(ed25519.PubKey{}, + ed25519.PubKeyName, nil) + cdc.RegisterConcrete(secp256k1.PubKey{}, + secp256k1.PubKeyName, nil) + // cdc.RegisterConcrete(multisig.PubKeyMultisigThreshold{}, + // multisig.PubKeyMultisigThresholdAminoRoute, nil) + + cdc.RegisterInterface((*crypto.PrivKey)(nil), nil) + cdc.RegisterConcrete(ed25519.PrivKey{}, + ed25519.PrivKeyName, nil) + cdc.RegisterConcrete(secp256k1.PrivKey{}, + secp256k1.PrivKeyName, nil) +} + +func PrivKeyFromBytes(privKeyBytes []byte) (privKey crypto.PrivKey, err error) { + err = cdc.UnmarshalBinaryBare(privKeyBytes, &privKey) + return +} + +func PubKeyFromBytes(pubKeyBytes []byte) (pubKey crypto.PubKey, err error) { + err = cdc.UnmarshalBinaryBare(pubKeyBytes, &pubKey) + return +} diff --git a/go.mod b/go.mod index 9adb6090596..aa521194aa2 100644 --- a/go.mod +++ b/go.mod @@ -56,6 +56,7 @@ require ( github.com/btcsuite/btcd/btcutil v1.1.2 github.com/cometbft/cometbft-db v0.7.0 github.com/go-git/go-git/v5 v5.5.1 + github.com/tendermint/go-amino v0.16.0 github.com/vektra/mockery/v2 v2.14.0 gonum.org/v1/gonum v0.8.2 google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8 diff --git a/go.sum b/go.sum index e91c51a83c9..ffeddb31637 100644 --- a/go.sum +++ b/go.sum @@ -53,8 +53,6 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM= github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= @@ -359,6 +357,7 @@ github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= @@ -416,7 +415,9 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -840,6 +841,8 @@ github.com/tdakkota/asciicheck v0.1.1 h1:PKzG7JUTUmVspQTDqtkX9eSiLGossXTybutHwTX github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= +github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= +github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= github.com/tenntenn/modver v1.0.1 h1:2klLppGhDgzJrScMpkj9Ujy3rXPUspSjAcev9tSEBgA= github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3 h1:f+jULpRQGxTSkNYKJ51yaw6ChIqO+Je8UqsTKN/cDag= @@ -1285,6 +1288,7 @@ google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= diff --git a/libs/autofile/group.go b/libs/autofile/group.go index 7848ef131e4..81a9c4fb351 100644 --- a/libs/autofile/group.go +++ b/libs/autofile/group.go @@ -417,7 +417,7 @@ func filePathForIndex(headPath string, index int, maxIndex int) string { return fmt.Sprintf("%v.%03d", headPath, index) } -//-------------------------------------------------------------------------------- +// -------------------------------------------------------------------------------- // GroupReader provides an interface for reading from a Group. type GroupReader struct { diff --git a/libs/events/events_test.go b/libs/events/events_test.go index 9e21e023513..27f31a268d6 100644 --- a/libs/events/events_test.go +++ b/libs/events/events_test.go @@ -451,7 +451,7 @@ func TestRemoveListenersAsync(t *testing.T) { } } -//------------------------------------------------------------------------------ +// ------------------------------------------------------------------------------ // Helper functions // sumReceivedNumbers takes two channels and adds all numbers received diff --git a/p2p/base_reactor.go b/p2p/base_reactor.go index 87e145fb20c..33e12d9ac44 100644 --- a/p2p/base_reactor.go +++ b/p2p/base_reactor.go @@ -63,7 +63,7 @@ type EnvelopeReceiver interface { ReceiveEnvelope(Envelope) } -//-------------------------------------- +// -------------------------------------- type BaseReactor struct { service.BaseService // Provides Start, Stop, .Quit diff --git a/p2p/node_info_test.go b/p2p/node_info_test.go index 9c317f8a168..1bceb4a1017 100644 --- a/p2p/node_info_test.go +++ b/p2p/node_info_test.go @@ -33,7 +33,7 @@ func TestNodeInfoValidate(t *testing.T) { }{ { "Too Many Channels", - func(ni *DefaultNodeInfo) { ni.Channels = append(channels, byte(maxNumChannels)) }, //nolint: gocritic + func(ni *DefaultNodeInfo) { ni.Channels = append(channels, byte(maxNumChannels)) }, // nolint: gocritic true, }, {"Duplicate Channel", func(ni *DefaultNodeInfo) { ni.Channels = dupChannels }, true}, diff --git a/p2p/switch.go b/p2p/switch.go index 60d26729b07..5b26b420a17 100644 --- a/p2p/switch.go +++ b/p2p/switch.go @@ -41,7 +41,7 @@ func MConnConfig(cfg *config.P2PConfig) conn.MConnConfig { return mConfig } -//----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- // An AddrBook represents an address book from the pex package, which is used // to store peer addresses. @@ -60,7 +60,7 @@ type AddrBook interface { // fully setup. type PeerFilterFunc func(IPeerSet, Peer) error -//----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- // Switch handles peer connections and exposes an API to receive incoming messages // on `Reactors`. Each `Reactor` is responsible for handling incoming messages of one @@ -155,7 +155,7 @@ func WithMetrics(metrics *Metrics) SwitchOption { return func(sw *Switch) { sw.metrics = metrics } } -//--------------------------------------------------------------------- +// --------------------------------------------------------------------- // Switch setup // AddReactor adds the given reactor to the switch. @@ -224,7 +224,7 @@ func (sw *Switch) SetNodeKey(nodeKey *NodeKey) { sw.nodeKey = nodeKey } -//--------------------------------------------------------------------- +// --------------------------------------------------------------------- // Service start/stop // OnStart implements BaseService. It starts all the reactors and peers. @@ -259,7 +259,7 @@ func (sw *Switch) OnStop() { } } -//--------------------------------------------------------------------- +// --------------------------------------------------------------------- // Peers // BroadcastEnvelope runs a go routine for each attempted send, which will block trying @@ -489,7 +489,7 @@ func (sw *Switch) MarkPeerAsGood(peer Peer) { } } -//--------------------------------------------------------------------- +// --------------------------------------------------------------------- // Dialing type privateAddr interface { diff --git a/privval/file.go b/privval/file.go index a6131024035..7f39867b82e 100644 --- a/privval/file.go +++ b/privval/file.go @@ -266,6 +266,16 @@ func (pv *FilePV) SignProposal(chainID string, proposal *cmtproto.Proposal) erro return nil } +// SignSideTxResult signs given data bytes +func (pv *FilePV) SignSideTxResult(sideTxResult *types.SideTxResultWithData) error { + sig, err := pv.Key.PrivKey.Sign(sideTxResult.GetBytes()) + if err != nil { + return err + } + sideTxResult.Sig = sig + return nil +} + // Save persists the FilePV to disk. func (pv *FilePV) Save() { pv.Key.Save() diff --git a/privval/retry_signer_client.go b/privval/retry_signer_client.go index 27eef644305..6064cd2c02d 100644 --- a/privval/retry_signer_client.go +++ b/privval/retry_signer_client.go @@ -94,3 +94,9 @@ func (sc *RetrySignerClient) SignProposal(chainID string, proposal *cmtproto.Pro } return fmt.Errorf("exhausted all attempts to sign proposal: %w", err) } + +func (sc *RetrySignerClient) SignSideTxResult(sideTxResult *types.SideTxResultWithData) error { + + sig := sc.next.SignSideTxResult(sideTxResult) + return sig +} diff --git a/privval/signer_client.go b/privval/signer_client.go index 68ce47a4b0d..91c472b9eb1 100644 --- a/privval/signer_client.go +++ b/privval/signer_client.go @@ -131,3 +131,8 @@ func (sc *SignerClient) SignProposal(chainID string, proposal *cmtproto.Proposal return nil } + +// SignSideTxResult set sign bytes +func (sc *SignerClient) SignSideTxResult(data *types.SideTxResultWithData) error { + return nil +} diff --git a/privval/socket_listeners.go b/privval/socket_listeners.go index 4e318390a7d..d6517fce820 100644 --- a/privval/socket_listeners.go +++ b/privval/socket_listeners.go @@ -18,7 +18,7 @@ type timeoutError interface { Timeout() bool } -//------------------------------------------------------------------ +// ------------------------------------------------------------------ // TCP Listener // TCPListenerOption sets an optional parameter on the tcpListener. @@ -84,7 +84,7 @@ func (ln *TCPListener) Accept() (net.Conn, error) { return secretConn, nil } -//------------------------------------------------------------------ +// ------------------------------------------------------------------ // Unix Listener // unixListener implements net.Listener. @@ -145,7 +145,7 @@ func (ln *UnixListener) Accept() (net.Conn, error) { return conn, nil } -//------------------------------------------------------------------ +// ------------------------------------------------------------------ // Connection // timeoutConn implements net.Conn. diff --git a/privval/socket_listeners_test.go b/privval/socket_listeners_test.go index e9659d295df..fc01e72f868 100644 --- a/privval/socket_listeners_test.go +++ b/privval/socket_listeners_test.go @@ -9,14 +9,14 @@ import ( "github.com/tendermint/tendermint/crypto/ed25519" ) -//------------------------------------------- +// ------------------------------------------- // helper funcs func newPrivKey() ed25519.PrivKey { return ed25519.GenPrivKey() } -//------------------------------------------- +// ------------------------------------------- // tests type listenerTestCase struct { diff --git a/proto/tendermint/abci/types.proto b/proto/tendermint/abci/types.proto index 44f86112938..c230f935182 100644 --- a/proto/tendermint/abci/types.proto +++ b/proto/tendermint/abci/types.proto @@ -36,6 +36,9 @@ message Request { RequestOfferSnapshot offer_snapshot = 13; RequestLoadSnapshotChunk load_snapshot_chunk = 14; RequestApplySnapshotChunk apply_snapshot_chunk = 15; + + RequestBeginSideBlock begin_side_block = 21; + RequestDeliverSideTx deliver_side_tx = 22; } } @@ -124,6 +127,21 @@ message RequestApplySnapshotChunk { string sender = 3; } +// +// Side channel requests +// + +message RequestBeginSideBlock { + bytes hash = 1; + tendermint.types.Header header = 2 [(gogoproto.nullable)=false]; + repeated SideTxResult side_tx_results = 3 [(gogoproto.nullable)=false]; +} + +message RequestDeliverSideTx { + bytes tx = 1; +} + + //---------------------------------------- // Response types @@ -145,6 +163,9 @@ message Response { ResponseOfferSnapshot offer_snapshot = 14; ResponseLoadSnapshotChunk load_snapshot_chunk = 15; ResponseApplySnapshotChunk apply_snapshot_chunk = 16; + + ResponseBeginSideBlock begin_side_block = 21; + ResponseDeliverSideTx deliver_side_tx = 22; } } @@ -282,13 +303,28 @@ message ResponseApplySnapshotChunk { } } +// +// Side channel response +// + +message ResponseBeginSideBlock { + repeated Event events = 1 [(gogoproto.nullable)=false, (gogoproto.jsontag)="events,omitempty"]; +} + +message ResponseDeliverSideTx { + uint32 code = 1; + string codespace = 2; + SideTxResultType result = 4; + bytes data = 3; +} + //---------------------------------------- // Misc. // ConsensusParams contains all consensus-relevant parameters // that can be adjusted by the abci app message ConsensusParams { - BlockParams block = 1; + tendermint.types.BlockParams block = 1; tendermint.types.EvidenceParams evidence = 2; tendermint.types.ValidatorParams validator = 3; tendermint.types.VersionParams version = 4; @@ -378,6 +414,30 @@ message Evidence { int64 total_voting_power = 5; } +//---------------Side-Tx-Types----------- + +// Side-tx result type +enum SideTxResultType { + Skip = 0; + Yes = 1; + No = 2; +} + +// Side-tx sig +message SideTxSig { + SideTxResultType result = 1; + bytes sig = 2; + bytes address = 3; +} + +// Side tx results +message SideTxResult { + bytes tx_hash = 1; + repeated SideTxSig sigs = 2 [(gogoproto.nullable)=false]; +} + + + //---------------------------------------- // State Sync Types @@ -410,4 +470,6 @@ service ABCIApplication { returns (ResponseLoadSnapshotChunk); rpc ApplySnapshotChunk(RequestApplySnapshotChunk) returns (ResponseApplySnapshotChunk); + rpc BeginSideBlock(RequestBeginSideBlock) returns (ResponseBeginSideBlock); + rpc DeliverSideTx(RequestDeliverSideTx) returns (ResponseDeliverSideTx); } diff --git a/proto/tendermint/rpc/grpc/types.pb.go b/proto/tendermint/rpc/grpc/types.pb.go index b9cbee03fc8..959e6dabcb4 100644 --- a/proto/tendermint/rpc/grpc/types.pb.go +++ b/proto/tendermint/rpc/grpc/types.pb.go @@ -245,10 +245,10 @@ type BroadcastAPIClient interface { } type broadcastAPIClient struct { - cc *grpc.ClientConn + cc grpc.ClientConn } -func NewBroadcastAPIClient(cc *grpc.ClientConn) BroadcastAPIClient { +func NewBroadcastAPIClient(cc grpc.ClientConn) BroadcastAPIClient { return &broadcastAPIClient{cc} } @@ -287,7 +287,7 @@ func (*UnimplementedBroadcastAPIServer) BroadcastTx(ctx context.Context, req *Re return nil, status.Errorf(codes.Unimplemented, "method BroadcastTx not implemented") } -func RegisterBroadcastAPIServer(s *grpc.Server, srv BroadcastAPIServer) { +func RegisterBroadcastAPIServer(s grpc.Server, srv BroadcastAPIServer) { s.RegisterService(&_BroadcastAPI_serviceDesc, srv) } diff --git a/proto/tendermint/types/canonical.pb.go b/proto/tendermint/types/canonical.pb.go index 7098310430d..bd639fff77d 100644 --- a/proto/tendermint/types/canonical.pb.go +++ b/proto/tendermint/types/canonical.pb.go @@ -140,6 +140,7 @@ type CanonicalProposal struct { BlockID *CanonicalBlockID `protobuf:"bytes,5,opt,name=block_id,json=blockId,proto3" json:"block_id,omitempty"` Timestamp time.Time `protobuf:"bytes,6,opt,name=timestamp,proto3,stdtime" json:"timestamp"` ChainID string `protobuf:"bytes,7,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + Data []byte `protobuf:"bytes,8,opt,name=data,proto3" json:"data,omitempty"` } func (m *CanonicalProposal) Reset() { *m = CanonicalProposal{} } @@ -224,13 +225,22 @@ func (m *CanonicalProposal) GetChainID() string { return "" } +func (m *CanonicalProposal) GetData() []byte { + if m != nil { + return m.Data + } + return nil +} + type CanonicalVote struct { - Type SignedMsgType `protobuf:"varint,1,opt,name=type,proto3,enum=tendermint.types.SignedMsgType" json:"type,omitempty"` - Height int64 `protobuf:"fixed64,2,opt,name=height,proto3" json:"height,omitempty"` - Round int64 `protobuf:"fixed64,3,opt,name=round,proto3" json:"round,omitempty"` - BlockID *CanonicalBlockID `protobuf:"bytes,4,opt,name=block_id,json=blockId,proto3" json:"block_id,omitempty"` - Timestamp time.Time `protobuf:"bytes,5,opt,name=timestamp,proto3,stdtime" json:"timestamp"` - ChainID string `protobuf:"bytes,6,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + Type SignedMsgType `protobuf:"varint,1,opt,name=type,proto3,enum=tendermint.types.SignedMsgType" json:"type,omitempty"` + Height int64 `protobuf:"fixed64,2,opt,name=height,proto3" json:"height,omitempty"` + Round int64 `protobuf:"fixed64,3,opt,name=round,proto3" json:"round,omitempty"` + BlockID *CanonicalBlockID `protobuf:"bytes,4,opt,name=block_id,json=blockId,proto3" json:"block_id,omitempty"` + Timestamp time.Time `protobuf:"bytes,5,opt,name=timestamp,proto3,stdtime" json:"timestamp"` + ChainID string `protobuf:"bytes,6,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + Data []byte `protobuf:"bytes,7,opt,name=data,proto3" json:"data,omitempty"` + SideTxResults []*SideTxResult `protobuf:"bytes,8,rep,name=side_tx_results,json=sideTxResults,proto3" json:"side_tx_results,omitempty"` } func (m *CanonicalVote) Reset() { *m = CanonicalVote{} } @@ -308,6 +318,20 @@ func (m *CanonicalVote) GetChainID() string { return "" } +func (m *CanonicalVote) GetData() []byte { + if m != nil { + return m.Data + } + return nil +} + +func (m *CanonicalVote) GetSideTxResults() []*SideTxResult { + if m != nil { + return m.SideTxResults + } + return nil +} + func init() { proto.RegisterType((*CanonicalBlockID)(nil), "tendermint.types.CanonicalBlockID") proto.RegisterType((*CanonicalPartSetHeader)(nil), "tendermint.types.CanonicalPartSetHeader") @@ -318,38 +342,41 @@ func init() { func init() { proto.RegisterFile("tendermint/types/canonical.proto", fileDescriptor_8d1a1a84ff7267ed) } var fileDescriptor_8d1a1a84ff7267ed = []byte{ - // 487 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x53, 0x3d, 0x6f, 0xd3, 0x40, - 0x18, 0xce, 0xa5, 0x4e, 0xe2, 0x5c, 0x1b, 0x08, 0xa7, 0xaa, 0xb2, 0x22, 0x64, 0x5b, 0x1e, 0x90, - 0x59, 0x6c, 0xa9, 0x1d, 0xd8, 0x5d, 0x06, 0x82, 0x40, 0x94, 0x6b, 0xd5, 0x81, 0x25, 0xba, 0xd8, - 0x87, 0x6d, 0xe1, 0xf8, 0x4e, 0xf6, 0x65, 0xe8, 0xc2, 0x6f, 0xe8, 0xef, 0xe0, 0x97, 0x74, 0xec, - 0x08, 0x4b, 0x40, 0xce, 0x1f, 0x41, 0x77, 0x4e, 0xec, 0xa8, 0x01, 0x16, 0x10, 0xcb, 0xe9, 0xfd, - 0x78, 0xee, 0x79, 0x1f, 0x3d, 0xaf, 0x5e, 0x68, 0x0b, 0x9a, 0x47, 0xb4, 0x58, 0xa4, 0xb9, 0xf0, - 0xc5, 0x0d, 0xa7, 0xa5, 0x1f, 0x92, 0x9c, 0xe5, 0x69, 0x48, 0x32, 0x8f, 0x17, 0x4c, 0x30, 0x34, - 0x6e, 0x11, 0x9e, 0x42, 0x4c, 0x8e, 0x63, 0x16, 0x33, 0xd5, 0xf4, 0x65, 0x54, 0xe3, 0x26, 0x4f, - 0xf7, 0x98, 0xd4, 0xbb, 0xe9, 0x5a, 0x31, 0x63, 0x71, 0x46, 0x7d, 0x95, 0xcd, 0x97, 0x1f, 0x7d, - 0x91, 0x2e, 0x68, 0x29, 0xc8, 0x82, 0xd7, 0x00, 0xe7, 0x33, 0x1c, 0x9f, 0x6f, 0x27, 0x07, 0x19, - 0x0b, 0x3f, 0x4d, 0x5f, 0x22, 0x04, 0xb5, 0x84, 0x94, 0x89, 0x01, 0x6c, 0xe0, 0x1e, 0x61, 0x15, - 0xa3, 0x6b, 0xf8, 0x98, 0x93, 0x42, 0xcc, 0x4a, 0x2a, 0x66, 0x09, 0x25, 0x11, 0x2d, 0x8c, 0xae, - 0x0d, 0xdc, 0xc3, 0x53, 0xd7, 0x7b, 0x28, 0xd4, 0x6b, 0x08, 0x2f, 0x48, 0x21, 0x2e, 0xa9, 0x78, - 0xa5, 0xf0, 0x81, 0x76, 0xb7, 0xb2, 0x3a, 0x78, 0xc4, 0x77, 0x8b, 0x4e, 0x00, 0x4f, 0x7e, 0x0d, - 0x47, 0xc7, 0xb0, 0x27, 0x98, 0x20, 0x99, 0x92, 0x31, 0xc2, 0x75, 0xd2, 0x68, 0xeb, 0xb6, 0xda, - 0x9c, 0x6f, 0x5d, 0xf8, 0xa4, 0x25, 0x29, 0x18, 0x67, 0x25, 0xc9, 0xd0, 0x19, 0xd4, 0xa4, 0x1c, - 0xf5, 0xfd, 0xd1, 0xa9, 0xb5, 0x2f, 0xf3, 0x32, 0x8d, 0x73, 0x1a, 0xbd, 0x2d, 0xe3, 0xab, 0x1b, - 0x4e, 0xb1, 0x02, 0xa3, 0x13, 0xd8, 0x4f, 0x68, 0x1a, 0x27, 0x42, 0x0d, 0x18, 0xe3, 0x4d, 0x26, - 0xc5, 0x14, 0x6c, 0x99, 0x47, 0xc6, 0x81, 0x2a, 0xd7, 0x09, 0x7a, 0x0e, 0x87, 0x9c, 0x65, 0xb3, - 0xba, 0xa3, 0xd9, 0xc0, 0x3d, 0x08, 0x8e, 0xaa, 0x95, 0xa5, 0x5f, 0xbc, 0x7b, 0x83, 0x65, 0x0d, - 0xeb, 0x9c, 0x65, 0x2a, 0x42, 0xaf, 0xa1, 0x3e, 0x97, 0xf6, 0xce, 0xd2, 0xc8, 0xe8, 0x29, 0xe3, - 0x9c, 0x3f, 0x18, 0xb7, 0xd9, 0x44, 0x70, 0x58, 0xad, 0xac, 0xc1, 0x26, 0xc1, 0x03, 0x45, 0x30, - 0x8d, 0x50, 0x00, 0x87, 0xcd, 0x1a, 0x8d, 0xbe, 0x22, 0x9b, 0x78, 0xf5, 0xa2, 0xbd, 0xed, 0xa2, - 0xbd, 0xab, 0x2d, 0x22, 0xd0, 0xa5, 0xef, 0xb7, 0xdf, 0x2d, 0x80, 0xdb, 0x6f, 0xe8, 0x19, 0xd4, - 0xc3, 0x84, 0xa4, 0xb9, 0xd4, 0x33, 0xb0, 0x81, 0x3b, 0xac, 0x67, 0x9d, 0xcb, 0x9a, 0x9c, 0xa5, - 0x9a, 0xd3, 0xc8, 0xf9, 0xd2, 0x85, 0xa3, 0x46, 0xd6, 0x35, 0x13, 0xf4, 0x7f, 0xf8, 0xba, 0x6b, - 0x96, 0xf6, 0x2f, 0xcd, 0xea, 0xfd, 0xbd, 0x59, 0xfd, 0xdf, 0x9b, 0x15, 0xbc, 0xbf, 0xab, 0x4c, - 0x70, 0x5f, 0x99, 0xe0, 0x47, 0x65, 0x82, 0xdb, 0xb5, 0xd9, 0xb9, 0x5f, 0x9b, 0x9d, 0xaf, 0x6b, - 0xb3, 0xf3, 0xe1, 0x45, 0x9c, 0x8a, 0x64, 0x39, 0xf7, 0x42, 0xb6, 0xf0, 0x77, 0x0f, 0xb6, 0x0d, - 0xeb, 0xc3, 0x7e, 0x78, 0xcc, 0xf3, 0xbe, 0xaa, 0x9f, 0xfd, 0x0c, 0x00, 0x00, 0xff, 0xff, 0x6d, - 0xdd, 0x12, 0x5d, 0x31, 0x04, 0x00, 0x00, + // 534 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x94, 0xbf, 0x6b, 0xdb, 0x40, + 0x14, 0xc7, 0x2d, 0xff, 0x94, 0xcf, 0x71, 0xe3, 0x1e, 0x21, 0x08, 0x53, 0x24, 0xe1, 0xa1, 0xa8, + 0x8b, 0x04, 0xce, 0xd0, 0x5d, 0x29, 0xa5, 0x2e, 0x2d, 0x4d, 0x2f, 0x26, 0x43, 0x17, 0x71, 0xf6, + 0x5d, 0x25, 0x51, 0x59, 0x27, 0x74, 0x67, 0x48, 0x96, 0x8e, 0x9d, 0xf3, 0x67, 0x65, 0xcc, 0xd8, + 0xc9, 0x2d, 0xf2, 0xdc, 0xff, 0xa1, 0xdc, 0xc9, 0xb6, 0x4c, 0x12, 0x4a, 0xa1, 0x25, 0x8b, 0x78, + 0x3f, 0xbe, 0x7a, 0xef, 0xcb, 0xe7, 0xc1, 0x01, 0x5b, 0xd0, 0x94, 0xd0, 0x7c, 0x11, 0xa7, 0xc2, + 0x13, 0x57, 0x19, 0xe5, 0xde, 0x1c, 0xa7, 0x2c, 0x8d, 0xe7, 0x38, 0x71, 0xb3, 0x9c, 0x09, 0x06, + 0x07, 0x95, 0xc2, 0x55, 0x8a, 0xe1, 0x51, 0xc8, 0x42, 0xa6, 0x9a, 0x9e, 0x8c, 0x4a, 0xdd, 0xf0, + 0xd9, 0xbd, 0x49, 0xea, 0xbb, 0xe9, 0x5a, 0x21, 0x63, 0x61, 0x42, 0x3d, 0x95, 0xcd, 0x96, 0x9f, + 0x3d, 0x11, 0x2f, 0x28, 0x17, 0x78, 0x91, 0x95, 0x82, 0xd1, 0x57, 0x30, 0x38, 0xdd, 0x6e, 0xf6, + 0x13, 0x36, 0xff, 0x32, 0x79, 0x05, 0x21, 0x68, 0x46, 0x98, 0x47, 0x86, 0x66, 0x6b, 0xce, 0x01, + 0x52, 0x31, 0xbc, 0x00, 0x87, 0x19, 0xce, 0x45, 0xc0, 0xa9, 0x08, 0x22, 0x8a, 0x09, 0xcd, 0x8d, + 0xba, 0xad, 0x39, 0xbd, 0xb1, 0xe3, 0xde, 0x35, 0xea, 0xee, 0x06, 0x9e, 0xe1, 0x5c, 0x9c, 0x53, + 0xf1, 0x46, 0xe9, 0xfd, 0xe6, 0xcd, 0xca, 0xaa, 0xa1, 0x7e, 0xb6, 0x5f, 0x1c, 0xf9, 0xe0, 0xf8, + 0x61, 0x39, 0x3c, 0x02, 0x2d, 0xc1, 0x04, 0x4e, 0x94, 0x8d, 0x3e, 0x2a, 0x93, 0x9d, 0xb7, 0x7a, + 0xe5, 0x6d, 0xf4, 0xab, 0x0e, 0x9e, 0x56, 0x43, 0x72, 0x96, 0x31, 0x8e, 0x13, 0x78, 0x02, 0x9a, + 0xd2, 0x8e, 0xfa, 0xfd, 0xc9, 0xd8, 0xba, 0x6f, 0xf3, 0x3c, 0x0e, 0x53, 0x4a, 0xde, 0xf3, 0x70, + 0x7a, 0x95, 0x51, 0xa4, 0xc4, 0xf0, 0x18, 0xb4, 0x23, 0x1a, 0x87, 0x91, 0x50, 0x0b, 0x06, 0x68, + 0x93, 0x49, 0x33, 0x39, 0x5b, 0xa6, 0xc4, 0x68, 0xa8, 0x72, 0x99, 0xc0, 0x17, 0xa0, 0x9b, 0xb1, + 0x24, 0x28, 0x3b, 0x4d, 0x5b, 0x73, 0x1a, 0xfe, 0x41, 0xb1, 0xb2, 0xf4, 0xb3, 0x0f, 0xef, 0x90, + 0xac, 0x21, 0x3d, 0x63, 0x89, 0x8a, 0xe0, 0x5b, 0xa0, 0xcf, 0x24, 0xde, 0x20, 0x26, 0x46, 0x4b, + 0x81, 0x1b, 0xfd, 0x01, 0xdc, 0xe6, 0x12, 0x7e, 0xaf, 0x58, 0x59, 0x9d, 0x4d, 0x82, 0x3a, 0x6a, + 0xc0, 0x84, 0x40, 0x1f, 0x74, 0x77, 0x67, 0x34, 0xda, 0x6a, 0xd8, 0xd0, 0x2d, 0x0f, 0xed, 0x6e, + 0x0f, 0xed, 0x4e, 0xb7, 0x0a, 0x5f, 0x97, 0xdc, 0xaf, 0x7f, 0x58, 0x1a, 0xaa, 0x7e, 0x83, 0xcf, + 0x81, 0x3e, 0x8f, 0x70, 0x9c, 0x4a, 0x3f, 0x1d, 0x5b, 0x73, 0xba, 0xe5, 0xae, 0x53, 0x59, 0x93, + 0xbb, 0x54, 0x73, 0x42, 0x24, 0x6f, 0x82, 0x05, 0x36, 0xf4, 0x92, 0xb7, 0x8c, 0x47, 0xdf, 0x1a, + 0xa0, 0xbf, 0xb3, 0x7a, 0xc1, 0x04, 0x7d, 0x0c, 0xd6, 0xfb, 0x00, 0x9b, 0xff, 0x13, 0x60, 0xeb, + 0xdf, 0x01, 0xb6, 0xff, 0x02, 0x60, 0xa7, 0x02, 0x08, 0x5f, 0x83, 0x43, 0x1e, 0x13, 0x1a, 0x88, + 0xcb, 0x20, 0xa7, 0x7c, 0x99, 0x08, 0x6e, 0xe8, 0x76, 0xc3, 0xe9, 0x8d, 0xcd, 0x87, 0xc8, 0x11, + 0x3a, 0xbd, 0x44, 0x4a, 0x86, 0xfa, 0x7c, 0x2f, 0xe3, 0xfe, 0xc7, 0x9b, 0xc2, 0xd4, 0x6e, 0x0b, + 0x53, 0xfb, 0x59, 0x98, 0xda, 0xf5, 0xda, 0xac, 0xdd, 0xae, 0xcd, 0xda, 0xf7, 0xb5, 0x59, 0xfb, + 0xf4, 0x32, 0x8c, 0x45, 0xb4, 0x9c, 0xb9, 0x73, 0xb6, 0xf0, 0xf6, 0x1f, 0x88, 0x2a, 0x2c, 0x1f, + 0x92, 0xbb, 0x8f, 0xc7, 0xac, 0xad, 0xea, 0x27, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x58, 0xd7, + 0xb1, 0xd3, 0xa1, 0x04, 0x00, 0x00, } func (m *CanonicalBlockID) Marshal() (dAtA []byte, err error) { @@ -447,6 +474,13 @@ func (m *CanonicalProposal) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.Data) > 0 { + i -= len(m.Data) + copy(dAtA[i:], m.Data) + i = encodeVarintCanonical(dAtA, i, uint64(len(m.Data))) + i-- + dAtA[i] = 0x42 + } if len(m.ChainID) > 0 { i -= len(m.ChainID) copy(dAtA[i:], m.ChainID) @@ -519,6 +553,27 @@ func (m *CanonicalVote) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.SideTxResults) > 0 { + for iNdEx := len(m.SideTxResults) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.SideTxResults[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCanonical(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } + } + if len(m.Data) > 0 { + i -= len(m.Data) + copy(dAtA[i:], m.Data) + i = encodeVarintCanonical(dAtA, i, uint64(len(m.Data))) + i-- + dAtA[i] = 0x3a + } if len(m.ChainID) > 0 { i -= len(m.ChainID) copy(dAtA[i:], m.ChainID) @@ -636,6 +691,10 @@ func (m *CanonicalProposal) Size() (n int) { if l > 0 { n += 1 + l + sovCanonical(uint64(l)) } + l = len(m.Data) + if l > 0 { + n += 1 + l + sovCanonical(uint64(l)) + } return n } @@ -664,6 +723,16 @@ func (m *CanonicalVote) Size() (n int) { if l > 0 { n += 1 + l + sovCanonical(uint64(l)) } + l = len(m.Data) + if l > 0 { + n += 1 + l + sovCanonical(uint64(l)) + } + if len(m.SideTxResults) > 0 { + for _, e := range m.SideTxResults { + l = e.Size() + n += 1 + l + sovCanonical(uint64(l)) + } + } return n } @@ -1081,6 +1150,40 @@ func (m *CanonicalProposal) Unmarshal(dAtA []byte) error { } m.ChainID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCanonical + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthCanonical + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthCanonical + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...) + if m.Data == nil { + m.Data = []byte{} + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipCanonical(dAtA[iNdEx:]) @@ -1271,6 +1374,74 @@ func (m *CanonicalVote) Unmarshal(dAtA []byte) error { } m.ChainID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCanonical + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthCanonical + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthCanonical + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...) + if m.Data == nil { + m.Data = []byte{} + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SideTxResults", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCanonical + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCanonical + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCanonical + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SideTxResults = append(m.SideTxResults, &SideTxResult{}) + if err := m.SideTxResults[len(m.SideTxResults)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipCanonical(dAtA[iNdEx:]) diff --git a/proto/tendermint/types/canonical.proto b/proto/tendermint/types/canonical.proto index e88fd6ffe31..5a8f58c941c 100644 --- a/proto/tendermint/types/canonical.proto +++ b/proto/tendermint/types/canonical.proto @@ -25,6 +25,7 @@ message CanonicalProposal { CanonicalBlockID block_id = 5 [(gogoproto.customname) = "BlockID"]; google.protobuf.Timestamp timestamp = 6 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; string chain_id = 7 [(gogoproto.customname) = "ChainID"]; + bytes data = 8; } message CanonicalVote { @@ -34,4 +35,6 @@ message CanonicalVote { CanonicalBlockID block_id = 4 [(gogoproto.customname) = "BlockID"]; google.protobuf.Timestamp timestamp = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; string chain_id = 6 [(gogoproto.customname) = "ChainID"]; + bytes data = 7; + repeated tendermint.types.SideTxResult side_tx_results = 8; } diff --git a/proto/tendermint/types/types.pb.go b/proto/tendermint/types/types.pb.go index 6bf38239431..589b09b8730 100644 --- a/proto/tendermint/types/types.pb.go +++ b/proto/tendermint/types/types.pb.go @@ -282,6 +282,8 @@ type Header struct { // consensus info EvidenceHash []byte `protobuf:"bytes,13,opt,name=evidence_hash,json=evidenceHash,proto3" json:"evidence_hash,omitempty"` ProposerAddress []byte `protobuf:"bytes,14,opt,name=proposer_address,json=proposerAddress,proto3" json:"proposer_address,omitempty"` + NumTxs int64 `protobuf:"varint,15,opt,name=num_txs,json=numTxs,proto3" json:"num_txs,omitempty"` + TotalTxs int64 `protobuf:"varint,16,opt,name=total_txs,json=totalTxs,proto3" json:"total_txs,omitempty"` } func (m *Header) Reset() { *m = Header{} } @@ -415,6 +417,20 @@ func (m *Header) GetProposerAddress() []byte { return nil } +func (m *Header) GetNumTxs() int64 { + if m != nil { + return m.NumTxs + } + return 0 +} + +func (m *Header) GetTotalTxs() int64 { + if m != nil { + return m.TotalTxs + } + return 0 +} + // Data contains the set of transactions included in the block type Data struct { // Txs that will be applied by state @ block.Height+1. @@ -466,14 +482,15 @@ func (m *Data) GetTxs() [][]byte { // Vote represents a prevote, precommit, or commit vote from validators for // consensus. type Vote struct { - Type SignedMsgType `protobuf:"varint,1,opt,name=type,proto3,enum=tendermint.types.SignedMsgType" json:"type,omitempty"` - Height int64 `protobuf:"varint,2,opt,name=height,proto3" json:"height,omitempty"` - Round int32 `protobuf:"varint,3,opt,name=round,proto3" json:"round,omitempty"` - BlockID BlockID `protobuf:"bytes,4,opt,name=block_id,json=blockId,proto3" json:"block_id"` - Timestamp time.Time `protobuf:"bytes,5,opt,name=timestamp,proto3,stdtime" json:"timestamp"` - ValidatorAddress []byte `protobuf:"bytes,6,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` - ValidatorIndex int32 `protobuf:"varint,7,opt,name=validator_index,json=validatorIndex,proto3" json:"validator_index,omitempty"` - Signature []byte `protobuf:"bytes,8,opt,name=signature,proto3" json:"signature,omitempty"` + Type SignedMsgType `protobuf:"varint,1,opt,name=type,proto3,enum=tendermint.types.SignedMsgType" json:"type,omitempty"` + Height int64 `protobuf:"varint,2,opt,name=height,proto3" json:"height,omitempty"` + Round int32 `protobuf:"varint,3,opt,name=round,proto3" json:"round,omitempty"` + BlockID BlockID `protobuf:"bytes,4,opt,name=block_id,json=blockId,proto3" json:"block_id"` + Timestamp time.Time `protobuf:"bytes,5,opt,name=timestamp,proto3,stdtime" json:"timestamp"` + ValidatorAddress []byte `protobuf:"bytes,6,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` + ValidatorIndex int32 `protobuf:"varint,7,opt,name=validator_index,json=validatorIndex,proto3" json:"validator_index,omitempty"` + Signature []byte `protobuf:"bytes,8,opt,name=signature,proto3" json:"signature,omitempty"` + SideTxResults []*SideTxResult `protobuf:"bytes,9,rep,name=side_tx_results,json=sideTxResults,proto3" json:"side_tx_results,omitempty"` } func (m *Vote) Reset() { *m = Vote{} } @@ -565,6 +582,74 @@ func (m *Vote) GetSignature() []byte { return nil } +func (m *Vote) GetSideTxResults() []*SideTxResult { + if m != nil { + return m.SideTxResults + } + return nil +} + +// Side-Tx-Result structure inside vote +type SideTxResult struct { + TxHash []byte `protobuf:"bytes,1,opt,name=tx_hash,json=txHash,proto3" json:"tx_hash,omitempty"` + Result int32 `protobuf:"varint,2,opt,name=result,proto3" json:"result,omitempty"` + Sig []byte `protobuf:"bytes,3,opt,name=sig,proto3" json:"sig,omitempty"` +} + +func (m *SideTxResult) Reset() { *m = SideTxResult{} } +func (m *SideTxResult) String() string { return proto.CompactTextString(m) } +func (*SideTxResult) ProtoMessage() {} +func (*SideTxResult) Descriptor() ([]byte, []int) { + return fileDescriptor_d3a6e55e2345de56, []int{6} +} +func (m *SideTxResult) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SideTxResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_SideTxResult.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *SideTxResult) XXX_Merge(src proto.Message) { + xxx_messageInfo_SideTxResult.Merge(m, src) +} +func (m *SideTxResult) XXX_Size() int { + return m.Size() +} +func (m *SideTxResult) XXX_DiscardUnknown() { + xxx_messageInfo_SideTxResult.DiscardUnknown(m) +} + +var xxx_messageInfo_SideTxResult proto.InternalMessageInfo + +func (m *SideTxResult) GetTxHash() []byte { + if m != nil { + return m.TxHash + } + return nil +} + +func (m *SideTxResult) GetResult() int32 { + if m != nil { + return m.Result + } + return 0 +} + +func (m *SideTxResult) GetSig() []byte { + if m != nil { + return m.Sig + } + return nil +} + // Commit contains the evidence that a block was committed by a set of validators. type Commit struct { Height int64 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"` @@ -577,7 +662,7 @@ func (m *Commit) Reset() { *m = Commit{} } func (m *Commit) String() string { return proto.CompactTextString(m) } func (*Commit) ProtoMessage() {} func (*Commit) Descriptor() ([]byte, []int) { - return fileDescriptor_d3a6e55e2345de56, []int{6} + return fileDescriptor_d3a6e55e2345de56, []int{7} } func (m *Commit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -636,17 +721,18 @@ func (m *Commit) GetSignatures() []CommitSig { // CommitSig is a part of the Vote included in a Commit. type CommitSig struct { - BlockIdFlag BlockIDFlag `protobuf:"varint,1,opt,name=block_id_flag,json=blockIdFlag,proto3,enum=tendermint.types.BlockIDFlag" json:"block_id_flag,omitempty"` - ValidatorAddress []byte `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` - Timestamp time.Time `protobuf:"bytes,3,opt,name=timestamp,proto3,stdtime" json:"timestamp"` - Signature []byte `protobuf:"bytes,4,opt,name=signature,proto3" json:"signature,omitempty"` + BlockIdFlag BlockIDFlag `protobuf:"varint,1,opt,name=block_id_flag,json=blockIdFlag,proto3,enum=tendermint.types.BlockIDFlag" json:"block_id_flag,omitempty"` + ValidatorAddress []byte `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` + Timestamp time.Time `protobuf:"bytes,3,opt,name=timestamp,proto3,stdtime" json:"timestamp"` + Signature []byte `protobuf:"bytes,4,opt,name=signature,proto3" json:"signature,omitempty"` + SideTxResults []*SideTxResult `protobuf:"bytes,5,rep,name=side_tx_results,json=sideTxResults,proto3" json:"side_tx_results,omitempty"` } func (m *CommitSig) Reset() { *m = CommitSig{} } func (m *CommitSig) String() string { return proto.CompactTextString(m) } func (*CommitSig) ProtoMessage() {} func (*CommitSig) Descriptor() ([]byte, []int) { - return fileDescriptor_d3a6e55e2345de56, []int{7} + return fileDescriptor_d3a6e55e2345de56, []int{8} } func (m *CommitSig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -703,6 +789,13 @@ func (m *CommitSig) GetSignature() []byte { return nil } +func (m *CommitSig) GetSideTxResults() []*SideTxResult { + if m != nil { + return m.SideTxResults + } + return nil +} + type Proposal struct { Type SignedMsgType `protobuf:"varint,1,opt,name=type,proto3,enum=tendermint.types.SignedMsgType" json:"type,omitempty"` Height int64 `protobuf:"varint,2,opt,name=height,proto3" json:"height,omitempty"` @@ -711,13 +804,14 @@ type Proposal struct { BlockID BlockID `protobuf:"bytes,5,opt,name=block_id,json=blockId,proto3" json:"block_id"` Timestamp time.Time `protobuf:"bytes,6,opt,name=timestamp,proto3,stdtime" json:"timestamp"` Signature []byte `protobuf:"bytes,7,opt,name=signature,proto3" json:"signature,omitempty"` + Data []byte `protobuf:"bytes,8,opt,name=data,proto3" json:"data,omitempty"` } func (m *Proposal) Reset() { *m = Proposal{} } func (m *Proposal) String() string { return proto.CompactTextString(m) } func (*Proposal) ProtoMessage() {} func (*Proposal) Descriptor() ([]byte, []int) { - return fileDescriptor_d3a6e55e2345de56, []int{8} + return fileDescriptor_d3a6e55e2345de56, []int{9} } func (m *Proposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -795,6 +889,13 @@ func (m *Proposal) GetSignature() []byte { return nil } +func (m *Proposal) GetData() []byte { + if m != nil { + return m.Data + } + return nil +} + type SignedHeader struct { Header *Header `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"` Commit *Commit `protobuf:"bytes,2,opt,name=commit,proto3" json:"commit,omitempty"` @@ -804,7 +905,7 @@ func (m *SignedHeader) Reset() { *m = SignedHeader{} } func (m *SignedHeader) String() string { return proto.CompactTextString(m) } func (*SignedHeader) ProtoMessage() {} func (*SignedHeader) Descriptor() ([]byte, []int) { - return fileDescriptor_d3a6e55e2345de56, []int{9} + return fileDescriptor_d3a6e55e2345de56, []int{10} } func (m *SignedHeader) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -856,7 +957,7 @@ func (m *LightBlock) Reset() { *m = LightBlock{} } func (m *LightBlock) String() string { return proto.CompactTextString(m) } func (*LightBlock) ProtoMessage() {} func (*LightBlock) Descriptor() ([]byte, []int) { - return fileDescriptor_d3a6e55e2345de56, []int{10} + return fileDescriptor_d3a6e55e2345de56, []int{11} } func (m *LightBlock) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -910,7 +1011,7 @@ func (m *BlockMeta) Reset() { *m = BlockMeta{} } func (m *BlockMeta) String() string { return proto.CompactTextString(m) } func (*BlockMeta) ProtoMessage() {} func (*BlockMeta) Descriptor() ([]byte, []int) { - return fileDescriptor_d3a6e55e2345de56, []int{11} + return fileDescriptor_d3a6e55e2345de56, []int{12} } func (m *BlockMeta) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -978,7 +1079,7 @@ func (m *TxProof) Reset() { *m = TxProof{} } func (m *TxProof) String() string { return proto.CompactTextString(m) } func (*TxProof) ProtoMessage() {} func (*TxProof) Descriptor() ([]byte, []int) { - return fileDescriptor_d3a6e55e2345de56, []int{12} + return fileDescriptor_d3a6e55e2345de56, []int{13} } func (m *TxProof) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1037,6 +1138,7 @@ func init() { proto.RegisterType((*Header)(nil), "tendermint.types.Header") proto.RegisterType((*Data)(nil), "tendermint.types.Data") proto.RegisterType((*Vote)(nil), "tendermint.types.Vote") + proto.RegisterType((*SideTxResult)(nil), "tendermint.types.SideTxResult") proto.RegisterType((*Commit)(nil), "tendermint.types.Commit") proto.RegisterType((*CommitSig)(nil), "tendermint.types.CommitSig") proto.RegisterType((*Proposal)(nil), "tendermint.types.Proposal") @@ -1049,90 +1151,95 @@ func init() { func init() { proto.RegisterFile("tendermint/types/types.proto", fileDescriptor_d3a6e55e2345de56) } var fileDescriptor_d3a6e55e2345de56 = []byte{ - // 1314 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0x4f, 0x6f, 0x1b, 0x45, - 0x14, 0xcf, 0xda, 0x9b, 0xd8, 0x7e, 0xb6, 0x13, 0x67, 0x95, 0xb6, 0xae, 0xdb, 0x38, 0x2b, 0x23, - 0x20, 0x2d, 0x68, 0x53, 0x52, 0xc4, 0x9f, 0x03, 0x07, 0xdb, 0x49, 0x5b, 0xab, 0x89, 0x63, 0xd6, - 0x6e, 0x11, 0x5c, 0x56, 0x6b, 0xef, 0xd4, 0x5e, 0xba, 0xde, 0x59, 0xed, 0x8c, 0x43, 0xd2, 0x4f, - 0x80, 0x72, 0xea, 0x89, 0x5b, 0x4e, 0x70, 0xe0, 0xce, 0x17, 0x40, 0x9c, 0x7a, 0xec, 0x0d, 0x2e, - 0x14, 0x94, 0x4a, 0x88, 0x8f, 0x81, 0xe6, 0x8f, 0xd7, 0xeb, 0x38, 0x86, 0xaa, 0xaa, 0xb8, 0x58, - 0x3b, 0xef, 0xfd, 0xde, 0xcc, 0x7b, 0xbf, 0xf7, 0x9b, 0x3f, 0x86, 0xeb, 0x14, 0xf9, 0x0e, 0x0a, - 0x87, 0xae, 0x4f, 0xb7, 0xe8, 0x71, 0x80, 0x88, 0xf8, 0x35, 0x82, 0x10, 0x53, 0xac, 0x15, 0x26, - 0x5e, 0x83, 0xdb, 0x4b, 0x6b, 0x7d, 0xdc, 0xc7, 0xdc, 0xb9, 0xc5, 0xbe, 0x04, 0xae, 0xb4, 0xd1, - 0xc7, 0xb8, 0xef, 0xa1, 0x2d, 0x3e, 0xea, 0x8e, 0x1e, 0x6d, 0x51, 0x77, 0x88, 0x08, 0xb5, 0x87, - 0x81, 0x04, 0xac, 0xc7, 0x96, 0xe9, 0x85, 0xc7, 0x01, 0xc5, 0x0c, 0x8b, 0x1f, 0x49, 0x77, 0x39, - 0xe6, 0x3e, 0x44, 0x21, 0x71, 0xb1, 0x1f, 0xcf, 0xa3, 0xa4, 0xcf, 0x64, 0x79, 0x68, 0x7b, 0xae, - 0x63, 0x53, 0x1c, 0x0a, 0x44, 0xe5, 0x53, 0xc8, 0xb7, 0xec, 0x90, 0xb6, 0x11, 0xbd, 0x87, 0x6c, - 0x07, 0x85, 0xda, 0x1a, 0x2c, 0x52, 0x4c, 0x6d, 0xaf, 0xa8, 0xe8, 0xca, 0x66, 0xde, 0x14, 0x03, - 0x4d, 0x03, 0x75, 0x60, 0x93, 0x41, 0x31, 0xa1, 0x2b, 0x9b, 0x39, 0x93, 0x7f, 0x57, 0x06, 0xa0, - 0xb2, 0x50, 0x16, 0xe1, 0xfa, 0x0e, 0x3a, 0x1a, 0x47, 0xf0, 0x01, 0xb3, 0x76, 0x8f, 0x29, 0x22, - 0x32, 0x44, 0x0c, 0xb4, 0x0f, 0x61, 0x91, 0xe7, 0x5f, 0x4c, 0xea, 0xca, 0x66, 0x76, 0xbb, 0x68, - 0xc4, 0x88, 0x12, 0xf5, 0x19, 0x2d, 0xe6, 0xaf, 0xa9, 0xcf, 0x5e, 0x6c, 0x2c, 0x98, 0x02, 0x5c, - 0xf1, 0x20, 0x55, 0xf3, 0x70, 0xef, 0x71, 0x63, 0x27, 0x4a, 0x44, 0x99, 0x24, 0xa2, 0xed, 0xc3, - 0x4a, 0x60, 0x87, 0xd4, 0x22, 0x88, 0x5a, 0x03, 0x5e, 0x05, 0x5f, 0x34, 0xbb, 0xbd, 0x61, 0x9c, - 0xef, 0x83, 0x31, 0x55, 0xac, 0x5c, 0x25, 0x1f, 0xc4, 0x8d, 0x95, 0xbf, 0x54, 0x58, 0x92, 0x64, - 0x7c, 0x06, 0x29, 0x49, 0x2b, 0x5f, 0x30, 0xbb, 0xbd, 0x1e, 0x9f, 0x51, 0xba, 0x8c, 0x3a, 0xf6, - 0x09, 0xf2, 0xc9, 0x88, 0xc8, 0xf9, 0xc6, 0x31, 0xda, 0x3b, 0x90, 0xee, 0x0d, 0x6c, 0xd7, 0xb7, - 0x5c, 0x87, 0x67, 0x94, 0xa9, 0x65, 0xcf, 0x5e, 0x6c, 0xa4, 0xea, 0xcc, 0xd6, 0xd8, 0x31, 0x53, - 0xdc, 0xd9, 0x70, 0xb4, 0xcb, 0xb0, 0x34, 0x40, 0x6e, 0x7f, 0x40, 0x39, 0x2d, 0x49, 0x53, 0x8e, - 0xb4, 0x4f, 0x40, 0x65, 0x82, 0x28, 0xaa, 0x7c, 0xed, 0x92, 0x21, 0xd4, 0x62, 0x8c, 0xd5, 0x62, - 0x74, 0xc6, 0x6a, 0xa9, 0xa5, 0xd9, 0xc2, 0x4f, 0xff, 0xd8, 0x50, 0x4c, 0x1e, 0xa1, 0xd5, 0x21, - 0xef, 0xd9, 0x84, 0x5a, 0x5d, 0x46, 0x1b, 0x5b, 0x7e, 0x91, 0x4f, 0x71, 0x75, 0x96, 0x10, 0x49, - 0xac, 0x4c, 0x3d, 0xcb, 0xa2, 0x84, 0xc9, 0xd1, 0x36, 0xa1, 0xc0, 0x27, 0xe9, 0xe1, 0xe1, 0xd0, - 0xa5, 0x16, 0xe7, 0x7d, 0x89, 0xf3, 0xbe, 0xcc, 0xec, 0x75, 0x6e, 0xbe, 0xc7, 0x3a, 0x70, 0x0d, - 0x32, 0x8e, 0x4d, 0x6d, 0x01, 0x49, 0x71, 0x48, 0x9a, 0x19, 0xb8, 0xf3, 0x5d, 0x58, 0x89, 0x54, - 0x47, 0x04, 0x24, 0x2d, 0x66, 0x99, 0x98, 0x39, 0xf0, 0x16, 0xac, 0xf9, 0xe8, 0x88, 0x5a, 0xe7, - 0xd1, 0x19, 0x8e, 0xd6, 0x98, 0xef, 0xe1, 0x74, 0xc4, 0xdb, 0xb0, 0xdc, 0x1b, 0x93, 0x2f, 0xb0, - 0xc0, 0xb1, 0xf9, 0xc8, 0xca, 0x61, 0x57, 0x21, 0x6d, 0x07, 0x81, 0x00, 0x64, 0x39, 0x20, 0x65, - 0x07, 0x01, 0x77, 0xdd, 0x84, 0x55, 0x5e, 0x63, 0x88, 0xc8, 0xc8, 0xa3, 0x72, 0x92, 0x1c, 0xc7, - 0xac, 0x30, 0x87, 0x29, 0xec, 0x1c, 0xfb, 0x16, 0xe4, 0xd1, 0xa1, 0xeb, 0x20, 0xbf, 0x87, 0x04, - 0x2e, 0xcf, 0x71, 0xb9, 0xb1, 0x91, 0x83, 0x6e, 0x40, 0x21, 0x08, 0x71, 0x80, 0x09, 0x0a, 0x2d, - 0xdb, 0x71, 0x42, 0x44, 0x48, 0x71, 0x59, 0xcc, 0x37, 0xb6, 0x57, 0x85, 0xb9, 0x52, 0x04, 0x75, - 0xc7, 0xa6, 0xb6, 0x56, 0x80, 0x24, 0x3d, 0x22, 0x45, 0x45, 0x4f, 0x6e, 0xe6, 0x4c, 0xf6, 0x59, - 0xf9, 0x3b, 0x01, 0xea, 0x43, 0x4c, 0x91, 0x76, 0x1b, 0x54, 0xd6, 0x26, 0xae, 0xbe, 0xe5, 0x8b, - 0xf4, 0xdc, 0x76, 0xfb, 0x3e, 0x72, 0xf6, 0x49, 0xbf, 0x73, 0x1c, 0x20, 0x93, 0x83, 0x63, 0x72, - 0x4a, 0x4c, 0xc9, 0x69, 0x0d, 0x16, 0x43, 0x3c, 0xf2, 0x1d, 0xae, 0xb2, 0x45, 0x53, 0x0c, 0xb4, - 0x5d, 0x48, 0x47, 0x2a, 0x51, 0xff, 0x4b, 0x25, 0x2b, 0x4c, 0x25, 0x4c, 0xc3, 0xd2, 0x60, 0xa6, - 0xba, 0x52, 0x2c, 0x35, 0xc8, 0x44, 0x87, 0x97, 0x54, 0xdb, 0xab, 0x09, 0x76, 0x12, 0xa6, 0xbd, - 0x07, 0xab, 0x51, 0xef, 0x23, 0xf2, 0x84, 0xe2, 0x0a, 0x91, 0x43, 0xb2, 0x37, 0x25, 0x2b, 0x4b, - 0x1c, 0x40, 0x29, 0x5e, 0xd7, 0x44, 0x56, 0x0d, 0x7e, 0x12, 0x5d, 0x87, 0x0c, 0x71, 0xfb, 0xbe, - 0x4d, 0x47, 0x21, 0x92, 0xca, 0x9b, 0x18, 0x2a, 0x3f, 0x2b, 0xb0, 0x24, 0x94, 0x1c, 0xe3, 0x4d, - 0xb9, 0x98, 0xb7, 0xc4, 0x3c, 0xde, 0x92, 0xaf, 0xcf, 0x5b, 0x15, 0x20, 0x4a, 0x86, 0x14, 0x55, - 0x3d, 0xb9, 0x99, 0xdd, 0xbe, 0x36, 0x3b, 0x91, 0x48, 0xb1, 0xed, 0xf6, 0xe5, 0x46, 0x8d, 0x05, - 0x55, 0x7e, 0x57, 0x20, 0x13, 0xf9, 0xb5, 0x2a, 0xe4, 0xc7, 0x79, 0x59, 0x8f, 0x3c, 0xbb, 0x2f, - 0xb5, 0xb3, 0x3e, 0x37, 0xb9, 0x3b, 0x9e, 0xdd, 0x37, 0xb3, 0x32, 0x1f, 0x36, 0xb8, 0xb8, 0x0f, - 0x89, 0x39, 0x7d, 0x98, 0x6a, 0x7c, 0xf2, 0xf5, 0x1a, 0x3f, 0xd5, 0x22, 0xf5, 0x7c, 0x8b, 0x7e, - 0x4a, 0x40, 0xba, 0xc5, 0xf7, 0x8e, 0xed, 0xfd, 0x1f, 0x3b, 0xe2, 0x1a, 0x64, 0x02, 0xec, 0x59, - 0xc2, 0xa3, 0x72, 0x4f, 0x3a, 0xc0, 0x9e, 0x39, 0xd3, 0xf6, 0xc5, 0x37, 0xb4, 0x5d, 0x96, 0xde, - 0x00, 0x6b, 0xa9, 0xf3, 0xac, 0x85, 0x90, 0x13, 0x54, 0xc8, 0xbb, 0xec, 0x16, 0xe3, 0x80, 0x5f, - 0x8e, 0xca, 0xec, 0xdd, 0x2b, 0xd2, 0x16, 0x48, 0x53, 0xe2, 0x58, 0x84, 0x38, 0xfa, 0xe5, 0x75, - 0x5a, 0x9c, 0x27, 0x4b, 0x53, 0xe2, 0x2a, 0xdf, 0x29, 0x00, 0x7b, 0x8c, 0x59, 0x5e, 0x2f, 0xbb, - 0x85, 0x08, 0x4f, 0xc1, 0x9a, 0x5a, 0xb9, 0x3c, 0xaf, 0x69, 0x72, 0xfd, 0x1c, 0x89, 0xe7, 0x5d, - 0x87, 0xfc, 0x44, 0x8c, 0x04, 0x8d, 0x93, 0xb9, 0x60, 0x92, 0xe8, 0x72, 0x68, 0x23, 0x6a, 0xe6, - 0x0e, 0x63, 0xa3, 0xca, 0x2f, 0x0a, 0x64, 0x78, 0x4e, 0xfb, 0x88, 0xda, 0x53, 0x3d, 0x54, 0x5e, - 0xbf, 0x87, 0xeb, 0x00, 0x62, 0x1a, 0xe2, 0x3e, 0x41, 0x52, 0x59, 0x19, 0x6e, 0x69, 0xbb, 0x4f, - 0x90, 0xf6, 0x51, 0x44, 0x78, 0xf2, 0xdf, 0x09, 0x97, 0x5b, 0x7a, 0x4c, 0xfb, 0x15, 0x48, 0xf9, - 0xa3, 0xa1, 0xc5, 0xae, 0x04, 0x55, 0xa8, 0xd5, 0x1f, 0x0d, 0x3b, 0x47, 0xa4, 0xf2, 0x35, 0xa4, - 0x3a, 0x47, 0xfc, 0x79, 0xc4, 0x24, 0x1a, 0x62, 0x2c, 0xef, 0x64, 0xf1, 0x16, 0x4a, 0x33, 0x03, - 0xbf, 0x82, 0x34, 0x50, 0xd9, 0xe5, 0x3b, 0x7e, 0xac, 0xb1, 0x6f, 0xcd, 0x78, 0xc5, 0x87, 0x97, - 0x7c, 0x72, 0xdd, 0xfc, 0x55, 0x81, 0x6c, 0xec, 0x7c, 0xd0, 0x3e, 0x80, 0x4b, 0xb5, 0xbd, 0x83, - 0xfa, 0x7d, 0xab, 0xb1, 0x63, 0xdd, 0xd9, 0xab, 0xde, 0xb5, 0x1e, 0x34, 0xef, 0x37, 0x0f, 0xbe, - 0x68, 0x16, 0x16, 0x4a, 0x97, 0x4f, 0x4e, 0x75, 0x2d, 0x86, 0x7d, 0xe0, 0x3f, 0xf6, 0xf1, 0x37, - 0xbe, 0xb6, 0x05, 0x6b, 0xd3, 0x21, 0xd5, 0x5a, 0x7b, 0xb7, 0xd9, 0x29, 0x28, 0xa5, 0x4b, 0x27, - 0xa7, 0xfa, 0x6a, 0x2c, 0xa2, 0xda, 0x25, 0xc8, 0xa7, 0xb3, 0x01, 0xf5, 0x83, 0xfd, 0xfd, 0x46, - 0xa7, 0x90, 0x98, 0x09, 0x90, 0x07, 0xf6, 0x0d, 0x58, 0x9d, 0x0e, 0x68, 0x36, 0xf6, 0x0a, 0xc9, - 0x92, 0x76, 0x72, 0xaa, 0x2f, 0xc7, 0xd0, 0x4d, 0xd7, 0x2b, 0xa5, 0xbf, 0xfd, 0xbe, 0xbc, 0xf0, - 0xe3, 0x0f, 0x65, 0x85, 0x55, 0x96, 0x9f, 0x3a, 0x23, 0xb4, 0xf7, 0xe1, 0x4a, 0xbb, 0x71, 0xb7, - 0xb9, 0xbb, 0x63, 0xed, 0xb7, 0xef, 0x5a, 0x9d, 0x2f, 0x5b, 0xbb, 0xb1, 0xea, 0x56, 0x4e, 0x4e, - 0xf5, 0xac, 0x2c, 0x69, 0x1e, 0xba, 0x65, 0xee, 0x3e, 0x3c, 0xe8, 0xec, 0x16, 0x14, 0x81, 0x6e, - 0x85, 0xe8, 0x10, 0x53, 0xc4, 0xd1, 0xb7, 0xe0, 0xea, 0x05, 0xe8, 0xa8, 0xb0, 0xd5, 0x93, 0x53, - 0x3d, 0xdf, 0x0a, 0x91, 0xd8, 0x3f, 0x3c, 0xc2, 0x80, 0xe2, 0x6c, 0xc4, 0x41, 0xeb, 0xa0, 0x5d, - 0xdd, 0x2b, 0xe8, 0xa5, 0xc2, 0xc9, 0xa9, 0x9e, 0x1b, 0x1f, 0x86, 0x0c, 0x3f, 0xa9, 0xac, 0xf6, - 0xf9, 0xb3, 0xb3, 0xb2, 0xf2, 0xfc, 0xac, 0xac, 0xfc, 0x79, 0x56, 0x56, 0x9e, 0xbe, 0x2c, 0x2f, - 0x3c, 0x7f, 0x59, 0x5e, 0xf8, 0xed, 0x65, 0x79, 0xe1, 0xab, 0x8f, 0xfb, 0x2e, 0x1d, 0x8c, 0xba, - 0x46, 0x0f, 0x0f, 0xb7, 0xe2, 0x7f, 0x09, 0x26, 0x9f, 0xe2, 0xaf, 0xc9, 0xf9, 0xbf, 0x0b, 0xdd, - 0x25, 0x6e, 0xbf, 0xfd, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4c, 0x78, 0x43, 0xdf, 0xef, 0x0c, - 0x00, 0x00, + // 1407 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0x4f, 0x73, 0x1a, 0xc7, + 0x12, 0xd7, 0xc2, 0xf2, 0xaf, 0x01, 0x09, 0x6d, 0xc9, 0x36, 0xc6, 0x16, 0xa2, 0x78, 0xf5, 0xde, + 0x93, 0xfd, 0x5e, 0x21, 0x47, 0x4e, 0xe5, 0xcf, 0x21, 0x07, 0x40, 0xb2, 0x4d, 0x59, 0x42, 0x78, + 0xc1, 0x4e, 0x25, 0x97, 0xad, 0x85, 0x1d, 0xc3, 0xc6, 0xb0, 0xbb, 0xb5, 0x33, 0x28, 0xc8, 0x9f, + 0x20, 0xa5, 0x93, 0x4f, 0x39, 0x45, 0xa7, 0x24, 0x55, 0x39, 0xe6, 0x23, 0xa4, 0x72, 0x89, 0x8f, + 0xbe, 0x25, 0x27, 0x27, 0x25, 0x7f, 0x91, 0xd4, 0xf4, 0xcc, 0xc2, 0x22, 0xa4, 0xc4, 0xa5, 0x72, + 0xe5, 0x42, 0xed, 0x74, 0xff, 0x7a, 0xa6, 0xe7, 0xd7, 0xbf, 0xe9, 0x19, 0xe0, 0x26, 0x23, 0x8e, + 0x45, 0xfc, 0x91, 0xed, 0xb0, 0x2d, 0x76, 0xe4, 0x11, 0x2a, 0x7e, 0x2b, 0x9e, 0xef, 0x32, 0x57, + 0xcb, 0xcd, 0xbc, 0x15, 0xb4, 0x17, 0xd6, 0xfa, 0x6e, 0xdf, 0x45, 0xe7, 0x16, 0xff, 0x12, 0xb8, + 0xc2, 0x46, 0xdf, 0x75, 0xfb, 0x43, 0xb2, 0x85, 0xa3, 0xee, 0xf8, 0xe9, 0x16, 0xb3, 0x47, 0x84, + 0x32, 0x73, 0xe4, 0x49, 0xc0, 0x7a, 0x68, 0x99, 0x9e, 0x7f, 0xe4, 0x31, 0x97, 0x63, 0xdd, 0xa7, + 0xd2, 0x5d, 0x0c, 0xb9, 0x0f, 0x89, 0x4f, 0x6d, 0xd7, 0x09, 0xe7, 0x51, 0x28, 0x2d, 0x64, 0x79, + 0x68, 0x0e, 0x6d, 0xcb, 0x64, 0xae, 0x2f, 0x10, 0xe5, 0x8f, 0x21, 0xdb, 0x32, 0x7d, 0xd6, 0x26, + 0xec, 0x01, 0x31, 0x2d, 0xe2, 0x6b, 0x6b, 0x10, 0x63, 0x2e, 0x33, 0x87, 0x79, 0xa5, 0xa4, 0x6c, + 0x66, 0x75, 0x31, 0xd0, 0x34, 0x50, 0x07, 0x26, 0x1d, 0xe4, 0x23, 0x25, 0x65, 0x33, 0xa3, 0xe3, + 0x77, 0x79, 0x00, 0x2a, 0x0f, 0xe5, 0x11, 0xb6, 0x63, 0x91, 0x49, 0x10, 0x81, 0x03, 0x6e, 0xed, + 0x1e, 0x31, 0x42, 0x65, 0x88, 0x18, 0x68, 0xef, 0x43, 0x0c, 0xf3, 0xcf, 0x47, 0x4b, 0xca, 0x66, + 0x7a, 0x3b, 0x5f, 0x09, 0x11, 0x25, 0xf6, 0x57, 0x69, 0x71, 0x7f, 0x4d, 0x7d, 0xf9, 0x7a, 0x63, + 0x49, 0x17, 0xe0, 0xf2, 0x10, 0x12, 0xb5, 0xa1, 0xdb, 0x7b, 0xd6, 0xd8, 0x99, 0x26, 0xa2, 0xcc, + 0x12, 0xd1, 0xf6, 0x61, 0xc5, 0x33, 0x7d, 0x66, 0x50, 0xc2, 0x8c, 0x01, 0xee, 0x02, 0x17, 0x4d, + 0x6f, 0x6f, 0x54, 0xce, 0xd6, 0xa1, 0x32, 0xb7, 0x59, 0xb9, 0x4a, 0xd6, 0x0b, 0x1b, 0xcb, 0xdf, + 0xc4, 0x20, 0x2e, 0xc9, 0xf8, 0x04, 0x12, 0x92, 0x56, 0x5c, 0x30, 0xbd, 0xbd, 0x1e, 0x9e, 0x51, + 0xba, 0x2a, 0x75, 0xd7, 0xa1, 0xc4, 0xa1, 0x63, 0x2a, 0xe7, 0x0b, 0x62, 0xb4, 0xff, 0x40, 0xb2, + 0x37, 0x30, 0x6d, 0xc7, 0xb0, 0x2d, 0xcc, 0x28, 0x55, 0x4b, 0x9f, 0xbe, 0xde, 0x48, 0xd4, 0xb9, + 0xad, 0xb1, 0xa3, 0x27, 0xd0, 0xd9, 0xb0, 0xb4, 0xab, 0x10, 0x1f, 0x10, 0xbb, 0x3f, 0x60, 0x48, + 0x4b, 0x54, 0x97, 0x23, 0xed, 0x23, 0x50, 0xb9, 0x20, 0xf2, 0x2a, 0xae, 0x5d, 0xa8, 0x08, 0xb5, + 0x54, 0x02, 0xb5, 0x54, 0x3a, 0x81, 0x5a, 0x6a, 0x49, 0xbe, 0xf0, 0x8b, 0xdf, 0x37, 0x14, 0x1d, + 0x23, 0xb4, 0x3a, 0x64, 0x87, 0x26, 0x65, 0x46, 0x97, 0xd3, 0xc6, 0x97, 0x8f, 0xe1, 0x14, 0xd7, + 0x17, 0x09, 0x91, 0xc4, 0xca, 0xd4, 0xd3, 0x3c, 0x4a, 0x98, 0x2c, 0x6d, 0x13, 0x72, 0x38, 0x49, + 0xcf, 0x1d, 0x8d, 0x6c, 0x66, 0x20, 0xef, 0x71, 0xe4, 0x7d, 0x99, 0xdb, 0xeb, 0x68, 0x7e, 0xc0, + 0x2b, 0x70, 0x03, 0x52, 0x96, 0xc9, 0x4c, 0x01, 0x49, 0x20, 0x24, 0xc9, 0x0d, 0xe8, 0xfc, 0x2f, + 0xac, 0x4c, 0x55, 0x47, 0x05, 0x24, 0x29, 0x66, 0x99, 0x99, 0x11, 0x78, 0x07, 0xd6, 0x1c, 0x32, + 0x61, 0xc6, 0x59, 0x74, 0x0a, 0xd1, 0x1a, 0xf7, 0x3d, 0x99, 0x8f, 0xf8, 0x37, 0x2c, 0xf7, 0x02, + 0xf2, 0x05, 0x16, 0x10, 0x9b, 0x9d, 0x5a, 0x11, 0x76, 0x1d, 0x92, 0xa6, 0xe7, 0x09, 0x40, 0x1a, + 0x01, 0x09, 0xd3, 0xf3, 0xd0, 0x75, 0x1b, 0x56, 0x71, 0x8f, 0x3e, 0xa1, 0xe3, 0x21, 0x93, 0x93, + 0x64, 0x10, 0xb3, 0xc2, 0x1d, 0xba, 0xb0, 0x23, 0xf6, 0x5f, 0x90, 0x25, 0x87, 0xb6, 0x45, 0x9c, + 0x1e, 0x11, 0xb8, 0x2c, 0xe2, 0x32, 0x81, 0x11, 0x41, 0xb7, 0x20, 0xe7, 0xf9, 0xae, 0xe7, 0x52, + 0xe2, 0x1b, 0xa6, 0x65, 0xf9, 0x84, 0xd2, 0xfc, 0xb2, 0x98, 0x2f, 0xb0, 0x57, 0x85, 0x59, 0xbb, + 0x06, 0x09, 0x67, 0x3c, 0x32, 0xd8, 0x84, 0xe6, 0x57, 0x44, 0xdd, 0x9d, 0xf1, 0xa8, 0x33, 0xa1, + 0x9c, 0x4e, 0x3c, 0x76, 0xe8, 0xca, 0xa1, 0x2b, 0x89, 0x86, 0xce, 0x84, 0x96, 0xf3, 0xa0, 0xee, + 0x98, 0xcc, 0xd4, 0x72, 0x10, 0xe5, 0x6e, 0xa5, 0x14, 0xdd, 0xcc, 0xe8, 0xfc, 0xb3, 0xfc, 0x63, + 0x14, 0xd4, 0x27, 0x2e, 0x23, 0xda, 0x5d, 0x50, 0x79, 0x71, 0x51, 0xb3, 0xcb, 0xe7, 0x9d, 0x82, + 0xb6, 0xdd, 0x77, 0x88, 0xb5, 0x4f, 0xfb, 0x9d, 0x23, 0x8f, 0xe8, 0x08, 0x0e, 0x89, 0x30, 0x32, + 0x27, 0xc2, 0x35, 0x88, 0xf9, 0xee, 0xd8, 0xb1, 0x50, 0x9b, 0x31, 0x5d, 0x0c, 0xb4, 0x5d, 0x48, + 0x4e, 0xb5, 0xa5, 0xfe, 0x9d, 0xb6, 0x56, 0xb8, 0xb6, 0xb8, 0xf2, 0xa5, 0x41, 0x4f, 0x74, 0xa5, + 0xc4, 0x6a, 0x90, 0x9a, 0xb6, 0x3c, 0xa9, 0xd1, 0xb7, 0x93, 0xf9, 0x2c, 0x4c, 0xfb, 0x1f, 0xac, + 0x4e, 0x15, 0x33, 0xa5, 0x5c, 0xe8, 0x34, 0x37, 0x75, 0x04, 0x9c, 0x87, 0xc5, 0x68, 0x88, 0xb6, + 0x95, 0xc0, 0x7d, 0xcd, 0xc4, 0xd8, 0xc0, 0xfe, 0x75, 0x13, 0x52, 0xd4, 0xee, 0x3b, 0x26, 0x1b, + 0xfb, 0x44, 0xea, 0x75, 0x66, 0xd0, 0xee, 0xc1, 0x0a, 0xb5, 0x2d, 0x62, 0xb0, 0x49, 0xa0, 0x9c, + 0x7c, 0xaa, 0x14, 0xdd, 0x4c, 0x6f, 0x17, 0xcf, 0x23, 0xdb, 0x22, 0x9d, 0x89, 0x10, 0x92, 0x9e, + 0xa5, 0xa1, 0x11, 0x2d, 0x3f, 0x82, 0x4c, 0xd8, 0xcd, 0x25, 0xc1, 0x26, 0x46, 0xa8, 0xc3, 0xc5, + 0xd9, 0x04, 0x65, 0x75, 0x15, 0xe2, 0x62, 0x21, 0xac, 0x4e, 0x4c, 0x97, 0x23, 0xae, 0x02, 0x6a, + 0xf7, 0xb1, 0x36, 0x19, 0x9d, 0x7f, 0x96, 0x7f, 0x52, 0x20, 0x2e, 0x8e, 0x66, 0xa8, 0xa4, 0xca, + 0xf9, 0x25, 0x8d, 0x5c, 0x54, 0xd2, 0xe8, 0xe5, 0x4b, 0x5a, 0x05, 0x98, 0xf2, 0x44, 0xf3, 0x2a, + 0xb2, 0x72, 0x63, 0x71, 0x22, 0x91, 0x62, 0xdb, 0xee, 0xcb, 0xce, 0x13, 0x0a, 0x2a, 0x7f, 0x1f, + 0x81, 0xd4, 0xd4, 0xaf, 0x55, 0x21, 0x1b, 0xe4, 0x65, 0x3c, 0x1d, 0x9a, 0x7d, 0x29, 0xeb, 0xf5, + 0x0b, 0x93, 0xbb, 0x37, 0x34, 0xfb, 0x7a, 0x5a, 0xe6, 0xc3, 0x07, 0xe7, 0x4b, 0x24, 0x72, 0x81, + 0x44, 0xe6, 0x34, 0x19, 0xbd, 0x9c, 0x26, 0xe7, 0xd4, 0xa3, 0xbe, 0x85, 0x7a, 0x62, 0x97, 0x51, + 0xcf, 0x2f, 0x11, 0x48, 0xb6, 0xb0, 0xa9, 0x98, 0xc3, 0x7f, 0xe2, 0xd0, 0xdf, 0x80, 0x94, 0xe7, + 0x0e, 0x0d, 0xe1, 0x51, 0xd1, 0x93, 0xf4, 0xdc, 0xa1, 0xbe, 0x20, 0x9f, 0xd8, 0x3b, 0xea, 0x08, + 0xf1, 0x77, 0xc0, 0x7e, 0xe2, 0x2c, 0xfb, 0x1a, 0xa8, 0xfc, 0x6e, 0x92, 0x87, 0x1a, 0xbf, 0xcb, + 0x3e, 0x3f, 0x87, 0x9c, 0x1e, 0x79, 0xf1, 0xdf, 0xe1, 0xbc, 0xe0, 0x4b, 0x42, 0x59, 0x7c, 0xa8, + 0x88, 0xad, 0x08, 0xa4, 0x2e, 0x71, 0x3c, 0x42, 0xdc, 0x93, 0xf2, 0xed, 0x91, 0xbf, 0x48, 0xf2, + 0xba, 0xc4, 0x95, 0xbf, 0x56, 0x00, 0xf6, 0x38, 0xdb, 0xc8, 0x01, 0xbf, 0xb2, 0x29, 0xa6, 0x60, + 0xcc, 0xad, 0x5c, 0xbc, 0xa8, 0x90, 0x72, 0xfd, 0x0c, 0x0d, 0xe7, 0x5d, 0x87, 0xec, 0x4c, 0xe8, + 0x94, 0x04, 0xc9, 0x9c, 0x33, 0xc9, 0xf4, 0x26, 0x6d, 0x13, 0xa6, 0x67, 0x0e, 0x43, 0xa3, 0xf2, + 0xcf, 0x0a, 0xa4, 0x30, 0xa7, 0x7d, 0xc2, 0xcc, 0xb9, 0xba, 0x2a, 0x97, 0xaf, 0xeb, 0x3a, 0x80, + 0x98, 0x86, 0xda, 0xcf, 0x89, 0x54, 0x5b, 0x0a, 0x2d, 0x6d, 0xfb, 0x39, 0xd1, 0x3e, 0x98, 0x12, + 0x1e, 0xfd, 0x6b, 0xc2, 0x65, 0xbb, 0x08, 0x68, 0x0f, 0xdd, 0xa1, 0x6a, 0xf8, 0x0e, 0x2d, 0x7f, + 0x01, 0x89, 0xce, 0x04, 0xdf, 0x92, 0x5c, 0xb6, 0xbe, 0xeb, 0xb2, 0x70, 0x5b, 0x4d, 0x72, 0x03, + 0x36, 0xd6, 0x40, 0x0d, 0x91, 0x99, 0x1a, 0xb4, 0xca, 0x5b, 0xbe, 0x52, 0xe5, 0xfb, 0xf4, 0xf6, + 0xaf, 0x0a, 0xa4, 0x43, 0xbd, 0x47, 0x7b, 0x0f, 0xae, 0xd4, 0xf6, 0x0e, 0xea, 0x0f, 0x8d, 0xc6, + 0x8e, 0x71, 0x6f, 0xaf, 0x7a, 0xdf, 0x78, 0xdc, 0x7c, 0xd8, 0x3c, 0xf8, 0xb4, 0x99, 0x5b, 0x2a, + 0x5c, 0x3d, 0x3e, 0x29, 0x69, 0x21, 0xec, 0x63, 0xe7, 0x99, 0xe3, 0x7e, 0xe9, 0x68, 0x5b, 0xb0, + 0x36, 0x1f, 0x52, 0xad, 0xb5, 0x77, 0x9b, 0x9d, 0x9c, 0x52, 0xb8, 0x72, 0x7c, 0x52, 0x5a, 0x0d, + 0x45, 0x54, 0xbb, 0x94, 0x38, 0x6c, 0x31, 0xa0, 0x7e, 0xb0, 0xbf, 0xdf, 0xe8, 0xe4, 0x22, 0x0b, + 0x01, 0xf2, 0x32, 0xb8, 0x05, 0xab, 0xf3, 0x01, 0xcd, 0xc6, 0x5e, 0x2e, 0x5a, 0xd0, 0x8e, 0x4f, + 0x4a, 0xcb, 0x21, 0x74, 0xd3, 0x1e, 0x16, 0x92, 0x5f, 0x7d, 0x5b, 0x5c, 0xfa, 0xe1, 0xbb, 0xa2, + 0xc2, 0x77, 0x96, 0x9d, 0xeb, 0x1b, 0xda, 0xff, 0xe1, 0x5a, 0xbb, 0x71, 0xbf, 0xb9, 0xbb, 0x63, + 0xec, 0xb7, 0xef, 0x1b, 0x9d, 0xcf, 0x5a, 0xbb, 0xa1, 0xdd, 0xad, 0x1c, 0x9f, 0x94, 0xd2, 0x72, + 0x4b, 0x17, 0xa1, 0x5b, 0xfa, 0xee, 0x93, 0x83, 0xce, 0x6e, 0x4e, 0x11, 0xe8, 0x96, 0x4f, 0x0e, + 0x5d, 0x46, 0x10, 0x7d, 0x07, 0xae, 0x9f, 0x83, 0x9e, 0x6e, 0x6c, 0xf5, 0xf8, 0xa4, 0x94, 0x6d, + 0xf9, 0x44, 0x9c, 0x1f, 0x8c, 0xa8, 0x40, 0x7e, 0x31, 0xe2, 0xa0, 0x75, 0xd0, 0xae, 0xee, 0xe5, + 0x4a, 0x85, 0xdc, 0xf1, 0x49, 0x29, 0x13, 0x34, 0x48, 0x8e, 0x9f, 0xed, 0xac, 0xf6, 0xe8, 0xe5, + 0x69, 0x51, 0x79, 0x75, 0x5a, 0x54, 0xfe, 0x38, 0x2d, 0x2a, 0x2f, 0xde, 0x14, 0x97, 0x5e, 0xbd, + 0x29, 0x2e, 0xfd, 0xf6, 0xa6, 0xb8, 0xf4, 0xf9, 0x87, 0x7d, 0x9b, 0x0d, 0xc6, 0xdd, 0x4a, 0xcf, + 0x1d, 0x6d, 0x85, 0xff, 0x3f, 0xcd, 0x3e, 0xc5, 0xff, 0xb8, 0xb3, 0xff, 0xad, 0xba, 0x71, 0xb4, + 0xdf, 0xfd, 0x33, 0x00, 0x00, 0xff, 0xff, 0x88, 0x31, 0x36, 0xf5, 0x1c, 0x0e, 0x00, 0x00, } func (m *PartSetHeader) Marshal() (dAtA []byte, err error) { @@ -1275,6 +1382,18 @@ func (m *Header) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.TotalTxs != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.TotalTxs)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x80 + } + if m.NumTxs != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.NumTxs)) + i-- + dAtA[i] = 0x78 + } if len(m.ProposerAddress) > 0 { i -= len(m.ProposerAddress) copy(dAtA[i:], m.ProposerAddress) @@ -1433,6 +1552,20 @@ func (m *Vote) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.SideTxResults) > 0 { + for iNdEx := len(m.SideTxResults) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.SideTxResults[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + } + } if len(m.Signature) > 0 { i -= len(m.Signature) copy(dAtA[i:], m.Signature) @@ -1488,6 +1621,48 @@ func (m *Vote) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *SideTxResult) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SideTxResult) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SideTxResult) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Sig) > 0 { + i -= len(m.Sig) + copy(dAtA[i:], m.Sig) + i = encodeVarintTypes(dAtA, i, uint64(len(m.Sig))) + i-- + dAtA[i] = 0x1a + } + if m.Result != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.Result)) + i-- + dAtA[i] = 0x10 + } + if len(m.TxHash) > 0 { + i -= len(m.TxHash) + copy(dAtA[i:], m.TxHash) + i = encodeVarintTypes(dAtA, i, uint64(len(m.TxHash))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *Commit) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1565,6 +1740,20 @@ func (m *CommitSig) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.SideTxResults) > 0 { + for iNdEx := len(m.SideTxResults) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.SideTxResults[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + } if len(m.Signature) > 0 { i -= len(m.Signature) copy(dAtA[i:], m.Signature) @@ -1615,6 +1804,13 @@ func (m *Proposal) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.Data) > 0 { + i -= len(m.Data) + copy(dAtA[i:], m.Data) + i = encodeVarintTypes(dAtA, i, uint64(len(m.Data))) + i-- + dAtA[i] = 0x42 + } if len(m.Signature) > 0 { i -= len(m.Signature) copy(dAtA[i:], m.Signature) @@ -1974,6 +2170,12 @@ func (m *Header) Size() (n int) { if l > 0 { n += 1 + l + sovTypes(uint64(l)) } + if m.NumTxs != 0 { + n += 1 + sovTypes(uint64(m.NumTxs)) + } + if m.TotalTxs != 0 { + n += 2 + sovTypes(uint64(m.TotalTxs)) + } return n } @@ -2022,6 +2224,32 @@ func (m *Vote) Size() (n int) { if l > 0 { n += 1 + l + sovTypes(uint64(l)) } + if len(m.SideTxResults) > 0 { + for _, e := range m.SideTxResults { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + return n +} + +func (m *SideTxResult) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.TxHash) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + if m.Result != 0 { + n += 1 + sovTypes(uint64(m.Result)) + } + l = len(m.Sig) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } return n } @@ -2067,6 +2295,12 @@ func (m *CommitSig) Size() (n int) { if l > 0 { n += 1 + l + sovTypes(uint64(l)) } + if len(m.SideTxResults) > 0 { + for _, e := range m.SideTxResults { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } return n } @@ -2096,6 +2330,10 @@ func (m *Proposal) Size() (n int) { if l > 0 { n += 1 + l + sovTypes(uint64(l)) } + l = len(m.Data) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } return n } @@ -3020,6 +3258,44 @@ func (m *Header) Unmarshal(dAtA []byte) error { m.ProposerAddress = []byte{} } iNdEx = postIndex + case 15: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NumTxs", wireType) + } + m.NumTxs = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NumTxs |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 16: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TotalTxs", wireType) + } + m.TotalTxs = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.TotalTxs |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) @@ -3362,6 +3638,177 @@ func (m *Vote) Unmarshal(dAtA []byte) error { m.Signature = []byte{} } iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SideTxResults", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SideTxResults = append(m.SideTxResults, &SideTxResult{}) + if err := m.SideTxResults[len(m.SideTxResults)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SideTxResult) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SideTxResult: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SideTxResult: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TxHash", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TxHash = append(m.TxHash[:0], dAtA[iNdEx:postIndex]...) + if m.TxHash == nil { + m.TxHash = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Result", wireType) + } + m.Result = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Result |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Sig", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Sig = append(m.Sig[:0], dAtA[iNdEx:postIndex]...) + if m.Sig == nil { + m.Sig = []byte{} + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) @@ -3687,6 +4134,40 @@ func (m *CommitSig) Unmarshal(dAtA []byte) error { m.Signature = []byte{} } iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SideTxResults", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SideTxResults = append(m.SideTxResults, &SideTxResult{}) + if err := m.SideTxResults[len(m.SideTxResults)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) @@ -3913,6 +4394,40 @@ func (m *Proposal) Unmarshal(dAtA []byte) error { m.Signature = []byte{} } iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...) + if m.Data == nil { + m.Data = []byte{} + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) diff --git a/proto/tendermint/types/types.proto b/proto/tendermint/types/types.proto index 3ce1694594f..ff7ca6746c0 100644 --- a/proto/tendermint/types/types.proto +++ b/proto/tendermint/types/types.proto @@ -79,6 +79,9 @@ message Header { // consensus info bytes evidence_hash = 13; // evidence included in the block bytes proposer_address = 14; // original proposer of the block + + int64 num_txs = 15; + int64 total_txs = 16; } // Data contains the set of transactions included in the block @@ -102,6 +105,14 @@ message Vote { bytes validator_address = 6; int32 validator_index = 7; bytes signature = 8; + repeated SideTxResult side_tx_results = 9; +} + +//Side-Tx-Result structure inside vote +message SideTxResult { + bytes tx_hash = 1; // Corresponds to TxHash in Go + int32 result = 2; // Corresponds to Result in Go + bytes sig = 3; // Corresponds to Sig in Go } // Commit contains the evidence that a block was committed by a set of validators. @@ -119,6 +130,7 @@ message CommitSig { google.protobuf.Timestamp timestamp = 3 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; bytes signature = 4; + repeated SideTxResult side_tx_results = 5; } message Proposal { @@ -130,6 +142,7 @@ message Proposal { google.protobuf.Timestamp timestamp = 6 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; bytes signature = 7; + bytes data = 8; } message SignedHeader { diff --git a/proxy/app_conn.go b/proxy/app_conn.go index 690c08df9f7..781f3a37350 100644 --- a/proxy/app_conn.go +++ b/proxy/app_conn.go @@ -7,7 +7,7 @@ import ( //go:generate ../scripts/mockery_generate.sh AppConnConsensus|AppConnMempool|AppConnQuery|AppConnSnapshot -//---------------------------------------------------------------------------------------- +// ---------------------------------------------------------------------------------------- // Enforce which abci msgs can be sent on a connection at the type level type AppConnConsensus interface { @@ -20,6 +20,9 @@ type AppConnConsensus interface { DeliverTxAsync(types.RequestDeliverTx) *abcicli.ReqRes EndBlockSync(types.RequestEndBlock) (*types.ResponseEndBlock, error) CommitSync() (*types.ResponseCommit, error) + + BeginSideBlockSync(types.RequestBeginSideBlock) (*types.ResponseBeginSideBlock, error) + DeliverSideTxAsync(types.RequestDeliverSideTx) *abcicli.ReqRes } type AppConnMempool interface { @@ -52,7 +55,15 @@ type AppConnSnapshot interface { ApplySnapshotChunkSync(types.RequestApplySnapshotChunk) (*types.ResponseApplySnapshotChunk, error) } -//----------------------------------------------------------------------------------------- +func (app *appConnConsensus) BeginSideBlockSync(req types.RequestBeginSideBlock) (*types.ResponseBeginSideBlock, error) { + return app.appConn.BeginSideBlockSync(req) +} + +func (app *appConnConsensus) DeliverSideTxAsync(req types.RequestDeliverSideTx) *abcicli.ReqRes { + return app.appConn.DeliverSideTxAsync(req) +} + +// ----------------------------------------------------------------------------------------- // Implements AppConnConsensus (subset of abcicli.Client) type appConnConsensus struct { @@ -93,7 +104,7 @@ func (app *appConnConsensus) CommitSync() (*types.ResponseCommit, error) { return app.appConn.CommitSync() } -//------------------------------------------------ +// ------------------------------------------------ // Implements AppConnMempool (subset of abcicli.Client) type appConnMempool struct { @@ -130,7 +141,7 @@ func (app *appConnMempool) CheckTxSync(req types.RequestCheckTx) (*types.Respons return app.appConn.CheckTxSync(req) } -//------------------------------------------------ +// ------------------------------------------------ // Implements AppConnQuery (subset of abcicli.Client) type appConnQuery struct { @@ -159,7 +170,7 @@ func (app *appConnQuery) QuerySync(reqQuery types.RequestQuery) (*types.Response return app.appConn.QuerySync(reqQuery) } -//------------------------------------------------ +// ------------------------------------------------ // Implements AppConnSnapshot (subset of abcicli.Client) type appConnSnapshot struct { diff --git a/rpc/core/mempool.go b/rpc/core/mempool.go index 1eea1e8e24d..7ef1198ef00 100644 --- a/rpc/core/mempool.go +++ b/rpc/core/mempool.go @@ -13,7 +13,7 @@ import ( "github.com/tendermint/tendermint/types" ) -//----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- // NOTE: tx should be signed, but this is only checked at the app level (not by CometBFT!) // BroadcastTxAsync returns right away, with no response. Does not wait for diff --git a/rpc/grpc/types.pb.go b/rpc/grpc/types.pb.go index b9cbee03fc8..a07876a82ed 100644 --- a/rpc/grpc/types.pb.go +++ b/rpc/grpc/types.pb.go @@ -205,27 +205,28 @@ func init() { func init() { proto.RegisterFile("tendermint/rpc/grpc/types.proto", fileDescriptor_0ffff5682c662b95) } var fileDescriptor_0ffff5682c662b95 = []byte{ - // 316 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2f, 0x49, 0xcd, 0x4b, - 0x49, 0x2d, 0xca, 0xcd, 0xcc, 0x2b, 0xd1, 0x2f, 0x2a, 0x48, 0xd6, 0x4f, 0x07, 0x11, 0x25, 0x95, - 0x05, 0xa9, 0xc5, 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0xc2, 0x08, 0x05, 0x7a, 0x45, 0x05, - 0xc9, 0x7a, 0x20, 0x05, 0x52, 0xd2, 0x48, 0xba, 0x12, 0x93, 0x92, 0x33, 0x91, 0x75, 0x28, 0xf1, - 0x72, 0x71, 0x07, 0xa5, 0x16, 0x96, 0xa6, 0x16, 0x97, 0x04, 0x64, 0xe6, 0xa5, 0x2b, 0xa9, 0x70, - 0x09, 0x41, 0xb9, 0x4e, 0x45, 0xf9, 0x89, 0x29, 0xc9, 0x89, 0xc5, 0x25, 0x21, 0x15, 0x42, 0x7c, - 0x5c, 0x4c, 0x25, 0x15, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x3c, 0x41, 0x4c, 0x25, 0x15, 0x4a, 0x7c, - 0x5c, 0x3c, 0x41, 0xa9, 0xc5, 0x05, 0xf9, 0x79, 0xc5, 0xa9, 0x60, 0x5d, 0x53, 0x19, 0xb9, 0x84, - 0x61, 0x02, 0xc8, 0xfa, 0xac, 0xb9, 0x38, 0x92, 0x33, 0x52, 0x93, 0xb3, 0xe3, 0xa1, 0xba, 0xb9, - 0x8d, 0x14, 0xf4, 0x90, 0x5c, 0x08, 0x72, 0x8c, 0x1e, 0x4c, 0x9f, 0x33, 0x48, 0x61, 0x48, 0x45, - 0x10, 0x7b, 0x32, 0x84, 0x21, 0xe4, 0xc8, 0xc5, 0x95, 0x92, 0x9a, 0x93, 0x59, 0x96, 0x5a, 0x04, - 0xd2, 0xce, 0x04, 0xd6, 0xae, 0x84, 0x53, 0xbb, 0x0b, 0x44, 0x69, 0x48, 0x45, 0x10, 0x67, 0x0a, - 0x8c, 0x69, 0xb4, 0x97, 0x91, 0x8b, 0x07, 0xee, 0x1e, 0xc7, 0x00, 0x4f, 0x21, 0x6f, 0x2e, 0x16, - 0x90, 0x83, 0x85, 0x50, 0x9c, 0x01, 0x0b, 0x28, 0x3d, 0xa4, 0x80, 0x90, 0x52, 0xc4, 0xa1, 0x02, - 0xe1, 0x6b, 0xa1, 0x04, 0x2e, 0x6e, 0x64, 0xcf, 0xaa, 0xe3, 0x33, 0x13, 0x49, 0xa1, 0x94, 0x06, - 0x5e, 0xa3, 0x91, 0x54, 0x3a, 0xf9, 0x9c, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, - 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, - 0x94, 0x51, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x3e, 0x52, 0xf4, 0x62, - 0x49, 0x1f, 0xd6, 0xc9, 0xf9, 0x45, 0xa9, 0x20, 0x46, 0x12, 0x1b, 0x38, 0xc6, 0x8d, 0x01, 0x01, - 0x00, 0x00, 0xff, 0xff, 0xf6, 0x4b, 0x02, 0xd8, 0x46, 0x02, 0x00, 0x00, + // 326 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xbf, 0x4e, 0x02, 0x41, + 0x10, 0x87, 0x59, 0x62, 0xfc, 0x33, 0x20, 0xc5, 0xd2, 0x18, 0x4c, 0x56, 0xbc, 0x98, 0x48, 0xb5, + 0x24, 0x18, 0x2b, 0x2a, 0xd0, 0xc6, 0x58, 0x48, 0x2e, 0x54, 0x36, 0x7a, 0xec, 0x4d, 0x60, 0x45, + 0x6e, 0xcf, 0xbd, 0x45, 0xcf, 0xb7, 0xb0, 0xf1, 0x71, 0xec, 0x2d, 0x29, 0x2d, 0x0d, 0xbc, 0x88, + 0x59, 0xe0, 0x64, 0x29, 0xa0, 0xb9, 0xcc, 0x5c, 0xbe, 0x6f, 0xf2, 0x9b, 0xb9, 0x83, 0x13, 0x83, + 0x51, 0x88, 0x7a, 0x24, 0x23, 0x53, 0xd7, 0xb1, 0xa8, 0xf7, 0xed, 0xc3, 0xbc, 0xc7, 0x98, 0xf0, + 0x58, 0x2b, 0xa3, 0x68, 0x79, 0x05, 0x70, 0x1d, 0x0b, 0x6e, 0x81, 0xca, 0xb1, 0x63, 0x05, 0x3d, + 0x21, 0x5d, 0xc3, 0x3b, 0x84, 0x82, 0x8f, 0x2f, 0x63, 0x4c, 0x4c, 0x47, 0x46, 0x7d, 0xef, 0x0c, + 0xe8, 0xb2, 0x6d, 0x6b, 0x15, 0x84, 0x22, 0x48, 0x4c, 0x37, 0xa5, 0x25, 0xc8, 0x9b, 0xf4, 0x88, + 0x54, 0x49, 0xad, 0xe8, 0xe7, 0x4d, 0xea, 0x95, 0xa0, 0xe8, 0x63, 0x12, 0xab, 0x28, 0xc1, 0xb9, + 0xf5, 0x49, 0xa0, 0x9c, 0xbd, 0x70, 0xbd, 0x26, 0xec, 0x8b, 0x01, 0x8a, 0xe1, 0xc3, 0xd2, 0x2e, + 0x34, 0xaa, 0xdc, 0x49, 0x68, 0xc3, 0xf0, 0xcc, 0xbb, 0xb2, 0x60, 0x37, 0xf5, 0xf7, 0xc4, 0xa2, + 0xa0, 0x2d, 0x80, 0x10, 0x9f, 0xe5, 0x2b, 0x6a, 0xab, 0xe7, 0xe7, 0xba, 0xb7, 0x51, 0xbf, 0x5e, + 0xa0, 0xdd, 0xd4, 0x3f, 0x08, 0xb3, 0xb2, 0xf1, 0x45, 0xa0, 0xf8, 0x9f, 0xa7, 0xd5, 0xb9, 0xa1, + 0xb7, 0xb0, 0x63, 0x03, 0xd3, 0xb5, 0x18, 0xd9, 0xa1, 0xb8, 0x73, 0x88, 0xca, 0xe9, 0x06, 0x62, + 0xb5, 0x35, 0x7d, 0x84, 0x82, 0xbb, 0xec, 0xf9, 0xb6, 0x99, 0x0e, 0x58, 0xa9, 0x6d, 0x1d, 0xed, + 0x90, 0xed, 0xbb, 0xef, 0x29, 0x23, 0x93, 0x29, 0x23, 0xbf, 0x53, 0x46, 0x3e, 0x66, 0x2c, 0x37, + 0x99, 0xb1, 0xdc, 0xcf, 0x8c, 0xe5, 0xee, 0x2f, 0xfb, 0xd2, 0x0c, 0xc6, 0x3d, 0x2e, 0xd4, 0xa8, + 0x1e, 0xaa, 0x27, 0x39, 0x0a, 0x22, 0x34, 0x6f, 0x4a, 0x0f, 0x97, 0xdd, 0xda, 0x2f, 0xd2, 0x14, + 0x4a, 0xa3, 0x2d, 0x7a, 0xbb, 0xf3, 0x8f, 0x7e, 0xf1, 0x17, 0x00, 0x00, 0xff, 0xff, 0x9a, 0xfb, + 0x63, 0xd8, 0x49, 0x02, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -567,7 +568,10 @@ func (m *RequestPing) Unmarshal(dAtA []byte) error { if err != nil { return err } - if (skippy < 0) || (iNdEx+skippy) < 0 { + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) < 0 { return ErrInvalidLengthTypes } if (iNdEx + skippy) > l { @@ -651,7 +655,10 @@ func (m *RequestBroadcastTx) Unmarshal(dAtA []byte) error { if err != nil { return err } - if (skippy < 0) || (iNdEx+skippy) < 0 { + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) < 0 { return ErrInvalidLengthTypes } if (iNdEx + skippy) > l { @@ -701,7 +708,10 @@ func (m *ResponsePing) Unmarshal(dAtA []byte) error { if err != nil { return err } - if (skippy < 0) || (iNdEx+skippy) < 0 { + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) < 0 { return ErrInvalidLengthTypes } if (iNdEx + skippy) > l { @@ -823,7 +833,10 @@ func (m *ResponseBroadcastTx) Unmarshal(dAtA []byte) error { if err != nil { return err } - if (skippy < 0) || (iNdEx+skippy) < 0 { + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) < 0 { return ErrInvalidLengthTypes } if (iNdEx + skippy) > l { diff --git a/rpc/jsonrpc/server/http_server.go b/rpc/jsonrpc/server/http_server.go index 29eae9fc32c..5c790577176 100644 --- a/rpc/jsonrpc/server/http_server.go +++ b/rpc/jsonrpc/server/http_server.go @@ -153,7 +153,7 @@ func writeRPCResponseHTTP(w http.ResponseWriter, headers []httpHeader, res ...ty return err } -//----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- // RecoverAndLogHandler wraps an HTTP handler, adding error logging. // If the inner function panics, the outer function recovers, logs, sends an diff --git a/rpc/jsonrpc/server/rpc_func.go b/rpc/jsonrpc/server/rpc_func.go index 8a5053666c5..7e3c5444e41 100644 --- a/rpc/jsonrpc/server/rpc_func.go +++ b/rpc/jsonrpc/server/rpc_func.go @@ -137,7 +137,7 @@ func funcReturnTypes(f interface{}) []reflect.Type { return typez } -//------------------------------------------------------------- +// ------------------------------------------------------------- // NOTE: assume returns is result struct and error. If error is not nil, return it func unreflectResult(returns []reflect.Value) (interface{}, error) { diff --git a/scripts/protochermes.sh b/scripts/protochermes.sh new file mode 100644 index 00000000000..a008fb9ef00 --- /dev/null +++ b/scripts/protochermes.sh @@ -0,0 +1,28 @@ +#!/bin/sh + +# see pre-requests: +# - https://grpc.io/docs/languages/go/quickstart/ +# - gocosmos plugin is automatically installed during scaffolding. + +# set -eo pipefail + +# delete existing protobuf generated files +find . -name "*.pb.go" -delete +echo "entered" +go install github.com/regen-network/cosmos-proto/protoc-gen-gocosmos 2>/dev/null +go install github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc 2>/dev/null + +proto_dirs=$(find ./proto -path -prune -o -name '*.proto' -print0 | xargs -0 -n1 dirname | sort | uniq) +echo $proto_dirs +# shellcheck disable=SC2046 +for dir in $proto_dirs; do + protoc \ + -I "proto" \ + -I "third_party/proto" \ + --gocosmos_out=plugins=interfacetype+grpc,Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types:. \ + $(find "${dir}" -maxdepth 1 -name '*.proto') +done + +# move proto files to the right places + cp -r github.com/tendermint/tendermint/* ./ + rm -rf github.com diff --git a/state/execution.go b/state/execution.go index dea0cfd8829..ff6e86c5c34 100644 --- a/state/execution.go +++ b/state/execution.go @@ -1,6 +1,7 @@ package state import ( + "bytes" "errors" "fmt" "time" @@ -16,7 +17,7 @@ import ( "github.com/tendermint/tendermint/types" ) -//----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- // BlockExecutor handles block execution and state updates. // It exposes ApplyBlock(), which validates & executes the block, updates state w/ ABCI responses, // then commits and updates the mempool atomically, then saves state. @@ -40,6 +41,9 @@ type BlockExecutor struct { logger log.Logger metrics *Metrics + + // [dojimamint] fast sync + fastSyncFunc func() bool } type BlockExecutorOption func(executor *BlockExecutor) @@ -131,14 +135,21 @@ func (blockExec *BlockExecutor) ValidateBlock(state State, block *types.Block) e func (blockExec *BlockExecutor) ApplyBlock( state State, blockID types.BlockID, block *types.Block, ) (State, int64, error) { + blockExec.logger.Debug("[dojimamint] Applying block", "height", block.Height, "numTxs", block.Header.ToProto().NumTxs) if err := validateBlock(state, block); err != nil { return state, 0, ErrInvalidBlock(err) } + // Execute side deliver tx if node is fast syncing + executeSideDeliverTx := true + if blockExec.fastSyncFunc != nil { + executeSideDeliverTx = !blockExec.fastSyncFunc() + } + startTime := time.Now().UnixNano() - abciResponses, err := execBlockOnProxyApp( - blockExec.logger, blockExec.proxyApp, block, blockExec.store, state.InitialHeight, + abciResponses, sideTxResponses, err := execBlockOnProxyApp( + blockExec.logger, blockExec.proxyApp, block, blockExec.store, state.InitialHeight, executeSideDeliverTx, ) endTime := time.Now().UnixNano() blockExec.metrics.BlockProcessingTime.Observe(float64(endTime-startTime) / 1000000) @@ -187,6 +198,9 @@ func (blockExec *BlockExecutor) ApplyBlock( fail.Fail() // XXX + // Save side tx responses + state.SideTxResponses = sideTxResponses + // Update the app hash and save the state. state.AppHash = appHash if err := blockExec.store.Save(state); err != nil { @@ -251,7 +265,7 @@ func (blockExec *BlockExecutor) Commit( return res.Data, res.RetainHeight, err } -//--------------------------------------------------------- +// --------------------------------------------------------- // Helper functions for executing blocks and updating state // Executes block's transactions on proxyAppConn. @@ -262,13 +276,15 @@ func execBlockOnProxyApp( block *types.Block, store Store, initialHeight int64, -) (*cmtstate.ABCIResponses, error) { + executeSideDeliverTx bool, +) (*cmtstate.ABCIResponses, []*types.SideTxResultWithData, error) { var validTxs, invalidTxs = 0, 0 txIndex := 0 abciResponses := new(cmtstate.ABCIResponses) dtxs := make([]*abci.ResponseDeliverTx, len(block.Txs)) abciResponses.DeliverTxs = dtxs + sideTxResponses := make([]*types.SideTxResultWithData, 0) // Execute transactions and get hash. proxyCb := func(req *abci.Request, res *abci.Response) { @@ -301,7 +317,7 @@ func execBlockOnProxyApp( var err error pbh := block.Header.ToProto() if pbh == nil { - return nil, errors.New("nil header") + return nil, nil, errors.New("nil header") } abciResponses.BeginBlock, err = proxyAppConn.BeginBlockSync(abci.RequestBeginBlock{ @@ -312,14 +328,82 @@ func execBlockOnProxyApp( }) if err != nil { logger.Error("error in proxyAppConn.BeginBlock", "err", err) - return nil, err + return nil, nil, err + } + // + // Side begin block + // + + // get side-tx results for begin side-block + sideTxResults := getBeginSideBlockData(block, store) + + header := *block.Header.ToProto() + // TODO get votes from last commit + // Side hook for begin block + sideBlockResponse, err := proxyAppConn.BeginSideBlockSync(abci.RequestBeginSideBlock{ + Hash: block.Hash(), + Header: header, + SideTxResults: sideTxResults, + }) + + if err != nil { + logger.Error("Error in proxyAppConn.BeginSideBlock", "err", err) + return nil, nil, err } + abciResponses.BeginBlock.Events = append(abciResponses.BeginBlock.Events, sideBlockResponse.Events...) + + // + // Deliver tx + // + // run txs of block for _, tx := range block.Txs { proxyAppConn.DeliverTxAsync(abci.RequestDeliverTx{Tx: tx}) if err := proxyAppConn.Error(); err != nil { - return nil, err + return nil, nil, err + } + } + + // execute side deliver-tx when not syncing + if executeSideDeliverTx { + // Execute side-transactions and store in side-tx responses + proxySideCb := func(req *abci.Request, res *abci.Response) { + if vreq, okreq := req.Value.(*abci.Request_DeliverSideTx); okreq { + if vres, okres := res.Value.(*abci.Response_DeliverSideTx); okres { + + txReq := vreq.DeliverSideTx + txRes := vres.DeliverSideTx + + if txRes.Code == abci.CodeTypeOK && txRes.Result != abci.SideTxResultType_Skip { + tx := types.Tx(txReq.Tx) + // add into side tx responses + sideTxResponses = append(sideTxResponses, &types.SideTxResultWithData{ + SideTxResult: types.SideTxResult{ + TxHash: tx.Hash(), + Result: int32(txRes.Result), + }, + Data: txRes.Data, + }) + } + + // ignore invalid side-tx responses + } + } + } + proxyAppConn.SetResponseCallback(proxySideCb) + + // Run side-txs of block. + for txIndex, tx := range block.Txs { + txRes := abciResponses.DeliverTxs[txIndex] + + // execute side-tx only if tx is valid + if txRes.Code == abci.CodeTypeOK { + proxyAppConn.DeliverSideTxAsync(abci.RequestDeliverSideTx{Tx: tx}) + if err := proxyAppConn.Error(); err != nil { + return nil, nil, err + } + } } } @@ -327,11 +411,16 @@ func execBlockOnProxyApp( abciResponses.EndBlock, err = proxyAppConn.EndBlockSync(abci.RequestEndBlock{Height: block.Height}) if err != nil { logger.Error("error in proxyAppConn.EndBlock", "err", err) - return nil, err + return nil, nil, err + } + + logger.Info("Executed block", "height", block.Height, "validTxs", validTxs, "invalidTxs", invalidTxs) + if len(sideTxResponses) > 0 { + logger.Debug("Executed side block", "height", block.Height, "validSideTxs", len(sideTxResponses)) } logger.Info("executed block", "height", block.Height, "num_valid_txs", validTxs, "num_invalid_txs", invalidTxs) - return abciResponses, nil + return abciResponses, sideTxResponses, nil } func getBeginBlockValidatorInfo(block *types.Block, store Store, @@ -522,7 +611,7 @@ func fireEvents( } } -//---------------------------------------------------------------------------------------------------- +// ---------------------------------------------------------------------------------------------------- // Execute block without state. TODO: eliminate // ExecCommitBlock executes and commits a block on the proxyApp without validating or mutating the state. @@ -534,19 +623,88 @@ func ExecCommitBlock( store Store, initialHeight int64, ) ([]byte, error) { - _, err := execBlockOnProxyApp(logger, appConnConsensus, block, store, initialHeight) + logger.Info("[dojimamint] Exec commit block", "height", block.Height) + _, _, err := execBlockOnProxyApp(logger, appConnConsensus, block, store, initialHeight, false) if err != nil { - logger.Error("failed executing block on proxy app", "height", block.Height, "err", err) + logger.Error("Error executing block on proxy app", "height", block.Height, "err", err) return nil, err } - // Commit block, get hash back res, err := appConnConsensus.CommitSync() if err != nil { - logger.Error("client error during proxyAppConn.CommitSync", "err", res) + logger.Error("Client error during proxyAppConn.CommitSync", "err", res) return nil, err } - // ResponseCommit has no error or log, just data return res.Data, nil } + +// +// Side channel utils +// + +func getBeginSideBlockData(block *types.Block, store Store) []abci.SideTxResult { + // returns [ + // { + // txHash: txHash, + // sigs: [ + // { + // result: 1, + // sig: 2 + // }, + // ... + // ] + // }, + // ... + // ] + + // prepare result + result := make([]abci.SideTxResult, 0) + + // return if prev block is empty result (mostly block 0) + if block == nil || block.Height <= 2 { + return make([]abci.SideTxResult, 0) + } + + // iterate all votes + for _, vote := range block.LastCommit.Signatures { + if !vote.Absent() { + txMapping := make(map[int]bool) + for _, sideTxResult := range vote.SideTxResults { + // find if result object is already created + resultIndex := -1 + for i, rr := range result { + if bytes.Equal(rr.TxHash, sideTxResult.TxHash) { + resultIndex = i + break + } + } + + // create tx-hash based object, if not found yet + if resultIndex == -1 { + result = append(result, abci.SideTxResult{ + TxHash: sideTxResult.TxHash, + Sigs: make([]abci.SideTxSig, 0), + }) + // set new result index + resultIndex = len(result) - 1 + } + + // if tx is not processed for current vote, add it into sigs for particular side-tx result + if _, ok := txMapping[resultIndex]; !ok { + // get result object from result index + result[resultIndex].Sigs = append(result[resultIndex].Sigs, abci.SideTxSig{ + Result: abci.SideTxResultType(sideTxResult.Result), + Sig: sideTxResult.Sig, + Address: vote.ValidatorAddress, + }) + + // add tx hash for the record for particular vote to avoid duplicate votes + txMapping[resultIndex] = true + } + } + } + } + + return result +} diff --git a/state/services.go b/state/services.go index 2b6c16fed2f..3064a4f7b98 100644 --- a/state/services.go +++ b/state/services.go @@ -4,12 +4,12 @@ import ( "github.com/tendermint/tendermint/types" ) -//------------------------------------------------------ +// ------------------------------------------------------ // blockchain services types // NOTE: Interfaces used by RPC must be thread safe! -//------------------------------------------------------ +// ------------------------------------------------------ -//------------------------------------------------------ +// ------------------------------------------------------ // blockstore //go:generate ../scripts/mockery_generate.sh BlockStore @@ -35,7 +35,7 @@ type BlockStore interface { LoadSeenCommit(height int64) *types.Commit } -//----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- // evidence pool //go:generate ../scripts/mockery_generate.sh EvidencePool diff --git a/state/state.go b/state/state.go index 5fea7d224a3..7e81edfac4b 100644 --- a/state/state.go +++ b/state/state.go @@ -78,6 +78,9 @@ type State struct { // the latest AppHash we've received from calling abci.Commit() AppHash []byte + + // [dojimamint] side tx responses + SideTxResponses []*types.SideTxResultWithData } // Copy makes a copy of the State for mutating. @@ -102,6 +105,9 @@ func (state State) Copy() State { AppHash: state.AppHash, LastResultsHash: state.LastResultsHash, + + // [dojimamint] side tx responses + SideTxResponses: state.SideTxResponses, } } diff --git a/state/txindex/kv/kv.go b/state/txindex/kv/kv.go index 8ed57934d9e..950b93b5fb7 100644 --- a/state/txindex/kv/kv.go +++ b/state/txindex/kv/kv.go @@ -257,7 +257,7 @@ func (txi *TxIndex) Search(ctx context.Context, q *query.Query) ([]*abci.TxResul // extract ranges // if both upper and lower bounds exist, it's better to get them in order not // no iterate over kvs that are not within range. - //If we have a query range over height and want to still look for + // If we have a query range over height and want to still look for // specific event values we do not want to simply return all // transactios in this height range. We remember the height range info // and pass it on to match() to take into account when processing events. diff --git a/state/validation.go b/state/validation.go index 0ebe37bf903..c0875f75156 100644 --- a/state/validation.go +++ b/state/validation.go @@ -9,7 +9,7 @@ import ( "github.com/tendermint/tendermint/types" ) -//----------------------------------------------------- +// ----------------------------------------------------- // Validate block func validateBlock(state State, block *types.Block) error { diff --git a/test/e2e/app/snapshots.go b/test/e2e/app/snapshots.go index c460fde271f..2a35a38771e 100644 --- a/test/e2e/app/snapshots.go +++ b/test/e2e/app/snapshots.go @@ -70,7 +70,7 @@ func (s *SnapshotStore) saveMetadata() error { // save the file to a new file and move it to make saving atomic. newFile := filepath.Join(s.dir, "metadata.json.new") file := filepath.Join(s.dir, "metadata.json") - err = os.WriteFile(newFile, bz, 0o644) //nolint: gosec + err = os.WriteFile(newFile, bz, 0o644) // nolint: gosec if err != nil { return err } diff --git a/test/e2e/runner/main.go b/test/e2e/runner/main.go index f4c8fd60a4e..ddd6a68af9f 100644 --- a/test/e2e/runner/main.go +++ b/test/e2e/runner/main.go @@ -259,7 +259,7 @@ func NewCLI() *CLI { Min Block Interval Max Block Interval over a 100 block sampling period. - + Does not run any perturbations. `, RunE: func(cmd *cobra.Command, args []string) error { diff --git a/test/maverick/consensus/ticker.go b/test/maverick/consensus/ticker.go index fb3571ac867..4174ff403c8 100644 --- a/test/maverick/consensus/ticker.go +++ b/test/maverick/consensus/ticker.go @@ -74,7 +74,7 @@ func (t *timeoutTicker) ScheduleTimeout(ti timeoutInfo) { t.tickChan <- ti } -//------------------------------------------------------------- +// ------------------------------------------------------------- // stop the timer and drain if necessary func (t *timeoutTicker) stopTimer() { diff --git a/test/maverick/node/privval.go b/test/maverick/node/privval.go index 094b164fd46..9f549d64f19 100644 --- a/test/maverick/node/privval.go +++ b/test/maverick/node/privval.go @@ -149,6 +149,11 @@ type FilePV struct { LastSignState FilePVLastSignState } +// SignSideTxResult implements types.PrivValidator +func (*FilePV) SignSideTxResult(sideTxResult *types.SideTxResultWithData) error { + panic("unimplemented") +} + // GenFilePV generates a new validator with randomly generated private key // and sets the filePaths, but does not call Save(). func GenFilePV(keyFilePath, stateFilePath string) *FilePV { diff --git a/types/block.go b/types/block.go index dff8d4ab590..c4b44cff262 100644 --- a/types/block.go +++ b/types/block.go @@ -2,6 +2,7 @@ package types import ( "bytes" + "encoding/hex" "errors" "fmt" "strings" @@ -9,6 +10,7 @@ import ( "github.com/gogo/protobuf/proto" gogotypes "github.com/gogo/protobuf/types" + abciTypes "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto" "github.com/tendermint/tendermint/crypto/merkle" @@ -270,7 +272,7 @@ func BlockFromProto(bp *cmtproto.Block) (*Block, error) { return b, b.ValidateBasic() } -//----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- // MaxDataBytes returns the maximum size of block's data. // @@ -315,7 +317,7 @@ func MaxDataBytesNoEvidence(maxBytes int64, valsCount int) int64 { return maxDataBytes } -//----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- // Header defines the structure of a CometBFT block header. // NOTE: changes to the Header should be duplicated in: @@ -569,7 +571,7 @@ func HeaderFromProto(ph *cmtproto.Header) (Header, error) { return *h, h.ValidateBasic() } -//------------------------------------- +// ------------------------------------- // BlockIDFlag indicates which BlockID the signature is for. type BlockIDFlag byte @@ -597,6 +599,8 @@ type CommitSig struct { ValidatorAddress Address `json:"validator_address"` Timestamp time.Time `json:"timestamp"` Signature []byte `json:"signature"` + + SideTxResults []SideTxResult `json:"side_tx_results"` // side-tx result [dojimamint] } // NewCommitSigForBlock returns new CommitSig with BlockIDFlagCommit. @@ -621,6 +625,7 @@ func NewCommitSigAbsent() CommitSig { return CommitSig{ BlockIDFlag: BlockIDFlagAbsent, } + } // ForBlock returns true if CommitSig is for the block. @@ -640,11 +645,22 @@ func (cs CommitSig) Absent() bool { // 3. block ID flag // 4. timestamp func (cs CommitSig) String() string { - return fmt.Sprintf("CommitSig{%X by %X on %v @ %s}", + sideTxResults := "Proposals " + if len(cs.SideTxResults) > 0 { + for _, s := range cs.SideTxResults { + sideTxResults += s.String() + } + } else { + sideTxResults = "no-proposals" + } + + return fmt.Sprintf("CommitSig{%X by %X on %v @ %s [%s]}", cmtbytes.Fingerprint(cs.Signature), cmtbytes.Fingerprint(cs.ValidatorAddress), cs.BlockIDFlag, - CanonicalTime(cs.Timestamp)) + CanonicalTime(cs.Timestamp), + sideTxResults, + ) } // BlockID returns the Commit's BlockID if CommitSig indicates signing, @@ -666,14 +682,6 @@ func (cs CommitSig) BlockID(commitBlockID BlockID) BlockID { // ValidateBasic performs basic validation. func (cs CommitSig) ValidateBasic() error { - switch cs.BlockIDFlag { - case BlockIDFlagAbsent: - case BlockIDFlagCommit: - case BlockIDFlagNil: - default: - return fmt.Errorf("unknown BlockIDFlag: %v", cs.BlockIDFlag) - } - switch cs.BlockIDFlag { case BlockIDFlagAbsent: if len(cs.ValidatorAddress) != 0 { @@ -685,6 +693,26 @@ func (cs CommitSig) ValidateBasic() error { if len(cs.Signature) != 0 { return errors.New("signature is present") } + + if len(cs.SideTxResults) > 0 { + for _, s := range cs.SideTxResults { + // side-tx response sig should be empty or valid 65 bytes + if len(s.Sig) != 0 && len(s.Sig) != 65 { + return fmt.Errorf("Side-tx signature is invalid. Sig length: %v", len(s.Sig)) + } + + if _, ok := abciTypes.SideTxResultType_name[s.Result]; !ok { + return fmt.Errorf("Invalid side-tx result. Result: %v", s.Result) + } + + // tx-hash must be 32 bytes + if len(s.TxHash) != 32 { + return fmt.Errorf("Invalid side-tx tx hash. TxHash: %v", hex.EncodeToString(s.TxHash)) + } + } + } + case BlockIDFlagCommit: + case BlockIDFlagNil: default: if len(cs.ValidatorAddress) != crypto.AddressSize { return fmt.Errorf("expected ValidatorAddress size to be %d bytes, got %d bytes", @@ -699,6 +727,7 @@ func (cs CommitSig) ValidateBasic() error { if len(cs.Signature) > MaxSignatureSize { return fmt.Errorf("signature is too big (max: %d)", MaxSignatureSize) } + return fmt.Errorf("unknown BlockIDFlag: %v", cs.BlockIDFlag) } return nil @@ -715,9 +744,22 @@ func (cs *CommitSig) ToProto() *cmtproto.CommitSig { ValidatorAddress: cs.ValidatorAddress, Timestamp: cs.Timestamp, Signature: cs.Signature, + SideTxResults: convertSideTxResults(cs.SideTxResults), // [dojimamint] } } +func convertSideTxResults(stxResults []SideTxResult) []*cmtproto.SideTxResult { + var protoStxResults []*cmtproto.SideTxResult + for _, stxResult := range stxResults { + protoStxResults = append(protoStxResults, &cmtproto.SideTxResult{ + TxHash: stxResult.TxHash, + Result: stxResult.Result, + Sig: stxResult.Sig, + }) + } + return protoStxResults +} + // FromProto sets a protobuf CommitSig to the given pointer. // It returns an error if the CommitSig is invalid. func (cs *CommitSig) FromProto(csp cmtproto.CommitSig) error { @@ -726,11 +768,24 @@ func (cs *CommitSig) FromProto(csp cmtproto.CommitSig) error { cs.ValidatorAddress = csp.ValidatorAddress cs.Timestamp = csp.Timestamp cs.Signature = csp.Signature + cs.SideTxResults = convertProtoSideTxResults(csp.SideTxResults) // [dojimamint] return cs.ValidateBasic() } -//------------------------------------- +func convertProtoSideTxResults(protoStxResults []*cmtproto.SideTxResult) []SideTxResult { + var stxResults []SideTxResult + for _, protoStxResult := range protoStxResults { + stxResults = append(stxResults, SideTxResult{ + TxHash: protoStxResult.TxHash, + Result: protoStxResult.Result, + Sig: protoStxResult.Sig, + }) + } + return stxResults +} + +// ------------------------------------- // Commit contains the evidence that a block was committed by a set of validators. // NOTE: Commit is empty for height 1, but never nil. @@ -792,6 +847,7 @@ func (commit *Commit) GetVote(valIdx int32) *Vote { ValidatorAddress: commitSig.ValidatorAddress, ValidatorIndex: valIdx, Signature: commitSig.Signature, + SideTxResults: commitSig.SideTxResults, } } @@ -986,7 +1042,7 @@ func CommitFromProto(cp *cmtproto.Commit) (*Commit, error) { return commit, commit.ValidateBasic() } -//----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- // Data contains the set of transactions included in the block type Data struct { @@ -1067,7 +1123,7 @@ func DataFromProto(dp *cmtproto.Data) (Data, error) { return *data, nil } -//----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- // EvidenceData contains any evidence of malicious wrong-doing by validators type EvidenceData struct { @@ -1158,7 +1214,7 @@ func (data *EvidenceData) FromProto(eviData *cmtproto.EvidenceList) error { return nil } -//-------------------------------------------------------------------------------- +// -------------------------------------------------------------------------------- // BlockID type BlockID struct { diff --git a/types/canonical.go b/types/canonical.go index 199b4d4414d..817737492c2 100644 --- a/types/canonical.go +++ b/types/canonical.go @@ -61,6 +61,8 @@ func CanonicalizeVote(chainID string, vote *cmtproto.Vote) cmtproto.CanonicalVot BlockID: CanonicalizeBlockID(vote.BlockID), Timestamp: vote.Timestamp, ChainID: chainID, + + SideTxResults: vote.SideTxResults, } } diff --git a/types/codec.go b/types/codec.go new file mode 100644 index 00000000000..025b3c1f13a --- /dev/null +++ b/types/codec.go @@ -0,0 +1,22 @@ +package types + +import ( + amino "github.com/tendermint/go-amino" + cryptoAmino "github.com/tendermint/tendermint/crypto/encoding/amino" +) + +var cdc = amino.NewCodec() + +func init() { + RegisterBlockAmino(cdc) +} + +func RegisterBlockAmino(cdc *amino.Codec) { + cryptoAmino.RegisterAmino(cdc) + RegisterEvidences(cdc) +} + +// GetCodec returns a codec used by the package. For testing purposes only. +func GetCodec() *amino.Codec { + return cdc +} diff --git a/types/evidence.go b/types/evidence.go index 1d4c0f1567c..e86c05c86f6 100644 --- a/types/evidence.go +++ b/types/evidence.go @@ -9,6 +9,7 @@ import ( "strings" "time" + "github.com/tendermint/go-amino" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto/merkle" "github.com/tendermint/tendermint/crypto/tmhash" @@ -17,6 +18,11 @@ import ( cmtproto "github.com/tendermint/tendermint/proto/tendermint/types" ) +const ( + // MaxEvidenceBytes is a maximum size of any evidence (including amino overhead). + MaxEvidenceBytes int64 = 484 +) + // Evidence represents any provable malicious activity by a validator. // Verification logic for each evidence is part of the evidence module. type Evidence interface { @@ -29,7 +35,7 @@ type Evidence interface { ValidateBasic() error // basic consistency check } -//-------------------------------------------------------------------------------------- +// -------------------------------------------------------------------------------------- // DuplicateVoteEvidence contains evidence of a single validator signing two conflicting votes. type DuplicateVoteEvidence struct { @@ -180,7 +186,7 @@ func DuplicateVoteEvidenceFromProto(pb *cmtproto.DuplicateVoteEvidence) (*Duplic return dve, dve.ValidateBasic() } -//------------------------------------ LIGHT EVIDENCE -------------------------------------- +// ------------------------------------ LIGHT EVIDENCE -------------------------------------- // LightClientAttackEvidence is a generalized evidence that captures all forms of known attacks on // a light client such that a full node can verify, propose and commit the evidence on-chain for @@ -318,10 +324,10 @@ func (l *LightClientAttackEvidence) Height() int64 { // String returns a string representation of LightClientAttackEvidence func (l *LightClientAttackEvidence) String() string { return fmt.Sprintf(`LightClientAttackEvidence{ - ConflictingBlock: %v, - CommonHeight: %d, - ByzatineValidators: %v, - TotalVotingPower: %d, + ConflictingBlock: %v, + CommonHeight: %d, + ByzatineValidators: %v, + TotalVotingPower: %d, Timestamp: %v}#%X`, l.ConflictingBlock.String(), l.CommonHeight, l.ByzantineValidators, l.TotalVotingPower, l.Timestamp, l.Hash()) @@ -422,7 +428,7 @@ func LightClientAttackEvidenceFromProto(lpb *cmtproto.LightClientAttackEvidence) return l, l.ValidateBasic() } -//------------------------------------------------------------------------------------------ +// ------------------------------------------------------------------------------------------ // EvidenceList is a list of Evidence. Evidences is not a word. type EvidenceList []Evidence @@ -459,7 +465,29 @@ func (evl EvidenceList) Has(evidence Evidence) bool { return false } -//------------------------------------------ PROTO -------------------------------------- +// ------------------------------------------- + +func RegisterEvidences(cdc *amino.Codec) { + cdc.RegisterInterface((*Evidence)(nil), nil) + cdc.RegisterConcrete(&DuplicateVoteEvidence{}, "tendermint/DuplicateVoteEvidence", nil) +} + +const ( + MaxEvidenceBytesDenominator = 10 +) + +// MaxEvidencePerBlock returns the maximum number of evidences +// allowed in the block and their maximum total size (limitted to 1/10th +// of the maximum block size). +// TODO: change to a constant, or to a fraction of the validator set size. +// See https://github.com/tendermint/tendermint/issues/2590 +func MaxEvidencePerBlock(blockMaxBytes int64) (int64, int64) { + maxBytes := blockMaxBytes / MaxEvidenceBytesDenominator + maxNum := maxBytes / MaxEvidenceBytes + return maxNum, maxBytes +} + +// ------------------------------------------ PROTO -------------------------------------- // EvidenceToProto is a generalized function for encoding evidence that conforms to the // evidence interface to protobuf @@ -515,7 +543,7 @@ func init() { cmtjson.RegisterType(&LightClientAttackEvidence{}, "tendermint/LightClientAttackEvidence") } -//-------------------------------------------- ERRORS -------------------------------------- +// -------------------------------------------- ERRORS -------------------------------------- // ErrInvalidEvidence wraps a piece of evidence and the error denoting how or why it is invalid. type ErrInvalidEvidence struct { @@ -549,7 +577,7 @@ func (err *ErrEvidenceOverflow) Error() string { return fmt.Sprintf("Too much evidence: Max %d, got %d", err.Max, err.Got) } -//-------------------------------------------- MOCKING -------------------------------------- +// -------------------------------------------- MOCKING -------------------------------------- // unstable - use only for testing diff --git a/types/priv_validator.go b/types/priv_validator.go index ad7259bdbf6..bc5225fe414 100644 --- a/types/priv_validator.go +++ b/types/priv_validator.go @@ -17,6 +17,7 @@ type PrivValidator interface { SignVote(chainID string, vote *cmtproto.Vote) error SignProposal(chainID string, proposal *cmtproto.Proposal) error + SignSideTxResult(sideTxResult *SideTxResultWithData) error } type PrivValidatorsByAddress []PrivValidator @@ -53,8 +54,8 @@ type MockPV struct { breakVoteSigning bool } -func NewMockPV() MockPV { - return MockPV{ed25519.GenPrivKey(), false, false} +func NewMockPV() *MockPV { + return &MockPV{ed25519.GenPrivKey(), false, false} } // NewMockPVWithParams allows one to create a MockPV instance, but with finer @@ -110,6 +111,16 @@ func (pv MockPV) ExtractIntoValidator(votingPower int64) *Validator { } } +// SignSideTxResult implements PrivValidator. +func (pv MockPV) SignSideTxResult(sideTxResult *SideTxResultWithData) error { + sig, err := pv.PrivKey.Sign(sideTxResult.GetBytes()) + if err != nil { + return err + } + sideTxResult.Sig = sig + return nil +} + // String returns a string representation of the MockPV. func (pv MockPV) String() string { mpv, _ := pv.GetPubKey() // mockPV will never return an error, ignored here diff --git a/types/proposal.go b/types/proposal.go index 3401f6f055a..919dad3b13d 100644 --- a/types/proposal.go +++ b/types/proposal.go @@ -30,6 +30,7 @@ type Proposal struct { BlockID BlockID `json:"block_id"` Timestamp time.Time `json:"timestamp"` Signature []byte `json:"signature"` + Data []byte `json:"data"` // [dojimamint] tx data } // NewProposal returns a new Proposal. @@ -159,3 +160,12 @@ func ProposalFromProto(pp *cmtproto.Proposal) (*Proposal, error) { return p, p.ValidateBasic() } + +// SignBytes returns the Proposal bytes for signing +func (p *Proposal) SignBytes(chainID string) []byte { + bz, err := cdc.MarshalBinaryLengthPrefixed(CanonicalizeProposal(chainID, p.ToProto())) + if err != nil { + panic(err) + } + return bz +} diff --git a/types/protobuf.go b/types/protobuf.go index 489529c541b..0cf5827cc1c 100644 --- a/types/protobuf.go +++ b/types/protobuf.go @@ -99,9 +99,10 @@ func (tm2pb) ValidatorUpdates(vals *ValidatorSet) []abci.ValidatorUpdate { func (tm2pb) ConsensusParams(params *cmtproto.ConsensusParams) *abci.ConsensusParams { return &abci.ConsensusParams{ - Block: &abci.BlockParams{ - MaxBytes: params.Block.MaxBytes, - MaxGas: params.Block.MaxGas, + Block: &cmtproto.BlockParams{ + MaxBytes: params.Block.MaxBytes, + MaxGas: params.Block.MaxGas, + TimeIotaMs: params.Block.TimeIotaMs, }, Evidence: ¶ms.Evidence, Validator: ¶ms.Validator, diff --git a/types/side_tx.go b/types/side_tx.go new file mode 100644 index 00000000000..ea9901b21d4 --- /dev/null +++ b/types/side_tx.go @@ -0,0 +1,58 @@ +package types + +import ( + "encoding/binary" + "fmt" + + cmn "github.com/tendermint/tendermint/libs/bytes" +) + +// SideTxResult side tx result for vote +type SideTxResult struct { + TxHash []byte `json:"tx_hash"` + Result int32 `json:"result"` + Sig []byte `json:"sig"` +} + +func (sp *SideTxResult) String() string { + if sp == nil { + return "" + } + + return fmt.Sprintf("SideTxResult{%X (%v) %X}", + cmn.Fingerprint(sp.TxHash), + sp.Result, + cmn.Fingerprint(sp.Sig), + ) +} + +// SideTxResultWithData side tx result with data for vote +type SideTxResultWithData struct { + SideTxResult + + Data []byte `json:"data"` +} + +// GetBytes returns data bytes for sign +func (sp *SideTxResultWithData) GetBytes() []byte { + bs := make([]byte, 4) + binary.BigEndian.PutUint32(bs, uint32(sp.Result)) + + data := make([]byte, 0) + data = append(data, bs[3]) // use last byte as result + if len(sp.Data) > 0 { + data = append(data, sp.Data...) + } + return data +} + +func (sp *SideTxResultWithData) String() string { + if sp == nil { + return "" + } + + return fmt.Sprintf("SideTxResultWithData {%s %X}", + sp.SideTxResult.String(), + cmn.Fingerprint(sp.Data), + ) +} diff --git a/types/vote.go b/types/vote.go index 544ae47b583..4a055a45631 100644 --- a/types/vote.go +++ b/types/vote.go @@ -2,10 +2,12 @@ package types import ( "bytes" + "encoding/hex" "errors" "fmt" "time" + abciTypes "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto" cmtbytes "github.com/tendermint/tendermint/libs/bytes" "github.com/tendermint/tendermint/libs/protoio" @@ -56,6 +58,8 @@ type Vote struct { ValidatorAddress Address `json:"validator_address"` ValidatorIndex int32 `json:"validator_index"` Signature []byte `json:"signature"` + SideTxResults []SideTxResult `json:"side_tx_results"` // side-tx result [dojimamint] + } // CommitSig converts the Vote to a CommitSig. @@ -105,6 +109,15 @@ func (vote *Vote) Copy() *Vote { return &voteCopy } +func (vote *Vote) SignBytes(chainID string) []byte { + // [dojimamint] converted from amino to rlp + bz, err := cdc.MarshalBinaryLengthPrefixed(CanonicalizeVote(chainID, vote.ToProto())) + if err != nil { + panic(err) + } + return bz +} + // String returns a string representation of Vote. // // 1. validator index @@ -131,7 +144,16 @@ func (vote *Vote) String() string { panic("Unknown vote type") } - return fmt.Sprintf("Vote{%v:%X %v/%02d/%v(%v) %X %X @ %s}", + sideTxResults := "Proposals " + if len(vote.SideTxResults) > 0 { + for _, s := range vote.SideTxResults { + sideTxResults += s.String() + } + } else { + sideTxResults = "no-proposals" + } + + return fmt.Sprintf("Vote{%v:%X %v/%02d/%v(%v) %X %X @ %s [%s]}", vote.ValidatorIndex, cmtbytes.Fingerprint(vote.ValidatorAddress), vote.Height, @@ -141,6 +163,7 @@ func (vote *Vote) String() string { cmtbytes.Fingerprint(vote.BlockID.Hash), cmtbytes.Fingerprint(vote.Signature), CanonicalTime(vote.Timestamp), + sideTxResults, ) } @@ -198,6 +221,24 @@ func (vote *Vote) ValidateBasic() error { return fmt.Errorf("signature is too big (max: %d)", MaxSignatureSize) } + if len(vote.SideTxResults) > 0 { + for _, s := range vote.SideTxResults { + // side-tx response sig should be empty or valid 65 bytes + if len(s.Sig) != 0 && len(s.Sig) != 65 { + return fmt.Errorf("Side-tx signature is invalid. Sig length: %v", len(s.Sig)) + } + + if _, ok := abciTypes.SideTxResultType_name[s.Result]; !ok { + return fmt.Errorf("Invalid side-tx result. Result: %v", s.Result) + } + + // tx-hash must be 32 bytes + if len(s.TxHash) != 32 { + return fmt.Errorf("Invalid side-tx tx hash. TxHash: %v", hex.EncodeToString(s.TxHash)) + } + } + } + return nil } @@ -217,10 +258,11 @@ func (vote *Vote) ToProto() *cmtproto.Vote { ValidatorAddress: vote.ValidatorAddress, ValidatorIndex: vote.ValidatorIndex, Signature: vote.Signature, + SideTxResults: convertSideTxResults(vote.SideTxResults), } } -// FromProto converts a proto generetad type to a handwritten type +// VoteFromProto converts a proto generated type to a handwritten type // return type, nil if everything converts safely, otherwise nil, error func VoteFromProto(pv *cmtproto.Vote) (*Vote, error) { if pv == nil { @@ -241,6 +283,7 @@ func VoteFromProto(pv *cmtproto.Vote) (*Vote, error) { vote.ValidatorAddress = pv.ValidatorAddress vote.ValidatorIndex = pv.ValidatorIndex vote.Signature = pv.Signature + vote.SideTxResults = convertProtoSideTxResults(pv.SideTxResults) return vote, vote.ValidateBasic() } diff --git a/types/vote_set.go b/types/vote_set.go index 277a3e47234..8dd8171f1f7 100644 --- a/types/vote_set.go +++ b/types/vote_set.go @@ -625,6 +625,10 @@ func (voteSet *VoteSet) MakeCommit() *Commit { commitSigs := make([]CommitSig, len(voteSet.votes)) for i, v := range voteSet.votes { commitSig := v.CommitSig() + if v != nil && v.SideTxResults != nil && len(v.SideTxResults) > 0 { + commitSig.SideTxResults = v.SideTxResults //[dojimamint] + } + // if block ID exists but doesn't match, exclude sig if commitSig.ForBlock() && !v.BlockID.Equals(*voteSet.maj23) { commitSig = NewCommitSigAbsent()