2017-07-06 34 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;