以太坊(ETH)開發(fā)入門(一)

通過一段時間的研究塘砸,今天對以太坊開發(fā)做一個總結虫溜。

一:以太坊是什么

以太坊(Ethereum)是一個建立在區(qū)塊鏈技術之上, 去中心化應用平臺霞捡。它允許任何人在平臺中建立和使用通過區(qū)塊鏈技術運行的去中心化應用蚀狰。

很多同學應該對這句話不理解愉昆,姑且可以理解為以太坊是區(qū)塊鏈里的Android,它是一個開發(fā)平臺麻蹋,讓我們就可以像基于Android Framework一樣基于區(qū)塊鏈技術寫應用跛溉。

其實在沒有以太坊之前,寫區(qū)塊鏈應用是這樣的:拷貝一份比特幣代碼扮授,然后去改底層代碼如加密算法芳室,共識機制,網絡協(xié)議等等(很多山寨幣就是這樣糙箍,改改就出來一個新幣)渤愁。

以太坊平臺對底層區(qū)塊鏈技術進行了封裝,讓區(qū)塊鏈應用開發(fā)者可以直接基于以太坊平臺進行開發(fā)深夯,開發(fā)者只要專注于應用本身的開發(fā)抖格,從而大大降低了難度。目前圍繞以太坊已經形成了一個較為完善的開發(fā)生態(tài)圈:有社區(qū)的支持咕晋,有很多開發(fā)框架雹拄、工具可以選擇。

二:智能合約

那么什么是智能合約:以太坊上的程序稱之為智能合約掌呜。(它是代碼和數據(狀態(tài))的集合)

也可以理解為在區(qū)塊鏈上可以自動執(zhí)行的(由事件驅動的)滓玖、以代碼形式編寫的合同(特殊的交易)

在比特幣腳本中,我們講到過比特幣的交易是可以編程的质蕉,但是比特幣腳本有很多的限制势篡,能夠編寫的程序也有限,而以太坊則更加完備(在計算機科學術語中模暗,稱它為是“圖靈完備的”)禁悠,讓我們就像使用任何高級語言一樣來編寫幾乎可以做任何事情的程序(智能合約)。

智能合約非常適合對信任兑宇、安全和持久性要求較高的應用場景碍侦,比如:數字貨幣、數字資產、投票瓷产、保險站玄、金融應用、預測市場、產權所有權管理、物聯(lián)網荣倾、點對點交易等等。目前除數字貨幣之外灾常,真正落地的應用還不多(就像移動平臺剛開始出來一樣)霎冯,相信1到3年內铃拇,各種殺手級會慢慢出現(xiàn)。

三:編程語言:Solidity

智能合約的默認的編程語言是Solidity沈撞,文件擴展名以.sol結尾慷荔。Solidity是和JavaScript相似的語言,用它來開發(fā)合約并編譯成以太坊虛擬機字節(jié)代碼缠俺。

1显晶、運行環(huán)境:EVM

EVM(Ethereum Virtual Machine)以太坊虛擬機是以太坊中智能合約的運行環(huán)境。(Solidity之于EVM壹士,就像之于跟JVM的關系一樣磷雇,這樣大家就容易理解了。以太坊虛擬機是一個隔離的環(huán)境躏救,在EVM內部運行的代碼不能跟外部有聯(lián)系唯笙。)

2、合約的編譯

以太坊虛擬機上運行的是合約的字節(jié)碼形式盒使,需要我們在部署之前先對合約進行編譯崩掘,可以選擇Browser-Solidity Web IDE或solc編譯器。

3少办、合約的部署

在以太坊上開發(fā)應用時苞慢,常常要使用到以太坊客戶端(錢包)。平時我們在開發(fā)中英妓,一般不接觸到客戶端或錢包的概念挽放,它是什么呢?

