arrow-left

All pages
gitbookPowered by GitBook
1 of 1

Loading...

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

hashtag
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 comments of the to ensure you are implementing the functions the correct way. The key words above help define how the functions should work, given different inputs.

hashtag
IERC5725.sol on GitHub

A usable is stored publicly on the GitHub . 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 GitHub repository and click the button to quickly create a copy of the code under your own GitHub profile.

Click “” to copy the reference code

chevron-rightExtending ERC5725.sol: Easily Create Vesting NFTshashtag

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

hashtag
// To Write

chevron-rightFull ERC5725 Implementationhashtag

hashtag
// To Write

Two contracts are fully implemented in the directory: LinearVestingNFT and VestingNFT.

chevron-rightImplement Your Own!hashtag

hashtag
// To Write

hashtag
Resources

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

Use git clone to pull the reference code

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.

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

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!

  • natspecarrow-up-right
    ERC-5725 specificationarrow-up-right
    IERC5725.solarrow-up-right
    ERC-5725 reference implementationarrow-up-right
    EIP-5725 Reference Implementationarrow-up-right
    Use this templatearrow-up-right
    Use this templatearrow-up-right
    ERC5725.solarrow-up-right
    referencearrow-up-right
    Official Ethereum EIP-5725arrow-up-right
    ERC-5725 Reference Implementation (GitHub Template)arrow-up-right
    Ethereum Magicians EIP-5725 Forum Discussionarrow-up-right
    $ git clone [email protected]:ApeSwapFinance/eip-5725-vesting-nft-implementation.git
    $ cd eip-5725-vesting-nft-implementation