2017-07-06 59 views
2

是新來的密實這裏,這是我測試的代碼和混音吐出密實度的混音簡單的問題

瀏覽器/ Untitled.sol:1:1::源文件沒有指定所需的編譯器版本考慮加入! 「編譯堅固^ 0.4.12 合同C {1 ^ 跨越多行。

希望有人可以提供一些指導。

contract C { 
    function bytes32ToString(bytes32 x) constant returns (string) { 
     bytes memory bytesString = new bytes(32); 
     uint charCount = 0; 
     for (uint j = 0; j < 32; j++) { 
      byte char = byte(bytes32(uint(x) * 2 ** (8 * j))); 
      if (char != 0) { 
       bytesString[charCount] = char; 
       charCount++; 
      } 
     } 
     bytes memory bytesStringTrimmed = new bytes(charCount); 
     for (j = 0; j < charCount; j++) { 
      bytesStringTrimmed[j] = bytesString[j]; 
     } 
     return string(bytesStringTrimmed); 
    } 

    function bytes32ArrayToString(bytes32[] data) returns (string) { 
     bytes memory bytesString = new bytes(data.length * 32); 
     uint urlLength; 
     for (uint i=0; i<data.length; i++) { 
      for (uint j=0; j<32; j++) { 
       byte char = byte(bytes32(uint(data[i]) * 2 ** (8 * j))); 
       if (char != 0) { 
        bytesString[urlLength] = char; 
        urlLength += 1; 
       } 
      } 
     } 
     bytes memory bytesStringTrimmed = new bytes(urlLength); 
     for (i=0; i<urlLength; i++) { 
      bytesStringTrimmed[i] = bytesString[i]; 
     } 
     return string(bytesStringTrimmed); 
    }  } 

回答

0

此代碼實際上是編譯,並且警告強制那是:警告。

它是suggested in the solidity docs指定一個編譯器版本,以拒絕編譯器版本的編譯,可能會引入重大更改。

嘗試將pragma solidity ^0.4.11;(或其他某個版本)添加到文件頂部,然後您會看到警告消失。現在

您的全文件將是:

pragma solidity ^0.4.11; 

contract C { 
    function bytes32ToString(bytes32 x) constant returns (string) { 
     bytes memory bytesString = new bytes(32); 
     uint charCount = 0; 
     for (uint j = 0; j < 32; j++) { 
      byte char = byte(bytes32(uint(x) * 2 ** (8 * j))); 
      if (char != 0) { 
       bytesString[charCount] = char; 
       charCount++; 
      } 
     } 
     bytes memory bytesStringTrimmed = new bytes(charCount); 
     for (j = 0; j < charCount; j++) { 
      bytesStringTrimmed[j] = bytesString[j]; 
     } 
     return string(bytesStringTrimmed); 
    } 

    function bytes32ArrayToString(bytes32[] data) returns (string) { 
     bytes memory bytesString = new bytes(data.length * 32); 
     uint urlLength; 
     for (uint i=0; i<data.length; i++) { 
      for (uint j=0; j<32; j++) { 
       byte char = byte(bytes32(uint(data[i]) * 2 ** (8 * j))); 
       if (char != 0) { 
        bytesString[urlLength] = char; 
        urlLength += 1; 
       } 
      } 
     } 
     bytes memory bytesStringTrimmed = new bytes(urlLength); 
     for (i=0; i<urlLength; i++) { 
      bytesStringTrimmed[i] = bytesString[i]; 
     } 
     return string(bytesStringTrimmed); 
    }  
} 
2

包含在源文件的最頂端擺脫警告的版本編譯。

pragma solidity ^0.4.0; 

contract MyContract { 

} 

Solidity documentation

版本附註

源文件可以(也應該)與所謂的版本 編譯,拒絕被註釋正在與將來的編譯器版本編譯的 可能會引入不兼容的更改。我們試圖保持絕對最小的這種變化,特別是引入變化的方式, 語義的變化也將需要語法的變化,但是這當然不總是可能的 。因此,至少對於包含 重大更改的版本,通過更改日誌來通讀 總是一個很好的想法,這些版本將始終具有 0.x.0x.0.0表單的版本。

版本編譯的使用步驟如下:

pragma solidity ^0.4.0;

這樣的源文件將不早於0.4.0版本 編譯器來編譯,它也不會在 編譯器開始工作版本0.5.0(通過使用^添加第二個條件 )。這背後的想法是,在版本0.5.0之前不會破壞 更改,因此我們始終可以確定我們的代碼 將按照我們的意圖進行編譯。我們不修復編譯器的確切版本 ,這樣bug修復版本仍然有可能。

1

大家都如上所述,您需要在牢固代碼的第一行指定編譯器版本:

編譯堅固^ 0.4。0;