AMM模型設計在NFT交易中的傳承與創新

前言

過去的一兩年中,那些被市場驗證為有效的AMM 模型算法已經很少再進行更新迭代了。 AMM 的核心問題也漸漸從設計一套高效合理的算法,回歸到金融市場的本質——流動性。如今的NFT 這一類型的資產標的同樣也面臨一樣的流動性匱乏等問題的考驗。而NFT 市場中卻一直沒有有效的DEX 能夠真正從流動性匯聚的角度解決交易撮合和價格發現等問題。今天我們的主題就從AMM DEX 出發,向大家分享我們在設計Midaswap Protocol 這個NFT 流動性協議過程中,是如何從現有的AMM 方案當中尋找靈感和啟發,又是如何在這些既有的方案中改進和創新以解決NFT 市場中獨有的痛點和需求。

—— Joseph

文章整理自Midaswap 工程師Joseph 在經濟模型小組的內部分享。

自Q3 以來,NFT 市場經歷了劇烈的波動,藍籌NFT 紛紛跳水。忽略項目方、發行方各種操作的影響,流動性依然是NFT 市場裡最重要的問題。就目前來說,僅在EVM 鏈上,我們可以把NFT 大致定性成ETH 的一個衍生品。

此外,無論是否參與過NFT 的交易,大家應該都已經關注到了blur.io 的迅速成功。在流動性解決方案上,Blur 似乎已經交出了一份來自中心化交易所/聚合器的高分答卷。它現在幾乎已經佔據了這個市場裡面最大的買單流動性的份額,而且作為一個後起之秀,尤其是在Opensea 已經在頭把交椅上這麼多年的情況下,它還能如此迅速地崛起。其實我們可以說Blur 已經將中心化的流動性方案做得很好。但是中心化無論是對於我們dApp 的開發者來說,還是對於各個公鏈上的生態來說,我們一直都認為中心化可能只是這個交易市場裡面的一部分,我們希望尋求的是我們怎麼能在鏈上搭建屬於我們的NFT 交易所,或者說NFT DEX。所以我們今天希望能夠在接下來的探討當中討論以下的一些問題:

  • 構建一個去中心化的NFT 交易所應該採用什麼樣的流動性方案?

  • 在思考和設計去中心化的NFT AMM 時,現有DEX 的AMM 方案都有什麼可以藉鑑的地方?

  • ERC721 和ERC20 作為完全不同的資產標的在其AMM 模型設計上又會有哪些不同?

我們今天便帶著這些問題,和大家一起探討學習,同時也試圖向大家分享我們的產品Midaswap 在模型設計上經歷過的思路歷程。

如何從零設計一個DEX

先從一個比較抽象的問題開始,就是當我們去設計一個DEX 時,我們需要經歷哪些思想上的鬥爭,或者我們需要做出哪些選擇?

首先估計大家都知道,選擇一個AMM 曲線,可能是所有的AMM 設計者在一開始就需要確立的方向。誠然x+y=k 或者 x·y=k,亦或是Balancer 那種更魔改型的多幣池的那種恆定函數,其實它們都可以叫做CFMM,恆定函數做式商。這裡的x 和y,包括balancer 公式裡的b 等等,它們其實代表的都是所對應的這個市場,或者這個流動性池裡面所涉及到的資產餘額,或者說供應量。他們依據供應量之間的比例關係或者各種各樣的創造出來的數量關係,重新在這個市場裡撮合定價。所以,我們考慮選擇一個什麼樣的曲線,往往和這個流動性協議它認為自己所能吸引的目標性的資產標的是有關的。穩定幣的交易,比如Curve V2,它會選擇一個混合式的恆定函數做事商,在平衡點附近,它的模型更接近恆定和的曲線,而在平衡點較遠的地方,它更像是Uniswap v3 恆定積的方法。所以說其實並沒有一個完美的AMM 曲線,更多的是怎麼樣尋找到一個適合你自己這個市場的一個AMM 曲線。

