Farcaster Profile

Access Farcaster Profile data directly from your smart contract.

Get Farcaster profile data from Address

Load Farcaster profile data like followers, following, account creation time, last active time, and user flags directly from an Ethereum address.
function getUser(address _address) external view returns (FarUserData memory)
YourContract.sol
1// Import the Faracle interface
2import "./IFaracle.sol";
3
4contract ExampleGetProfile {
5
6  struct FarUserData {
7    uint32 followers;
8    uint32 following;
9    uint32 accountCreated;
10    uint32 lastActiveTime; 
11    uint32 timestampSource; 
12    uint32 timestamp;
13    uint32 timestampAddress;
14    uint24 flags; // Check UserFlags struct below
15    uint8  addressSize;
16  }
17
18  struct UserFlags {
19    bool    proSubscription;        
20    bool    channelOwner;           
21    bool    channelModerator;       
22    bool    isSpammy;               
23  }  
24
25  IFaracle public faracle = IFaracle(0x687d65ce04abbca3dac57cda6c358e497bfd320e);
26
27  constructor() {}
28
29  function mintIfChannelOwner() public {
30    FarUserData memory profile = faracle.getUser(msg.sender);
31    require(profile.flags.channelOwner, "Not a channel owner!");
32    // Proceed with minting logic
33  }
34
35}

Get Farcaster profile and verified addresses from Address

Load Farcaster profile data along with all verified addresses associated with the Farcaster account directly from an Ethereum address.
function getUserDetails(address _address) external view returns (FarUserData memory, address[] memory)
YourContract.sol
1// Import the Faracle interface
2import "./IFaracle.sol";
3
4contract WhitelistIfNotSpammy {
5  IFaracle public faracle = IFaracle(0x687d65ce04abbca3dac57cda6c358e497bfd320e);
6
7  constructor() {}
8
9  function whitelistIfNotSpammy() public {
10    FarUserData memory profile;
11    address[] memory verifiedAddresses;
12    (profile, verifiedAddresses) = faracle.getUserDetails(msg.sender);
13    require(!profile.flags.isSpammy, "Spammy profile!");
14    // Proceed with whitelisting logic
15  }  
16
17}

Get Farcaster profile and verified addresses from FID

Load Farcaster profile data along with all verified addresses associated with the Farcaster account directly from a Farcaster FID.
function getUserDetails(uint256 _fid) external view returns (FarUserData memory, address[] memory)
YourContract.sol
1import "./IFaracle.sol";
2
3contract VouchAnUser {
4  IFaracle public faracle = IFaracle(0x687d65ce04abbca3dac57cda6c358e497bfd320e);
5
6  constructor() {}
7
8  function vouchUser(uint256 _fid) public {
9    FarUserData memory profile;
10    address[] memory verifiedAddresses;
11    (profile, verifiedAddresses) = faracle.getUserDetails(_fid);
12    require(profile.flags.proSubscription, "User is not a Pro subscriber!");
13    // Proceed with vouching logic
14  }
15
16}

Get Farcaster profile, verified addresses and User Score from address

Load Farcaster profile data along with all verified addresses associated with the Farcaster account and user scores directly from address.
function getUserDetails(address _address) external view returns (FarUserData memory, address[] memory, TimestampedValue[] memory)
YourContract.sol
1import "./IFaracle.sol";
2
3contract MintIfHighNeynarScore {
4  IFaracle public faracle = IFaracle(0x687d65ce04abbca3dac57cda6c358e497bfd320e);
5
6  constructor() {}
7
8  function mintIfHighNeynarScore() public {
9    
10    FarUserData         memory profile;
11    address[]           memory verifiedAddresses;
12    TimestampedValue[]  memory userScores;
13
14    (profile, verifiedAddresses, userScores) = faracle.getUserDetails(msg.sender, [ScoreType.Neynar]);
15
16    require(userScores.length > 0 && userScores[0].value >= 9000, "Neynar score must be 0.90 or higher!");
17    
18    // Proceed with Mint logic.
19  }
20
21}

Get Farcaster profile, verified addresses and User Score from FID

Load Farcaster profile data along with all verified addresses associated with the Farcaster account and user scores directly from a Farcaster FID.
function getUserDetails(uint256 _fid) external view returns (FarUserData memory, address[] memory, TimestampedValue[] memory)
YourContract.sol
1import "./IFaracle.sol";
2import "./FaracleHelper.sol";
3
4contract GiftChannelOwners {
5  IFaracle public faracle = IFaracle(0x687d65ce04abbca3dac57cda6c358e497bfd320e);
6
7  constructor() {}
8
9  function giftChannelOwners(uint256 _fid) public {
10    
11    FarUserData         memory profile;
12    address[]           memory verifiedAddresses;
13    TimestampedValue[]  memory userScores;
14    UserChannelStats    memory channelStats;
15
16    (profile, verifiedAddresses, userScores) = faracle.getUserDetails(_fid, [ScoreType.ChannelStats]);
17
18    require(userScores.length > 0, "No ChannelStats found!");
19
20    channelStats = FaracleHelper.Uint192ToUserChannelStats(userScores[0].value);
21
22    require(channelStats.channelsLead >= 3, "Must lead at least 3 channels to receive gift!");
23
24    // Proceed with Gift logic.
25  }
26
27}