比特幣價格 比特幣價格
Ctrl+D 比特幣價格
ads

PRI:價格預言機的使用總結(二):UniswapV2篇_flokiceo幣總量

Author:

Time:1900/1/1 0:00:00

該系列的前一篇文章介紹了 Chainlink 價格預言機的使用,其目前也被大部分 DeFi 應用所使用,但依然存在局限性。首先是所支持的 Token 的覆蓋率還不全,尤其是長尾資產,大多還未支持,比如 SHIB,目前只在 BSC 主網有 SHIB/USD 的 Price Feed,而其它網絡的都還沒有,連 Ethereum 的都還沒支持。其次,有些資產的偏差閾值較大,價格更新也比較慢,可能長達十幾二十個小時才會更新價格,比如 BNT。

這時候就需要考慮其它價格預言機了,而 UniswapV2 和 UniswapV3 都是不錯的選擇。

本篇先來聊聊如何使用 UniswapV2 作為價格預言機。

UniswapV2 使用的價格預言機稱為 TWAP(Time-Weighted Average Price),即時間加權平均價格。不同于鏈下聚合的 Chainlink 取自多個不同交易所的數據作為數據源,TWAP 的數據源來自于 Uniswap 自身的交易數據,價格的計算也都是在鏈上執行的,因此,TWAP 屬于鏈上預言機。

TWAP 的原理比較簡單,首先,在 UniswapV2Pair 合約中,會存儲兩個變量 price0CumulativeLast 和 price1CumulativeLast,在 _update() 函數中會更新這兩個變量,其相關代碼如下:

Inverse Finance回應被盜:價格預言機被操縱,將確保用戶得到100%補償:4月3日消息,DeFi借貸協議Inverse Finance在官方推特回應被盜事件,稱其貨幣市場受到了對Sushiswap上 INV/ETH 價格預言機的資本密集型操縱,導致 INV 價格大幅上漲,隨后攻擊者得以借入1560萬美元的 DOLA、ETH 、WBTC 和 YFI。

對此,該項目本身將提出計劃確保所有受影響的錢包都得到 100% 的補償,并且沒有計劃或需要鑄造額外的 INV 代幣。同時,該項目鼓勵價格操縱者通過 Twitter DM 或 Discord 聯系并討論慷慨的賞金以換取借入的資金。[2022/4/3 14:01:40]

price0CumulativeLast 和 price1CumulativeLast 分別記錄了 token0 和 token1 的累計價格。所謂累計價格,其代表的是整個合約歷史中每一秒的 Uniswap 價格總和。且只會在每個區塊第一筆交易時執行累加計算,累加的值不是當前區塊的第一筆交易的價格,而是在這之前的最后一筆交易的價格,所以至少也是上個區塊的價格。取自之前區塊的價格,可以大大提高操控價格的成本,所以自然也提高了安全性。

橋水基金創始人瑞·達利歐:“木頭姐”對比特幣50萬美元的價格預測毫無意義:金色財經報道,億萬富翁、全球知名對沖基金經理瑞·達利歐(Ray Dalio)對方舟投資管理公司首席執行官“木頭姐”凱西·伍德(Cathie Wood)的預測提出異議,凱西·伍德此前表示,比特幣價格將在五年后上漲十倍,達到 50 萬美元左右。在本周于紐約舉行的 SALT 會議上,瑞·達利歐接受了《紐約時報》專欄作家和 CNBC 聯合主播安德魯·羅斯·索爾金的采訪,他說道:“對我來說,這種預測沒有意義,因為在一定程度上,我們需要把通貨膨脹考慮進去,通脹會導致價格上漲,最后黃金會擁有一定市場份額,比特幣也會擁有一定市場份額。但鑒于其波動性和自身屬性,我認為比特幣市場份額不會更大。” 瑞·達利歐本人持有黃金和比特幣,但黃金比比特幣多。(thinkadvisor)[2021/9/16 23:28:37]