然後其實大家就會面臨第二個問題,就是我們希望流動性是怎麼排布的。當然這涉及到兩個方面的問題,一個是流動性是需要在全區間內排布,還是在一個固定價格區間內排布,或者說是在LP 提供的一個價格範圍內排布。這一點上其實就是Uni V2 和Uni V3 之間的差異。 Uni V2 其實設計了一個十分簡潔的模型,它將兩種代幣全區間排布,嚴格地遵守了xy=k 這樣的一個AMM 曲線。但是Uni V2 也帶來了另一個問題,就是在曲線兩端時資本利用效率大為降低。 Uni V3 在這方面做了革新,他們為LP 提供了新的功能,LP 可以在他希望的區間提供流動性,也就是Uni V3 定義的range order 功能。它的AMM 曲線其實就不是一個簡單的xy=k ,它是無數個xy=k 的疊加的結果。選擇了這個流動性區間的排布其實背後還有另外一個問題,就是你希望你的流動性是水平地擺置,還是縱向地擺置?可能現在沒有一個較為直觀的方法給大家解釋這兩個之間的差別,我們後續會進一步做闡釋。

第三個也是最重要的一個問題,就是你是怎麼激勵你的LP 的? LP 其實是DEX 或者遊戲裡最重要的參與角色。沒有LP 就沒有流動性深度,也就沒有良好的交易體驗。所以所有的DEX 其實都會面臨這樣的一個問題,就是怎麼吸引到LP?當然我們知道所有的DEX 都會用交易手續費收益來吸引自己的LP。有一些新興的流動性協議會為LP 創造更多組合性上的收益,比如流動性質押或者流動性代幣的一些組合性的玩法,類似Paraspace 就使得Uniswap 的LP 們能通過借貸實現更多槓桿上的組合性玩法。其實這些方面都是為了增加流動性池對LP 的吸引力。如我們剛剛所說,LP 是這個流動性協議這個遊戲能夠玩得轉的最重要的因素。我們如果沒有一個良好的機制去吸引LP,那其實這個飛輪是無法正向運轉的。

然後我們就來到第四個問題,就是你應該如何向你的交易者們收費?這一點上其實現有的DEX 們還是挺一致的,就是怎麼向交易者收費幾乎都是由創建流動性池的人決定一個費率,像Uniswap,Joe 它可能有多級費率。我們這裡可以提一嘴的是在Joe V2 當中,它的費率是一個動態手續費。我們也看到Uni V4 做出了這方面的跟進,它通過hook 的形式引進了動態手續費。動態手續費率代表著更先進的一種產品設計,因為動態手續費率不光可以形成一個負反饋系統來平衡市場,在某種程度上還可以對沖LP 的無償損失。在這裡我們不會過多涉及到這部分的內容,但是這一環肯定也是作為一個AMM 的設計者來說必須要考慮到的。

然後就是選擇LP 的憑證。這一點上有很多流派。 Uni V2 選擇了ERC20, Uni V3 選擇了ERC721,Joe V2 選擇了ERC1155。其實LP Token 是由前面四個選擇共同決定的。流動性的分佈方式和在流動性協議中進行量化流動性的方式最終會決定LP Token 的形式。以Uni V2 和Uni V3 的之間的差異為例,Uni V2 是在全區間分佈流動性,所以在每一個價格節點上,只要兩個LP 提供流動性資產的佔總資產的比例是一樣的,那我們就認為這兩部分流動性是等價的,所以Uniswap v2 同一流動性池內的LP Token 都是同質化的。因為每一個價格點上,我們都會公平地認為他們為市場提供了資本貢獻。而Uni V3 因為引入了range order(限價流動性),所以流動性本身的有效性就有了新的定義。並不是所有的流動性在任何時候都會參與市場交易,只有在價格區間掃過範圍內的流動性才真正為這個市場提供資本貢獻。所以它需要將每個LP 的倉位進行非同質化封裝,為它們包裹上一層ERC721 的Token ,這可能是目前看來相對來說比較好的方案。當然我們不知道Uni V4 接下來會怎麼樣,但是我認為在Uni V4 的流動性方案並沒有和Uni V3 產生巨大差異的情況下, E2C721 可能仍然是它LP Token 的最好選擇。

