首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solidity简单问题

Solidity简单问题
EN

Stack Overflow用户
提问于 2017-07-06 18:39:09
回答 4查看 2.3K关注 0票数 4

我是这里的新手,这是我正在测试和重新混合吐出来的代码

browser/Untitled.sol:1:1::源文件未指定所需的编译器版本!请考虑添加跨越多行的“杂注固态^0.4.12协定C{^”。

希望有人能给我们一些指导。

代码语言:javascript
复制
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);
    }     }
EN

回答 4

Stack Overflow用户

发布于 2017-07-10 14:00:02

在源文件的最顶部包含一个版本杂注,以消除该警告。

代码语言:javascript
复制
pragma solidity ^0.4.0;

contract MyContract {

}

来自Solidity documentation

版本Pragma

源文件可以(也应该)使用所谓的版本杂注进行注释,以拒绝使用可能引入不兼容更改的未来编译器版本进行编译。我们试图将这种变化保持在绝对最小的水平,特别是在语义变化也需要语法变化的情况下引入变化,但当然这并不总是可能的。正因为如此,通读changelog总是一个好主意,至少对于包含破坏性更改的版本来说,这些版本将始终具有0.x.0x.0.0形式的版本。

version杂注的用法如下:

pragma solidity ^0.4.0;

这样的源文件不能在0.4.0版本之前的编译器上编译,也不能在0.5.0版本以上的编译器上工作(第二个条件是使用^添加的)。这背后的想法是,在0.5.0版本之前不会有破坏性的更改,因此我们可以始终确保我们的代码将以我们预期的方式进行编译。我们没有修复编译器的确切版本,因此仍有可能发布错误修复版本。

票数 4
EN

Stack Overflow用户

发布于 2017-07-19 13:47:49

如上所述,您需要在固化度代码的第一行中指定编译器版本:

pragma solidity ^0.4.0;

票数 2
EN

Stack Overflow用户

发布于 2017-07-06 23:21:14

这段代码实际上是编译过的,警告就是:警告。

指定编译器版本,拒绝可能引入破坏性更改的编译器版本的编译,这是suggested in the solidity docs

尝试将pragma solidity ^0.4.11; (或其他版本)添加到文件的顶部,您将看到警告消失。

您的完整文件现在将是:

代码语言:javascript
复制
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);
    }     
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44946625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档