Profiles give context about an account or a user on the internet usually through a name and an image, sometimes a description, background image etc. The visual and textual representation of an account, helps users to better recognize own accounts and accounts of other users.
Stacks has a long history of profiles as they introduced human readable names for bitcoin addresses when the project started as “One Name” back in 2014. Since then, the space has evolved. There are standards by the W3C for decentralized identifiers and names are sold on NFT marketplaces for a lot of money.
To see, what profiles for Stacks addresses exist today, I have create a small web application (https://stx-profiles-theta.vercel.app/) that shows 4 different types of profiles. It is open-source and should be seen as a demonstrator how applications can make use of STX profiles in general.
The public profile is a profile that is registered with a username on-chain using the BNS (Blockchain Naming System) smart contract. The contract links the stx address and the username according to the rules about fees and expiry. The profile itself is stored off-chain and can be retrieved by querying the chain for the so-called zone file like this: https://stacks-node-api.mainnet.stacks.co/v1/names/friedger.id/ where friedger.id is the username and the result contains the zone file with a link to the actual profile. The profile itself is a JSON object that follows usually the Person schema. It contains a name, description and an avatar image property. These can be used to show the profile: https://stx-profiles-theta.vercel.app/friedger.id
To edit the profile, the user needs to create and sign a JSON web token. Unfortunately, there are no convenient tools out there that users can use to edit the profile. Therefore, only names from the “old days” will show a public profile.
The Blocksurvey team has created a smart contract and published a website at owl.link that associates a profile url with a username similar to public profiles via the zone files. Here, the profile url is stored as a map entry in the smart contract and the user receives an NFT as a proof.
On the website, the user can edit the profile, add name, image and even links and finally, store it on gaia, a decentralized storage system. The gaia storage is specific to each user and to the owl.link domain. Therefore, users can only update the profile through the website (or through manual manipulation). However, the smart contract does not impose any restrictions. Other applications could use a different storage provider and register the profile with the same contract. Unfortunately, the smart contract requires that users pay a fee to the team for registering the storage url. This might discourage other web applications to adopt the contract.
An example is https://stx-profiles-theta.vercel.app/raja.btc
Public profiles mentioned above contain more than just the name, description and image. Profiles contain also information where certain apps store their information so that other users can lookup content shared with them.
The application Xcheck (https://xck.app) does this. Anybody can use the username, inspect the public profile and find the location of the user’s app data. It is a gaia url similar to owl links. Together with the correct filename, here “profile.json”, the app profile can be loaded and displayed. User “friedger.btc” has such a profile: https://stx-profiles-theta.vercel.app/friedger.btc
While the NFT marketplace gamme.io also has an app profile, the profile is not published and not shared publicly, therefore, the Gamma’s app profile can’t be shown in the app.
The three profile types above require a username to find the profiles. However, NFT profiles are also for users without usernames. Similar to owl link profiles a smart contract is used that stores an association between two assets. Here, it is a Stacks address and an NFT.
Users can choose an NFT that they own and publicly declare this NFT as their profile. The name and image of the NFT is used as the profile. For simplicity, I have used the gamma.io api for NFT metadata, however, it is possible to lookup the nft metadata in the app and load the image directly from IPFS or where ever the NFT image is stored.
This type of profile is meant as a mechanism to provide a profile for addresses, not for usernames. However, these profiles are compatible with other profiles as you can see at https://stx-profiles-theta.vercel.app/SPN4Y5QPGQA8882ZXW90ADC2DHYXMSTN8VAR8C3X That page shows the same profiles as https://stx-profiles-theta.vercel.app/friedger.btc