Solidity
什麼是“solidity 便簽本”?
我正在閱讀可升級代理,在 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