Solidity編譯警告的解決之道

網絡上很多教程(圖文或視頻)在講解Solidity語法實例的時候往往都將編譯過程中的警告信息忽略。本篇文章用兩個實例帶大家清除這些警告信息。

前言

無論在學習Truffle框架的使用和Remix IDE的過程中網上的教程都會用到HelloWorld這個實例來帶領大家入門。但如果對代碼稍微有一些潔癖的程序員會發現,當自己跟着教程練習時在編譯的過程中會出現一些警告信息。而這些警告信息,有的教程簡單提示暫時忽略,有些教程直接無視。本篇文章帶大家解決兩個常見的警告信息。

實例

我們採用Remix來編寫一個簡單的HelloWarning智能合約。具體代碼如下:

pragma solidity ^0.4.0;

contract HelloWarning{

    function hello() returns (string){
        return "Hello Warning!";
    }
}

就是這麼簡單的一段代碼,如果在Remix中進行編譯時會出現兩個警告信息:

browser/HelloWarning.sol:5:5: Warning: No visibility specified. Defaulting to "public". 
    function hello() returns (string){
    ^ (Relevant source part starts here and spans across multiple lines).
browser/HelloWarning.sol:5:5: Warning: Function state mutability can be restricted to pure
    function hello() returns (string){
    ^ (Relevant source part starts here and spans across multiple lines).

下面就分析一下這兩個警告信息的原因及解決方法。

public聲明

第一個警告“No visibility specified. Defaulting to “public”。”,字面直譯爲:未指定可見性,採用默認public可見範圍。

這個警告是提醒開發者,你未指定當前function的可見範圍,合約會默認採用public,有一定的風險存在。特別針對一些不可對外公開訪問的智能合約,需要注意此提示。

消除此警告的方法很簡單,只需在方法中添加public聲明即可。修改之後的代碼如下:

pragma solidity ^0.4.0;

contract HelloWarning{

    function hello() public returns (string){
        return "Hello Warning!";
    }
}

此時,再執行編譯操作,剛纔針對public的警告信息已經不存在了。藉此,再延伸一下智能合約方法的4類可見性指定:
- public:智能合約外部和內部都可使用的方法;
- internal:智能合約(包括派生合約)內部可用調用的方法;
- external:可通過其他合約和交易進行調用的方法;
- private:只有在定義的合約中纔可以調用,即使派生的合約也無法調用;

pure

首先將第二個警告內容直譯之後爲:功能狀態可變性可以限制爲pure。這裏就引出了pure限制詞。在之前的版本中我們經常使用constant來限制一個方法的制度性,當用constant修飾之後,此方法在被調用時不會進行存儲的變更,同樣不會產生交易和gas花費。而pure正是constant的替代品,逐漸的在替代constant的功能。關注微信公衆號“程序新視界”,後面會針對此塊進行詳細講解。

當知道了原因之後,解決方法就變得簡單,經過再次改進之後的代碼爲:

pragma solidity ^0.4.0;

contract HelloWarning{

    function hello() public pure returns (string){
        return "Hello Warning!";
    }
}

再次編譯一下試試看,對應的警告信息是不是已經不存在了?

小結

對於真正有編程潔癖的人不僅僅是代碼格式上是否該空行的地方沒空行那麼簡單,而是需要更深入層次的研究每一個異常,每一個警告,甚至每一行代碼的底層實現。只有這樣,編程的潔癖纔會讓自己的造詣更上一個層次。

原文鏈接:https://www.choupangxia.com/topic/detail/25

更多資訊

**獲取更多資訊,請關注微信公衆號:程序新視界。或加入QQ技術交流羣:659809063。個人博客:www.choupangxia.com,區塊鏈相關gitchat課程:http://gitbook.cn/gitchat/column/5ad98d9479e8c577efc7557d

QQ技術交流羣:
這裏寫圖片描述

獲得一對一技術諮詢請掃碼加入知識星球(小密圈)
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章