From 3e483821ce65d6932c2eaf2e8a94420461c05c91 Mon Sep 17 00:00:00 2001 From: yihuang Date: Wed, 13 Nov 2019 14:02:53 +0800 Subject: [PATCH] impl lite::Commit for commit::SignedHeader --- tendermint/src/rpc/endpoint/commit.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/tendermint/src/rpc/endpoint/commit.rs b/tendermint/src/rpc/endpoint/commit.rs index a4e0768d1..558891e81 100644 --- a/tendermint/src/rpc/endpoint/commit.rs +++ b/tendermint/src/rpc/endpoint/commit.rs @@ -1,6 +1,6 @@ //! `/commit` endpoint JSONRPC wrapper -use crate::{block, rpc}; +use crate::{amino_types::vote::CanonicalVote, block, lite, rpc, vote::SignedVote, Hash}; use serde::{Deserialize, Serialize}; /// Get commit information about a specific block @@ -46,3 +46,26 @@ pub struct SignedHeader { /// Commit containing signatures for the header pub commit: block::Commit, } + +impl lite::Commit for SignedHeader { + type Vote = SignedVote; + fn header_hash(&self) -> Hash { + self.commit.block_id.hash + } + fn into_vec(&self) -> Vec> { + let chain_id = self.header.chain_id.to_string(); + let mut votes = self.commit.precommits.clone().into_vec(); + votes + .drain(..) + .map(|opt| { + opt.map(|vote| { + SignedVote::new( + CanonicalVote::new((&vote).into(), &chain_id), + vote.validator_address, + vote.signature, + ) + }) + }) + .collect() + } +}