顶级的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