use localharness::registry;
use localharness::wallet;
const SPONSOR_KEY: &str = "0x046a830b5203d1d2c0a205a1432746e4381d0874711b2de7f575a973644b9d43";
#[tokio::main]
async fn main() {
let agent = wallet::generate();
let addr = agent.address_hex();
let name = std::env::args()
.nth(1)
.unwrap_or_else(|| format!("claude{}", &addr[2..8]));
println!("== create-subagent E2E (live Moderato) ==");
println!("registry : {}", registry::REGISTRY_ADDRESS);
println!("identity : {addr} (freshly generated, holds nothing)");
println!("name : {name}.localharness.xyz");
let sponsor = wallet::from_private_key_hex(SPONSOR_KEY).expect("sponsor key parse");
let identity_line = format!(
"name={name}\naddress={addr}\nprivate_key={}\n",
agent.private_key_hex
);
if let Err(e) = std::fs::write("my-agent-identity.txt", &identity_line) {
eprintln!("!! could not persist identity, aborting before on-chain write: {e}");
std::process::exit(1);
}
println!("identity persisted -> my-agent-identity.txt");
println!("PRIVATE KEY (testnet, store securely): {}", agent.private_key_hex);
match registry::owner_of_name(&name).await {
Ok(Some(o)) => {
eprintln!("!! name already registered to {o} — pass a different name as arg1");
std::process::exit(2);
}
Ok(None) => println!("name is free — registering…"),
Err(e) => {
eprintln!("!! RPC error checking name: {e}");
std::process::exit(1);
}
}
let tx_hash = match registry::claim_and_maybe_set_main_sponsored(
&agent.signer,
&sponsor,
&name,
registry::ALPHA_USD_ADDRESS,
)
.await
{
Ok(h) => h,
Err(e) => {
eprintln!("!! registration failed: {e}");
std::process::exit(1);
}
};
println!("registered — tx {tx_hash}");
match registry::owner_of_name(&name).await {
Ok(Some(owner)) if owner.eq_ignore_ascii_case(&addr) => {
let id = registry::id_of_name(&name).await.unwrap_or(0);
println!("VERIFIED on-chain:");
println!(" owner : {owner}");
println!(" tokenId : {id}");
println!(" url : https://{name}.localharness.xyz/");
println!("== PASS: subagent created and verified ==");
}
other => {
eprintln!("!! verification mismatch: {other:?}");
std::process::exit(1);
}
}
}