智能合約部署(簡單而有趣,手把手教你部署第一個智能合約)
Solidity 是一門面向對象、為實現智能合約而創建的高級編程語言,這門語言受到了 C++、Py- thon 和 Javascript 等語言的影響。在以太坊黃皮書披露的技術細節中,提到了以太坊虛擬機是一款 圖靈完備(Turing Completeness)的虛擬機器,Solidity 自然也就是一款圖靈完備的高級開發語言。
按照慣例,學習一門語言的第一個程序是介紹“hello-world”,這就當是和 Solidity 的初識吧。
這是最簡單的智能合約代碼,分別介紹一下具體的含義。第一行的作用是為了控制智能合約編 譯器的版本,“pragma”是 Solidity 的編譯控制指令,“^0.6.0”代表的含義是可以使用 0.6.x 的版 本對該代碼進行編譯,也就是說 0.5.x 和 0.7.x 的編譯器版本不允許編譯該智能合約的。此外,也可 以使用類似“pragma solidity > 0.4.99 < 0.6.0;”這樣的寫法來表達對編譯器版本的限制,這樣看上 去更加簡單明了。
代碼中“contract”是一個關鍵字,用來定義合約名字,它很像是某些語言里的類(class)定 義方法。“hello”是本合約的名字,這個合約的主要功能是向區塊鏈系統中存儲一個 Msg 字符串。“constructor”是該合約的構造函數,當合約部署時,執行的也就是構造函數的代碼,該構造函數 的功能是將 Msg 初始化為“hello”。
當然,介紹還沒有結束,這只是合約代碼,需要將它部署后再看看效果。想要運行以太坊的智 能合約,一般都會使用官方推薦的在線 IDE 環境 remix,這是一個智能合約開發、測試、部署的集 成環境。讀者可以在瀏覽器輸入:http://remix.ethereum.org/,打開后可以按照下面的步驟操作。
步驟 01:在打開的頁面中,單擊【Solidity】按鈕。
步驟 02:在跳轉后的窗口中單擊【EVM Vesion】選項卡并選擇【byzantium】選項,單擊【文件瀏覽器】按鈕。
步驟 03:在跳轉后的窗口中,單擊左上角的【+】按鈕創建文件,并在彈出的對話框中輸入文件名,然后單擊【OK】按鈕。
步驟 04:將前文復制的代碼粘貼至窗口右側的文本框中,使用快捷鍵進行保存(Windows 用 戶使用【Ctrl+S】組合鍵保存,macOS 用戶使用【Command+S】組合鍵保存),并單擊下圖中左側選項欄三號箭頭所示的按鈕切換到部署和運行頁面。警告不用處理,可以忽略它。
步驟 05:在切換到部署和運行頁面后,單擊【Environment】選項卡中選擇運行環境,此處采 用默認【JavaScript VM】選項即可,然后單擊【Deploy】按鈕,部署合約。
對于 Environment 的三種選擇,分別介紹一下。 (1)JavaScript VM:Remix 內置的虛擬機,運行速度快,無須挖礦,測試方便。
(2)Injected Web3:單擊時會連接瀏覽器安裝的 Metamask 插件,該插件為以太坊瀏覽器錢包, 很多時候,我們都是通過 Metamask 錢包將合約部署到主網或測試網。
(3)Web3 Provider:單擊時,將代表要連接某個以太坊節點,需要指定 Geth 的連接地。
步驟 06:部署完成后,在瀏覽器下部可以看到合約部署的信息及合約視圖。
步驟 07:在展開的合約視圖中可以看到右側的【Msg】按鈕,它代表著 Msg 方法,單擊該按鈕進行調用。
步驟 08:單擊【Msg】按鈕后可查看運行后的結果,得到“hello”。
此步驟執行完,合約部署到執行已經操作完成,該合約也就是簡單地把“hello”存儲到以太坊 節點中,并通過查詢函數 Msg 可以獲得存儲的值。