我是这里的新手,这是我正在测试和重新混合吐出来的代码
browser/Untitled.sol:1:1::源文件未指定所需的编译器版本!请考虑添加跨越多行的“杂注固态^0.4.12协定C{^”。
希望有人能给我们一些指导。
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);
} }发布于 2017-07-10 14:00:02
在源文件的最顶部包含一个版本杂注,以消除该警告。
pragma solidity ^0.4.0;
contract MyContract {
}来自Solidity documentation
版本Pragma
源文件可以(也应该)使用所谓的版本杂注进行注释,以拒绝使用可能引入不兼容更改的未来编译器版本进行编译。我们试图将这种变化保持在绝对最小的水平,特别是在语义变化也需要语法变化的情况下引入变化,但当然这并不总是可能的。正因为如此,通读changelog总是一个好主意,至少对于包含破坏性更改的版本来说,这些版本将始终具有0.x.0或x.0.0形式的版本。
version杂注的用法如下:
pragma solidity ^0.4.0;
这样的源文件不能在0.4.0版本之前的编译器上编译,也不能在0.5.0版本以上的编译器上工作(第二个条件是使用^添加的)。这背后的想法是,在0.5.0版本之前不会有破坏性的更改,因此我们可以始终确保我们的代码将以我们预期的方式进行编译。我们没有修复编译器的确切版本,因此仍有可能发布错误修复版本。
发布于 2017-07-19 13:47:49
如上所述,您需要在固化度代码的第一行中指定编译器版本:
pragma solidity ^0.4.0;
发布于 2017-07-06 23:21:14
这段代码实际上是编译过的,警告就是:警告。
指定编译器版本,拒绝可能引入破坏性更改的编译器版本的编译,这是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);
}
}https://stackoverflow.com/questions/44946625
复制相似问题