如上圖所示,合約的第一個區塊為 Block 122,這時候,價格和時間差都為 0,所以累計價格也為 ?0。到了下一個區塊 Block 123,這時候取自上個區塊的最后一口價格 10.2,且經過的時間差為 7,因此就可以計算出累計價格 priceCumulative = 10.2 * 7 = 71.4。再到下個區塊 Block 124,取自上一口價格 10.3,兩個區塊間的時間差為 8,那此時的累計價格就變成了 71.4 + (10.3 * 8) = 153.8。Block 125 的時候也同理,上口價格為 10.5,區塊時間差為 5,所以最新的累計價格就變成了 153.8 + (10.5 * 5) = 206.3。

John McAfee三年前關于BTC的價格預測未能實現:三年前,加密貨幣倡導者、殺軟件之父John McAfee在推特預測BTC將在三年內價值超過50萬美元。不過這一預言未能實現,目前比特幣交易價格仍低于1萬美元,這是過去三個月來非常強勁的阻力位。或許人們可以質疑之前反彈的有效性,因為比特幣現在比以往任何時候都更具流動性,越來越多的機構投資者蜂擁而入,需求穩步上升,而山寨幣似乎也在做出積極反應。比特幣在市場的主導地位正在被山寨幣市場動搖,在預期的反彈之后,比特幣可能會進一步下跌。

有一些潛在的基本面不利于比特幣及其預期的下一波走勢。首先,新冠病大流行給企業和人們的日常活動帶來壓力。因此,看到更多人投資高度波動的市場和被認為有風險的市場(如加密資產)的可能性非常小。其次,比特幣是基于PoW機制開采,在監管機構推動清潔能源項目之際,比特幣因高能耗而受到影響。另一個可能壓制比特幣價格的主要原因是交易成本高,以及交易活動大量涌入導致處理速度慢。

McAfee的案例表明,價格預測,尤其是加密行業的價格預測無法得到保證,因為沒有人能單獨控制市場。幣安CEO評論稱,“這就是為什么我不做價格預測。”(Zycrypto)[2020/7/18]

有了這個基礎之后,就可以計算 TWAP 了。

動態 | 邁克菲的100萬美元比特幣價格預測僅剩一年:金色財經報道,隨著2019年底的臨近,這意味著約翰·邁克菲(John McAfee)臭名昭著的賭注還剩下一年,他說每個比特幣的價格“將在2020年底前達到100萬美元。”目前,BTC的價格比McAfee的預測低95%。[2019/12/25]

計算 TWAP 的原理也是非常簡單,如上圖所示,這是計算時間間隔為 1 小時的 TWAP,取自開始和結束時的累計價格和兩區塊當時的時間戳,兩者的累計價格相減,再除以兩者之間的時間差,就算出這 1 小時內的 TWAP 價格了。

這是 TWAP 最簡單的計算方式,也稱為固定時間窗口的 TWAP。下面來講講具體如何實現。

Uniswap 官方也有提供了一個示例代碼來計算固定時間窗口的 TWAP,其代碼放在 v2-periphery 項目中:

https://github.com/Uniswap/v2-periphery/blob/master/contracts/examples/ExampleOracleSimple.sol

該示例代碼也比較簡單,我們直接貼上代碼看看:

PERIOD 指定為了 24 小時,說明這個示例計算 TWAP 的固定時間窗口為 24 小時,即每隔 24 小時才更新一次價格。

動態 | 特斯拉總裁發“200K”一字推文 網友猜其為BTC價格預測鬧烏龍:據StormGain消息,11月24日,特斯拉總裁埃隆·馬斯克(Elon Musk)發布了一條只有一個單詞的推文“ 200K”。隨后,該數字引發討論,其粉絲紛紛猜測,這是不是馬斯克對比特幣2021年價格的預測。事后證實,該數字與比特幣無關,馬斯克指的是其最新產品“ Cybertruck”的預訂數量達“200K”。[2019/11/25]

