@ -493,6 +493,30 @@ impl State4 {
self . b . encsign ( self . S_a_bitcoin , tx_redeem . digest ( ) )
}
pub async fn check_for_tx_redeem (
& self ,
bitcoin_wallet : & bitcoin ::Wallet ,
) -> Result < State5 > {
let tx_redeem =
bitcoin ::TxRedeem ::new ( & self . tx_lock , & self . redeem_address , self . tx_redeem_fee ) ;
let tx_redeem_encsig = self . b . encsign ( self . S_a_bitcoin , tx_redeem . digest ( ) ) ;
let tx_redeem_candidate = bitcoin_wallet . get_raw_transaction ( tx_redeem . txid ( ) ) . await ? ;
let tx_redeem_sig =
tx_redeem . extract_signature_by_key ( tx_redeem_candidate , self . b . public ( ) ) ? ;
let s_a = bitcoin ::recover ( self . S_a_bitcoin , tx_redeem_sig , tx_redeem_encsig ) ? ;
let s_a = monero ::private_key_from_secp256k1_scalar ( s_a . into ( ) ) ;
Ok ( State5 {
s_a ,
s_b : self . s_b ,
v : self . v ,
tx_lock : self . tx_lock . clone ( ) ,
monero_wallet_restore_blockheight : self . monero_wallet_restore_blockheight ,
} )
}
pub async fn watch_for_redeem_btc ( & self , bitcoin_wallet : & bitcoin ::Wallet ) -> Result < State5 > {
let tx_redeem =
bitcoin ::TxRedeem ::new ( & self . tx_lock , & self . redeem_address , self . tx_redeem_fee ) ;