@@ -31,17 +31,27 @@ pub use interface::HWIClient;
3131
3232pub mod error;
3333pub mod interface;
34+ pub mod signer;
3435pub mod types;
3536
3637#[ cfg( test) ]
3738mod tests {
39+ use crate :: signer:: HWISigner ;
3840 use crate :: types;
3941 use crate :: HWIClient ;
4042 use std:: collections:: BTreeMap ;
4143 use std:: str:: FromStr ;
44+ use std:: sync:: Arc ;
4245
46+ use bdk:: database:: MemoryDatabase ;
47+ use bdk:: signer:: SignerOrdering ;
48+ use bdk:: KeychainKind ;
49+ use bdk:: SignOptions ;
50+ use bdk:: Wallet ;
4351 use bitcoin:: psbt:: { Input , Output } ;
4452 use bitcoin:: util:: bip32:: { DerivationPath , KeySource } ;
53+ use bitcoin:: Address ;
54+ use bitcoin:: Network ;
4555 use bitcoin:: { secp256k1, Transaction } ;
4656 use bitcoin:: { TxIn , TxOut } ;
4757
@@ -320,4 +330,44 @@ mod tests {
320330 client. wipe_device ( ) . unwrap ( ) ;
321331 }
322332 }
333+ #[ test]
334+ #[ serial]
335+ fn test_create_signer ( ) {
336+ let descriptors = get_first_device ( ) . get_descriptors ( None ) . unwrap ( ) ;
337+ let devices = HWIClient :: enumerate ( ) . unwrap ( ) ;
338+ let custom_signer =
339+ HWISigner :: from_device ( devices. first ( ) . unwrap ( ) , types:: HWIChain :: Test ) . unwrap ( ) ;
340+
341+ let mut wallet = Wallet :: new (
342+ & descriptors. internal [ 0 ] ,
343+ Some ( & descriptors. receive [ 0 ] ) ,
344+ Network :: Testnet ,
345+ MemoryDatabase :: default ( ) ,
346+ )
347+ . unwrap ( ) ;
348+ wallet. add_signer (
349+ KeychainKind :: External ,
350+ SignerOrdering ( 200 ) ,
351+ Arc :: new ( custom_signer) ,
352+ ) ;
353+
354+ let client =
355+ bdk:: electrum_client:: Client :: new ( "ssl://electrum.blockstream.info:60002" ) . unwrap ( ) ;
356+ let blockchain = bdk:: blockchain:: ElectrumBlockchain :: from ( client) ;
357+ wallet
358+ . sync ( & blockchain, bdk:: SyncOptions :: default ( ) )
359+ . unwrap ( ) ;
360+
361+ let balance = wallet. get_balance ( ) . unwrap ( ) ;
362+ let faucet_address = Address :: from_str ( "mv4rnyY3Su5gjcDNzbMLKBQkBicCtHUtFB" ) . unwrap ( ) ;
363+
364+ let mut tx_builder = wallet. build_tx ( ) ;
365+ tx_builder
366+ . add_recipient ( faucet_address. script_pubkey ( ) , balance / 2 )
367+ . enable_rbf ( ) ;
368+ let ( mut psbt, _tx_details) = tx_builder. finish ( ) . unwrap ( ) ;
369+ let finalized = wallet. sign ( & mut psbt, SignOptions :: default ( ) ) . unwrap ( ) ;
370+
371+ assert ! ( finalized, "Tx has not been finalized" ) ;
372+ }
323373}
0 commit comments