您好,登錄后才能下訂單哦!
智能合約是以太坊的核心之一,用戶可以利用智能合約實現更靈活的代幣以及其他DApp。不過在深入講解如何開發智能合約之前,需要先介紹一下以太坊中用于開發智能合約的Solidity語言,以及相關的開發和測試環境。
智能合約就是運行在以太坊上的程序。客戶端可以通過Web3.js API調用智能合約,而智能合約本身又可以直接訪問以太坊網絡,也就是說,智能合約前面連接著客戶端,后面連接著以太坊網絡,起到了承前啟后的作用,而且通過智能合約,可以讓整個以太坊網絡更靈活,可控性更強。其實智能合約的作用相當于微軟Office中的VBA,一個功能強大的領域腳本語言。智能合約的開發語言是Solidity,那么Solidity是什么呢?應該如何在以太坊網絡上運行用Solidity語言編寫的智能合約呢?本文將會揭曉這些問題的答案。
Solidity是一種用于編寫智能合約的高級語言,運行在Ethereum虛擬機(以太坊虛擬機,EVM)之上。那么Solidity到底是怎樣一種編程語言呢?或者說Solidity語言的主要特性是什么呢?請繼續往下看。
Solidity語言的語法接近于JavaScript,是一種面向對象的語言。但作為一種真正意義上運行在網絡上的去中心智能合約,它又有很多的不同,下面列舉一些Solidity語言的主要特性。
Solidity是一種圖靈完備的編程語言,所以編程的方式與Java、C++類似。不過Solidity語言中并沒有類的概念,但有一個合約的概念,用關鍵字contract表示。任何一個Solidity程序,都必須至少有一個合約(contract)。在合約中可以編寫Solidity函數,類似于類中的方法。Solidity源代碼文件的擴展名是sol,下面的例子給出了一個簡單的使用Solidity語言編寫的智能合約的例子,以便讀者對Solidity語言和智能合約有一個感性的認識。
下面的例子給出了一個名為Calc的智能合約程序,在該智能合約中有一個add函數,用于將兩個無符號整數相加,并返回相加的結果。
pragma solidity ^0.4.0;
contract Calc{
function add(uint a,uint b) returns (uint){
return a + b;
}
}
盡管現在還沒有正式講解Solidity語言和智能合約,不過從這段簡單的智能合約代碼也可以了解Solidity語言的結構。首先,智能合約的第1行需要使用pragma solidity指定Solidity編譯器的最低版本,本例是0.4.0,也就是說,要編譯這段Solidity程序,Solidity編譯器的版本不能低于0.4.0。要記住,在版本號前面要加上“^”。
接下來就是用contract關鍵字聲明智能合約,語法與類非常接近,智能合約的名字跟在contract關鍵字后面,智能合約中的代碼用一對花括號括起來。
最后是在智能合約中聲明若干個函數,函數的語法與JavaScript類似(都是使用function關鍵字聲明函數),不過也不完全相同,因為Solidity是強類型的編程語言,而JavaScript是弱類型的編程語言。也就是說,聲明Solidity變量需要指定數據類型,如本例的uint,表示無符號整數類型。函數的返回值類型需要在函數聲明的結尾通過returns關鍵字指定。如本例的returns(uint),函數返回值與C風格的編程語言相同,仍然使用return語句指定函數返回值。Solidity語言的每一條語句后面都要跟分號(;)。
學習編寫智能合約最重要的一步就是運行智能合約,否則無法知道我們編寫的智能合約程序是否正確。在正常情況下,應該將智能合約部署在以太坊網絡上,然后通過以太坊客戶端調用,不過現在還沒有講如何將智能合約部署到以太坊網絡上,以及如何調用智能合約。所以目前只能使用最簡單的方式測試智能合約。以太坊官方提供了一個在線的智能合約編寫和測試環境:Remix,通過這個工具,可以用不同的方式測試智能合約。
在瀏覽器地址欄輸入如下的Url后,會進入Remix頁面。
https://remix.ethereum.org
Remix頁面主要包含如下4部分。
除了這4部分外,在Remix頁面左上角還有一排按鈕,其中最左側的加號按鈕用于新建智能合約,最右側的加號和減號按鈕分別用于增加和減少智能合約代碼的字號。Remix頁面的整體布局如下圖所示。
接下來單擊Remix頁面左上角的加號按鈕,會彈出一個如下圖所示的頁面,在“File Name”文本框輸入“Calc.sol”,然后單擊“OK”按鈕創建新的智能合約。
將上一節給出的智能合約代碼輸入代碼區域,可以點擊加號和減號按鈕將代碼字體調整到自己感覺舒服的程度,效果如下圖所示。在設置區域會出現一些警告,并不需要管它們。
在設置區域切換到“Run”頁面,所有的設置保持默認值即可,然后點擊中間的“Deploy”部署Calc合約。成功部署Calc合約后,會在“Run”頁面下方根據Calc合約中的函數顯示相應的按鈕,如本例中只有一個add函數,并且該函數有兩個參數,所以在“Run”頁面下方會出現一個“add”按鈕,在按鈕旁邊的文本框輸入“3,4”,表示add函數的兩個參數值,如下圖所示。
最后單擊“add”按鈕執行add函數,會在日志區域顯示相應的信息,然后單擊日志區域輸出信息的向下箭頭,會在日志區域顯示一個表格,在“decoded output”行會顯示add函數的返回值(計算結果),如下圖所示。
通過本節的若干步驟,終于成功運行了Calc智能合約的add函數,并獲得了add函數的返回值(本例是7),不過這個智能合約程序并沒有部署在以太坊網絡上,而是在本地運行的,也就是說,本節其實是通過模擬的方式運行了本地合約,這種運行方式只能測試智能合約中的函數的邏輯是否正確,并不能將以太坊客戶端、以太坊網絡和智能合約放到一起聯調,所以在實際的場景中,需要將智能合約部署到以太坊網絡上才能完整地對其進行測試。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。