Uniswap V2 關(guān)于預(yù)言機(jī)和閃電貸

2018 年底給大家介紹了 Uniswap V1夫啊,一個基于簡單數(shù)學(xué)公式的去中心化交易所(V1 版本介紹文章)。如今 V1 版本已經(jīng)在以太坊上運(yùn)行了一載有余浇冰,證明了這種數(shù)學(xué)公式兌換模型的可行性和實(shí)用性殊霞。2020 年 3 月 23 號桩匪,官方發(fā)布文章介紹即將問世的 V2 版本怕篷。那么 V2 有什么改進(jìn)和突破呢历筝?就讓我們來瞧一瞧(官方博客:Uniswap V2)。

本文主要從技術(shù)角度介紹 V2 的一些特性廊谓,分析這些新特性可能帶來的改進(jìn)和影響。這些特性包括:ERC20/ERC20 供給池麻削、價格預(yù)言機(jī)和閃電兌換蒸痹。其中關(guān)于預(yù)言機(jī)和閃電兌換會做一些的思考春弥,歡迎有識之士來探討這些問題。對某項特性感興趣的讀者可直接跳到指定章節(jié)叠荠。

ERC20/ERC20 供給池

V1 版本只能通過 ERC20 和 ETH 建立供給池匿沛。如果我們使用 DAI 去兌換 ETH,那就可以直接使用 DAI/ETH 的供給池獲得兌換榛鼎。當(dāng)我們要進(jìn)行 DAI 到 USDC 的兌換時逃呼,V1 版本是將 DAI 兌換成 ETH,再使用 ETH 去 USDC/ETH 的供給池進(jìn)行“二次”兌換者娱,最終完成 USDC 到 DAI 的整個兌換過程抡笼。

DAI to USDC

V2 的供給池,可以使用任意兩種 ERC20 代幣構(gòu)成黄鳍。這樣做的一個好處是可以降低兌換匯率的滑點(diǎn)推姻,因為每個供給池都會收取一定的費(fèi)用作為兌換手續(xù)費(fèi),通過兩個供給池兌換那就是兩倍的費(fèi)用框沟。V2 對 ERC20/ERC20 供給池的支持藏古,使 DAI 兌換 USDC 的時候不再需要向兩個供給池進(jìn)行兌換,減少了一半的費(fèi)用忍燥,兌換匯率滑點(diǎn)也會更低拧晕。

如果兩種 ERC20 Token 之間沒有直接的供給池,V2 的路由協(xié)議可以在多個供給池之間找到一條優(yōu)化的兌換路徑梅垄,在多個供應(yīng)池之間完成兌換防症。為了實(shí)現(xiàn) A 到 D 的兌換,可以通過 A 兌換到 B哎甲,B 兌換到 C蔫敲,C 兌換到 D 來完成。

目前代碼中的路由協(xié)議是 01 版本炭玫,需要在鏈下計算好路徑提交給路由協(xié)議進(jìn)行處理奈嘿。

價格預(yù)言機(jī)

隨著 DeFi 應(yīng)用的興起,預(yù)言機(jī)變得越來越重要吞加,區(qū)塊鏈應(yīng)用對預(yù)言機(jī)的依賴和要求越來越高裙犹。

對預(yù)言機(jī)感興趣的讀者可以閱讀上一篇文章,專門介紹了以太坊上最大的預(yù)言機(jī)項目 Chainlink(Chainlink 鏈接區(qū)塊和“萬物”)衔憨。

但在預(yù)言機(jī)的發(fā)展和探索道路上叶圃,可謂事故頻發(fā),造成的經(jīng)濟(jì)損失不計其數(shù)践图。早有 Synthetix 由于預(yù)言機(jī)的錯誤喂價導(dǎo)致 3500 萬的 sETH 損失掺冠;最近的 bZx 閃電貸套利事件,也是由于平臺使用了 Uniswap 作為價格預(yù)言機(jī)造成了經(jīng)濟(jì)損失码党。

