Solidity

為什麼 Solidity 範例使用 bytes32 類型而不是字元串?

  • March 19, 2018

在我讀到的許多使用字元串作為參數或返回值的 Solidity 範例中,我看到它們的類型就像bytes32存在string類型一樣。真正的原因是什麼?謝謝。

2個主要原因:

  1. 契約目前無法讀取string另一個契約返回的內容。
  2. 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。

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