The top NFT may cost tens of thousands or even millions of dollars. Most retail investors have no access to them, and different teams are solving this problem by dividing the NFT. Fragmentation is the process of locking NFT into the vault and then minting some fungible shares as ERC-20 tokens. Fragmentation benefits both NFT product owners and equity purchasers. Share buyers can now afford a small portion of NFT. NFT owners can understand their value by selling part of the NFT and see some liquidity without selling the entire NFT.
There are many teams working on this issue, and Fractional is one of the top projects in this field.
In the Fractional agreement, NFT owners can divide their NFT by creating a vault. Each vault contains an NFT basket (represented as an NFT token), and the basket itself contains many NFTs. NFT owners will get all part of the ownership tokens, and they can sell these tokens to share buyers.
The creator of the vault has the right to charge an annual management fee. The treasury creates new partial ownership tokens as a manager’s expense. The protocol uses a maximum expense percentage parameter with governance control to prevent excessive expense percentages.
If someone wants to own the entire NFT basket one day, he can start the auction by sending the same amount or more of ETH to the vault. After the auction is completed, the auction winner will receive the NFT, and some ownership token holders can claim the paid ETH.
Create a vault and set its parameters
In order to create a vault, ERC721VaultFactory#mint needs the following information:
- Name-Treasury name
- Symbol- vault symbol
- Token-NFT (or NFT basket) address
- id—id of NFT
- listPrice-the initial price of the NFT
During the initialization of the vault factory,
ERC721TokenVaulta contract is created and its logic is reused in the initialization of each vault to save gas and storage space. Each vault has its own contract, but the logic only exists in one place. This function encodes the signature of the initialization function with its parameters, and then passes the call data to the agent, which passes the delegatecall to the pre-created token vault contract. ERC721TokenVault#initialize initializes the division of ERC-20 tokens, creates a total supply for the administrator, and sets the total reserve price (marked price x supply). After the vault is initialized, it transfers the NFT from the owner to the vault.
Each token library can be purchased through auction, and its default length is 7 days. The administrator can update the auction length of the vault by calling ERC721TokenVault#updateAuctionLength, but it must be within the allowable range set by the agreement.
The administrator can also update the vault fee by calling ERC721TokenVault#updateFee. Must be lower than the percentage of the top management fee specified in the agreement. As the management fee is updated, the manager can also claim any fee in the vault.
Create an NFT basket and store/withdraw NFT
In the token vault smart contract, each vault can only hold one NFT. Fractional allows the vault to hold multiple NFTs through the concept of the NFT basket. An NFT basket itself is an NFT, and because it has an Ethereum address, it can have multiple NFTs. To create an NFT basket, call IndexERC721Factory#createBasket to create a new IndexERC721 basket. The token 0 (basket) it minted belongs to the factory. The ownership of the basket was then transferred to msg.sender.
After creating the basket, you can store the NFT in the basket by calling IndexERC721#depositERC721.
The basket owner or any approved user can also withdraw N out of the basket by calling IndexERC721#withdrawERC721.
Transfer of treasury shares
Treasury shares are ERC-20 tokens, and they can be freely traded between addresses. When the exchange occurs, the share of the treasury is transferred from the liquidity pool to the buyer. The hook ERC721TokenVault#_beforeTokenTransfer is defined and it runs before each transfer. It did three things.
First, if the sender is transferring all of his vault shares, the vault will burn his non-transferable vault NFT, which represents his vault ownership.
Second, if the recipient does not own a vault NFT, the vault will cast one for him.
Finally, if there is no auction currently, and the sender’s expected selling price is different from the receiver’s expected selling price, the reserve price is adjusted based on the expected selling price weighted by the transfer amount of the sender and receiver.
Update expected price
Vault shares can update their desired selling price by calling ERC721TokenVault#updateUserPrice. The reserve price is the weighted average of the expected sales price of each vault share owner based on his share. Users can add/delete/update the sales price they want.
If there are no voting tokens, or the user is the only share owner, it will set the reserve price to the user’s weight multiplied by the desired price.
If the user no longer wants to vote, the function will remove the user’s weighted price and the number of voting tokens from the reserve price.
If the user is voting for the first time and the reserve price has been determined by other share owners, then before adding the weighted price to the base price, the function checks whether the user’s expected selling price is within the minimum/maximum base price coefficient of the vault average reserve price .
Similarly, if the user is updating the expected sales price, the function will perform the same check, except that it deletes the old weighted price from the average reserve price calculation. The new weighted price is added to the base price, and the old weighted price is deleted from the base price.
Finally, it sets the sales price required by the user in the userPrices map.
Initiate an auction
The auction can be started by calling ERC721TokenVault#start. It is a payable function because the caller of the function must send ETH with a value at least equal to the reserve price of the vault as the starting bid. In order to start the auction, a consensus must also be reached on the reserve price. Check it by comparing the number of voting tokens with the minimum voting percentage of the protocol.
The end timestamp of the auction is the current block timestamp plus the length of the auction. Its state changes from inactive to active. The current price is msg.value and the winning address is msg.sender.
Bid in auction
Other bidders can submit their bids by calling ERC721TokenVault#bid. Each bid must increase the price by at least the agreed minimum bid increase.
If the auction ends within 15 minutes, the auction time will be extended by 15 minutes.
Then the function returns the ETH deposited by the person with the highest current bid as WETH to the user. Based on the way the contract defines _sendETHOrWETH, I think that sending WETH instead of ETH is to prevent malicious contracts from attacking the vault by defining malicious fallback functions.
End the auction
The real-time auction through the end timestamp can be ended by calling ERC721TokenVault#end. It converts the auction live to ended, and transfers the NFT (or NFT basket) of the vault to the winning address.
After the auction ends, the vault share owners can call ERC721TokenVault#cash to redeem the ETH shares they collected from the auction. If the share owner is a smart contract, WETH is sent. The vault share was subsequently burned.
Exchange vault NFT
If the buyer does not want to go through the auction, he can also obtain full NFT ownership by controlling the share supply of all vaults, and then call ERC721TokenVault#redeem. This function burns all shares and transfers the vault NFT to the user. The auction status is changed to redeemed.
Dealing with malicious administrators
If there is a malicious administrator, the governance can call ERC721TokenVault# kick to designate another address as the administrator, and vote to kick the administrator out.
The administrator charges a fee for managing the treasury. ERC721TokenVault#claimFees can be called to create ERC-20 vault shares for administrators and managers. The annual fee is a certain percentage of the total share supply of the treasury, and it drops into the hands of managers and governors every second. As long as a period of time has passed between the current block timestamp and the last declared timestamp, the fee can be claimed. If the vault is purchased through auction, no fees can be charged.
How has it done so far?
Let’s start with some advanced statistics of the platform:
Below we can see the results of all successfully divided and auctioned NFTs (currently there are 9), and compare the “profit” between the bid price and the final auction price.
And more complex queries, get the hidden value of a fragmented NFT. We first get the most recent transaction from the DEX pool where the ERC20 token of the split NFT is located, and then take the USD value of the exchange rate and multiply it by the total supply of the token.
Based on this, we get 59 different NFT pools, and their implicit valuation distributions are as follows:
Finally, we can look at the total transaction volume over a period of time:
Fractional allows NFT holders to see the liquidity of their NFT without selling all their assets, while also allowing price discovery. Buyers can now use Fractional’s vault shares to purchase expensive NFT shares that they could not afford before. Different protocols use different methods for NFT block/acquisition, and Fractional chooses AMM + auction as its main mechanism. I am also working on another protocol called Spectre, which does not believe that AMM with low liquidity and high slippage is used for on-chain auctions for token splitting and acquisitions. It combines mint and swap transactions for acquisitions, depending on the liquidity of the fund pool, and it also uses lightning acquisitions instead of auctions to split. I would like to know which mechanism will eventually be adopted more widely.
Posted by:CoinYuppie，Reprinted with attribution to:https://coinyuppie.com/is-it-really-impossible-to-buy-the-entire-nft/
Coinyuppie is an open information publishing platform, all information provided is not related to the views and positions of coinyuppie, and does not constitute any investment and financial advice. Users are expected to carefully screen and prevent risks.