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