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, CrossCurveDLEQProof}; use sigma_fun::HashTranscript; pub mod alice; pub mod bob; pub static CROSS_CURVE_PROOF_SYSTEM: Lazy< CrossCurveDLEQ>, > = Lazy::new(|| { CrossCurveDLEQ::>::new( (*ecdsa_fun::fun::G).mark::(), curve25519_dalek::constants::ED25519_BASEPOINT_POINT, ) }); #[derive(Debug, Copy, Clone)] pub struct StartingBalances { 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 { psbt: bitcoin::PartiallySignedTransaction, } #[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, }