A Substreams module that tracks Farcaster protocol events on Optimism, including user registrations, storage rentals, and key changes.
This substream monitors the three main Farcaster contracts on Optimism:
0x00000000fc6c5f01fc30151999387bb99a9f489b
) - User registrations0x00000000fcce7f938e7ae6d3c335bd6a1a7c593d
) - Storage rentals0x00000000fc1237824fb747abde0ff18990e59b7e
) - Key managementfarcaster-stats/
├── src/
│ ├── lib.rs # Main substream logic
│ └── pb/ # Generated protobuf code
├── proto/
│ └── farcaster_stats.proto # Protobuf definitions
├── substreams.yaml # Substreams manifest
├── Cargo.toml # Rust dependencies
└── README.md # This file
The substream outputs FarcasterEvents
containing:
Install Substreams CLI:
curl -sSfL https://raw.githubusercontent.com/streamingfast/substreams/master/install.sh | bash
Install Rust and WASM target:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup target add wasm32-unknown-unknown
Clone and build:
git clone <repository-url>
cd farcaster-stats
cargo build --target wasm32-unknown-unknown --release
substreams protogen substreams.yaml --exclude-paths="sf/ethereum,sf/substreams,google"
cargo build --target wasm32-unknown-unknown --release
substreams run map_farcaster_events substreams.yaml
substreams run map_farcaster_events substreams.yaml \
--endpoint https://optimism-mainnet.substreams.streamingfast.io \
--start-block 1000000
Test with sample data:
# Create a test block with Farcaster events
substreams run map_farcaster_events substreams.yaml --start-block 1000000
Validate output format:
# Check that protobuf output is valid
substreams run map_farcaster_events substreams.yaml --output debug
Test with real Optimism data:
# Run on recent blocks
substreams run map_farcaster_events substreams.yaml \
--endpoint https://optimism-mainnet.substreams.streamingfast.io \
--start-block $(($(date +%s) - 3600)) \
--stop-block +10
Package the substream:
substreams pack substreams.yaml
Deploy to Substreams:
substreams deploy farcaster_stats substreams.yaml
Create a package:
substreams pack substreams.yaml --output farcaster_stats.spkg
Upload to StreamingFast:
# Use StreamingFast dashboard or API
curl -X POST https://api.streamingfast.io/substreams \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "package=@farcaster_stats.spkg"
SUBSTREAMS_ENDPOINT
: Substreams endpoint URLSUBSTREAMS_API_KEY
: API key for authenticated endpointsSTART_BLOCK
: Starting block number for processingThe substreams.yaml
file configures:
Monitor substream execution:
substreams run map_farcaster_events substreams.yaml --log-level debug
MIT License - see LICENSE file for details
substreams gui farcaster-stats@v1.0.2 map_farcaster_events
message
Modules
message
Binary
message
Module
message
Package
message
NetworkParams
message
PackageMetadata
message
ModuleMetadata
message
Clock
message
BlockRef
message
Request
message
Response
message
BlockUndoSignal
message
BlockScopedData
message
SessionInit
message
InitialSnapshotComplete
message
InitialSnapshotData
message
MapModuleOutput
message
StoreModuleOutput
message
OutputDebugInfo
message
ModulesProgress
message
ProcessedBytes
message
Error
message
Job
message
Stage
message
ModuleStats
message
ExternalCallMetric
message
StoreDelta
message
BlockRange
message
DeployRequest
message
Parameter
message
DeployResponse
message
UpdateRequest
message
UpdateResponse
message
InfoRequest
message
InfoResponse
message
SinkProgress
message
PackageInfo
message
ListRequest
message
ListResponse
message
DeploymentWithStatus
message
RemoveRequest
message
RemoveResponse
message
PauseRequest
message
PauseResponse
message
StopRequest
message
StopResponse
message
ResumeRequest
message
ResumeResponse
enum
DeploymentStatus
message
FarcasterEvents
message
UserRegistration
message
StorageEvent
message
KeyChange
message
FileDescriptorSet
message
FileDescriptorProto
message
DescriptorProto
message
ExtensionRangeOptions
message
FieldDescriptorProto
message
OneofDescriptorProto
message
EnumDescriptorProto
message
EnumValueDescriptorProto
message
ServiceDescriptorProto
message
MethodDescriptorProto
message
FileOptions
message
MessageOptions
message
FieldOptions
message
OneofOptions
message
EnumOptions
message
EnumValueOptions
message
ServiceOptions
message
MethodOptions
message
UninterpretedOption
message
SourceCodeInfo
message
GeneratedCodeInfo
message
Any
message
Timestamp