Skip to content

Commit

Permalink
Merge pull request #17 from psyberfly/trunk
Browse files Browse the repository at this point in the history
Error handling: removed unwrap() from bitcoin.rs, liquid.rs, util/secrets.rs
  • Loading branch information
i5hi authored Feb 13, 2024
2 parents 06664fd + f875d52 commit 2408c77
Show file tree
Hide file tree
Showing 4 changed files with 194 additions and 135 deletions.
77 changes: 36 additions & 41 deletions src/swaps/bitcoin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -90,27 +90,24 @@ impl BtcSwapScript {
}
}

if hashlock.is_some()
&& sender_pubkey.is_some()
&& timelock.is_some()
&& sender_pubkey.is_some()
{
Ok(BtcSwapScript {
swap_type: SwapType::Submarine,
hashlock: hashlock.unwrap(),
reciever_pubkey: reciever_pubkey.unwrap(),
timelock: timelock.unwrap(),
sender_pubkey: sender_pubkey.unwrap(),
})
} else {
Err(S5Error::new(
ErrorKind::Input,
&format!(
"Could not extract all elements: {:?} {:?} {:?} {:?}",
hashlock, reciever_pubkey, timelock, sender_pubkey
),
))
}
let hashlock =
hashlock.ok_or_else(|| S5Error::new(ErrorKind::Input, "No hashlock provided"))?;

let sender_pubkey = sender_pubkey
.ok_or_else(|| S5Error::new(ErrorKind::Input, "No sender_pubkey provided"))?;

let timelock =
timelock.ok_or_else(|| S5Error::new(ErrorKind::Input, "No timelock provided"))?;

let reciever_pubkey = reciever_pubkey
.ok_or_else(|| S5Error::new(ErrorKind::Input, "No receiver_pubkey provided"))?;
Ok(BtcSwapScript {
swap_type: SwapType::Submarine,
hashlock: hashlock,
reciever_pubkey: reciever_pubkey,
timelock: timelock,
sender_pubkey: sender_pubkey,
})
}

/// Create the struct from a reverse swap redeem_script string.
Expand Down Expand Up @@ -153,27 +150,25 @@ impl BtcSwapScript {
_ => (),
}
}
let hashlock =
hashlock.ok_or_else(|| S5Error::new(ErrorKind::Input, "No hashlock provided"))?;

if hashlock.is_some()
&& sender_pubkey.is_some()
&& timelock.is_some()
&& sender_pubkey.is_some()
{
Ok(BtcSwapScript {
swap_type: SwapType::ReverseSubmarine,
hashlock: hashlock.unwrap(),
reciever_pubkey: reciever_pubkey.unwrap(),
timelock: timelock.unwrap(),
sender_pubkey: sender_pubkey.unwrap(),
})
} else {
Err(S5Error::new(
ErrorKind::Input,
&format!(
"Could not extract all script elements. Check your redeem script and swap_type."
),
))
}
let sender_pubkey = sender_pubkey
.ok_or_else(|| S5Error::new(ErrorKind::Input, "No sender_pubkey provided"))?;

let timelock =
timelock.ok_or_else(|| S5Error::new(ErrorKind::Input, "No timelock provided"))?;

let reciever_pubkey = reciever_pubkey
.ok_or_else(|| S5Error::new(ErrorKind::Input, "No receiver_pubkey provided"))?;

Ok(BtcSwapScript {
swap_type: SwapType::ReverseSubmarine,
hashlock: hashlock,
reciever_pubkey: reciever_pubkey,
timelock: timelock,
sender_pubkey: sender_pubkey,
})
}

/// Internally used to convert struct into a bitcoin::Script type
Expand Down
109 changes: 54 additions & 55 deletions src/swaps/liquid.rs
Original file line number Diff line number Diff line change
Expand Up @@ -106,33 +106,31 @@ impl LBtcSwapScript {
}
}

