Repository: tendermint/rust-abci (language: rust)

Issue:
Bump protobuf to 2.12
\+ regenerate definitions

https://github.com/tendermint/rust-abci/pull/126
https://github.com/tendermint/rust-abci/pull/125



Discussion / hints:

Fix patch:
diff --git a/Cargo.toml b/Cargo.toml
index 6c6cea3..d23b2ed 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "abci"
-version = "0.7.0"
+version = "0.7.1"
 authors = ["Adrian Brink <adrian@brink-holdings.com>", "Jackson Lewis <st.japa6@gmail.com>", "Dave Bryson", "Tomas Tauber"]
 edition = "2018"
 license = "MIT/Apache-2.0"
@@ -13,13 +13,13 @@ include = ["src/**/*", "Cargo.toml"]
 
 [dependencies]
 bytes = "0.4"
-protobuf = "= 2.11.0"
-byteorder = "1.3.2"
-integer-encoding = "1.0.5"
+protobuf = "= 2.15.1"
+byteorder = "1.3.4"
+integer-encoding = "1.1.5"
 log = "0.4.8"
-env_logger = "0.7.0"
+env_logger = "0.7.1"
 tokio = { version = "0.1", default-features = false, features = ["codec", "io", "tcp", "rt-full"] }
 futures = "0.3"
 
 [build-dependencies]
-protobuf-codegen-pure = "= 2.11.0"
+protobuf-codegen-pure = "= 2.15.1"
diff --git a/Makefile b/Makefile
index 6adea77..6b4859e 100644
--- a/Makefile
+++ b/Makefile
@@ -1,12 +1,12 @@
 # Origin
-version_branch = v0.33.1
+version_branch = v0.33.5
 tendermint = https://raw.githubusercontent.com/tendermint/tendermint/$(version_branch)
 
 # Outputs
 tmkv = protobuf/libs/kv/types.proto
 tmmerkle = protobuf/crypto/merkle/merkle.proto
 tmabci = protobuf/abci/types/types.proto
-third_party = protobuf/third_party/proto/gogoproto/gogo.proto
+third_party = third_party/proto/gogoproto/gogo.proto
 
 # You *only* need to run this to rebuild protobufs from the tendermint source
 update-proto:
@@ -15,4 +15,4 @@ update-proto:
 	curl $(tendermint)/crypto/merkle/merkle.proto > $(tmmerkle)
 	sed 's@package types;@package abci;@' $(tmabci) > protobuf/abci.proto
 	curl $(tendermint)/version/version.go | grep -F -eTMCoreSem -eABCISemVer > version.txt
