Move header digest to transparent merkle proof
This commit is contained in:
parent
58b36ad321
commit
839102cb14
|
@ -85,14 +85,7 @@ pub async fn build_broadcast_tx(
|
||||||
transparent_builder.taddr, tx_plan.taddr);
|
transparent_builder.taddr, tx_plan.taddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compute header digest
|
let master_seed = ledger_init_tx().await?;
|
||||||
let mut h = create_hasher(b"ZTxIdHeadersHash");
|
|
||||||
h.update(&hex!("050000800a27a726b4d0d6c200000000"));
|
|
||||||
|
|
||||||
h.write_u32::<LE>(tx_plan.expiry_height)?;
|
|
||||||
let header_digest = h.finalize();
|
|
||||||
|
|
||||||
let master_seed = ledger_init_tx(header_digest.as_bytes()).await?;
|
|
||||||
|
|
||||||
// For testing only
|
// For testing only
|
||||||
// let esk = "secret-extended-key-main1qwy5cttzqqqqpq8ksfmzqgz90r73yevcw6mvwuv5zuddak9zgl9epp6x308pczzez3hse753heepdk886yf7dmse5qvyl5jsuk5w4ejhtm30cpa862kq0pfu0z4zxxvyd523zeta3rr6lj0vg30mshf6wrlfucg47jv3ldspe0sv464uewwlglr0dzakssj8tdx27vq3dnerfa5z5fgf8vjutlcey3lwn4m6ncg8y4n2cgl64rd768uqg0yfvshljqt3g4x83kngv4guq06xx";
|
// let esk = "secret-extended-key-main1qwy5cttzqqqqpq8ksfmzqgz90r73yevcw6mvwuv5zuddak9zgl9epp6x308pczzez3hse753heepdk886yf7dmse5qvyl5jsuk5w4ejhtm30cpa862kq0pfu0z4zxxvyd523zeta3rr6lj0vg30mshf6wrlfucg47jv3ldspe0sv464uewwlglr0dzakssj8tdx27vq3dnerfa5z5fgf8vjutlcey3lwn4m6ncg8y4n2cgl64rd768uqg0yfvshljqt3g4x83kngv4guq06xx";
|
||||||
|
@ -139,6 +132,13 @@ pub async fn build_broadcast_tx(
|
||||||
let alpha = h.finalize();
|
let alpha = h.finalize();
|
||||||
let mut alpha_rng = ChaChaRng::from_seed(alpha.as_bytes().try_into().unwrap());
|
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::<LE>(tx_plan.expiry_height)?;
|
||||||
|
let header_digest = h.finalize();
|
||||||
|
|
||||||
for sp in tx_plan.spends.iter() {
|
for sp in tx_plan.spends.iter() {
|
||||||
match sp.source {
|
match sp.source {
|
||||||
Source::Transparent { txid, index } => {
|
Source::Transparent { txid, index } => {
|
||||||
|
@ -173,7 +173,7 @@ pub async fn build_broadcast_tx(
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
transparent_builder.set_merkle_proof().await?;
|
transparent_builder.set_merkle_proof(header_digest.as_bytes()).await?;
|
||||||
ledger_set_stage(3).await?;
|
ledger_set_stage(3).await?;
|
||||||
|
|
||||||
for output in tx_plan.outputs.iter() {
|
for output in tx_plan.outputs.iter() {
|
||||||
|
|
|
@ -99,7 +99,7 @@ impl TransparentBuilder {
|
||||||
Ok(())
|
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();
|
let prevouts_digest = self.prevouts_hasher.finalize();
|
||||||
log::info!("PREVOUTS {}", hex::encode(prevouts_digest));
|
log::info!("PREVOUTS {}", hex::encode(prevouts_digest));
|
||||||
let pubscripts_digest = self.trscripts_hasher.finalize();
|
let pubscripts_digest = self.trscripts_hasher.finalize();
|
||||||
|
@ -108,6 +108,7 @@ impl TransparentBuilder {
|
||||||
log::info!("SEQUENCES {}", hex::encode(sequences_digest));
|
log::info!("SEQUENCES {}", hex::encode(sequences_digest));
|
||||||
|
|
||||||
ledger_set_transparent_merkle_proof(
|
ledger_set_transparent_merkle_proof(
|
||||||
|
header_hash,
|
||||||
prevouts_digest.as_bytes(),
|
prevouts_digest.as_bytes(),
|
||||||
pubscripts_digest.as_bytes(),
|
pubscripts_digest.as_bytes(),
|
||||||
sequences_digest.as_bytes(),
|
sequences_digest.as_bytes(),
|
||||||
|
|
|
@ -95,10 +95,9 @@ pub async fn ledger_get_o_fvk() -> Result<Vec<u8>> {
|
||||||
Ok(pk)
|
Ok(pk)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn ledger_init_tx(header_digest: &[u8]) -> Result<Vec<u8>> {
|
pub async fn ledger_init_tx() -> Result<Vec<u8>> {
|
||||||
let mut bb: Vec<u8> = vec![];
|
let mut bb: Vec<u8> = vec![];
|
||||||
bb.write_all(&hex!("E010000020"))?;
|
bb.write_all(&hex!("E010000000"))?;
|
||||||
bb.write_all(header_digest)?;
|
|
||||||
let main_seed = apdu(&bb).await?;
|
let main_seed = apdu(&bb).await?;
|
||||||
Ok(main_seed)
|
Ok(main_seed)
|
||||||
}
|
}
|
||||||
|
@ -113,12 +112,14 @@ pub async fn ledger_set_stage(stage: u8) -> Result<()> {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn ledger_set_transparent_merkle_proof(
|
pub async fn ledger_set_transparent_merkle_proof(
|
||||||
|
header_digest: &[u8],
|
||||||
prevouts_digest: &[u8],
|
prevouts_digest: &[u8],
|
||||||
pubscripts_digest: &[u8],
|
pubscripts_digest: &[u8],
|
||||||
sequences_digest: &[u8],
|
sequences_digest: &[u8],
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let mut bb: Vec<u8> = vec![];
|
let mut bb: Vec<u8> = vec![];
|
||||||
bb.write_all(&hex!("E012000060"))?;
|
bb.write_all(&hex!("E012000080"))?;
|
||||||
|
bb.write_all(header_digest)?;
|
||||||
bb.write_all(prevouts_digest)?;
|
bb.write_all(prevouts_digest)?;
|
||||||
bb.write_all(pubscripts_digest)?;
|
bb.write_all(pubscripts_digest)?;
|
||||||
bb.write_all(sequences_digest)?;
|
bb.write_all(sequences_digest)?;
|
||||||
|
|
Loading…
Reference in New Issue