天天看點

Solidity 智能合約開發基礎篇——快速入門

作者:tiger老張

本文,我們先從一個簡單的智能合約樣例出發,通過對合約源檔案結構的剖析與介紹,使大家對Solidity語言有一個初步的認識。最後,我們将該智能合約樣例在Remix合約編譯器中編譯、部署,觀察其執行結果。

基礎概念

在開始之前,我們先對Solidity有個初步的了解,即Solidity是什麼?

讓我們看一下官方的描述:

  1. Solidity是一種面向對象(合約)的,為實作智能合約而建立的進階程式設計語言;
  2. Solidity是一種針對以太坊虛拟機(EVM)設計的語言,它受到了C++、Python和JavaScript的影響;
  3. Solidity是一種靜态類型語言,支援複雜的使用者定義程式設計,支援庫和繼承。

合約樣例

下面是一個簡單的合約例子,我們用來示範如何用Solidity編寫一個簡單的智能合約。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

// 第一個合約
contract HelloWorld {
    // 狀态變量
    string public str = "Hello World!";

    // set 函數
    function set(string memory s) public {
        str = s;
    }

    // get 函數
    function get() public view returns(string memory) {
        return str;
    }
}           

合約結構

版權許可

// SPDX-License-Identifier: MIT           

版本許可位于源檔案中的第1行,用于定義合約的版權許可辨別。雖然不是強制的,但我們建議在每個源檔案中都應該以這樣的代碼開始,來說明合約的版權許可證。如果你不想指定一個許可證,或者如果源代碼不開源,請使用特殊值 UNLICENSED。

版本辨別

pragma solidity ^0.8.13;           

版本辨別位于源檔案中的第2行,用于定義Solidity的版本,其中 pragma 是定義版本辨別的關鍵字。

這行代碼表示不允許低于 0.8.7 版本的編譯器編譯,也不允許高于 0.9.0 的編譯器編譯,即使用的編譯器版本介于 0.8.7 與 0.9.0之間。

Solidity編譯器版本規範如下:

序号 版本規範 說明
1 ^0.5.1 指定的主版本号下所有更新的版本。即比對 0.5.1 ~ 0.6.0 之間的版本
2 ~0.5.1 指定的主版本号與次版本号下所有更新的版本。即比對 0.5.1 ~ 0.5.9 之間的版本
3 >=0.5.1 版本号大于等于0.5.1,比對 >=0.5.1 的所有版本
4 <=0.5.1 版本号小于等于0.5.1,比對 <=0.5.1 的所有版本
5 x 比對所有版本
6 0.5或0.5.x 比對指定主版本号與次版本号下的所有版本

截止到目前,Solidity的編譯器版本已更新到 0.8.15。我們建議在編譯部署合約時,應該盡量使用最新版本,因為新版本會有一些新特性以及bug修複。

合約類(對象)

contract HelloWorld {
    // 函數和資料
}           

在Solidity語言中,合約類似于其他面向對象程式設計語言中的類。contract 是定義合約類的關鍵字,HelloWorld 是合約名稱。我們建議合約名稱和本地檔案名用同一個名稱,且第一個字母大寫。

合約還可以從其他合約繼承,可以是一些特殊的合約,比如庫(library)和接口(interface)。這些知識點我們會在後續的課程中講解。

狀态變量

string public str = "Hello World!";           

這段代碼中的 str 就是一個狀态變量,它是一個永久存儲在合約存儲中的值。

函數

function set(string memory s) public
function get() public view returns(string memory)           

函數是合約代碼的可執行單元,函數通常在合約内部定義。函數一般有以下幾部分組成:

  • 函數名
  • 參數
  • 傳回值

在樣例代碼中,我們定義了2個函數:

  • set():用于設定狀态變量的值;
  • get():用于傳回狀态變量的值。

注釋

合約中的注釋有單行注釋(//)和多行注釋(/*...*/)兩種,和C++的注釋類似。

// 這是一個單行注釋

/*
    這是一個
    多行注釋
*/           

合約部署

我們推薦使用Remix來開發簡單合約。

Remix 是一個合約開發和編譯器,可以線上使用,而無需安裝任何東西。

我們在Remix中編譯、部署和運作這個樣例合約。執行結果如下圖:

Solidity 智能合約開發基礎篇——快速入門

繼續閱讀