時(shí)間:2023-08-10|瀏覽:247
首先,我們拿uniswap中的一個(gè)交易對(duì)ETH/USDT就決定了K值的初始大小,即K=x*y。
這樣,ETH和USDT一起構(gòu)成了一個(gè)流動(dòng)性池。這個(gè)概念很重要,請(qǐng)牢記。
第一個(gè)添加流動(dòng)性的人可以任意決定交易對(duì)中兩個(gè)幣的數(shù)量,即可以任意決定K值。
添加完流動(dòng)性后,ETH的價(jià)格等于y個(gè)USDT的數(shù)量除以x個(gè)ETH的數(shù)量。如果這個(gè)價(jià)格和其他交易所之間存在差異,那么一定會(huì)有人利用這個(gè)差異來(lái)套利。
恒定乘積算法指的是在流動(dòng)性池沒(méi)有再添加或減少流動(dòng)性的情況下,只有交易行為發(fā)生時(shí),K值保持不變。
換句話說(shuō),無(wú)論用戶在ETH/USDT交易對(duì)中買(mǎi)入還是賣出ETH,都無(wú)法改變K值的大小。
但是,交易行為會(huì)修改流動(dòng)性池中ETH和USDT的成分。比如,用戶買(mǎi)了dx個(gè)ETH,那么流動(dòng)性池中的ETH數(shù)量就會(huì)減少(x-dx),而USDT的數(shù)量則變?yōu)镵/(x-dx),即用戶需要用dy=K/(x-dx)-y個(gè)USDT來(lái)購(gòu)買(mǎi)dx個(gè)ETH。
交易手續(xù)費(fèi)也會(huì)影響K值。
由于存在交易手續(xù)費(fèi),用戶在使用uniswap進(jìn)行交易時(shí)需要支付0.3%的手續(xù)費(fèi)。例如,用戶用dy個(gè)USDT購(gòu)買(mǎi)ETH,uniswap會(huì)先扣除0.3%dy作為手續(xù)費(fèi),并將這筆費(fèi)用添加到流動(dòng)性池中。此時(shí),K值變?yōu)閤*(y+0.3%dy)。
因此,恒定乘積算法中的K值并非固定不變,每一筆交易都會(huì)對(duì)K值產(chǎn)生影響。
添加流動(dòng)性也會(huì)影響K值。
假設(shè)當(dāng)前資金池中有x個(gè)ETH和y個(gè)USDT,那么K=x*y。現(xiàn)在有人添加了dx個(gè)ETH和dy個(gè)USDT,并且dx/dy=x/y。
如果使用uniswap的默認(rèn)設(shè)置進(jìn)行添加流動(dòng)性,即先輸入ETH數(shù)量,然后uniswap會(huì)計(jì)算出需要的USDT數(shù)量,這個(gè)默認(rèn)計(jì)算會(huì)保持dx/dy=x/y的比例。
但是,添加流動(dòng)性后,流動(dòng)性池中的資金變?yōu)?x+dx)個(gè)ETH和(y+dy)個(gè)USDT。此時(shí),(x+dx)*(y+dy) > x*y,即K值增大了。
同樣地,減少流動(dòng)性會(huì)減少K值。
捐贈(zèng)也會(huì)影響K值。
如果在添加流動(dòng)性時(shí),按照dx/dy=x/y的比例進(jìn)行添加,即直接向合約地址轉(zhuǎn)入dx>0的ETH,dy=0的USDT,這樣也會(huì)改變K值。
這種捐贈(zèng)行為經(jīng)常發(fā)生,有些人錯(cuò)誤地將ETH轉(zhuǎn)入uniswap流動(dòng)性池的合約地址,從而無(wú)意中將幣捐贈(zèng)給了原有的流動(dòng)性提供者。
這種按非K值比例添加流動(dòng)性的行為被稱為捐贈(zèng),但是這種捐贈(zèng)行為在設(shè)計(jì)上可以被其他人利用。例如,有人充值了dx>0,dy=0,那么另一個(gè)人可以按照K值比例充值dy,并執(zhí)行添加流動(dòng)性的操作,從而將dx的捐贈(zèng)收入自己的賬戶。具體細(xì)節(jié)比較復(fù)雜,我也不太清楚。
任何不按照K值比例添加的流動(dòng)性都會(huì)產(chǎn)生捐贈(zèng)。例如,dx/dy > x/y,可以先按照(dx-ddx)/dy=x/y的比例添加流動(dòng)性,并向用戶返回相應(yīng)數(shù)量的LPtoken,然后ddx就成為了捐贈(zèng)。
在同一個(gè)區(qū)塊中,有可能既有添加流動(dòng)性的交易,又有買(mǎi)賣的交易,這會(huì)使K值變得更加復(fù)雜。
感謝PlanckerDao成員李世勝對(duì)本文的貢獻(xiàn)。