区块链Dapps Coursera(第一周)分布式应用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(第一周)分布式应用Dapps_第1张图片

完成本模块后,您将能够解释以太坊区块链服务器的体系结构,并解释Dapp的高级体系结构。

Dapp的高级体系结构:

区块链Dapps Coursera(第一周)分布式应用Dapps_第2张图片

它有一个可以运行区块链的点对点网络。 区块链的节点托管EVM,并且智能合约在EVM上运行。 Dapp的用户界面在此层之上运行,他们使用智能合约作为其逻辑。接下来,我们将深入研究基于区块链的Dapp的架构。

在过去的两门课程中,我们已经看到了区块链基础设施的点点滴滴。现在是时候把它们放在一起,对整个结构有一个宏观的看法。

我们将用术语 “区块链服务器” blockchain server 来表示区块链提供的基础设施和功能。

在这里,您将看到安装以太坊服务及其公开的应用程序编程接口API的命令集。在区块链上启用节点创建,应用程序开发和交易。此时,请注意命令,您无需记住命令。 只需尝试了解将要构建Dapp的基础上的区块链服务器的概念。
区块链Dapps Coursera(第一周)分布式应用Dapps_第3张图片

术语区块链服务器还有助于区分区块链,即协议服务的分类账本 the ledger from the protocol services.。

现在,您已经建立了基础,让我们在区块链服务器上创建节点

在这里,我们为区块链服务器在genesis节点上创建一个节点node 0。区块链服务器的网络ID是15,从第三行命令可以看出,它仍然是一个私有的本地链。
区块链Dapps Coursera(第一周)分布式应用Dapps_第4张图片

您想知道公共网络的网络id吗?
包括 metropolis 在内的以太坊主网络的网络ID为1。Ropsten,公共跨客户端以太坊测试网为3,Rinkeby的网络ID为4。
甚至还有一个Musicoin,即音乐区块链,其网络ID为7762959。
区块链Dapps Coursera(第一周)分布式应用Dapps_第5张图片

当您部署一个公共区块链时,您应该知道其他公共网络的网络id。另外,在私有环境中,如果有其他网络id,应该知道它们的使用情况。在本例中,我们使用的是geth命令,它由最近安装的Ethereum服务器提供。我们使用geth命令通过创建一个新的帐号(外部拥有的帐户EOA)来安装节点。

回想一下,我们在前面的课程中讨论过EOAs。然后,我们使用具有规范的自定义创世块 custom genesis block(该链的第一个块)来初始化节点。最后,我们为与区块链交互的节点指定网络ID和要购买的端口。在底部,您将看到以太坊节点,该创世纪节点的enode地址或创建的引导节点 bootnode 。然后其他节点使用enode地址连接到该引导节点,并建立一个运行区块链的点对点网络。
区块链Dapps Coursera(第一周)分布式应用Dapps_第6张图片

回想一下,点对点网络是区块链技术中的基本概念之一。我们尚未列出网络详细信息所需的所有命令。 这超出了本课程的范围,而本课程的重点是Dapp开发。
我们已经完成了一个节点的创建,现在让我们至少再创建一个 peer 节点。在这里,我们正在创建节点一,并将其作为对等节点peer node 添加到我们先前创建的引导节点 bootnode 中。创建该节点后,请注意我们正在使用管理API,第四行命令 addpeer命令,以及我们先前创建的引导节点的 enode 地址。引导节点的IP地址和绑定端口303xx,它代表我们创建的原始节点0的端口号。
这就是创建和连接对等节点以加入区块链网络的方式。
区块链Dapps Coursera(第一周)分布式应用Dapps_第7张图片

在这里您可以看到多个 peer 节点1到n。当您想加入区块链网络ID 15时,请安装基本的Ethereum服务器。然后执行前面为单个节点创建所示的命令,并将其作为对等节点添加。因此,我们有一个支持区块链操作的点对点网络。
区块链Dapps Coursera(第一周)分布式应用Dapps_第8张图片

回想一下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(第一周)分布式应用Dapps_第9张图片
区块链Dapps Coursera(第一周)分布式应用Dapps_第10张图片
区块链Dapps Coursera(第一周)分布式应用Dapps_第11张图片

Dapp定义 Dapp Defined

完成本课程后,您将能够解释Dapp的体系结构,从更高层次上解释从Web客户端到区块链服务器的访问。

什么是Dapp?

去中心化应用程序解决了需要区块链服务和区块链基础设施来实现其目的的问题。通常,一个Dapp有一个web前端,一个区块链后端,以及连接两者的代码。
区块链Dapps Coursera(第一周)分布式应用Dapps_第12张图片

在这样的架构中,Dapp的前端  front-end 将用户的任何外部刺激 external stimulus 从用户引导到区块链基础架构 infrastructure,并将任何响应返回给他们。它启动交易以调用智能合约上的函数。 反过来,在区块链上记录交易,状态转换和收据。 Dapp的前端可以像命令行界面一样简单。它也可以是复杂的Web应用程序或易于使用的移动应用程序。 前端开发可能涉及使用HTML,JavaScript和CSS以及其他Web资产或Web应用程序框架(如Express)开发Web客户端。 在这里,区块链服务器是基础架构上的E节点。 前端是具有嵌入式web3.js脚本的Web客户端,可通过RPC管道使用JSON进行通信。
区块链Dapps Coursera(第一周)分布式应用Dapps_第13张图片

