Skip to content

Commit 22c9a5c

Browse files
committed
Let ChannelSigner build the commit tx
1 parent 09cbb8b commit 22c9a5c

File tree

2 files changed

+35
-16
lines changed

2 files changed

+35
-16
lines changed

lightning/src/ln/chan_utils.rs

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1451,10 +1451,8 @@ impl CommitmentTransaction {
14511451

14521452
// Sort outputs and populate output indices while keeping track of the auxiliary data
14531453
let htlcs: Vec<&mut HTLCOutputInCommitment> = htlcs_with_aux.iter_mut().map(|(htlc, _)| htlc).collect();
1454-
let (outputs, sorted_htlcs) = signer.build_outputs(&keys.per_commitment_point, to_broadcaster_value_sat, to_countersignatory_value_sat, htlcs, secp_ctx, is_holder_tx, commitment_number).unwrap();
1454+
let (transaction, sorted_htlcs) = signer.build_transaction(&keys.per_commitment_point, to_broadcaster_value_sat, to_countersignatory_value_sat, htlcs, secp_ctx, is_holder_tx, commitment_number);
14551455

1456-
let (obscured_commitment_transaction_number, txins) = signer.build_inputs(commitment_number, is_holder_tx);
1457-
let transaction = Self::make_transaction(obscured_commitment_transaction_number, txins, outputs);
14581456
let txid = transaction.compute_txid();
14591457
CommitmentTransaction {
14601458
commitment_number,
@@ -1481,13 +1479,10 @@ impl CommitmentTransaction {
14811479
}
14821480

14831481
fn internal_rebuild_transaction<Signer: ChannelSigner>(&self, per_commitment_point: &PublicKey, signer: &Signer, secp_ctx: &Secp256k1<secp256k1::All>, is_holder_tx: bool) -> Result<BuiltCommitmentTransaction, ()> {
1484-
let (obscured_commitment_transaction_number, txins) = signer.build_inputs(self.commitment_number, is_holder_tx);
1485-
14861482
let mut htlcs: Vec<_> = self.htlcs.iter().map(|h| h.clone()).collect();
14871483
let htlcs: Vec<&mut HTLCOutputInCommitment> = htlcs.iter_mut().collect();
1488-
let (outputs, _) = signer.build_outputs(per_commitment_point, self.to_broadcaster_value_sat, self.to_countersignatory_value_sat, htlcs, secp_ctx, is_holder_tx, self.commitment_number)?;
1484+
let (transaction, _) = signer.build_transaction(per_commitment_point, self.to_broadcaster_value_sat, self.to_countersignatory_value_sat, htlcs, secp_ctx, is_holder_tx, self.commitment_number);
14891485

1490-
let transaction = Self::make_transaction(obscured_commitment_transaction_number, txins, outputs);
14911486
let txid = transaction.compute_txid();
14921487
let built_transaction = BuiltCommitmentTransaction {
14931488
transaction,
@@ -1496,15 +1491,6 @@ impl CommitmentTransaction {
14961491
Ok(built_transaction)
14971492
}
14981493

1499-
fn make_transaction(obscured_commitment_transaction_number: u64, txins: Vec<TxIn>, outputs: Vec<TxOut>) -> Transaction {
1500-
Transaction {
1501-
version: Version::TWO,
1502-
lock_time: LockTime::from_consensus(((0x20 as u32) << 8 * 3) | ((obscured_commitment_transaction_number & 0xffffffu64) as u32)),
1503-
input: txins,
1504-
output: outputs,
1505-
}
1506-
}
1507-
15081494
/// The backwards-counting commitment number
15091495
pub fn commitment_number(&self) -> u64 {
15101496
self.commitment_number

lightning/src/sign/mod.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1258,6 +1258,39 @@ pub trait ChannelSigner {
12581258
};
12591259
(obscured_commitment_transaction_number, txins)
12601260
}
1261+
1262+
/// Builds a commitment transaction
1263+
fn build_transaction(
1264+
&self, per_commitment_point: &PublicKey, to_broadcaster_value_sat: Amount,
1265+
to_countersignatory_value_sat: Amount, htlcs: Vec<&mut HTLCOutputInCommitment>,
1266+
secp_ctx: &Secp256k1<secp256k1::All>, is_holder_tx: bool, commitment_number: u64,
1267+
) -> (Transaction, Vec<HTLCOutputInCommitment>) {
1268+
let (obscured_commitment_transaction_number, txins) =
1269+
self.build_inputs(commitment_number, is_holder_tx);
1270+
let (txouts, sorted_htlcs) = self
1271+
.build_outputs(
1272+
per_commitment_point,
1273+
to_broadcaster_value_sat,
1274+
to_countersignatory_value_sat,
1275+
htlcs,
1276+
secp_ctx,
1277+
is_holder_tx,
1278+
commitment_number,
1279+
)
1280+
.unwrap();
1281+
(
1282+
Transaction {
1283+
version: Version::TWO,
1284+
lock_time: LockTime::from_consensus(
1285+
((0x20 as u32) << 8 * 3)
1286+
| ((obscured_commitment_transaction_number & 0xffffffu64) as u32),
1287+
),
1288+
input: txins,
1289+
output: txouts,
1290+
},
1291+
sorted_htlcs,
1292+
)
1293+
}
12611294
}
12621295

12631296
/// Specifies the recipient of an invoice.

0 commit comments

Comments
 (0)