經歷了上面這5個重要環節的抉擇和掙扎,我們已經確立了一個AMM 協議大致的方向。所以剛剛這個過程其實也是幫助大家有這樣一個頭腦風暴的過程。如果這5個環節都沒有問題的時候,我們才真正進入了AMM 模型設計的大門,我們開始能夠去討論一些更細節的問題。

NFT AMM 的困難三角

剛剛的話題都在討論ERC20 AMM DEX 的設計,包括Uni, Curve, Balancer 等現在市面上主流的AMM DEX。我們今天的主題則是NFT AMM。 NFT AMM 的幣對一側是ERC721 的NFT,另一側是ERC20 或者ETH 這樣的同質化代幣。當這兩種資產標的放在一個AMM 流動性池當中時,我們會遇到一些十分原生的矛盾。

首先最重要的是在傳統NFT 的交易市場當中,它們依賴的是一種bid ask 的交易模式,更像是一種訂單簿市場。訂單簿市場在某一側流動性缺乏的情況下,流動速率是十分差的。所以NFT 市場缺乏很好的做市工具和充足的買方流動性。一直以來,大家都詬病NFT 的內生價值是缺乏的,且它的買方流動性無論在任何一條公鏈上都是極度匱乏的狀態,所以換手率的嚴重不足就導致了流動性注定是枯竭的。所以我們在想,如果將NFT AMM 直接引入到現有的AMM DEX 市場當中,在不經過任何改動的情況下,它很有可能會面臨ETH 側或者ERC20 側流動性嚴重不足的問題。這是大家在一開始就需要面臨的一個問題。

然後第二個重要的問題,也是很現實的問題,就是NFT 是整顆進行交易的。因為NFT 本身它非同質化的特性,在不加以任何其他附加設計的情況下,沒有一個NFT 的Holder 願意出售10%的NFT 給另外一個人。這從資產本身的特性來說也是不成立的。這其實引入了一個問題:我們原本的AMM DEX 在代幣的精度範圍內是無限可細分的。如果說一些主流的ERC20 是18位精度的話,那它在18位精度以內都是可以細分的,也就是說價格曲線可以無限趨近於一個連續的曲線。而NFT 是一個斷點狀的流動性,這往往就意味著它有很大的流動性缺口。我們要靠一條什麼樣的曲線將點和點之間連接起來,這也是一個很重要的問題。

同時從另外一個角度講,因為Token ID 本身是整數個交易的,NFT 的交易門檻一直以來是相對過高的。散戶在購買ETH 時,如果他的USDT 不夠購買一個以太坊,他可以選擇只購買價值100USDT 的以太坊。但是當一個NFT 價值1ETH 時,用戶不可能花100USDT 去購買一個百分之多少比例的NFT。之前市場當中已經有流動性協議提出為NFT 引入碎片化設計。碎片化當然是一個很簡單直接的方案,但是碎片化方案又引入了困難三角的第三個問題:碎片化的NFT 還具有NFT 本身的交易屬性嗎?

任何一個NFT 集合發行出來時,它會根據Metadata 中的屬性來決定某一個NFT ID 或者某一組NFT ID 的稀有度。不同的稀有度往往就決定了這些NFT Holder 對於自己NFT 價格的期望是不同的。而碎片化意味著所有投入到這個碎片化流動性池當中的NFT 都是被一視同仁的,因為我們沒有辦法在一個已經碎片化的流動性池當中再去分辨某部分碎片是來自於某一個高稀有度的NFT。

這其實就是我們所說的NFT 去中心化協議所必鬚麵臨的三個核心的痛點。如果在這三個問題當中沒有一個取捨的話,可能NFT AMM 設計會遇到很大的困難。

NFT AMM 市場已有的方案