回顾课程二,web3部署脚本是由 Remix 编译过程生成的重要工件 artifact。
我们将使用一个简单的Web应用程序作为本课程中开发的Dapps的前端。
如果您在不进行任何开发工作的帮助下以编程方式组装Dapp,则可以将web3部署脚本复制到您的应用中,例如将HTML JavaScript文件作为脚本。使用脚本中的功能部署智能合约。 然后使用脚本中的功能,ABI和智能合约地址来调用智能合约功能。 目前,如果您是程序员,则可以查看Remix IDE中生成的web3部署脚本。
区块链Dapps Coursera(第一周)分布式应用Dapps_第14张图片

别担心,我们计划在本课程第二模块中使用IDE来简化Dapp的开发。到目前为止,我们已经介绍了Dapp的基本概念。

Dapp的架构
下面是一个简单的Dapp架构,其中包含我们之前使用geth命令和Ethereum区块链服务器和网络创建的节点。

区块链Dapps Coursera(第一周)分布式应用Dapps_第15张图片

使用相同的网络初始化节点后,即可使用命令行界面发送事务。 另外,您应该能够从命令行部署智能合约。请注意,这些命令可能具有很长的有效负载,并且参数可能跨越多行。 而且,非程序员或Dapp用户可能不熟悉命令行界面。 因此,我们将使用一个简单但直观的Web界面作为我们计划开发的区块链Dapp的前端。

下面是Dapp的更新架构
有多个完整的节点,仅显示了三个节点:Node1,Node2,NodeN。Geth命令用于使用命令geth--rpc--rpcport 8544公开RPC端口8544。在Web客户端上,可通过web3.js模块来简化包括智能合约部署和调用功能在内的功能。
区块链Dapps Coursera(第一周)分布式应用Dapps_第16张图片

总结:我们探讨了以太坊区块链服务器的安装,一个节点,以及一个对等节点 peer node 网络。 我们还研究了Dapp体系结构的两种替代方法。 一个带有命令行客户端,另一个带有Web客户端。 在下一课中,我们将探讨一些用于开发Dapp的支持API。

阅读材料
Decentralized Applications-dApps
The Future will be Decentralized

测试题
区块链Dapps Coursera(第一周)分布式应用Dapps_第17张图片

以太坊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(第一周)分布式应用Dapps_第18张图片
Debug API,例如Debug.dumpBlock(16)。 这将显示块16的块头详细信息。您可以观察到,Debug API 使您能够查看区块链,对其进行研究并通过查看该块来调试任何问题。
区块链Dapps Coursera(第一周)分布式应用Dapps_第19张图片
Miner API,Miner API允许您控制节点的挖掘操作并设置各种挖掘特定的设置。 例如,miner.start(),miner.stop()是启动和停止挖矿的函数。miner.start(6)是将6个并行线程分配给挖掘操作。
区块链Dapps Coursera(第一周)分布式应用Dapps_第20张图片
Personal API 处理节点内帐户的创建和管理。 它还在密钥存储区中管理私钥。例如,personal.newAccount()将在一个节点中创建一个新帐户。
区块链Dapps Coursera(第一周)分布式应用Dapps_第21张图片
Txpool API(Txpool 或 transaction pool API)使您可以访问几种非标准 RPC 方法,以检查事务池的内容,其中包含所有当前未决的事务以及排队等待将来处理的事务。 例如,txpool.inspect() 列出了所有待处理的事务,供您细读和收集以构建事务块。
区块链Dapps Coursera(第一周)分布式应用Dapps_第22张图片
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(第一周)分布式应用Dapps_第23张图片
Web3是一个JavaScript库,专门设计用于Web客户端或以太坊Dapps。 这是一个门户,通过它可以调用区块链服务器上以太坊节点的所有基础操作。 例如,智能合约部署和智能合约功能调用。您将在Dapp前端的开发中使用web3并与区块链进行交互。

现在我们知道了API,这是Dapp的简单架构。 它包含多个完整节点,其中只有三个,即节点1、2和N。您还可以看到所有讨论的API。 Geth命令用于公开RPC端口以及API。
区块链Dapps Coursera(第一周)分布式应用Dapps_第24张图片

到目前为止,我们讨论了体系结构和 API 详细信息。 当用户发起 Web 请求时(如果它是常规Web应用程序请求),它将被定向到HTTP端点(例如端口8080),并定向到要执行的 Web 服务器。
对于 Dapp,geth 客户端必须使用 RPC port 命令公开 RPC 端点。 Web3对象在网页脚本中实例化。 回想一下,web3.js 是一个JavaScript 库。 在 web3 对象上调用请求。
区块链Dapps Coursera(第一周)分布式应用Dapps_第25张图片

请求以 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(第一周)分布式应用Dapps_第26张图片
区块链Dapps Coursera(第一周)分布式应用Dapps_第27张图片

 

你可能感兴趣的:(区块链学习笔记)