該示例也只保存一個交易對的價格,即 token0-token1 的價格。price0Average 和 price1Average 分別就是 token0 和 token1 的 TWAP 價格。比如,token0 為 WETH,token1 為 USDC,那 price0Average 就是 WETH 對 USDC 的價格,而 price1Average 則是 USDC 對 WETH 的價格。

update() 函數就是更新 TWAP 價格的函數,這一般需要鏈下程序的定時任務來觸發,按照這個示例的話,就是鏈下的定時任務需要每隔 24 小時就定時觸發調用 update() 函數。

update() 函數的實現邏輯也和上面所述的公式一致:

讀取出當前最新的累計價格和當前的時間戳;

計算出當前時間和上一次更新價格時的時間差 timeElapsed,要求該時間差需要達 24 小時;

根據公式 TWAP = (priceCumulative - priceCumulativeLast) / timeElapsed 計算得到最新的 TWAP,即 priceAverage;

更新 priceCumulativeLast 和 blockTimestampLast 為當前最新的累計價格和時間戳。

不過,有一點需要注意,因為 priceCumulative 本身計算存儲時是做了左移 112 位的操作的,所以計算所得的 priceAverage 也是左移了 112 位的。

consult() 函數則可查詢出用 TWAP 價格計算可兌換的數量。比如,token0 為 WETH,token1 為 USDC,假設 WETH 的價格為 3000 USDC,查詢 consult() 時,若傳入的參數 token 為 token0 的地址,amountIn 為 2,那輸出的 amountOut 則為 3000 * 2 = 6000,可理解為若支付 2 WETH,就可根據價格換算成 6000 USDC。

固定時間窗口 TWAP 的原理和實現,比較簡單,但其最大的不足就是價格變化不夠平滑,時間窗口越長,價格變化就可能會越陡峭。因此,在實際應用中,更多其實是用滑動時間窗口的 TWAP。

所謂滑動時間窗口 TWAP,就是說,計算 TWAP 的時間窗口并非固定的,而是滑動的。這種算法的主要原理就是將時間窗口劃分為多個時間片段,每過一個時間片段,時間窗口就會往右滑動一格,如下圖所示:

上圖所示的時間窗口為 1 小時,劃分為了 6 個時間片段,每個時間片段則為 10 分鐘。那每過 10 分鐘,整個時間窗口就會往右滑動一格。而計算 TWAP 時的公式則沒有變,依然還是取自時間窗口的起點和終點。如果時間窗口為 24 小時,按照固定時間窗口算法,每隔 24 小時 TWAP 價格才會更新,但使用滑動時間窗口算法后,假設時間片段為 1 小時,則 TWAP 價格是每隔 1 小時就會更新。

Uniswap 官方也同樣提供了這種滑動時間窗口 TWAP 實現的示例代碼,其 Github 地址為:

https://github.com/Uniswap/v2-periphery/blob/master/contracts/examples/ExampleSlidingWindowOracle.sol

我們也貼上代碼看看:

要實現滑動時間窗口算法,就需要將時間分段,還需要保存每個時間段的 priceCumulative。在這實現的示例代碼中,定義了結構體 Observation,用來保存每個時間片段的數據,包括兩個 token 的 priceCumulative 和記錄的時間點 timestamp。還定義了 pairObservations 用來存儲每個 pair 的 Observation 數組,而數組實際的長度取決于將整個時間窗口劃分為多少個時間片段。

windowSize 表示時間窗口大小,比如 24 小時,granularity 是劃分的時間片段數量,比如 24 段,periodSize 則是每時間片段的大小,比如 1 小時,是由 windowSize / granularity 計算所得。這幾個值都在構造函數中進行了初始化。

觸發 update() 函數則更新存儲最新時間片段的 observation,如時間片段大小為 1 小時,即每隔 1 小時就要觸發 update() 函數一次。因為這個示例中是支持多個 pair 的,所以 update() 時需要指定所要更新的兩個 token。

