頂級的NFT可能花費數万甚至數百萬美元。大多數散戶投資者都無法接觸到它們,不同的團隊正在通過將NFT分割來解決這個問題。碎片化是將NFT鎖定到金庫中,然後鑄造一些可替代份額作為ERC-20代幣的過程。碎片化既有利於NFT產品所有者,也有利於股權購買者。份額買家現在可以負擔一小部分NFT。 NFT的所有者可以通過出售部分NFT來了解它們的價值,並在不出售整個NFT的情況下看到一些流動性。
有許多團隊正在處理這個問題,而Fractional 是這個領域的頂級項目之一。
在Fractional協議中,NFT所有者可以通過創建一個金庫來分割自己的NFT。每個金庫包含一個NFT籃子(表示為一個NFT代幣),該籃子本身包含許多NFT。 NFT所有者將獲得所有部分的所有權代幣,他們可以將這些代幣出售給份額買家。
金庫的創建者有權每年收取一筆管理費。金庫創造了新的部分所有權代幣作為管理者的費用。該協議通過具有治理控制的最大費用百分比參數來防止費用百分比過高。
如果某天有人想擁有整個NFT籃子,他可以通過向金庫發送等量或更多的ETH來啟動拍賣。拍賣完成後,拍賣贏家將收到NFT,部分所有權代幣持有者可以索取已支付的ETH。
創建金庫並設置其參數
為了創建一個金庫,ERC721VaultFactory#mint 需要以下信息:
Name -金庫名Symbol-金庫符號代幣- NFT(或NFT籃子)地址id—NFT的idlistPrice -NFT的初始價格
在金庫工廠的初始化期間,ERC721TokenVault會創建一個合約,並在每個金庫的初始化中重用其邏輯,以節省gas和存儲空間。每個金庫都有自己的合約,但邏輯只存在於一個地方。該函數用它的參數對初始化函數簽名進行編碼,然後將調用數據傳遞給代理,該代理把delegatecall傳遞給預先創建的代幣金庫合約。 ERC721TokenVault#initialize初始化分割ERC-20代幣,給管理員創建總供應,並設置總底價(標價x供應)。在金庫初始化之後,它將NFT從所有者處轉移到金庫。
每個代幣庫都可以通過拍賣購買,其默認長度為7天。管理員可以通過調用ERC721TokenVault#updateAuctionLength來更新金庫的拍賣長度,但它必須在協議設置的允許範圍內。
管理員還可以通過調用ERC721TokenVault#updateFee來更新金庫的費用。必須低於協議規定的最高管理者費用百分比。隨著管理費用的更新,管理者還可以要求在金庫中的任何費用。
創建一個NFT籃子並存儲/取出NFT
在代幣金庫智能合約中,每個金庫只能持有一個NFT。 Fractional允許金庫通過NFT籃子的概念來持有多個NFT。一個NFT籃子本身就是一個NFT,由於它有一個以太坊地址,它可以擁有多個NFT。要創建一個NFT籃子,調用IndexERC721Factory#createBasket來創建一個新的IndexERC721籃子。它鑄造的代幣0(籃子)屬於工廠。籃子所有權隨後轉移到msg.sender。
創建籃子之後,可以通過調用IndexERC721#depositERC721將NFT存儲到籃子中。
籃子所有者或任何被批准的用戶也可以通過調用IndexERC721#withdrawERC721從籃子中取N出FT。
轉移金庫份額
金庫份額是ERC-20代幣,它們可以在地址之間自由交易。當交換發生時,金庫份額從流動性池轉移到買方。鉤子ERC721TokenVault#_beforeTokenTransfer被定義,它在每次傳輸之前運行。它做了三件事。
首先,如果發送方正在轉移他所有的金庫份額,金庫將燒毀他的不可轉讓的金庫NFT,這代表他的金庫所有權。
第二,如果接收者不擁有一個金庫NFT,金庫會為他鑄造一個。
最後,如果當前沒有拍賣,且發送方的期望售價和接收方的期望售價不同,則根據發送方和接收方的轉讓金額加權的期望售價調整底價。
更新期望售價
金庫份額可以通過調用ERC721TokenVault#updateUserPrice來更新他們想要的出售價格。底價是每個金庫份額所有者基於其份額的期望銷售價格的加權平均值。用戶可以添加/刪除/更新他們想要的銷售價格。
如果沒有投票代幣,或者用戶是唯一的份額所有者,它會將底價設置為用戶的權重乘以期望價格。
如果用戶不再想投票,該函數將從底價中刪除用戶的加權價格以及投票代幣的數量。
如果用戶是第一次投票,並且底價已經由其他份額所有者確定,那麼在將加權價格添加到底價之前,該函數會檢查用戶的期望銷售價格是否在金庫平均底價的最小/最大底價係數之內。
類似地,如果用戶正在更新期望的銷售價格,該函數將進行相同的檢查,只是它在平均底價計算中刪除了舊的加權價格。新的加權價格被添加到底價中,舊的加權價格被從底價中刪除。
最後,它在userPrices映射中設置用戶所需的銷售價格。
發起拍賣
拍賣可以通過調用ERC721TokenVault#start來啟動。它是一個payable函數,因為函數調用者必鬚髮送價值至少等於金庫底價的ETH作為起始出價。為了開始拍賣,還必須對底價達成共識。通過比較投票代幣的數量和協議的最小投票百分比來檢查它。
拍賣的結束時間戳是當前區塊時間戳加上拍賣長度。它的狀態由不活躍變為活躍。當前價格為msg.value和獲勝的地址是msg.sender。
在拍賣中出價
其他投標人可以通過調用ERC721TokenVault#bid提交他們的投標。每個出價必須至少將價格提高協議的預定義最低出價增幅。
如果距離拍賣結束時間不足15分鐘,拍賣時間將延長15分鐘。
然後該函數將當前出價最高的人存入的ETH作為WETH返回給這個用戶。基於合約定義_sendETHOrWETH的方式,我認為發送WETH 而不是ETH 是為了防止惡意合約通過定義惡意fallback函數來攻擊金庫。
結束拍賣
通過結束時間戳的實時拍賣可以通過調用ERC721TokenVault#end來結束。它將拍賣轉換live為ended,並將金庫的NFT(或NFT籃子)轉移到獲勝地址。
拍賣結束後,金庫份額所有者可以調用ERC721TokenVault#cash來贖回他們從拍賣中收集的ETH份額。如果份額所有者是智能合約,則發送WETH。金庫份額隨後被燒毀。
兌換金庫NFT
如果買家不想通過拍賣,他也可以通過控制所有金庫的份額供應來獲得完全的NFT所有權,然後調用ERC721TokenVault#redeem。該函數燒毀所有份額並將金庫NFT轉移給用戶。拍賣狀態轉換為redeemed。
對付有惡意的管理員
如果存在惡意的管理員,治理可以通過調用ERC721TokenVault# kick來指定另一個地址作為管理員,從而投票將管理員踢出去。
申請費用
管理員收取管理金庫的費用。 ERC721TokenVault#claimFees可以被調用,以向管理員和管理人員創造ERC-20金庫份額。年費是金庫總份額供應的一定比例,每秒鐘都會滴到管理者和治理者手中。只要當前區塊時間戳和最後一個聲明的時間戳之間已經過去了一段時間,費用就可以索賠。如果金庫是通過拍賣購得的,則無法收取費用。
到目前為止它做得怎麼樣?
讓我們從平台的一些高級統計數據開始:
下面我們可以看到所有成功分割並拍賣的NFT的結果(目前有9個),比較標價和最終拍賣價格的“利潤”。
https://dune.xyz/queries/96146/204625
以及更複雜的查詢,得到一個碎片NFT的隱含值。我們首先從分割的NFT的ERC20代幣所在的DEX池中獲取最近的交易,然後取匯率的美元價值,並將其乘以該代幣的總供應。
據此,我們得到59個不同的NFT池,其隱含估值分佈如下:
https://dune.xyz/queries/96482/204676
最後,我們可以看看一段時間內的總交易量:
總結
Fractional允許NFT持有人在不出售全部資產的情況下看到其NFT的流動性,同時也允許價格發現。買家現在可以通過Fractional的金庫份額購買他們以前無法負擔的昂貴的NFT份額。不同的協議採用不同的方式進行NFT的分塊/收購,而Fractional選擇了AMM +拍賣作為其主要機制。我還在研究另一種名為Spectre的協議,它不相信低流動性高滑點的AMM用於分割代幣和收購的鏈上拍賣。它結合了鑄幣廠和掉期交易的方式進行收購,這取決於資金池的流動性,它還利用閃電收購而非拍賣的方式進行去分割。我很想知道哪種機制最終會被更廣泛地採用。
Source:https://medium.com/coinmonks/dissecting-the-fractional-protocol-dc3867584bdb