Skip to content
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

Removed amino folder #592

Merged
merged 34 commits into from
Oct 8, 2020
Merged
Show file tree
Hide file tree
Changes from 18 commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
e243c70
Removed amino traits, block, signature, vote
greg-szabo Sep 30, 2020
007bb09
tendermint: Fix header hashing
thanethomson Sep 30, 2020
f7bd911
light-client: Resolve #600
thanethomson Sep 30, 2020
0b05bdb
tendermint: Use shorthand form of method call
thanethomson Sep 30, 2020
4d55b61
tendermint: Add header hash check in integration test
thanethomson Oct 1, 2020
9bcdbaf
tendermint: Add workaround for empty BlockId
thanethomson Oct 1, 2020
d5cd63c
rpc: Update integration test fixture
thanethomson Oct 1, 2020
535e5a1
Added Proposal domain type with signing - tests fail for now
greg-szabo Oct 1, 2020
c66fe9d
tendermint: Make last_block_id encoding workaround more explicit
thanethomson Oct 1, 2020
428a369
tendermint: Fix empty last_block_id encoding issue
thanethomson Oct 1, 2020
631f5c2
Proposal and Vote signable bytes functions
greg-szabo Oct 1, 2020
da4db48
Merge remote-tracking branch 'refs/remotes/origin/greg/aminoff3' into…
greg-szabo Oct 1, 2020
b46bc85
PubKeyResponse made into PublicKey
greg-szabo Oct 1, 2020
90ecfc8
Header.Hash() fixes
greg-szabo Oct 2, 2020
66a3a54
Merge branch 'master' into greg/aminoff3
greg-szabo Oct 2, 2020
8600b54
Merge conflict fixes
greg-szabo Oct 2, 2020
fcef436
Proposal test fixes
greg-szabo Oct 2, 2020
8f9f0ba
Updated CHANGELOG
greg-szabo Oct 2, 2020
696efd3
Update CHANGELOG.md
greg-szabo Oct 2, 2020
661e294
Update CHANGELOG.md
greg-szabo Oct 2, 2020
19dddbb
regenerate static model-based files
andrey-kuprianov Oct 2, 2020
9fade2b
Update tendermint/Cargo.toml
greg-szabo Oct 2, 2020
5a63cb9
Remvoed amino bech32 encoding
greg-szabo Oct 5, 2020
3829909
Updated priv_validator.json test with non-amino public key result
greg-szabo Oct 5, 2020
665fe72
Removed comments referencing amino.
greg-szabo Oct 5, 2020
f5b1202
Review fixes #1
greg-szabo Oct 6, 2020
96b6f7f
Review fixes #2
greg-szabo Oct 6, 2020
8cc3d23
Review fixes #3
greg-szabo Oct 6, 2020
ff3cb43
Updated tests using testgen (#615)
greg-szabo Oct 7, 2020
2557cf4
Update tendermint/src/public_key.rs
greg-szabo Oct 7, 2020
54be939
Merge branch 'master' into greg/aminoff3
greg-szabo Oct 7, 2020
1d84575
fmt fix
greg-szabo Oct 7, 2020
1e1255a
Fixes number four, additional derive traits
greg-szabo Oct 8, 2020
e2d3773
Merge branch 'master' into greg/aminoff3
greg-szabo Oct 8, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,6 @@
- Add spec for the light client attack evidence handling ([#526])
- Return RFC6962 hash for empty merkle tree ([#498])
- The `tendermint`, `tendermint-rpc`, and `tendermint-light-client` crates now compile to WASM on the `wasm32-unknown-unknown` and `wasm32-wasi` targets ([#463])
- Implement protobuf encoding/decoding of Tendermint Proto types ([#504])
- Separate protobuf types from Rust domain types using the DomainType trait ([#535])
- Changed validator sorting order to sort by voting power (descending) and address (ascending). ([#506])
- Dependency update: sled 0.34 ([#490])

### BREAKING CHANGES:
Expand All @@ -18,6 +15,11 @@
subscription. To access this struct, you now need to enable both the
`client` and `transport_http` features when using the `tendermint-rpc`
crate. ([#516])
- `[tendermint]` Removed Amino types. All types are now `DomainType`s
implementing Protobuf-encoding using Prost. ([#504], [#535], [#536],
[#585])
- `[tendermint]` Changed validator sorting order to sort by voting power
(descending) and address (ascending). ([#506])

### IMPROVEMENTS:

Expand All @@ -44,8 +46,12 @@
[#463]: https://github.com/informalsystems/tendermint-rs/issues/463
[#504]: https://github.com/informalsystems/tendermint-rs/issues/504
[#535]: https://github.com/informalsystems/tendermint-rs/issues/535
[#504]: https://github.com/informalsystems/tendermint-rs/issues/504
greg-szabo marked this conversation as resolved.
Show resolved Hide resolved
[#506]: https://github.com/informalsystems/tendermint-rs/issues/506
[#516]: https://github.com/informalsystems/tendermint-rs/pull/516
[#535]: https://github.com/informalsystems/tendermint-rs/issues/535
greg-szabo marked this conversation as resolved.
Show resolved Hide resolved
[#536]: https://github.com/informalsystems/tendermint-rs/issues/536
[#585]: https://github.com/informalsystems/tendermint-rs/issues/585

## v0.16.0

Expand Down
3 changes: 2 additions & 1 deletion light-client/src/components/io.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,8 @@ mod prod {
/// A peer map which maps peer IDS to their network address must be supplied.
pub fn new(
peer_id: PeerId,
rpc_client: rpc::HttpClient, // TODO(thane): Generalize over client transport (instead of using HttpClient directly)
rpc_client: rpc::HttpClient, /* TODO(thane): Generalize over client transport
* (instead of using HttpClient directly) */
timeout: Option<Duration>,
) -> Self {
Self {
Expand Down
5 changes: 4 additions & 1 deletion light-client/src/components/scheduler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use contracts::*;

use crate::store::LightStore;
use crate::types::Height;
use std::convert::TryInto;

/// The scheduler decides what block to verify next given the current and target heights.
///
Expand Down Expand Up @@ -122,5 +123,7 @@ pub fn valid_schedule(
#[pre(low <= high)]
#[post(low <= ret && ret <= high)]
fn midpoint(low: Height, high: Height) -> Height {
(low.value() + (high.value() + 1 - low.value()) / 2).into()
(low.value() + (high.value() + 1 - low.value()) / 2)
.try_into()
.unwrap() // Will panic if midpoint is higher than i64::MAX
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we label these with something consistent so it's easy to find them in the future if we change how we handle this? Maybe should be an XXX or something easy to find...

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good idea, although in this case it's more of a theoretical possibility than a real one.
You can get the biggest number with high.value()==i64::MAX and midpoint is going to be i64::MAX/2 in that case. So this is an unwrap case that can never fail, unless the developer changes the types without concern to the note.

Maybe it's better to remove it, since it's theoretical only.

}
25 changes: 17 additions & 8 deletions light-client/src/operations/voting_power.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,10 @@ use serde::{Deserialize, Serialize};
use std::collections::HashSet;
use std::fmt;

use std::convert::{TryFrom, TryInto};
use tendermint::block::CommitSig;
use tendermint::trust_threshold::TrustThreshold as _;
use tendermint::vote::{SignedVote, Vote};
use tendermint::vote::{SignedVote, ValidatorIndex, Vote};

/// Tally for the voting power computed by the `VotingPowerCalculator`
#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)]
Expand Down Expand Up @@ -115,7 +116,11 @@ impl VotingPowerCalculator for ProdVotingPowerCalculator {

// Get non-absent votes from the signatures
let non_absent_votes = signatures.iter().enumerate().flat_map(|(idx, signature)| {
if let Some(vote) = non_absent_vote(signature, idx as u16, &signed_header.commit) {
if let Some(vote) = non_absent_vote(
signature,
ValidatorIndex::try_from(idx).unwrap(),
&signed_header.commit,
) {
Some((signature, vote))
} else {
None
Expand All @@ -138,8 +143,8 @@ impl VotingPowerCalculator for ProdVotingPowerCalculator {
};

let signed_vote = SignedVote::new(
(&vote).into(),
signed_header.header.chain_id.as_str(),
vote.clone(),
signed_header.header.chain_id.clone(),
vote.validator_address,
vote.signature,
);
Expand Down Expand Up @@ -179,7 +184,11 @@ impl VotingPowerCalculator for ProdVotingPowerCalculator {
}
}

fn non_absent_vote(commit_sig: &CommitSig, validator_index: u16, commit: &Commit) -> Option<Vote> {
fn non_absent_vote(
commit_sig: &CommitSig,
validator_index: ValidatorIndex,
commit: &Commit,
) -> Option<Vote> {
let (validator_address, timestamp, signature, block_id) = match commit_sig {
CommitSig::BlockIDFlagAbsent { .. } => return None,
CommitSig::BlockIDFlagCommit {
Expand All @@ -190,7 +199,7 @@ fn non_absent_vote(commit_sig: &CommitSig, validator_index: u16, commit: &Commit
*validator_address,
*timestamp,
signature,
Some(commit.block_id.clone()),
Some(commit.block_id),
),
CommitSig::BlockIDFlagNil {
validator_address,
Expand All @@ -202,9 +211,9 @@ fn non_absent_vote(commit_sig: &CommitSig, validator_index: u16, commit: &Commit
Some(Vote {
vote_type: tendermint::vote::Type::Precommit,
height: commit.height,
round: commit.round,
round: commit.round.try_into().unwrap(),
block_id,
timestamp,
timestamp: Some(timestamp),
validator_address,
validator_index,
signature: *signature,
Expand Down
2 changes: 1 addition & 1 deletion light-client/tests/integration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ fn sync() {
let handle = supervisor.handle();
std::thread::spawn(|| supervisor.run());

let max_iterations: usize = 1; // FIXME: Fix no witness left error in subsequent iterations
let max_iterations: usize = 10;

for i in 1..=max_iterations {
println!("[info ] - iteration {}/{}", i, max_iterations);
Expand Down
3 changes: 2 additions & 1 deletion light-client/tests/light_client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ use tendermint_light_client::{
types::{LightBlock, Status, TrustThreshold},
};

use std::convert::TryInto;
use tendermint_testgen::Tester;

// Link to JSON test files repo:
Expand Down Expand Up @@ -169,7 +170,7 @@ fn bisection_lower_test(tc: TestBisection<AnonLightBlock>) {
trusted_height = trusted_height.increment();
}

tc.height_to_verify = (trusted_height.value() - 1).into();
tc.height_to_verify = (trusted_height.value() - 1).try_into().unwrap();

let test_result = run_bisection_test(tc);
match test_result.new_states {
Expand Down
3 changes: 2 additions & 1 deletion light-node/src/commands/initialize.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ use abscissa_core::Runnable;

use tendermint::{hash, Hash};

use std::convert::TryInto;
use tendermint_light_client::builder::LightClientBuilder;
use tendermint_light_client::store::sled::SledStore;
use tendermint_light_client::store::LightStore;
Expand Down Expand Up @@ -48,7 +49,7 @@ impl Runnable for InitCmd {
let light_client_config = node_config.light_clients.first().unwrap();

if let Err(e) = initialize_subjectively(
self.height.into(),
self.height.try_into().unwrap(),
subjective_header_hash,
&node_config,
&light_client_config,
Expand Down
1 change: 0 additions & 1 deletion rpc/src/client/transport/http.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ use tendermint::net;
/// [`Client`]: trait.Client.html
/// [`Event`]: ./event/struct.Event.html
/// [`WebSocketClient`]: struct.WebSocketClient.html
///
#[derive(Debug, Clone)]
pub struct HttpClient {
host: String,
Expand Down
14 changes: 11 additions & 3 deletions rpc/src/client/transport/mock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ impl MockRequestMethodMatcher {
#[cfg(test)]
mod test {
use super::*;
use std::convert::TryFrom;
use std::path::PathBuf;
use tendermint::block::Height;
use tendermint::chain::Id;
Expand All @@ -138,10 +139,17 @@ mod test {

let abci_info = client.abci_info().await.unwrap();
assert_eq!("GaiaApp".to_string(), abci_info.data);
assert_eq!(Height::from(488120_u32), abci_info.last_block_height);
assert_eq!(
Height::try_from(488120_u64).unwrap(),
abci_info.last_block_height
);

let block = client.block(Height::from(10_u32)).await.unwrap().block;
assert_eq!(Height::from(10_u32), block.header.height);
let block = client
.block(Height::try_from(10_u64).unwrap())
.await
.unwrap()
.block;
assert_eq!(Height::try_from(10_u64).unwrap(), block.header.height);
assert_eq!("cosmoshub-2".parse::<Id>().unwrap(), block.header.chain_id);
}
}
9 changes: 7 additions & 2 deletions rpc/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,13 @@
//!
//! | Feature | Description |
//! | ------- | ----------- |
//! | `http-client` | Provides [`HttpClient`], which is a basic RPC client that interacts with remote Tendermint nodes via **JSON-RPC over HTTP**. This client does not provide [`Event`] subscription functionality. See the [Tendermint RPC] for more details. |
//! | `websocket-client` | Provides [`WebSocketClient`], which currently only provides [`Event`] subscription functionality over a WebSocket connection. See the [`/subscribe` endpoint] in the Tendermint RPC for more details. This client does not yet provide access to the RPC methods provided by the [`Client`] trait (this is planned for a future release). |
//! | `http-client` | Provides [`HttpClient`], which is a basic RPC client that interacts with
romac marked this conversation as resolved.
Show resolved Hide resolved
//! remote Tendermint nodes via **JSON-RPC over HTTP**. This client does not provide [`Event`]
//! subscription functionality. See the [Tendermint RPC] for more details. | | `websocket-client` |
//! Provides [`WebSocketClient`], which currently only provides [`Event`] subscription functionality
//! over a WebSocket connection. See the [`/subscribe` endpoint] in the Tendermint RPC for more
//! details. This client does not yet provide access to the RPC methods provided by the [`Client`]
//! trait (this is planned for a future release). |
//!
//! ### Mock Clients
//!
Expand Down
2 changes: 1 addition & 1 deletion rpc/tests/integration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ fn broadcast_tx_commit_null_data() {
fn commit() {
let response = endpoint::commit::Response::from_string(&read_json_fixture("commit")).unwrap();
let header = response.signed_header.header;
assert_eq!(header.chain_id.as_ref(), EXAMPLE_CHAIN);
assert_eq!(header.chain_id.as_ref(), "dockerchain");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not keep EXAMPLE_CHAIN or else why not make a variable for this?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Uh, I'm not sure, it was completely fine as it was. I don't think it was changed by me, it seems it was changed when the commit.json was regenerated. (The previous one had cosmoshub-2 as the chain ID and the current one is dockerchain.) I don't mind it this way because most other assertions use constants to check validity. But we can revert to a const too.

// For now we just want to make sure the commit including precommits and a block_id exist
// in SignedHeader; later we should verify some properties: e.g. block_id.hash matches the
// header etc:
Expand Down
36 changes: 18 additions & 18 deletions rpc/tests/support/commit.json
Original file line number Diff line number Diff line change
@@ -1,49 +1,49 @@
{
"jsonrpc": "2.0",
"id": "",
"id": 1,
"result": {
"signed_header": {
"header": {
"version": {
"block": "10",
"block": "11",
"app": "1"
},
"chain_id": "cosmoshub-2",
"chain_id": "dockerchain",
"height": "10",
"time": "2020-03-15T16:57:08.151Z",
"time": "2020-10-01T13:39:16.446728262Z",
"last_block_id": {
"hash": "760E050B2404A4BC661635CA552FF45876BCD927C367ADF88961E389C01D32FF",
"hash": "F039C21B34127537B56D653A108ECC847EA0178E65FE69476D2F97F044A69E1C",
"parts": {
"total": 1,
"hash": "485070D01F9543827B3F9BAF11BDCFFBFD2BDED0B63D7192FA55649B94A1D5DE"
"hash": "D31DCBFF294D3CEFA57EAEF7D411350FD6D700A1E9ED4F79711B5CC83F5BE5BC"
}
},
"last_commit_hash": "594F029060D5FAE6DDF82C7DC4612055EC7F941DFED34D43B2754008DC3BBC77",
"data_hash": "",
"validators_hash": "3C0A744897A1E0DBF1DEDE1AF339D65EDDCF10E6338504368B20C508D6D578DC",
"next_validators_hash": "3C0A744897A1E0DBF1DEDE1AF339D65EDDCF10E6338504368B20C508D6D578DC",
"last_commit_hash": "4332A4CA94EA4F73C195640A1913654C086576BB43DDF0FF87B631A09F1F7E52",
"data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855",
"validators_hash": "7CEBEAF9DBAE9E3488A7468BC999E620DAB6395CBF80BC9BAAC1DF71EB816139",
"next_validators_hash": "7CEBEAF9DBAE9E3488A7468BC999E620DAB6395CBF80BC9BAAC1DF71EB816139",
"consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F",
"app_hash": "0000000000000000",
"last_results_hash": "",
"evidence_hash": "",
"proposer_address": "12CC3970B3AE9F19A4B1D98BE1799F2CB923E0A3"
"last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855",
"evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855",
"proposer_address": "DC30B689DABDCAAA92FF79FBAE619362AD97293C"
},
"commit": {
"height": "10",
"round": 0,
"block_id": {
"hash": "6DFCE2EB94FB52CE538E84ADB43568C05FD954AB92F1E2CAA95F79BAF9BE77EA",
"hash": "EDEF6D800E431D29A2EEC727408F24540104449246A28A71AE335AED8E892D1E",
"parts": {
"total": 1,
"hash": "BBA710736635FA20CDB4F48732563869E90871D31FE9E7DE3D900CD4334D8775"
"hash": "1AA0DDA243CCC5FA0DC0C958DE5CBC12C1B91B9472BE2DF7C1D797C4BBA87436"
}
},
"signatures": [
{
"block_id_flag": 2,
"validator_address": "12CC3970B3AE9F19A4B1D98BE1799F2CB923E0A3",
"timestamp": "2020-03-15T16:57:09.208721Z",
"signature": "B8x8sYHWiDalvf1m5yb1l1NQJRb3z5QYNCKxbjGIGI+HQB7Ss1cV5vPn4fh2jg1pMN+gFwLxAZGfdyBLQIuoCQ=="
"validator_address": "DC30B689DABDCAAA92FF79FBAE619362AD97293C",
"timestamp": "2020-10-01T13:39:16.96959972Z",
"signature": "wlPr5XjCfaX5u432QUpjnsTQmJkcNJ37R78QaIQNSv3NyzJMMW0jbeSlF2Bi83CKhrGDhGL7aq/mKaIZMrlfCQ=="
}
]
}
Expand Down
30 changes: 15 additions & 15 deletions rpc/tests/support/commit_1.json
Original file line number Diff line number Diff line change
@@ -1,49 +1,49 @@
{
"jsonrpc": "2.0",
"id": -1,
"id": 1,
"result": {
"signed_header": {
"header": {
"version": {
"block": "10",
"block": "11",
"app": "1"
},
"chain_id": "dockerchain",
"height": "1",
"time": "2020-07-09T14:24:44.7157258Z",
"time": "2020-09-30T15:53:38.3317756Z",
"last_block_id": {
"hash": "",
"parts": {
"total": 0,
"hash": ""
}
},
"last_commit_hash": "",
"data_hash": "",
"validators_hash": "74F2AC2B6622504D08DD2509E28CE731985CFE4D133C9DB0CB85763EDCA95AA3",
"next_validators_hash": "74F2AC2B6622504D08DD2509E28CE731985CFE4D133C9DB0CB85763EDCA95AA3",
"last_commit_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855",
"data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855",
"validators_hash": "7CEBEAF9DBAE9E3488A7468BC999E620DAB6395CBF80BC9BAAC1DF71EB816139",
"next_validators_hash": "7CEBEAF9DBAE9E3488A7468BC999E620DAB6395CBF80BC9BAAC1DF71EB816139",
"consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F",
"app_hash": "",
"last_results_hash": "",
"evidence_hash": "",
"proposer_address": "AD358F20C8CE80889E0F0248FDDC454595D632AE"
"last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855",
"evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855",
"proposer_address": "DC30B689DABDCAAA92FF79FBAE619362AD97293C"
},
"commit": {
"height": "1",
"round": 0,
"block_id": {
"hash": "E593C2A5FFF56F060034BE5CCC79AEC1DC396B7A1E137148E743B6B8CA79A7DF",
"hash": "14FE58148FBF37743B360D1B92BB8528ADA50E22BA219DA417B16379EEE306D3",
"parts": {
"total": 1,
"hash": "BF5130E879A02AC4BB83E392732ED4A37BE2F01304A615467EE7960858774E57"
"hash": "F45A469B007676CC8A65DEB6C194D04A9166F4690F36ECA7C71E730E2F1D916E"
}
},
"signatures": [
{
"block_id_flag": 2,
"validator_address": "AD358F20C8CE80889E0F0248FDDC454595D632AE",
"timestamp": "2020-07-10T23:47:42.8655562Z",
"signature": "HWADptT75yH6Y558j268oItSorBwngMsqfldKgXQaUT02Gd6OqpzFHZgPUzoaLuVa1rk6EM7W0Rx1dDdpOIoDg=="
"validator_address": "DC30B689DABDCAAA92FF79FBAE619362AD97293C",
"timestamp": "2020-10-01T13:39:12.243358745Z",
"signature": "/PI3gfFri14erU4//7C16XXGZZVzldjVx14cBM+b2hRenLTBsn2dNGz33t+MFWEOBe/vGvURkApciVrID3ihAA=="
}
]
}
Expand Down
2 changes: 1 addition & 1 deletion tendermint/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ tendermint-proto = { path = "../proto" }
toml = { version = "0.5" }
zeroize = { version = "1.1", features = ["zeroize_derive"] }
ripemd160 = { version = "0.9", optional = true }

base64 = "0.13.0"
greg-szabo marked this conversation as resolved.
Show resolved Hide resolved
[dev-dependencies]
tendermint-rpc = { path = "../rpc", features = [ "http-client", "websocket-client" ] }
tokio = { version = "0.2", features = [ "macros" ] }
Expand Down
Loading