In this article we will look at what POAPs are and how their technology is built on top of NFT standards. We will also look at how to create simple POAPs and NFTs. In the conclusion I’ve put together some thoughts on why I think POAPs should only be used for fun and not for anything of value.
What is a POAP?
POAP stands for Proof of Attendance Protocol, it is a form of NFT which is run by a centralized service at https://poap.xyz which mints the token on the Gnosis Chain. These can be minted by users with a secret link for free without paying a transaction fee. They do not however, to the best of my knowledge, hold any value or are likely to do so in the future. The idea is to create a verifiable historical record of activity for a wallet address. So if you attend a conference or hackathon you can mint a POAP to your wallet which proves you attended. It makes a nice keepsake like a digital fridge magnet.
How To Create A POAP
You can create your own POAP at: https://app.poap.xyz/admin/events/new/
You’ll need an image to use as a badge, here are the specs:
- Mandatory: PNG or GIF format
- Recommended: measures 500x500px, round shape, size less than 200KB (Max. 4MB)
Once minted your application needs to be approved and then you will get a text file full of links which you can send out to your users so they can claim their POAPs. The user clicks the link, enters their wallet address and the backend system will send out the POAP. There are no transactions to sign or gas fees to pay because it’s sent out from the backend script using the Gnosis Chain network.
Creating NFTs On Opensea
An alternative to POAPs are standard NFT’s. The drawback is that you and/or your users will have to pay a gas fee to mint their NFTs. This can get expensive if you want an NFT on the Ethereum mainnet.
You can create an NFT without getting involved in the code by using the OpenSea platform: https://opensea.io/asset/create
Minting an NFT gives more options like adding custom traits and expanding the functionality of the token. It also makes the product resellable and may have more perceived value than a POAP. However this platform still relies on OpenSeas smart contract.
Creating NFTs On Remix
If you aren’t afraid to dig in to the code then you can deploy your own contract which gives you full control over the functionality of your token as well as making it permissionless without any gatekeepers.
You will need an image again, this can be the same for each NFT or you can use something like JANG.js to create thousands of images based on a layer system.
Head over to https://remix.ethereum.org to start creating your code.
Here is the code for a simple ERC721 NFT smart contract:
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.0;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Base64.sol";
contract EthereumHackerNFT is ERC721 {
uint256 public tokenId;
constructor() ERC721("EthereumHacker", "EH") {
}
function tokenURI(uint256) override public pure returns (string memory) {
string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "EthereumHacker", "description": "Thank you for playing, gg", "image": "https://ethereumhacker.com/img/nft.png"}'))));
return string(abi.encodePacked('data:application/json;base64,', json));
}
function mint() public {
require(tokenId < 1000, "All 1000 tokens have been minted");
require(balanceOf(msg.sender) == 0, "You already have an NFT");
_safeMint(msg.sender, tokenId);
tokenId = tokenId + 1;
}
}
Conclusion
POAPs offer a simple way to create a nice gift to participants of your event but the fact it’s a centralized service and your POAP needs to be approved by someone isn’t very web3. Creating a standard NFT either with a platform like OpenSea or coding your own in Solidity offers more flexibility and potentially more perceived value. The negative of this is that NFT’s minted on networks like Ethereum will require a transaction fee to be paid to deploy and interact with the contract.
Because POAPs are sent out from a backend script they do not require the end user to pay a transaction fee and provide a nice way to provide a digital keepsake for an event. For anything that holds value now or in the future you are better of creating a custom NFT.