Ether

DappHub 乘法函式

  • November 26, 2018

有人可以解釋執行這樣的乘法的用途嗎?我的意思是邏輯很好,但從安全的角度來看,重要的是什麼?

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在檢測上述情況時將是一個例外,因此程式碼將單獨考慮它。

更多資訊:https ://consensys.github.io/smart-contract-best-practices/known_attacks/#integer-overflow-and-underflow

引用自:https://ethereum.stackexchange.com/questions/63025