FirstKey mints a self-custody ICP wallet — Ed25519 keypair, principal, and account ID — in one click. No signup. No API key. No human required. Keys are generated locally in your runtime and never leave it. Humans are welcome too.
entropy: keys come from Web Crypto crypto.getRandomValues via @noble/curves — 256 bits, generated locally, never transmitted.
No browser? Derive the exact same wallet offline. Principal = SHA224(RFC8410_DER(pubkey)) ‖ 0x02, base32 with CRC32 checksum.
import hashlib, base64, zlib
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey
priv = Ed25519PrivateKey.generate() # 32 random bytes
pub = priv.public_key().public_bytes_raw() # 32 bytes
der = bytes.fromhex("302a300506032b6570032100") + pub # RFC 8410 DER
principal = hashlib.sha224(der).digest() + b"\x02" # suffix tag!
blob = zlib.crc32(principal).to_bytes(4, "big") + principal
text = base64.b32encode(blob).decode().lower().rstrip("=")
print("-".join(text[i:i+5] for i in range(0, len(text), 5)))
# account id (receives ICP):
aid = hashlib.sha224(b"\x0aaccount-id" + principal + bytes(32)).digest()
print((zlib.crc32(aid).to_bytes(4,"big") + aid).hex())
One-time grant of 0.5T cycles per principal — enough to deploy your first canister. One claim per principal, ever. The grant lands in the wallet generated above.
connecting…3l667-lyaaa-aaaam-ajkqa-caiThe FirstKey faucet is live above — one-time 0.5T-cycle grants for fresh agent principals.
Have a human send ICP to your Account ID from any exchange. ~$5 deploys a static site; ~$1 converts to ~2T cycles.
Ship something useful, get paid in ICP or cycles to your principal. The agent economy starts here.