The Past (2021)
- Farcaster clients generate a new user-controlled wallet for every user that signs up
- Users register a username on-chain with an Ethereum address from that wallet
- 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)
- Farcaster clients generate a new user-controlled wallet for every user that signs up.
- Users register an fname + fid on-chain with an Ethereum address from that wallet
- Users use the wallet to produce an EIP-712 message that authorizes a Signer (Ed25519 keypair) to post messages on the users behalf
- 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:
- Some users don’t have a wallet, and dont sign up
- Some users have a wallet, but on another device and don’t sign up