Solidity

多次閱讀“msg.value”的相對成本是多少?

  • April 5, 2022

假設我們在契約中定義了以下應付方法:

function foo() public payable {
 if (msg.value >= thresholdValue0) {
   // some logic..
 } else if (msg.value < thresholdValue0 && msg.value >= thresholdValue1) {
   // some logic..
 } else if (msg.value < thresholdValue1) {
   // some logic..
 }
}

請注意如何msg.value多次使用(準確地說是 3 次)。我不確定這是否會花費單次msg.value讀取成本的 3 倍,以及首先將其載入到記憶體中是否更有效,如下所示:

function foo() public payable {
 uint256 msgValue = msg.value;
 if (msgValue >= thresholdValue0) {
   // some logic..
 } else if (msgValue < thresholdValue0 && msgValue >= thresholdValue1) {
   // some logic..
 } else if (msgValue < thresholdValue1) {
   // some logic..
 }
}

第二種方法會導致更多的氣體,uint256 msgValue 因為它會佔用空間。我通過混音驗證了兩者,第一種方法使用 21195 氣體,而第二種方法使用 21208 氣體。都是由於uint256 msgValue

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