if hashlock.is_some()
&& sender_pubkey.is_some()
&& timelock.is_some()
&& sender_pubkey.is_some()
{
let zksecp = Secp256k1::new();

Ok(LBtcSwapScript {
swap_type: SwapType::Submarine,
hashlock: hashlock.unwrap(),
reciever_pubkey: reciever_pubkey.unwrap(),
timelock: timelock.unwrap(),
sender_pubkey: sender_pubkey.unwrap(),
blinding_key: match ZKKeyPair::from_seckey_str(&zksecp, &blinding_str) {
Ok(result) => result,
Err(e) => return Err(S5Error::new(ErrorKind::Input, &e.to_string())),
},
})
} else {
Err(S5Error::new(
ErrorKind::Input,
&format!(
"Could not extract all elements: {:?} {:?} {:?} {:?}",
hashlock, reciever_pubkey, timelock, sender_pubkey
),
))
}
let hashlock =
hashlock.ok_or_else(|| S5Error::new(ErrorKind::Input, "No hashlock provided"))?;

let sender_pubkey = sender_pubkey
.ok_or_else(|| S5Error::new(ErrorKind::Input, "No sender_pubkey provided"))?;

let timelock =
timelock.ok_or_else(|| S5Error::new(ErrorKind::Input, "No timelock provided"))?;

let reciever_pubkey = reciever_pubkey
.ok_or_else(|| S5Error::new(ErrorKind::Input, "No receiver_pubkey provided"))?;

let zksecp = Secp256k1::new();

Ok(LBtcSwapScript {
swap_type: SwapType::Submarine,
hashlock: hashlock,
reciever_pubkey: reciever_pubkey,
timelock: timelock,
sender_pubkey: sender_pubkey,
blinding_key: match ZKKeyPair::from_seckey_str(&zksecp, &blinding_str) {
Ok(result) => result,
Err(e) => return Err(S5Error::new(ErrorKind::Input, &e.to_string())),
},
})
}

/// Create the struct from a reverse swap redeem_script string.
Expand Down Expand Up @@ -175,33 +173,31 @@ impl LBtcSwapScript {
}
}

if hashlock.is_some()
&& sender_pubkey.is_some()
&& timelock.is_some()
&& sender_pubkey.is_some()
{
let zksecp = Secp256k1::new();

Ok(LBtcSwapScript {
swap_type: SwapType::ReverseSubmarine,
hashlock: hashlock.unwrap(),
reciever_pubkey: reciever_pubkey.unwrap(),
timelock: timelock.unwrap(),
sender_pubkey: sender_pubkey.unwrap(),
blinding_key: match ZKKeyPair::from_seckey_str(&zksecp, &blinding_str) {
Ok(result) => result,
Err(e) => return Err(S5Error::new(ErrorKind::Input, &e.to_string())),
},
})
} else {
Err(S5Error::new(
ErrorKind::Input,
&format!(
"Could not extract all elements: {:?} {:?} {:?} {:?}",
hashlock, reciever_pubkey, timelock, sender_pubkey
),
))
}
let hashlock =
hashlock.ok_or_else(|| S5Error::new(ErrorKind::Input, "No hashlock provided"))?;

let sender_pubkey = sender_pubkey
.ok_or_else(|| S5Error::new(ErrorKind::Input, "No sender_pubkey provided"))?;

let timelock =
timelock.ok_or_else(|| S5Error::new(ErrorKind::Input, "No timelock provided"))?;

let reciever_pubkey = reciever_pubkey
.ok_or_else(|| S5Error::new(ErrorKind::Input, "No receiver_pubkey provided"))?;

let zksecp = Secp256k1::new();

Ok(LBtcSwapScript {
swap_type: SwapType::ReverseSubmarine,
hashlock: hashlock,
reciever_pubkey: reciever_pubkey,
timelock: timelock,
sender_pubkey: sender_pubkey,
blinding_key: match ZKKeyPair::from_seckey_str(&zksecp, &blinding_str) {
Ok(result) => result,
Err(e) => return Err(S5Error::new(ErrorKind::Input, &e.to_string())),
},
})
}

/// Internally used to convert struct into a bitcoin::Script type
Expand Down Expand Up @@ -450,7 +446,10 @@ impl LBtcSwapScript {
if !is_blinded {
let el_txid = tx.clone().txid();
let outpoint_0 = OutPoint::new(el_txid, vout);
return Ok((outpoint_0, output.value.explicit().unwrap(), None, None));
let output_explicit = output.value.explicit().ok_or_else(|| {
S5Error::new(ErrorKind::Input, "No sender_pubkey provided")
})?;
return Ok((outpoint_0, output_explicit, None, None));
} else {
let unblinded = match output.unblind(&zksecp, self.blinding_key.secret_key()) {
Ok(result) => result,
Expand Down
Loading

0 comments on commit 2408c77

Please sign in to comment.