bZx 閃電貸事件中德崭,攻擊者使用借出的資金對 Uniswap 進(jìn)行砸盤斥黑,導(dǎo)致其價格劇烈變化。此時眉厨,使用 Uniswap 作為預(yù)言機(jī)的平臺由于讀取了當(dāng)前砸盤后的價格锌奴,出現(xiàn)了巨大的套利空間。套利完成后憾股,攻擊者歸還在閃電貸中借出的資金鹿蜀,完成交易。而整個交易過程都在一個區(qū)塊的一個交易中一次性完成服球,是為“閃電貸”茴恰。

可以發(fā)現(xiàn)在 bZx 事件中,由于平臺使用了 Uniswap 最后時點(diǎn)的執(zhí)行價格產(chǎn)生了不符合預(yù)期的喂價有咨。盡管這個價格在 Uniswap 是真實(shí)的琐簇,但和其他平臺是價格存在很大的偏差。由于閃電貸在一個區(qū)塊中迅速完成所有的操作座享,Uniswap 的執(zhí)行價格沒有和其他平臺進(jìn)行套利拉平的機(jī)會婉商,可以認(rèn)為是一個不符合預(yù)期的價格。

V2 的改進(jìn)是歷史將價格保存在鏈上渣叛,并加上了時間權(quán)重丈秩。它的存儲方式是在鏈上保存了一個累積價格,通過使用兩個累積價格的差值和時間差淳衙,可以計算出一個具有時間權(quán)重的平均價格蘑秽。

我們知道 Uniswap 的價格變動是跟隨交易變化的。如果一直沒有交易箫攀,那么這個價格會是一個固定的值肠牲。假設(shè)兩次交易的間隔 10 秒,第一次交易后產(chǎn)生的價格 P1 會持續(xù)存在靴跛,直到第二次交易的發(fā)生(10 秒后)才變?yōu)?P2缀雳。因此 P1 的累積值就是 P1 * 10。累積價格(priceCumulative)即價格和時間差的乘積梢睛。在無數(shù)次的價格變動中肥印,其中每次的時間間隔分別是 T1、T2绝葡、T3...深碱,就有:

priceCumulative = P1 * T1 + P2 * T2 + P3 * T3 + ...

有了累積價格,使用累積價格除以時間就可以得到一個基于時間權(quán)重的平均價格藏畅。

具體實(shí)現(xiàn)如下圖:

cumulative

區(qū)塊 122敷硅,供給池被創(chuàng)建后累積價格(priceCumulative)初始值為 0,此時只是發(fā)生了交易,產(chǎn)生了一個截止價格竞膳,而累積價格并未產(chǎn)生航瞭。

區(qū)塊 123 的中發(fā)生的第一筆交易會更新累積價格诫硕,區(qū)塊 123 和上一個區(qū)塊的時間差為 7 秒坦辟,因此累積價格就是 10.2 * 7,即 71.4章办。

區(qū)塊 124 和上一次區(qū)塊的時間差為 8 秒锉走,使用上一次的截止價格計算的累積值為 10.3 * 8,即 82.4藕届,加上之前的累積值即為 153.8挪蹭。計算過程以此類推。

當(dāng)我們知道每個區(qū)塊的累積價格時休偶,可以通過公式獲得任意時間范圍內(nèi)的梁厉,帶有時間權(quán)重的平均價格:

時間權(quán)重的平均價格 = (當(dāng)前累積價格 - 上一次累積價格)/(當(dāng)前時間戳 - 上一次時間戳)

