Storage

使用內聯彙編寫入儲存

  • May 3, 2022

我有這份契約,我使用內聯彙編來添加兩個數字。

pragma solidity ^0.8.0;

contract Test {
   function add(uint a, uint b) external {
       assembly {
           let sum := add(a,b)
           mstore(mload(0x40), sum)
       }
   } 
}

現在的問題是,如何將變數寫入sum儲存?換句話說,如何讓這個sum持久化?

在程序集末尾添加以下行 -

sstore(value.slot, sum)

這會將sum值儲存到合約變數的槽中value

您還可以刪除mstore和本地 varsum並直接寫入變數 -

contract Test {

   uint256 public value;

   function add(uint a, uint b) external {
       assembly {
           sstore(value.slot, add(a,b))
       }
   } 
}

考慮到這不處理算術溢出,如果輸入數字a + b大於uint256.

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