3.1:以太坊客戶端(錢包

以太坊客戶端蔓纠,其實我們可以把它理解為一個開發(fā)者工具辑畦,它提供賬戶管理、挖礦贺纲、轉賬航闺、智能合約的部署和執(zhí)行等等功能。

EVM是由以太坊客戶端提供的

Geth是典型的開發(fā)以太坊時使用的客戶端,基于Go語言開發(fā)潦刃。 Geth提供了一個交互式命令控制臺侮措,通過命令控制臺中包含了以太坊的各種功能(API)。Geth的使用我們之后會有文章介紹乖杠,這里大家先有個概念分扎。

Geth控制臺和Chrome瀏覽器開發(fā)者工具里的面的控制臺是類似的,不過Geth控制臺是跑在終端里胧洒。

相對于Geth畏吓,Mist則是圖形化操作界面的以太坊客戶端。

3.2:如何部署

智能合約的部署是指把合約字節(jié)碼發(fā)布到區(qū)塊鏈上卫漫,并使用一個特定的地址來標示這個合約菲饼,這個地址稱為合約賬戶。

以太坊中有兩類賬戶:

1列赎、外部賬戶

該類賬戶被私鑰控制(由人控制)宏悦,沒有關聯(lián)任何代碼。

2包吝、合約賬戶

該類賬戶被它們的合約代碼控制且有代碼與之關聯(lián)饼煞。

和比特幣使用UTXO的設計不一樣,以太坊使用更為簡單的賬戶概念诗越。

兩類賬戶對于EVM來說是一樣的砖瞧。

外部賬戶和合約賬戶的區(qū)別和關系是:一個外部賬戶可以通過創(chuàng)建和用自己的私鑰來對交易進行簽名,來發(fā)送消息給另一個外部賬戶或合約賬戶嚷狞。

在兩個外部賬戶之間傳送消息是價值轉移的過程块促。但從外部賬戶到合約賬戶的消息會激活合約賬戶的代碼,允許它執(zhí)行各種動作(比如轉移代幣感耙,寫入內部存儲褂乍,挖出一個新代幣,執(zhí)行一些運算即硼,創(chuàng)建一個新的合約等等)逃片。

只有當外部賬戶發(fā)出指令時,合同賬戶才會執(zhí)行相應的操作只酥。

合約部署就是將編譯好的合約字節(jié)碼通過外部賬號發(fā)送交易的形式部署到以太坊區(qū)塊鏈上(由實際礦工出塊之后褥实,才真正部署成功)。

3.3:運行

合約部署之后裂允,當需要調用這個智能合約的方法時只需要向這個合約賬戶發(fā)送消息(交易)即可损离,通過消息觸發(fā)后智能合約的代碼就會在EVM中執(zhí)行了。

3.4:Gas

和云計算相似绝编,占用區(qū)塊鏈的資源(不管是簡單的轉賬交易僻澎,還是合約的部署和執(zhí)行)同樣需要付出相應的費用貌踏。

以太坊上用Gas機制來計費,Gas也可以認為是一個工作量單位窟勃,智能合約越復雜(計算步驟的數量和類型祖乳,占用的內存等),用來完成運行就需要越多Gas秉氧。

任何特定的合約所需的運行合約的Gas數量是固定的眷昆,由合約的復雜度決定。

而Gas價格由運行合約的人在提交運行合約請求的時候規(guī)定汁咏,以確定他愿意為這次交易愿意付出的費用:Gas價格(用以太幣計價) * Gas數量亚斋。

Gas的目的是限制執(zhí)行交易所需的工作量,同時為執(zhí)行支付費用攘滩。當EVM執(zhí)行交易時帅刊,Gas將按照特定規(guī)則被逐漸消耗,無論執(zhí)行到什么位置轰驳,一旦Gas被耗盡厚掷,將會觸發(fā)異常弟灼。當前調用幀所做的所有狀態(tài)修改都將被回滾级解, 如果執(zhí)行結束還有Gas剩余,這些Gas將被返還給發(fā)送賬戶田绑。

注:如果沒有這個限制勤哗,就會有人寫出無法停止(如:死循環(huán))的合約來阻塞網絡。

因此實際上(把前面的內容串起來)掩驱,我們需要一個有以太幣余額的外部賬戶芒划,來發(fā)起一個交易(普通交易或部署、運行一個合約)欧穴,運行時民逼,礦工收取相應的工作量費用。

3.5:測試網絡:私有鏈

有些同學就會問了涮帘,我沒有以太幣拼苍,要怎么進行智能合約的開發(fā)?

答案是創(chuàng)建自己的以太幣私有測試網絡调缨,通常也稱為私有鏈疮鲫,我們可以用它來作為一個測試環(huán)境來開發(fā)、調試和測試智能合約弦叶。

通過上面提到的Geth很容易就可以創(chuàng)建一個屬于自己的測試網絡俊犯,以太幣想挖多少挖多少,也免去了同步正式網絡的整個區(qū)塊鏈數據伤哺。

另一個創(chuàng)建測試網絡的方法是使用testrpc燕侠,testrpc是在本地使用內存模擬的一個以太坊環(huán)境者祖,對于開發(fā)調試來說,更方便快捷绢彤。而且testrpc可以在啟動時幫我們創(chuàng)建一堆存有資金的測試賬戶咸包。

進行合約開發(fā)是,可以在testrpc中測試通過后杖虾,再部署到Geth中去烂瘫。

四:Dapp(去中心化的應用程序)

以太坊社區(qū)把基于智能合約的應用稱為去中心化的應用程序(Decentralized App)。如果我們把區(qū)塊鏈理解為一個不可篡改的數據庫奇适,智能合約理解為和數據庫打交道的程序坟比,那就很容易理解Dapp了,一個Dapp不單單有智能合約嚷往,比如還需要有一個友好的用戶界面和其他的東西葛账。

五:Truffle

Truffle是Dapp開發(fā)框架,他可以幫我們處理掉大量無關緊要的小事情皮仁,讓我們可以迅速開始寫代碼-編譯-部署-測試-打包DApp這個流程籍琳。

六:總結

我們現(xiàn)在來總結一下,以太坊是平臺贷祈,它讓我們方便的使用區(qū)塊鏈技術開發(fā)去中心化的應用趋急,在這個應用中,使用Solidity來編寫和區(qū)塊鏈交互的智能合約势誊,合約編寫好后之后呜达,我們需要用以太坊客戶端用一個有余額的賬戶去部署及運行合約(使用Truffle框架可以更好的幫助我們做這些事情了)。為了開發(fā)方便粟耻,我們可以用Geth或testrpc來搭建一個測試網絡查近。

注:為了方便大家理解,對一些概念做了類比挤忙,有些嚴格來不是準確

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末霜威,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子册烈,更是在濱河造成了極大的恐慌戈泼,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茄厘,死亡現(xiàn)場離奇詭異矮冬,居然都是意外死亡,警方通過查閱死者的電腦和手機次哈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門胎署,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人窑滞,你說我怎么就攤上這事琼牧』煮荩” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵巨坊,是天一觀的道長撬槽。 經常有香客問我,道長趾撵,這世上最難降的妖魔是什么侄柔? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮占调,結果婚禮上暂题,老公的妹妹穿的比我還像新娘。我一直安慰自己究珊,他們只是感情好薪者,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著剿涮,像睡著了一般言津。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上取试,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天悬槽,我揣著相機與錄音,去河邊找鬼想括。 笑死陷谱,一個胖子當著我的面吹牛,可吹牛的內容都是我干的瑟蜈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼渣窜,長吁一口氣:“原來是場噩夢啊……” “哼铺根!你這毒婦竟也來了?” 一聲冷哼從身側響起乔宿,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤位迂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后详瑞,有當地人在樹林里發(fā)現(xiàn)了一具尸體掂林,經...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年坝橡,在試婚紗的時候發(fā)現(xiàn)自己被綠了泻帮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡计寇,死狀恐怖锣杂,靈堂內的尸體忽然破棺而出脂倦,到底是詐尸還是另有隱情,我是刑警寧澤元莫,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布赖阻,位于F島的核電站,受9級特大地震影響踱蠢,放射性物質發(fā)生泄漏火欧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一茎截、第九天 我趴在偏房一處隱蔽的房頂上張望布隔。 院中可真熱鬧,春花似錦稼虎、人聲如沸衅檀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哀军。三九已至,卻和暖如春打却,著一層夾襖步出監(jiān)牢的瞬間杉适,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工柳击, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留猿推,地道東北人。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓捌肴,卻偏偏與公主長得像蹬叭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子状知,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內容