時(shí)間:2023-08-10|瀏覽:207
Uniswap是一個(gè)去中心化交易平臺(tái),它使用了一種稱為恒定乘積算法的方法來確定交易對(duì)的初始K值。恒定乘積算法中,當(dāng)?shù)谝粋€(gè)用戶添加流動(dòng)性時(shí),其所添加的資產(chǎn)數(shù)量決定了K值的初始大小,即K = x * y,其中x為ETH數(shù)量,y為USDT數(shù)量。
在Uniswap中,ETH和USDT構(gòu)成了一個(gè)流動(dòng)性池。這一概念非常重要。第一個(gè)添加流動(dòng)性的用戶可以任意選擇所添加的兩種資產(chǎn)數(shù)量,從而任意決定K值的大小。
添加完流動(dòng)性后,ETH的價(jià)格等于流動(dòng)性池中的USDT數(shù)量除以ETH數(shù)量。如果該價(jià)格與其他交易所存在差異,就有套利的機(jī)會(huì)。
恒定乘積算法指的是在流動(dòng)性池沒有再添加或減少流動(dòng)性的情況下,只有交易行為發(fā)生時(shí),K值保持不變。
即用戶在ETH/USDT交易對(duì)中買入或賣出ETH,都無法改變K值的大小。但是交易會(huì)改變流動(dòng)性池中ETH和USDT的數(shù)量。例如,當(dāng)用戶購(gòu)買了dx個(gè)ETH時(shí),流動(dòng)性池中ETH的數(shù)量會(huì)變?yōu)閤-dx,而USDT的數(shù)量會(huì)變?yōu)镵/(x-dx)。用戶需要花費(fèi)dy=K/(x-dx)-y個(gè)USDT來購(gòu)買dx個(gè)ETH。
此外,交易手續(xù)費(fèi)也會(huì)影響K值。在Uniswap交易中,用戶需要支付0.3%的手續(xù)費(fèi)。例如,當(dāng)用戶用dy個(gè)USDT購(gòu)買ETH時(shí),Uniswap會(huì)首先扣除0.3%dy的手續(xù)費(fèi),并將其放在一邊。交易完成后,這個(gè)0.3%dy的手續(xù)費(fèi)會(huì)被添加到流動(dòng)性池中,此時(shí)K值變?yōu)閤*(y+0.3%dy)。
因此,恒定乘積算法中的K值并不是恒定的,每一筆交易都會(huì)影響K值。
另外,添加或減少流動(dòng)性也會(huì)影響K值。如果現(xiàn)有資金池中有x ETH和y USDT,那么K=x*y。當(dāng)有人添加流動(dòng)性并增加了dx個(gè)ETH和dy個(gè)USDT時(shí),并且dx/dy=x/y,資金池中的資金量變?yōu)?x+dx)ETH/(y+dy)USDT。此時(shí),(x+dx)*(y+dy) > x*y,所以添加流動(dòng)性會(huì)使K值增大。同樣地,減少流動(dòng)性則會(huì)減小K值。
還有一種特殊情況是捐贈(zèng)對(duì)K值的影響。如果用戶在添加流動(dòng)性時(shí),不按照dx/dy=x/y的比例添加,而是直接向合約地址轉(zhuǎn)入dx>0,dy=0,這也會(huì)改變K值。這種捐贈(zèng)行為并不符合K值的比例規(guī)定,因此被Uniswap稱為捐贈(zèng)。
捐贈(zèng)行為在設(shè)計(jì)上其實(shí)是可以被其他用戶套利的。例如,一個(gè)用戶充值了dx>0且dy=0,此時(shí)另一個(gè)用戶可以按照K值比例的dy充值,并執(zhí)行添加流動(dòng)性操作,從而將捐贈(zèng)的dx轉(zhuǎn)移到自己賬戶。這個(gè)過程比較復(fù)雜,具體細(xì)節(jié)不清楚。
任何不按照K值比例添加流動(dòng)性的行為都會(huì)產(chǎn)生捐贈(zèng)。例如,如果dx/dy>x/y,則先添加(dx-ddx)/dy=x/y的流動(dòng)性,并返回給用戶對(duì)應(yīng)數(shù)量的LPtoken,然后ddx就變成了捐贈(zèng)。
另外,在同一個(gè)區(qū)塊中,可能既有添加流動(dòng)性的交易,也有買賣交易,這會(huì)使K值更加復(fù)雜地變化。
感謝PlanckerDao成員李世勝對(duì)本文的貢獻(xiàn)。