我們再來看下現有的NFT AMM 市場上有哪些已經比較成熟的解決方案。比如NFTX 是將NFT 無差別地碎片化成ERC20,再通過Sushi Swap 的池子構建成交易對。它簡單粗暴地繞過了Token Decimal Conflict 這個問題,但是它也忽略了交易者和Holder 對於NFT 稀缺性的差異化判斷和價格期望。稀缺性高的NFT 無法在這種AMM 模型下得到好的價值發現。

另外一個項目Sudoswap 是原生NFT 資產第一個類似於AMM 的DEX。為什麼這裡說類似於AMM,因為它和大家通常理解的AMM 的角色設定是有一些差異的。我們簡單介紹一下Sudoswap 這個項目,它將每一個流動性提供者變成交易者的對手方。流動性提供者按照他所設定的bonding Curve 設計自己的流動性提供方案。每一個流動性提供者就擁有一個流動性池,並確定這個池子是雙向池還是單向池。雙向池意味著你既可以買入也可以賣出NFT,流動性是雙邊的。雙邊意味著你可以接收兩邊的資產互換。它也可以提供單邊池,比如說你只提供ETH,類似你這個LP 掛了一個NFT 的買單,交易者可以將NFT 賣入這個純ETH 的池子當中。反過來也成立,你可以提供純NFT 的流動性池,那它更像是掛了一個NFT 的賣單。

所以這個過程當中LP 的角色是被淡化的,LP 更像是交易者的另外一種形式,只不過從某種程度上可以享受一些更定制化的交易功能。但是這會帶來兩個問題,第一個問題就是如果一個LP 擁有一個流動性池,這就意味著每一個流動性池之間的流動性是無法聚合的。我們剛剛提到NFT 市場最重要的問題是買方的流動性是缺乏的。在這樣的一個大前提下,如果還將所有流動性割裂到單個LP 的流動池子當中,這其實在某種程度上依然是將流動性孤島化。流動性無法聚合在某種程度上違背了AMM 本身的初衷: AMM 希望在一個市場內聚合流動性以提供更好的流動深度,然後撮合出一個真正符合這個市場現在情緒的價格。這一點上它其實是沒有辦法達到的,每一個流動型池彼此之間互相割裂,而且不互相影響。另外一個角度,在單一流動性池當中,NFT 的稀缺性是默認相同的。也就是說一個LP 在他自己的流性流動性池當中提供3 個NFT,這2個NFT 他是不會為他們一一定價的。如果一個LP 手上有三個不同稀有度的NFT 並有不同的期望,他可能需要創建三個流動性池才能滿足這樣的需求。

所以說在這兩個項目其實是NFT AMM 市場當中已經比較成熟的兩個項目。這兩項目都解決了我們剛剛說的三個問題中的一部分問題,但是自身可能存在一些Trade Off,一部分問題被他們選擇性地忽視或者妥協了。那麼我們在思考的就是有沒有一個NFT 模型能夠將這些問題做一個很好的解決,或者說我們能不能通過一套NFT 模型將這三個問題解決到大家能夠接受的一個程度內。

Bonding Curves

我們會接下來給大家詳細解釋一下Bonding Curve,作為後面我們聊詳細的解決方案的一個鋪墊。 Bonding Curve 本質上是一系列用來實現價格發現的數學函數。它其實就是將資產的供應量映射到資產價格當中。從上述兩個curve 圖中明顯能看出,左邊是一個線性的Bonding Curve,右邊是一個指數函數的Bonding Curve。圖中,綠色的點代表ERC20 在倉位當中的位置,而ERC721 用紅色的點來表示。以左邊這個圖為例,如果在這樣的一個流動性池當中,它的流動性是怎麼分佈的呢?在價格最低的地方,即它所設定的價格的起點以及接下來的第二個點放置的是FT 的流動性,也就是ERC20 的流動性。而在上面的三個點放置的是ERC721 的流動性。當這個流動性池當中被交易者買走一個NFT 的時候,中間的這一顆紅色的點就會被置換成綠色。也就是說這個市場當中每買走一個NFT,這個價格就會線性地增長一個恆定的值。而每賣出一個NFT,這個池子當中所提供的inDEX price 就會下降一個恆定的值。同理在指數函數當中是一樣的,它只不過將這個公差變成了一個公比。

