近期Beosin安全團隊研究發現,通縮代幣引起的安全事件依然頻發,造成眾多項目方資金的損失,因此,Beosin安全團隊準備了這篇詳解通縮代幣的文章,與大家分享。
本文將對通縮代幣與pair結合過程中容易出現的問題以及歷史發生的真實通縮代幣安全事件兩個方面進行介紹,通過本文,我們將徹底搞清楚通縮代幣是什么意思以及通縮代幣發生安全問題所涉及的原理,使我們在之后的項目中避坑。
過程詳情圖
報告:若以太坊合并后仍維持EIP-1559年均銷毀2.1%,以太坊將正式進入通縮時代:8月26日消息,據歐科云鏈研究院報告分析,以太坊當前主網和信標鏈的年總發行率為4.39%,其中約88.84%的發行在主網,剩余11.16%發行在信標鏈上。伴隨以太坊合并升級,主網/執行層的發行將歸零(90%的發行量消失),加之受EIP-1559影響,目前鏈上已累計銷毀251.1萬枚ETH(占總發行量2.1%),若以太坊合并后仍維持年均銷毀2.1%,那以太坊將真正意義上進入通縮時代。[2022/8/26 12:50:50]
銷毀問題
該問題主要出現在使用“映射”機制的通縮代幣中,這種代幣的機制是存在兩種代幣余額存儲變量,分別為tOwned和rOwned,而tOwned存儲的是實際代幣數量,rOwned存儲的是通過currentRate變量放大映射之后的值。
ARK基金創始人:通縮是比通脹更大的風險:11月24日消息,ARK基金創始人Cathie?Wood重申,通縮是比通脹更大的風險。(金十)[2021/11/24 7:07:37]
rOwned的作用是什么呢?在文章開始說過,通縮代幣能激勵用戶持有代幣,這種激勵目的使用的方式便是對交易者扣除rOwned值,同時扣除rTotal,這樣其他用戶rOwned所占rTotal的比例就會被動增加,實現被動收益。
用戶查詢余額的方式有兩種情況,一種是除外地址,直接返回tOwned的值,另一種是非除外地址,返回rOwned/currentRate,而currentRate計算方式為rTotal/tTotal。如果有辦法使得rTotal減小,那么用戶查詢出的實際余額將變大,而如果pair查詢余額變大,則可以通過skim函數將多余的代幣轉移出去。
Balancer回應閃電貸攻擊:計劃將通縮代幣添至黑名單:Balancer兩個流動性礦池今晨被爆出遭到閃電貸攻擊,被轉移資產價值約為50萬美元。Balancer官方隨即對此事發布博客進行回應。此次攻擊讓攻擊者從STA和STONK兩個代幣池中獲取資金,遭遇攻擊的兩個代幣均為帶有轉賬費的代幣,也稱通縮代幣。Balancer還還原了此次攻擊的流程,黑客將通過閃電貸從dYdX借出ETH并轉換為WETH,不斷交易WETH和STA,在每筆交易中,STA都需要支付一筆轉賬費,該資金池將會在不收取費用的情況下獲得余額。調用足夠次數后,攻擊者調用gulp(),該操作會將代幣余額的內部池記帳同步到代幣追蹤合約中存儲的實際余額。最后由于STA的余額接近于零,因此其相對于其他代幣的價格非常高,此時攻擊者可使用STA以極低價交換代幣池中的其他資產。由于此類攻擊只限于通縮代幣,Balancer稱下一步會將通縮代幣添加到UI黑名單中。目前Balancer已經通過兩次全面審核,即將開始第三次協議審核。[2020/6/29]
而該類通縮代幣存在一個deliver()函數,非除外地址可調用,該函數會將調用者的rOwned銷毀,并銷毀相同數量的_rTotal,使得所有非除外地址的余額查詢增加,pair如果非除外的話,便可使用上述方式套利攻擊。
動態 | QBTC交易所開啟“QT通縮計劃——交易即銷毀”:據QBTC官方消息,自2020年2月12日起,針對QBTC交易所全部與QT有關的交易對所產生的交易手續費(QT部分)將進行實時全額銷毀(銷毀的QT不包含量化及做市商賬戶)。QBTC將在平臺顯示全站QT流通量,每交易一筆產生的QT手續費將進行實時削減,用戶可實時查詢網站QT流通量及減少量。銷毀的交易手續費將定期發送至黑洞地址,發送至黑洞地址的交易詳情將以公告形式發布。
截至目前已銷毀23098000枚QT,目前總量為76902000枚QT,流通量為19078080枚QT。[2020/2/12]
3通縮代幣相關安全事件剖析
AES安全事件
北京時間2023年1月30日,Beosin旗下BeosinEagleEye安全風險監控、預警與阻斷平臺監測到,AES遭受到黑客攻擊,該項目便存在上述的Skim問題。
現場 | 中國銀行首席科學家郭為民:比特幣根本不是貨幣 不存在通脹或通縮的問題:金色財經現場報道,2019年第一財經金融科技峰會12月1日在北京舉行。在主題為《區塊鏈與數字貨幣》的高峰對話環節中,中國銀行首席科學家郭為民認為,比特幣在黃賭領域非常成功,在其他領域并不成功。比特幣本身就是一個騙局,根本不是貨幣,不存在通脹通縮的問題。相對于傳統金融機構來說,不存在成本比較的問題。另外,區塊鏈技術是一個非常低效的技術。[2019/12/1]
AES-USDTpair合約有一個skim函數,該函數可以強制平衡pair的供應量,將多余資金發送給指定地址。
攻擊者在本次攻擊過程中,首先向pair里面直接轉入了部分AES代幣,導致供應量不平衡,從而攻擊者調用skim函數時,會將多余的這部分代幣轉到攻擊者指定地址,而攻擊者在此處指定了pair合約為接收地址,使得多余的AES又發送到了pair合約,導致強制平衡之后pair合約依然處于不平衡狀態,攻擊者便可重復調用強制平衡函數,而AES發送過程會調用到AES合約的transfer函數,如下圖。
另外一點,當調用AES代幣合約的transfer函數時,若發送者為合約設置的pair合約時,會將一部分費用記錄在swapFeeTotal之中,在最后的時候可以統一調用distributeFee函數將swapFeeTotal記錄的費用從pair中轉出,這里相比上述的過程,攻擊者可以不用做sync函數調用操作,而是在最后將費用轉移出去之后調用一次sync函數即可。
攻擊者經過反復的強制平衡操作,費用記錄變得異常大,基本接近pair的總余額,最后攻擊者調用distributeFee函數將pair里面的AES轉出,pair的AES余額變得非常少,導致攻擊者利用少量AES兌換了大量的USDT。
BevoToken安全事件
北京時間2023年1月30日,Beosin旗下BeosinEagleEye安全風險監控、預警與阻斷平臺監測到,BevoToken遭受到閃電貸攻擊,該項目便是上面所說的“映射”機制通縮代幣。
由于BevoToken合約的balanceOf函數并非ERC20標準的函數,該函數在經過一些計算處理后再返回余額,而轉賬或其他操作可能使前后計算返回的余額不一致,當攻擊者在swap操作前后可憑借這個問題來操控pair合約的余額,從而skim出多余的代幣。
攻擊者首先在pancake貸出192.5個BNB,之后換成約302,877個BEVO代幣,再調用被攻擊合約的deliver函數,此時_rTotal的值減小,_rTotal的值減小會導致_getRate中計算的值偏小,此時balanceOf返回的余額則會偏大,導致攻擊者能skim出多余的BEVO。
之后,攻擊者再將skim出的代幣進行deliver,此時_rTotal的值已經很小了,在進行_getRate計算時,會減去除外地址的rOwned,此值固定且被攻擊者在之前通過burn異常放大的,在最開始_rTotal正常的時候,減去該值對結果的影響不大,但是現在_rTotal被攻擊者操控得異常小,再減去這個異常放大的固定值后,對結果產生了巨大的影響,第一次deliver導致pair計算結果偏大3倍,而第二次deliver之后,pair計算結果則偏大了數百倍,這也是為什么攻擊者獲得的代幣要比自己銷毀的代幣多得多的原因。
4Beosin總結
通縮項目在業務設計的時候一定要考慮到與pair交互的情況,自身的通縮機制是否會對pair產生影響。我們也建議相關項目上線前尋找專業的安全審計機構進行全面的代碼以及業務的安全審計工作。
Tags:PAIAIRTALTOTpaid幣官方最新消息Fair BERC20TALI價格Totem New Earth Systems
過去兩周,一個名為Ordinals的NFT協議在比特幣網絡備受關注。支持者認為,其提供了更多玩法與網絡用例,在價值存儲外增強了比特幣的應用場景;反對者批判,稱其偏離了中本聰將比特幣作為點對點現金.
1900/1/1 0:00:00吳說作者:劉全凱 隨著NFT市場走向DeFi,圍繞NFT定價、資金利用率和風險管理的問題日漸突出,并演變成為NFT-FI的三難困境,制約著NFT金融化市場規模的發展.
1900/1/1 0:00:00摩根大通認為,1月CPI同比增長6.0%到6.3%的幾率為65%,若這樣增長,標普500會漲1.5%到2%,然后漲勢消退;CPI同比增長6.4%到6.5%的幾率為25%,若這樣增長.
1900/1/1 0:00:00游戲作為數字時代人們娛樂的最主要方式之一,正在創造極大的產值。據全球資訊公司Bain的調查研究顯示,到2025年,游戲市場的價值將增長?50%以上,超過?3000億美元.
1900/1/1 0:00:00原文:ACryptoFriendlyAsia:WhatItWillMeanForMarkets作者:ConorRyder,CFA由DeFi之道編譯香港釋放了打開加密交易大門的信號.
1900/1/1 0:00:00原文:HowsomeofVitalik’s$1bnforCovidreliefwentthroughanAlamedawalletandaPuertoRicanbankaccount作者:Isa.
1900/1/1 0:00:00