diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..2aee60b --- /dev/null +++ b/.env.example @@ -0,0 +1,6 @@ +# Polymarket API Credentials +# Copy this file to .env and fill in your actual credentials + +POLYMARKET_API_KEY=your-api-key-here +POLYMARKET_SECRET=your-secret-here +POLYMARKET_PASSPHRASE=your-passphrase-here diff --git a/.gitignore b/.gitignore index 6dbfb97..1c0272b 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,6 @@ tarpaulin-report.html *.profraw /target/tarpaulin/ +# Environment variables (contains secrets) +.env + diff --git a/Cargo.lock b/Cargo.lock index 817558c..bae1d9e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1189,6 +1189,12 @@ dependencies = [ "syn 2.0.104", ] +[[package]] +name = "dotenv" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" + [[package]] name = "dunce" version = "1.0.5" @@ -2414,6 +2420,7 @@ dependencies = [ "bytes", "chrono", "criterion", + "dotenv", "env_logger", "futures", "futures-util", diff --git a/Cargo.toml b/Cargo.toml index badefc7..814c39d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,6 +24,7 @@ reqwest = { version = "0.12", features = ["json", "stream", "gzip"] } # Serialization serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" +dotenv = "0.15" # Ethereum and crypto alloy-primitives = "0.8" diff --git a/examples/authenticated_benchmark.rs b/examples/authenticated_benchmark.rs index 5265e76..05e3e07 100644 --- a/examples/authenticated_benchmark.rs +++ b/examples/authenticated_benchmark.rs @@ -5,18 +5,21 @@ use std::time::Instant; #[tokio::main] async fn main() -> Result<(), Box> { + // Load environment variables from .env file + dotenv::dotenv().ok(); + println!("šŸ” Authenticated Network Benchmark - Real Order Creation"); println!("======================================================="); - println!("To run with real credentials, set environment variables:"); - println!(" export POLYMARKET_API_KEY=your-api-key"); - println!(" export POLYMARKET_SECRET=your-secret"); - println!(" export POLYMARKET_PASSPHRASE=your-passphrase"); - println!(""); - // API credentials from environment variables - let _api_key = std::env::var("POLYMARKET_API_KEY").unwrap_or_else(|_| "your-api-key".to_string()); - let _secret = std::env::var("POLYMARKET_SECRET").unwrap_or_else(|_| "your-secret".to_string()); - let _passphrase = std::env::var("POLYMARKET_PASSPHRASE").unwrap_or_else(|_| "your-passphrase".to_string()); + // API credentials from .env file + let _api_key = std::env::var("POLYMARKET_API_KEY") + .map_err(|_| "POLYMARKET_API_KEY not found in .env file")?; + let _secret = std::env::var("POLYMARKET_SECRET") + .map_err(|_| "POLYMARKET_SECRET not found in .env file")?; + let _passphrase = std::env::var("POLYMARKET_PASSPHRASE") + .map_err(|_| "POLYMARKET_PASSPHRASE not found in .env file")?; + + println!("āœ… Loaded API credentials from .env file"); let client = ClobClient::new_internet("https://clob.polymarket.com"); diff --git a/examples/env_example.rs b/examples/env_example.rs new file mode 100644 index 0000000..00cd4f7 --- /dev/null +++ b/examples/env_example.rs @@ -0,0 +1,48 @@ +use polyfill_rs::ClobClient; + +#[tokio::main] +async fn main() -> Result<(), Box> { + // Load environment variables from .env file + dotenv::dotenv().ok(); + + println!("šŸ”§ Environment Configuration Example"); + println!("==================================="); + + // Check if credentials are available + match ( + std::env::var("POLYMARKET_API_KEY"), + std::env::var("POLYMARKET_SECRET"), + std::env::var("POLYMARKET_PASSPHRASE"), + ) { + (Ok(api_key), Ok(secret), Ok(passphrase)) => { + println!("āœ… All credentials loaded from .env file:"); + println!(" API Key: {}...{}", &api_key[..8], &api_key[api_key.len()-8..]); + println!(" Secret: {}...{}", &secret[..8], &secret[secret.len()-8..]); + println!(" Passphrase: {}...{}", &passphrase[..8], &passphrase[passphrase.len()-8..]); + + // Create client (would normally use these credentials) + let client = ClobClient::new_internet("https://clob.polymarket.com"); + + // Test basic connectivity + println!("\n🌐 Testing connectivity..."); + match client.get_server_time().await { + Ok(timestamp) => { + println!("āœ… Server time: {}", timestamp); + println!("šŸš€ Ready for authenticated operations!"); + } + Err(e) => { + println!("āŒ Connection error: {}", e); + } + } + } + _ => { + println!("āŒ Missing credentials in .env file"); + println!("šŸ“ Create a .env file with:"); + println!(" POLYMARKET_API_KEY=your-api-key"); + println!(" POLYMARKET_SECRET=your-secret"); + println!(" POLYMARKET_PASSPHRASE=your-passphrase"); + } + } + + Ok(()) +} diff --git a/examples/real_network_benchmark.rs b/examples/real_network_benchmark.rs index c32e809..96e95e8 100644 --- a/examples/real_network_benchmark.rs +++ b/examples/real_network_benchmark.rs @@ -5,21 +5,24 @@ use std::time::Instant; #[tokio::main] async fn main() -> Result<(), Box> { + // Load environment variables from .env file + dotenv::dotenv().ok(); + println!("šŸš€ Real Network Benchmark - polyfill-rs vs polymarket-rs-client"); println!("================================================================"); - println!("To run with real credentials, set environment variables:"); - println!(" export POLYMARKET_API_KEY=your-api-key"); - println!(" export POLYMARKET_SECRET=your-secret"); - println!(" export POLYMARKET_PASSPHRASE=your-passphrase"); - println!(""); // Set up client with credentials let client = ClobClient::new("https://clob.polymarket.com"); - // API credentials from environment variables - let _api_key = std::env::var("POLYMARKET_API_KEY").unwrap_or_else(|_| "your-api-key".to_string()); - let _secret = std::env::var("POLYMARKET_SECRET").unwrap_or_else(|_| "your-secret".to_string()); - let _passphrase = std::env::var("POLYMARKET_PASSPHRASE").unwrap_or_else(|_| "your-passphrase".to_string()); + // API credentials from .env file + let _api_key = std::env::var("POLYMARKET_API_KEY") + .map_err(|_| "POLYMARKET_API_KEY not found in .env file")?; + let _secret = std::env::var("POLYMARKET_SECRET") + .map_err(|_| "POLYMARKET_SECRET not found in .env file")?; + let _passphrase = std::env::var("POLYMARKET_PASSPHRASE") + .map_err(|_| "POLYMARKET_PASSPHRASE not found in .env file")?; + + println!("āœ… Loaded API credentials from .env file"); println!("šŸ”‘ Using API credentials for authenticated requests"); diff --git a/scripts/network_benchmark.sh b/scripts/network_benchmark.sh index 2f85c0c..59c8eab 100755 --- a/scripts/network_benchmark.sh +++ b/scripts/network_benchmark.sh @@ -7,6 +7,8 @@ set -e echo "🌐 Network Latency Benchmark for polyfill-rs" echo "=============================================" +echo "šŸ“ Note: API credentials loaded from .env file" +echo "" # Colors for output RED='\033[0;31m'