
概述
一級標題
概述
在區塊鏈上具有通縮機制的代幣最近經常受到攻擊。本文將討論並分析通縮機制代幣受到攻擊的原因,並給出相應的防禦方案。
一級標題
一級標題
在代幣中實現通縮機制通常有兩種方式,一種是燃燒機制,另一種是反射機制。下面我們將分析這兩種實現方式以及可能存在的問題。
一級標題
燃燒機制
通常,具有燃燒機制的代幣將在其_transfer 函數中實現燃燒的邏輯。有時候會存在發送者承擔手續費的情況。在這種情況下,接收方收到的代幣數量不會發生變化,但發送方需要支付更多代幣,因為其需要承擔手續費。下面是一個簡單的例子:
然後我們討論這種情況下可能存在的風險。
如果單看代幣合約,我們會發現這種寫法其實沒有什麼問題,但是區塊鏈中有很多複雜的情況,需要我們考慮很多方面。WDOGE) :
其中,在Uniswap 中,有一個函數skim,它會將流動性池中兩種代幣的餘額和儲備金的差值轉移給調用方,以平衡餘額和儲備金:
一個真實的攻擊案例,winner doge(
一級標題
一級標題
在WDOGE 合約的_transfer函數中,當block.timestamp > closingTime時,進入else 循環。在代碼第21 行中,轉賬金額從發送方的餘額中扣除,在代碼第31 行中,發送方又被燃燒了tokensToBurn 數量的代幣。攻擊者利用這種手續費的機制,通過上述的攻擊方式竊取流動性池中的所有價值代幣(WBNB)。
一級標題
反射機制
在反射機制中,用戶每次交易都會收取手續費,用於獎勵持有代幣的用戶,但不會觸發轉賬,只是單純修改一個係數。
在這個機制中,用戶有兩種類型的代幣數量,tAmount 和rAmount。 tAmount 為實際代幣數量,rAmount 為反映後的代幣數量,比率為tTotal / rTotal,一般的代碼實現如下:
反射機制的代幣中一般有一個叫做deliver的函數,會銷毀調用者的代幣,降低rTotal 的值,所以比率會增加,其他用戶反射後的代幣數量也會增加:
攻擊者註意到這個函數,並用它來攻擊相應的Uniswap 的流動性池。BEVO):
那他該如何進行利用呢?同樣從Uniswap 的skim 函數開始:
Uniswap 中reserve 是儲備金,與token.balanceOf(address(this))不同。
攻擊者先調用deliver 函數銷毀自己的代幣,導致rTotal 的值減少,比率隨之增加,所以反射後的代幣的值也會增加,token.balanceOf(address(this))也會相應變大,與reserve 的值出現了差距。
一個真實的攻擊案例,BEVO NFT Art Token(SHEEP):
而當代幣合約中存在burn 函數時,存在了另外一種相似的攻擊手法:
總結
總結
總結
一級標題
At Eocene Research, we provide the insights of intentions and security behind everything you know or don’t know of blockchain, and empower every individual and organization to answer complex questions we hadn’t even dreamed of back then.