From a992d84bb2a885e61d06da3916f5fa37a174bea7 Mon Sep 17 00:00:00 2001 From: NikVolf Date: Tue, 20 Nov 2018 19:54:06 +0300 Subject: [PATCH] serialization of joinsplit --- chain/src/join_split.rs | 4 ++-- chain/src/transaction.rs | 1 + script/src/sign.rs | 8 ++++++-- verification/src/accept_transaction.rs | 3 +-- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/chain/src/join_split.rs b/chain/src/join_split.rs index 6d025583..11144673 100644 --- a/chain/src/join_split.rs +++ b/chain/src/join_split.rs @@ -129,8 +129,8 @@ pub fn serialize_join_split(stream: &mut Stream, join_split: &Option) }; stream.append(&d.ciphertexts); } - stream.append(&join_split.pubkey) - .append(&join_split.sig); + stream.append(&join_split.pubkey); + stream.append(&join_split.sig); } } } diff --git a/chain/src/transaction.rs b/chain/src/transaction.rs index 4243412c..abe115f8 100644 --- a/chain/src/transaction.rs +++ b/chain/src/transaction.rs @@ -229,6 +229,7 @@ impl Serializable for Transaction { .append_list(&sapling.outputs); } + println!("serializing tx! ({:?})", self.join_split); serialize_join_split(stream, &self.join_split); if let Some(sapling) = self.sapling.as_ref() { diff --git a/script/src/sign.rs b/script/src/sign.rs index 95f82630..589fb14b 100644 --- a/script/src/sign.rs +++ b/script/src/sign.rs @@ -5,7 +5,7 @@ use keys::KeyPair; use crypto::dhash256; use hash::H256; use ser::Stream; -use chain::{Transaction, TransactionOutput, OutPoint, TransactionInput}; +use chain::{Transaction, TransactionOutput, OutPoint, TransactionInput, JoinSplit}; use {Script, Builder}; #[derive(Debug, PartialEq, Clone, Copy)] @@ -104,6 +104,7 @@ pub struct TransactionInputSigner { pub inputs: Vec, pub outputs: Vec, pub lock_time: u32, + pub join_split: Option } /// Used for resigning and loading test transactions @@ -114,6 +115,7 @@ impl From for TransactionInputSigner { inputs: t.inputs.into_iter().map(Into::into).collect(), outputs: t.outputs, lock_time: t.lock_time, + join_split: t.join_split, } } } @@ -177,7 +179,8 @@ impl TransactionInputSigner { outputs: outputs, version: self.version, lock_time: self.lock_time, - ..Default::default() // TODO + join_split: self.join_split.clone(), + ..Default::default() }; let mut stream = Stream::default(); @@ -260,6 +263,7 @@ mod tests { lock_time: 0, inputs: vec![unsigned_input], outputs: vec![output], + join_split: None, }; let hash = input_signer.signature_hash(0, &previous_output, SighashBase::All.into()); diff --git a/verification/src/accept_transaction.rs b/verification/src/accept_transaction.rs index 3f4a1d1f..332dd769 100644 --- a/verification/src/accept_transaction.rs +++ b/verification/src/accept_transaction.rs @@ -435,7 +435,6 @@ mod tests { use script::{Script, VerificationFlags, TransactionSignatureChecker, TransactionInputSigner, verify_script}; #[test] - #[ignore] fn join_split() { let input_hex = "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff05021d010101ffffffff021070d90000000000232102bdbbb2eb3066bb138d31349ce32b7f05871ac08cfb382023155249b213417d82ac045c36000000000017a9147d46a730d31f97b1930d3368a967c309bd4d136a8700000000"; @@ -448,7 +447,7 @@ mod tests { let output_script: Script = coinbase_tx.outputs()[0].script_pubkey.clone().into(); let input_script: Script = spending_tx.inputs()[0].script_sig.clone().into(); - let signer: TransactionInputSigner = coinbase_tx.into(); + let signer: TransactionInputSigner = spending_tx.into(); let checker = TransactionSignatureChecker { signer: signer,