Assembly

Solidity v0.8 溢出檢查是否也適用於裝配操作?

  • April 5, 2021

從 Solidity v0.8 開始,編譯器預設檢查所有算術運算的 {over,under}flow。

這些檢查是否也適用於彙編(yul)算術運算?

不,它們僅適用於非彙編程式碼。在Remix上檢查自己:

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

contract Mul {
   function mul_normal(uint8 x, uint8 y) external pure returns (uint8 result) {
       result = x * y;    
   }
   
   function mul_assembly(uint8 x, uint8 y) external pure returns (uint8 result) {
       assembly {
           result := mul(x, y)
       }
   }
}

x分別將 255 和 2 作為和傳遞y,在呼叫時會還原,mul_normal但在呼叫 時會產生 254 mul_assembly

混音截圖

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