鏈客,專爲開發者而生,有問必答!ios
此文章來自區塊鏈技術社區,未經容許拒絕轉載。算法
不少人都說比特幣是區塊鏈1.0,以太坊是區塊鏈2.0。在以太坊平臺上,能夠開發各類各樣的去中心化應用,這些應用構成了以太坊的整個生態。目前,以太坊是區塊鏈世界裏生態建設最好的底層公鏈。本篇將以通俗易懂的方式介紹以太坊開發中涉及到的相關概念,帶領你們輕鬆入門。數據庫
以太坊編程
以太坊(Ethereum)是一個創建在區塊鏈技術之上的、圖靈完備的去中心化應用平臺。它容許任何人在平臺中經過智能合約技術開發、部署和使用去中心化應用。安全
有沒有感到和ios、Android平臺有點相似?
在以太坊未問世以前,寫區塊鏈的應用是這樣的:拷貝一份比特幣代碼,而後去改底層代碼如加密算法、共識機制、網絡協議等等。201三、2014年那時候的不少山寨幣就是這樣,改改比特幣代碼就造出來一個新幣。網絡
以太坊平臺對底層區塊鏈技術進行了封裝,讓區塊鏈應用開發者能夠直接基於以太坊平臺進行開發,開發者只要專一於應用自己的開發,從而大大下降了難度。app
目前圍繞以太坊已經造成了一個較爲完善的開發生態圈:社區支持、開發框架、開發工具等等。
智能合約框架
網絡上關於智能合約的解釋都很晦澀。咱們能夠簡單的理解爲在區塊鏈上,由事件驅動、以代碼形式存在、可執行的特殊交易合同。它是代碼、數據的集合。編程語言
智能合約很是適合對信任、安全和持久性要求較高的應用場景,好比:數字貨幣、數字資產、投票、保險、金融應用、預測市場、產權全部權管理、物聯網、點對點交易等等。分佈式
目前除數字貨幣以外,真正落地的應用還很少。和移動互聯網剛興起之時各類各樣、各行各業的APP推陳出新同樣,去中心化應用的市場在初期確定有一個紅利期。對此有興趣的開發者,可抓住機會。
Solidity
Solidity是一門和JavaScript相似的編程語言,文件擴展名以 .sol 結尾。它用於智能合約的開發,並能編譯成以太坊虛擬機字節碼,部署到以太坊底層區塊鏈網絡上。
EVM
EVM即以太坊虛擬機,全稱是Ethereum Virtual Machine。它是以太坊智能合約的運行環境。
EVM是由以太坊節點提供。每一個以太坊節點中都包含EVMSolidity之於EVM,就像Java跟JVM的關係同樣
以太坊虛擬機是一個隔離的環境,在EVM內部運行的代碼不能跟外部有聯繫
EVM運行在以太坊節點上,當咱們把合約部署到以太坊區塊鏈網絡上以後,合約就能夠在以太坊網絡中運行了。
合約編譯
以太坊虛擬機上運行的是合約的字節碼。這就須要咱們在部署以前先對合約進行編譯。
推薦使用solc編譯器。
以太坊客戶端(節點)
一個以太坊客戶端就是一個以太坊節點。它提供帳戶管理、數字資產管理、挖礦、轉帳、智能合約的部署和執行等等功能。對於咱們開發者來講,它就是一個開發者工具。
Geth是典型的以太坊客戶端。Geth這個名字是Go Ethereum開源項目的簡稱。它是基於Go語言開發且實現了Ethereum協議的客戶端軟件。 Geth提供了一個交互式命令控制檯,經過命令來操做以太坊的各類功能(API)。
Geth是全節點客戶端,會一直同步以太坊區塊鏈上的全部數據。目前數據量已經幾十G,不久就會上百G。在開發過程當中,咱們推薦使用以太坊區塊鏈的私有鏈Ganache,免去同步以太坊所有區塊數據的麻煩。在後續的文章中會介紹Ganache。
帳戶
以太坊中帳戶分爲兩類:* 外部帳戶(EOA)
該類帳戶被公鑰-私鑰對控制(用戶),沒有關聯任何代碼外部帳戶的地址由公鑰衍生而來* 合約帳戶(CA) 該類帳戶爲智能合約分配的帳戶,被合約代碼控制且有代碼與之關聯智能合約的部署會把合約字節碼發佈到區塊鏈上,並使用一個特定的地址來標示這個合約,這個地址就是爲合約帳戶
合約帳戶存儲了代碼,外部帳戶則沒有。除了這點以外,這兩類帳戶對於EVM來講都是同樣的。
合約部署就是將編譯好的合約字節碼,經過外部帳號以發送交易的形式部署到以太坊區塊鏈網絡上(由實際礦工出塊以後,纔會真正部署成功)。
外部帳戶與外部帳戶之間交易僅僅是轉帳。可是外部帳戶到合約帳戶,是能夠激活各類操做的。
運行
合約部署後,當須要調用這個智能合約的方法時,只須要向這個合約帳戶發送消息(交易)便可,經過消息觸發後智能合約的代碼就會在EVM中執行了。
Gas
Gas即礦工費。以太坊上每筆交易的執行(被礦工打包)都會被收取必定數量的gas。gas的目的是限制執行交易所需的工做量,同時爲執行支付費用。當EVM執行交易時,gas將按照特定規則被逐漸消耗,不管執行到什麼位置,一旦gas被耗盡,將會觸發一個 out of gas 異常。當前調用幀所作的全部狀態修改都將被回滾。若是執行結束,還有gas剩餘,這些gas將會返還給發送帳戶。所以,咱們須要一個有以太幣餘額的外部帳戶,來爲發起的交易支付gas。
若是沒有這個限制,就會出現沒法中止(如:死循環)的合約來阻塞以太坊區塊鏈網絡
gas能夠認爲是一個工做量單位,智能合約越複雜(計算步驟的數量、類型、佔用的內存等等),所需的gas就越多。gas的最小單位是wei,1eth=10^18wei=10^9gwei
GasLimit: 願意支付礦工費的上限
GasPrice: 礦工費單價
gas = GasLimit * GasPrice
去中心化應用(Dapp)
Dapp全稱是Decentralized App。以太坊社區把基於智能合約的應用稱爲去中心化的應用。若是咱們把區塊鏈理解爲一個不可篡改的分佈式帳本數據庫,智能合約理解爲和數據庫打交道的程序,那就很容易理解Dapp了。一個Dapp不僅僅有智能合約,還須要有一個友好的用戶界面和其餘的業務程序。
Truffle
Truffle是目前最流行的Dapp開發框架,它能夠幫咱們處理掉不少繁瑣的事情,讓咱們更專一於智能合約的開發,迅速開始編碼-編譯-部署-測試-打包Dapp的流程。
總結
咱們如今來總結一下。以太坊是平臺,它讓咱們方便的使用區塊鏈技術開發去中心化的應用。應用中,咱們可使用Solidity來編寫和區塊鏈交互的智能合約,合約編寫好後以後,咱們經過一個有餘額的帳戶將合約部署到以太坊節點上,並運行合約(使用Truffle框架能夠更好的幫助咱們作這些事情)。爲了開發方便,咱們能夠用以太坊私有鏈Ganache來搭建一個測試網絡。
注:本文中爲了方便你們理解,對一些概念作了類比,有些嚴格來講不是準確。不過我認爲對於初學者,也沒有必要把每個概念掌握的很細緻和準確。學習是一個逐步深刻的過程,不少時候咱們會發現,過一段後,咱們會對同一個東西有不同的理解。