天天看點

區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)

課程連結:https://www.coursera.org/learn/decentralized-apps-on-blockchain/home/week/1

這是區塊鍊專項課程的第三門課 分布式應用 Decentralized Applications (Dapps)

為自己學習記的筆記,翻譯可能存在問題,望諒解。

Decentralized Applications (Dapps)

Decentralized Applications (Dapps)

區塊鍊伺服器 Blockchain Server

Dapp定義 Dapp Defined

以太坊API Ethereum APIs

區塊鍊伺服器 Blockchain Server

去中心化的應用程式DApps,将區塊鍊的功能和服務開放給全世界,供使用者檢視、互動和享受。

DApp提供對人、應用程式和系統的通路,這些人、應用程式和系統之間不必互相了解,也可以進行點對點的交易。DApp是區塊鍊上的端到端應用程式。

基本概念

區塊鍊伺服器 blockchain server

Dapp架構 DApp architecture

應用程式接口 application programming interfaces(API)

我們将繼續體驗使用Truffle IDE進行實用的端到端增量DApp開發。然後,我們将探索一些針對智能合約的最佳實踐,以改善DApp的基本設計。我們将審查對于将新興技術轉變為成熟的演進技術至關重要的标準。

借助DApp開發流程的這一路線圖,您将準備通過新興的去中心化軟體文化來規劃自己的道路。

DApp或去中心化應用程式依賴于其基礎架構和營運的區塊鍊功能。在最簡單的形式中,DApp具有一個用戶端接口作為前端,而後端則包括一個區塊鍊和一個智能合約。

記住,區塊鍊不在一個集中的地方,而是在對等參與者的計算節點中。

用戶端或前端可以是Web應用程式,HTML和Javascript架構。 指令行界面,CLI,桌面應用程式,移動應用程式,甚至是物聯網,物聯網。了解Web前端不在區塊鍊協定範圍内,并且隻能使用由智能合約編譯過程生成的工件來連結到區塊鍊智能合約。 回想一下,我們在第二步中讨論了Remix IDE生成的這些工件。此外,可以使用非區塊鍊後端建立DApp。星際檔案系統 Interplanetary file system, IPFS,是這種架構的一個例子。

學習目标:

1)能夠讨論Dapp的體系結構。

2)使用Truffle IDE,智能合約,Web用戶端和元掩碼用戶端 meta mask client 設計和開發端到端的去中心化應用程式。

3)探索在dapp環境下設計智能合同的最佳實踐。

4)讨論Dapp模型

5)探索對于Dapp的可預測行為必不可少的新興标準。

區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)

完成本子產品後,您将能夠解釋以太坊區塊鍊伺服器的體系結構,并解釋Dapp的進階體系結構。

Dapp的進階體系結構:

區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)

它有一個可以運作區塊鍊的點對點網絡。 區塊鍊的節點托管EVM,并且智能合約在EVM上運作。 Dapp的使用者界面在此層之上運作,他們使用智能合約作為其邏輯。接下來,我們将深入研究基于區塊鍊的Dapp的架構。

在過去的兩門課程中,我們已經看到了區塊鍊基礎設施的點點滴滴。現在是時候把它們放在一起,對整個結構有一個宏觀的看法。

我們将用術語 “區塊鍊伺服器” blockchain server 來表示區塊鍊提供的基礎設施和功能。

在這裡,您将看到安裝以太坊服務及其公開的應用程式程式設計接口API的指令集。在區塊鍊上啟用節點建立,應用程式開發和交易。此時,請注意指令,您無需記住指令。 隻需嘗試了解将要建構Dapp的基礎上的區塊鍊伺服器的概念。

區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)

術語區塊鍊伺服器還有助于區分區塊鍊,即協定服務的分類賬本 the ledger from the protocol services.。

現在,您已經建立了基礎,讓我們在區塊鍊伺服器上建立節點。

在這裡,我們為區塊鍊伺服器在genesis節點上建立一個節點node 0。區塊鍊伺服器的網絡ID是15,從第三行指令可以看出,它仍然是一個私有的本地鍊。

區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)

