diff --git a/swap/src/protocol.rs b/swap/src/protocol.rs index faab1610..e446759c 100644 --- a/swap/src/protocol.rs +++ b/swap/src/protocol.rs @@ -1,7 +1,9 @@ +use crate::{bitcoin, monero}; use conquer_once::Lazy; use ecdsa_fun::fun::marker::Mark; +use serde::{Deserialize, Serialize}; use sha2::Sha256; -use sigma_fun::ext::dl_secp256k1_ed25519_eq::CrossCurveDLEQ; +use sigma_fun::ext::dl_secp256k1_ed25519_eq::{CrossCurveDLEQ, CrossCurveDLEQProof}; use sigma_fun::HashTranscript; pub mod alice; @@ -18,6 +20,44 @@ pub static CROSS_CURVE_PROOF_SYSTEM: Lazy< #[derive(Debug, Copy, Clone)] pub struct StartingBalances { - pub xmr: crate::monero::Amount, + pub xmr: monero::Amount, pub btc: bitcoin::Amount, } + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Message0 { + B: bitcoin::PublicKey, + S_b_monero: monero::PublicKey, + S_b_bitcoin: bitcoin::PublicKey, + dleq_proof_s_b: CrossCurveDLEQProof, + v_b: monero::PrivateViewKey, + refund_address: bitcoin::Address, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Message1 { + A: bitcoin::PublicKey, + S_a_monero: monero::PublicKey, + S_a_bitcoin: bitcoin::PublicKey, + dleq_proof_s_a: CrossCurveDLEQProof, + v_a: monero::PrivateViewKey, + redeem_address: bitcoin::Address, + punish_address: bitcoin::Address, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Message2 { + tx_lock: bitcoin::TxLock, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Message3 { + tx_cancel_sig: bitcoin::Signature, + tx_refund_encsig: bitcoin::EncryptedSignature, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Message4 { + tx_punish_sig: bitcoin::Signature, + tx_cancel_sig: bitcoin::Signature, +} diff --git a/swap/src/protocol/alice.rs b/swap/src/protocol/alice.rs index 9bc6423d..5909a701 100644 --- a/swap/src/protocol/alice.rs +++ b/swap/src/protocol/alice.rs @@ -8,10 +8,8 @@ use uuid::Uuid; pub use self::behaviour::{Behaviour, OutEvent}; pub use self::event_loop::{EventLoop, EventLoopHandle}; -pub use self::execution_setup::Message1; pub use self::state::*; pub use self::swap::{run, run_until}; -pub use execution_setup::Message3; mod behaviour; pub mod event_loop; diff --git a/swap/src/protocol/alice/execution_setup.rs b/swap/src/protocol/alice/execution_setup.rs index 965b6bd6..d3a37519 100644 --- a/swap/src/protocol/alice/execution_setup.rs +++ b/swap/src/protocol/alice/execution_setup.rs @@ -1,30 +1,9 @@ -use crate::bitcoin::{EncryptedSignature, Signature}; use crate::network::cbor_request_response::BUF_SIZE; use crate::protocol::alice::{State0, State3}; -use crate::protocol::bob::{Message0, Message2, Message4}; -use crate::{bitcoin, monero}; +use crate::protocol::{Message0, Message2, Message4}; use anyhow::{Context, Error}; use libp2p::PeerId; use libp2p_async_await::BehaviourOutEvent; -use serde::{Deserialize, Serialize}; -use sigma_fun::ext::dl_secp256k1_ed25519_eq::CrossCurveDLEQProof; - -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct Message1 { - pub(crate) A: bitcoin::PublicKey, - pub(crate) S_a_monero: monero::PublicKey, - pub(crate) S_a_bitcoin: bitcoin::PublicKey, - pub(crate) dleq_proof_s_a: CrossCurveDLEQProof, - pub(crate) v_a: monero::PrivateViewKey, - pub(crate) redeem_address: bitcoin::Address, - pub(crate) punish_address: bitcoin::Address, -} - -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct Message3 { - pub(crate) tx_cancel_sig: Signature, - pub(crate) tx_refund_encsig: EncryptedSignature, -} #[derive(Debug)] pub enum OutEvent { diff --git a/swap/src/protocol/alice/state.rs b/swap/src/protocol/alice/state.rs index 6507e33d..ecaee48f 100644 --- a/swap/src/protocol/alice/state.rs +++ b/swap/src/protocol/alice/state.rs @@ -5,9 +5,7 @@ use crate::env::Config; use crate::monero::wallet::{TransferRequest, WatchRequest}; use crate::monero::TransferProof; use crate::monero_ext::ScalarExt; -use crate::protocol::alice::{Message1, Message3}; -use crate::protocol::bob::{Message0, Message2, Message4}; -use crate::protocol::CROSS_CURVE_PROOF_SYSTEM; +use crate::protocol::{Message0, Message1, Message2, Message3, Message4, CROSS_CURVE_PROOF_SYSTEM}; use crate::{bitcoin, monero}; use anyhow::{anyhow, bail, Context, Result}; use monero_rpc::wallet::BlockHeight; diff --git a/swap/src/protocol/bob.rs b/swap/src/protocol/bob.rs index 604d879a..2f3b3dd3 100644 --- a/swap/src/protocol/bob.rs +++ b/swap/src/protocol/bob.rs @@ -4,7 +4,6 @@ use crate::network::{encrypted_signature, spot_price}; use crate::protocol::bob; use crate::{bitcoin, monero}; use anyhow::{anyhow, Error, Result}; -pub use execution_setup::{Message0, Message2, Message4}; use libp2p::core::Multiaddr; use libp2p::request_response::{RequestResponseEvent, RequestResponseMessage, ResponseChannel}; use libp2p::{NetworkBehaviour, PeerId}; diff --git a/swap/src/protocol/bob/execution_setup.rs b/swap/src/protocol/bob/execution_setup.rs index 6fa7491e..1c53bf22 100644 --- a/swap/src/protocol/bob/execution_setup.rs +++ b/swap/src/protocol/bob/execution_setup.rs @@ -1,35 +1,11 @@ -use crate::bitcoin::Signature; use crate::network::cbor_request_response::BUF_SIZE; -use crate::protocol::alice::{Message1, Message3}; use crate::protocol::bob::{State0, State2}; +use crate::protocol::{Message1, Message3}; use anyhow::{Context, Error, Result}; use libp2p::PeerId; use libp2p_async_await::BehaviourOutEvent; -use serde::{Deserialize, Serialize}; -use sigma_fun::ext::dl_secp256k1_ed25519_eq::CrossCurveDLEQProof; use std::sync::Arc; -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct Message0 { - pub(crate) B: crate::bitcoin::PublicKey, - pub(crate) S_b_monero: monero::PublicKey, - pub(crate) S_b_bitcoin: crate::bitcoin::PublicKey, - pub(crate) dleq_proof_s_b: CrossCurveDLEQProof, - pub(crate) v_b: crate::monero::PrivateViewKey, - pub(crate) refund_address: bitcoin::Address, -} - -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct Message2 { - pub(crate) tx_lock: crate::bitcoin::TxLock, -} - -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct Message4 { - pub(crate) tx_punish_sig: Signature, - pub(crate) tx_cancel_sig: Signature, -} - #[derive(Debug)] pub enum OutEvent { Done(Result), diff --git a/swap/src/protocol/bob/state.rs b/swap/src/protocol/bob/state.rs index 2b49399c..c70b458e 100644 --- a/swap/src/protocol/bob/state.rs +++ b/swap/src/protocol/bob/state.rs @@ -6,9 +6,7 @@ use crate::monero; use crate::monero::wallet::WatchRequest; use crate::monero::{monero_private_key, TransferProof}; use crate::monero_ext::ScalarExt; -use crate::protocol::alice::{Message1, Message3}; -use crate::protocol::bob::{Message0, Message2, Message4}; -use crate::protocol::CROSS_CURVE_PROOF_SYSTEM; +use crate::protocol::{Message0, Message1, Message2, Message3, Message4, CROSS_CURVE_PROOF_SYSTEM}; use anyhow::{anyhow, bail, Context, Result}; use ecdsa_fun::adaptor::{Adaptor, HashTranscript}; use ecdsa_fun::nonce::Deterministic;