mirror of
https://github.com/conduition/dlctix.git
synced 2026-01-04 16:44:20 +01:00
initial prototype of player client
This commit is contained in:
15
Cargo.lock
generated
15
Cargo.lock
generated
@@ -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"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
[workspace]
|
||||
members = ["demo/mm_server"]
|
||||
members = ["demo/mm_server", "demo/player_client"]
|
||||
|
||||
[package]
|
||||
name = "dlctix"
|
||||
|
||||
@@ -9,3 +9,4 @@ edition = "2021"
|
||||
bitcoin = "0.31.1"
|
||||
dlctix = { version = "0.0.4", path = "../.." }
|
||||
serde = "1.0.197"
|
||||
serdect = "0.2.0"
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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();
|
||||
|
||||
16
demo/player_client/Cargo.toml
Normal file
16
demo/player_client/Cargo.toml
Normal 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"
|
||||
63
demo/player_client/src/main.rs
Normal file
63
demo/player_client/src/main.rs
Normal 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");
|
||||
}
|
||||
Reference in New Issue
Block a user