Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions smite-scenarios/src/executor/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1431,7 +1431,7 @@ fn execute_recv_channel_ready_resend_with_new_alias() {
// Instead of a `channel_ready` for the second channel, the target resends
// the first channel's with a different alias but otherwise identical
// contents.
let mut fx = two_funding_negotiations_fixture()
let mut fx = recv_two_accept_channel_fixture()
.queue(&channel_ready_reply(target_pcp))
.queue(&Message::ChannelReady(ChannelReady {
channel_id: funding_channel_id(),
Expand All @@ -1456,7 +1456,7 @@ fn execute_recv_channel_ready_rejects_alias_reused_by_another_channel() {
// The second channel's `channel_ready` advertises the alias the first
// channel already advertised.
let alias = ShortChannelId::from_u64(42);
let err = two_funding_negotiations_fixture()
let err = recv_two_accept_channel_fixture()
.queue(&Message::ChannelReady(ChannelReady {
channel_id: funding_channel_id(),
second_per_commitment_point: sample_pubkey(7),
Expand Down Expand Up @@ -1488,7 +1488,7 @@ fn execute_recv_channel_ready_rejects_alias_matching_another_channels_scid() {
// The second channel advertises an alias matching the first channel's real
// short channel ID.
let alias = FUNDING_SCID;
let err = two_funding_negotiations_fixture()
let err = recv_two_accept_channel_fixture()
.queue(&Message::ChannelReady(ChannelReady {
channel_id: funding_channel_id(),
second_per_commitment_point: sample_pubkey(7),
Expand Down
61 changes: 24 additions & 37 deletions smite-scenarios/src/executor/tests/harness.rs
Original file line number Diff line number Diff line change
Expand Up @@ -170,14 +170,6 @@ impl Fixture {
self
}

/// Records `pending` as the negotiation for its `temporary_channel_id`.
pub fn with_negotiation(mut self, pending: PendingChannel) -> Self {
self.executor
.negotiations
.insert(pending.open_channel.temporary_channel_id, pending);
self
}

/// Queues `msg` as the peer's next reply.
pub fn queue(mut self, msg: &Message) -> Self {
self.executor.conn.recv_queue.push_back(msg.encode());
Expand Down Expand Up @@ -525,50 +517,45 @@ pub fn funded_accept_channel() -> AcceptChannel {
}
}

/// The negotiation of [`funded_open_channel`] and [`funded_accept_channel`].
pub fn sample_funding_negotiation() -> PendingChannel {
PendingChannel {
open_channel: funded_open_channel().message,
accept_channel: Some(funded_accept_channel()),
funding_built: false,
}
/// A [`funded_open_channel`] with a different `temporary_channel_id`, so that
/// it negotiates a second channel.
pub fn second_funded_open_channel() -> SampleOpenChannel {
let mut oc = funded_open_channel();
oc.message.temporary_channel_id = SECOND_TEMPORARY_CHANNEL_ID;
oc
}

/// A [`sample_funding_negotiation`] with a different `temporary_channel_id` and
/// funding amount, so that it funds a different channel.
pub fn second_funding_negotiation() -> PendingChannel {
let mut negotiation = sample_funding_negotiation();
negotiation.open_channel.temporary_channel_id = SECOND_TEMPORARY_CHANNEL_ID;
negotiation.open_channel.funding_satoshis = 20_000_000;
negotiation
.accept_channel
.as_mut()
.expect("accept_channel present")
.temporary_channel_id = SECOND_TEMPORARY_CHANNEL_ID;

negotiation
/// The target's `accept_channel` for [`second_funded_open_channel`].
pub fn second_funded_accept_channel() -> AcceptChannel {
AcceptChannel {
temporary_channel_id: SECOND_TEMPORARY_CHANNEL_ID,
// `AcceptChannelOracle` rejects a per-commitment point reused from
// another channel.
first_per_commitment_point: sample_pubkey(12),
..funded_accept_channel()
}
}

/// The channel id [`second_funding_negotiation`]'s funding transaction
/// produces.
/// The channel id the second channel's funding transaction produces, funded
/// from the second UTXO of [`two_funding_negotiations_fixture`].
pub fn second_funding_channel_id() -> ChannelId {
ChannelId::v1_from_funding_outpoint(OutPoint {
txid: "cb6f11974ce6265f81037dc7c0e3f054462f645361bc1e10c208f132f4acbe8d"
txid: "4babf25e65e63224c937fb3b8a31a813d91936bf5c3c5cd7fd1e83986ddc90ee"
.parse()
.expect("valid txid"),
vout: 0,
})
}

/// A fixture with both [`sample_funding_negotiation`] and
/// [`second_funding_negotiation`] seeded, and a UTXO to fund each.
pub fn two_funding_negotiations_fixture() -> Fixture {
/// A fixture with the target's `accept_channel` for both
/// [`funded_open_channel`] and [`second_funded_open_channel`] queued, and a
/// UTXO to fund each.
pub fn recv_two_accept_channel_fixture() -> Fixture {
let mut second_utxo = sample_utxo();
second_utxo.amount = Amount::from_sat(20_010_000);
second_utxo.outpoint.vout = 1;

Fixture::new()
.with_utxos(vec![sample_utxo(), second_utxo])
.with_negotiation(sample_funding_negotiation())
.with_negotiation(second_funding_negotiation())
.queue(&Message::AcceptChannel(funded_accept_channel()))
.queue(&Message::AcceptChannel(second_funded_accept_channel()))
}
25 changes: 17 additions & 8 deletions smite-scenarios/src/executor/tests/programs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

use super::harness::{
PointSource, SampleOpenChannel, TEMPORARY_CHANNEL_ID, acceptor_funding_sk, funded_open_channel,
opener_funding_sk, second_funding_negotiation,
opener_funding_sk, second_funded_open_channel,
};
use crate::executor::*;
use smite_ir::Instruction;
Expand Down Expand Up @@ -345,17 +345,26 @@ pub fn recv_channel_ready_program(confirmations: u8) -> Program {
b.build()
}

/// A program that sends `funding_created` for both negotiations of
/// `two_funding_negotiations_fixture` without awaiting `funding_signed`, mines
/// to their `minimum_depth`, and receives a `channel_ready` for each.
/// A program that negotiates [`funded_open_channel`] and
/// [`second_funded_open_channel`], sends `funding_created` for both without
/// awaiting `funding_signed`, mines to their `minimum_depth`, and receives a
/// `channel_ready` for each.
pub fn recv_two_channel_ready_program() -> Program {
let second = second_funding_negotiation().open_channel;
let second = second_funded_open_channel();

let mut b = ProgramBuilder::new();
negotiate_channel(&mut b, &funded_open_channel());
negotiate_channel(&mut b, &second);
send_funding_created(&mut b);
let tx = create_funding_tx_with(&mut b, second.funding_satoshis, FUNDING_FEERATE_PER_KW);
let temporary_channel_id =
b.append(Operation::LoadChannelId(second.temporary_channel_id.0), &[]);
let tx = create_funding_tx_with(
&mut b,
second.message.funding_satoshis,
FUNDING_FEERATE_PER_KW,
);
let temporary_channel_id = b.append(
Operation::LoadChannelId(second.message.temporary_channel_id.0),
&[],
);
b.append(
Operation::SendFundingCreated,
&[
Expand Down
Loading