Implementation Guide

ERC 5725: Transferable Vesting NFTs is an EIP created to offer a standardized Non-Fungible Token (NFT) API to enable vesting ERC-20 tokens over a vesting release curve. Read on to learn more about how to implement EIP-5725 for your own use cases

Following the Specification

After reading through ERC-5725, the main section you will focus on during integration will be the ERC-5725 specificationarrow-up-right.

The key words β€œMUST”, β€œMUST NOT”, β€œREQUIRED”, β€œSHALL”, β€œSHALL NOT”, β€œSHOULD”, β€œSHOULD NOT”, β€œRECOMMENDED”, β€œMAY”, and β€œOPTIONAL” in this document are to be interpreted as described in RFC 2119.

During the integration process, take some time to read carefully through the natspecarrow-up-right comments of the ERC-5725 specificationarrow-up-right to ensure you are implementing the functions the correct way. The key words above help define how the functions should work, given different inputs.

IERC5725.sol on GitHub

A usable IERC5725.solarrow-up-right is stored publicly on the GitHub ERC-5725 reference implementationarrow-up-right. This can be used as the base for ERC-5725 NFTs.

Follow along below for how to use this interface to create your own ERC-5725 NFTs.

chevron-rightImplementing an ERC-5725 Contracthashtag

Obtain the Base Contracts

The simplest way to get started is to head to the EIP-5725 Reference Implementationarrow-up-right GitHub repository and click the button Use this templatearrow-up-right to quickly create a copy of the code under your own GitHub profile.

Click β€œUse this templatearrow-up-right” to copy the reference code

Otherwise, you can use git clone to copy the code locally, or even download the code in .ZIP files under the <> Code drop down.

$ git clone [email protected]:ApeSwapFinance/eip-5725-vesting-nft-implementation.git
$ cd eip-5725-vesting-nft-implementation

Use git clone to pull the reference code

chevron-rightExtending ERC5725.sol: Easily Create Vesting NFTshashtag

ERC5725.solarrow-up-right is a valid IERC-5725 implementation which can be used as a base to quickly create Vesting NFTs.

// To Write

ERC5725.sol is an abstract contract. To be able to implement ERC5725.sol you will need to import it into a parent contract and override 5 virtual functions:

  • vestedPayoutAtTime: Total amount of vested tokens at the provided timestamp for a given tokenId. This number also includes vested tokens which have been claimed.

  • _payoutToken: Payout token of a given tokenId.

  • _payout: The total payout of a given tokenId.

  • _startTime: The unix timestamp of when vesting starts for a given tokenId.

  • _endTime: The unix timestamp of when vesting ends for a given tokenId.

chevron-rightFull ERC5725 Implementationhashtag

// To Write

Two contracts are fully implemented in the referencearrow-up-right directory: LinearVestingNFT and VestingNFT.

Example LinearVestingNFTarrow-up-right

  • Extend ERC5725 by importing it: contract LinearVestingNFT is ERC5725

  • It can be seen in this implementation that the five virtual functions above are implemented in this contact with override specifiers

  • vestedPayoutAtTime is the central place to be able to change the vesting curve. In this case, it first checks that the _cliff has passed, otherwise it will linearly release tokens between the _startTime and _endTime

chevron-rightImplement Your Own!hashtag

// To Write

  • ERC5725.sol is a great starting place to easily get off the ground with Vesting NFTs.

  • Use the reference implementations shared above as a guide to easily implement your own!

Resources

Last updated