mirror of
https://github.com/comit-network/xmr-btc-swap.git
synced 2024-11-17 15:26:14 +00:00
Introduce protocol::bob::behaviour to mimic structure from alice module
This commit is contained in:
parent
5b515d6fb2
commit
325fcbdb8c
@ -1,23 +1,19 @@
|
|||||||
use crate::database::Database;
|
use crate::database::Database;
|
||||||
use crate::env::Config;
|
use crate::env::Config;
|
||||||
use crate::network::quote::BidQuote;
|
|
||||||
use crate::network::{encrypted_signature, quote, redial, spot_price, transfer_proof};
|
|
||||||
use crate::protocol::bob;
|
use crate::protocol::bob;
|
||||||
use crate::{bitcoin, monero};
|
use crate::{bitcoin, monero};
|
||||||
use anyhow::{anyhow, Error, Result};
|
use anyhow::Result;
|
||||||
use libp2p::core::Multiaddr;
|
|
||||||
use libp2p::request_response::{RequestId, ResponseChannel};
|
|
||||||
use libp2p::{NetworkBehaviour, PeerId};
|
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
|
pub use self::behaviour::{Behaviour, OutEvent};
|
||||||
pub use self::cancel::cancel;
|
pub use self::cancel::cancel;
|
||||||
pub use self::event_loop::{EventLoop, EventLoopHandle};
|
pub use self::event_loop::{EventLoop, EventLoopHandle};
|
||||||
pub use self::refund::refund;
|
pub use self::refund::refund;
|
||||||
pub use self::state::*;
|
pub use self::state::*;
|
||||||
pub use self::swap::{run, run_until};
|
pub use self::swap::{run, run_until};
|
||||||
use std::time::Duration;
|
|
||||||
|
|
||||||
|
mod behaviour;
|
||||||
pub mod cancel;
|
pub mod cancel;
|
||||||
pub mod event_loop;
|
pub mod event_loop;
|
||||||
mod execution_setup;
|
mod execution_setup;
|
||||||
@ -104,83 +100,3 @@ impl Builder {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub enum OutEvent {
|
|
||||||
QuoteReceived {
|
|
||||||
id: RequestId,
|
|
||||||
response: BidQuote,
|
|
||||||
},
|
|
||||||
SpotPriceReceived {
|
|
||||||
id: RequestId,
|
|
||||||
response: spot_price::Response,
|
|
||||||
},
|
|
||||||
ExecutionSetupDone(Box<Result<State2>>),
|
|
||||||
TransferProofReceived {
|
|
||||||
msg: Box<transfer_proof::Request>,
|
|
||||||
channel: ResponseChannel<()>,
|
|
||||||
},
|
|
||||||
EncryptedSignatureAcknowledged {
|
|
||||||
id: RequestId,
|
|
||||||
},
|
|
||||||
AllRedialAttemptsExhausted {
|
|
||||||
peer: PeerId,
|
|
||||||
},
|
|
||||||
Failure {
|
|
||||||
peer: PeerId,
|
|
||||||
error: Error,
|
|
||||||
},
|
|
||||||
/// "Fallback" variant that allows the event mapping code to swallow certain
|
|
||||||
/// events that we don't want the caller to deal with.
|
|
||||||
Other,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl OutEvent {
|
|
||||||
pub fn unexpected_request(peer: PeerId) -> OutEvent {
|
|
||||||
OutEvent::Failure {
|
|
||||||
peer,
|
|
||||||
error: anyhow!("Unexpected request received"),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn unexpected_response(peer: PeerId) -> OutEvent {
|
|
||||||
OutEvent::Failure {
|
|
||||||
peer,
|
|
||||||
error: anyhow!("Unexpected response received"),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// A `NetworkBehaviour` that represents an XMR/BTC swap node as Bob.
|
|
||||||
#[derive(NetworkBehaviour)]
|
|
||||||
#[behaviour(out_event = "OutEvent", event_process = false)]
|
|
||||||
#[allow(missing_debug_implementations)]
|
|
||||||
pub struct Behaviour {
|
|
||||||
pub quote: quote::Behaviour,
|
|
||||||
pub spot_price: spot_price::Behaviour,
|
|
||||||
pub execution_setup: execution_setup::Behaviour,
|
|
||||||
pub transfer_proof: transfer_proof::Behaviour,
|
|
||||||
pub encrypted_signature: encrypted_signature::Behaviour,
|
|
||||||
pub redial: redial::Behaviour,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Behaviour {
|
|
||||||
pub fn new(alice: PeerId) -> Self {
|
|
||||||
Self {
|
|
||||||
quote: quote::bob(),
|
|
||||||
spot_price: spot_price::bob(),
|
|
||||||
execution_setup: Default::default(),
|
|
||||||
transfer_proof: transfer_proof::bob(),
|
|
||||||
encrypted_signature: encrypted_signature::bob(),
|
|
||||||
redial: redial::Behaviour::new(alice, Duration::from_secs(2)),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Add a known address for the given peer
|
|
||||||
pub fn add_address(&mut self, peer_id: PeerId, address: Multiaddr) {
|
|
||||||
self.quote.add_address(&peer_id, address.clone());
|
|
||||||
self.spot_price.add_address(&peer_id, address.clone());
|
|
||||||
self.transfer_proof.add_address(&peer_id, address.clone());
|
|
||||||
self.encrypted_signature.add_address(&peer_id, address);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
88
swap/src/protocol/bob/behaviour.rs
Normal file
88
swap/src/protocol/bob/behaviour.rs
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
use crate::network::quote::BidQuote;
|
||||||
|
use crate::network::{encrypted_signature, quote, redial, spot_price, transfer_proof};
|
||||||
|
use crate::protocol::bob::{execution_setup, State2};
|
||||||
|
use anyhow::{anyhow, Error, Result};
|
||||||
|
use libp2p::core::Multiaddr;
|
||||||
|
use libp2p::request_response::{RequestId, ResponseChannel};
|
||||||
|
use libp2p::{NetworkBehaviour, PeerId};
|
||||||
|
use std::time::Duration;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub enum OutEvent {
|
||||||
|
QuoteReceived {
|
||||||
|
id: RequestId,
|
||||||
|
response: BidQuote,
|
||||||
|
},
|
||||||
|
SpotPriceReceived {
|
||||||
|
id: RequestId,
|
||||||
|
response: spot_price::Response,
|
||||||
|
},
|
||||||
|
ExecutionSetupDone(Box<Result<State2>>),
|
||||||
|
TransferProofReceived {
|
||||||
|
msg: Box<transfer_proof::Request>,
|
||||||
|
channel: ResponseChannel<()>,
|
||||||
|
},
|
||||||
|
EncryptedSignatureAcknowledged {
|
||||||
|
id: RequestId,
|
||||||
|
},
|
||||||
|
AllRedialAttemptsExhausted {
|
||||||
|
peer: PeerId,
|
||||||
|
},
|
||||||
|
Failure {
|
||||||
|
peer: PeerId,
|
||||||
|
error: Error,
|
||||||
|
},
|
||||||
|
/// "Fallback" variant that allows the event mapping code to swallow certain
|
||||||
|
/// events that we don't want the caller to deal with.
|
||||||
|
Other,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl OutEvent {
|
||||||
|
pub fn unexpected_request(peer: PeerId) -> OutEvent {
|
||||||
|
OutEvent::Failure {
|
||||||
|
peer,
|
||||||
|
error: anyhow!("Unexpected request received"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn unexpected_response(peer: PeerId) -> OutEvent {
|
||||||
|
OutEvent::Failure {
|
||||||
|
peer,
|
||||||
|
error: anyhow!("Unexpected response received"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// A `NetworkBehaviour` that represents an XMR/BTC swap node as Bob.
|
||||||
|
#[derive(NetworkBehaviour)]
|
||||||
|
#[behaviour(out_event = "OutEvent", event_process = false)]
|
||||||
|
#[allow(missing_debug_implementations)]
|
||||||
|
pub struct Behaviour {
|
||||||
|
pub quote: quote::Behaviour,
|
||||||
|
pub spot_price: spot_price::Behaviour,
|
||||||
|
pub execution_setup: execution_setup::Behaviour,
|
||||||
|
pub transfer_proof: transfer_proof::Behaviour,
|
||||||
|
pub encrypted_signature: encrypted_signature::Behaviour,
|
||||||
|
pub redial: redial::Behaviour,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Behaviour {
|
||||||
|
pub fn new(alice: PeerId) -> Self {
|
||||||
|
Self {
|
||||||
|
quote: quote::bob(),
|
||||||
|
spot_price: spot_price::bob(),
|
||||||
|
execution_setup: Default::default(),
|
||||||
|
transfer_proof: transfer_proof::bob(),
|
||||||
|
encrypted_signature: encrypted_signature::bob(),
|
||||||
|
redial: redial::Behaviour::new(alice, Duration::from_secs(2)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Add a known address for the given peer
|
||||||
|
pub fn add_address(&mut self, peer_id: PeerId, address: Multiaddr) {
|
||||||
|
self.quote.add_address(&peer_id, address.clone());
|
||||||
|
self.spot_price.add_address(&peer_id, address.clone());
|
||||||
|
self.transfer_proof.add_address(&peer_id, address.clone());
|
||||||
|
self.encrypted_signature.add_address(&peer_id, address);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user