Solidity

數據類型的執行順序是什麼?

  • March 10, 2022

我創建並部署(Remix)了一個簡單的合約來理解更好的數據類型。當我部署合約時,我看到數據類型不在合約內部的順序中。這是我的契約:

pragma solidity >=0.8.7;

contract DataTypes {
   uint public uintNumber = 9;
   int public intNumber = -68;
   uint8 public uint8Number = 17;
   bool public myBool = true;
   address public myAddress = msg.sender;
   bytes32 public myBytes32 = "hello byte";
   string public myString = "hello string";
}

這是部署後的情況。我希望首先看到“uint”,但不知何故“int”首先出現,其餘的順序完全不同。你知道這其中的原因嗎?是與 Remix 相關的東西還是與 Solidity 相關的東西?

部署後的契約視圖

是與 Remix 相關的東西還是與 Solidity 相關的東西?

Remix 只是在 UI 中按字母數字順序排列它們。

與每個變數所在的儲存槽無關。

我相信排序是在此處txhelper.ts完成的,您的每個變數都會生成一個 getter 函式,該函式被認為是常量。重要的程式碼行是:

return a.name.localeCompare(b.name)

Solidity Compiler 會自動重新排列 EVM 插槽。在 EVM 1 中,插槽大小為 32 字節。如果你想了解solidity 編譯器如何安排儲存槽,請閱讀solidity 文件。

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