而這個訂單記錄就是所謂的order book,即國內的“盤口”。它是判斷股票價格短期波動方向的主要工具,而和它搭配的工具就是k線圖。在火幣等中心化的交易所裡,我們能看到,在右邊的那一部分就是所謂的order book,也就是我剛才說明的內容,而這就是市商的核心。
由於篇幅所限,便不在這方面展開說明,不過從MM中,我們還是可以看出一個關鍵點:市場的價格是由人為因素決定的,取決於你在盤口上的訂單。
而新出現的自動化市商,即AMM,則截然不同,在AMM中,價格不再由人為因素決定,而完全由演算法決定。這一點該如何理解呢?
在AMM中,一般兩種token(比如ETH和USDT)組成一個交易對,持有token的人會向這個交易對中存入token,這樣,這個交易對就變成一個具有流動性的池子了。一些想把ETH換成USDT的人,就可以透過這個交易對的池子實現幣種的兌換,反之亦然。不過,要想進行兌換,必然得看價格多少,在AMM中,一種token的價格是相對於另一種token的,並且由演算法決定。
實現價格決定的自動化演算法很多,但是最著名的莫過於“恆定乘積公式”,即constant product formula。它的表示式為:
x*y = k
x和y是兩種token的數量,k是恆定值。
而價格便由兩種token數量的比率決定:
P = x/y
這是因為,一個交易池是一個隔離的世界,比如上述的ETH-USDT,在這個池子裡,ETH的總價值一定和USDT的總價值相等。即:
P(ETH) * x = P(USDT) * y
得到:
P(ETH/USDT) = y/x
假設池中有100個ETH和10000個USDT,那麼ETH的價格就是10000/100 = 100。
現在你一定會問,這個看起來簡單的公式為什麼有效?
首先,它使得交易池子擺脫了流動性規模的限制。我們在座標平面上畫出x*y=k的圖形,發現它就是雙曲線的一支。
現在假設池子裡有100個ETH和10000個USDT,並且在中心化的交易所裡,比如火幣上的ETH/USDT是100。現在我要換取60個ETH,那麼這個時候我需要花多少USDT呢?
我們根據恆定乘積公式,知道k=100*10000=1M,現在當ETH變成了40(100-60=40),根據公式,USDT的數量應該是1M/40=25000,ETH在該池子對USDT的價格就變成了25000/40=625,使用者一般不會花如此高價購買如此多的ETH。所以,從利益動機上來看,人們不會在這個池子裡做這麼大比重的交易,一般人們只會進行一筆換取0.05個ETH的交易,這不會讓其價格和火幣的價格相差太多。而中心化的交易所,不存在這種利益動機能夠阻止一個買家在MM中下一個大筆訂單,並且,他完全可以出於某種利益動機這麼做,因為這會對資產的市場價格造成巨大的影響,而他自己並不會承受到這個影響。在這種情況下,我們稱這個市場的流動性較差,或者市場深度較低,反過來講就是:
一個市場流動性好的表現就是,不存在任何一筆訂單,會對市商內部的資產價格造成較大影響。
另外,AMM能夠透過套利機制實現價格的穩定。
假如現在火幣上ETH的價格變成了150,但是在AMM裡面,ETH的價格還是100,那麼聰明人一定會從AMM中換取ETH,然後放到火幣上賣出賺取差價,這樣AMM中的ETH就會開始變少,即ETH在AMM中開始變貴,人們不會停止套利直到AMM中ETH的價格變成150(不考慮交易費)。
再比如,如果我只向這個池子裡提供了100個ETH,現在池子裡變成了200個ETH和10000和USDT,顯然在AMM裡ETH貶值了一半,這時聰明人一定會從AMM中換取ETH,然後放到火幣上賣出賺取差價,和之前一樣,AMM中的ETH會迴歸到100個,但是池子裡所有人提供的ETH量就會折損成原理的一半,導致發生損失。因此,在提供流動性的時候,任何一個swap應用都會建議:
請一起提供ETH以及和其法幣價值相同的USDT。
最後,需要注意的是,k並不是絕對不變的,如果沒有向池子裡提供新的流動性,而只是進行token兌換,這時候k是不變的,但是一旦加入或者減少了流動性,k就會增大或者減少。