計算過程中,累積價格包含了上一次交易區(qū)塊中發(fā)生的截止價格踏兜,但不會將當(dāng)前區(qū)塊中的最新截止價格計算進(jìn)去词顾,這個計算要等到后續(xù)區(qū)塊的交易發(fā)生時進(jìn)行。因此累積價格永遠(yuǎn)都比當(dāng)前區(qū)塊的最新價格(執(zhí)行價格)慢那么一個區(qū)塊碱妆。由于慢了一個區(qū)塊肉盹,閃電貸在同一個區(qū)塊里進(jìn)行的砸盤價格就不能立即生效。當(dāng)惡意砸盤發(fā)生時疹尾,不會影響當(dāng)前的預(yù)言機(jī)價格上忍,但是執(zhí)行價格會立即降低,發(fā)現(xiàn)價格變動的套利者會在下一個區(qū)塊將價格缺口補(bǔ)平纳本。采用這樣的機(jī)制窍蓝,使預(yù)言機(jī)具備了防范閃電貸中惡意砸盤行為的能力。同時繁成,惡意砸盤產(chǎn)生的價格會被套利者發(fā)現(xiàn)并迅速補(bǔ)平缺口吓笙,由于快速的套利會使砸盤價格存在的時間權(quán)重較低,也能極大的提高預(yù)言機(jī)的準(zhǔn)確性朴艰。

閃電兌換

也許是得益于閃電貸的啟發(fā)观蓄,V2 版本也將提供閃電兌換的功能。該功能同閃電貸異曲同工祠墅,無需任何抵押(空手套白狼)侮穿,就可以借出 Uniswap 供給池中的 Token,這些 Token 用于“閃電”業(yè)務(wù)毁嗦,只要在業(yè)務(wù)處理完成后亲茅,將 Token 即刻歸還,就可以完成一筆閃電兌換。

V2 的閃電兌換有一個特點(diǎn)克锣,歸還的時候支持使用供給池中的兩種不同的 Token茵肃。

V2 核心合約 Pair (即供給池)的 swap 函數(shù)中實(shí)現(xiàn)了 calldata 調(diào)用,并且可以讓用戶先兌后還袭祟。假設(shè)有一個支持 DAI/ETH 的 Pair(供給池)验残,一開始 ETH 會從 Pair 借出到外部套利合約,然后 Pair 會去調(diào)用套利合約實(shí)現(xiàn)的 uniswapV2Call 接口巾乳。uniswapV2Call 中可以完成一系列的“閃電”業(yè)務(wù)您没,之后 uniswapV2Call 再將相應(yīng)的 ETH 或者 DAI 返還給 Pair。Pair 對 uniswapV2Call 調(diào)用結(jié)束后胆绊,會進(jìn)行最終的賬目核對氨鹏。如果 Pair 沒有收到足夠的 ETH 或者 DAI,那么整個交易都將回滾压状。因此對于套利者仆抵,借出一筆 ETH 后,必須在該原子交易結(jié)束前再將 ETH 或 DAI 返還(并付上 0.3% 的費(fèi)率)种冬,才能保證整個閃電兌換的成功镣丑。

flash swap

反觀最近發(fā)生的 bZx 事件,它可能不算是一種攻擊碌廓,而是多種 DeFi 金融工具結(jié)合涌現(xiàn)出的一種“平倉”操作传轰。這樣的操作或許會使價值更接近本質(zhì)。區(qū)塊鏈上的價值谷婆,會以自動化算法為驅(qū)動慨蛙,在整個區(qū)塊鏈網(wǎng)絡(luò)中以更加迅速的方式流動,bZx 的閃電貸就是一種很好的體現(xiàn)纪挎,在一個原子交易中抹平價值和信息的差距期贫。

閃電貸、閃電兌換應(yīng)該會成為一種常態(tài)异袄,擁有專業(yè)能力的人通砍,在沒有資本的前提下,亦可以捕獲價值信息的不對稱烤蜕,從價值轉(zhuǎn)化中獲取利益封孙。在傳統(tǒng)領(lǐng)域,這必須是具有龐大資本的機(jī)構(gòu)才能完成的操作讽营。

