A fast implementation of a Farcaster Hub, in Rust.
If you are new to Farcaster Hubs and/or Teleport - here's a quick video that does a high-level overview of the responsibilities of a Hub and where Teleport is at.
Note that the codebase will outpace the video, and things mentioned TODO
in the video might have been done now.
There are a few things Teleport is currently capable of, and a lot more it is not currently capable of. In no specific order, Teleport can currently:
- Start a libp2p gossip node and connect to other peers
- Broadcast Gossip Messages to enable features like posting casts
- Sync on-chain events from contracts deployed to Optimism
- [-] Do PubSub peer discovery over GossipSub (partial support)
A lot is still left to do:
- Diff sync with other hubs
- gRPC APIs
- REST API
- CLI
- Metrics
- Easier APIs for different "types" of FC Messages
- Rust
- Protobufs Compiler (
brew install protobuf
orapt install -y protobuf-compiler
) - SQLx CLI (
cargo install sqlx-cli
)
Up until recently, there was a Protobuf incompatibility issue with using prost
in this codebase compared to ts-proto
that is used in Hubble. As such, we have a patched version of prost
that is used (Found Here).
In a recent update the Protobuf schema was updated to add a new field that allows us to get by that issue by serializing the message differently. That hasn't been implemented yet in Teleport but technically we don't need to maintain a patched version of prost
anymore.
- create the database
make db-create
- run the migrations
make db-migrate
FARCASTER_PRIV_KEY=<YOUR_PRIVATE_KEY> OPTIMISM_L2_RPC_URL=<RPC_URL_FOR_OP> cargo run