-
Notifications
You must be signed in to change notification settings - Fork 224
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add domain types (updated) and fix integration tests for Tendermint v0.35.0 #1022
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
The BlockParams and ConsensusParams structs moved out of the ABCI protos.
This fixes a compile error introduced by upstream proto changes that add an Sr25519 variant.
The previous data modeling allowed a user to construct an `Err(0)` value that would be serialized and deserialized as `Ok`.
This changes the Serialize/Deserialize implementations for Block to convert to/from the proto-generated `RawBlock`, and use the derived serialization for that type. This is much cleaner and more maintainable than keeping Serde annotations for each sub-member of the data structure, because all of the serialization code is kept in one place, and there's only one validation path (the TryFrom conversion from RawBlock to Block) that applies to both kinds of serialization.
This changes the Block type to hold the transactions as a plain `Vec<Vec<u8>>`, rather than as a custom `abci::transaction::Data` type (which is itself a wrapper for an `Option<Vec<Transaction>>`, the `Transaction` type being a wrapper for a `Vec<u8>`). This also updates the `Block` getter functions; it's not clear (to me) why they're there, since they access the public fields and aren't used anywhere else.
The existing contents of the `tendermint::abci` module note that they're only for the purpose of implementing the RPC endpoints, not a general ABCI implementation. Moving that code from the `tendermint` crate to the `tendermint-rpc` crate decouples the RPC interface from improvements to the ABCI domain modeling. Eventually, it would be good to eliminate this code and align it with the new ABCI domain types.
These types mirror the generated types in tendermint_proto, but have better naming. The documentation for each request type is adapted from the ABCI Methods and Types spec document. However, the same logical request may appear three times, as a struct with the request data, as a Request variant, and as a CategoryRequest variant. To avoid duplication, this PR uses the `#[doc = include_str!(...)]` functionality stabilized in Rust 1.54 to keep common definitions of the documentation.
The code in the `abci` module had more complete documentation from the ABCI docs, so I copied it onto the existing structure.
Signed-off-by: Thane Thomson <connect@thanethomson.com>
Signed-off-by: Thane Thomson <connect@thanethomson.com>
Signed-off-by: Thane Thomson <connect@thanethomson.com>
Signed-off-by: Thane Thomson <connect@thanethomson.com>
Signed-off-by: Thane Thomson <connect@thanethomson.com>
Signed-off-by: Thane Thomson <connect@thanethomson.com>
Signed-off-by: Thane Thomson <connect@thanethomson.com>
Signed-off-by: Thane Thomson <connect@thanethomson.com>
Signed-off-by: Thane Thomson <connect@thanethomson.com>
Signed-off-by: Thane Thomson <connect@thanethomson.com>
Signed-off-by: Thane Thomson <connect@thanethomson.com>
Signed-off-by: Thane Thomson <connect@thanethomson.com>
Signed-off-by: Thane Thomson <connect@thanethomson.com>
Signed-off-by: Thane Thomson <connect@thanethomson.com>
Signed-off-by: Thane Thomson <connect@thanethomson.com>
Signed-off-by: Thane Thomson <connect@thanethomson.com>
…0 changes Signed-off-by: Thane Thomson <connect@thanethomson.com>
…int/tendermint#5783 Signed-off-by: Thane Thomson <connect@thanethomson.com>
Signed-off-by: Thane Thomson <connect@thanethomson.com>
Signed-off-by: Thane Thomson <connect@thanethomson.com>
Codecov Report
@@ Coverage Diff @@
## master #1022 +/- ##
========================================
- Coverage 66.0% 62.0% -4.1%
========================================
Files 209 237 +28
Lines 20760 21169 +409
========================================
- Hits 13717 13138 -579
- Misses 7043 8031 +988
Continue to review full report at Codecov.
|
Signed-off-by: Thane Thomson <connect@thanethomson.com>
Signed-off-by: Thane Thomson <connect@thanethomson.com>
thanethomson
changed the title
abci: Add domain types (updated)
Add domain types (updated) and fix integration tests for Tendermint v0.35.0
Nov 26, 2021
5 tasks
Signed-off-by: Thane Thomson <connect@thanethomson.com>
8 tasks
10 tasks
5 tasks
hdevalence
added a commit
to penumbra-zone/tendermint-rs
that referenced
this pull request
Aug 17, 2022
There are two issues to fix: * The original ABCI domain types work used `chrono`; this temporarily re-adds `chrono` as a dependency, so that the changes that eliminated it can be replayed on top of this rebasing. * The original ABCI domain types work was, for some reason, mixed in with changes to the RPC test harness for 0.35 compatibility, and that may break this code. I didn't attempt to fix this, because I didn't touch the RPC tests when writing the ABCI domain types. Original concatenation of commit messages follows: Add domain types (updated) and fix integration tests for Tendermint v0.35.0 (informalsystems#1022) * tendermint: add From<Infallible> for Error * Use hex for AppHash Debug formatting * Regenerate protobuf types using tools/proto-compiler. * Regenerate protos against tendermint v0.35.0-rc3. * Remove SetOption-related code in tendermint-abci. * Update imports to reflect protobuf movements. The BlockParams and ConsensusParams structs moved out of the ABCI protos. * Update tendermint-abci to reflect upstream proto changes. * p2p: treat all non-Ed25519 keys as unsupported This fixes a compile error introduced by upstream proto changes that add an Sr25519 variant. * Improve ABCI response code modeling with NonZeroU32 The previous data modeling allowed a user to construct an `Err(0)` value that would be serialized and deserialized as `Ok`. * Use the Bytes type in ABCI protos. * Add conversions between protobuf and chrono types. * tendermint: define Serde for Block in terms of RawBlock This changes the Serialize/Deserialize implementations for Block to convert to/from the proto-generated `RawBlock`, and use the derived serialization for that type. This is much cleaner and more maintainable than keeping Serde annotations for each sub-member of the data structure, because all of the serialization code is kept in one place, and there's only one validation path (the TryFrom conversion from RawBlock to Block) that applies to both kinds of serialization. * tendermint: simpler transaction modeling in Block This changes the Block type to hold the transactions as a plain `Vec<Vec<u8>>`, rather than as a custom `abci::transaction::Data` type (which is itself a wrapper for an `Option<Vec<Transaction>>`, the `Transaction` type being a wrapper for a `Vec<u8>`). This also updates the `Block` getter functions; it's not clear (to me) why they're there, since they access the public fields and aren't used anywhere else. * rpc: take over tendermint::abci The existing contents of the `tendermint::abci` module note that they're only for the purpose of implementing the RPC endpoints, not a general ABCI implementation. Moving that code from the `tendermint` crate to the `tendermint-rpc` crate decouples the RPC interface from improvements to the ABCI domain modeling. Eventually, it would be good to eliminate this code and align it with the new ABCI domain types. * tendermint: add ABCI domain types. These types mirror the generated types in tendermint_proto, but have better naming. The documentation for each request type is adapted from the ABCI Methods and Types spec document. However, the same logical request may appear three times, as a struct with the request data, as a Request variant, and as a CategoryRequest variant. To avoid duplication, this PR uses the `#[doc = include_str!(...)]` functionality stabilized in Rust 1.54 to keep common definitions of the documentation. * tendermint: eliminate &'static str errors in ABCI domain types. * Merge `abci::params::ConsensusParams` with `consensus::Params`. The code in the `abci` module had more complete documentation from the ABCI docs, so I copied it onto the existing structure. * Add hex encoding Serde attribute to Sr25519 keys. * Replace integers with `block::Height`, `vote::Power` * Replace integer with block::Round * Fix tools build by using correct imports Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix clippy complaints in tools Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix clippy warning Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix clippy lints Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix more clippy lints Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix deprecation notices from ed25519 crate Signed-off-by: Thane Thomson <connect@thanethomson.com> * Regenerate protos for Tendermint v0.35.0 Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix raw bytes conversion in tests/docs Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add Tendermint v0.35.0 Docker config Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add Tendermint v0.35.0 Docker image for ABCI integration testing Signed-off-by: Thane Thomson <connect@thanethomson.com> * Remove RPC deserialization tests The support files for these tests were manually generated some time ago. We should rather favour testing with the `kvstore_fixtures` tests, whose fixtures are automatically generated by our rpc-probe tool. Signed-off-by: Thane Thomson <connect@thanethomson.com> * Reformat Docker folder readme Signed-off-by: Thane Thomson <connect@thanethomson.com> * Bump version of Tendermint used in ABCI integration test Signed-off-by: Thane Thomson <connect@thanethomson.com> * Bump version of Tendermint used in rpc probe Signed-off-by: Thane Thomson <connect@thanethomson.com> * Bump version of Tendermint used in kvstore integration test Signed-off-by: Thane Thomson <connect@thanethomson.com> * Bump version of Tendermint used in proto-compiler Signed-off-by: Thane Thomson <connect@thanethomson.com> * Regenerate kvstore fixtures with rpc-probe for Tendermint v0.35.0 Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update kvstore integration test to accommodate newly generated fixtures Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update RPC tests and data structures to accommodate Tendermint v0.35.0 changes Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update ABCI encoding scheme to accommodate breaking change in tendermint/tendermint#5783 Signed-off-by: Thane Thomson <connect@thanethomson.com> * Bump Tendermint version in GitHub Actions kvstore integration test Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add changelog entries to capture breaking changes Signed-off-by: Thane Thomson <connect@thanethomson.com> * Change tx hash encoding from base64 to hex and update tests Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add changelog entry for /tx endpoint change Signed-off-by: Thane Thomson <connect@thanethomson.com> Co-authored-by: Henry de Valence <hdevalence@penumbra.zone> Co-authored-by: Henry de Valence <hdevalence@hdevalence.ca>
hdevalence
added a commit
to penumbra-zone/tendermint-rs
that referenced
this pull request
Aug 17, 2022
There are two issues to fix: * The original ABCI domain types work used `chrono`; this temporarily re-adds `chrono` as a dependency, so that the changes that eliminated it can be replayed on top of this rebasing. * The original ABCI domain types work was, for some reason, mixed in with changes to the RPC test harness for 0.35 compatibility, and that may break this code. I didn't attempt to fix this, because I didn't touch the RPC tests when writing the ABCI domain types. Original concatenation of commit messages follows: Add domain types (updated) and fix integration tests for Tendermint v0.35.0 (informalsystems#1022) * tendermint: add From<Infallible> for Error * Use hex for AppHash Debug formatting * Regenerate protobuf types using tools/proto-compiler. * Regenerate protos against tendermint v0.35.0-rc3. * Remove SetOption-related code in tendermint-abci. * Update imports to reflect protobuf movements. The BlockParams and ConsensusParams structs moved out of the ABCI protos. * Update tendermint-abci to reflect upstream proto changes. * p2p: treat all non-Ed25519 keys as unsupported This fixes a compile error introduced by upstream proto changes that add an Sr25519 variant. * Improve ABCI response code modeling with NonZeroU32 The previous data modeling allowed a user to construct an `Err(0)` value that would be serialized and deserialized as `Ok`. * Use the Bytes type in ABCI protos. * Add conversions between protobuf and chrono types. * tendermint: define Serde for Block in terms of RawBlock This changes the Serialize/Deserialize implementations for Block to convert to/from the proto-generated `RawBlock`, and use the derived serialization for that type. This is much cleaner and more maintainable than keeping Serde annotations for each sub-member of the data structure, because all of the serialization code is kept in one place, and there's only one validation path (the TryFrom conversion from RawBlock to Block) that applies to both kinds of serialization. * tendermint: simpler transaction modeling in Block This changes the Block type to hold the transactions as a plain `Vec<Vec<u8>>`, rather than as a custom `abci::transaction::Data` type (which is itself a wrapper for an `Option<Vec<Transaction>>`, the `Transaction` type being a wrapper for a `Vec<u8>`). This also updates the `Block` getter functions; it's not clear (to me) why they're there, since they access the public fields and aren't used anywhere else. * rpc: take over tendermint::abci The existing contents of the `tendermint::abci` module note that they're only for the purpose of implementing the RPC endpoints, not a general ABCI implementation. Moving that code from the `tendermint` crate to the `tendermint-rpc` crate decouples the RPC interface from improvements to the ABCI domain modeling. Eventually, it would be good to eliminate this code and align it with the new ABCI domain types. * tendermint: add ABCI domain types. These types mirror the generated types in tendermint_proto, but have better naming. The documentation for each request type is adapted from the ABCI Methods and Types spec document. However, the same logical request may appear three times, as a struct with the request data, as a Request variant, and as a CategoryRequest variant. To avoid duplication, this PR uses the `#[doc = include_str!(...)]` functionality stabilized in Rust 1.54 to keep common definitions of the documentation. * tendermint: eliminate &'static str errors in ABCI domain types. * Merge `abci::params::ConsensusParams` with `consensus::Params`. The code in the `abci` module had more complete documentation from the ABCI docs, so I copied it onto the existing structure. * Add hex encoding Serde attribute to Sr25519 keys. * Replace integers with `block::Height`, `vote::Power` * Replace integer with block::Round * Fix tools build by using correct imports Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix clippy complaints in tools Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix clippy warning Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix clippy lints Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix more clippy lints Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix deprecation notices from ed25519 crate Signed-off-by: Thane Thomson <connect@thanethomson.com> * Regenerate protos for Tendermint v0.35.0 Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix raw bytes conversion in tests/docs Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add Tendermint v0.35.0 Docker config Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add Tendermint v0.35.0 Docker image for ABCI integration testing Signed-off-by: Thane Thomson <connect@thanethomson.com> * Remove RPC deserialization tests The support files for these tests were manually generated some time ago. We should rather favour testing with the `kvstore_fixtures` tests, whose fixtures are automatically generated by our rpc-probe tool. Signed-off-by: Thane Thomson <connect@thanethomson.com> * Reformat Docker folder readme Signed-off-by: Thane Thomson <connect@thanethomson.com> * Bump version of Tendermint used in ABCI integration test Signed-off-by: Thane Thomson <connect@thanethomson.com> * Bump version of Tendermint used in rpc probe Signed-off-by: Thane Thomson <connect@thanethomson.com> * Bump version of Tendermint used in kvstore integration test Signed-off-by: Thane Thomson <connect@thanethomson.com> * Bump version of Tendermint used in proto-compiler Signed-off-by: Thane Thomson <connect@thanethomson.com> * Regenerate kvstore fixtures with rpc-probe for Tendermint v0.35.0 Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update kvstore integration test to accommodate newly generated fixtures Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update RPC tests and data structures to accommodate Tendermint v0.35.0 changes Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update ABCI encoding scheme to accommodate breaking change in tendermint/tendermint#5783 Signed-off-by: Thane Thomson <connect@thanethomson.com> * Bump Tendermint version in GitHub Actions kvstore integration test Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add changelog entries to capture breaking changes Signed-off-by: Thane Thomson <connect@thanethomson.com> * Change tx hash encoding from base64 to hex and update tests Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add changelog entry for /tx endpoint change Signed-off-by: Thane Thomson <connect@thanethomson.com> Co-authored-by: Henry de Valence <hdevalence@penumbra.zone> Co-authored-by: Henry de Valence <hdevalence@hdevalence.ca>
hdevalence
added a commit
to penumbra-zone/tendermint-rs
that referenced
this pull request
Aug 18, 2022
There are two issues to fix: * The original ABCI domain types work used `chrono`; this temporarily re-adds `chrono` as a dependency, so that the changes that eliminated it can be replayed on top of this rebasing. * The original ABCI domain types work was, for some reason, mixed in with changes to the RPC test harness for 0.35 compatibility, and that may break this code. I didn't attempt to fix this, because I didn't touch the RPC tests when writing the ABCI domain types. Original concatenation of commit messages follows: Add domain types (updated) and fix integration tests for Tendermint v0.35.0 (informalsystems#1022) * tendermint: add From<Infallible> for Error * Use hex for AppHash Debug formatting * Regenerate protobuf types using tools/proto-compiler. * Regenerate protos against tendermint v0.35.0-rc3. * Remove SetOption-related code in tendermint-abci. * Update imports to reflect protobuf movements. The BlockParams and ConsensusParams structs moved out of the ABCI protos. * Update tendermint-abci to reflect upstream proto changes. * p2p: treat all non-Ed25519 keys as unsupported This fixes a compile error introduced by upstream proto changes that add an Sr25519 variant. * Improve ABCI response code modeling with NonZeroU32 The previous data modeling allowed a user to construct an `Err(0)` value that would be serialized and deserialized as `Ok`. * Use the Bytes type in ABCI protos. * Add conversions between protobuf and chrono types. * tendermint: define Serde for Block in terms of RawBlock This changes the Serialize/Deserialize implementations for Block to convert to/from the proto-generated `RawBlock`, and use the derived serialization for that type. This is much cleaner and more maintainable than keeping Serde annotations for each sub-member of the data structure, because all of the serialization code is kept in one place, and there's only one validation path (the TryFrom conversion from RawBlock to Block) that applies to both kinds of serialization. * tendermint: simpler transaction modeling in Block This changes the Block type to hold the transactions as a plain `Vec<Vec<u8>>`, rather than as a custom `abci::transaction::Data` type (which is itself a wrapper for an `Option<Vec<Transaction>>`, the `Transaction` type being a wrapper for a `Vec<u8>`). This also updates the `Block` getter functions; it's not clear (to me) why they're there, since they access the public fields and aren't used anywhere else. * rpc: take over tendermint::abci The existing contents of the `tendermint::abci` module note that they're only for the purpose of implementing the RPC endpoints, not a general ABCI implementation. Moving that code from the `tendermint` crate to the `tendermint-rpc` crate decouples the RPC interface from improvements to the ABCI domain modeling. Eventually, it would be good to eliminate this code and align it with the new ABCI domain types. * tendermint: add ABCI domain types. These types mirror the generated types in tendermint_proto, but have better naming. The documentation for each request type is adapted from the ABCI Methods and Types spec document. However, the same logical request may appear three times, as a struct with the request data, as a Request variant, and as a CategoryRequest variant. To avoid duplication, this PR uses the `#[doc = include_str!(...)]` functionality stabilized in Rust 1.54 to keep common definitions of the documentation. * tendermint: eliminate &'static str errors in ABCI domain types. * Merge `abci::params::ConsensusParams` with `consensus::Params`. The code in the `abci` module had more complete documentation from the ABCI docs, so I copied it onto the existing structure. * Add hex encoding Serde attribute to Sr25519 keys. * Replace integers with `block::Height`, `vote::Power` * Replace integer with block::Round * Fix tools build by using correct imports Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix clippy complaints in tools Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix clippy warning Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix clippy lints Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix more clippy lints Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix deprecation notices from ed25519 crate Signed-off-by: Thane Thomson <connect@thanethomson.com> * Regenerate protos for Tendermint v0.35.0 Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix raw bytes conversion in tests/docs Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add Tendermint v0.35.0 Docker config Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add Tendermint v0.35.0 Docker image for ABCI integration testing Signed-off-by: Thane Thomson <connect@thanethomson.com> * Remove RPC deserialization tests The support files for these tests were manually generated some time ago. We should rather favour testing with the `kvstore_fixtures` tests, whose fixtures are automatically generated by our rpc-probe tool. Signed-off-by: Thane Thomson <connect@thanethomson.com> * Reformat Docker folder readme Signed-off-by: Thane Thomson <connect@thanethomson.com> * Bump version of Tendermint used in ABCI integration test Signed-off-by: Thane Thomson <connect@thanethomson.com> * Bump version of Tendermint used in rpc probe Signed-off-by: Thane Thomson <connect@thanethomson.com> * Bump version of Tendermint used in kvstore integration test Signed-off-by: Thane Thomson <connect@thanethomson.com> * Bump version of Tendermint used in proto-compiler Signed-off-by: Thane Thomson <connect@thanethomson.com> * Regenerate kvstore fixtures with rpc-probe for Tendermint v0.35.0 Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update kvstore integration test to accommodate newly generated fixtures Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update RPC tests and data structures to accommodate Tendermint v0.35.0 changes Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update ABCI encoding scheme to accommodate breaking change in tendermint/tendermint#5783 Signed-off-by: Thane Thomson <connect@thanethomson.com> * Bump Tendermint version in GitHub Actions kvstore integration test Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add changelog entries to capture breaking changes Signed-off-by: Thane Thomson <connect@thanethomson.com> * Change tx hash encoding from base64 to hex and update tests Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add changelog entry for /tx endpoint change Signed-off-by: Thane Thomson <connect@thanethomson.com> Co-authored-by: Henry de Valence <hdevalence@penumbra.zone> Co-authored-by: Henry de Valence <hdevalence@hdevalence.ca>
hdevalence
added a commit
to penumbra-zone/tendermint-rs
that referenced
this pull request
Sep 20, 2022
There are two issues to fix: * The original ABCI domain types work used `chrono`; this temporarily re-adds `chrono` as a dependency, so that the changes that eliminated it can be replayed on top of this rebasing. * The original ABCI domain types work was, for some reason, mixed in with changes to the RPC test harness for 0.35 compatibility, and that may break this code. I didn't attempt to fix this, because I didn't touch the RPC tests when writing the ABCI domain types. Original concatenation of commit messages follows: Add domain types (updated) and fix integration tests for Tendermint v0.35.0 (informalsystems#1022) * tendermint: add From<Infallible> for Error * Use hex for AppHash Debug formatting * Regenerate protobuf types using tools/proto-compiler. * Regenerate protos against tendermint v0.35.0-rc3. * Remove SetOption-related code in tendermint-abci. * Update imports to reflect protobuf movements. The BlockParams and ConsensusParams structs moved out of the ABCI protos. * Update tendermint-abci to reflect upstream proto changes. * p2p: treat all non-Ed25519 keys as unsupported This fixes a compile error introduced by upstream proto changes that add an Sr25519 variant. * Improve ABCI response code modeling with NonZeroU32 The previous data modeling allowed a user to construct an `Err(0)` value that would be serialized and deserialized as `Ok`. * Use the Bytes type in ABCI protos. * Add conversions between protobuf and chrono types. * tendermint: define Serde for Block in terms of RawBlock This changes the Serialize/Deserialize implementations for Block to convert to/from the proto-generated `RawBlock`, and use the derived serialization for that type. This is much cleaner and more maintainable than keeping Serde annotations for each sub-member of the data structure, because all of the serialization code is kept in one place, and there's only one validation path (the TryFrom conversion from RawBlock to Block) that applies to both kinds of serialization. * tendermint: simpler transaction modeling in Block This changes the Block type to hold the transactions as a plain `Vec<Vec<u8>>`, rather than as a custom `abci::transaction::Data` type (which is itself a wrapper for an `Option<Vec<Transaction>>`, the `Transaction` type being a wrapper for a `Vec<u8>`). This also updates the `Block` getter functions; it's not clear (to me) why they're there, since they access the public fields and aren't used anywhere else. * rpc: take over tendermint::abci The existing contents of the `tendermint::abci` module note that they're only for the purpose of implementing the RPC endpoints, not a general ABCI implementation. Moving that code from the `tendermint` crate to the `tendermint-rpc` crate decouples the RPC interface from improvements to the ABCI domain modeling. Eventually, it would be good to eliminate this code and align it with the new ABCI domain types. * tendermint: add ABCI domain types. These types mirror the generated types in tendermint_proto, but have better naming. The documentation for each request type is adapted from the ABCI Methods and Types spec document. However, the same logical request may appear three times, as a struct with the request data, as a Request variant, and as a CategoryRequest variant. To avoid duplication, this PR uses the `#[doc = include_str!(...)]` functionality stabilized in Rust 1.54 to keep common definitions of the documentation. * tendermint: eliminate &'static str errors in ABCI domain types. * Merge `abci::params::ConsensusParams` with `consensus::Params`. The code in the `abci` module had more complete documentation from the ABCI docs, so I copied it onto the existing structure. * Add hex encoding Serde attribute to Sr25519 keys. * Replace integers with `block::Height`, `vote::Power` * Replace integer with block::Round * Fix tools build by using correct imports Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix clippy complaints in tools Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix clippy warning Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix clippy lints Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix more clippy lints Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix deprecation notices from ed25519 crate Signed-off-by: Thane Thomson <connect@thanethomson.com> * Regenerate protos for Tendermint v0.35.0 Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix raw bytes conversion in tests/docs Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add Tendermint v0.35.0 Docker config Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add Tendermint v0.35.0 Docker image for ABCI integration testing Signed-off-by: Thane Thomson <connect@thanethomson.com> * Remove RPC deserialization tests The support files for these tests were manually generated some time ago. We should rather favour testing with the `kvstore_fixtures` tests, whose fixtures are automatically generated by our rpc-probe tool. Signed-off-by: Thane Thomson <connect@thanethomson.com> * Reformat Docker folder readme Signed-off-by: Thane Thomson <connect@thanethomson.com> * Bump version of Tendermint used in ABCI integration test Signed-off-by: Thane Thomson <connect@thanethomson.com> * Bump version of Tendermint used in rpc probe Signed-off-by: Thane Thomson <connect@thanethomson.com> * Bump version of Tendermint used in kvstore integration test Signed-off-by: Thane Thomson <connect@thanethomson.com> * Bump version of Tendermint used in proto-compiler Signed-off-by: Thane Thomson <connect@thanethomson.com> * Regenerate kvstore fixtures with rpc-probe for Tendermint v0.35.0 Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update kvstore integration test to accommodate newly generated fixtures Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update RPC tests and data structures to accommodate Tendermint v0.35.0 changes Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update ABCI encoding scheme to accommodate breaking change in tendermint/tendermint#5783 Signed-off-by: Thane Thomson <connect@thanethomson.com> * Bump Tendermint version in GitHub Actions kvstore integration test Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add changelog entries to capture breaking changes Signed-off-by: Thane Thomson <connect@thanethomson.com> * Change tx hash encoding from base64 to hex and update tests Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add changelog entry for /tx endpoint change Signed-off-by: Thane Thomson <connect@thanethomson.com> Co-authored-by: Henry de Valence <hdevalence@penumbra.zone> Co-authored-by: Henry de Valence <hdevalence@hdevalence.ca>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Builds on and supersedes #862.
Unfortunately the only way to get all the tests to pass here was to effectively do the upgrade to Tendermint v0.35.0. One important ABCI-related change that needed to be incorporated is related to the low-level wire format change in tendermint/tendermint#5783.
As a result, I've had to:
tools
.The reason so many lines of code went away was because I removed the
rpc/tests/support
folder. Many of these files are effectively duplicates of what's tested fromrpc/tests/kvstore_fixtures
and they were manually extracted, so updating them is a pain. By contrast, the fixtures inrpc/tests/kvstore_fixtures
are automatically generated by our rpc-probe tool, so we should look at expanding our RPC testing using the rpc-probe (e.g. by way of probing a running Gaia-based network). This should already be captured in #611..changelog/