use ethers::signers::LocalWallet;
use polymarket_relayer::{AuthMethod, RelayClient, RelayerTxType};
use std::env;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let private_key = env::var("PRIVATE_KEY").expect("PRIVATE_KEY env var required");
let api_key = env::var("POLY_RELAYER_API_KEY").expect("POLY_RELAYER_API_KEY env var required");
let address = env::var("POLY_RELAYER_ADDRESS").expect("POLY_RELAYER_ADDRESS env var required");
let wallet: LocalWallet = private_key.parse()?;
let auth = AuthMethod::relayer_key(&api_key, &address);
let client = RelayClient::new(137, wallet, auth, RelayerTxType::Safe).await?;
let safe_addr = client.wallet_address()?;
println!("EOA: {:?}", client.signer_address());
println!("Safe: {:?}", safe_addr);
match client.deploy().await {
Ok(result) => {
println!(
"✅ Safe deployed! tx: {}",
result.tx_hash.unwrap_or_default()
);
}
Err(polymarket_relayer::RelayerError::WalletAlreadyDeployed(addr)) => {
println!("ℹ️ Safe already deployed at {}", addr);
}
Err(e) => return Err(e.into()),
}
println!("\nSetting up approvals (USDC + CTF for all exchanges)...");
let handle = client.setup_approvals().await?;
println!("Submitted tx: {}", handle.id());
let result = handle.wait().await?;
println!(
"✅ Approvals confirmed! tx: {}",
result.tx_hash.unwrap_or_default()
);
Ok(())
}