Solidity
為什麼 Solidity 範例使用 bytes32 類型而不是字元串?
在我讀到的許多使用字元串作為參數或返回值的 Solidity 範例中,我看到它們的類型就像
bytes32
存在string
類型一樣。真正的原因是什麼?謝謝。
2個主要原因:
- 契約目前無法讀取
string
另一個契約返回的內容。- EVM的字長為 32 字節,因此它被“優化”以處理 32 字節塊中的數據。(當數據不是 32 字節的塊時,編譯器,如 Solidity,必須做更多的工作並生成更多的字節碼,這實際上會導致更高的 gas 成本。)
我在這個網站上測試過https://ethfiddle.com/zLxE5Y-8B4
contract TestGas { string constant statictext = "Hello World"; bytes11 constant byteText11 = "Hello World"; bytes32 constant byteText32 = "Hello World"; function getString() payable public returns(string){ return statictext; } function getByte11() payable public returns(bytes11){ return byteText11; } function getByte32() payable public returns(bytes32){ return byteText32; } }
並且函式
getString
花費了21875gas,函式
getByte11
消耗了21509 個gas,函式
getByte32
花費了21487 gas。因此,如果您的字元串長度是固定的,只需使用 bytes32。