Sudoswap 值得肯定的是它開創性地將Bonding Curve 引入到NFT 的交易當中,這確實為流動性提供者們提供了很好的做市的自由度。但是就像剛剛提到的,在它的設計裡,LP 之間的流動性池是割裂的,所以說它的Bonding Curve 在某種程度上喪失了對市場全貌的一個描述能力。我們沒有辦法從某一個流動性池當中真正地看到這個市場交易到什麼程度。它在市場中交易的inDEX Price 也不能夠反映整個NFT Collection 市場的特性,陷入一種“管中窺豹”的窘境。

從已有DEX 中藉鑑的靈感

綜合以上痛點以及現有的成熟產品的設計,我們就在思考什麼樣的NFT AMM 能夠解決上述這些問題。首先我們還是會回到一些市場上主流的ERC20 DEX 當中,去尋找一些能給我們啟發或者靈感的元素。

首先我們認真地研究了Uniswap V3, Uniswap V3 給我們提供了一個很好的Inspiration,首先LP 們可以在限價範圍內提供流動性,這一點類似剛剛提到的Sudoswap 當中LP 限定好自己流動性的bonding Curve,然後在這個範圍內提供流動性。那麼我們其實就會有一個想法,LP 是否可以按照某種bonding Curve 自由地在我們的一個流動性池當中提供自己的流動性。在這樣的基礎上,我們可能需要對它輔助一個Non Fungible LP Token,也就是一個ERC721 的LP 憑證,這樣才能確定好LP 的每一個倉位,其實彼此之間是非同質化的。

然後我們又去深入地調研了Joe V2 的協議設計,它在Uni V3 的基礎上進行了一些升級。首先LP 的這個Curve(曲線) 它是能夠自定義的,它可以選擇LP 流動性的稀疏程度,選擇流動性是否全局地舖在自己這個Range Order 的價格區間上,它可以選擇點狀的流動性提供,同時它還利用Liquidity Book 的設計,將鏈上交易在微觀的維度上可以實現類似於Order Book 的交易模式。這是一種更為新式的流動性分佈的方案。

從這兩個ERC20 DEX 當中我們獲得的最重要的靈感是圖上提到的這四點。如果說ERC20 DEX 給我們設計NFT AMM 提供了哪些重要啟發的話,最重要的還是我們不應該忽略NFT 本身Token ID 之間的差異,我們應該允許LP 對於自己的流動性有差異性的期望。同時我們不應該將LP 的流動性分割到它的每一個私有的流動性池當中,我們應該聚合它們買端的流動性。只有聚合的流動性才能為交易者提供更好的交易體驗,更低的滑點以及提供更加及時的交易體驗。在流動性缺乏和無法聚合的情況下,交易者想要賣出一個NFT 時的體驗是很差的。

Midaswap AMM 的設計思路

講到這裡,我們就可以重新去討論應該怎麼去設計我們自己的NFT AMM。在這之前我們可以先討論一個和這個話題稍微有一點遠的問題,如果大家也看過Uniswap V3 相關的資料,大家都知道Uniswap V3 有一套自己衡量價格的標識,它把這個系統叫做Tick。 Tick 其實是一個1.0001 的指數函數,Tick 每增長一,它就會在對應的價格上面乘1.0001,也就是說Tick 和價格彼此之間是一一映射的。為什麼會這樣設計?其實所有的DEX 都會有一套自己的價格標尺,這個價格標尺是為了從幾乎無限的價格中取出對於我們AMM 最有效的一個價格尺度。在這些價格尺度中間的流動性其實是被忽略的,我們只將我們的流動性提供在這些我們設定好的Tick 當中。

與之對應的另外一個比較主流的設計是Liquidity Bin。 Bin 顧名思義是像箱子一樣的東西,我們可以將每一個價格標尺上面的流動性看作每一個LP 為這一個價格堆疊流動性深度的箱子的高度。打個最簡單的比方,我作為一個LP 在ETH 等於1000USDC 這個位置提供了USDC 的流動性,我提供了1000,那我就會將1000 這個價格的Bin 上的流動性深度往上堆疊1000 的高度。第二個人過來提供2000,他就會將這個流動性深度提高到3000 的高度。

