ark/test_util/
mod.rs

1pub mod dummy;
2pub mod vectors;
3pub use self::vectors::VTXO_VECTORS;
4
5
6use std::fmt;
7
8use bitcoin::hex::DisplayHex;
9
10use crate::{ProtocolEncoding, Vtxo};
11use crate::vtxo::{Full, GenesisTransition};
12
13
14impl Vtxo<Full> {
15	pub fn invalidate_final_sig(&mut self) {
16		let fake: bitcoin::secp256k1::schnorr::Signature = "cc8b93e9f6fbc2506bb85ae8bbb530b178daac49704f5ce2e3ab69c266fd59320b28d028eef212e3b9fdc42cfd2e0760a0359d3ea7d2e9e8cfe2040e3f1b71ea".parse().unwrap();
17		let item = self.genesis.items.last_mut().unwrap();
18		match item.transition {
19			GenesisTransition::Cosigned(ref mut inner) => inner.signature = Some(fake),
20			GenesisTransition::HashLockedCosigned(ref mut inner) => {
21				inner.signature.replace(fake).expect("didn't have signature");
22			},
23			GenesisTransition::Arkoor(ref mut inner) => {
24				inner.signature.replace(fake).expect("didn't have arkoor signature");
25			},
26		}
27	}
28}
29
30/// Test that the object's encoding round-trips.
31pub fn encoding_roundtrip<T>(object: &T)
32where
33	T: ProtocolEncoding + fmt::Debug + PartialEq,
34{
35	let encoded = object.serialize();
36	let decoded = T::deserialize(&encoded).unwrap();
37
38	assert_eq!(*object, decoded);
39
40	let re_encoded = decoded.serialize();
41	assert_eq!(encoded.as_hex().to_string(), re_encoded.as_hex().to_string());
42}
43
44pub fn json_roundtrip<T>(object: &T)
45where
46	T: fmt::Debug + PartialEq + serde::Serialize + for<'de> serde::Deserialize<'de>,
47{
48	let encoded = serde_json::to_string(object).unwrap();
49	let decoded: T = serde_json::from_str(&encoded).unwrap();
50
51	assert_eq!(*object, decoded);
52}
53
54/// Verify a tx using bitcoinkernel
55#[cfg(test)]
56pub fn verify_tx(
57	inputs: &[bitcoin::TxOut],
58	input_idx: usize,
59	tx: &bitcoin::Transaction,
60) -> Result<(), bitcoinkernel::KernelError> {
61	use bitcoinkernel as krn;
62	use bitcoin::consensus::encode::serialize;
63
64	krn::verify(
65		&krn::ScriptPubkey::new(inputs[input_idx].script_pubkey.as_bytes()).unwrap(),
66		Some(inputs[input_idx].value.to_sat() as i64),
67		&krn::Transaction::new(&serialize(tx)).unwrap(),
68		input_idx,
69		Some(krn::VERIFY_ALL),
70		&inputs.iter().map(|i| krn::TxOut::new(
71			&krn::ScriptPubkey::new(i.script_pubkey.as_bytes()).unwrap(),
72			i.value.to_sat() as i64,
73		)).collect::<Vec<_>>(),
74	)
75}