## Table of Contents 1. [Message](#1-message) 2. [Signer](#2-signer) 3. [User Data](#3-userdata) 4. [Cast](#4-cast) 5. [Reaction](#5-reaction) 6. [Verification](#6-verification) ## 1. Message A Message is a delta operation on the Farcaster network. The message protobuf is an envelope that wraps a MessageData object and contains a hash and signature which can verify its authenticity. | Field | Type | Label | Description | | ---------------- | ----------------------------------- | ----- | ----------------------------------------------------------------- | | data | [MessageData](#MessageData) | | Contents of the message | | hash | bytes | | Hash digest of data | | hash_scheme | [HashScheme](#HashScheme) | | Hash scheme that produced the hash digest | | signature | bytes | | Signature of the hash digest | | signature_scheme | [SignatureScheme](#SignatureScheme) | | Signature scheme that produced the signature | | signer | bytes | | Public key or address of the key pair that produced the signature | ### 1.1 MessageData A MessageData object contains properties common to all MessagesTypes and wraps a body object which contains properties specific to the MessageType. | Field | Type | Label | Description | | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- | ---------------------------------------------- | | type | [MessageType](#MessageType) | | Type of Message contained in the body | | fid | uint64 | | Farcaster ID of the user producing the message | | timestamp | uint32 | | Farcaster epoch timestamp in seconds | | network | [FarcasterNetwork](#FarcasterNetwork) | | Farcaster network the message is intended for | | body | [CastAddBody](#CastAddBody),
[CastRemoveBody](#CastRemoveBody),
[ReactionBody](#ReactionBody),
[VerificationAddEthAddressBody](#VerificationAddEthAddressBody),
[VerificationRemoveBody](#VerificationRemoveBody),
[SignerAddBody](#SignerAddBody),
[SignerRemoveBody](#SignerRemoveBody),
[UserDataBody](#UserDataBody) | oneOf | Properties specific to the MessageType | ### 1.2 HashScheme Type of hashing scheme used to produce a digest of MessageData | Name | Number | Description | | ------------------ | ------ | -------------------------------------- | | HASH_SCHEME_NONE | 0 | | | HASH_SCHEME_BLAKE3 | 1 | Default scheme for hashing MessageData | ### 1.3 Signature Scheme Type of signature scheme used to sign the Message hash | Name | Number | Description | | ------------------------ | ------ | ------------------------------------ | | SIGNATURE_SCHEME_NONE | 0 | | | SIGNATURE_SCHEME_ED25519 | 1 | Ed25519 signature (default) | | SIGNATURE_SCHEME_EIP712 | 2 | ECDSA signature using EIP-712 scheme | ### 1.4 Message Type Type of the MessageBody | Name | Number | Description | | ----------------------------------------- | ------ | --------------------------------------------------------- | | MESSAGE_TYPE_NONE | 0 | Invalid default value | | MESSAGE_TYPE_CAST_ADD | 1 | Add a new Cast | | MESSAGE_TYPE_CAST_REMOVE | 2 | Remove an existing Cast | | MESSAGE_TYPE_REACTION_ADD | 3 | Add a Reaction to a Cast | | MESSAGE_TYPE_REACTION_REMOVE | 4 | Remove a Reaction from a Cast | | MESSAGE_TYPE_VERIFICATION_ADD_ETH_ADDRESS | 7 | Add a Verification of an Ethereum Address | | MESSAGE_TYPE_VERIFICATION_REMOVE | 8 | Remove a Verification | | MESSAGE_TYPE_SIGNER_ADD | 9 | Add a new Ed25519 key pair that signs messages for a user | | MESSAGE_TYPE_SIGNER_REMOVE | 10 | Remove an Ed25519 key pair that signs messages for a user | | MESSAGE_TYPE_USER_DATA_ADD | 11 | Add metadata about a user | ### 1.5 Farcaster Network Farcaster network the message is intended for | Name | Number | Description | | ------------------------- | ------ | ---------------------- | | FARCASTER_NETWORK_NONE | 0 | | | FARCASTER_NETWORK_MAINNET | 1 | Public primary network | | FARCASTER_NETWORK_TESTNET | 2 | Public test network | | FARCASTER_NETWORK_DEVNET | 3 | Private test network | ## 2. Signer A signer is a delta that authorizes a new key pair to sign Messages on behalf of the user. ### 2.1 SignerAddBody Adds or removes an Ed25519 key pair that signs messages for a user | Field | Type | Label | Description | | ------ | ------ | ----- | ---------------------------------------------- | | signer | bytes | | Public key of the Ed25519 key pair | | name? | string | | (optional) Human-readable label for the signer | ### 2.1 SignerRemoveBody Adds or removes an Ed25519 key pair that signs messages for a user | Field | Type | Label | Description | | ------ | ----- | ----- | ---------------------------------- | | signer | bytes | | Public key of the Ed25519 key pair | ## 3. UserData A UserData is a delta that contains metadata information about the user. ### 3.1 UserDataBody Adds metadata about a user | Field | Type | Label | Description | | ----- | ----------------------------- | ----- | --------------------- | | type | [UserDataType](#UserDataType) | | Type of metadata | | value | string | | Value of the metadata | ### 3.2 UserDataType Type of UserData | Name | Number | Description | |-------------------------| ------ | ------------------------------------- | | USER_DATA_TYPE_NONE | 0 | Invalid default value | | USER_DATA_TYPE_PFP | 1 | Profile Picture for the user | | USER_DATA_TYPE_DISPLAY | 2 | Display Name for the user | | USER_DATA_TYPE_BIO | 3 | Bio for the user | | USER_DATA_TYPE_URL | 5 | URL of the user | | USER_DATA_TYPE_USERNAME | 6 | Preferred Farcaster Name for the user | ## 4. Cast A Cast is a delta that represents a new public update from a user. Casts can be added and removed at any time by the user. ### 4.1 CastAddBody Adds a new Cast | Field | Type | Label | Description | | ------------------ | ----------------- | -------- | ------------------------------------- | | embeds | string | repeated | URLs to be embedded in the cast | | mentions | uint64 | repeated | Fids mentioned in the cast | | parent_cast_id | [CastId](#CastId) | | Parent cast of the cast | | text | string | | Text of the cast | | mentions_positions | uint32 | repeated | Positions of the mentions in the text | ### 4.2 CastRemoveBody Removes an existing Cast | Field | Type | Label | Description | | ----------- | ----- | ----- | -------------------------- | | target_hash | bytes | | Hash of the cast to remove | ### 4.3 CastId Identifier used to look up a Cast | Field | Type | Label | Description | | ----- | ------ | ----- | ------------------------------------ | | fid | uint64 | | Fid of the user who created the cast | | hash | bytes | | Hash of the cast | ## 5. Reaction A Reaction is a delta that is applied by a user to a specific Cast. ### 5.1 ReactionBody Adds or removes a Reaction from a Cast | Field | Type | Label | Description | | -------------- | ----------------------------- | ----- | ------------------------------ | | type | [ReactionType](#ReactionType) | | Type of reaction | | target_cast_id | [CastId](#CastId) | | CastId of the Cast to react to | ### 5.2 ReactionType Type of Reaction | Name | Number | Description | | -------------------- | ------ | -------------------------------------------- | | REACTION_TYPE_NONE | 0 | Invalid default value | | REACTION_TYPE_LIKE | 1 | Like the target cast | | REACTION_TYPE_RECAST | 2 | Share target cast to the user's audience | ## 6. Verification A Verification is a delta that contains a bi-directional signature proving that an fid has control over an Ethereum address. ### 6.1 VerificationAddEthAddressBody Adds a Verification of ownership of an Ethereum Address | Field | Type | Label | Description | | ------------- | ----- | ----- | ------------------------------------------------------------- | | address | bytes | | Ethereum address being verified | | block_hash | bytes | | Hash of the latest Ethereum block when the claim was produced | | eth_signature | bytes | | Signature produced by the user's Ethereum address | ### 6.2 VerificationRemoveBody Removes a Verification of any type | Field | Type | Label | Description | | ------- | ----- | ----- | ------------------------------------- | | address | bytes | | Address of the Verification to remove | ### 6.3 VerificationClaim