The Past (2021)

  1. Farcaster clients generate a new user-controlled wallet for every user that signs up
  2. Users register a username on-chain with an Ethereum address from that wallet
  3. Every network action (e.g. a like) was a message with offchain signature from the wallet

A new wallet was necessary because existing wallets prompted users for each signature. This made sense for sensitive transactions, but not for when you wanted to just like a post quickly. But this model came with problems — people forgot mnemonics all the time, and giving a client a mnemonic meant that they had full control of your onchain Farcaster identity.

The Present (2022 - 2023)

  1. Farcaster clients generate a new user-controlled wallet for every user that signs up.
  2. Users register an fname + fid on-chain with an Ethereum address from that wallet
  3. Users use the wallet to produce an EIP-712 message that authorizes a Signer (Ed25519 keypair) to post messages on the users behalf
  4. Each Farcaster client is given a Signer which is used to sign casts, reactions etc,

In an ideal world, Step 1 is not needed. Each user already has an Ethereum wallet that they like and can jump straight into step 2. But we ran into problems when we tried this:

  1. Some users don’t have a wallet, and dont sign up
  2. Some users have a wallet, but on another device and don’t sign up