From 839102cb1418d7175c3c0feed96ccb9c66584e4c Mon Sep 17 00:00:00 2001 From: Hanh Date: Mon, 1 May 2023 19:53:19 +1000 Subject: [PATCH] Move header digest to transparent merkle proof --- src/ledger/builder.rs | 18 +++++++++--------- src/ledger/builder/transparent_bundle.rs | 3 ++- src/ledger/transport.rs | 9 +++++---- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/ledger/builder.rs b/src/ledger/builder.rs index cc24e46..0237068 100644 --- a/src/ledger/builder.rs +++ b/src/ledger/builder.rs @@ -85,14 +85,7 @@ pub async fn build_broadcast_tx( transparent_builder.taddr, tx_plan.taddr); } - // Compute header digest - let mut h = create_hasher(b"ZTxIdHeadersHash"); - h.update(&hex!("050000800a27a726b4d0d6c200000000")); - - h.write_u32::(tx_plan.expiry_height)?; - let header_digest = h.finalize(); - - let master_seed = ledger_init_tx(header_digest.as_bytes()).await?; + let master_seed = ledger_init_tx().await?; // For testing only // let esk = "secret-extended-key-main1qwy5cttzqqqqpq8ksfmzqgz90r73yevcw6mvwuv5zuddak9zgl9epp6x308pczzez3hse753heepdk886yf7dmse5qvyl5jsuk5w4ejhtm30cpa862kq0pfu0z4zxxvyd523zeta3rr6lj0vg30mshf6wrlfucg47jv3ldspe0sv464uewwlglr0dzakssj8tdx27vq3dnerfa5z5fgf8vjutlcey3lwn4m6ncg8y4n2cgl64rd768uqg0yfvshljqt3g4x83kngv4guq06xx"; @@ -139,6 +132,13 @@ pub async fn build_broadcast_tx( let alpha = h.finalize(); let mut alpha_rng = ChaChaRng::from_seed(alpha.as_bytes().try_into().unwrap()); + // Compute header digest + let mut h = create_hasher(b"ZTxIdHeadersHash"); + h.update(&hex!("050000800a27a726b4d0d6c200000000")); + + h.write_u32::(tx_plan.expiry_height)?; + let header_digest = h.finalize(); + for sp in tx_plan.spends.iter() { match sp.source { Source::Transparent { txid, index } => { @@ -173,7 +173,7 @@ pub async fn build_broadcast_tx( .await?; } } - transparent_builder.set_merkle_proof().await?; + transparent_builder.set_merkle_proof(header_digest.as_bytes()).await?; ledger_set_stage(3).await?; for output in tx_plan.outputs.iter() { diff --git a/src/ledger/builder/transparent_bundle.rs b/src/ledger/builder/transparent_bundle.rs index dadc747..5c98817 100644 --- a/src/ledger/builder/transparent_bundle.rs +++ b/src/ledger/builder/transparent_bundle.rs @@ -99,7 +99,7 @@ impl TransparentBuilder { Ok(()) } - pub async fn set_merkle_proof(&self) -> Result<()> { + pub async fn set_merkle_proof(&self, header_hash: &[u8]) -> Result<()> { let prevouts_digest = self.prevouts_hasher.finalize(); log::info!("PREVOUTS {}", hex::encode(prevouts_digest)); let pubscripts_digest = self.trscripts_hasher.finalize(); @@ -108,6 +108,7 @@ impl TransparentBuilder { log::info!("SEQUENCES {}", hex::encode(sequences_digest)); ledger_set_transparent_merkle_proof( + header_hash, prevouts_digest.as_bytes(), pubscripts_digest.as_bytes(), sequences_digest.as_bytes(), diff --git a/src/ledger/transport.rs b/src/ledger/transport.rs index 60d003f..c98ad91 100644 --- a/src/ledger/transport.rs +++ b/src/ledger/transport.rs @@ -95,10 +95,9 @@ pub async fn ledger_get_o_fvk() -> Result> { Ok(pk) } -pub async fn ledger_init_tx(header_digest: &[u8]) -> Result> { +pub async fn ledger_init_tx() -> Result> { let mut bb: Vec = vec![]; - bb.write_all(&hex!("E010000020"))?; - bb.write_all(header_digest)?; + bb.write_all(&hex!("E010000000"))?; let main_seed = apdu(&bb).await?; Ok(main_seed) } @@ -113,12 +112,14 @@ pub async fn ledger_set_stage(stage: u8) -> Result<()> { } pub async fn ledger_set_transparent_merkle_proof( + header_digest: &[u8], prevouts_digest: &[u8], pubscripts_digest: &[u8], sequences_digest: &[u8], ) -> Result<()> { let mut bb: Vec = vec![]; - bb.write_all(&hex!("E012000060"))?; + bb.write_all(&hex!("E012000080"))?; + bb.write_all(header_digest)?; bb.write_all(prevouts_digest)?; bb.write_all(pubscripts_digest)?; bb.write_all(sequences_digest)?;