Solidity開(kāi)發(fā)基礎(chǔ)——初識(shí)Solidity
開(kāi)始之前
首先,我們先對(duì)Solidity有個(gè)初步的了解,即Solidity是什么?
讓我們看一下官方的描述:
Solidity是一種面向?qū)ο螅ê霞s)的,為實(shí)現(xiàn)智能合約而創(chuàng)建的高級(jí)編程語(yǔ)言;
Solidity是一種針對(duì)以太坊虛擬機(jī)(EVM)設(shè)計(jì)的語(yǔ)言,它受到了C++、Python和JavaScript的影響;
Solidity是一種靜態(tài)類型語(yǔ)言,支持復(fù)雜的用戶定義編程,支持庫(kù)和繼承。
合約樣例
下面是一個(gè)簡(jiǎn)單的合約例子,我們用來(lái)演示如何用Solidity編寫一個(gè)簡(jiǎn)單的智能合約。
合約結(jié)構(gòu)
版權(quán)許可
版本許可位于源文件中的第1行,用于定義合約的版權(quán)許可標(biāo)識(shí)。雖然不是強(qiáng)制的,但我們建議在每個(gè)源文件中都應(yīng)該以這樣的代碼開(kāi)始,來(lái)說(shuō)明合約的版權(quán)許可證。如果你不想指定一個(gè)許可證,或者如果源代碼不開(kāi)源,請(qǐng)使用特殊值 UNLICENSED
。
版本標(biāo)識(shí)
版本標(biāo)識(shí)位于源文件中的第2行,用于定義Solidity的版本,其中 pragma
是定義版本標(biāo)識(shí)的關(guān)鍵字。
這行代碼表示不允許低于 0.8.7
版本的編譯器編譯,也不允許高于 0.9.0
的編譯器編譯,即使用的編譯器版本介于 0.8.7 與 0.9.0之間。
Solidity編譯器版本規(guī)范如下:
序號(hào)版本規(guī)范說(shuō)明1^0.5.1指定的主版本號(hào)下所有更新的版本。即匹配 0.5.1 ~ 0.6.0 之間的版本2~0.5.1指定的主版本號(hào)與次版本號(hào)下所有更新的版本。即匹配 0.5.1 ~ 0.5.9 之間的版本3>=0.5.1版本號(hào)大于等于0.5.1,匹配 >=0.5.1 的所有版本4<=0.5.1版本號(hào)小于等于0.5.1,匹配 <=0.5.1 的所有版本5x匹配所有版本60.5或0.5.x匹配指定主版本號(hào)與次版本號(hào)下的所有版本
截止到目前,Solidity的編譯器版本已更新到 0.8.15
。我們建議在編譯部署合約時(shí),應(yīng)該盡量使用最新版本,因?yàn)樾掳姹緯?huì)有一些新特性以及bug修復(fù)。
合約類(對(duì)象)
在Solidity語(yǔ)言中,合約類似于其他面向?qū)ο缶幊陶Z(yǔ)言中的類。contract
是定義合約類的關(guān)鍵字,HelloWorld
是合約名稱。我們建議合約名稱和本地文件名用同一個(gè)名稱,且第一個(gè)字母大寫。
合約還可以從其他合約繼承,可以是一些特殊的合約,比如庫(kù)(library)和接口(interface)。這些知識(shí)點(diǎn)我們會(huì)在后續(xù)的課程中講解。
狀態(tài)變量
這段代碼中的 str
就是一個(gè)狀態(tài)變量,它是一個(gè)永久存儲(chǔ)在合約存儲(chǔ)中的值。
函數(shù)
函數(shù)是合約代碼的可執(zhí)行單元,函數(shù)通常在合約內(nèi)部定義。函數(shù)一般有以下幾部分組成:
函數(shù)名
參數(shù)
返回值
在樣例代碼中,我們定義了2個(gè)函數(shù):
set()
:用于設(shè)置狀態(tài)變量的值;get()
:用于返回狀態(tài)變量的值。
注釋
合約中的注釋有單行注釋(//
)和多行注釋(/*...*/
)兩種,和C++的注釋類似。
合約部署
我們推薦使用Remix來(lái)開(kāi)發(fā)簡(jiǎn)單合約。
Remix 是一個(gè)合約開(kāi)發(fā)和編譯器,可以在線使用,而無(wú)需安裝任何東西。

我們?cè)赗emix中編譯、部署和運(yùn)行這個(gè)樣例合約。執(zhí)行結(jié)果如下圖:
