Solidity
多次閱讀“msg.value”的相對成本是多少?
假設我們在契約中定義了以下應付方法:
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