Ether
DappHub 乘法函式
有人可以解釋執行這樣的乘法的用途嗎?我的意思是邏輯很好,但從安全的角度來看,重要的是什麼?
function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow"); }
這是來自 dapphub 庫。我已在此處包含連結: https ://github.com/dapphub/ds-math/blob/master/src/math.sol
從安全的角度來看,它確保在乘法之後,返回值不會溢出。
假設我們有一個 8 位無符號整數,它儲存從 0 到 255 的值。因此,乘法
130*2
將返回 260,當該將其儲存在變數中時,它將溢出並儲存該值5
。所以這個require
問題檢查如果我們執行反向操作,我們應該得到初始值,這在溢出錯誤中是不可能的。
y == 0
在檢測上述情況時將是一個例外,因此程式碼將單獨考慮它。