為什麼要在這裡講這一點?其實Tick 相對來說是更符合Uni V3 流動性的激勵方案。而Bin 我們認為它作為一個豎直方向堆疊的流動性方案,更適合離散的NFT 流動性。我們可以把一個NFT 流動性理解成一個小箱子,我們就可以堆疊在Bin 的價格上。每有一個NFT 的Holder 或者一個LP 過來為這個價格提供一個NFT 流動性,我們就將它理解成在這個價格上,它會往上落一個箱子。

為什麼我們說只是簡單地學習某個ERC20 DEX 沒有辦法能夠同時解決上面的三個問題呢?首先不同的NFT Token ID 之間存在著稀有度的差異,這部分產生價值期望的差異對於NFT 這種資產標的是原生性的。而這一點上其實和我們大多數ERC20 的DEX 是有很大的差別的。因為ERC20 DEX 中的流動性池在一個固定的時刻內是不可能有兩個交易者在以不同的價格進行成交的。所以說如果我們希望構建一個複合的NFT 市場,那我們就需要既學習中心化交易所訂單薄的撮合模式,還需要學習在DEX 的AMM 模型中流動性聚合的方法。

那我們就有了這樣一個設計:重新將中心化NFT 市場中特有的Best Offer 和Floor Price 這兩個概念引入進來。首先Best Offer 是指在當前市場內最高的NFT 報價,也就是買方對於這個Collection 的NFT 最高的理想價格,而Floor Price 是當前這個市場內NFT 賣單的最低報價。有了這兩個價格之後,就形成了流動性市場的一個分水嶺:

  • 在Floor Price 以上,我們可以利用Bonding Curve 這種流動性提供方案為NFT 交易者提供類似於Order Book 的交易體驗。舉個例子,當某一個LP 選擇在3個以太坊到5個以太坊的區間裡提供NFT 的流動性,那這些NFT 就會遵循他自己設計的Bonding Curve 散落在3個到5個以太坊的價格點上。交易者在任意時刻進場交易的時候,他都可以選擇自己心儀的NFT 進行交易。那這個NFT 在某種程度上其實就已經被LP 限定住了一個價格。每進行一次交易,它可以在這個LP 的這個Bonding Curve 當中有一次價格的增長。

  • 而AMM 模型被應用在Best Offer 及Best Offer 價格以下。這裡提供FT 流動性的LP 更像是在Blur 市場當中提供買單流動性,可以被認為是同質化的。他們在自己希望提供流動性的價格區間內去安置自己的FT 流動性,在同一個價格點下它們的流動性被認為是等價且聚合的。將這部分流動性聚合後,無論從市場的資本利用效率還是交易效率來講,都大大提高了用戶在賣出一個NFT 時的交易體驗。

這樣一個NFT 市場的設計,可以在某種程度上對於之前我們提到的三個痛點進行中和。我們選取了一個較為Balance 的點,在不忽略NFT Token ID 的情況下,還能為大家提供較好的流動性深度和較為低的NFT 交易滑點。我認為在不忽略NFT 原生交易需求角度來說,這可能是目前我們能想到的最好的方案。同時要提到另外一點,就是Best Offer 和Floor Price 作為NFT 市場當中重要的兩個價格指標,我們這樣的一個交易市場其實是可以提供一個鏈上的Oracle,或者說我們可以為某一個NFT 交易市場提供一個很好的價格發現功能,而不是依賴於某一個外置的這個NFT 市場去輔助NFT 的定價。此外,一個純鏈上的NFT 交易市場為DeFi 當中的可組合性也提供了很多的可能性。比如說我們的LP Token 可以繼續去做Lending 槓桿的疊加,我們的這個Oracle 也可以輔助一些鏈上預言機的報價。這些點都是我們為什麼迫切地需要一個高效的能夠解決交易者和LP 需求的NFT AMM 的原因。

Total
0
Shares
Related Posts