Solidity
數據類型的執行順序是什麼?
我創建並部署(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 文件。