您想知道公共網絡的網絡id嗎?

包括 metropolis 在内的以太坊主網絡的網絡ID為1。Ropsten,公共跨用戶端以太坊測試網為3,Rinkeby的網絡ID為4。

甚至還有一個Musicoin,即音樂區塊鍊,其網絡ID為7762959。

區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)

當您部署一個公共區塊鍊時,您應該知道其他公共網絡的網絡id。另外,在私有環境中,如果有其他網絡id,應該知道它們的使用情況。在本例中,我們使用的是geth指令,它由最近安裝的Ethereum伺服器提供。我們使用geth指令通過建立一個新的帳号(外部擁有的帳戶EOA)來安裝節點。

回想一下,我們在前面的課程中讨論過EOAs。然後,我們使用具有規範的自定義創世塊 custom genesis block(該鍊的第一個塊)來初始化節點。最後,我們為與區塊鍊互動的節點指定網絡ID和要購買的端口。在底部,您将看到以太坊節點,該創世紀節點的enode位址或建立的引導節點 bootnode 。然後其他節點使用enode位址連接配接到該引導節點,并建立一個運作區塊鍊的點對點網絡。

區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)

回想一下,點對點網絡是區塊鍊技術中的基本概念之一。我們尚未列出網絡詳細資訊所需的所有指令。 這超出了本課程的範圍,而本課程的重點是Dapp開發。

我們已經完成了一個節點的建立,現在讓我們至少再建立一個 peer 節點。在這裡,我們正在建立節點一,并将其作為對等節點peer node 添加到我們先前建立的引導節點 bootnode 中。建立該節點後,請注意我們正在使用管理API,第四行指令 addpeer指令,以及我們先前建立的引導節點的 enode 位址。引導節點的IP位址和綁定端口303xx,它代表我們建立的原始節點0的端口号。

這就是建立和連接配接對等節點以加入區塊鍊網絡的方式。

區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)

在這裡您可以看到多個 peer 節點1到n。當您想加入區塊鍊網絡ID 15時,請安裝基本的Ethereum伺服器。然後執行前面為單個節點建立所示的指令,并将其作為對等節點添加。是以,我們有一個支援區塊鍊操作的點對點網絡。

區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)

回想一下course one的項目,它使用了相同的技術,但是指令對您是隐藏的。建立區塊鍊網絡還有其他方法,我們隻展示了一種方法。

總結:

我們建立了區塊鍊伺服器作為Dapp基礎的概念。我們已經示範了如何安裝區塊鍊伺服器并建立對等節點網絡。您探索了一個Ethereum區塊鍊伺服器和一個geth節點,這樣您就可以成為一個消息靈通的Dapp開發人員。在将Dapp部署到公共網絡之前,在本地測試網絡上開發和測試Dapp是一種常見的實踐。

閱讀材料

What is the Difference Between a Blockchain and a Database?

DEVCON1: Understanding the Ethereum Blockchain Protocol - Vitalik Buterin

Decentralizing Everything with Ethereum's Vitalik Buterin | Disrupt SF 2017

What is and how to use the Ethereum Name Service (ENS)

Ethereum-ens

測試題

區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)
區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)
區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)

Dapp定義 Dapp Defined

完成本課程後,您将能夠解釋Dapp的體系結構,從更高層次上解釋從Web用戶端到區塊鍊伺服器的通路。

什麼是Dapp?

去中心化應用程式解決了需要區塊鍊服務和區塊鍊基礎設施來實作其目的的問題。通常,一個Dapp有一個web前端,一個區塊鍊後端,以及連接配接兩者的代碼。

區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)

在這樣的架構中,Dapp的前端  front-end 将使用者的任何外部刺激 external stimulus 從使用者引導到區塊鍊基礎架構 infrastructure,并将任何響應傳回給他們。它啟動交易以調用智能合約上的函數。 反過來,在區塊鍊上記錄交易,狀态轉換和收據。 Dapp的前端可以像指令行界面一樣簡單。它也可以是複雜的Web應用程式或易于使用的移動應用程式。 前端開發可能涉及使用HTML,JavaScript和CSS以及其他Web資産或Web應用程式架構(如Express)開發Web用戶端。 在這裡,區塊鍊伺服器是基礎架構上的E節點。 前端是具有嵌入式web3.js腳本的Web用戶端,可通過RPC管道使用JSON進行通信。

區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)

回顧課程二,web3部署腳本是由 Remix 編譯過程生成的重要工件 artifact。

我們将使用一個簡單的Web應用程式作為本課程中開發的Dapps的前端。

如果您在不進行任何開發工作的幫助下以程式設計方式組裝Dapp,則可以将web3部署腳本複制到您的應用中,例如将HTML JavaScript檔案作為腳本。使用腳本中的功能部署智能合約。 然後使用腳本中的功能,ABI和智能合約位址來調用智能合約功能。 目前,如果您是程式員,則可以檢視Remix IDE中生成的web3部署腳本。

區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)

别擔心,我們計劃在本課程第二子產品中使用IDE來簡化Dapp的開發。到目前為止,我們已經介紹了Dapp的基本概念。

Dapp的架構

下面是一個簡單的Dapp架構,其中包含我們之前使用geth指令和Ethereum區塊鍊伺服器和網絡建立的節點。

區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)

使用相同的網絡初始化節點後,即可使用指令行界面發送事務。 另外,您應該能夠從指令行部署智能合約。請注意,這些指令可能具有很長的有效負載,并且參數可能跨越多行。 而且,非程式員或Dapp使用者可能不熟悉指令行界面。 是以,我們将使用一個簡單但直覺的Web界面作為我們計劃開發的區塊鍊Dapp的前端。

下面是Dapp的更新架構。

有多個完整的節點,僅顯示了三個節點:Node1,Node2,NodeN。Geth指令用于使用指令geth--rpc--rpcport 8544公開RPC端口8544。在Web用戶端上,可通過web3.js子產品來簡化包括智能合約部署和調用功能在内的功能。

區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)

總結:我們探讨了以太坊區塊鍊伺服器的安裝,一個節點,以及一個對等節點 peer node 網絡。 我們還研究了Dapp體系結構的兩種替代方法。 一個帶有指令行用戶端,另一個帶有Web用戶端。 在下一課中,我們将探讨一些用于開發Dapp的支援API。

閱讀材料

Decentralized Applications-dApps

The Future will be Decentralized

測試題

區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)

以太坊API Ethereum APIs

什麼是API? API或應用程式程式設計接口是一種友善且标準的方式,用于公開與特定資料集和服務相關的一組功能。is a convenient and standard way to expose a set of functions related to a specific dataset and services.

API還有助于代碼的可重用性。API釋出了一組函數或方法,可通過程式設計使用這些函數或方法來調用操作,通路資料和存儲資料。如果應用程式允許,則可以通過特定的通路方法來控制對API的通路,例如,公共密鑰。

學習目标:

1. 能夠列出有助于Dapp開發的以太坊API,

2. 說明各種API的功能和使用細節。

以太坊區塊鍊之外的兩個著名的API示例是Twitter API,用于通路可被查詢詞過濾的推文,Google Map API,允許應用程式在自己的應用程式中嵌入地圖功能(例如地理位置),進而充分利用和重用Google Map API的功能。

為什麼 API 很重要?區塊鍊伺服器和節點提供了區塊鍊功能和資料結構。應用程式如何調用區塊鍊的函數?如何使用它們完成應用程式的任務?

我們需要一種定義明确的标準方法來完成Dapp的工作。 答案在API中。 在我們的案例中,特定的API使用标準功能公開了區塊鍊伺服器的服務。 當您開發Dapp時,通過調用這些API與區塊鍊伺服器上的geth節點進行互動。 例如,在指令miner.start()中,miner 是API,而start() 是 miner API的函數。

為什麼在Dapp的背景下我将學習API?

區塊鍊技術在軟體和系統開發與管理方面引入了一種全新的文化。 最初,軟體系統是專有産品。 最終,一些人開始開源。 借助區塊鍊技術,開發人員不僅是軟體的貢獻者,而且他們中的許多人都通過站起來的節點,支援挖掘等來幫助運作網絡。更重要的是,開發人員還誓言要改進和更改區塊鍊協定。是以,我們希望您不僅僅是開發人員。 您可以是貢獻者,可以是代碼的送出者,可以幫助治理,并幫助制定協定。這是區塊鍊革命背後的技術文化。 為了使您在這種情況下能被通知開發人員,您需要有關API及其内部工作的基本知識。

以太坊API,以太坊提供什麼API?

API有兩大類。

第一類是管理API,包括 admin,debug,miner,personal 和 txpool。它們支援管理geth節點的方法。

第二類是 web3 API,web3,eth和net。 它們支援 Dapps 的開發方法。

API 的詳細細節:

Admin,通過Admin API,您可以使用功能來與Geth執行個體一起使用,包括網絡對等方 network peer 和 RPC 端點管理。 例如admin.addPeer(),admin.nodeInfo()。 在這種情況下,admin是API,而 addPeer 和 nodeInfo 是 admin API 的函數。 您可以觀察到 admin 支援節點管理功能。

區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)

Debug API,例如Debug.dumpBlock(16)。 這将顯示塊16的塊頭詳細資訊。您可以觀察到,Debug API 使您能夠檢視區塊鍊,對其進行研究并通過檢視該塊來調試任何問題。

區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)

Miner API,Miner API允許您控制節點的挖掘操作并設定各種挖掘特定的設定。 例如,miner.start(),miner.stop()是啟動和停止挖礦的函數。miner.start(6)是将6個并行線程配置設定給挖掘操作。

區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)

Personal API 處理節點内帳戶的建立和管理。 它還在密鑰存儲區中管理私鑰。例如,personal.newAccount()将在一個節點中建立一個新帳戶。

區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)

Txpool API(Txpool 或 transaction pool API)使您可以通路幾種非标準 RPC 方法,以檢查事務池的内容,其中包含所有目前未決的事務以及排隊等待将來處理的事務。 例如,txpool.inspect() 列出了所有待處理的事務,供您細讀和收集以建構事務塊。

區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)

web3 API。 Web3.js 庫(包含在Dapp中)使您可以使用由 web3.js 庫提供的web3 對象及其所有對象。 它還使您可以通過RPC端口與本地節點通信。它還通過 web3.eth 提供對 eth 對象及其功能的通路,并通過 web3.net 提供對 net 對象及其各自功能的通路。您還可以通路web3對象的其他管理API。

Whisper API, web3.ssh 它用于安全的 gossiping,并支援 Whisper 協定。

區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)

Web3是一個JavaScript庫,專門設計用于Web用戶端或以太坊Dapps。 這是一個門戶,通過它可以調用區塊鍊伺服器上以太坊節點的所有基礎操作。 例如,智能合約部署和智能合約功能調用。您将在Dapp前端的開發中使用web3并與區塊鍊進行互動。

現在我們知道了API,這是Dapp的簡單架構。 它包含多個完整節點,其中隻有三個,即節點1、2和N。您還可以看到所有讨論的API。 Geth指令用于公開RPC端口以及API。

區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)

到目前為止,我們讨論了體系結構和 API 詳細資訊。 當使用者發起 Web 請求時(如果它是正常Web應用程式請求),它将被定向到HTTP端點(例如端口8080),并定向到要執行的 Web 伺服器。

對于 Dapp,geth 用戶端必須使用 RPC port 指令公開 RPC 端點。 Web3對象在網頁腳本中執行個體化。 回想一下,web3.js 是一個JavaScript 庫。 在 web3 對象上調用請求。

區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)

請求以 JSON 或 RPC 管道的形式在web用戶端和geth用戶端之間傳輸。使用适當的 API 和智能合約代碼執行請求的函數調用。結果傳回到背景用戶端。

閱讀材料

World's First DAPI: Decentralized Application Programming Interface

Web3 JavaScript app API for 0.2x.x

Ethereum CLI Tools

測試題

區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)
區塊鍊Dapps Coursera(第一周)分布式應用DappsDecentralized Applications (Dapps)

繼續閱讀