• <option id="cacee"><noscript id="cacee"></noscript></option>
  • <table id="cacee"><noscript id="cacee"></noscript></table>
  • <td id="cacee"></td>
  • <option id="cacee"></option>
  • <table id="cacee"></table>
  • <option id="cacee"><option id="cacee"></option></option>
  • <table id="cacee"><source id="cacee"></source></table><td id="cacee"><rt id="cacee"></rt></td>
    <option id="cacee"><option id="cacee"></option></option>
     找回密碼
     立即注冊

    掃一掃,登錄網站

    首頁 自媒體 查看內容
    • 4373
    • 0
    • 分享到

    干貨|以太坊全景介紹及入門學習路徑(分享實錄)

    2018-4-27 14:16

    來源: HiBlock-Net

    內容來源:HiBlock區塊鏈課堂007期 楊鎮老師的線上分享《扒光區塊鏈,以太坊全景介紹及入門學習指北

    本文編輯:Cynthia



    以上為楊鎮老師的分享視頻,時長1h27m21s,建議在WiFi環境下觀看。


    本次分享主要是針對以太坊的基本概念的介紹,屬于入門級別,主要目的是幫助大家快速認識和了解以太坊。


    自我介紹



    大綱




    1

    交易所那些事兒



    要談到加密貨幣就沒辦法避開交易所,在我看來交易所其實是現在加密貨幣市場的一個最大的毒瘤。舉兩個實例來看。3月加密貨幣市場有兩個大新聞:3月7日,某交易所自稱被黑客攻擊,很多賬戶遭受資金損失;3月底,另一個大的交易所號稱某些賬戶做了一筆達到46萬個比特幣的惡意交易,導致市值大幅波動。


    這兩件事的具體情況我們不做過多探究和推論,只看它們公開的信息。這兩家交易所的公開公告里對事件的處理方式是一樣的,都是用回滾。大家如果懂數據庫或計算機技術的都知道,我們現在的中心化數據庫通常在企業應用里都會有備份機制,所謂回滾其實就是把數據庫的數據完整地恢復到之前的某一個時間點。數據備份機制的頻率可能是小時,也可能是天,像交易所這種應用的備份頻率大多會是分鐘級別,也就是說每分鐘都會有備份,就是為了防止這鐘異常情況的發生。


    如果交易所要把交易回滾到3月30日14:59,14:59是有一個數據庫數據快照的,它可以基于這個快照(相當于一個增量的變動),把數據恢復到14:59的狀態,那么在這之后的交易就全部作廢。


    懂區塊鏈技術的人應該知道,在區塊鏈的世界里并不存在回滾,技術上不允許這樣做,而這兩家交易所既然能做回滾,就證明它不是去中心化的交易所,它用的存儲技術還是傳統的中心化數據庫。


    交易所的毒瘤體現在哪?我們可以簡單過一下交易所的交易流程。首先要把虛擬貨幣充值到交易所,比如我想把比特幣轉成以太幣,我需要先通過充值把比特幣轉到交易所,然后在交易所里把比特幣換成以太幣,之后再提現,把交易所里的以太幣轉到自己的錢包。


    整個流程需要三個操作:充值、交易所交易、提現。充值發生在比特幣網絡上,提現發生在以太坊網絡上,這兩個交易是可以在比特幣和以太坊的網絡上查到的,但是在交易所內,不管你經過了多少次交易,都不能在公鏈上查到,也就是說交易所內的交易都是存儲在它中心化的數據庫里。既然這樣,交易所作假就太容易了,在后臺調整一個參數就可以做到,也沒有監管。


    即使不考慮交易所作假的情況,假設都是正常操作,有經驗的操盤手也可以很簡單地用10萬美元在24小時之內制造出500萬美元的市值波動。所以我們在交易所里看到的所謂價值,包括虛擬貨幣的波動,都跟這些金融因素有關。


    2

    扒光區塊鏈


    下面來看看什么是區塊鏈。區塊鏈作為比特幣的底層技術,也作為以太坊的底層技術,值得我們去深入理解和學習。


    簡單來說,區塊鏈就是一個數據庫。如果大家懂技術或者會編程的話,應該知道數據庫是什么,就是一個存儲數據的軟件。當然區塊鏈和傳統的數據庫肯定是有區別的。


    從最簡單的概念來講,區塊鏈就是一個分布式流水賬數據庫。分布式、流水賬,這兩個修飾詞就把區塊鏈本身最關鍵的特性概括出來了。


    分布式,簡單來說就是數據庫分散在各個地方。我們都知道每個企業,包括BAT、京東等都有自己的數據中心,同時還會在另一些地方有備份或冗余的數據庫,但是這些數據庫都是由本公司全部控制的,節點也不是很多。區塊鏈的分布式是節點分散在世界各地,它是一個完全分散化存儲的結構,一個地方的數據庫出現問題,不會影響整個數據庫的使用,因為在其他地方還有成千上萬個存儲節點。


    流水賬,舉個例子,我們都去銀行取過錢,銀行的取款單上都有一個流水號,也就是說這筆交易在銀行的系統里會有一個編號記錄下來,相當于每個賬戶的每筆資金交易在銀行有一個對應的唯一的編號和標識,流水的意思是這個編號是隨著時間的推移而不斷累加的,不會重復也不會返回。區塊鏈本身的數據就是這樣一個流水的數據,同樣也有一個編號,只不過在區塊鏈里是把若干交易打包到一個區塊里用一個區塊號來做標識,流水賬本的一個關鍵特點就是不會重復也不可逆轉。


    那么區塊鏈的流水賬和銀行的流水號有什么區別呢?這個區別主要體現在技術上。


    銀行的流水號是通過程序生成,存儲數據的數據庫是中心化的,允許修改數據,所以可以理解為銀行是通過人為控制保證流水號不變,實際從技術上來說是可以改變的。


    區塊鏈里,技術上就不允許修改這個流水號,交易數據只能被添加,不能被修改或刪除。

     


    明白了區塊鏈的實質以后,我們再來看上面這兩個圖,圖中外圍的都是最終用戶。這兩個圖包含了三層意思:


    • 第一層意思:從最終用戶應用的角度,實際數據是存在中心化的支付寶里,還是存在去中心化的分布式流水賬數據庫里。這對用戶而言并沒有什么區別,假如某一天阿里將數據全部存儲到區塊鏈網絡,只要前端界面不變、應用操作不變,對最終用戶而言是沒有什么變化的。

    • 第二層意思:中間的分布式數據和業務功能,其存儲和操作方式肯定是不一樣的,區塊鏈上的數據又是不可修改或刪除的,所以在上面做業務的話也必然會有一些技術上的區別,這里就不展開介紹了。

    • 第三層意思:其實就是組織形式上的一些變動。右邊這個圖從人性的角度來講更代表了一種自由平等,一種公眾意識的體現。


    3

    以太坊


    了解了區塊鏈再來看以太坊就很容易了。我可以很簡單地告訴大家,以太坊就是區塊鏈加上以太坊虛擬機。以太坊虛擬機相當于一個虛擬的計算機,一個虛擬的代碼執行機制,或者說一個虛擬的環境,它有自己的定制機器碼,可以在基于區塊鏈的存儲之上運行一些可編程的業務邏輯。以太坊通常也被稱為智能合約平臺,或世界計算機


     

    上圖中的這個人是以太坊的創始人,V神,他被認為是扎克伯格之后的又一個天才。V神1994年出生于俄羅斯,6歲的時候和父母移民到加拿大,所以他擁有雙重國籍,他父親是計算機工程師,V神8歲開始學編程,10歲自己寫了第一個單版游戲,類似于紅白機上看到的小蜜蜂射擊游戲,13歲開始沉迷于魔獸世界,在他16歲(2010年)的時候暴雪發布一個補丁,移除了術士的招牌技能——生命虹吸,他極力反對并在社區多次投訴無果后怒刪游戲,轉而去學其他的東西,從這個角度來說我們應該感謝暴雪,這次補丁事件間接成就了今天的V神。通過這件事,他也認識到一些像暴雪這樣的大公司的中心化特點所帶來的弊端,這個決策并不是通過玩家投票作出的。


    此后的第二年,V神從父親那知道并愛上比特幣,然后開始自己的比特幣寫作,大概三年時間成為非常著名的比特幣作家。后來V神進入滑鐵盧大學學習,2013年他參加了一個比特幣會議,他發現現在正是比特幣發展的絕佳機會,于是毅然從滑鐵盧大學輟學,用半年的時間游歷歐洲,結實了很多共同興趣的人,完成了以太坊的設想并在2013年底寫出了以太坊白皮書。這份白皮書剛開始時只在小范圍的朋友中傳播,大家一起做后續的研究,直到2014年1月,V神在北美的一個比特幣大會上正式公布了以太坊白皮書,確立以太坊正式成立。


    這里就涉及到本次分享的第一個彩蛋了,這個彩蛋是關于V神和他的早期合作者Gavin Wood。Gavin Wood是以太坊黃皮書的作者,以太坊黃皮書就是一個技術手冊,一份以太坊虛擬機的詳細的技術說明,包括具體算法、實現方式、數據結構等等。據說以太坊黃皮書剛問世的時候全世界只有不到100人能看懂。想學習以太坊技術的話可以去看看這份文檔。


    以太坊早期的所有關鍵技術決策都是Gavin Wood來做的,所以在以太坊中V神和Gavin Wood就相當于蘋果初創時期的喬布斯和沃茲尼亞克,一個專注于產品規劃,一個專注于技術研究、產品實現。Gavin Wood本人非常低調,知名度當然沒法跟V神比,但他是以太坊早期不可或缺的人物。


    2016年Gavin Wood離開了以太坊社區,Gavin離開后做了一款世人皆知的以太坊客戶端:Parity。Parity用Rust語言編寫,是目前最穩定功能最強的客戶端,這個客戶端還是目前唯一一個支持企業級應用和功能的以太坊客戶端。


    2017年中的時候他又創立了一個新的項目Polkadot,這個項目被認為是區塊鏈的未來,我認為這樣的項目才稱得上是區塊鏈3.0。這個項目本身的宣傳也是web3。他要解決的就是跨鏈的問題,他提供了底層的集成服務,本身有多鏈和鏈間通信兩個關鍵特性,還提供了一種所謂的橋接(bridge)特性去連接已有的區塊鏈網絡。現在以太坊、比特幣網絡都是獨立的,中間沒辦法做通信,要通信只能通過其他第三方的協議。而Polkadot的目標就是用新的底層架構,從軟件協議層面重塑互聯網。


    4

    以太坊的基本概念



    賬戶(Account)


    首先是賬戶,這是以太坊和比特幣的區別,比特幣里并不存在賬戶的概念,它只有一個地址,余額是通過掃描歷史區塊中和這個地址有關的所有交易的價值轉移量來確定的;而以太坊里則用賬戶來保存這些數據。


    以太坊的賬戶有兩種類型:


    • 一是外部擁有賬戶,這種賬戶是由某一個特定的私鑰來控制的。

    • 二是合約賬戶。以太坊的核心功能是提供可執行的智能合約,合約賬戶就是用來保存合約代碼和所有合約數據的。


    交易和消息(Transaction和Message)


    以太坊里所有賬戶之間的交互都是通過交易或消息來實現的。這個交易和消息從技術上看其實是一樣的,它們唯一的區別是:消息是由合約賬戶產生的,而交易一般是由外部賬戶產生。


    氣(gas)


    以太坊里還有另一個非常重要的概念是氣,氣的英文gas是指汽油,從這個翻譯來看是說汽車想要開走的話需要動力-汽油,也就是能源。對于虛擬計算機來講,氣就相當于我執行某些操作要消耗的電,而電需要用錢買,以太坊消耗的電要用以太幣去購買。電也會有價格,對應到以太坊里氣的價格就是gas price,每個交易每(消息)要消耗多少氣是可以根據其具體數據或代碼計算出來的,且會按照當時的氣價換算成以太幣作為執行交易的費用。


    理解這些基本概念對我們理解其他高級內容非常重要。以太幣網絡與比特幣那樣一個價值網絡對比,其設計初衷還是有區別的,以太幣除了作為價值的等價物的屬性以外,還有一個屬性是為在以太坊虛擬機上運行智能合約執行操作提供成本機制。


    從網絡或合作方式的設計上看,設計以太幣有三個目的:一是用這個來提供成本消耗;二是做一些等價物替換;三是做激勵機制,激勵給礦工。


    說到礦工,很多人都聽說過挖礦,以太坊也不例外。以太坊里獲得以太幣的唯一方式就是所謂的“挖礦”。挖礦的人就是礦工,很多礦工集合到一起挖礦就變成礦池,礦工用來挖礦的機器叫礦機,這都是一些最基本的概念,不再展開。


    5

    從用例看智能合約


    在講具體實例之前我們先送出第二個彩蛋。第二個彩蛋是關于智能合約的,什么是智能合約,智能合約對于我們這些做技術或編碼的人而言有什么潛在的價值。


    先來看什么是合約。舉個例子,假如我要租房,需要跟房東簽一個租房協議,這個協議通常會包括:預訂一年或多久的時間,租金是每月付或每季度付,押金多少等等,這個租房合約其他人肯定用不了,如果要用必須重新簽訂。那這就是合約的第一個屬性:唯一性,它是給某些特定的人,也就是合約的關系方所定制的。合約還有一個特性:它有時間限制。比如我和房東簽訂的合約時間是一年,那么一年之后就會自動失效。


    智能合約和現實中的合約非常像,它也有這些特性。首先智能合約是給某一些參與者定制的,一般來講是兩方以上;其次智能合約通常也應該具備時間屬性。智能合約相當于是一種自動的合約執行的機制。


    那么智能合約對于程序員來講有什么價值呢?了解了智能合約唯一性和時間性的特性之后,相信大家都能想到,假如要跟公司或者客戶簽訂協議,不可能用同一份協議去給一千個客戶服務。所以如果你掌握了智能合約開發能力就相當于掌握了在未來的智能合約時代或者說區塊鏈3.0時代的一個律師資格。


    因為每個合約都要人起草、審核,這都是律師的工作,而作為程序員的你會智能合約編碼,就相當于擁有了智能合約平臺的律師資格證,可以在智能合約平臺里幫助用戶或企業起草合約。這就不會像現在這樣,服務或系統做完成交之后程序員可能就沒用了,智能合約領域不存在這樣的情況,因為合約是一次性的,執行完成之后還要重新起草、重新簽訂。


    從用例看智能合約


     

    上圖列的這4類合約從應用角度來講是有明顯區別的。


    第一類是對賭(Betting)合約和作物保險(Crop Insurance)。這都是雙方參與的合約。對賭是什么意思呢?就是兩個人來賭一件事,比如賭明天的氣溫高于多少或低于多少,或者直接就賭扔兩個骰子的結果是大于7還是小于7。這種合約在以太坊上非常容易實現,只要20多行代碼;它要通過使用一些數據服務,比如生成隨機數、查詢天氣等鏈外數據等。作物保險其實也是一樣,作物保險相當于是一個農民和保險公司之間簽的智能合約,比如農民花10美元向保險公司投保,保險的內容是今年如果有冰雹,農作物受到損失的話,保險公司需要賠付給農民100美元。關于今年有沒有冰雹,其實也可以通過第三方的氣象臺的鏈外數據服務來得到,從而可以自動進行理賠。


    第二類是投票(Voting)合約和拍賣(Auction)合約。這都是多人參與的公共行為。投票和選舉是類似的,可以在一個智能合約里規定,現在有幾個方案或候選人,大家可以通過合約來進行投票或選舉,因為以太坊里所有人都是用地址標識的,所以能判斷這個人是否已經投過票。拍賣的話,先把要拍賣的東西在創建合約的時候把它轉給合約,大家都可以看到要拍賣的是什么,然后出價。出價可以是兩種方式:一種是明確表示我出多少錢,這個錢數直接寫到交易里面,因為區塊鏈上所有交易都是透明的,大家都可以看到。另一種是暗拍的方式,比如我把拍賣的金額通過一種算法進行變換(比如進行哈希)傳給合約,這樣從交易數據上不能直接看出各人的出價。當拍賣時限到達的時候自動完成拍賣。


    第三類是付款(Purchase)合約和微支付通道(Micro Payment Channel)。簡單來說就是支付和金融,比如轉賬、金融方面的一些付款合約,和淘寶中的發貨、收獲確認的流程非常像,買家賣家之間建立一個合約,買家先把錢打到合約里,賣家在線上通過第三方發起一個資產轉移,或線下發起一個郵寄的動作,把貨發出來,買家收到貨后調用合約上的某個函數去更改狀態,相當于確認收貨,賣家就可以從合約里把錢拿走,這個過程和淘寶其實沒有什么區別。


    微支付通道從技術上來講屬于多重簽名合約。比如我經常去跟同一個煎餅攤的老板買煎餅,我們兩個人達成一致:我每天從他這里拿走一個煎餅,周期性(限定時間)地結賬,這就是簽訂一個微支付通道。這個解決的就是交易費的問題,大家都知道比特幣或以太坊每筆交易都會產生交易費,如果交易金額很小,那這種交易成本就會相對變得非常高,而像這樣定期結算的話就只需要支付一筆交易費。


    ERC20和ERC721


    最后再看兩個非常有名的代幣的標準,ERC20和ERC721。ERC,簡單來講就是以太坊社區的參與者可以給以太坊提出改進意見,以太坊核心開發團隊會針對這個意見來做一些注釋,最后實現到協議上或客戶端里(進入EIP)。


    ERC20注明的就是代幣標準,其意義在于它是一個通用接口,定義了一組函數和事件,只要符合這個接口的實現都可以作為標準代幣,由交易所或第三方服務來處理。


    ERC721是針對ERC20作了一些改造,ERC721是指一種不可替代物(non-fungible)token,是一種可以追蹤的、不可再分的代幣。ERC721代幣的特性就像現實生活里的收藏品、汽車或房子等,是一種不可替代的資產,這種資產的轉移是帶有價值變動的。


    6

    以太坊生態系統和DApp


    下面介紹一些以太坊的具體技術和工具。學習一項新技術,最困難的是一開始根本不知道要看什么、從哪里學起。


     


    上圖左邊展示的就是以太坊的生態系統。最中間的是以太坊網絡,包括客戶端協議、區塊本身的東西,離它最近的是左邊Geth和web3,Geth就是以太坊的客戶端,web3是學習以太坊必須要掌握的一個東西,因為它是和以太坊客戶端節點交互的一個技術接口(JSON-RPC)。


    上面的truffle和embark是以太坊的開發框架,目前人氣最高、社區活躍度最高的,它們都提供了一些有利于合約測試的機制,比如本地測試環境、測試網絡、測試代碼模版等。


    下面的swarm和IPFS是去中心化存儲方案,我們要開發應用的話光有數據庫和虛擬機還不行,還需要有前端處理,那自然就會有前端代碼,前端代碼就可以存儲在swarm或IPFS上。IPFS是一個單獨的區塊鏈項目,它也是公鏈,有自己的生態。


    右上角的oraclize就是預言機,其功能是提供鏈外數據服務。比如前文提到的,要生成一個隨機數,或要獲取天氣信息,就需要用到這個服務。ENS可以理解為現在互聯網上的DNS域名服務,可以在ENS上注冊一個域名,在做去中心化應用的時候可以用ENS域名來訪問相應的資源或者程序。


    Mist是以太坊的錢包客戶端。Metamask是一個基于瀏覽器的插件,可以幫你管理私鑰。


    右邊的圖是DAPP的基本組成要素。通常來講,一個DAPP由三部分組成:


    第一部分是鏈上的服務,包括智能合約、whisper和orbit。whisper是一個點對點消息服務,就是說以太坊的兩個地址之間,可以通過whisper協議直接發消息過去。orbit就是一種類似于消息訂閱的鏈上服務。


    第二部分是鏈外的服務,包括oraclize、ENS、swarm、IPFS。鏈外是指智能合約所在鏈的鏈外,預言機是用來獲取第三方服務或其他鏈上的數據,ENS提供域名,swarm、IPFS則是存儲。


    第三部分是前端,比如chrome+metamask、mist browser。它們都可以做前端程序的運行環境,執行DApp的前端程序。


    7

    以太坊入門學習指北


    學習一個新的技術,首先要去官網看它的官方文檔介紹。如上圖,建議從左往右、從下往上的順序來學習。



    首先是以太坊官網,Ethereum Homestead Documentation也是我學習的入口,文檔里講了一些非常重要的概念,除了前文中提到的以外,還介紹了客戶端的使用、比如geth的安裝、web3的使用等。學習以太坊開發之前必須理解這些基本概念,否則會遇到很多麻煩。


    接下來就是以太坊的高級開發語言Solidity,它有單獨的編譯器,可以把源代碼編譯成EVM機器碼。這個機器碼就可以發布到實際的鏈上來執行具體的功能。Solidity語法大概是結合了C++、JavaScript和Python語法的一種語言,跟語言關系最近的就是開發環境,比如truffle和embark,接下來就是其他相關工具,這些東西結合solidity的使用來學習就好。


    如果這些都會了的話,可以再往上提高一步,比如EVM和ABI。ABI就是應用二進制接口,也就是智能合約的調用接口。每一個用solidity編寫的智能合約,其編譯結果會包含EVM機器碼、ABI編碼和web3部署代碼。ABI編碼之所以重要,是因為它不只是在合約之間調用時會使用,任何外部服務要與合約交互都要用到它;它不僅和編譯有關,還和執行效率有關。


    Openzeppelin是一個非常偉大的開源項目,它提供了一些合約安全編碼的模板和標準的且相對安全的代碼寫法。這個項目的意義在于它提供了可復用的庫(代碼),這對于一個技術生態來講是非常重要的。


    Contract Auditing就是合約審計。智能合約間的相互調用和返回的機制、運行的細節等,都存在很多可以被利用的漏洞,合約審計是Solidity開發進階的一個重要內容。


    接下來就是一些具體的protocol topic(協議級的話題)了,這里就不展開來講了,僅給大家提供一個參考。


    8

    總  結



    最后一個彩蛋:“超級賬本”和DLT。


     

    之前社區的胡華杰老師分享過關于超級賬本的話題。現在fabric比較火熱,因為它是目前企業級區塊鏈應用的一個標志項目,是一個可定制的區塊鏈。這對企業來說很重要,因為每個企業都有自己的業務,哪怕都是電商或物流,具體業務細節每個企業都會不一樣,所以它們迫切需要區塊鏈是可定制的,fabric就提供了這樣一種解決方案。


    Hyperledger項目下面有五個頂級項目,其中一個是fabric;還有一個Burrow,是正在孵化中,通過類似以太坊這樣的底層協議支持來做智能合約;第三個是Sawtooth,是針對供應鏈、溯源等場景的定制化區塊鏈;第四個是Iroha,是一個最初由三菱、NTT Data和日立共同研發的,提供了很多開發的框架和開發工具的區塊鏈項目;最后一個就是Indy,是用于身份識別的、垂直業務領域上的定制化區塊鏈。


    Hyperledger其實屬于DLT的一種,也就是分布式賬本技術,區塊鏈就是分布式賬本中的其中一種。目前新興的DLT技術,其區別主要在于存儲結構上。比如現在新出現一種DLT的存儲結構DAG(有向無環圖),用圖數據結構來存交易數據,針對每一筆交易都有唯一的標識。另外還有針對DAG的改進算法HashGraph,也一樣是利用圖數據結構來進行存儲級別的優化,以提高網絡吞吐量和整體性能。


    值得注意的是,DLT里沒有代幣的概念,比特幣等網絡中的代幣一是作為價值載體,二是作為激勵機制,而DLT和Hyperledger作為企業級應用,并不需要代幣這樣的載體,僅僅是使用了區塊鏈(或者去中心化賬本技術)的存儲和數據共享(透明)這些屬性。

    版權申明:本內容來自于互聯網,屬第三方匯集推薦平臺。本文的版權歸原作者所有,文章言論不代表鏈門戶的觀點,鏈門戶不承擔任何法律責任。如有侵權請聯系QQ:3341927519進行反饋。
    相關新聞
    發表評論

    請先 注冊/登錄 后參與評論

      回頂部
    • <option id="cacee"><noscript id="cacee"></noscript></option>
    • <table id="cacee"><noscript id="cacee"></noscript></table>
    • <td id="cacee"></td>
    • <option id="cacee"></option>
    • <table id="cacee"></table>
    • <option id="cacee"><option id="cacee"></option></option>
    • <table id="cacee"><source id="cacee"></source></table><td id="cacee"><rt id="cacee"></rt></td>
      <option id="cacee"><option id="cacee"></option></option>
      妖精视频