@@ -124,42 +124,88 @@ pub fn local_cert_key() -> (Vec<u8>, Vec<u8>) {
124124 ( cert_der, key_der)
125125}
126126
127- pub fn init_bitcoind_sender_receiver (
128- sender_address_type : Option < AddressType > ,
129- receiver_address_type : Option < AddressType > ,
130- ) -> Result < ( bitcoind:: BitcoinD , bitcoincore_rpc:: Client , bitcoincore_rpc:: Client ) , BoxError > {
127+ pub fn init_bitcoind ( ) -> Result < bitcoind:: BitcoinD , BoxError > {
131128 let bitcoind_exe = env:: var ( "BITCOIND_EXE" )
132129 . ok ( )
133130 . or_else ( || bitcoind:: downloaded_exe_path ( ) . ok ( ) )
134131 . expect ( "bitcoind not found" ) ;
135132 let mut conf = bitcoind:: Conf :: default ( ) ;
136133 conf. view_stdout = log_enabled ! ( Level :: Debug ) ;
137134 let bitcoind = bitcoind:: BitcoinD :: with_conf ( bitcoind_exe, & conf) ?;
138- let receiver = bitcoind. create_wallet ( "receiver" ) ?;
139- let receiver_address = receiver. get_new_address ( None , receiver_address_type) ?. assume_checked ( ) ;
140- let sender = bitcoind. create_wallet ( "sender" ) ?;
141- let sender_address = sender. get_new_address ( None , sender_address_type) ?. assume_checked ( ) ;
142- bitcoind. client . generate_to_address ( 1 , & receiver_address) ?;
143- bitcoind. client . generate_to_address ( 101 , & sender_address) ?;
144-
145- assert_eq ! (
146- Amount :: from_btc( 50.0 ) ?,
147- receiver. get_balances( ) ?. mine. trusted,
148- "receiver doesn't own bitcoin"
149- ) ;
150-
151- assert_eq ! (
152- Amount :: from_btc( 50.0 ) ?,
153- sender. get_balances( ) ?. mine. trusted,
154- "sender doesn't own bitcoin"
155- ) ;
156- Ok ( ( bitcoind, sender, receiver) )
135+ Ok ( bitcoind)
136+ }
137+
138+ pub fn init_bitcoind_sender_receiver (
139+ sender_address_type : Option < AddressType > ,
140+ receiver_address_type : Option < AddressType > ,
141+ ) -> Result < ( bitcoind:: BitcoinD , bitcoincore_rpc:: Client , bitcoincore_rpc:: Client ) , BoxError > {
142+ let bitcoind = init_bitcoind ( ) ?;
143+ let mut wallets = create_and_fund_wallets (
144+ & bitcoind,
145+ vec ! [ ( "receiver" , receiver_address_type) , ( "sender" , sender_address_type) ] ,
146+ ) ?;
147+ let receiver = wallets. pop ( ) . expect ( "receiver to exist" ) ;
148+ let sender = wallets. pop ( ) . expect ( "sender to exist" ) ;
149+
150+ Ok ( ( bitcoind, receiver, sender) )
151+ }
152+
153+ fn create_and_fund_wallets < W : AsRef < str > > (
154+ bitcoind : & bitcoind:: BitcoinD ,
155+ wallets : Vec < ( W , Option < AddressType > ) > ,
156+ ) -> Result < Vec < bitcoincore_rpc:: Client > , BoxError > {
157+ let mut funded_wallets = vec ! [ ] ;
158+ let funding_wallet = bitcoind. create_wallet ( "funding_wallet" ) ?;
159+ let funding_address = funding_wallet. get_new_address ( None , None ) ?. assume_checked ( ) ;
160+ // 100 blocks would work here, we add a extra block to cover fees between transfers
161+ bitcoind. client . generate_to_address ( 101 + wallets. len ( ) as u64 , & funding_address) ?;
162+ for ( wallet_name, address_type) in wallets {
163+ let wallet = bitcoind. create_wallet ( wallet_name) ?;
164+ let address = wallet. get_new_address ( None , address_type) ?. assume_checked ( ) ;
165+ funding_wallet. send_to_address (
166+ & address,
167+ Amount :: from_btc ( 50.0 ) ?,
168+ None ,
169+ None ,
170+ None ,
171+ None ,
172+ None ,
173+ None ,
174+ ) ?;
175+ funded_wallets. push ( wallet) ;
176+ }
177+ // Mine the block which funds the different wallets
178+ bitcoind. client . generate_to_address ( 1 , & funding_address) ?;
179+
180+ for wallet in funded_wallets. iter ( ) {
181+ let balances = wallet. get_balances ( ) ?;
182+ assert_eq ! (
183+ balances. mine. trusted,
184+ Amount :: from_btc( 50.0 ) ?,
185+ "wallet doesn't have expected amount of bitcoin"
186+ ) ;
187+ }
188+
189+ Ok ( funded_wallets)
157190}
158191
159192pub fn http_agent ( cert_der : Vec < u8 > ) -> Result < Client , BoxSendSyncError > {
160193 Ok ( http_agent_builder ( cert_der) . build ( ) ?)
161194}
162195
196+ pub fn init_bitcoind_multi_sender_single_reciever (
197+ number_of_senders : usize ,
198+ ) -> Result < ( bitcoind:: BitcoinD , Vec < bitcoincore_rpc:: Client > , bitcoincore_rpc:: Client ) , BoxError > {
199+ let bitcoind = init_bitcoind ( ) ?;
200+ let wallets_to_create =
201+ ( 0 ..number_of_senders + 1 ) . map ( |i| ( format ! ( "sender_{}" , i) , None ) ) . collect :: < Vec < _ > > ( ) ;
202+ let mut wallets = create_and_fund_wallets ( & bitcoind, wallets_to_create) ?;
203+ let receiver = wallets. pop ( ) . expect ( "reciever to exist" ) ;
204+ let senders = wallets;
205+
206+ Ok ( ( bitcoind, senders, receiver) )
207+ }
208+
163209fn http_agent_builder ( cert_der : Vec < u8 > ) -> ClientBuilder {
164210 ClientBuilder :: new ( ) . use_rustls_tls ( ) . add_root_certificate (
165211 reqwest:: tls:: Certificate :: from_der ( cert_der. as_slice ( ) )
0 commit comments