而查詢當前 TWAP 價格的計算就在 consult() 函數里實現了。首先,先獲取到當前時間窗口里的第一個時間片段的 observation,也算出當前時間與第一個 observation 時間的時間差,且讀取出當前最新的 priceCumulative,之后就在 computeAmountOut() 函數里計算得到最新的 TWAP 價格 priceAverage,且根據 amountIn 算出了 amountOut 并返回。

本文我們主要介紹了被廣泛使用的一種鏈上預言機 TWAP(時間加權平均價格),且介紹了固定時間窗口和滑點時間窗口兩種算法的 TWAP。雖然,TWAP 是由 Uniswap 推出的,但因為很多其他 DEX 也采用了和 Uniswap 一樣的底層實現,如 SushiSwap、PancakeSwap 等,所以這些 DEX 也可以用同樣的算法計算出對應的 TWAP。

但使用 UniswapV2 的 TWAP,其主要缺陷就是需要鏈下程序定時觸發 update() 函數,存在維護成本。UniswapV3 的 TWAP 則解決了這個問題,下一篇會來聊聊其具體是如何實現的。

文章首發于「Keegan小鋼」公眾號:

https://mp.weixin.qq.com/s?__biz=MzA5OTI1NDE0Mw==&mid=2652494441&idx=1&sn=57a97690390b93770c5a906dce4157c8&chksm=8b685079bc1fd96f9ab60cc1b41b8642abf807a13a37c12f05a280be2e03f3a9288a047b5739&token=1584634265&lang=zh_CN#rd

Tags:PRIRICEICE比特幣privacyandprotectionrice幣是什么flokiceo幣總量比特幣什么時候暴跌

以太坊價格
比特幣:歐易研究院:比特幣跌破3萬美元 加密圈直面5月加息以來的兩種走向_okex官方網站網址

據歐易行情數據顯示,北京時間5月10日早上8點左右,比特幣短時跌破3萬美元關鍵位置,最低至29735美元,24小時內跌幅逾10%.

1900/1/1 0:00:00
DAO:如何從第一天開始入 DAO_虛擬資產

原文整理:老雅痞 授權轉載作者Jack Fancy 是Protein Community核心團隊的一員,在這個社區,借助 $PRTN 代幣的支持,人們有意義的想法通過協作和對話獲得落實.

1900/1/1 0:00:00
UST:「UST 保衛戰」打響?Terra 能否應對新一輪信心危機_LUNA

5 月 8 日開始,「UST 脫鉤」的傳聞開始在市場上大幅發酵,情況之嚴峻從中心化CEX的 UST 穩定幣兌換對即可見一斑:Binance 上 UST 兌 USDT 的報價一度接近 0.98.

1900/1/1 0:00:00
元宇宙:關于元宇宙 博鰲眾咖獻計腦洞大開_元宇宙app下載鏈接

圍繞全球熱詞“元宇宙”,只要你愿意腦洞大開,這里面總有想象不到的空間和聊不盡的話題。4月22日,博鰲亞洲論壇2022年年會“‘元宇宙’離我們有多遠?”分論壇上,多位中外領軍企業負責人就“元宇宙”.

1900/1/1 0:00:00
NFT:專訪 Beeple:NFT 的下個時代將聚焦于情感連接和效用_PLE

原文標題:《Beeple:NFT 的下個時代將聚焦于「情感連接和效用」》Beeple 在成為 NFT 藝術運動先驅后,將出售 NFT 作品獲得的加密貨幣轉換為法幣,以實現完全的創作自由.

1900/1/1 0:00:00
NFT:都說一寸光陰一寸金 那時間NFT面對的是機遇還是挑戰?_TIM

2月25日,Aave實驗部門Newt推出了首個時間Token化項目Aika。使用Aika可將時間作為NFT在Polygon上鑄造和出售,以此記錄事件和在區塊鏈上的工作情況.

1900/1/1 0:00:00
ads