Solidity

什麼是“solidity 便簽本”?

  • October 27, 2022

我正在閱讀可升級代理,在 openzeppelin 中遇到了這個。

   //solium-disable-next-line
   assembly {
     // Copy msg.data. We take full control of memory in this inline assembly
     // block because it will not return to Solidity code. We overwrite the
     // Solidity scratch pad at memory position 0.
     calldatacopy(0, 0, calldatasize())

     // Call the implementation.
     // out and outsize are 0 because we don't know the size yet.
     let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)

     // Copy the returned data.
     returndatacopy(0, 0, returndatasize())

     switch result
       // delegatecall returns 0 on error.
       case 0 {
         revert(0, returndatasize())
       }
       default {
         return(0, returndatasize())
       }
   }
 }

特別是我很好奇這條線“Solidity scratch pad at memory position 0.”。

我理解這個語句的要點,我們正在使用程序集在我們的記憶體數據類型中寫入第 0 個位置。但什麼是“solidity 便簽本”?為什麼叫它,這到底是什麼意思。它有什麼意義嗎?

Solidity 暫存器是用於短期記憶體分配的記憶體位置。之所以這樣稱呼,是因為代理使用它從位置 0 開始寫入任意數量的數據,因為代理不關心覆蓋分配記憶體或尊重實體記憶體模型。

看:

https://forum.openzeppelin.com/t/upgradable-contract-assembler/9723

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