initial prototype of player client

This commit is contained in:
conduition
2024-03-18 20:27:03 +00:00
parent a011cf5e44
commit 23e7a116bf
7 changed files with 99 additions and 3 deletions

15
Cargo.lock generated
View File

@@ -107,6 +107,7 @@ dependencies = [
"bitcoin",
"dlctix",
"serde",
"serdect",
]
[[package]]
@@ -287,6 +288,20 @@ version = "1.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
[[package]]
name = "player_client"
version = "0.1.0"
dependencies = [
"bitcoin",
"common",
"dlctix",
"hex",
"rand",
"serde",
"serde_cbor",
"serde_json",
]
[[package]]
name = "ppv-lite86"
version = "0.2.17"

View File

@@ -1,5 +1,5 @@
[workspace]
members = ["demo/mm_server"]
members = ["demo/mm_server", "demo/player_client"]
[package]
name = "dlctix"

View File

@@ -9,3 +9,4 @@ edition = "2021"
bitcoin = "0.31.1"
dlctix = { version = "0.0.4", path = "../.." }
serde = "1.0.197"
serdect = "0.2.0"

View File

@@ -14,12 +14,14 @@ pub type OutcomeOdds = BTreeMap<Outcome, u64>;
#[derive(Serialize, Deserialize)]
pub struct ClientHello {
pub player_pubkey: Point,
#[serde(serialize_with = "serdect::array::serialize_hex_lower_or_bin")]
pub payout_hash: [u8; 32],
}
#[derive(Serialize, Deserialize)]
pub struct ServerHello {
pub player_id: PlayerID,
#[serde(serialize_with = "serdect::array::serialize_hex_lower_or_bin")]
pub ticket_hash: [u8; 32],
pub market_maker_pubkey: Point,
pub event: EventAnnouncement,

View File

@@ -18,8 +18,7 @@ use std::{
};
fn run_server() -> Result<(), Box<dyn Error>> {
let bind_addr =
env::var("MM_SERVER_BIND_ADDRESS").unwrap_or_else(|_| "0.0.0.0:1420".to_string());
let bind_addr = env::var("MM_SERVER_ADDRESS").unwrap_or_else(|_| "0.0.0.0:1420".to_string());
let market_maker_seckey: Scalar = env::var("MM_SECRET_KEY")?.parse()?;
let market_maker_pubkey = market_maker_seckey.base_point_mul();

View File

@@ -0,0 +1,16 @@
[package]
name = "player_client"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
dlctix = { version = "0.0.4", path = "../.." }
serde_cbor = "0.11.2"
common = { path = "../common" }
bitcoin = "0.31.1"
rand = "0.8.5"
hex = "0.4.3"
serde = "1.0.197"
serde_json = "1.0.114"

View File

@@ -0,0 +1,63 @@
use bitcoin::Amount;
use common::{ClientHello, Intent, ServerHello};
use dlctix::secp::Scalar;
use dlctix::{hashlock, Outcome};
use std::{env, error::Error, net};
fn run_client() -> Result<(), Box<dyn Error>> {
let market_maker_server_address = env::var("MM_SERVER_ADDRESS")?;
let mut rng = rand::thread_rng();
let payout_preimage = hashlock::preimage_random(&mut rng);
let payout_hash = hashlock::sha256(&payout_preimage);
let seckey = Scalar::random(&mut rng);
let pubkey = seckey.base_point_mul();
println!("secret key: {:x}", seckey);
println!(" public key: {:x}", pubkey);
println!("");
println!("payout preimage: {}", hex::encode(&payout_preimage));
println!(" payout hash: {}", hex::encode(&payout_hash));
println!("");
println!("Connecting to {}...", market_maker_server_address);
let conn = net::TcpStream::connect(&market_maker_server_address)?;
println!("Connection established; sending ClientHello...");
serde_cbor::to_writer(
&conn,
&ClientHello {
player_pubkey: pubkey,
payout_hash,
},
)?;
let server_hello: ServerHello = serde_cbor::from_reader(&conn)?;
println!(
"received ServerHello: {}",
serde_json::to_string_pretty(&server_hello).unwrap()
);
let intent = Intent {
outcome: Outcome::Attestation(0),
budget: Amount::from_sat(200_000),
};
println!(
"sending Intent: {}",
serde_json::to_string_pretty(&intent).unwrap()
);
serde_cbor::to_writer(&conn, &intent)?;
Ok(())
}
fn main() {
if let Err(e) = run_client() {
eprintln!("fatal error: {}", e);
std::process::exit(1);
}
println!("exiting OK");
}