以太坊(Ethereum)是世界上第一個也是迄今爲止最大的基於區塊鏈技術的智能合約平臺。這份手冊是其第一個生產版本Homestead的技術手冊,主要目的是幫助初中級用戶和開發者瞭解以太坊的方方面面和相關客戶端、開發工具的使用。它是由以太坊社區在Github上共同維護的。Github地址:html
https://github.com/ethereum/homestead-guide.gitgit
我是楊鎮,從今年4月中旬開始,用業餘時間對這份手冊進行了翻譯,期間由於工做緣由時有中斷,到如今才基本完成。程序員
我計劃在最後一個月的校對和語言潤色過程當中,節選部分與技術細節、客戶端或開發工具無關的,關於以太坊所涉及的一些相關概念的介紹章節,做爲獨立的文章在我我的的簡書上進行連載。github
節選的時候,我會在不影響閱讀的前提下,去掉外部網站資源連接或這份在線文檔內的引用。有興趣的讀者能夠訪問我我的的Github取得完整的翻譯稿源代碼自行編譯爲html文檔。Github地址:算法
https://github.com/riversyang/homestead-guide-cn.git數據庫
此外,相信不少朋友都會對今年上半年國內的區塊鏈(虛擬貨幣ICO)熱潮以及9月初央行聯合各金融管理機構聯合發佈的ICO非法的公告形成的影響有些許瞭解,但ICO和以以太坊爲表明的智能合約平臺並無關係,ICO也不是區塊鏈應用的惟一出路。(關於區塊鏈的基本概念及其應用的話題,我也會擇機另行撰文探討。)編程
我我的依然很看好區塊鏈技術在我的業務領域結合智能合約,以及在企業業務領域做爲基礎數據存儲革新的市場前景,由於這表明着「將來」的去中心化自由經濟趨勢和更高的安全性、技術級別的可信性。設計模式
因此我決定開始這個連載,幫助可能的用戶和開發者瞭解以太坊及智能合約的概念。而這也是我在開博隨筆中提到的今年作的另外一件真正有意義的事情。同時我也但願各層次的讀者都能在這個連載中有所收穫。數組
對文章內容或者相關概念有任何疑問、意見或者建議,均可以在簡書中給我留言,我會酌情回覆;固然,也能夠經過Github與我聯繫。期待與你們的更多互動。安全
以太坊(Ethereum)是一個開放的區塊鏈平臺,可讓任何人都可以建立和使用基於區塊鏈技術的去中心化應用程序。與比特幣同樣,沒有人控制或擁有以太坊,它是一個由全世界的許多人所共通建立的開源項目。
不一樣於比特幣的是,以太坊被設計成靈活的、可根據需求修改的模式。在以太坊平臺上建立應用是很容易的,在Homestead這個版本中,全部人使用這些應用程序都已經很安全了。
區塊鏈技術是比特幣的基礎技術,在神祕的做者中本聰(Satoshi Nakamoto)於2008年發表的的白皮書"Bitcoin: A Peer-to-Peer Electronic Cash System"中被首次描述。
儘管在這篇最初的論文中已經說起了區塊鏈技術的泛用性,但區塊鏈做爲通用術語出現,仍是在幾年以後的事。區塊鏈是一個分佈式的計算架構,每一個網絡節點都執行和記錄一樣的交易流水,這些流水數據被組織到所謂區塊之中。
在同一時間,只有一個區塊能夠被添加到區塊鏈中;每一個區塊都包含一個數學證實,來證明它是在它以前的全部區塊以後產生的。用這種方法,使區塊鏈的「分佈式數據庫」在整個網絡中達到共識。用戶與帳本(交易流水)的交互經過強大的加密方式保證其安全性。負責維持和校驗整個網絡狀態的節點,將得到基於編碼到協議中的經濟學獎勵算法計算得出的獎勵。
對於比特幣而言,分佈式數據庫被設想成經過比特幣代幣在帳戶間的轉移來使我的用戶間的去信任金融變爲可能的一種帳戶結算表、帳本和交易流水的集合。
但隨着比特幣吸引了愈來愈多的開發者和技術專家,一些新奇的項目開始用比特幣網絡來作一些代幣價值轉移之外的工做。其中一些項目採用了"alt coins"的模式,經過改進原始的比特幣協議造成本身的加密貨幣,從而將區塊鏈分離以增長新的特性和功能。
在2013年末,以太坊(Ethereum)的發明人Vitalik Buterin正式提出了一個設想,這是一個具備再編程能力的、用來執行任意複雜計算的單一區塊鏈,能夠將不少其餘的項目歸入其內。
在2014年,以太坊(Ethereum)的創始人Vitalik Buterin, Gavin Wood和Jeffrey Wilcke就開始致力於構建下一代的區塊鏈技術的工做,以實現一個通用的、徹底去信任的智能合約平臺(smart contract platform)。
以太坊是一個可編程的區塊鏈。以太坊容許用戶根據本身的設想建立任意複雜的操做,而不是隻給用戶一些預設好的操做(例如比特幣的交易操做)。用這種方法,它成爲了一個支撐許多不一樣類型的去中心化區塊鏈應用的平臺,包含但不只限於加密貨幣。
狹義上說,以太坊是定義了去中心化應用平臺的一套協議。其核心就是能夠運行任意的複雜計算代碼的以太坊虛擬機(Ethereum Virtual Machine,即EVM,後續連載中會有更詳盡的介紹,譯者注)。
用計算機科學術語來說,以太坊是「圖靈完備」的。開發者可使用友好的編程語言在EVM上建立應用程序,好比使用JavaScript或Python。
與其餘任何區塊鏈同樣,以太坊也包含一個P2P(peer-to-peer)網絡協議。以太坊區塊鏈數據庫,由衆多的鏈接到此網絡的節點維護和更新。每一個節點都會運行EVM並執行相同的操做序列。所以,以太坊有時也被形象的描述爲「全球計算機」(「world computer」)。
這種跨越整個以太坊網絡的超大規模並行計算,並不會使計算更加高效。事實上,這樣的過程,使在以太坊上進行的普通的計算遠比使用傳統的「計算機」來的更慢、更昂貴。
可是,因爲每一個以太坊節點都會運行EVM來在區塊鏈上達成共識,這種去中心化的共識,也給了以太坊極致的容錯性(fault tolerance)、零宕機時間(zero downtime)、使存儲在區塊鏈上的數據永遠沒法更改(forever unchangeable)和抗審查(censorship-resistant,即不怕審查,由於數據一直是真實的,沒法篡改的,譯者注)。
以太坊平臺自己是無特性(featureless)或價值未知(value-agnostic)的。與編程語言同樣,是企業家和開發者決定它應該用來作什麼。然而根據以太坊自己的能力,某些特定的應用顯然要比其餘類型更能受益。具體來說,以太坊 適合於那些旨在解決點到點之間直接交互,或者跨網絡的團體協做問題的應用程序。
例如特定的點到點(peer-to-peer)交易市場應用,或者自動化的複雜金融合約應用等等。 比特幣,容許我的在不引入任何中介,像金融機構、銀行或政府的狀況下進行貨幣交易。而以太坊的影響會更加深遠。
從理論上講,任意複雜度的金融交互或交易(financial interactions or exchanges)均可以使用以太坊上的代碼來自動化的、可靠的實現。而除金融應用之外,任何注重信任、安全、持久性的場合,好比資產註冊、投票、管轄和物聯網,均可以大範圍的嵌入以太坊平臺。
以太坊中包含了不少比特幣用戶很熟悉的特性和技術,同時它也引入了不少的修改和創新。
與比特幣區塊鏈中單純的交易流水不一樣,以太坊區塊鏈中的基礎單元是帳戶(account,在後續連載中會有更詳盡的介紹,譯者注)。以太坊區塊鏈跟蹤每一個帳戶的狀態;以太坊區塊鏈上的全部狀態轉換,都是帳戶間的價值或者信息的轉移。
以太坊中的帳戶有兩種類型:
由私鑰控制的外部帳戶(Externally Owned Account,即EOA)
由自身的合約代碼控制的合約帳戶,這種帳戶只能由EOA「激活」(Activate)
對大多數用戶來說,它們最基礎的區別就是人控制EOA,由於人能經過私鑰控制EOA上的行爲;而合約帳戶則由它們內部的代碼來管理。對於合約帳戶,咱們也能夠說他們是有人「控制」的,由於他們 被編制爲由一個有特定地址的EOA所控制,而這個EOA則由掌握其私鑰的「人」所控制。
當一個交易發送到合約帳戶上時,合約帳戶中的特定代碼會被觸發並執行,這些代碼便是一般意義上的「智能合約」。用戶能夠在區塊鏈上發佈代碼來建立新的合約。
僅當合約帳戶接到一個EOA的指示的時候,它纔會去執行一個操做。因此合約帳戶不可能去作一些自發的操做,好比生成隨機數或調用API,除非被EOA指定去作。這是由於以太坊中的節點須要一個嚴格肯定的執行確認,來認證外來的計算要求。
與比特幣同樣,用戶爲了完成一個交易,須要向網絡支付小額的交易費。這個機制是用來保護以太坊網絡不被一些無價值或惡意的計算任務所影響,好比DDoS攻擊或者無限循環。交易的發送者必須爲他們所激活的每一步「程序」支付相應的費用,包括計算和存儲。這些費用是用必定量的以太坊原生代幣——以太幣來體現的。
這些交易費用,是由驗證整個網絡的節點們所收取的。這些以太坊網絡中接受、傳播、驗證和執行交易的節點,便是所謂的「礦工」。包含了以太坊區塊鏈中帳戶「狀態」變更的全部交易信息,由礦工們歸集到「區塊」中,而後開始互相競爭,以使 他們本身產生的區塊成爲區塊鏈中的下一個區塊。
礦工每成功挖到一個礦(即把本身生成的區塊添加到區塊鏈上,譯者注),都將得到獎勵。這就是對那些爲以太坊網絡貢獻硬件和算力的人的經濟上的激勵。
與比特幣網絡同樣,礦工們想要成功「挖到」一個區塊也須要解決一個複雜的數學問題。這就是被熟知的「工做量證實」("Proof of Work")。任何一個經過算法解決問題所消耗的資源大於驗證結果所消耗的資源的計算問題,都是工做量證實的良好選擇。
爲了弱化比特幣網絡中使用特定硬件(好比 ASICs,一種專門用於計算的集成電路硬件,譯者注)所帶來的中心化趨勢,以太坊選擇了一個強內存需求(memory-hard)的計算問題。
若是解決一個問題就像需求CPU同樣需求內存,那能夠支撐的硬件會更趨近於一般的計算機。這使以太坊的工做量證實「抗ASIC」;而且與比特幣的可能受制於特定硬件的挖礦過程相比,這種工做量證實更加有利於去中心化分佈的安全性(即在必定程度上避免因爲過多的區塊都由一小部分計算能力很是強的節點所產生而致使的中心化趨勢,譯者注)。
待續。
結尾,或許能夠加一個不太硬的廣告。
通過內測以及第一期公測,一塊鏈習和楊鎮老師一直在收集課程反饋建議以及調整課程內容。之因此這樣費勁心思,是由於咱們想要的就是必須保證精心打磨課程內容,努力作到「惟一精品」。
所以,咱們在第二期,從新更新錄製了8節所有的課程內容!😄
而且根據內測、公測的反饋,咱們在課程大綱上作了如下的調整:
不少人或許不知道,雖然楊鎮老師很早就知道了比特幣,但他我的是 2016 年末纔開始學習和研究區塊鏈技術的。通過了一個月左右的對 fabric 的從入門到放棄後,他把精力集中到了以太坊上。
從 2017 年 3 月到 10 月的大概 7 個月左右的時間裏,他用業餘時間翻譯了以太坊官網的 Homestead 文檔,沒有用任何機器翻譯軟件,徹底是本身讀原文來譯爲中文,雖然當時已經有其餘人作了中文版,但他知道作這個事的目的仍是學習、是積累,這也就是他的風格。
到 2017 年末的時候,楊鎮老師基本上已經知道了以太坊是什麼,它能幹什麼以及它正在幹什麼。然後就發現了目前國內文章質量最高的中文以太坊社區 Ethfans,當時的想法仍是去結合本身對軟件技術的理解和積累去作一些高質量的翻譯、提供一些高質量的內容。
在今年 3 月份的時候,楊鎮老師很幸運參與了 HiBlock 社區組織的 Solidity 官方文檔中譯項目,後來也成爲了管理員,對中譯版作了不少的校正工做;
同時,他開始學習以太坊黃皮書,2017 年下半年曾經看過黃皮書,但當時看不懂,半年以後再來看,感受就簡單了不少。
同時也更深地理解了黃皮書的價值和它開創性的貢獻,尤爲是在借鑑了其餘不少所謂「智能合約平臺」的設計以後。
從今年4月下旬開始他就對黃皮書的中文版(最初由猿哥和高天露中譯)的正文全文進行了獨立的校正和增補更新(結合英文版拜占庭版本的更新),到 5 月初最終完成。
至此,結合 Solidity 文檔中的相關細節,他終於以爲本身真正搞懂了以太坊、搞懂了智能合約。不過,直到今年夏天依然沒有看到市面上有其餘人出這樣一門課程,不管線上仍是線下。
他認爲很是奇怪:爲何智能合約開發的必修基礎課沒有人在講呢?爲何這麼有價值的、水平這麼高的技術文檔沒有人在講呢?那些本身看看社區文檔就能搞定的東西反而那麼多人在講呢?
因此,他以爲應該作一門真正有質量的課,給那些和他同樣關注細節、但願紮紮實實打好基礎、討厭低質量的快餐式學習的同行打造一個能真正幫助他們提升對智能合約的理解、幫助他們儘快從入門到精通的智能合約開發進階課程。
Solidity 語言基礎
這門課程將首先將介紹 Solidity 語言基礎(Solidity 做爲智能合約開發語言的一些特殊之處) 並結合數個合約實例帶你走進智能合約的世界。
Solidity 是一種結合了 C++、Python 和 Javascript 語言創造出來的爲智能合約開發而定製的語言,雖然它在設計時沒有考慮形式化驗證(智能合約的運行結果是依賴於其自己的合約「狀態」數據和區塊鏈環境數據的,因此最初沒有考慮形式化驗證大概也是能夠理解的),它的數據類型的表現力有限(好比不支持真正的元組類型、不支持多維動態數據的序列化等等)。
但它也確實在事實上簡化了智能合約的開發,是一種上手很容易、對初學者「很友好的」開發語言,它的技術價值是不能否認的。
不過,這種看起來「很簡單的」語言,其實並不簡單,由於有太多不那麼直觀的因素會影響 Solidity 程序的運行;而大部分開發者也許並不那麼理解智能合約的運行環境——以太坊虛擬機(EVM)的各類各樣的技術細節,各類各樣的大坑小坑。
好比 private 函數和 public 函數在調用時到底有什麼不一樣,僅僅是可見性麼?好比數據在內存和存儲(storage)中的結構有什麼區別,爲何我能夠對存儲中的動態數組使用 push 和 pop,而對內存中的就不行?
好比 fallback 函數是如何運做的,它真的不能接收參數也不能有返回值麼?好比 transfer、send 和帶 value 的 call 有什麼區別?又好比 EVM 中複雜的費用設計(尤爲是存儲的使用費)和 gas 返還機制是如何影響合約的 gas 消耗(也就是運行費用)的?
Openzeppelin 源代碼分析
相信已經有愈來愈多的開發者知道了 openzeppelin-solidity 這個項目,在以太坊生態中,這絕對是個偉大的項目。由於它提供了衆多通過社區反覆審計、優化的,可複用的基礎合約模版。
這也是很是很是重要的所謂「最佳實踐」,由於楊鎮老師從剛剛入行時就很是重視可複用的代碼和設計模式。「不要重複造輪子」!尤爲是那些已經被證實很好用的、很安全的「輪子」。
在這個課程的第二部分,就將爲你們逐一解釋這個項目中的全部合約模版的源代碼。學習這些優秀的、通過反覆審計的代碼,對開發者而言就是一個很大的提升,讀懂這裏邊涉及的諸多經典的設計模式,對開發者提升編碼水平、培養良好的編碼習慣也大有裨益。
雖然在老師看來這個項目裏的大部分合約都不須要特別解釋,但仍是仔細的爲你們整理了一個相對比較優化的學習順序,幫助你們快速瞭解這幾十個基礎合約。
而其中關於權限控制、生命週期、支付、懸賞以及ERC20、Crowdsale、ERC721 等合約模版都是很是有實用價值的可複用代碼。
課程的第四部分將繼續深刻介紹智能合約開發的高級話題。在第七課裏,咱們會講解以太坊虛擬機的費用設計、指令設計,簡單地介紹 Solidity 內聯彙編,並講解合約 gas 優化的基本原則。
無論用什麼高級語言編寫的智能合約程序,最終都是會被編譯爲 EVM 指令的,最終都會表示爲 EVM 字節碼;因此從本質上講,理解 EVM 指令纔是智能合約開發的終極目標,這也須要咱們能真正理解 EVM 的棧(stack)、內存(memory)、存儲(storage)、calldata 和 returndata 的結構。
在這個課程的最後一課中,咱們將講解三個程序實例:一個對基礎排序算法的 gas 優化實例、一個針對合約存儲和 gas 返還機制的代碼優化實例以及一個以合約實現的簡化的以太坊協議模擬器。以此來說解一些 Solidity 智能合約開發中可能會遇到的比較複雜的場景以及相應的處理實例。
除了以上這些基本課程內容之外,咱們還精心設計了幾個須要你們真正動手的編程做業;對於初級合約開發者而言是有必定挑戰的,須要花一些時間和精力才能完成,很是有益於開發經驗的積累、提升對合約編程的理解,同時這些做業自己也有很高的實用價值。
更驚喜的是楊鎮老師也會單獨爲你們批改每次的做業,給予相應的單獨指導。
另外,在時間安排上,以上這些內容會被分攤到四周的時間裏,相對給學習者一個更充足的理解消化時間。
即便如此,考慮到內容自己的難度,這個課程對於學習者來說依然是有很是大的挑戰的。
這是一個精心設計、打磨的包含了很是多技術細節的課程,須要你耐心地學習、理解和積累,是能夠反覆咀嚼消化的,它毫不是那種只須要看一次的實操課或者簡單地對社區文檔的搬運和重複。
從如今開始,報名11月25日開班的以太坊智能合約開發進階課程第二期,不只價格更優惠,並且還有福利相送!具體以下——
1)這門課程將實行「階梯早鳥價格制」,越早報名,優惠越多,課程原價3599元,如今報名只需2899元,優惠價格還有前10個名額,名額滿後,會漲到原價=3599元。
2)這門課程中一個很是大的福利就是——按時完成全部做業,你將得到一半的學費返還!!!
3)那爲了讓各位同窗能對智能合約開發感覺的更深,在第二期的課程裏,咱們特地爲你們準備了一重福利——黑客馬拉松比賽(多是線下喔!),讓你能直接面對面上手實操課程裏所教的所有玩法。
所以,想要報名的同窗,建議點擊下方連接前去搶座,動做請快!晚了,不只價格更高,也會面臨沒有名額的風險。
點擊連接,填表報名👇👇👇
yikuailianxi.mikecrm.com/KxQT6AO
目前第二期的報名通道已經所有開啓,點擊連接便可前去報名。友情提示:優惠名額有限,晚了可能要漲價了,佔座請快。
全部填寫完報名表的同窗,請記得添加微信號:yikuailianxi,獲取錄取信息。
也許部分同窗還想繼續瞭解下這門以太坊智能合約進階開發課程,那我再簡單介紹下吧——
1.課程名稱:《以太坊智能合約進階開發實戰訓練營》
2.課程導師:
楊鎮老師,資深軟件工程師、區塊鏈技術佈道者。擁有17年+的軟件行業從業經驗,2016年開始學習以太坊,獨立中譯了以太坊Homestead官方文檔、對以太坊黃皮書中文版進行了獨立校正和增補更新、獨立中譯了以太坊分片技術說明。
3.課程時間:11月25日正式開班,預計正常學時1個月,每週更新2節視頻內容。
4.人數:第二期限額50人
5.課程適合對象:已經有 Solidity 初級開發經驗但又作得沒那麼好的開發者;當前以及在從事區塊鏈開發相關工做,但願進一步深造和系統學習以太坊開發相關的程序員;考慮到部份內容對程序設計、數據結構和算法有必定的基礎要求,建議有計算機軟件或相關專業學歷的開發者學習。
6.學習形式:
在線錄播課程+全程強化訓練+1對1導師批改做業點評輔助學習+7名助教帶小組學習+微信班級羣交流。
另外,爲了讓你們真正確認課程是否適合本身,咱們的課程支持1天無條件退款!
7.課程價格:3599元,但實行「階梯早鳥價格制」,每一個班期都會從2899元起售,每滿10人即漲300元,到原價3599元封頂。如今報名,僅需2899元,手慢無!
這裏能夠多說兩句。
按咱們內部討論的預估,這個課程的含金量和價值很是高,必定程度上,它可能會比市面上全部的區塊鏈開發課程價值還高還值錢——你去看看各大招聘網站上那些動輒就30K月薪起步的區塊鏈技術開發者職位就知道了。
並且重點是,這個課程目前業內確實是惟一的,別無他選。
因此,公平來看,咱們其實以爲這個課程的價格不該該過低。但另外一方面,考慮到不少人都對這個課程翹首以盼了好久,一塊鏈習也但願價格能夠儘量親民一些。
因此,咱們最後的決定是——按時完成所有做業的同窗返還一半的學費!!
想要報名的同窗,建議趕快點擊連接前去填表報名搶座啦👇👇👇
yikuailianxi.mikecrm.com/KxQT6AO!
「一塊鏈習」技術社區連接全世界最極客的區塊鏈開發者,共同窗習區塊鏈技術知識與開發實戰,爲每一位開發者提供有深度的、持續的價值與幫助。
關注「一塊鏈習」
與全球區塊鏈開發者一塊學習