Browse Source

Define and implement TransactionExt::outpoint

integrate-protocol-maker-side
Lucas Soriano del Pino 4 years ago
parent
commit
66c4c58a2d
No known key found for this signature in database GPG Key ID: EE611E973A1530E7
  1. 59
      cfd_protocol/src/lib.rs

59
cfd_protocol/src/lib.rs

@ -3,6 +3,7 @@ use bdk::bitcoin::hashes::hex::ToHex;
use bdk::bitcoin::hashes::*;
use bdk::bitcoin::util::bip143::SigHashCache;
use bdk::bitcoin::util::psbt::{Global, PartiallySignedTransaction};
use bdk::bitcoin::Script;
use bdk::bitcoin::{
Address, Amount, OutPoint, PublicKey, SigHash, SigHashType, Transaction, TxIn, TxOut,
};
@ -334,21 +335,12 @@ pub fn punish_transaction(
.find_map(|sig| encsig.recover(SECP256K1, &sig, &pub_them_pk.key).ok())
.context("could not recover publish sk from commit tx")?;
let commit_vout = revoked_commit_tx
.output
.iter()
.position(|out| out.script_pubkey == commit_descriptor.script_pubkey())
let commit_outpoint = revoked_commit_tx
.outpoint(&commit_descriptor.script_pubkey())
.expect("to find commit output in commit tx");
let commit_amount = revoked_commit_tx.output[commit_vout].value;
let commit_amount = revoked_commit_tx.output[commit_outpoint.vout as usize].value;
let mut punish_tx = {
let txid = revoked_commit_tx.txid();
let previous_output = OutPoint {
txid,
vout: commit_vout as u32,
};
let output = TxOut {
value: commit_amount,
script_pubkey: address.script_pubkey(),
@ -357,7 +349,7 @@ pub fn punish_transaction(
version: 2,
lock_time: 0,
input: vec![TxIn {
previous_output,
previous_output: commit_outpoint,
..Default::default()
}],
output: vec![output],
@ -731,16 +723,10 @@ impl CommitTransaction {
) -> Result<Self> {
let lock_descriptor = lock_descriptor(maker_pk, taker_pk);
let (lock_outpoint, lock_amount) = {
let vout = lock_tx
.output
.iter()
.position(|out| out.script_pubkey == lock_descriptor.script_pubkey())
let outpoint = lock_tx
.outpoint(&lock_descriptor.script_pubkey())
.context("lock script not found in lock tx")?;
let outpoint = OutPoint {
txid: lock_tx.txid(),
vout: vout as u32,
};
let amount = lock_tx.output[vout].value;
let amount = lock_tx.output[outpoint.vout as usize].value;
(outpoint, amount)
};
@ -798,18 +784,9 @@ impl CommitTransaction {
}
fn outpoint(&self) -> OutPoint {
let txid = self.inner.txid();
let vout = self
.inner
.output
.iter()
.position(|out| out.script_pubkey == self.descriptor.script_pubkey())
.expect("to find commit output in commit tx");
OutPoint {
txid,
vout: vout as u32,
}
self.inner
.outpoint(&self.descriptor.script_pubkey())
.expect("to find commit output in commit tx")
}
fn amount(&self) -> Amount {
@ -886,12 +863,26 @@ fn lock_transaction(
pub trait TransactionExt {
fn get_virtual_size(&self) -> f64;
fn outpoint(&self, script_pubkey: &Script) -> Result<OutPoint>;
}
impl TransactionExt for Transaction {
fn get_virtual_size(&self) -> f64 {
self.get_weight() as f64 / 4.0
}
fn outpoint(&self, script_pubkey: &Script) -> Result<OutPoint> {
let vout = self
.output
.iter()
.position(|out| &out.script_pubkey == script_pubkey)
.context("script pubkey not found in tx")?;
Ok(OutPoint {
txid: self.txid(),
vout: vout as u32,
})
}
}
trait SigHashExt {

Loading…
Cancel
Save