@@ -1043,4 +1043,53 @@ mod tests {
1043
1043
let pset_des = encode:: deserialize ( & pset_bytes) . unwrap ( ) ;
1044
1044
assert_eq ! ( pset, pset_des) ;
1045
1045
}
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
+ }
1046
1095
}
0 commit comments