@@ -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