Struct ibc_proto::ics23::ExistenceProof
source · pub struct ExistenceProof {
pub key: Vec<u8>,
pub value: Vec<u8>,
pub leaf: Option<LeafOp>,
pub path: Vec<InnerOp>,
}
Expand description
ExistenceProof takes a key and a value and a set of steps to perform on it. The result of peforming all these steps will provide a “root hash”, which can be compared to the value in a header.
Since it is computationally infeasible to produce a hash collission for any of the used cryptographic hash functions, if someone can provide a series of operations to transform a given key and value into a root hash that matches some trusted root, these key and values must be in the referenced merkle tree.
The only possible issue is maliablity in LeafOp, such as providing extra prefix data, which should be controlled by a spec. Eg. with lengthOp as NONE, prefix = FOO, key = BAR, value = CHOICE and prefix = F, key = OOBAR, value = CHOICE would produce the same value.
With LengthOp this is tricker but not impossible. Which is why the “leafPrefixEqual” field in the ProofSpec is valuable to prevent this mutability. And why all trees should length-prefix the data before hashing it.
Fields§
§key: Vec<u8>
§value: Vec<u8>
§leaf: Option<LeafOp>
§path: Vec<InnerOp>
Trait Implementations§
source§impl Clone for ExistenceProof
impl Clone for ExistenceProof
source§fn clone(&self) -> ExistenceProof
fn clone(&self) -> ExistenceProof
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for ExistenceProof
impl Debug for ExistenceProof
source§impl Default for ExistenceProof
impl Default for ExistenceProof
source§impl<'de> Deserialize<'de> for ExistenceProof
impl<'de> Deserialize<'de> for ExistenceProof
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where __D: Deserializer<'de>,
source§impl Message for ExistenceProof
impl Message for ExistenceProof
source§fn encoded_len(&self) -> usize
fn encoded_len(&self) -> usize
source§fn encode<B>(&self, buf: &mut B) -> Result<(), EncodeError>where
B: BufMut,
Self: Sized,
fn encode<B>(&self, buf: &mut B) -> Result<(), EncodeError>where B: BufMut, Self: Sized,
source§fn encode_to_vec(&self) -> Vec<u8, Global>where
Self: Sized,
fn encode_to_vec(&self) -> Vec<u8, Global>where Self: Sized,
source§fn encode_length_delimited<B>(&self, buf: &mut B) -> Result<(), EncodeError>where
B: BufMut,
Self: Sized,
fn encode_length_delimited<B>(&self, buf: &mut B) -> Result<(), EncodeError>where B: BufMut, Self: Sized,
source§fn encode_length_delimited_to_vec(&self) -> Vec<u8, Global>where
Self: Sized,
fn encode_length_delimited_to_vec(&self) -> Vec<u8, Global>where Self: Sized,
source§fn decode<B>(buf: B) -> Result<Self, DecodeError>where
B: Buf,
Self: Default,
fn decode<B>(buf: B) -> Result<Self, DecodeError>where B: Buf, Self: Default,
source§fn decode_length_delimited<B>(buf: B) -> Result<Self, DecodeError>where
B: Buf,
Self: Default,
fn decode_length_delimited<B>(buf: B) -> Result<Self, DecodeError>where B: Buf, Self: Default,
source§fn merge<B>(&mut self, buf: B) -> Result<(), DecodeError>where
B: Buf,
Self: Sized,
fn merge<B>(&mut self, buf: B) -> Result<(), DecodeError>where B: Buf, Self: Sized,
self
. Read moresource§fn merge_length_delimited<B>(&mut self, buf: B) -> Result<(), DecodeError>where
B: Buf,
Self: Sized,
fn merge_length_delimited<B>(&mut self, buf: B) -> Result<(), DecodeError>where B: Buf, Self: Sized,
self
.source§impl PartialEq<ExistenceProof> for ExistenceProof
impl PartialEq<ExistenceProof> for ExistenceProof
source§fn eq(&self, other: &ExistenceProof) -> bool
fn eq(&self, other: &ExistenceProof) -> bool
self
and other
values to be equal, and is used
by ==
.source§impl Serialize for ExistenceProof
impl Serialize for ExistenceProof
impl StructuralPartialEq for ExistenceProof
Auto Trait Implementations§
impl RefUnwindSafe for ExistenceProof
impl Send for ExistenceProof
impl Sync for ExistenceProof
impl Unpin for ExistenceProof
impl UnwindSafe for ExistenceProof
Blanket Implementations§
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request