結(jié)語

Uniswap 上線之初虎忌,就不是一個能使項目方自己賺得金銀滿缽的項目,他的供給池是由無數(shù)的個人用戶組成橱鹏。只要你擁有 ETH 和 token 既可以存儲在供給池中獲利膜蠢。通過簡單的算法堪藐,供給池在交易的過程中持續(xù)的增長,最終這些收益又回饋到供給池的提供者們身上挑围。它以低廉的成本礁竞,通過區(qū)塊鏈完成了一種自組織、盈利和分配的機(jī)制杉辙,這種機(jī)制不會使壟斷機(jī)構(gòu)獲取暴利模捂,而是按照每個人所提供的資本進(jìn)行平等分配,是一種真正透明奏瞬、公正可持續(xù)化的機(jī)制枫绅。

在整個去中心化組織的發(fā)展歷程中泉孩,由于機(jī)制的先進(jìn)性和早期的不完善硼端,不免產(chǎn)生各種新的問題,甚至造成巨大的經(jīng)濟(jì)損失寓搬。Uniswap V1 作為預(yù)言機(jī)存在一定的問題珍昨,但從 V2 的升級中我們可以看到機(jī)制的進(jìn)一步完善,使之前的問題被化解句喷。同時镣典,閃電兌換的創(chuàng)新,開放了Uniswap 的供給池唾琼,為那些缺乏資本擁有能力的專業(yè)人士創(chuàng)造了機(jī)會兄春。通過這些持續(xù)不斷的創(chuàng)造和改進(jìn),自組織形式在快速的發(fā)展和完善锡溯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赶舆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子祭饭,更是在濱河造成了極大的恐慌芜茵,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倡蝙,死亡現(xiàn)場離奇詭異九串,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)寺鸥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門猪钮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胆建,你說我怎么就攤上這事烤低。” “怎么了眼坏?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵拂玻,是天一觀的道長酸些。 經(jīng)常有香客問我,道長檐蚜,這世上最難降的妖魔是什么魄懂? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮闯第,結(jié)果婚禮上市栗,老公的妹妹穿的比我還像新娘。我一直安慰自己咳短,他們只是感情好填帽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著咙好,像睡著了一般篡腌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上勾效,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天挪捕,我揣著相機(jī)與錄音胁住,去河邊找鬼袁铐。 笑死爽航,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的萌腿。 我是一名探鬼主播限匣,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼毁菱!你這毒婦竟也來了米死?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鼎俘,失蹤者是張志新(化名)和其女友劉穎哲身,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贸伐,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡勘天,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了捉邢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脯丝。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖伏伐,靈堂內(nèi)的尸體忽然破棺而出宠进,到底是詐尸還是另有隱情,我是刑警寧澤藐翎,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布材蹬,位于F島的核電站实幕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏堤器。R本人自食惡果不足惜昆庇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望闸溃。 院中可真熱鬧整吆,春花似錦、人聲如沸辉川。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乓旗。三九已至府蛇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寸齐,已是汗流浹背欲诺。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留渺鹦,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓蛹含,卻偏偏與公主長得像毅厚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子浦箱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 今天是平安夜吸耿,休息一天! 吃喝玩樂才是我的樂趣(o^^o)
    雨木目_b4b0閱讀 126評論 0 0
  • 《子夜吾歌》 風(fēng)弄紗簾影酷窥,遲昕冷月回咽安。 瓶花參秀骨,弱柳向周薇蓬推。 酌酒余生度妆棒,推茶舊夢歸。 唪經(jīng)當(dāng)幾日沸伏?可使不顰眉...
    海棠小生閱讀 653評論 3 26
  • 愿奮勉向前的情事讓我們情誼相通毅糟! 2016年最后一個月了红选,我們終將永別2016,走入2017姆另。 時間是一視同仁的喇肋,...
    黑咖啡_鐘閱讀 378評論 0 0