Add data structures for transaction digests.

This commit is contained in:
Kris Nuttycombe 2021-05-12 15:54:21 -06:00
parent fd1790fec2
commit 1138343c89
1 changed files with 76 additions and 0 deletions

View File

@ -590,6 +590,82 @@ impl Transaction {
}
}
#[derive(Clone)]
pub struct TransparentDigests<A> {
pub prevout_digest: A,
pub sequence_digest: A,
pub outputs_digest: A,
pub per_input_digest: Option<A>,
}
#[derive(Clone)]
pub struct TzeDigests<A> {
pub inputs_digest: A,
pub outputs_digest: A,
pub per_input_digest: Option<A>,
}
#[derive(Clone)]
pub struct TxDigests<A> {
pub header_digest: A,
pub transparent_digests: Option<TransparentDigests<A>>,
pub sapling_digest: A,
pub orchard_digest: A,
#[cfg(feature = "zfuture")]
pub tze_digests: Option<TzeDigests<A>>,
}
pub(crate) trait TransactionDigest<A: Authorization> {
type HeaderDigest;
type TransparentDigest;
type SaplingDigest;
type OrchardDigest;
#[cfg(feature = "zfuture")]
type TzeDigest;
type Digest;
fn digest_header(
&self,
version: TxVersion,
consensus_branch_id: BranchId,
lock_time: u32,
expiry_height: BlockHeight,
) -> Self::HeaderDigest;
fn digest_transparent(
&self,
transparent_bundle: Option<&transparent::Bundle<A::TransparentAuth>>,
) -> Self::TransparentDigest;
fn digest_sapling(
&self,
sapling_bundle: Option<&sapling::Bundle<A::SaplingAuth>>,
) -> Self::SaplingDigest;
fn digest_orchard(
&self,
orchard_bundle: Option<&orchard::Bundle<A::OrchardAuth, Amount>>,
) -> Self::OrchardDigest;
#[cfg(feature = "zfuture")]
fn digest_tze(&self, tze_bundle: Option<&tze::Bundle<A::TzeAuth>>) -> Self::TzeDigest;
fn combine(
&self,
header_digest: Self::HeaderDigest,
transparent_digest: Self::TransparentDigest,
sapling_digest: Self::SaplingDigest,
orchard_digest: Self::OrchardDigest,
#[cfg(feature = "zfuture")] tze_digest: Self::TzeDigest,
) -> Self::Digest;
}
pub enum DigestError {
NotSigned,
}
#[cfg(any(test, feature = "test-dependencies"))]
pub mod testing {
use proptest::prelude::*;