摘要:第一節課程概述本課程面向初學者,內容涵蓋以太坊開發相關的基本概念,并將手把手地教大家如何構建一個基于以太坊的完整去中心化應用區塊鏈投票系統。第七節以太坊世界計算機以太坊是一種區塊鏈的實現。交易數據以太坊中每筆交易都存儲在區塊鏈上。
第一節 課程概述
本課程面向初學者,內容涵蓋以太坊開發相關的基本概念,并將手把手地教大家如何構建一個 基于以太坊的完整去中心化應用 —— 區塊鏈投票系統。
通過本課程的學習,你將掌握:
以太坊區塊鏈的基本知識
開發和部署以太坊合約所需的軟件環境
使用高級語言(solidity)編寫以太坊合約
使用NodeJS編譯、部署合約并與之交互
使用Truffle框架開發分布式應用
使用控制臺或網頁與合約進行交互
前序知識要求
為了順利完成本課程,最好對以下技術已經有一些基本了解:
一種面向對象的開發語言,例如:Python,Ruby,Java...
前端開發語言:HTML/CSS/JavaScript
Linxu命令行的使用
數據庫的基本概念
課程的所有代碼均已在Ubuntu(Trusty、Xenial)和 macOS 上測試過。
課程地址:http://xc.hubwiz.com/course/5a952991adb3847553d205d1
第二節 課程簡介
在本課程中,我們將會構建一個去中心化的(Decentralized)投票應用。利用這個投票應用, 用戶可以在不可信(trustless)的分布環境中對特定候選人投票,每次投票都會被記錄在區塊 鏈上:
所謂去中心化應用(DApp:Dcentralized Application),就是一個不存在中心服務器 的應用。在網絡中成百上千的電腦上,都可以運行該應用的副本,這使得它幾乎不可能 出現宕機的情況。
基于區塊鏈的投票是完全去中心化的,因此無須任何中心化機構的存在。
第三節 開發迭代
本課程將涵蓋應用開發的整個過程,我們將通過三次迭代來漸進地引入區塊鏈應用 開發所涉及的相關概念、語言和工具:
Vanilla:在第一個迭代周期,我們不借助任何開發框架,而僅僅使用NodeJS來進行應用開發, 這有助于我們更好地理解區塊鏈應用的核心理念。
Truffle:在第二個迭代周期,我們將使用最流行的去中心化應用開發框架Truffle進行開發。 使用開發框架有助于我們提高開發效率。
Token:在第三個迭代周期,我們將為投票應用引入代幣(Token) —— 現在大家都改口 稱之為通證了 —— 都是ICO惹的禍。代幣是公鏈上不可或缺的激勵機制,也是區塊鏈 應用區別于傳統的中心化應用的另一個顯著特征。
為什么選擇投票應用作為課程項目?
之所以選擇投票作為我們的第一個區塊鏈應用,是因為集體決策 —— 尤其是投票機制 —— 是以太坊的 一個核心的價值主張。
另一個原因在于,投票是很多復雜的去中心化應用的基礎構件,所以我們選擇了投票應用作為學習區塊鏈 應用開發的第一個項目。
課程地址:http://xc.hubwiz.com/course/5a952991adb3847553d205d1
第四節 初識區塊鏈
如果你熟悉關系型數據庫,就應該知道一張數據表里可以包含很多行數據記錄。例如,下面的數據表中 包含了6條交易記錄:
本質上,區塊鏈首先就是一個分布式(Distributed)數據庫,這個數據庫維護了一個不斷增長的記錄列表。 現在,讓我們對數據進行批量(batch)存儲,比如每批 100 行,并將各存儲批次連接起來,是不是就像一條鏈?
在區塊鏈里,多個數據記錄組成的批次就被稱為塊(block),塊里的每一行數據記錄就被稱為交易(transaction):
?
最開始的那個塊,通常被稱為創世塊(genesis block),它不指向任何其他塊。
不可篡改性
區塊鏈的一個顯著特點是,數據一旦寫入鏈中,就不可篡改重寫。
在傳統的關系型數據庫中,你可以很容易地更新一條數據記錄。但是,在區塊鏈中,一旦數據寫入就無法 再更新了 —— 因此,區塊鏈是一直增長的。
那么,區塊鏈是如何實現數據的不可篡改特性?
這首先得益于哈希(Hash)函數 —— 如果你還沒接觸過哈希函數,不妨將它視為一個數字指紋的計算函數: 輸入任意長度的內容,輸出定長的碼流(指紋)。哈希函數的一個重要特性就是,輸入的任何一點微小變化,都會 導致輸出的改變。因此可以將哈希值作為內容的指紋來使用。 你可以點擊這里進一步了解哈希函數。
由于區塊鏈里的每個塊都存儲有前一個塊內容的哈希值,因此如果有任何塊的內容被篡改,被篡改的塊之后 所有塊的哈希值也會隨之改變,這樣我們就很容易檢測出區塊鏈的各塊是否被篡改了。
去中心化的挑戰
一旦完全去中心化,在網絡上就會存在大量的區塊鏈副本(即:全節點),很多事情都會變得比之前中心化 應用環境復雜的多,例如:
如何保證所有副本都已同步到最新狀態?
如何保證所有交易都被廣播到所有運行和維護區塊鏈副本的節點計算機上?
如何防止惡意參與者篡改區塊鏈
......
在接下來的課程中,通過與經典的C/S架構的對比,我們將逐步理解去中心化應用的核心思路, 并掌握如何構建以太坊上的去中心化應用。
第五節 C/S架構以服務器為中心
理解去中心化應用架構的最好方法,就是將它與熟悉的Client/Server架構進行對比。如果你是一個web開發者, 應該對下圖很了解,這是一個典型的Client/Server架構:
?
一個典型web應用的服務端通常由 Java,Ruby,Python 等等語言實現。前端代碼由 HTML/CSS/JavaScript 實現。 然后將整個應用托管在云端,比如 AWS、Google Cloud Platform、Heroku....,或者放在你租用的一個VPS?主機上。
用戶通過客戶端(Client)與 web 應用(Server)進行交互。典型的客戶端包括瀏覽器、命令行工具(curl、wget等)、 或者是API訪問代碼。注意在這種架構中,總是存在一個(或一組)中心化的 web 服務器,所有的客戶端都需要 與這一(組)服務器進行交互。當一個客戶端向服務器發出請求時,服務器處理該請求,與數據庫/緩存進行交互, 讀/寫/更新數據庫,然后向客戶端返回響應。
這是我們熟悉的中心化架構。在下一節,我們將會看到基于區塊鏈的去中心化架構的一些顯著區別。
第六節 去中心化架構——彼此平等的節點
下圖給出了基于以太坊的去中心化應用架構:
?
你應該已經注意到,每個客戶端(瀏覽器)都是與各自的節點應用實例進行交互,而不是向 一個中心化的服務器請求服務。
在一個理想的去中心化環境中,每個想要跟DApp交互的人,都需要在他們的計算機或手機上面運行 一個的完整區塊鏈節點 —— 簡言之,每個人都運行一個全節點。這意味著,在能夠真正使用一個 去中心化應用之前,用戶不得不下載整個區塊鏈。
不過我們并非生活在一個烏托邦里,期待每個用戶都先運行一個全節點,然后再使用你的應用是不現實的。 但是去中心化背后的核心思想,就是不依賴于中心化的服務器。所以,區塊鏈社區已經出現了 一些解決方案,例如提供公共區塊鏈節點的Infura, 以及瀏覽器插件Metamask等。通過這些方案, 你就不需要花費大量的硬盤、內存和時間去下載并運行完整的區塊鏈節點,同時也可以利用去中心化 的優點。我們將會以后的課程中對這些解決方案分別進行評測。
第七節 以太坊——世界計算機
以太坊是一種區塊鏈的實現。在以太坊網絡中,眾多的節點彼此連接,構成了以太坊網絡:
以太坊節點軟件提供兩個核心功能:數據存儲、合約代碼執行。
在每個以太坊全節點中,都保存有完整的區塊鏈數據。以太坊不僅將交易數據保存在鏈上,編譯后 的合約代碼同樣也保存在鏈上。
以太坊全節點中,同時還提供了一個虛擬機來執行合約代碼。
交易數據
以太坊中每筆交易都存儲在區塊鏈上。當你部署合約時,一次部署就是一筆交易。當你為候選者投票時,一次投票 又是另一筆交易。所有的這些交易都是公開的,每個人都可以看到并進行驗證。這個數據永遠也無法篡改。
為了確保網絡中的所有節點都有著同一份數據拷貝,并且沒有向數據庫中寫入任何無效數據,以太坊 目前使用工作量證明?(POW:Proof Of Work)算法來保證網絡安全,即通過礦工挖礦(Mining)來達成共識(Consensus)—— 將數據同步到所有節點。
工作量證明不是達成共識的唯一算法,挖礦也不是區塊鏈的唯一選擇。現在,我們只需要了解,共識是指各節點 的數據實現了一致,POW只是眾多用于建立共識的算法中的一種,這種算法需要通過礦工的挖礦來實現非可信環境下的 可信交易。共識是目的,POW是手段。
合約代碼
以太坊不僅僅在鏈上存儲交易數據,它還可以在鏈上存儲合約代碼。
在數據庫層面,區塊鏈的作用就是存儲交易數據。那么給候選者投票、或者檢索投票結果的邏輯放在哪兒呢? 在以太坊的世界里,你可以使用Solidity語言來編寫業務邏輯/應用代碼(也就是合約:Contract), 然后將合約代碼編譯為以太坊字節碼,并將字節碼部署到區塊鏈上:
編寫合約代碼也可以使用其他的語言,不過?Solidity是到目前為止最流行的選擇。
以太坊虛擬機
以太坊區塊鏈不僅存儲數據和代碼,每個節點中還包含一個虛擬機(EVM:Ethereum Virtual Machine)來執行 合約代碼 —— 聽起來就像計算機操作系統。
事實上,這一點是以太坊區別于比特幣(Bitcoin)的最核心的一點:虛擬機的存在使區塊鏈邁入了2.0 時代,也讓區塊鏈第一次成為應用開發者友好的平臺。
JS開發庫
為了便于構建基于web的DApp,以太坊還提供了一個非常方便的JavaScript庫web3.js,它封裝了以太坊節點的API 協議,從而讓開發者可以輕松地連接到區塊鏈節點而不必編寫繁瑣的RPC協議包。所以,我們可以在常用的JS框架 (比如 reactjs、angularjs 等)中直接引入該庫來構建去中心化應用:
PC端課程地址:
http://xc.hubwiz.com/course/5a952991adb3847553d205d1
如果想加入以太坊技術開發群可以加微信:13910002724,拉你入群。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/108410.html
摘要:第一節課程概述本課程面向初學者,內容涵蓋以太坊開發相關的基本概念,并將手把手地教大家如何構建一個基于以太坊的完整去中心化應用區塊鏈投票系統。第七節以太坊世界計算機以太坊是一種區塊鏈的實現。交易數據以太坊中每筆交易都存儲在區塊鏈上。 第一節 課程概述 本課程面向初學者,內容涵蓋以太坊開發相關的基本概念,并將手把手地教大家如何構建一個 基于以太坊的完整去中心化應用 —— 區塊鏈投票系統。 ...
摘要:以太坊是什么以太坊是一個建立在區塊鏈技術之上,去中心化應用平臺。運行環境以太坊虛擬機是以太坊中智能合約的運行環境。是由以太坊客戶端提供的是典型的開發以太坊時使用的客戶端,基于語言開發。 本文首發于深入淺出區塊鏈社區原文鏈接:以太坊是什么 - 以太坊開發入門指南原文已更新,請讀者前往原文閱讀 很多同學已經躍躍欲試投入到區塊鏈開發隊伍當中來,可是又感覺無從下手,本文將基于以太坊平臺,以通俗...
摘要:加入以太坊生態系統,一起征服世界。數字,字符串等要注意的第二件事是以太坊中的是位。一旦你掌握了這些東西,我個人會認為你是一個有能力的以太坊開發者 我經常構建使用以太坊的Web應用程序,我理所當然地認為每天都使用的是神奇的工具集。我們的生態系統正在迅速發展,我認為很多新人都感到不知所措。以太坊是一項了不起的技術,但它也是新生的,而且根本沒有足夠的時間讓專業知識充分滲透。我希望人們知道以太...
摘要:加入以太坊生態系統,一起征服世界。數字,字符串等要注意的第二件事是以太坊中的是位。一旦你掌握了這些東西,我個人會認為你是一個有能力的以太坊開發者 我經常構建使用以太坊的Web應用程序,我理所當然地認為每天都使用的是神奇的工具集。我們的生態系統正在迅速發展,我認為很多新人都感到不知所措。以太坊是一項了不起的技術,但它也是新生的,而且根本沒有足夠的時間讓專業知識充分滲透。我希望人們知道以太...
摘要:原文發表于以太坊智能合約開發第二篇理解以太坊相關概念很多人都說比特幣是區塊鏈,以太坊是區塊鏈。它是以太坊智能合約的運行環境。是由以太坊節點提供。以太坊社區把基于智能合約的應用稱為去中心化的應用。 原文發表于:以太坊智能合約開發第二篇:理解以太坊相關概念 很多人都說比特幣是區塊鏈1.0,以太坊是區塊鏈2.0。在以太坊平臺上,可以開發各種各樣的去中心化應用,這些應用構成了以太坊的整個生態...
閱讀 4933·2021-11-25 09:43
閱讀 1186·2021-11-24 09:38
閱讀 1892·2021-09-30 09:54
閱讀 2800·2021-09-23 11:21
閱讀 2367·2021-09-10 10:51
閱讀 2368·2021-09-03 10:45
閱讀 1163·2019-08-30 15:52
閱讀 1766·2019-08-30 14:13