Skip to content

Commit 47c73df

Browse files
committed
Remove map_errs for ImplementationError
ImplementationErr is a Box<dyn Error...> so most error types can just be coerced with the implicitly `?` operator.
1 parent f58a457 commit 47c73df

File tree

3 files changed

+31
-64
lines changed

3 files changed

+31
-64
lines changed

payjoin-cli/src/app/v1.rs

+7-15
Original file line numberDiff line numberDiff line change
@@ -332,28 +332,21 @@ impl App {
332332
// Receive Check 2: receiver can't sign for proposal inputs
333333
let proposal = proposal.check_inputs_not_owned(|input| {
334334
if let Ok(address) = bitcoin::Address::from_script(input, network) {
335-
bitcoind
336-
.get_address_info(&address)
337-
.map(|info| info.is_mine.unwrap_or(false))
338-
.map_err(ImplementationError::from)
335+
Ok(bitcoind.get_address_info(&address).map(|info| info.is_mine.unwrap_or(false))?)
339336
} else {
340337
Ok(false)
341338
}
342339
})?;
343340
log::trace!("check2");
344341

345342
// Receive Check 3: have we seen this input before? More of a check for non-interactive i.e. payment processor receivers.
346-
let payjoin = proposal.check_no_inputs_seen_before(|input| {
347-
self.db.insert_input_seen_before(*input).map_err(ImplementationError::from)
348-
})?;
343+
let payjoin = proposal
344+
.check_no_inputs_seen_before(|input| Ok(self.db.insert_input_seen_before(*input)?))?;
349345
log::trace!("check3");
350346

351347
let payjoin = payjoin.identify_receiver_outputs(|output_script| {
352348
if let Ok(address) = bitcoin::Address::from_script(output_script, network) {
353-
bitcoind
354-
.get_address_info(&address)
355-
.map(|info| info.is_mine.unwrap_or(false))
356-
.map_err(ImplementationError::from)
349+
Ok(bitcoind.get_address_info(&address).map(|info| info.is_mine.unwrap_or(false))?)
357350
} else {
358351
Ok(false)
359352
}
@@ -379,10 +372,9 @@ impl App {
379372

380373
let payjoin_proposal = provisional_payjoin.finalize_proposal(
381374
|psbt: &Psbt| {
382-
let res = bitcoind
383-
.wallet_process_psbt(&psbt.to_string(), None, None, Some(false))
384-
.map_err(ImplementationError::from)?;
385-
Psbt::from_str(&res.psbt).map_err(ImplementationError::from)
375+
let res =
376+
bitcoind.wallet_process_psbt(&psbt.to_string(), None, None, Some(false))?;
377+
Ok(Psbt::from_str(&res.psbt)?)
386378
},
387379
None,
388380
self.config.max_fee_rate,

payjoin-cli/src/app/v2.rs

+9-16
Original file line numberDiff line numberDiff line change
@@ -266,8 +266,7 @@ impl App {
266266
let proposal =
267267
proposal.check_broadcast_suitability(None, |tx| {
268268
let raw_tx = bitcoin::consensus::encode::serialize_hex(&tx);
269-
let mempool_results =
270-
bitcoind.test_mempool_accept(&[raw_tx]).map_err(ImplementationError::from)?;
269+
let mempool_results = bitcoind.test_mempool_accept(&[raw_tx])?;
271270
match mempool_results.first() {
272271
Some(result) => Ok(result.allowed),
273272
None => Err(ImplementationError::from(
@@ -280,29 +279,24 @@ impl App {
280279
// Receive Check 2: receiver can't sign for proposal inputs
281280
let proposal = proposal.check_inputs_not_owned(|input| {
282281
if let Ok(address) = bitcoin::Address::from_script(input, network) {
283-
bitcoind
284-
.get_address_info(&address)
285-
.map(|info| info.is_mine.unwrap_or(false))
286-
.map_err(ImplementationError::from)
282+
Ok(bitcoind.get_address_info(&address).map(|info| info.is_mine.unwrap_or(false))?)
287283
} else {
288284
Ok(false)
289285
}
290286
})?;
291287
log::trace!("check2");
292288

293289
// Receive Check 3: have we seen this input before? More of a check for non-interactive i.e. payment processor receivers.
294-
let payjoin = proposal.check_no_inputs_seen_before(|input| {
295-
self.db.insert_input_seen_before(*input).map_err(ImplementationError::from)
296-
})?;
290+
let payjoin = proposal
291+
.check_no_inputs_seen_before(|input| Ok(self.db.insert_input_seen_before(*input)?))?;
297292
log::trace!("check3");
298293

299294
let payjoin = payjoin
300295
.identify_receiver_outputs(|output_script| {
301296
if let Ok(address) = bitcoin::Address::from_script(output_script, network) {
302-
bitcoind
297+
Ok(bitcoind
303298
.get_address_info(&address)
304-
.map(|info| info.is_mine.unwrap_or(false))
305-
.map_err(ImplementationError::from)
299+
.map(|info| info.is_mine.unwrap_or(false))?)
306300
} else {
307301
Ok(false)
308302
}
@@ -317,10 +311,9 @@ impl App {
317311

318312
let payjoin_proposal = provisional_payjoin.finalize_proposal(
319313
|psbt: &Psbt| {
320-
let res = bitcoind
321-
.wallet_process_psbt(&psbt.to_string(), None, None, Some(false))
322-
.map_err(ImplementationError::from)?;
323-
Psbt::from_str(&res.psbt).map_err(ImplementationError::from)
314+
let res =
315+
bitcoind.wallet_process_psbt(&psbt.to_string(), None, None, Some(false))?;
316+
Ok(Psbt::from_str(&res.psbt)?)
324317
},
325318
None,
326319
self.config.max_fee_rate,

payjoin/tests/integration.rs

+15-33
Original file line numberDiff line numberDiff line change
@@ -571,34 +571,27 @@ mod integration {
571571
// Receive Check 1: Can Broadcast
572572
let proposal = proposal.check_broadcast_suitability(None, |tx| {
573573
Ok(receiver
574-
.test_mempool_accept(&[bitcoin::consensus::encode::serialize_hex(&tx)])
575-
.map_err(ImplementationError::from)?
574+
.test_mempool_accept(&[bitcoin::consensus::encode::serialize_hex(&tx)])?
576575
.first()
577576
.ok_or(ImplementationError::from("testmempoolaccept should return a result"))?
578577
.allowed)
579578
})?;
580579

581580
// Receive Check 2: receiver can't sign for proposal inputs
582581
let proposal = proposal.check_inputs_not_owned(|input| {
583-
let address = bitcoin::Address::from_script(input, bitcoin::Network::Regtest)
584-
.map_err(ImplementationError::from)?;
585-
receiver
586-
.get_address_info(&address)
587-
.map(|info| info.is_mine.unwrap_or(false))
588-
.map_err(ImplementationError::from)
582+
let address = bitcoin::Address::from_script(input, bitcoin::Network::Regtest)?;
583+
Ok(receiver.get_address_info(&address).map(|info| info.is_mine.unwrap_or(false))?)
589584
})?;
590585

591586
// Receive Check 3: have we seen this input before? More of a check for non-interactive i.e. payment processor receivers.
592587
let payjoin = proposal
593588
.check_no_inputs_seen_before(|_| Ok(false))?
594589
.identify_receiver_outputs(|output_script| {
595590
let address =
596-
bitcoin::Address::from_script(output_script, bitcoin::Network::Regtest)
597-
.map_err(ImplementationError::from)?;
598-
receiver
591+
bitcoin::Address::from_script(output_script, bitcoin::Network::Regtest)?;
592+
Ok(receiver
599593
.get_address_info(&address)
600-
.map(|info| info.is_mine.unwrap_or(false))
601-
.map_err(ImplementationError::from)
594+
.map(|info| info.is_mine.unwrap_or(false))?)
602595
})?;
603596

604597
let payjoin = payjoin.commit_outputs();
@@ -626,7 +619,7 @@ mod integration {
626619
// Sign and finalize the proposal PSBT
627620
let payjoin = payjoin.finalize_proposal(
628621
|psbt: &Psbt| {
629-
receiver
622+
Ok(receiver
630623
.wallet_process_psbt(
631624
&psbt.to_string(),
632625
None,
@@ -635,8 +628,7 @@ mod integration {
635628
)
636629
.map(|res: WalletProcessPsbtResult| {
637630
Psbt::from_str(&res.psbt).expect("psbt should be valid")
638-
})
639-
.map_err(ImplementationError::from)
631+
})?)
640632
},
641633
Some(FeeRate::BROADCAST_MIN),
642634
Some(FeeRate::from_sat_per_vb_unchecked(2)),
@@ -915,34 +907,25 @@ mod integration {
915907
// Receive Check 1: Can Broadcast
916908
let proposal = proposal.check_broadcast_suitability(None, |tx| {
917909
Ok(receiver
918-
.test_mempool_accept(&[bitcoin::consensus::encode::serialize_hex(&tx)])
919-
.map_err(ImplementationError::from)?
910+
.test_mempool_accept(&[bitcoin::consensus::encode::serialize_hex(&tx)])?
920911
.first()
921912
.ok_or(ImplementationError::from("testmempoolaccept should return a result"))?
922913
.allowed)
923914
})?;
924915

925916
// Receive Check 2: receiver can't sign for proposal inputs
926917
let proposal = proposal.check_inputs_not_owned(|input| {
927-
let address = bitcoin::Address::from_script(input, bitcoin::Network::Regtest)
928-
.map_err(ImplementationError::from)?;
929-
receiver
930-
.get_address_info(&address)
931-
.map(|info| info.is_mine.unwrap_or(false))
932-
.map_err(ImplementationError::from)
918+
let address = bitcoin::Address::from_script(input, bitcoin::Network::Regtest)?;
919+
Ok(receiver.get_address_info(&address).map(|info| info.is_mine.unwrap_or(false))?)
933920
})?;
934921

935922
// Receive Check 3: have we seen this input before? More of a check for non-interactive i.e. payment processor receivers.
936923
let payjoin = proposal
937924
.check_no_inputs_seen_before(|_| Ok(false))?
938925
.identify_receiver_outputs(|output_script| {
939926
let address =
940-
bitcoin::Address::from_script(output_script, bitcoin::Network::Regtest)
941-
.map_err(ImplementationError::from)?;
942-
receiver
943-
.get_address_info(&address)
944-
.map(|info| info.is_mine.unwrap_or(false))
945-
.map_err(ImplementationError::from)
927+
bitcoin::Address::from_script(output_script, bitcoin::Network::Regtest)?;
928+
Ok(receiver.get_address_info(&address).map(|info| info.is_mine.unwrap_or(false))?)
946929
})?;
947930

948931
let payjoin = match custom_outputs {
@@ -976,7 +959,7 @@ mod integration {
976959

977960
let payjoin_proposal = payjoin.finalize_proposal(
978961
|psbt: &Psbt| {
979-
receiver
962+
Ok(receiver
980963
.wallet_process_psbt(
981964
&psbt.to_string(),
982965
None,
@@ -985,8 +968,7 @@ mod integration {
985968
)
986969
.map(|res: WalletProcessPsbtResult| {
987970
Psbt::from_str(&res.psbt).expect("psbt should be valid")
988-
})
989-
.map_err(ImplementationError::from)
971+
})?)
990972
},
991973
Some(FeeRate::BROADCAST_MIN),
992974
Some(FeeRate::from_sat_per_vb_unchecked(2)),

0 commit comments

Comments
 (0)