Skip to content

Commit 17d354e

Browse files
committed
pset: test input and output asset blinding factors
1 parent db805b3 commit 17d354e

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

src/pset/mod.rs

+49
Original file line numberDiff line numberDiff line change
@@ -1043,4 +1043,53 @@ mod tests {
10431043
let pset_des = encode::deserialize(&pset_bytes).unwrap();
10441044
assert_eq!(pset, pset_des);
10451045
}
1046+
1047+
#[test]
1048+
fn pset_abf() {
1049+
use std::str::FromStr;
1050+
use rand::{self, SeedableRng};
1051+
let secp = secp256k1_zkp::Secp256k1::new();
1052+
#[allow(deprecated)]
1053+
let mut rng = rand::rngs::StdRng::seed_from_u64(0);
1054+
1055+
let policy = crate::AssetId::from_str("5ac9f65c0efcc4775e0baec4ec03abdde22473cd3cf33c0419ca290e0751b225").unwrap();
1056+
let pk = bitcoin::key::PublicKey::from_str("020202020202020202020202020202020202020202020202020202020202020202").unwrap();
1057+
let script = crate::Script::from_hex("0014d2bcde17e7744f6377466ca1bd35d212954674c8").unwrap();
1058+
let sats_in = 10000;
1059+
let sats_fee = 1000;
1060+
let asset_bf = AssetBlindingFactor::from_str("3311111111111111111111111111111111111111111111111111111111111111").unwrap();
1061+
let btc_txout_secrets = TxOutSecrets {
1062+
asset_bf,
1063+
value_bf: ValueBlindingFactor::from_str("2222222222222222222222222222222222222222222222222222222222222222").unwrap(),
1064+
value: sats_in,
1065+
asset: policy,
1066+
};
1067+
let previous_output = TxOut::default(); // Does not match btc_txout_secrets
1068+
let txid = Txid::from_str("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa").unwrap();
1069+
let prevout = OutPoint::new(txid, 0);
1070+
1071+
let mut pset = PartiallySignedTransaction::new_v2();
1072+
let mut input = Input::from_prevout(prevout);
1073+
input.witness_utxo = Some(previous_output);
1074+
input.asset_blinding_factor = Some(asset_bf);
1075+
pset.add_input(input);
1076+
1077+
// Add policy
1078+
let mut output = Output::new_explicit(script.clone(), sats_in - sats_fee, policy, Some(pk));
1079+
output.blinder_index = Some(0);
1080+
pset.add_output(output);
1081+
// Add fee
1082+
let output = Output::new_explicit(crate::Script::new(), sats_fee, policy, None);
1083+
pset.add_output(output);
1084+
1085+
let mut inp_txout_sec = HashMap::new();
1086+
inp_txout_sec.insert(0, btc_txout_secrets);
1087+
pset.blind_last(&mut rng, &secp, &inp_txout_sec).unwrap();
1088+
let output = &mut pset.outputs_mut()[0];
1089+
// TODO: output the blinding factors and use the correct one
1090+
output.asset_blinding_factor = Some(asset_bf);
1091+
let pset_bytes = encode::serialize(&pset);
1092+
let pset_des = encode::deserialize(&pset_bytes).unwrap();
1093+
assert_eq!(pset, pset_des);
1094+
}
10461095
}

0 commit comments

Comments
 (0)