區塊鏈學習(二)以太坊學習簡介
很多人在剛接觸區塊鏈的時候疑惑以太坊是什麼東西,和區塊鏈有什麼關係,為什麼要學習以太坊等問題,本文將簡單介紹,目的是學習和理解以太坊方便以後深入學習。
這裡從區塊鏈的發展說起:
區塊鏈起源於比特幣,是比特幣的底層技術。具體介紹參照我對區塊鏈介紹的部落格:http://blog.csdn.net/striver_jt/article/details/68485521
區塊鏈1.0時代:
也就是比特幣應用中的區塊鏈技術,裡面記錄著自比特幣誕生以來的所有比特幣轉賬交易,相當於比特幣網路的“資料庫”。其實在區塊鏈1.0時代,也就是比特幣運用的區塊鏈技術中已經包含了智慧合約的概念,可以說智慧合約的引入,使得區塊鏈技術進化為驅動世界的力量。區塊鏈1.0 特徵與不足:去中心化,開放性,自治性,資訊不可篡改,匿名性。不足:支撐智慧合約的腳本系統不完善,導致其應用在非金融領域十分困難,數學計算已經吞噬了全網80%的算力,每個區塊的大小隻有1M,能夠記錄的資訊非常有限。
區塊鏈2.0誕生:
以太坊的出現,使得智慧合約能力被自由釋放。以太坊在比特幣區塊鏈的基礎上進行了重大改進:1、完善腳本系統,使智慧合約能夠應用在各種非金融領域,這點非常重要;2、平衡賬目實現更加精細的賬目控制;3、底層協議保持簡單。以太坊:圖靈完備的虛擬機器
區塊鏈技術將多個領域內的概念和操作結合在一起,包括計算、通訊網路、加密學和人工智慧。在區塊鏈2.0中,我們需要通過智慧合約和智慧資產來記錄和轉移更多複雜的資產型別,我們就需要第三步—更強大的腳本系統–最終實現圖靈完備(能夠執行任何貨幣、協議和區塊鏈)。以太坊就是一個區塊鏈為基礎的專案,旨在提供一個圖靈完備指令碼語言和圖靈完備平臺。
因此我們學習區塊鏈,可以直接從學習以太坊開始。
什麼是以太坊?(官網: https://ethereum.org/)
以太坊是一個全新開放的區塊鏈平臺,它允許任何人在平臺中建立和使用通過區塊鏈技術執行的去中心化應用。就像比特幣一樣,以太坊不受任何人控制,也不歸任何人所有——它是一個開放原始碼專案,由全球範圍內的很多人共同建立。和比特幣協議有所不同的是,以太坊的設計十分靈活,極具適應性。在以太坊平臺上創立新的應用十分簡便,任何人都可以安全地使用該平臺上的應用。
以太坊虛擬機器
以太坊是可程式設計的區塊鏈。它並不是給使用者一系列預先設定好的操作(例如比特幣交易),而是允許使用者按照自己的意願建立複雜的操作。這樣一來,它就可以作為多種型別去中心化區塊鏈應用的平臺,包括加密貨幣在內但並不僅限於此。
以太坊狹義上是指一系列定義去中心化應用平臺的協議,它的核心是以太坊虛擬機器(“EVM”),可以執行任意複雜演算法的編碼。在計算機科學術語中,以太坊是“圖靈完備的”。開發者能夠使用類似於現有的JavaScript和Python等語言為模型的其他友好的程式語言,創建出在以太坊模擬機上執行的應用。
如何執行以太坊呢?
通過下載以太坊提供的客戶端(有能力也可以自己編寫),以太坊客戶端將通過網路連線其它運行了類似客戶端軟體的計算機並且通過他們開始下載以太坊區塊鏈從而趕上進度。相當於你也加入了以太坊區塊鏈的網路中成為其中的一個節點,並與其它節點一樣具有同等地位的處理事務。記住在一個點對點的網路裡,沒有“核心”伺服器並且任何一個計算機都擁有等同的權利和地位。你可以在以太坊區塊鏈上做的事情:連線到以太坊網路,探索以太坊的區塊鏈,建立新的交易和智慧合約,執行智慧合約,挖礦新的區塊等等。
你可以理解為以太坊網路是類似於比特幣的網路,但是不僅僅是這樣,他還是一個底層開發平臺,具有更完善的機制。以太坊也是工作量證明(POW)挖礦同比特幣一樣,礦工通過花費電力解開數學難題建立有效區塊。以太坊的工作量證明演算法稱為Ethash,它與比特幣的工作量證明稍微有些不同,降低了對礦工算力的要求,這使得用普通硬體挖礦成為可能。以太坊有一種內建的數字貨幣:
以太坊裡的代幣叫做Ether,簡稱ETH。與BTC類似,這種加密貨幣可以用來與其它加密貨幣或其它法幣進行交易。目前一個ETH的價格大概在人民幣365元左右(2017年3月)。與BTC擁有者被記錄在比特幣區塊鏈中一樣,以太幣ETH擁有者也被記錄在以太坊區塊鏈中,儘管在技術實現的方式上它們有些許不同。
以太坊的區塊時間更短
與比特幣區塊的10分鐘相比,以太坊區塊間時間大約在14秒左右。這意味著,當你在比特幣和以太坊中發起一筆交易,以太坊中的交易被記錄入區塊鏈中的速度快於比特幣中交易被記錄區塊鏈中。你可以認為比特幣寫入資料庫的時間平均為10分鐘,而以太坊寫入資料庫的時間平均為14秒。
以太坊虛擬機器上可以執行智慧合約
相比比特幣原始的指令碼語言,在以太坊中用來部署程式碼以及執行智慧合約的語言更高階,因此開發者們更熟悉。智慧合約是一段儲存在以太坊區塊鏈上的簡短計算機程式,智慧合約程式碼在一種被稱為以太坊虛擬機器的東西上執行,以太坊虛擬機器分佈在網路中所有參與者的計算機上執行著。現在可以簡單的把智慧合約類比為傳統伺服器端的程式碼。
以太坊學習開發中常見的專案與工具簡介:
剛接觸以太坊時候被其各種客戶端,編譯工具,環境,專案等搞得暈暈的,這裡簡單介紹以太坊各專案,客戶端,工具等。
Geth客戶端:
即Go-ethereum專案由go語言開發,介面:命令列適用平臺:windows、linux和OSX
功能和特點:該專案是使用最廣泛的以太坊客戶端,大部分節點都是執行的該客戶端,教程和例子也最多,推薦使用,可用於挖礦,組建私有鏈,管理賬號,部署智慧合約等常用功能,不可以編譯智慧合約。
pyethereum專案和ethereumj專案(客戶端)
pyethereum專案是用Python語言編寫的以太坊客戶端,ethereumj專案是用Java語言編寫的以太坊客戶端,只是語言不同,和前面GO語言編寫的客戶端Geth的功能完全相同。
webthree-umbrella專案(客戶端):
此專案包含3個客戶端,開發語言:c++,使用平臺:windows、linux和OSX,易用性也很好。但是隨著後續以太坊基金會主推的圖形化錢包Mist的推出,漸漸沒落。
Mix(IDE):
Mix 是智慧合約(以太坊稱為DAPP)的開發IDE,可以支援智慧合約(DAPP)的編寫、除錯,部署,全圖形化介面,但是目前已經停止開發了,開發組轉向了Remix,所以目前我們進行智慧合約的編寫除錯時候一般使用Remix。
Mist專案(客戶端)
由JavaScript語言開發,客戶端檔案:Mist,可以在windows、linux和OSX平臺使用的圖形化介面。Mist定位不只是一個錢包,而是將來DAPP(智慧合約的應用APP)市場,類似於蘋果市場,在這裡可以有你的賬號,可以瀏覽、釋出和買賣以太坊的DAPP應用。目前因為開發還不夠全面,名稱暫時顯示為Ethereum-Wallet,作用也很簡單,就是一個錢包的功能。未來要多多關注。
Truffle:
truffle是以太坊(Ethereum)最受歡迎的一個開發框架,是本地的用來編譯、部署智慧合約的工具,他可以為你做很多編譯部署等事情,使得開發者能夠專注於開發。
Testrpc:
Testrpc是以太坊區塊鏈在本地的一個模擬環境,不同於geth,geth是真正的以太坊環境,testrpc是在本地使用記憶體模擬的一個以太坊環境,對於開發除錯來說,更為方便快捷,當你的合約在testrpc中測試通過後,再可以部署到geth中去。
Solc:
對智慧合約的一個編譯工具,在現在一般的開發中可以由Remix替代。
solidity專案
solidity是智慧合約的程式語言,語言風格類似於JavaScript,目前只適用於以太坊智慧合約的編寫,你可以把他理解為一門新的程式語言。
browser-solidity專案:
由C++開發,非常方便的一點就是使用者輸入網址,使得編譯器在瀏覽器中顯示,無需下載本地編譯器。可以使用的平臺:windows、linux和OSX。功能和特點:該專案是智慧合約瀏覽器版本的開發環境,可以支援在瀏覽器中直接開發、除錯和編譯,對於初學者來說,可以快速上手,不需要安裝,非常方便,直接訪問地址使用:https://ethereum.github.io/browser-solidity/
綜上所述:一般我們初學者進行一些簡單本地程式設計本著容易上手考慮所能用到的有:geth等客戶端,truffle開發框架,browser-solidity網頁編譯器,testrpc測試環境,solidity程式語言。
附:
以太坊官方網站:https://ethereum.org/
該網站為以太坊的官方網站,有詳細的以太坊介紹和各種資源。