Assembly
Solidity v0.8 溢出檢查是否也適用於裝配操作?
從 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
但在呼叫 時會產生 254mul_assembly
: