国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

以太坊DApp開(kāi)發(fā)入門教程——Node.js和truffle框架打造區(qū)塊鏈投票系統(tǒng)

zebrayoung / 1807人閱讀

摘要:第一節(jié)課程概述本課程面向初學(xué)者,內(nèi)容涵蓋以太坊開(kāi)發(fā)相關(guān)的基本概念,并將手把手地教大家如何構(gòu)建一個(gè)基于以太坊的完整去中心化應(yīng)用區(qū)塊鏈投票系統(tǒng)。第七節(jié)以太坊世界計(jì)算機(jī)以太坊是一種區(qū)塊鏈的實(shí)現(xiàn)。交易數(shù)據(jù)以太坊中每筆交易都存儲(chǔ)在區(qū)塊鏈上。

第一節(jié) 課程概述

本課程面向初學(xué)者,內(nèi)容涵蓋以太坊開(kāi)發(fā)相關(guān)的基本概念,并將手把手地教大家如何構(gòu)建一個(gè) 基于以太坊的完整去中心化應(yīng)用 —— 區(qū)塊鏈投票系統(tǒng)。

通過(guò)本課程的學(xué)習(xí),你將掌握:

以太坊區(qū)塊鏈的基本知識(shí)

開(kāi)發(fā)和部署以太坊合約所需的軟件環(huán)境

使用高級(jí)語(yǔ)言(solidity)編寫(xiě)以太坊合約

使用NodeJS編譯、部署合約并與之交互

使用Truffle框架開(kāi)發(fā)分布式應(yīng)用

使用控制臺(tái)或網(wǎng)頁(yè)與合約進(jìn)行交互

前序知識(shí)要求

為了順利完成本課程,最好對(duì)以下技術(shù)已經(jīng)有一些基本了解:

一種面向?qū)ο蟮拈_(kāi)發(fā)語(yǔ)言,例如:Python,Ruby,Java...

前端開(kāi)發(fā)語(yǔ)言:HTML/CSS/JavaScript

Linxu命令行的使用

數(shù)據(jù)庫(kù)的基本概念

課程的所有代碼均已在Ubuntu(Trusty、Xenial)和 macOS 上測(cè)試過(guò)。

課程地址:http://xc.hubwiz.com/course/5a952991adb3847553d205d1

第二節(jié) 課程簡(jiǎn)介

在本課程中,我們將會(huì)構(gòu)建一個(gè)去中心化的(Decentralized)投票應(yīng)用。利用這個(gè)投票應(yīng)用, 用戶可以在不可信(trustless)的分布環(huán)境中對(duì)特定候選人投票,每次投票都會(huì)被記錄在區(qū)塊 鏈上:

所謂去中心化應(yīng)用(DApp:Dcentralized Application),就是一個(gè)不存在中心服務(wù)器 的應(yīng)用。在網(wǎng)絡(luò)中成百上千的電腦上,都可以運(yùn)行該應(yīng)用的副本,這使得它幾乎不可能 出現(xiàn)宕機(jī)的情況。

基于區(qū)塊鏈的投票是完全去中心化的,因此無(wú)須任何中心化機(jī)構(gòu)的存在。

第三節(jié) 開(kāi)發(fā)迭代

本課程將涵蓋應(yīng)用開(kāi)發(fā)的整個(gè)過(guò)程,我們將通過(guò)三次迭代來(lái)漸進(jìn)地引入?yún)^(qū)塊鏈應(yīng)用 開(kāi)發(fā)所涉及的相關(guān)概念、語(yǔ)言和工具:

Vanilla:在第一個(gè)迭代周期,我們不借助任何開(kāi)發(fā)框架,而僅僅使用NodeJS來(lái)進(jìn)行應(yīng)用開(kāi)發(fā), 這有助于我們更好地理解區(qū)塊鏈應(yīng)用的核心理念。

Truffle:在第二個(gè)迭代周期,我們將使用最流行的去中心化應(yīng)用開(kāi)發(fā)框架Truffle進(jìn)行開(kāi)發(fā)。 使用開(kāi)發(fā)框架有助于我們提高開(kāi)發(fā)效率。

Token:在第三個(gè)迭代周期,我們將為投票應(yīng)用引入代幣(Token) —— 現(xiàn)在大家都改口 稱之為通證了 —— 都是ICO惹的禍。代幣是公鏈上不可或缺的激勵(lì)機(jī)制,也是區(qū)塊鏈 應(yīng)用區(qū)別于傳統(tǒng)的中心化應(yīng)用的另一個(gè)顯著特征。

為什么選擇投票應(yīng)用作為課程項(xiàng)目?

之所以選擇投票作為我們的第一個(gè)區(qū)塊鏈應(yīng)用,是因?yàn)榧w決策 —— 尤其是投票機(jī)制 —— 是以太坊的 一個(gè)核心的價(jià)值主張。

另一個(gè)原因在于,投票是很多復(fù)雜的去中心化應(yīng)用的基礎(chǔ)構(gòu)件,所以我們選擇了投票應(yīng)用作為學(xué)習(xí)區(qū)塊鏈 應(yīng)用開(kāi)發(fā)的第一個(gè)項(xiàng)目。

課程地址:http://xc.hubwiz.com/course/5a952991adb3847553d205d1

第四節(jié) 初識(shí)區(qū)塊鏈

如果你熟悉關(guān)系型數(shù)據(jù)庫(kù),就應(yīng)該知道一張數(shù)據(jù)表里可以包含很多行數(shù)據(jù)記錄。例如,下面的數(shù)據(jù)表中 包含了6條交易記錄:

本質(zhì)上,區(qū)塊鏈?zhǔn)紫染褪且粋€(gè)分布式(Distributed)數(shù)據(jù)庫(kù),這個(gè)數(shù)據(jù)庫(kù)維護(hù)了一個(gè)不斷增長(zhǎng)的記錄列表。 現(xiàn)在,讓我們對(duì)數(shù)據(jù)進(jìn)行批量(batch)存儲(chǔ),比如每批 100 行,并將各存儲(chǔ)批次連接起來(lái),是不是就像一條鏈?

在區(qū)塊鏈里,多個(gè)數(shù)據(jù)記錄組成的批次就被稱為塊(block),塊里的每一行數(shù)據(jù)記錄就被稱為交易(transaction):

?

最開(kāi)始的那個(gè)塊,通常被稱為創(chuàng)世塊(genesis block),它不指向任何其他塊。

不可篡改性

區(qū)塊鏈的一個(gè)顯著特點(diǎn)是,數(shù)據(jù)一旦寫(xiě)入鏈中,就不可篡改重寫(xiě)。

在傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)中,你可以很容易地更新一條數(shù)據(jù)記錄。但是,在區(qū)塊鏈中,一旦數(shù)據(jù)寫(xiě)入就無(wú)法 再更新了 —— 因此,區(qū)塊鏈?zhǔn)且恢痹鲩L(zhǎng)的。

那么,區(qū)塊鏈?zhǔn)侨绾螌?shí)現(xiàn)數(shù)據(jù)的不可篡改特性?

這首先得益于哈希(Hash)函數(shù) —— 如果你還沒(méi)接觸過(guò)哈希函數(shù),不妨將它視為一個(gè)數(shù)字指紋的計(jì)算函數(shù): 輸入任意長(zhǎng)度的內(nèi)容,輸出定長(zhǎng)的碼流(指紋)。哈希函數(shù)的一個(gè)重要特性就是,輸入的任何一點(diǎn)微小變化,都會(huì) 導(dǎo)致輸出的改變。因此可以將哈希值作為內(nèi)容的指紋來(lái)使用。 你可以點(diǎn)擊這里進(jìn)一步了解哈希函數(shù)。

由于區(qū)塊鏈里的每個(gè)塊都存儲(chǔ)有前一個(gè)塊內(nèi)容的哈希值,因此如果有任何塊的內(nèi)容被篡改,被篡改的塊之后 所有塊的哈希值也會(huì)隨之改變,這樣我們就很容易檢測(cè)出區(qū)塊鏈的各塊是否被篡改了。

去中心化的挑戰(zhàn)

一旦完全去中心化,在網(wǎng)絡(luò)上就會(huì)存在大量的區(qū)塊鏈副本(即:全節(jié)點(diǎn)),很多事情都會(huì)變得比之前中心化 應(yīng)用環(huán)境復(fù)雜的多,例如:

如何保證所有副本都已同步到最新?tīng)顟B(tài)?

如何保證所有交易都被廣播到所有運(yùn)行和維護(hù)區(qū)塊鏈副本的節(jié)點(diǎn)計(jì)算機(jī)上?

如何防止惡意參與者篡改區(qū)塊鏈

......

在接下來(lái)的課程中,通過(guò)與經(jīng)典的C/S架構(gòu)的對(duì)比,我們將逐步理解去中心化應(yīng)用的核心思路, 并掌握如何構(gòu)建以太坊上的去中心化應(yīng)用。

第五節(jié) C/S架構(gòu)以服務(wù)器為中心

理解去中心化應(yīng)用架構(gòu)的最好方法,就是將它與熟悉的Client/Server架構(gòu)進(jìn)行對(duì)比。如果你是一個(gè)web開(kāi)發(fā)者, 應(yīng)該對(duì)下圖很了解,這是一個(gè)典型的Client/Server架構(gòu):

?

一個(gè)典型web應(yīng)用的服務(wù)端通常由 Java,Ruby,Python 等等語(yǔ)言實(shí)現(xiàn)。前端代碼由 HTML/CSS/JavaScript 實(shí)現(xiàn)。 然后將整個(gè)應(yīng)用托管在云端,比如 AWS、Google Cloud Platform、Heroku....,或者放在你租用的一個(gè)VPS?主機(jī)上。

用戶通過(guò)客戶端(Client)與 web 應(yīng)用(Server)進(jìn)行交互。典型的客戶端包括瀏覽器、命令行工具(curlwget等)、 或者是API訪問(wèn)代碼。注意在這種架構(gòu)中,總是存在一個(gè)(或一組)中心化的 web 服務(wù)器,所有的客戶端都需要 與這一(組)服務(wù)器進(jìn)行交互。當(dāng)一個(gè)客戶端向服務(wù)器發(fā)出請(qǐng)求時(shí),服務(wù)器處理該請(qǐng)求,與數(shù)據(jù)庫(kù)/緩存進(jìn)行交互, 讀/寫(xiě)/更新數(shù)據(jù)庫(kù),然后向客戶端返回響應(yīng)。

這是我們熟悉的中心化架構(gòu)。在下一節(jié),我們將會(huì)看到基于區(qū)塊鏈的去中心化架構(gòu)的一些顯著區(qū)別。

第六節(jié) 去中心化架構(gòu)——彼此平等的節(jié)點(diǎn)

下圖給出了基于以太坊的去中心化應(yīng)用架構(gòu):

?

你應(yīng)該已經(jīng)注意到,每個(gè)客戶端(瀏覽器)都是與各自的節(jié)點(diǎn)應(yīng)用實(shí)例進(jìn)行交互,而不是向 一個(gè)中心化的服務(wù)器請(qǐng)求服務(wù)。

在一個(gè)理想的去中心化環(huán)境中,每個(gè)想要跟DApp交互的人,都需要在他們的計(jì)算機(jī)或手機(jī)上面運(yùn)行 一個(gè)的完整區(qū)塊鏈節(jié)點(diǎn) —— 簡(jiǎn)言之,每個(gè)人都運(yùn)行一個(gè)全節(jié)點(diǎn)。這意味著,在能夠真正使用一個(gè) 去中心化應(yīng)用之前,用戶不得不下載整個(gè)區(qū)塊鏈。

不過(guò)我們并非生活在一個(gè)烏托邦里,期待每個(gè)用戶都先運(yùn)行一個(gè)全節(jié)點(diǎn),然后再使用你的應(yīng)用是不現(xiàn)實(shí)的。 但是去中心化背后的核心思想,就是不依賴于中心化的服務(wù)器。所以,區(qū)塊鏈社區(qū)已經(jīng)出現(xiàn)了 一些解決方案,例如提供公共區(qū)塊鏈節(jié)點(diǎn)的Infura, 以及瀏覽器插件Metamask等。通過(guò)這些方案, 你就不需要花費(fèi)大量的硬盤(pán)、內(nèi)存和時(shí)間去下載并運(yùn)行完整的區(qū)塊鏈節(jié)點(diǎn),同時(shí)也可以利用去中心化 的優(yōu)點(diǎn)。我們將會(huì)以后的課程中對(duì)這些解決方案分別進(jìn)行評(píng)測(cè)。

第七節(jié) 以太坊——世界計(jì)算機(jī)

以太坊是一種區(qū)塊鏈的實(shí)現(xiàn)。在以太坊網(wǎng)絡(luò)中,眾多的節(jié)點(diǎn)彼此連接,構(gòu)成了以太坊網(wǎng)絡(luò):

以太坊節(jié)點(diǎn)軟件提供兩個(gè)核心功能:數(shù)據(jù)存儲(chǔ)、合約代碼執(zhí)行。

在每個(gè)以太坊全節(jié)點(diǎn)中,都保存有完整的區(qū)塊鏈數(shù)據(jù)。以太坊不僅將交易數(shù)據(jù)保存在鏈上,編譯后 的合約代碼同樣也保存在鏈上。

以太坊全節(jié)點(diǎn)中,同時(shí)還提供了一個(gè)虛擬機(jī)來(lái)執(zhí)行合約代碼。

交易數(shù)據(jù)

以太坊中每筆交易都存儲(chǔ)在區(qū)塊鏈上。當(dāng)你部署合約時(shí),一次部署就是一筆交易。當(dāng)你為候選者投票時(shí),一次投票 又是另一筆交易。所有的這些交易都是公開(kāi)的,每個(gè)人都可以看到并進(jìn)行驗(yàn)證。這個(gè)數(shù)據(jù)永遠(yuǎn)也無(wú)法篡改。

為了確保網(wǎng)絡(luò)中的所有節(jié)點(diǎn)都有著同一份數(shù)據(jù)拷貝,并且沒(méi)有向數(shù)據(jù)庫(kù)中寫(xiě)入任何無(wú)效數(shù)據(jù),以太坊 目前使用工作量證明?(POW:Proof Of Work)算法來(lái)保證網(wǎng)絡(luò)安全,即通過(guò)礦工挖礦(Mining)來(lái)達(dá)成共識(shí)(Consensus)—— 將數(shù)據(jù)同步到所有節(jié)點(diǎn)。

工作量證明不是達(dá)成共識(shí)的唯一算法,挖礦也不是區(qū)塊鏈的唯一選擇。現(xiàn)在,我們只需要了解,共識(shí)是指各節(jié)點(diǎn) 的數(shù)據(jù)實(shí)現(xiàn)了一致,POW只是眾多用于建立共識(shí)的算法中的一種,這種算法需要通過(guò)礦工的挖礦來(lái)實(shí)現(xiàn)非可信環(huán)境下的 可信交易。共識(shí)是目的,POW是手段。

合約代碼

以太坊不僅僅在鏈上存儲(chǔ)交易數(shù)據(jù),它還可以在鏈上存儲(chǔ)合約代碼。

在數(shù)據(jù)庫(kù)層面,區(qū)塊鏈的作用就是存儲(chǔ)交易數(shù)據(jù)。那么給候選者投票、或者檢索投票結(jié)果的邏輯放在哪兒呢? 在以太坊的世界里,你可以使用Solidity語(yǔ)言來(lái)編寫(xiě)業(yè)務(wù)邏輯/應(yīng)用代碼(也就是合約:Contract), 然后將合約代碼編譯為以太坊字節(jié)碼,并將字節(jié)碼部署到區(qū)塊鏈上:

編寫(xiě)合約代碼也可以使用其他的語(yǔ)言,不過(guò)?Solidity是到目前為止最流行的選擇。

以太坊虛擬機(jī)

以太坊區(qū)塊鏈不僅存儲(chǔ)數(shù)據(jù)和代碼,每個(gè)節(jié)點(diǎn)中還包含一個(gè)虛擬機(jī)(EVM:Ethereum Virtual Machine)來(lái)執(zhí)行 合約代碼 —— 聽(tīng)起來(lái)就像計(jì)算機(jī)操作系統(tǒng)。

事實(shí)上,這一點(diǎn)是以太坊區(qū)別于比特幣(Bitcoin)的最核心的一點(diǎn):虛擬機(jī)的存在使區(qū)塊鏈邁入了2.0 時(shí)代,也讓區(qū)塊鏈第一次成為應(yīng)用開(kāi)發(fā)者友好的平臺(tái)。

JS開(kāi)發(fā)庫(kù)

為了便于構(gòu)建基于web的DApp,以太坊還提供了一個(gè)非常方便的JavaScript庫(kù)web3.js,它封裝了以太坊節(jié)點(diǎn)的API 協(xié)議,從而讓開(kāi)發(fā)者可以輕松地連接到區(qū)塊鏈節(jié)點(diǎn)而不必編寫(xiě)繁瑣的RPC協(xié)議包。所以,我們可以在常用的JS框架 (比如 reactjs、angularjs 等)中直接引入該庫(kù)來(lái)構(gòu)建去中心化應(yīng)用:

PC端課程地址:

http://xc.hubwiz.com/course/5a952991adb3847553d205d1

如果想加入以太坊技術(shù)開(kāi)發(fā)群可以加微信:13910002724,拉你入群。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/108410.html

相關(guān)文章

  • 以太DApp開(kāi)發(fā)入門教程——Node.jstruffle框架打造區(qū)塊投票系統(tǒng)

    摘要:第一節(jié)課程概述本課程面向初學(xué)者,內(nèi)容涵蓋以太坊開(kāi)發(fā)相關(guān)的基本概念,并將手把手地教大家如何構(gòu)建一個(gè)基于以太坊的完整去中心化應(yīng)用區(qū)塊鏈投票系統(tǒng)。第七節(jié)以太坊世界計(jì)算機(jī)以太坊是一種區(qū)塊鏈的實(shí)現(xiàn)。交易數(shù)據(jù)以太坊中每筆交易都存儲(chǔ)在區(qū)塊鏈上。 第一節(jié) 課程概述 本課程面向初學(xué)者,內(nèi)容涵蓋以太坊開(kāi)發(fā)相關(guān)的基本概念,并將手把手地教大家如何構(gòu)建一個(gè) 基于以太坊的完整去中心化應(yīng)用 —— 區(qū)塊鏈投票系統(tǒng)。 ...

    MASAILA 評(píng)論0 收藏0
  • 以太是什么 - 以太開(kāi)發(fā)入門指南

    摘要:以太坊是什么以太坊是一個(gè)建立在區(qū)塊鏈技術(shù)之上,去中心化應(yīng)用平臺(tái)。運(yùn)行環(huán)境以太坊虛擬機(jī)是以太坊中智能合約的運(yùn)行環(huán)境。是由以太坊客戶端提供的是典型的開(kāi)發(fā)以太坊時(shí)使用的客戶端,基于語(yǔ)言開(kāi)發(fā)。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:以太坊是什么 - 以太坊開(kāi)發(fā)入門指南原文已更新,請(qǐng)讀者前往原文閱讀 很多同學(xué)已經(jīng)躍躍欲試投入到區(qū)塊鏈開(kāi)發(fā)隊(duì)伍當(dāng)中來(lái),可是又感覺(jué)無(wú)從下手,本文將基于以太坊平臺(tái),以通俗...

    tomlingtm 評(píng)論0 收藏0
  • Web程序員如何入門以太開(kāi)發(fā)

    摘要:加入以太坊生態(tài)系統(tǒng),一起征服世界。數(shù)字,字符串等要注意的第二件事是以太坊中的是位。一旦你掌握了這些東西,我個(gè)人會(huì)認(rèn)為你是一個(gè)有能力的以太坊開(kāi)發(fā)者 我經(jīng)常構(gòu)建使用以太坊的Web應(yīng)用程序,我理所當(dāng)然地認(rèn)為每天都使用的是神奇的工具集。我們的生態(tài)系統(tǒng)正在迅速發(fā)展,我認(rèn)為很多新人都感到不知所措。以太坊是一項(xiàng)了不起的技術(shù),但它也是新生的,而且根本沒(méi)有足夠的時(shí)間讓專業(yè)知識(shí)充分滲透。我希望人們知道以太...

    SwordFly 評(píng)論0 收藏0
  • Web程序員如何入門以太開(kāi)發(fā)

    摘要:加入以太坊生態(tài)系統(tǒng),一起征服世界。數(shù)字,字符串等要注意的第二件事是以太坊中的是位。一旦你掌握了這些東西,我個(gè)人會(huì)認(rèn)為你是一個(gè)有能力的以太坊開(kāi)發(fā)者 我經(jīng)常構(gòu)建使用以太坊的Web應(yīng)用程序,我理所當(dāng)然地認(rèn)為每天都使用的是神奇的工具集。我們的生態(tài)系統(tǒng)正在迅速發(fā)展,我認(rèn)為很多新人都感到不知所措。以太坊是一項(xiàng)了不起的技術(shù),但它也是新生的,而且根本沒(méi)有足夠的時(shí)間讓專業(yè)知識(shí)充分滲透。我希望人們知道以太...

    kidsamong 評(píng)論0 收藏0
  • 以太智能合約開(kāi)發(fā)第二篇:理解以太相關(guān)概念

    摘要:原文發(fā)表于以太坊智能合約開(kāi)發(fā)第二篇理解以太坊相關(guān)概念很多人都說(shuō)比特幣是區(qū)塊鏈,以太坊是區(qū)塊鏈。它是以太坊智能合約的運(yùn)行環(huán)境。是由以太坊節(jié)點(diǎn)提供。以太坊社區(qū)把基于智能合約的應(yīng)用稱為去中心化的應(yīng)用。 原文發(fā)表于:以太坊智能合約開(kāi)發(fā)第二篇:理解以太坊相關(guān)概念 很多人都說(shuō)比特幣是區(qū)塊鏈1.0,以太坊是區(qū)塊鏈2.0。在以太坊平臺(tái)上,可以開(kāi)發(fā)各種各樣的去中心化應(yīng)用,這些應(yīng)用構(gòu)成了以太坊的整個(gè)生態(tài)...

    yibinnn 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<