從技術層面看 以太坊與智能合約

隨著區塊鏈的越來越火,區塊鏈應用也是越來越多,我們本篇文章主要講述區塊鏈巨頭之一,以太坊相關的內容。

首先解釋一下為什麼介紹以太坊。畢竟市場上前有老牌勁旅比特幣,後有風頭正盛EOS。

原因如下:

1. 與比特幣相比,在以太坊上編程更加靈活。比特幣作為第一個區塊鏈應用,自產生起就不可避免的金融屬性,所以比特幣上的編程也更偏向於金融有關的業務,不夠靈活。相比之下,在以太坊上編程用的是類js語言solidity(後續文章會專門介紹這個),是圖靈完備的語言,所以處理的業務也就不再限制於金融方面,更加靈活。

2. 和EOS相比,以太坊已經運行了很多程序,目前沒有什麼大的問題出現,而目前EOS的公鏈還沒上線 ,儘管EOS白皮書介紹其功能更加完善,市場仍處於官網狀態。

3. 對開發者來說,以太坊支持多種語言的客戶端,可以適應不同系列的開發語言和操作系統,入門更方便。

技術入門

如果是想深入的進行這門技術開發的話,建議利用好下面的一些資源。

以太坊官網:https://www.ethereum.org/

以太坊愛好者:http://ethfans.org/

以太坊白皮書:

http://ethfans.org/wikis/%E4%BB%A5%E5%A4%AA%E5%9D%8A%E7%99%BD%E7%9A%AE%E4%B9%A6

在從項目的早期,為了適應不同系列的開發語言和操作系統,以太坊的團隊就實現了很多個的客戶端。如下圖所示的表格,有使用各種開發語言來實現的以太坊客戶端。客戶端的多樣性對於以太坊生態系統來說是一個巨大 的優勢。

各個語言版本的客戶端如下:

從技術層面看 以太坊與智能合約

但是,對於一些準備做以太坊開發的初學者來說,建議使用mist開發環境。因為mist的開發相比較於下載geth開發比較簡單,快捷。如果喜歡自主性更大的開發環境,建議使用geth+錢包開發。

Mist是一個去中心化的分散的web3.0應用的瀏覽器,geth(go-ethereum)是go語言的客戶端。

本文以mist為例:

1) 下載mist客戶端

https://github.com/ethereum/mist/releases

2) 做一個映射,做以太坊開發首先要同步以太坊數據,一般情況下會把節點數據同步到系統盤,截至寫文章的時候公鏈數據有200多G,使系統盤負載過大,最好是做一個映射。操作步驟如下:

a) 剪切C:\Users\PHD\AppData\Roaming\Ethereum,存儲到 D:\blockchain\。切記,這裡是剪切,如果C:\Users\PHD\AppData\Roaming\這個目錄下還有“Ethereum”文件夾,會導致下一步的命令報錯,“無法創建該文件”。

b) 打開命令行窗口CMD,敲入命令:mklink /J C:\Users\PHD\AppData\Roaming\Ethereum D:\blockchain\Ethereum

顯示,成功創建符號鏈接。

c) 打開mist以太坊錢包,驗證是否成功

3) 把離線節點拷貝到所需文件夾下面。由於以太坊節點數據太大,等著mist自己更新需要幾天的時間,速度比較慢,最快的方法是下載網上對應的鏡像,放到所需文件夾下面,然後打開mist驗證是否成功

以上就是搭建簡單以太坊開發環境的所有步驟了,接著就可以進行智能合約的開發。

在開發智能合約之前 我們要先說明一下什麼是智能合約。

智能合約是一套以數字形式定義的承諾,承諾控制著數字資產幷包含了合約參與者約定的權利和義務,由計算機系統自動執行。智能合約程序不只是一個可以自動執行的計算機程序,它本身就是一個系統參與者,對接收到的信息進行回應,可以接收和儲存價值,也可以向外發送信息和價值。這個程序就像一個可以被信任的人,可以臨時保管資產,總是按照事先的規則執行操作。(目前最靠譜的解釋)

通常會把寫區塊鏈程序改稱寫智能合約。雖然比特幣(Bitcoin)上也能寫智能合約,但是比特幣所支持的語法僅與交易有關,能做的事情比較有限。因此目前提到寫智能合約,通常指的是支持執行圖靈完備程序的以太坊(Ethereum)區塊鏈。

智能合約可以做什麼?

目前最常見的智能合約是各種加密貨幣合約,開發者可以很容易地透過部署一個智能合約,來提供運行於以太坊上的新加密代幣。如果這份智能合約相容於ERC20標準1,開發者不需要重新開發從挖礦到交易的整個代幣生態系,你的新加密代幣就可以直接使用支持以太坊的電子錢包來收送,大大降低了建立新加密代幣的門檻。

智能合約也可以用來運作各種公開公正的自動服務機構(DAO,權力下放自治組織)。透過分散在全球各節點上運作的智能合約,所有運作與決策都是公開透明的,降低了交易的不確定性。

智能合約和一般程序的差異

1) 整合金流容易

2) 部署時與後續寫入時需要費用

3) 存儲資料的成本更高

4) 部署後無法更改

將智能合約部署到區塊鏈的流程

合約寫好後,把.sol編譯成EVM(Ethereum Virtual Machine)可用的二進制文件(Contract ByteCode)才能部署到Ethereum的區塊鏈上執行,部署到區塊鏈上的合約會有一個錢包地址(地址)和一樣格式的合約地址(Contract Address)。

從技術層面看 以太坊與智能合約

部署後智能合約可自動執行。後續call智能合約的時候,使用者可以使用部署合約的錢包地址(所有者帳戶),或依據編寫的智能合約條件,讓其他錢包地址也能呼叫這個智能合約。 呼叫智能合約,其實就是向這個合約地址發起交易,只是交易的不只是代幣,而可以是智能合約提供的呼叫方法。

從技術層面看 以太坊與智能合約

智能合約範例:

從技術層面看 以太坊與智能合約

如何編寫智能合約?

Ethereum上的智能合約需要使用solidity語言來編寫,關於solidity語法的詳細介紹,可以參考後面的文章

黑馬程序員Go語言與區塊鏈學科會有智能合約和以太坊以及EOS的區塊鏈知識體系的系統講解。

課程分為八個階段

第一階段Go語言開發實戰

第二階段Go語言高併發服務器開發

第三階段去中心化前端開發與web服務器開發

第四階段區塊鏈密碼學安全理論與開發

第五階段區塊鏈與智能合約開發

第六階段區塊鏈分佈式應用開發

第七階段區塊鏈系統框架開發

第八階段Go與區塊鏈面試強化

人才培養方向包含密碼學安全開發、區塊鏈系統開發、區塊鏈應用開發、Go語言Web開發、Go語言微服務開發、Go語言分佈式開發。

Go語言入門免費資源-黑馬出品

後續更多區塊鏈精品免費課程分享 請關注 黑馬程序員


分享到:


相關文章: