diff --git a/README.md b/README.md index 9d1db358d..6c35736e5 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,8 @@ TMSP requests/responses are simple Protobuf messages. Check out the [schema fil * __Usage__:
Validate a transaction. This message should not mutate the state. Transactions are first run through CheckTx before broadcast to peers in the mempool layer. - You can make CheckTx semi-stateful and clear the state upon `Commit`, to ensure that all txs in the blockchain are valid. + You can make CheckTx semi-stateful and clear the state upon `Commit` or `BeginBlock`, + to allow for dependent sequences of transactions in the same block. #### Commit * __Returns__: @@ -73,6 +74,12 @@ TMSP requests/responses are simple Protobuf messages. Check out the [schema fil * __Usage__:
Called once upon genesis +#### BeginBlock + * __Arguments__: + * `Height (uint64)`: The block height that is starting + * __Usage__:
+ Signals the beginning of a new block. Called prior to any AppendTxs. + #### EndBlock * __Arguments__: * `Height (uint64)`: The block height that ended @@ -81,18 +88,21 @@ TMSP requests/responses are simple Protobuf messages. Check out the [schema fil * __Usage__:
Signals the end of a block. Called prior to each Commit after all transactions -## Changelog +### Changelog + +#### Mar 26h, 2016 +* Introduce BeginBlock -### Mar 6th, 2016 +#### Mar 6th, 2016 * Added InitChain, EndBlock -### Feb 14th, 2016 +#### Feb 14th, 2016 * s/GetHash/Commit/g * Document Protobuf request/response fields -### Jan 23th, 2016 +#### Jan 23th, 2016 * Added CheckTx/Query TMSP message types * Added Result/Log fields to AppendTx/CheckTx/SetOption @@ -100,17 +110,10 @@ TMSP requests/responses are simple Protobuf messages. Check out the [schema fil * Removed Code from ResponseSetOption and ResponseGetHash * Made examples BigEndian -### Jan 12th, 2016 +#### Jan 12th, 2016 * Added "RetCodeBadNonce = 0x06" return code -### Jan 8th, 2016 +#### Jan 8th, 2016 -Tendermint/TMSP now comes to consensus on the order first before AppendTx. -This means that we no longer need the Commit/Rollback TMSP messages. -Instead, there’s a “CheckTx” message for mempool to check the validity of a message. -One consequence is that txs in blocks now may include invalid txs that are ignored. -In the future, we can include a bitarray or merkle structure in the block so anyone can see which txs were valid. -To prevent spam, applications can implement their “CheckTx” messages to deduct some balance, so at least spam txs will cost something. This isn’t any more work that what we already needed to do, so it’s not any worse. -You can see the new changes in the tendermint/tendermint “order_first” branch, and tendermint/tmsp “order_first” branch. If you your TMSP apps to me I can help with the transition. -Please take a look at how the examples in TMSP changed, e.g. how AppContext was removed, CheckTx was added, how the TMSP msg bytes changed, and how commit/rollback messages were removed. +* Tendermint/TMSP now comes to consensus on the order first before AppendTx. diff --git a/client/client.go b/client/client.go index acd99f60a..b4adfbcda 100644 --- a/client/client.go +++ b/client/client.go @@ -28,7 +28,12 @@ type Client interface { QuerySync(tx []byte) (res types.Result) CommitSync() (res types.Result) + InitChainAsync(validators []*types.Validator) *ReqRes + BeginBlockAsync(height uint64) *ReqRes + EndBlockAsync(height uint64) *ReqRes + InitChainSync(validators []*types.Validator) (err error) + BeginBlockSync(height uint64) (err error) EndBlockSync(height uint64) (changedValidators []*types.Validator, err error) } diff --git a/client/local_client.go b/client/local_client.go index b14164f89..28ef6f329 100644 --- a/client/local_client.go +++ b/client/local_client.go @@ -108,6 +108,44 @@ func (app *localClient) CommitAsync() *ReqRes { ) } +func (app *localClient) InitChainAsync(validators []*types.Validator) *ReqRes { + app.mtx.Lock() + if bcApp, ok := app.Application.(types.BlockchainAware); ok { + bcApp.InitChain(validators) + } + reqRes := app.callback( + types.RequestInitChain(validators), + types.ResponseInitChain(), + ) + app.mtx.Unlock() + return reqRes +} + +func (app *localClient) BeginBlockAsync(height uint64) *ReqRes { + app.mtx.Lock() + if bcApp, ok := app.Application.(types.BlockchainAware); ok { + bcApp.BeginBlock(height) + } + app.mtx.Unlock() + return app.callback( + types.RequestBeginBlock(height), + types.ResponseBeginBlock(), + ) +} + +func (app *localClient) EndBlockAsync(height uint64) *ReqRes { + app.mtx.Lock() + var validators []*types.Validator + if bcApp, ok := app.Application.(types.BlockchainAware); ok { + validators = bcApp.EndBlock(height) + } + app.mtx.Unlock() + return app.callback( + types.RequestEndBlock(height), + types.ResponseEndBlock(validators), + ) +} + //------------------------------------------------------- func (app *localClient) FlushSync() error { @@ -169,6 +207,15 @@ func (app *localClient) InitChainSync(validators []*types.Validator) (err error) return nil } +func (app *localClient) BeginBlockSync(height uint64) (err error) { + app.mtx.Lock() + if bcApp, ok := app.Application.(types.BlockchainAware); ok { + bcApp.BeginBlock(height) + } + app.mtx.Unlock() + return nil +} + func (app *localClient) EndBlockSync(height uint64) (changedValidators []*types.Validator, err error) { app.mtx.Lock() if bcApp, ok := app.Application.(types.BlockchainAware); ok { diff --git a/client/remote_client.go b/client/remote_client.go index fb8a5c8ea..d0aff152b 100644 --- a/client/remote_client.go +++ b/client/remote_client.go @@ -246,6 +246,10 @@ func (cli *remoteClient) InitChainAsync(validators []*types.Validator) *ReqRes { return cli.queueRequest(types.RequestInitChain(validators)) } +func (cli *remoteClient) BeginBlockAsync(height uint64) *ReqRes { + return cli.queueRequest(types.RequestBeginBlock(height)) +} + func (cli *remoteClient) EndBlockAsync(height uint64) *ReqRes { return cli.queueRequest(types.RequestEndBlock(height)) } @@ -336,6 +340,15 @@ func (cli *remoteClient) InitChainSync(validators []*types.Validator) (err error return nil } +func (cli *remoteClient) BeginBlockSync(height uint64) (err error) { + cli.queueRequest(types.RequestBeginBlock(height)) + cli.FlushSync() + if cli.err != nil { + return cli.err + } + return nil +} + func (cli *remoteClient) EndBlockSync(height uint64) (validators []*types.Validator, err error) { reqres := cli.queueRequest(types.RequestEndBlock(height)) cli.FlushSync() diff --git a/types/application.go b/types/application.go index d8ea48913..0d793d77e 100644 --- a/types/application.go +++ b/types/application.go @@ -29,6 +29,9 @@ type BlockchainAware interface { // validators: genesis validators from TendermintCore InitChain(validators []*Validator) + // Signals the beginning of a block + BeginBlock(height uint64) + // Signals the end of a block // validators: changed validators from app to TendermintCore EndBlock(height uint64) (validators []*Validator) diff --git a/types/messages.go b/types/messages.go index af0a71093..facc3bfc0 100644 --- a/types/messages.go +++ b/types/messages.go @@ -68,6 +68,13 @@ func RequestInitChain(validators []*Validator) *Request { } } +func RequestBeginBlock(height uint64) *Request { + return &Request{ + Type: MessageType_BeginBlock, + Height: height, + } +} + func RequestEndBlock(height uint64) *Request { return &Request{ Type: MessageType_EndBlock, @@ -153,6 +160,12 @@ func ResponseInitChain() *Response { } } +func ResponseBeginBlock() *Response { + return &Response{ + Type: MessageType_BeginBlock, + } +} + func ResponseEndBlock(validators []*Validator) *Response { return &Response{ Type: MessageType_EndBlock, diff --git a/types/types.pb.go b/types/types.pb.go index 96067a152..75bf1b79c 100644 --- a/types/types.pb.go +++ b/types/types.pb.go @@ -38,8 +38,8 @@ const ( MessageType_Commit MessageType = 19 MessageType_Query MessageType = 20 MessageType_InitChain MessageType = 21 - // BeginBlock = 0x16; NOT USED - MessageType_EndBlock MessageType = 23 + MessageType_BeginBlock MessageType = 22 + MessageType_EndBlock MessageType = 23 ) var MessageType_name = map[int32]string{ @@ -54,6 +54,7 @@ var MessageType_name = map[int32]string{ 19: "Commit", 20: "Query", 21: "InitChain", + 22: "BeginBlock", 23: "EndBlock", } var MessageType_value = map[string]int32{ @@ -68,6 +69,7 @@ var MessageType_value = map[string]int32{ "Commit": 19, "Query": 20, "InitChain": 21, + "BeginBlock": 22, "EndBlock": 23, } @@ -245,50 +247,51 @@ func init() { } var fileDescriptor0 = []byte{ - // 716 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xa4, 0x54, 0xcd, 0x52, 0xdb, 0x48, - 0x10, 0x5e, 0xd9, 0xb2, 0xb1, 0xdb, 0x60, 0xc6, 0x83, 0xbd, 0x68, 0xb7, 0xf6, 0x40, 0xb1, 0x55, - 0x5b, 0x14, 0x07, 0x76, 0x8b, 0x3d, 0xe5, 0x08, 0x8e, 0xa1, 0x5c, 0x14, 0xe0, 0x88, 0x9f, 0xbb, - 0x90, 0xda, 0x96, 0x62, 0x79, 0x46, 0x48, 0x23, 0xc0, 0x79, 0xa4, 0xbc, 0x00, 0x4f, 0x90, 0x43, - 0xfe, 0x7f, 0x9e, 0x28, 0x33, 0x23, 0xc9, 0x36, 0xce, 0x21, 0x87, 0x5c, 0x5c, 0xd3, 0xdf, 0x37, - 0xdd, 0xfd, 0x7d, 0x3d, 0x6d, 0x41, 0x4b, 0x4c, 0x23, 0x4c, 0xfe, 0xd5, 0xbf, 0x7b, 0x51, 0xcc, - 0x05, 0xa7, 0x15, 0x1d, 0x6c, 0x3f, 0x1a, 0xb0, 0x62, 0xe3, 0x6d, 0x8a, 0x89, 0xa0, 0xff, 0x80, - 0xa9, 0x40, 0xcb, 0xd8, 0x32, 0x76, 0x9a, 0xfb, 0x74, 0x2f, 0xbb, 0x7e, 0x8a, 0x49, 0xe2, 0x8c, - 0xf0, 0x52, 0x06, 0xb6, 0xe6, 0x29, 0x05, 0xd3, 0x73, 0x84, 0x63, 0x95, 0xe4, 0xbd, 0x55, 0x5b, - 0x9f, 0x29, 0x81, 0xf2, 0x18, 0xa7, 0x56, 0x59, 0x42, 0x75, 0x5b, 0x1d, 0x69, 0x1b, 0x2a, 0x77, - 0x4e, 0x98, 0xa2, 0x65, 0x6a, 0x2c, 0x0b, 0xe8, 0x7f, 0x00, 0xf2, 0x10, 0xc8, 0x1c, 0x1e, 0x27, - 0x56, 0x65, 0xab, 0xbc, 0xd3, 0xd8, 0x27, 0x79, 0xa7, 0xeb, 0x82, 0xb0, 0x17, 0xee, 0xd0, 0xdf, - 0xa1, 0xea, 0x63, 0x30, 0xf2, 0x85, 0x55, 0x95, 0x85, 0x4c, 0x3b, 0x8f, 0xb6, 0xdf, 0x18, 0x50, - 0xb3, 0x31, 0x89, 0x38, 0x4b, 0xf0, 0x97, 0xa4, 0xff, 0x0d, 0xa6, 0xcb, 0x3d, 0xd4, 0xda, 0x9b, - 0xfb, 0xeb, 0x79, 0x6e, 0x57, 0x42, 0x59, 0xa2, 0x22, 0x95, 0x1b, 0x8c, 0x63, 0x1e, 0x17, 0x6e, - 0x74, 0xa0, 0x5c, 0x87, 0x7c, 0x24, 0x6d, 0x68, 0xd7, 0xf2, 0xb8, 0xe4, 0xaf, 0xfa, 0x73, 0x7f, - 0xdb, 0xcf, 0xa0, 0x3e, 0x23, 0x94, 0xd9, 0x28, 0xbd, 0x39, 0x91, 0x93, 0x34, 0xb4, 0xc2, 0x3c, - 0x52, 0xed, 0x23, 0x7e, 0x8f, 0xb1, 0x16, 0x6e, 0xda, 0x59, 0xb0, 0xfb, 0xda, 0x80, 0xc6, 0x82, - 0x47, 0xba, 0x0e, 0x8d, 0xb3, 0x34, 0x0c, 0x73, 0x88, 0xfc, 0x46, 0x6b, 0x60, 0xf6, 0x5c, 0x9f, - 0x13, 0x83, 0xd6, 0xa1, 0x72, 0x14, 0xa6, 0x89, 0x4f, 0x4a, 0x0a, 0xec, 0xb3, 0x21, 0x27, 0x65, - 0xba, 0x06, 0xf5, 0x0b, 0x14, 0xe7, 0x91, 0x08, 0x38, 0x23, 0xa6, 0x0a, 0x7b, 0x0f, 0x2e, 0x66, - 0x61, 0x85, 0xae, 0x42, 0xed, 0x20, 0x8a, 0x90, 0x79, 0x97, 0x0f, 0xa4, 0x45, 0x1b, 0xb0, 0xd2, - 0xf5, 0xd1, 0x1d, 0xcb, 0x40, 0x4e, 0x11, 0xaa, 0x5d, 0x3e, 0x99, 0x04, 0x82, 0x6c, 0xa8, 0xca, - 0x2f, 0x52, 0x8c, 0xa7, 0xa4, 0xad, 0x0a, 0xf4, 0x59, 0x20, 0xba, 0xbe, 0x13, 0x30, 0xd2, 0x51, - 0x05, 0x7a, 0xcc, 0x3b, 0x0c, 0xb9, 0x3b, 0x26, 0x9b, 0xbb, 0x8f, 0x15, 0xa8, 0x15, 0x43, 0xa5, - 0x55, 0x28, 0x9d, 0x9f, 0x48, 0x81, 0x2d, 0x58, 0xeb, 0x33, 0x81, 0x31, 0x73, 0xc2, 0x9e, 0x9a, - 0xa8, 0x54, 0x2a, 0xa1, 0x1e, 0x93, 0x33, 0x0f, 0xd8, 0x28, 0x83, 0x4a, 0xaa, 0xd0, 0xa1, 0xe3, - 0x9d, 0x71, 0xe6, 0xa2, 0x54, 0x4d, 0x60, 0xf5, 0x8a, 0x39, 0xa9, 0xf0, 0x79, 0x1c, 0xbc, 0x42, - 0x4f, 0x0a, 0xef, 0x40, 0xab, 0xcf, 0x92, 0x74, 0x38, 0x0c, 0xdc, 0x00, 0x99, 0x38, 0x4a, 0x99, - 0x97, 0x48, 0x03, 0x14, 0x9a, 0x57, 0x6c, 0xcc, 0xf8, 0x3d, 0xcb, 0x37, 0x9c, 0x54, 0xa9, 0x05, - 0xed, 0x43, 0x27, 0xc1, 0xe7, 0x69, 0x14, 0x06, 0xae, 0x23, 0xf0, 0xc0, 0xf3, 0x62, 0x39, 0x2e, - 0x82, 0xaa, 0x88, 0x62, 0x9e, 0xf6, 0x1e, 0x16, 0x09, 0x4f, 0xea, 0x23, 0x26, 0x64, 0x44, 0xff, - 0x80, 0xce, 0x0f, 0x8c, 0xee, 0xec, 0xd3, 0xbf, 0xc0, 0x5a, 0xa6, 0x8e, 0x9d, 0x64, 0x10, 0x07, - 0xd2, 0x40, 0x20, 0x1f, 0x99, 0x66, 0xac, 0xde, 0x82, 0x42, 0xc1, 0xcb, 0x42, 0x41, 0x81, 0x4f, - 0x78, 0xca, 0x04, 0x19, 0x2f, 0xc1, 0x03, 0xbd, 0x10, 0x24, 0xa4, 0x9b, 0xb0, 0xb1, 0x00, 0x5f, - 0x28, 0x87, 0x6a, 0x3e, 0x93, 0xb9, 0xe2, 0x8c, 0x08, 0x46, 0xcc, 0x11, 0x69, 0x8c, 0x84, 0x15, - 0x8d, 0xf3, 0xa1, 0x14, 0x8d, 0x79, 0xd1, 0x21, 0xc7, 0xf3, 0x0e, 0xd1, 0x32, 0x1c, 0xa6, 0x23, - 0xf9, 0xac, 0xb7, 0x12, 0x26, 0xc7, 0xfc, 0x2e, 0x47, 0x7b, 0x4c, 0x04, 0x62, 0x4a, 0xde, 0x1a, - 0x72, 0x45, 0xd7, 0xe7, 0xf0, 0x71, 0xcc, 0xd3, 0x88, 0xbc, 0x33, 0xa4, 0x4a, 0x3a, 0x47, 0x07, - 0x31, 0x8f, 0x78, 0xe2, 0x84, 0xe4, 0xbd, 0x21, 0xb5, 0xb4, 0x24, 0x31, 0x7b, 0x87, 0x2c, 0xe1, - 0x43, 0x91, 0x30, 0xc3, 0x4f, 0x71, 0x72, 0x83, 0x31, 0xf9, 0x68, 0xc8, 0x71, 0xb7, 0x17, 0x89, - 0x59, 0xad, 0x4f, 0x46, 0xae, 0x68, 0x46, 0x5d, 0x73, 0x81, 0xe4, 0x73, 0x01, 0xe7, 0x73, 0xc8, - 0x0b, 0x7d, 0x31, 0xe8, 0x06, 0x34, 0xe7, 0xb0, 0xbe, 0xfb, 0xd5, 0xa0, 0x7f, 0x42, 0xe7, 0x09, - 0x28, 0x37, 0x60, 0xa0, 0xfe, 0x63, 0xe4, 0x9b, 0x71, 0x53, 0xd5, 0x5f, 0xcc, 0xff, 0xbf, 0x07, - 0x00, 0x00, 0xff, 0xff, 0x91, 0x57, 0x50, 0xd8, 0x46, 0x05, 0x00, 0x00, + // 722 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xa4, 0x54, 0x4d, 0x53, 0xeb, 0x36, + 0x14, 0xad, 0x13, 0x27, 0x24, 0x37, 0x10, 0x14, 0x91, 0x80, 0xdb, 0xe9, 0x82, 0xa1, 0x33, 0x1d, + 0x86, 0x05, 0xed, 0xd0, 0x55, 0x97, 0x24, 0x0d, 0x4c, 0x86, 0x01, 0x52, 0xf3, 0xb1, 0x37, 0xf6, + 0x4d, 0xac, 0xc6, 0x91, 0x8c, 0x2d, 0x03, 0xe9, 0x1f, 0x63, 0xa6, 0xfb, 0x2e, 0xde, 0xf7, 0xc7, + 0x2f, 0x7a, 0x92, 0x3f, 0x92, 0x90, 0xb7, 0x78, 0x8b, 0xb7, 0xc9, 0xe8, 0x9c, 0x23, 0xdd, 0x7b, + 0xce, 0x95, 0x62, 0x68, 0xc9, 0x59, 0x88, 0xf1, 0x6f, 0xe9, 0xef, 0x61, 0x18, 0x09, 0x29, 0x68, + 0x25, 0x05, 0x7b, 0xcf, 0x06, 0xac, 0xd9, 0x78, 0x9f, 0x60, 0x2c, 0xe9, 0xaf, 0x60, 0x6a, 0xd2, + 0x32, 0x76, 0x8d, 0xfd, 0xe6, 0x11, 0x3d, 0xcc, 0xb6, 0x9f, 0x63, 0x1c, 0x3b, 0x63, 0xbc, 0x56, + 0xc0, 0x4e, 0x75, 0x4a, 0xc1, 0xf4, 0x1c, 0xe9, 0x58, 0x25, 0xb5, 0x6f, 0xdd, 0x4e, 0xd7, 0x94, + 0x40, 0x79, 0x82, 0x33, 0xab, 0xac, 0xa8, 0xba, 0xad, 0x97, 0xb4, 0x0d, 0x95, 0x07, 0x27, 0x48, + 0xd0, 0x32, 0x53, 0x2e, 0x03, 0xf4, 0x77, 0x00, 0xb5, 0x60, 0xea, 0x8c, 0x88, 0x62, 0xab, 0xb2, + 0x5b, 0xde, 0x6f, 0x1c, 0x91, 0xbc, 0xd3, 0x6d, 0x21, 0xd8, 0x4b, 0x7b, 0xe8, 0x36, 0x54, 0x7d, + 0x64, 0x63, 0x5f, 0x5a, 0x55, 0x55, 0xc8, 0xb4, 0x73, 0xb4, 0xf7, 0xbf, 0x01, 0x35, 0x1b, 0xe3, + 0x50, 0xf0, 0x18, 0xbf, 0xcb, 0xfa, 0x2f, 0x60, 0xba, 0xc2, 0xc3, 0xd4, 0x7b, 0xf3, 0x68, 0x33, + 0x3f, 0xdb, 0x53, 0x54, 0x76, 0x50, 0x8b, 0x3a, 0x0d, 0x46, 0x91, 0x88, 0x8a, 0x34, 0x29, 0xd0, + 0xa9, 0x03, 0x31, 0x56, 0x31, 0xd2, 0xd4, 0x6a, 0xb9, 0x92, 0xaf, 0xfa, 0xed, 0x7c, 0x7b, 0x7f, + 0x42, 0x7d, 0x2e, 0xe8, 0xb0, 0x61, 0x72, 0x77, 0xa6, 0x26, 0x69, 0xa4, 0x0e, 0x73, 0xa4, 0xdb, + 0x87, 0xe2, 0x11, 0xa3, 0xd4, 0xb8, 0x69, 0x67, 0xe0, 0xe0, 0x3f, 0x03, 0x1a, 0x4b, 0x19, 0xe9, + 0x26, 0x34, 0x2e, 0x92, 0x20, 0xc8, 0x29, 0xf2, 0x03, 0xad, 0x81, 0xd9, 0x77, 0x7d, 0x41, 0x0c, + 0x5a, 0x87, 0xca, 0x49, 0x90, 0xc4, 0x3e, 0x29, 0x69, 0x72, 0xc0, 0x47, 0x82, 0x94, 0xe9, 0x06, + 0xd4, 0xaf, 0x50, 0x5e, 0x86, 0x92, 0x09, 0x4e, 0x4c, 0x0d, 0xfb, 0x4f, 0x2e, 0x66, 0xb0, 0x42, + 0xd7, 0xa1, 0x76, 0x1c, 0x86, 0xc8, 0xbd, 0xeb, 0x27, 0xd2, 0xa2, 0x0d, 0x58, 0xeb, 0xf9, 0xe8, + 0x4e, 0x14, 0x50, 0x53, 0x84, 0x6a, 0x4f, 0x4c, 0xa7, 0x4c, 0x92, 0x2d, 0x5d, 0xf9, 0xef, 0x04, + 0xa3, 0x19, 0x69, 0xeb, 0x02, 0x03, 0xce, 0x64, 0xcf, 0x77, 0x18, 0x27, 0x1d, 0xda, 0x04, 0xe8, + 0xe2, 0x98, 0xf1, 0x6e, 0x20, 0xdc, 0x09, 0xd9, 0xd6, 0x05, 0xfb, 0xdc, 0xcb, 0xd0, 0xce, 0xc1, + 0x73, 0x05, 0x6a, 0xc5, 0x90, 0x69, 0x15, 0x4a, 0x97, 0x67, 0xca, 0x70, 0x0b, 0x36, 0x06, 0x5c, + 0x62, 0xc4, 0x9d, 0xa0, 0xaf, 0x27, 0xac, 0x9c, 0x2b, 0xaa, 0xcf, 0xd5, 0x1d, 0x30, 0x3e, 0xce, + 0xa8, 0x92, 0x2e, 0xd4, 0x75, 0xbc, 0x0b, 0xc1, 0x5d, 0x54, 0x29, 0x08, 0xac, 0xdf, 0x70, 0x27, + 0x91, 0xbe, 0x88, 0xd8, 0xbf, 0xe8, 0xa9, 0x20, 0x1d, 0x68, 0x0d, 0x78, 0x9c, 0x8c, 0x46, 0xcc, + 0x65, 0xc8, 0xe5, 0x49, 0xc2, 0xbd, 0x58, 0x05, 0xa2, 0xd0, 0xbc, 0xe1, 0x13, 0x2e, 0x1e, 0x79, + 0xfe, 0xe2, 0x49, 0x95, 0x5a, 0xd0, 0xee, 0x3a, 0x31, 0xfe, 0x95, 0x84, 0x01, 0x73, 0x1d, 0x89, + 0xc7, 0x9e, 0x17, 0xa9, 0xf1, 0x11, 0xd4, 0x45, 0xb4, 0xf2, 0xb2, 0xf7, 0xa8, 0x38, 0xf0, 0xa2, + 0x3e, 0x62, 0x4c, 0xc6, 0xf4, 0x47, 0xe8, 0x7c, 0xa5, 0xa4, 0x9d, 0x7d, 0xfa, 0x33, 0x58, 0xab, + 0xd2, 0xa9, 0x13, 0x0f, 0x23, 0xa6, 0x02, 0x30, 0x75, 0xe9, 0x34, 0x53, 0xd3, 0x57, 0x51, 0x38, + 0xf8, 0xa7, 0x70, 0x50, 0xf0, 0x53, 0x91, 0x70, 0x49, 0x26, 0x2b, 0xf4, 0x30, 0x7d, 0x20, 0x24, + 0xa0, 0x3b, 0xb0, 0xb5, 0x44, 0x5f, 0xe9, 0x84, 0x7a, 0x3e, 0xd3, 0x85, 0xe3, 0x4c, 0x60, 0x63, + 0xee, 0xc8, 0x24, 0x42, 0xc2, 0x8b, 0xc6, 0xf9, 0x50, 0x8a, 0xc6, 0xa2, 0xe8, 0x90, 0xf3, 0x79, + 0x87, 0x70, 0x95, 0x0e, 0x12, 0x75, 0xb7, 0xe4, 0x5e, 0xd1, 0xe4, 0x54, 0x3c, 0xe4, 0x6c, 0x9f, + 0x4b, 0x26, 0x67, 0xe4, 0x95, 0xa1, 0x9e, 0xec, 0xe6, 0x82, 0x3e, 0x8d, 0x44, 0x12, 0x92, 0xd7, + 0x86, 0x72, 0x49, 0x17, 0xec, 0x30, 0x12, 0xa1, 0x88, 0x9d, 0x80, 0xbc, 0x31, 0x94, 0x97, 0x96, + 0x12, 0xe6, 0xf7, 0x90, 0x1d, 0x78, 0x5b, 0x1c, 0x98, 0xf3, 0xe7, 0x38, 0xbd, 0xc3, 0x88, 0xbc, + 0x33, 0xd4, 0xb8, 0xdb, 0xcb, 0xc2, 0xbc, 0xd6, 0x7b, 0x23, 0x77, 0x34, 0x97, 0x6e, 0x85, 0x44, + 0xf2, 0xa1, 0xa0, 0xf3, 0x39, 0xe4, 0x85, 0x3e, 0x1a, 0x74, 0x0b, 0x9a, 0x0b, 0x3a, 0xdd, 0xfb, + 0xc9, 0xa0, 0x3f, 0x41, 0xe7, 0x05, 0xa9, 0x5e, 0xc0, 0x50, 0xff, 0xe7, 0xc8, 0x67, 0xe3, 0xae, + 0x9a, 0x7e, 0x41, 0xff, 0xf8, 0x12, 0x00, 0x00, 0xff, 0xff, 0x65, 0x9a, 0x2e, 0x13, 0x56, 0x05, + 0x00, 0x00, } diff --git a/types/types.proto b/types/types.proto index 12ae6d29c..8bead59a6 100644 --- a/types/types.proto +++ b/types/types.proto @@ -19,7 +19,7 @@ enum MessageType { Commit = 0x13; Query = 0x14; InitChain = 0x15; - // BeginBlock = 0x16; NOT USED + BeginBlock = 0x16; EndBlock = 0x17; }