-	curl $(tendermint)/$(third_party) > $(third_party)
+	curl $(tendermint)/$(third_party) > protobuf/$(third_party)
diff --git a/README.md b/README.md
index 9cab78d..cc5dc92 100644
--- a/README.md
+++ b/README.md
@@ -12,8 +12,8 @@ applications for [Tendermint](https://github.com/tendermint/tendermint/).
 
 ## Supported Version
 
-- Tendermint 0.33.1
-- ABCI 0.16.1
+- Tendermint 0.33.5
+- ABCI 0.16.2
 
 ## Installation
 
@@ -33,7 +33,7 @@ To use this library to build your own ABCI apps in Rust you have to include the
 
 ```toml
 [dependencies]
-abci = "0.7.0"
+abci = "0.7.1"
 ```
 
 ### Development
@@ -65,6 +65,7 @@ For a real life example of an ABCI application you can checkout [Cosmos SDK](htt
 
 | Tendermint | Rust-abci |
 | ---------- | :-------: |
+| 0.33.5     |   0.7.1   |
 | 0.33.1     |   0.7.0   |
 | 0.32.9     |   0.6.5   |
 | 0.31.7     |   0.5.4   |
diff --git a/build.rs b/build.rs
index 16de54a..a36c527 100644
--- a/build.rs
+++ b/build.rs
@@ -1,17 +1,14 @@
 extern crate protobuf_codegen_pure;
 
 fn main() {
-    protobuf_codegen_pure::run(protobuf_codegen_pure::Args {
-        out_dir: "src/messages",
-        input: &[
+    protobuf_codegen_pure::Codegen::new()
+        .out_dir("src/messages")
+        .inputs(&[
             "protobuf/abci.proto",
             "protobuf/libs/kv/types.proto",
             "protobuf/crypto/merkle/merkle.proto",
-        ],
-        includes: &["protobuf"],
-        customize: protobuf_codegen_pure::Customize {
-            ..Default::default()
-        },
-    })
-    .expect("protoc");
+        ])
+        .include("protobuf")
+        .run()
+        .expect("protoc");
 }
diff --git a/protobuf/abci.proto b/protobuf/abci.proto
index 0d47ad9..351329d 100644
--- a/protobuf/abci.proto
+++ b/protobuf/abci.proto
@@ -207,7 +207,8 @@ message ResponseEndBlock {
 
 message ResponseCommit {
   // reserve 1
-  bytes data = 2;
+  bytes data          = 2;
+  int64 retain_height = 3;
 }
 
 //----------------------------------------
diff --git a/protobuf/abci/types/types.proto b/protobuf/abci/types/types.proto
index 0d47ad9..351329d 100644
--- a/protobuf/abci/types/types.proto
+++ b/protobuf/abci/types/types.proto
@@ -207,7 +207,8 @@ message ResponseEndBlock {
 
 message ResponseCommit {
   // reserve 1
-  bytes data = 2;
+  bytes data          = 2;
+  int64 retain_height = 3;
 }
 
 //----------------------------------------
diff --git a/protobuf/libs/kv/types.proto b/protobuf/libs/kv/types.proto
index 7e1375c..1b6a7a5 100644
--- a/protobuf/libs/kv/types.proto
+++ b/protobuf/libs/kv/types.proto
@@ -16,14 +16,7 @@ option (gogoproto.testgen_all)  = true;
 //----------------------------------------
 // Abstract types
 
-// Define these here for compatibility but use tmlibs/kv.Pair.
 message Pair {
   bytes key   = 1;
   bytes value = 2;
 }
-
-// Define these here for compatibility but use tmlibs/kv.KI64Pair.
-message KI64Pair {
-  bytes key   = 1;
-  int64 value = 2;
-}
diff --git a/protobuf/third_party/proto/gogoproto/gogo.proto b/protobuf/third_party/proto/gogoproto/gogo.proto
index 806efa3..27960ec 100644
--- a/protobuf/third_party/proto/gogoproto/gogo.proto
+++ b/protobuf/third_party/proto/gogoproto/gogo.proto
@@ -33,115 +33,115 @@ package gogoproto;
 
 import "google/protobuf/descriptor.proto";
 
-option java_package         = "com.google.protobuf";
+option java_package = "com.google.protobuf";
 option java_outer_classname = "GoGoProtos";
-option go_package           = "github.com/gogo/protobuf/gogoproto";
+option go_package = "github.com/gogo/protobuf/gogoproto";
 
 extend google.protobuf.EnumOptions {
-  optional bool   goproto_enum_prefix   = 62001;
-  optional bool   goproto_enum_stringer = 62021;
-  optional bool   enum_stringer         = 62022;
-  optional string enum_customname       = 62023;
-  optional bool   enumdecl              = 62024;
+	optional bool goproto_enum_prefix = 62001;
+	optional bool goproto_enum_stringer = 62021;
+	optional bool enum_stringer = 62022;
+	optional string enum_customname = 62023;
+	optional bool enumdecl = 62024;
 }
 
 extend google.protobuf.EnumValueOptions {
-  optional string enumvalue_customname = 66001;
+	optional string enumvalue_customname = 66001;
 }
 
 extend google.protobuf.FileOptions {
-  optional bool goproto_getters_all     = 63001;
-  optional bool goproto_enum_prefix_all = 63002;
-  optional bool goproto_stringer_all    = 63003;
-  optional bool verbose_equal_all       = 63004;
-  optional bool face_all                = 63005;
-  optional bool gostring_all            = 63006;
-  optional bool populate_all            = 63007;
-  optional bool stringer_all            = 63008;
-  optional bool onlyone_all             = 63009;
-
-  optional bool equal_all            = 63013;
-  optional bool description_all      = 63014;
-  optional bool testgen_all          = 63015;
-  optional bool benchgen_all         = 63016;
-  optional bool marshaler_all        = 63017;
-  optional bool unmarshaler_all      = 63018;
-  optional bool stable_marshaler_all = 63019;
-
-  optional bool sizer_all = 63020;
-
-  optional bool goproto_enum_stringer_all = 63021;
-  optional bool enum_stringer_all         = 63022;
-
-  optional bool unsafe_marshaler_all   = 63023;
-  optional bool unsafe_unmarshaler_all = 63024;
-
-  optional bool goproto_extensions_map_all = 63025;
-  optional bool goproto_unrecognized_all   = 63026;
-  optional bool gogoproto_import           = 63027;
-  optional bool protosizer_all             = 63028;
-  optional bool compare_all                = 63029;
-  optional bool typedecl_all               = 63030;
-  optional bool enumdecl_all               = 63031;
-
-  optional bool goproto_registration = 63032;
-  optional bool messagename_all      = 63033;
-
-  optional bool goproto_sizecache_all = 63034;
-  optional bool goproto_unkeyed_all   = 63035;
+	optional bool goproto_getters_all = 63001;
+	optional bool goproto_enum_prefix_all = 63002;
+	optional bool goproto_stringer_all = 63003;
+	optional bool verbose_equal_all = 63004;
+	optional bool face_all = 63005;
+	optional bool gostring_all = 63006;
+	optional bool populate_all = 63007;
+	optional bool stringer_all = 63008;
+	optional bool onlyone_all = 63009;
+
+	optional bool equal_all = 63013;
+	optional bool description_all = 63014;
+	optional bool testgen_all = 63015;
+	optional bool benchgen_all = 63016;
+	optional bool marshaler_all = 63017;
+	optional bool unmarshaler_all = 63018;
+	optional bool stable_marshaler_all = 63019;
+
+	optional bool sizer_all = 63020;
+
+	optional bool goproto_enum_stringer_all = 63021;
+	optional bool enum_stringer_all = 63022;
+
+	optional bool unsafe_marshaler_all = 63023;
+	optional bool unsafe_unmarshaler_all = 63024;
+
+	optional bool goproto_extensions_map_all = 63025;
+	optional bool goproto_unrecognized_all = 63026;
+	optional bool gogoproto_import = 63027;
+	optional bool protosizer_all = 63028;
+	optional bool compare_all = 63029;
+    optional bool typedecl_all = 63030;
+    optional bool enumdecl_all = 63031;
+
+	optional bool goproto_registration = 63032;
+	optional bool messagename_all = 63033;
+
+	optional bool goproto_sizecache_all = 63034;
+	optional bool goproto_unkeyed_all = 63035;
 }
 
 extend google.protobuf.MessageOptions {
-  optional bool goproto_getters  = 64001;
-  optional bool goproto_stringer = 64003;
-  optional bool verbose_equal    = 64004;
-  optional bool face             = 64005;
-  optional bool gostring         = 64006;
-  optional bool populate         = 64007;
-  optional bool stringer         = 67008;
-  optional bool onlyone          = 64009;
+	optional bool goproto_getters = 64001;
+	optional bool goproto_stringer = 64003;
+	optional bool verbose_equal = 64004;
+	optional bool face = 64005;
+	optional bool gostring = 64006;
+	optional bool populate = 64007;
+	optional bool stringer = 67008;
+	optional bool onlyone = 64009;
 
-  optional bool equal            = 64013;
-  optional bool description      = 64014;
-  optional bool testgen          = 64015;
-  optional bool benchgen         = 64016;
-  optional bool marshaler        = 64017;
-  optional bool unmarshaler      = 64018;
-  optional bool stable_marshaler = 64019;
+	optional bool equal = 64013;
+	optional bool description = 64014;
+	optional bool testgen = 64015;
+	optional bool benchgen = 64016;
+	optional bool marshaler = 64017;
+	optional bool unmarshaler = 64018;
+	optional bool stable_marshaler = 64019;
 
-  optional bool sizer = 64020;
+	optional bool sizer = 64020;
 
-  optional bool unsafe_marshaler   = 64023;
-  optional bool unsafe_unmarshaler = 64024;
+	optional bool unsafe_marshaler = 64023;
+	optional bool unsafe_unmarshaler = 64024;
 
-  optional bool goproto_extensions_map = 64025;
-  optional bool goproto_unrecognized   = 64026;
+	optional bool goproto_extensions_map = 64025;
+	optional bool goproto_unrecognized = 64026;
 
-  optional bool protosizer = 64028;
-  optional bool compare    = 64029;
+	optional bool protosizer = 64028;
+	optional bool compare = 64029;
 
-  optional bool typedecl = 64030;
+	optional bool typedecl = 64030;
 
-  optional bool messagename = 64033;
+	optional bool messagename = 64033;
 
-  optional bool goproto_sizecache = 64034;
-  optional bool goproto_unkeyed   = 64035;
+	optional bool goproto_sizecache = 64034;
+	optional bool goproto_unkeyed = 64035;
 }
 
 extend google.protobuf.FieldOptions {
-  optional bool   nullable   = 65001;
-  optional bool   embed      = 65002;
-  optional string customtype = 65003;
-  optional string customname = 65004;
-  optional string jsontag    = 65005;
-  optional string moretags   = 65006;
-  optional string casttype   = 65007;
-  optional string castkey    = 65008;
-  optional string castvalue  = 65009;
-
-  optional bool stdtime     = 65010;
-  optional bool stdduration = 65011;
-  optional bool wktpointer  = 65012;
-
-  optional string castrepeated = 65013;
-}
+	optional bool nullable = 65001;
+	optional bool embed = 65002;
+	optional string customtype = 65003;
+	optional string customname = 65004;
+	optional string jsontag = 65005;
+	optional string moretags = 65006;
+	optional string casttype = 65007;
+	optional string castkey = 65008;
+	optional string castvalue = 65009;
+
+	optional bool stdtime = 65010;
+	optional bool stdduration = 65011;
+	optional bool wktpointer = 65012;
+
+	optional string castrepeated = 65013;
+} 
\ No newline at end of file
diff --git a/src/messages/abci.rs b/src/messages/abci.rs
index 06efaf1..e8aeae8 100644
--- a/src/messages/abci.rs
+++ b/src/messages/abci.rs
@@ -1,11 +1,12 @@
-// This file is generated by rust-protobuf 2.11.0. Do not edit
+// This file is generated by rust-protobuf 2.15.1. Do not edit
 // @generated
 
 // https://github.com/rust-lang/rust-clippy/issues/702
 #![allow(unknown_lints)]
 #![allow(clippy::all)]
 
-#![cfg_attr(rustfmt, rustfmt_skip)]
+#![allow(unused_attributes)]
+#![rustfmt::skip]
 
 #![allow(box_pointers)]
 #![allow(dead_code)]
@@ -24,7 +25,7 @@ use protobuf::ProtobufEnum as ProtobufEnum_imported_for_functions;
 
 /// Generated files are compatible only with the same version
 /// of protobuf runtime.
-// const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_11_0;
+// const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_15_1;
 
 #[derive(PartialEq,Clone,Default)]
 pub struct Request {
@@ -878,7 +879,7 @@ impl ::protobuf::Message for Request {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -950,7 +951,7 @@ impl ::protobuf::Message for Request {
                     Request::has_commit,
                     Request::get_commit,
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<Request>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Request>(
                     "Request",
                     fields,
                     file_descriptor_proto()
@@ -1101,7 +1102,7 @@ impl ::protobuf::Message for RequestEcho {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -1123,7 +1124,7 @@ impl ::protobuf::Message for RequestEcho {
                     |m: &RequestEcho| { &m.message },
                     |m: &mut RequestEcho| { &mut m.message },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<RequestEcho>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<RequestEcho>(
                     "RequestEcho",
                     fields,
                     file_descriptor_proto()
@@ -1227,7 +1228,7 @@ impl ::protobuf::Message for RequestFlush {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -1244,7 +1245,7 @@ impl ::protobuf::Message for RequestFlush {
         unsafe {
             descriptor.get(|| {
                 let fields = ::std::vec::Vec::new();
-                ::protobuf::reflect::MessageDescriptor::new::<RequestFlush>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<RequestFlush>(
                     "RequestFlush",
                     fields,
                     file_descriptor_proto()
@@ -1442,7 +1443,7 @@ impl ::protobuf::Message for RequestInfo {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -1474,7 +1475,7 @@ impl ::protobuf::Message for RequestInfo {
                     |m: &RequestInfo| { &m.p2p_version },
                     |m: &mut RequestInfo| { &mut m.p2p_version },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<RequestInfo>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<RequestInfo>(
                     "RequestInfo",
                     fields,
                     file_descriptor_proto()
@@ -1653,7 +1654,7 @@ impl ::protobuf::Message for RequestSetOption {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -1680,7 +1681,7 @@ impl ::protobuf::Message for RequestSetOption {
                     |m: &RequestSetOption| { &m.value },
                     |m: &mut RequestSetOption| { &mut m.value },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<RequestSetOption>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<RequestSetOption>(
                     "RequestSetOption",
                     fields,
                     file_descriptor_proto()
@@ -2003,7 +2004,7 @@ impl ::protobuf::Message for RequestInitChain {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -2045,7 +2046,7 @@ impl ::protobuf::Message for RequestInitChain {
                     |m: &RequestInitChain| { &m.app_state_bytes },
                     |m: &mut RequestInitChain| { &mut m.app_state_bytes },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<RequestInitChain>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<RequestInitChain>(
                     "RequestInitChain",
                     fields,
                     file_descriptor_proto()
@@ -2284,7 +2285,7 @@ impl ::protobuf::Message for RequestQuery {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -2321,7 +2322,7 @@ impl ::protobuf::Message for RequestQuery {
                     |m: &RequestQuery| { &m.prove },
                     |m: &mut RequestQuery| { &mut m.prove },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<RequestQuery>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<RequestQuery>(
                     "RequestQuery",
                     fields,
                     file_descriptor_proto()
@@ -2610,7 +2611,7 @@ impl ::protobuf::Message for RequestBeginBlock {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -2647,7 +2648,7 @@ impl ::protobuf::Message for RequestBeginBlock {
                     |m: &RequestBeginBlock| { &m.byzantine_validators },
                     |m: &mut RequestBeginBlock| { &mut m.byzantine_validators },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<RequestBeginBlock>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<RequestBeginBlock>(
                     "RequestBeginBlock",
                     fields,
                     file_descriptor_proto()
@@ -2816,7 +2817,7 @@ impl ::protobuf::Message for RequestCheckTx {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -2843,7 +2844,7 @@ impl ::protobuf::Message for RequestCheckTx {
                     |m: &RequestCheckTx| { &m.field_type },
                     |m: &mut RequestCheckTx| { &mut m.field_type },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<RequestCheckTx>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<RequestCheckTx>(
                     "RequestCheckTx",
                     fields,
                     file_descriptor_proto()
@@ -2985,7 +2986,7 @@ impl ::protobuf::Message for RequestDeliverTx {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -3007,7 +3008,7 @@ impl ::protobuf::Message for RequestDeliverTx {
                     |m: &RequestDeliverTx| { &m.tx },
                     |m: &mut RequestDeliverTx| { &mut m.tx },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<RequestDeliverTx>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<RequestDeliverTx>(
                     "RequestDeliverTx",
                     fields,
                     file_descriptor_proto()
@@ -3141,7 +3142,7 @@ impl ::protobuf::Message for RequestEndBlock {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -3163,7 +3164,7 @@ impl ::protobuf::Message for RequestEndBlock {
                     |m: &RequestEndBlock| { &m.height },
                     |m: &mut RequestEndBlock| { &mut m.height },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<RequestEndBlock>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<RequestEndBlock>(
                     "RequestEndBlock",
                     fields,
                     file_descriptor_proto()
@@ -3267,7 +3268,7 @@ impl ::protobuf::Message for RequestCommit {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -3284,7 +3285,7 @@ impl ::protobuf::Message for RequestCommit {
         unsafe {
             descriptor.get(|| {
                 let fields = ::std::vec::Vec::new();
-                ::protobuf::reflect::MessageDescriptor::new::<RequestCommit>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<RequestCommit>(
                     "RequestCommit",
                     fields,
                     file_descriptor_proto()
@@ -4241,7 +4242,7 @@ impl ::protobuf::Message for Response {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -4318,7 +4319,7 @@ impl ::protobuf::Message for Response {
                     Response::has_commit,
                     Response::get_commit,
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<Response>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Response>(
                     "Response",
                     fields,
                     file_descriptor_proto()
@@ -4470,7 +4471,7 @@ impl ::protobuf::Message for ResponseException {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -4492,7 +4493,7 @@ impl ::protobuf::Message for ResponseException {
                     |m: &ResponseException| { &m.error },
                     |m: &mut ResponseException| { &mut m.error },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<ResponseException>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ResponseException>(
                     "ResponseException",
                     fields,
                     file_descriptor_proto()
@@ -4633,7 +4634,7 @@ impl ::protobuf::Message for ResponseEcho {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -4655,7 +4656,7 @@ impl ::protobuf::Message for ResponseEcho {
                     |m: &ResponseEcho| { &m.message },
                     |m: &mut ResponseEcho| { &mut m.message },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<ResponseEcho>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ResponseEcho>(
                     "ResponseEcho",
                     fields,
                     file_descriptor_proto()
@@ -4759,7 +4760,7 @@ impl ::protobuf::Message for ResponseFlush {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -4776,7 +4777,7 @@ impl ::protobuf::Message for ResponseFlush {
         unsafe {
             descriptor.get(|| {
                 let fields = ::std::vec::Vec::new();
-                ::protobuf::reflect::MessageDescriptor::new::<ResponseFlush>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ResponseFlush>(
                     "ResponseFlush",
                     fields,
                     file_descriptor_proto()
@@ -5046,7 +5047,7 @@ impl ::protobuf::Message for ResponseInfo {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -5088,7 +5089,7 @@ impl ::protobuf::Message for ResponseInfo {
                     |m: &ResponseInfo| { &m.last_block_app_hash },
                     |m: &mut ResponseInfo| { &mut m.last_block_app_hash },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<ResponseInfo>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ResponseInfo>(
                     "ResponseInfo",
                     fields,
                     file_descriptor_proto()
@@ -5298,7 +5299,7 @@ impl ::protobuf::Message for ResponseSetOption {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -5330,7 +5331,7 @@ impl ::protobuf::Message for ResponseSetOption {
                     |m: &ResponseSetOption| { &m.info },
                     |m: &mut ResponseSetOption| { &mut m.info },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<ResponseSetOption>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ResponseSetOption>(
                     "ResponseSetOption",
                     fields,
                     file_descriptor_proto()
@@ -5531,7 +5532,7 @@ impl ::protobuf::Message for ResponseInitChain {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -5558,7 +5559,7 @@ impl ::protobuf::Message for ResponseInitChain {
                     |m: &ResponseInitChain| { &m.validators },
                     |m: &mut ResponseInitChain| { &mut m.validators },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<ResponseInitChain>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ResponseInitChain>(
                     "ResponseInitChain",
                     fields,
                     file_descriptor_proto()
@@ -5982,7 +5983,7 @@ impl ::protobuf::Message for ResponseQuery {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -6044,7 +6045,7 @@ impl ::protobuf::Message for ResponseQuery {
                     |m: &ResponseQuery| { &m.codespace },
                     |m: &mut ResponseQuery| { &mut m.codespace },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<ResponseQuery>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ResponseQuery>(
                     "ResponseQuery",
                     fields,
                     file_descriptor_proto()
@@ -6200,7 +6201,7 @@ impl ::protobuf::Message for ResponseBeginBlock {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -6222,7 +6223,7 @@ impl ::protobuf::Message for ResponseBeginBlock {
                     |m: &ResponseBeginBlock| { &m.events },
                     |m: &mut ResponseBeginBlock| { &mut m.events },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<ResponseBeginBlock>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ResponseBeginBlock>(
                     "ResponseBeginBlock",
                     fields,
                     file_descriptor_proto()
@@ -6601,7 +6602,7 @@ impl ::protobuf::Message for ResponseCheckTx {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -6658,7 +6659,7 @@ impl ::protobuf::Message for ResponseCheckTx {
                     |m: &ResponseCheckTx| { &m.codespace },
                     |m: &mut ResponseCheckTx| { &mut m.codespace },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<ResponseCheckTx>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ResponseCheckTx>(
                     "ResponseCheckTx",
                     fields,
                     file_descriptor_proto()
@@ -7044,7 +7045,7 @@ impl ::protobuf::Message for ResponseDeliverTx {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -7101,7 +7102,7 @@ impl ::protobuf::Message for ResponseDeliverTx {
                     |m: &ResponseDeliverTx| { &m.codespace },
                     |m: &mut ResponseDeliverTx| { &mut m.codespace },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<ResponseDeliverTx>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ResponseDeliverTx>(
                     "ResponseDeliverTx",
                     fields,
                     file_descriptor_proto()
@@ -7350,7 +7351,7 @@ impl ::protobuf::Message for ResponseEndBlock {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -7382,7 +7383,7 @@ impl ::protobuf::Message for ResponseEndBlock {
                     |m: &ResponseEndBlock| { &m.events },
                     |m: &mut ResponseEndBlock| { &mut m.events },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<ResponseEndBlock>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ResponseEndBlock>(
                     "ResponseEndBlock",
                     fields,
                     file_descriptor_proto()
@@ -7424,6 +7425,7 @@ impl ::protobuf::reflect::ProtobufValue for ResponseEndBlock {
 pub struct ResponseCommit {
     // message fields
     pub data: ::std::vec::Vec<u8>,
+    pub retain_height: i64,
     // special fields
     pub unknown_fields: ::protobuf::UnknownFields,
     pub cached_size: ::protobuf::CachedSize,
@@ -7465,6 +7467,21 @@ impl ResponseCommit {
     pub fn take_data(&mut self) -> ::std::vec::Vec<u8> {
         ::std::mem::replace(&mut self.data, ::std::vec::Vec::new())
     }
+
+    // int64 retain_height = 3;
+
+
+    pub fn get_retain_height(&self) -> i64 {
+        self.retain_height
+    }
+    pub fn clear_retain_height(&mut self) {
+        self.retain_height = 0;
+    }
+
+    // Param is passed by value, moved
+    pub fn set_retain_height(&mut self, v: i64) {
+        self.retain_height = v;
+    }
 }
 
 impl ::protobuf::Message for ResponseCommit {
@@ -7479,6 +7496,13 @@ impl ::protobuf::Message for ResponseCommit {
                 2 => {
                     ::protobuf::rt::read_singular_proto3_bytes_into(wire_type, is, &mut self.data)?;
                 },
+                3 => {
+                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
+                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type));
+                    }
+                    let tmp = is.read_int64()?;
+                    self.retain_height = tmp;
+                },
                 _ => {
                     ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?;
                 },
@@ -7494,6 +7518,9 @@ impl ::protobuf::Message for ResponseCommit {
         if !self.data.is_empty() {
             my_size += ::protobuf::rt::bytes_size(2, &self.data);
         }
+        if self.retain_height != 0 {
+            my_size += ::protobuf::rt::value_size(3, self.retain_height, ::protobuf::wire_format::WireTypeVarint);
+        }
         my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
         self.cached_size.set(my_size);
         my_size
@@ -7503,6 +7530,9 @@ impl ::protobuf::Message for ResponseCommit {
         if !self.data.is_empty() {
             os.write_bytes(2, &self.data)?;
         }
+        if self.retain_height != 0 {
+            os.write_int64(3, self.retain_height)?;
+        }
         os.write_unknown_fields(self.get_unknown_fields())?;
         ::std::result::Result::Ok(())
     }
@@ -7525,7 +7555,7 @@ impl ::protobuf::Message for ResponseCommit {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -7547,7 +7577,12 @@ impl ::protobuf::Message for ResponseCommit {
                     |m: &ResponseCommit| { &m.data },
                     |m: &mut ResponseCommit| { &mut m.data },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<ResponseCommit>(
+                fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeInt64>(
+                    "retain_height",
+                    |m: &ResponseCommit| { &m.retain_height },
+                    |m: &mut ResponseCommit| { &mut m.retain_height },
+                ));
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ResponseCommit>(
                     "ResponseCommit",
                     fields,
                     file_descriptor_proto()
@@ -7567,6 +7602,7 @@ impl ::protobuf::Message for ResponseCommit {
 impl ::protobuf::Clear for ResponseCommit {
     fn clear(&mut self) {
         self.data.clear();
+        self.retain_height = 0;
         self.unknown_fields.clear();
     }
 }
@@ -7805,7 +7841,7 @@ impl ::protobuf::Message for ConsensusParams {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -7837,7 +7873,7 @@ impl ::protobuf::Message for ConsensusParams {
                     |m: &ConsensusParams| { &m.validator },
                     |m: &mut ConsensusParams| { &mut m.validator },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<ConsensusParams>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ConsensusParams>(
                     "ConsensusParams",
                     fields,
                     file_descriptor_proto()
@@ -8002,7 +8038,7 @@ impl ::protobuf::Message for BlockParams {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -8029,7 +8065,7 @@ impl ::protobuf::Message for BlockParams {
                     |m: &BlockParams| { &m.max_gas },
                     |m: &mut BlockParams| { &mut m.max_gas },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<BlockParams>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<BlockParams>(
                     "BlockParams",
                     fields,
                     file_descriptor_proto()
@@ -8215,7 +8251,7 @@ impl ::protobuf::Message for EvidenceParams {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -8242,7 +8278,7 @@ impl ::protobuf::Message for EvidenceParams {
                     |m: &EvidenceParams| { &m.max_age_duration },
                     |m: &mut EvidenceParams| { &mut m.max_age_duration },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<EvidenceParams>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<EvidenceParams>(
                     "EvidenceParams",
                     fields,
                     file_descriptor_proto()
@@ -8383,7 +8419,7 @@ impl ::protobuf::Message for ValidatorParams {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -8405,7 +8441,7 @@ impl ::protobuf::Message for ValidatorParams {
                     |m: &ValidatorParams| { &m.pub_key_types },
                     |m: &mut ValidatorParams| { &mut m.pub_key_types },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<ValidatorParams>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ValidatorParams>(
                     "ValidatorParams",
                     fields,
                     file_descriptor_proto()
@@ -8582,7 +8618,7 @@ impl ::protobuf::Message for LastCommitInfo {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -8609,7 +8645,7 @@ impl ::protobuf::Message for LastCommitInfo {
                     |m: &LastCommitInfo| { &m.votes },
                     |m: &mut LastCommitInfo| { &mut m.votes },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<LastCommitInfo>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<LastCommitInfo>(
                     "LastCommitInfo",
                     fields,
                     file_descriptor_proto()
@@ -8794,7 +8830,7 @@ impl ::protobuf::Message for Event {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -8821,7 +8857,7 @@ impl ::protobuf::Message for Event {
                     |m: &Event| { &m.attributes },
                     |m: &mut Event| { &mut m.attributes },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<Event>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Event>(
                     "Event",
                     fields,
                     file_descriptor_proto()
@@ -9469,7 +9505,7 @@ impl ::protobuf::Message for Header {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -9556,7 +9592,7 @@ impl ::protobuf::Message for Header {
                     |m: &Header| { &m.proposer_address },
                     |m: &mut Header| { &mut m.proposer_address },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<Header>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Header>(
                     "Header",
                     fields,
                     file_descriptor_proto()
@@ -9732,7 +9768,7 @@ impl ::protobuf::Message for Version {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -9759,7 +9795,7 @@ impl ::protobuf::Message for Version {
                     |m: &Version| { &m.App },
                     |m: &mut Version| { &mut m.App },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<Version>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Version>(
                     "Version",
                     fields,
                     file_descriptor_proto()
@@ -9952,7 +9988,7 @@ impl ::protobuf::Message for BlockID {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -9979,7 +10015,7 @@ impl ::protobuf::Message for BlockID {
                     |m: &BlockID| { &m.parts_header },
                     |m: &mut BlockID| { &mut m.parts_header },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<BlockID>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<BlockID>(
                     "BlockID",
                     fields,
                     file_descriptor_proto()
@@ -10150,7 +10186,7 @@ impl ::protobuf::Message for PartSetHeader {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -10177,7 +10213,7 @@ impl ::protobuf::Message for PartSetHeader {
                     |m: &PartSetHeader| { &m.hash },
                     |m: &mut PartSetHeader| { &mut m.hash },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<PartSetHeader>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<PartSetHeader>(
                     "PartSetHeader",
                     fields,
                     file_descriptor_proto()
@@ -10348,7 +10384,7 @@ impl ::protobuf::Message for Validator {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -10375,7 +10411,7 @@ impl ::protobuf::Message for Validator {
                     |m: &Validator| { &m.power },
                     |m: &mut Validator| { &mut m.power },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<Validator>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Validator>(
                     "Validator",
                     fields,
                     file_descriptor_proto()
@@ -10561,7 +10597,7 @@ impl ::protobuf::Message for ValidatorUpdate {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -10588,7 +10624,7 @@ impl ::protobuf::Message for ValidatorUpdate {
                     |m: &ValidatorUpdate| { &m.power },
                     |m: &mut ValidatorUpdate| { &mut m.power },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<ValidatorUpdate>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ValidatorUpdate>(
                     "ValidatorUpdate",
                     fields,
                     file_descriptor_proto()
@@ -10774,7 +10810,7 @@ impl ::protobuf::Message for VoteInfo {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -10801,7 +10837,7 @@ impl ::protobuf::Message for VoteInfo {
                     |m: &VoteInfo| { &m.signed_last_block },
                     |m: &mut VoteInfo| { &mut m.signed_last_block },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<VoteInfo>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<VoteInfo>(
                     "VoteInfo",
                     fields,
                     file_descriptor_proto()
@@ -10979,7 +11015,7 @@ impl ::protobuf::Message for PubKey {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -11006,7 +11042,7 @@ impl ::protobuf::Message for PubKey {
                     |m: &PubKey| { &m.data },
                     |m: &mut PubKey| { &mut m.data },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<PubKey>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<PubKey>(
                     "PubKey",
                     fields,
                     file_descriptor_proto()
@@ -11308,7 +11344,7 @@ impl ::protobuf::Message for Evidence {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -11350,7 +11386,7 @@ impl ::protobuf::Message for Evidence {
                     |m: &Evidence| { &m.total_voting_power },
                     |m: &mut Evidence| { &mut m.total_voting_power },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<Evidence>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Evidence>(
                     "Evidence",
                     fields,
                     file_descriptor_proto()
@@ -11421,7 +11457,7 @@ impl ::protobuf::ProtobufEnum for CheckTxType {
         static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> = ::protobuf::lazy::Lazy::INIT;
         unsafe {
             descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new("CheckTxType", file_descriptor_proto())
+                ::protobuf::reflect::EnumDescriptor::new_pb_name::<CheckTxType>("CheckTxType", file_descriptor_proto())
             })
         }
     }
@@ -11514,7 +11550,7 @@ static file_descriptor_proto_data: &'static [u8] = b"\
     2\x1f.tendermint.crypto.merkle.ProofB\0\x12\x10\n\x06height\x18\t\x20\
     \x01(\x03B\0\x12\x13\n\tcodespace\x18\n\x20\x01(\tB\0:\0\"^\n\x12Respons\
     eBeginBlock\x12F\n\x06events\x18\x01\x20\x03(\x0b2\x1c.tendermint.abci.t\
-    ypes.EventB\x18\xea\xde\x1f\x10events,omitempty\xc8\xde\x1f\0:\0\"\xd9\
+    ypes.EventB\x18\xc8\xde\x1f\0\xea\xde\x1f\x10events,omitempty:\0\"\xd9\
     \x01\n\x0fResponseCheckTx\x12\x0e\n\x04code\x18\x01\x20\x01(\rB\0\x12\
     \x0e\n\x04data\x18\x02\x20\x01(\x0cB\0\x12\r\n\x03log\x18\x03\x20\x01(\t\
     B\0\x12\x0e\n\x04info\x18\x04\x20\x01(\tB\0\x12\x14\n\ngas_wanted\x18\
@@ -11526,61 +11562,62 @@ static file_descriptor_proto_data: &'static [u8] = b"\
     \x03log\x18\x03\x20\x01(\tB\0\x12\x0e\n\x04info\x18\x04\x20\x01(\tB\0\
     \x12\x14\n\ngas_wanted\x18\x05\x20\x01(\x03B\0\x12\x12\n\x08gas_used\x18\
     \x06\x20\x01(\x03B\0\x12F\n\x06events\x18\x07\x20\x03(\x0b2\x1c.tendermi\
-    nt.abci.types.EventB\x18\xc8\xde\x1f\0\xea\xde\x1f\x10events,omitempty\
+    nt.abci.types.EventB\x18\xea\xde\x1f\x10events,omitempty\xc8\xde\x1f\0\
     \x12\x13\n\tcodespace\x18\x08\x20\x01(\tB\0:\0\"\xf0\x01\n\x10ResponseEn\
     dBlock\x12G\n\x11validator_updates\x18\x01\x20\x03(\x0b2&.tendermint.abc\
     i.types.ValidatorUpdateB\x04\xc8\xde\x1f\0\x12I\n\x17consensus_param_upd\
     ates\x18\x02\x20\x01(\x0b2&.tendermint.abci.types.ConsensusParamsB\0\x12\
     F\n\x06events\x18\x03\x20\x03(\x0b2\x1c.tendermint.abci.types.EventB\x18\
-    \xc8\xde\x1f\0\xea\xde\x1f\x10events,omitempty:\0\"\"\n\x0eResponseCommi\
-    t\x12\x0e\n\x04data\x18\x02\x20\x01(\x0cB\0:\0\"\xc0\x01\n\x0fConsensusP\
-    arams\x123\n\x05block\x18\x01\x20\x01(\x0b2\".tendermint.abci.types.Bloc\
-    kParamsB\0\x129\n\x08evidence\x18\x02\x20\x01(\x0b2%.tendermint.abci.typ\
-    es.EvidenceParamsB\0\x12;\n\tvalidator\x18\x03\x20\x01(\x0b2&.tendermint\
-    .abci.types.ValidatorParamsB\0:\0\"7\n\x0bBlockParams\x12\x13\n\tmax_byt\
-    es\x18\x01\x20\x01(\x03B\0\x12\x11\n\x07max_gas\x18\x02\x20\x01(\x03B\0:\
-    \0\"o\n\x0eEvidenceParams\x12\x1c\n\x12max_age_num_blocks\x18\x01\x20\
-    \x01(\x03B\0\x12=\n\x10max_age_duration\x18\x02\x20\x01(\x0b2\x19.google\
-    .protobuf.DurationB\x08\xc8\xde\x1f\0\x98\xdf\x1f\x01:\0\",\n\x0fValidat\
-    orParams\x12\x17\n\rpub_key_types\x18\x01\x20\x03(\tB\0:\0\"Y\n\x0eLastC\
-    ommitInfo\x12\x0f\n\x05round\x18\x01\x20\x01(\x05B\0\x124\n\x05votes\x18\
-    \x02\x20\x03(\x0b2\x1f.tendermint.abci.types.VoteInfoB\x04\xc8\xde\x1f\0\
-    :\0\"e\n\x05Event\x12\x0e\n\x04type\x18\x01\x20\x01(\tB\0\x12J\n\nattrib\
-    utes\x18\x02\x20\x03(\x0b2\x18.tendermint.libs.kv.PairB\x1c\xc8\xde\x1f\
-    \0\xea\xde\x1f\x14attributes,omitempty:\0\"\xcf\x03\n\x06Header\x125\n\
-    \x07version\x18\x01\x20\x01(\x0b2\x1e.tendermint.abci.types.VersionB\x04\
-    \xc8\xde\x1f\0\x12\x1d\n\x08chain_id\x18\x02\x20\x01(\tB\x0b\xe2\xde\x1f\
-    \x07ChainID\x12\x10\n\x06height\x18\x03\x20\x01(\x03B\0\x122\n\x04time\
-    \x18\x04\x20\x01(\x0b2\x1a.google.protobuf.TimestampB\x08\x90\xdf\x1f\
-    \x01\xc8\xde\x1f\0\x12;\n\rlast_block_id\x18\x05\x20\x01(\x0b2\x1e.tende\
-    rmint.abci.types.BlockIDB\x04\xc8\xde\x1f\0\x12\x1a\n\x10last_commit_has\
-    h\x18\x06\x20\x01(\x0cB\0\x12\x13\n\tdata_hash\x18\x07\x20\x01(\x0cB\0\
-    \x12\x19\n\x0fvalidators_hash\x18\x08\x20\x01(\x0cB\0\x12\x1e\n\x14next_\
-    validators_hash\x18\t\x20\x01(\x0cB\0\x12\x18\n\x0econsensus_hash\x18\n\
-    \x20\x01(\x0cB\0\x12\x12\n\x08app_hash\x18\x0b\x20\x01(\x0cB\0\x12\x1b\n\
-    \x11last_results_hash\x18\x0c\x20\x01(\x0cB\0\x12\x17\n\revidence_hash\
-    \x18\r\x20\x01(\x0cB\0\x12\x1a\n\x10proposer_address\x18\x0e\x20\x01(\
-    \x0cB\0:\0\"+\n\x07Version\x12\x0f\n\x05Block\x18\x01\x20\x01(\x04B\0\
-    \x12\r\n\x03App\x18\x02\x20\x01(\x04B\0:\0\"]\n\x07BlockID\x12\x0e\n\x04\
-    hash\x18\x01\x20\x01(\x0cB\0\x12@\n\x0cparts_header\x18\x02\x20\x01(\x0b\
-    2$.tendermint.abci.types.PartSetHeaderB\x04\xc8\xde\x1f\0:\0\"2\n\rPartS\
-    etHeader\x12\x0f\n\x05total\x18\x01\x20\x01(\x05B\0\x12\x0e\n\x04hash\
-    \x18\x02\x20\x01(\x0cB\0:\0\"1\n\tValidator\x12\x11\n\x07address\x18\x01\
-    \x20\x01(\x0cB\0\x12\x0f\n\x05power\x18\x03\x20\x01(\x03B\0:\0\"Z\n\x0fV\
-    alidatorUpdate\x124\n\x07pub_key\x18\x01\x20\x01(\x0b2\x1d.tendermint.ab\
-    ci.types.PubKeyB\x04\xc8\xde\x1f\0\x12\x0f\n\x05power\x18\x02\x20\x01(\
-    \x03B\0:\0\"d\n\x08VoteInfo\x129\n\tvalidator\x18\x01\x20\x01(\x0b2\x20.\
-    tendermint.abci.types.ValidatorB\x04\xc8\xde\x1f\0\x12\x1b\n\x11signed_l\
-    ast_block\x18\x02\x20\x01(\x08B\0:\0\"*\n\x06PubKey\x12\x0e\n\x04type\
-    \x18\x01\x20\x01(\tB\0\x12\x0e\n\x04data\x18\x02\x20\x01(\x0cB\0:\0\"\
-    \xbb\x01\n\x08Evidence\x12\x0e\n\x04type\x18\x01\x20\x01(\tB\0\x129\n\tv\
-    alidator\x18\x02\x20\x01(\x0b2\x20.tendermint.abci.types.ValidatorB\x04\
-    \xc8\xde\x1f\0\x12\x10\n\x06height\x18\x03\x20\x01(\x03B\0\x122\n\x04tim\
-    e\x18\x04\x20\x01(\x0b2\x1a.google.protobuf.TimestampB\x08\xc8\xde\x1f\0\
-    \x90\xdf\x1f\x01\x12\x1c\n\x12total_voting_power\x18\x05\x20\x01(\x03B\0\
-    :\0*%\n\x0bCheckTxType\x12\x07\n\x03New\x10\0\x12\x0b\n\x07Recheck\x10\
-    \x01\x1a\0B\x1c\xf8\xe1\x1e\x01\xd0\xe2\x1e\x01\xe0\xe2\x1e\x01\xa8\xe2\
-    \x1e\x01\xb8\xe2\x1e\x01\xc0\xe3\x1e\x01\xc8\xe2\x1e\x01b\x06proto3\
+    \xea\xde\x1f\x10events,omitempty\xc8\xde\x1f\0:\0\";\n\x0eResponseCommit\
+    \x12\x0e\n\x04data\x18\x02\x20\x01(\x0cB\0\x12\x17\n\rretain_height\x18\
+    \x03\x20\x01(\x03B\0:\0\"\xc0\x01\n\x0fConsensusParams\x123\n\x05block\
+    \x18\x01\x20\x01(\x0b2\".tendermint.abci.types.BlockParamsB\0\x129\n\x08\
+    evidence\x18\x02\x20\x01(\x0b2%.tendermint.abci.types.EvidenceParamsB\0\
+    \x12;\n\tvalidator\x18\x03\x20\x01(\x0b2&.tendermint.abci.types.Validato\
+    rParamsB\0:\0\"7\n\x0bBlockParams\x12\x13\n\tmax_bytes\x18\x01\x20\x01(\
+    \x03B\0\x12\x11\n\x07max_gas\x18\x02\x20\x01(\x03B\0:\0\"o\n\x0eEvidence\
+    Params\x12\x1c\n\x12max_age_num_blocks\x18\x01\x20\x01(\x03B\0\x12=\n\
+    \x10max_age_duration\x18\x02\x20\x01(\x0b2\x19.google.protobuf.DurationB\
+    \x08\x98\xdf\x1f\x01\xc8\xde\x1f\0:\0\",\n\x0fValidatorParams\x12\x17\n\
+    \rpub_key_types\x18\x01\x20\x03(\tB\0:\0\"Y\n\x0eLastCommitInfo\x12\x0f\
+    \n\x05round\x18\x01\x20\x01(\x05B\0\x124\n\x05votes\x18\x02\x20\x03(\x0b\
+    2\x1f.tendermint.abci.types.VoteInfoB\x04\xc8\xde\x1f\0:\0\"e\n\x05Event\
+    \x12\x0e\n\x04type\x18\x01\x20\x01(\tB\0\x12J\n\nattributes\x18\x02\x20\
+    \x03(\x0b2\x18.tendermint.libs.kv.PairB\x1c\xc8\xde\x1f\0\xea\xde\x1f\
+    \x14attributes,omitempty:\0\"\xcf\x03\n\x06Header\x125\n\x07version\x18\
+    \x01\x20\x01(\x0b2\x1e.tendermint.abci.types.VersionB\x04\xc8\xde\x1f\0\
+    \x12\x1d\n\x08chain_id\x18\x02\x20\x01(\tB\x0b\xe2\xde\x1f\x07ChainID\
+    \x12\x10\n\x06height\x18\x03\x20\x01(\x03B\0\x122\n\x04time\x18\x04\x20\
+    \x01(\x0b2\x1a.google.protobuf.TimestampB\x08\x90\xdf\x1f\x01\xc8\xde\
+    \x1f\0\x12;\n\rlast_block_id\x18\x05\x20\x01(\x0b2\x1e.tendermint.abci.t\
+    ypes.BlockIDB\x04\xc8\xde\x1f\0\x12\x1a\n\x10last_commit_hash\x18\x06\
+    \x20\x01(\x0cB\0\x12\x13\n\tdata_hash\x18\x07\x20\x01(\x0cB\0\x12\x19\n\
+    \x0fvalidators_hash\x18\x08\x20\x01(\x0cB\0\x12\x1e\n\x14next_validators\
+    _hash\x18\t\x20\x01(\x0cB\0\x12\x18\n\x0econsensus_hash\x18\n\x20\x01(\
+    \x0cB\0\x12\x12\n\x08app_hash\x18\x0b\x20\x01(\x0cB\0\x12\x1b\n\x11last_\
+    results_hash\x18\x0c\x20\x01(\x0cB\0\x12\x17\n\revidence_hash\x18\r\x20\
+    \x01(\x0cB\0\x12\x1a\n\x10proposer_address\x18\x0e\x20\x01(\x0cB\0:\0\"+\
+    \n\x07Version\x12\x0f\n\x05Block\x18\x01\x20\x01(\x04B\0\x12\r\n\x03App\
+    \x18\x02\x20\x01(\x04B\0:\0\"]\n\x07BlockID\x12\x0e\n\x04hash\x18\x01\
+    \x20\x01(\x0cB\0\x12@\n\x0cparts_header\x18\x02\x20\x01(\x0b2$.tendermin\
+    t.abci.types.PartSetHeaderB\x04\xc8\xde\x1f\0:\0\"2\n\rPartSetHeader\x12\
+    \x0f\n\x05total\x18\x01\x20\x01(\x05B\0\x12\x0e\n\x04hash\x18\x02\x20\
+    \x01(\x0cB\0:\0\"1\n\tValidator\x12\x11\n\x07address\x18\x01\x20\x01(\
+    \x0cB\0\x12\x0f\n\x05power\x18\x03\x20\x01(\x03B\0:\0\"Z\n\x0fValidatorU\
+    pdate\x124\n\x07pub_key\x18\x01\x20\x01(\x0b2\x1d.tendermint.abci.types.\
+    PubKeyB\x04\xc8\xde\x1f\0\x12\x0f\n\x05power\x18\x02\x20\x01(\x03B\0:\0\
+    \"d\n\x08VoteInfo\x129\n\tvalidator\x18\x01\x20\x01(\x0b2\x20.tendermint\
+    .abci.types.ValidatorB\x04\xc8\xde\x1f\0\x12\x1b\n\x11signed_last_block\
+    \x18\x02\x20\x01(\x08B\0:\0\"*\n\x06PubKey\x12\x0e\n\x04type\x18\x01\x20\
+    \x01(\tB\0\x12\x0e\n\x04data\x18\x02\x20\x01(\x0cB\0:\0\"\xbb\x01\n\x08E\
+    vidence\x12\x0e\n\x04type\x18\x01\x20\x01(\tB\0\x129\n\tvalidator\x18\
+    \x02\x20\x01(\x0b2\x20.tendermint.abci.types.ValidatorB\x04\xc8\xde\x1f\
+    \0\x12\x10\n\x06height\x18\x03\x20\x01(\x03B\0\x122\n\x04time\x18\x04\
+    \x20\x01(\x0b2\x1a.google.protobuf.TimestampB\x08\xc8\xde\x1f\0\x90\xdf\
+    \x1f\x01\x12\x1c\n\x12total_voting_power\x18\x05\x20\x01(\x03B\0:\0*%\n\
+    \x0bCheckTxType\x12\x07\n\x03New\x10\0\x12\x0b\n\x07Recheck\x10\x01\x1a\
+    \0B\x1c\xd0\xe2\x1e\x01\xb8\xe2\x1e\x01\xc0\xe3\x1e\x01\xe0\xe2\x1e\x01\
+    \xc8\xe2\x1e\x01\xf8\xe1\x1e\x01\xa8\xe2\x1e\x01b\x06proto3\
 ";
 
 static mut file_descriptor_proto_lazy: ::protobuf::lazy::Lazy<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::lazy::Lazy::INIT;
diff --git a/src/messages/merkle.rs b/src/messages/merkle.rs
index 393d445..22d7b3e 100644
--- a/src/messages/merkle.rs
+++ b/src/messages/merkle.rs
@@ -1,11 +1,12 @@
-// This file is generated by rust-protobuf 2.11.0. Do not edit
+// This file is generated by rust-protobuf 2.15.1. Do not edit
 // @generated
 
 // https://github.com/rust-lang/rust-clippy/issues/702
 #![allow(unknown_lints)]
 #![allow(clippy::all)]
 
-#![cfg_attr(rustfmt, rustfmt_skip)]
+#![allow(unused_attributes)]
+#![rustfmt::skip]
 
 #![allow(box_pointers)]
 #![allow(dead_code)]
@@ -24,7 +25,7 @@ use protobuf::ProtobufEnum as ProtobufEnum_imported_for_functions;
 
 /// Generated files are compatible only with the same version
 /// of protobuf runtime.
-// const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_11_0;
+// const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_15_1;
 
 #[derive(PartialEq,Clone,Default)]
 pub struct ProofOp {
@@ -203,7 +204,7 @@ impl ::protobuf::Message for ProofOp {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -235,7 +236,7 @@ impl ::protobuf::Message for ProofOp {
                     |m: &ProofOp| { &m.data },
                     |m: &mut ProofOp| { &mut m.data },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<ProofOp>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ProofOp>(
                     "ProofOp",
                     fields,
                     file_descriptor_proto()
@@ -385,7 +386,7 @@ impl ::protobuf::Message for Proof {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -407,7 +408,7 @@ impl ::protobuf::Message for Proof {
                     |m: &Proof| { &m.ops },
                     |m: &mut Proof| { &mut m.ops },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<Proof>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Proof>(
                     "Proof",
                     fields,
                     file_descriptor_proto()
@@ -448,8 +449,8 @@ static file_descriptor_proto_data: &'static [u8] = b"\
     \x07ProofOp\x12\x0e\n\x04type\x18\x01\x20\x01(\tB\0\x12\r\n\x03key\x18\
     \x02\x20\x01(\x0cB\0\x12\x0e\n\x04data\x18\x03\x20\x01(\x0cB\0:\0\"?\n\
     \x05Proof\x124\n\x03ops\x18\x01\x20\x03(\x0b2!.tendermint.crypto.merkle.\
-    ProofOpB\x04\xc8\xde\x1f\0:\0B\x14\xf8\xe1\x1e\x01\xe0\xe2\x1e\x01\xc8\
-    \xe2\x1e\x01\xa8\xe2\x1e\x01\xd0\xe2\x1e\x01b\x06proto3\
+    ProofOpB\x04\xc8\xde\x1f\0:\0B\x14\xd0\xe2\x1e\x01\xf8\xe1\x1e\x01\xa8\
+    \xe2\x1e\x01\xc8\xe2\x1e\x01\xe0\xe2\x1e\x01b\x06proto3\
 ";
 
 static mut file_descriptor_proto_lazy: ::protobuf::lazy::Lazy<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::lazy::Lazy::INIT;
diff --git a/src/messages/types.rs b/src/messages/types.rs
index bbe5326..4357f46 100644
--- a/src/messages/types.rs
+++ b/src/messages/types.rs
@@ -1,11 +1,12 @@
-// This file is generated by rust-protobuf 2.11.0. Do not edit
+// This file is generated by rust-protobuf 2.15.1. Do not edit
 // @generated
 
 // https://github.com/rust-lang/rust-clippy/issues/702
 #![allow(unknown_lints)]
 #![allow(clippy::all)]
 
-#![cfg_attr(rustfmt, rustfmt_skip)]
+#![allow(unused_attributes)]
+#![rustfmt::skip]
 
 #![allow(box_pointers)]
 #![allow(dead_code)]
@@ -24,7 +25,7 @@ use protobuf::ProtobufEnum as ProtobufEnum_imported_for_functions;
 
 /// Generated files are compatible only with the same version
 /// of protobuf runtime.
-// const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_11_0;
+// const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_15_1;
 
 #[derive(PartialEq,Clone,Default)]
 pub struct Pair {
@@ -167,7 +168,7 @@ impl ::protobuf::Message for Pair {
     fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
         self as &mut dyn (::std::any::Any)
     }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
+    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
         self
     }
 
@@ -194,7 +195,7 @@ impl ::protobuf::Message for Pair {
                     |m: &Pair| { &m.value },
                     |m: &mut Pair| { &mut m.value },
                 ));
-                ::protobuf::reflect::MessageDescriptor::new::<Pair>(
+                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Pair>(
                     "Pair",
                     fields,
                     file_descriptor_proto()
@@ -231,211 +232,11 @@ impl ::protobuf::reflect::ProtobufValue for Pair {
     }
 }
 
-#[derive(PartialEq,Clone,Default)]
-pub struct KI64Pair {
-    // message fields
-    pub key: ::std::vec::Vec<u8>,
-    pub value: i64,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a KI64Pair {
-    fn default() -> &'a KI64Pair {
-        <KI64Pair as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl KI64Pair {
-    pub fn new() -> KI64Pair {
-        ::std::default::Default::default()
-    }
-
-    // bytes key = 1;
-
-
-    pub fn get_key(&self) -> &[u8] {
-        &self.key
-    }
-    pub fn clear_key(&mut self) {
-        self.key.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_key(&mut self, v: ::std::vec::Vec<u8>) {
-        self.key = v;
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_key(&mut self) -> &mut ::std::vec::Vec<u8> {
-        &mut self.key
-    }
-
-    // Take field
-    pub fn take_key(&mut self) -> ::std::vec::Vec<u8> {
-        ::std::mem::replace(&mut self.key, ::std::vec::Vec::new())
-    }
-
-    // int64 value = 2;
-
-
-    pub fn get_value(&self) -> i64 {
-        self.value
-    }
-    pub fn clear_value(&mut self) {
-        self.value = 0;
-    }
-
-    // Param is passed by value, moved
-    pub fn set_value(&mut self, v: i64) {
-        self.value = v;
-    }
-}
-
-impl ::protobuf::Message for KI64Pair {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_proto3_bytes_into(wire_type, is, &mut self.key)?;
-                },
-                2 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type));
-                    }
-                    let tmp = is.read_int64()?;
-                    self.value = tmp;
-                },
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?;
-                },
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if !self.key.is_empty() {
-            my_size += ::protobuf::rt::bytes_size(1, &self.key);
-        }
-        if self.value != 0 {
-            my_size += ::protobuf::rt::value_size(2, self.value, ::protobuf::wire_format::WireTypeVarint);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> {
-        if !self.key.is_empty() {
-            os.write_bytes(1, &self.key)?;
-        }
-        if self.value != 0 {
-            os.write_int64(2, self.value)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> KI64Pair {
-        KI64Pair::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>(
-                    "key",
-                    |m: &KI64Pair| { &m.key },
-                    |m: &mut KI64Pair| { &mut m.key },
-                ));
-                fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeInt64>(
-                    "value",
-                    |m: &KI64Pair| { &m.value },
-                    |m: &mut KI64Pair| { &mut m.value },
-                ));
-                ::protobuf::reflect::MessageDescriptor::new::<KI64Pair>(
-                    "KI64Pair",
-                    fields,
-                    file_descriptor_proto()
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static KI64Pair {
-        static mut instance: ::protobuf::lazy::Lazy<KI64Pair> = ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            instance.get(KI64Pair::new)
-        }
-    }
-}
-
-impl ::protobuf::Clear for KI64Pair {
-    fn clear(&mut self) {
-        self.key.clear();
-        self.value = 0;
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for KI64Pair {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for KI64Pair {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
 static file_descriptor_proto_data: &'static [u8] = b"\
     \n\x13libs/kv/types.proto\x12\x12tendermint.libs.kv\"(\n\x04Pair\x12\r\n\
     \x03key\x18\x01\x20\x01(\x0cB\0\x12\x0f\n\x05value\x18\x02\x20\x01(\x0cB\
-    \0:\0\",\n\x08KI64Pair\x12\r\n\x03key\x18\x01\x20\x01(\x0cB\0\x12\x0f\n\
-    \x05value\x18\x02\x20\x01(\x03B\0:\0B\x1c\xd0\xe2\x1e\x01\xb8\xe2\x1e\
-    \x01\xc0\xe3\x1e\x01\xc8\xe2\x1e\x01\xe0\xe2\x1e\x01\xa8\xe2\x1e\x01\xf8\
-    \xe1\x1e\x01b\x06proto3\
+    \0:\0B\x1c\xb8\xe2\x1e\x01\xd0\xe2\x1e\x01\xe0\xe2\x1e\x01\xf8\xe1\x1e\
+    \x01\xa8\xe2\x1e\x01\xc0\xe3\x1e\x01\xc8\xe2\x1e\x01b\x06proto3\
 ";
 
 static mut file_descriptor_proto_lazy: ::protobuf::lazy::Lazy<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::lazy::Lazy::INIT;
diff --git a/src/server.rs b/src/server.rs
index 6ea6453..56e3b5f 100644
--- a/src/server.rs
+++ b/src/server.rs
@@ -3,7 +3,6 @@ use std::ops::DerefMut;
 use std::sync::{Arc, Mutex};
 
 use env_logger::Env;
-use tokio;
 use tokio::codec::Decoder;
 use tokio::io;
 use tokio::net::TcpListener;
@@ -42,7 +41,7 @@ where
                 debug!("Return Response! {:?}", response);
                 writer.send(response)
             });
-            tokio::spawn(writes.then(|_| Ok(())))
+            tokio::spawn(writes.then(|x| x.map_err(|_| ()).map(|_| ())))
         });
 
     let mut rt = runtime::Builder::new()
diff --git a/version.txt b/version.txt
index 09ebf5d..d4d5b13 100644
--- a/version.txt
+++ b/version.txt
@@ -1,6 +1,6 @@
 	Version = TMCoreSemVer
 	// TMCoreSemVer is the current version of Tendermint Core.
-	TMCoreSemVer = "0.33.1"
+	TMCoreSemVer = "0.33.5"
 	// ABCISemVer is the semantic version of the ABCI library
-	ABCISemVer  = "0.16.1"
+	ABCISemVer  = "0.16.2"
 	ABCIVersion = ABCISemVer


Test patch: