diff --git a/swap/src/alice/execution.rs b/swap/src/alice/execution.rs index 3c74d4d9..c1c83db4 100644 --- a/swap/src/alice/execution.rs +++ b/swap/src/alice/execution.rs @@ -71,16 +71,6 @@ pub async fn negotiate( // TODO: get an ack from libp2p2 swarm.send_amounts(channel, amounts); - let event = timeout(*BOB_TIME_TO_ACT, swarm.next()) - .await - .context("Failed to receive message 0 from Bob")?; - let message0 = match event { - OutEvent::Message0(msg) => msg, - other => bail!("Unexpected event received: {:?}", other), - }; - - let SwapAmounts { btc, xmr } = amounts; - let redeem_address = bitcoin_wallet.as_ref().new_address().await?; let punish_address = redeem_address.clone(); @@ -88,14 +78,27 @@ pub async fn negotiate( a, s_a, v_a, - btc, - xmr, + amounts.btc, + amounts.xmr, REFUND_TIMELOCK, PUNISH_TIMELOCK, redeem_address, punish_address, ); + // TODO(Franck): Understand why this is needed. + swarm.set_state0(state0.clone()); + + let event = timeout(*BOB_TIME_TO_ACT, swarm.next()) + .await + .context("Failed to receive message 0 from Bob")?; + let message0 = match event { + OutEvent::Message0(msg) => msg, + other => bail!("Unexpected event received: {:?}", other), + }; + + let SwapAmounts { btc, xmr } = amounts; + let state1 = state0.receive(message0)?; let event = timeout(*BOB_TIME_TO_ACT, swarm.next())