Uprock
UpRock Fair Distribution Roadmap

Introducing SPL-302 Protocol: Token Pool Hybrid NFTs

The Rise of Hybrid NFTs: Where PFP Tokenomics Meets DeFi for Enhanced Token Utility

04/30/2024

Overview

SPL-302 is a proposed standard for non-fungible tokens (NFTs) on the Solana blockchain that represent a proportional share in a pool of underlying tokens. Taking its name from the HTTP status code "302 Found.” SPL-302 provides a framework for creating NFTs that function both as a PFP and also represent a clear and consistent way to point to the underlying pool and the tokens it contains.

Background

The Solana blockchain has seen significant growth in the NFT space, with various projects leveraging the platform's high performance and low transaction costs. However, there is currently no standard way to create NFTs that represent a share in a pool of underlying tokens. SPL-302 aims to fill this gap by providing a set of guidelines and metadata specifications that allow for the creation of such NFTs within the existing Solana Token2022 standard.

Motivation

The primary motivation behind SPL-302 is to enable the creation of NFTs that offer the unique features of both traditional NFTs (such as unique artwork) and shares in a token pool. This combination allows for greater flexibility and utility in the NFT space, potentially attracting new users and use cases. In particular, SPL-302 is perfectly suited to DAOs but also provides simplicity, by allowing a user to acquire a share in a managed pool of tokens without needing to make individual transactions themselves. Additionally, by providing a standard framework for these types of NFTs, SPL-302 aims to make it easier for wallets and exchanges to display rich information about the tokens, extending beyond just the basic display of the associated media, to include current value, redemption price, re-minting price and fee information.

Details

For the broadest possible compatibility, the NFT metadata should populate all the fields which are normally populated by the Metaplex NFT metadata. Of particular note, the Creators array represents the same data as the Transfer Royalty data in the SPL-302 standard. In addition, an SPL-302 token should have the TokenStandard set to “4” ProgrammableNonFungible, and the program must define the relevant additional functions, specified below.

1. NFT Artwork and Metadata

Each SPL-302 token is an NFT containing unique art, making it suitable for use as a profile picture (PFP). The artwork and other traditional NFT metadata, such as the collection name, should be stored and accessed following the existing Token2022 standard.

2. Underlying Token Pool

Each SPL-302 NFT represents a share in a pool of underlying tokens. The pool is stored on-chain, allowing for the determination of the exact type and quantity of each token contained within. To facilitate this, the SPL-302 metadata should include a pointer to additional metadata about the underlying pool, as well as the address of the SPL-302 token program. This program must implement a small set of functions which provide the exact information necessary for displaying pricing.

3. Outstanding Tokens and Pricing

To accurately price an individual SPL-302 token, it is necessary to know the total number of outstanding tokens. This information, along with the total value of the underlying token pool, allows for the calculation of the current value of each SPL-302 token. To enable this, the SPL-302 program has a function called “getPoolContents” which returns an array of objects, each object containing the address of a Token and the current number of that token in the pool. In addition, the SPL-302 program contains a function called “getOutstanding” which returns the current number of minted NFTs in the collection.

Each provider can then use this information to price each of these underlying tokens. Using this they can display the total value (and performance) of the SPL-302 collection, or divide the price by the number of tokens outstanding to show the nominal price of an individual SPL-302 NFT.

4. Token Redemption

SPL-302 tokens can be redeemed, meaning they are destroyed, and the owner receives their share of the underlying pool in return. The redemption process may involve a fee, which can be left in the pool (increasing the value of existing tokens), sent to the creator, or split between the two. To display the redemption price, the nominal price (the sum of all tokens in the pool divided by the number of outstanding tokens) must be computed and then reduced by the fee, if applicable. The fees are represented as an array of values, each containing an address, a float representing a fractional fee and a descriptive string. The descriptive strings “pool” and “creator” are reserved, and additional descriptive strings may be added in the future. The sum of the floats must be less than or equal to 1 (which would represent a 100% fee).

5. Re-minting

SPL-302 tokens may support re-minting, allowing users to re-mint previously redeemed tokens. The re-minting price should be based on the current per-NFT allocation of tokens in the underlying pool, with an optional additional fee specified by the NFT creator. This fee can be added to the pool, sent to the creator, or split between the two. Much as with the redemption values, the re-minting fee is represented as a list of objects, where each object contains an address of the recipient, the fee and a descriptive string. Unlike the redemption list, however, these fees are specified in SOL tokens.

The SPL-302 program also specifies a “getRemintTokens” function, which returns a list of objects, each object specifying the address of a token program and the number of tokens required. When re-minting a token, it is necessary for the re-minter to call the “getRemintTokens” function, and then call “remint,” passing in the correct number of each token.

Alternatively, an SPL-302 program is encouraged to support a “getRemintPrice” function which provides the number of SOL tokens necessary to re-mint an NFT. When re-minting, it is possible to call this function sending in the specified quantity of SOL, which will then be swapped automatically on DEXs to produce the correct quantity of tokens to add to the underlying pool. It will make sense that it will be necessary for this function to require somewhat more SOL than the aggregate value of the underlying tokens required to provide for slippage in the swaps for underlying tokens, but SPL-302 tokens should return any unused excess to the reminder.

6. Transfer Royalties

As with traditional NFTs, SPL-302 token creators may specify royalties on NFT transfers. These royalties can be sent to the underlying pool, the creator, or a combination of both. The composition of the metadata for these fees is exactly the same as for redemption.

7. Metadata Layout

To ensure compatibility with the Token2022 standard, SPL-302 metadata should include the following:

  1. Traditional NFT metadata (artwork, collection name, etc.)
  2. A pointer to the underlying token pool metadata
  3. Redemption fee details (percentage, recipient)
  4. Re-minting fee details (cost, recipient)
  5. Transfer royalty details (percentage, recipient)

8. DAO Power

An SPL-302 token collection may be designed such that each token has an equal voting power in an associated DAO, no voting power or a varying voting power. The case of equal voting power is representative of the traditional DAO of one vote per token. The case of no voting power is more similar to a professionally managed collection, where the holders rely on a small handful of managers to manage the pool, and varying power represents the possibility to implement a hybrid of these options. Therefore, each SOL-302 NFT specifies a “vote_power” as a dimensionless integer, where the common DAO case has vote_power set to 1, and the other cases have it set to zero or a value greater than 1. The total number of votes in the DAO is simply the sum of all the vote_power of all the currently minted NFTs.

Conclusion

SPL-302 provides a standard framework for creating NFTs that represent shares in a pool of underlying tokens on the Solana blockchain. By specifying the necessary metadata and program pointers, SPL-302 enables the creation of a reference implementation and allows wallets and exchanges to support the display of rich information derived from the metadata. This standard provides the possibility of significantly simplifying the process of buying and holding a broad range of tokens, as well as offering a simple and consistent method of redeeming, pricing and re-minting such tokens.

Check out the first SPL-302 NFT community, dePioneers, the first hybrid NFT representing a premiere DePIN DAO.