了解分散式应用程序
我们一直在使用的几乎所有基于互联网的应用程序都是集中式的,也就是说,每个应用程序的服务器都归某个特定的公司或个人所有。开发人员一直在构建集中式应用程序,用户已经使用它们很长时间了。但是集中式应用程序有一些问题,这使得它几乎不可能构建某些类型的应用程序,并且每个应用程序最终都有一些共同的问题。集中式应用程序的一些问题是它们不够透明,它们有单点故障,它们无法防止网络审查,等等。由于这些担忧,一种用于构建基于互联网的应用的新技术应运而生,这种技术被称为去中心化应用 ( DApps )。在这一章中,我们将学习去中心化的应用。
在本章中,我们将讨论以下主题:
- 什么是 DApps?
- 分散式、集中式和分布式应用程序之间有什么区别?
- 集中式和分散式应用程序的优缺点。
- 一些最流行的 DApps 使用的数据结构、算法和协议的概述
- 了解一些基于其他 dapp 构建的流行 dapp。
什么是 DApp?
DApp 是一种互联网应用,其后端运行在分散的对等网络上,其源代码是开源的。网络中没有一个节点可以完全控制 DApp。
根据 DApp 的功能,可以使用不同的数据结构来存储应用程序数据。例如,比特币 DApp 使用区块链数据结构。
这些对等体可以是连接到互联网的任何计算机;因此,检测和防止节点对应用程序数据进行无效更改以及与他人共享错误信息成为一个巨大的挑战。因此,我们需要在对等体之间就某个对等体发布的数据是对还是错达成某种共识。DApp 中没有中央服务器来协调对等方并决定什么是对什么是错;因此,解决这一挑战变得非常困难。有某些协议(具体称为共识协议)来应对这一挑战。共识协议是专门为 DApp 使用的数据结构类型而设计的。例如,比特币使用工作证明协议来达成共识。
每个 DApp 都需要一个客户端供用户使用 DApp。要使用 DApp,我们首先需要网络中的一个节点,运行我们自己的 DApp 节点服务器,然后将客户端连接到节点服务器。DApp 的节点仅提供 API,并允许开发者社区使用 API 开发各种客户端。一些 DApp 开发商正式提供了一个客户端。DApps 的客户端应该是开源的,应该下载使用;否则,整个分权的想法将会失败。
但是客户机的这种体系结构设置起来很麻烦,特别是如果用户不是开发人员的话;因此,客户端和/或节点通常作为服务进行托管,以简化 DApp 的使用过程。
What are distributed applications? Distributed applications are those applications that are spread across multiple servers instead of just one. This is necessary when application data and traffic becomes huge and application downtime is not affordable. In distributed applications, data is replicated among various servers to achieve high availability of data. Centralized applications may or may not be distributed, but decentralized applications are always distributed. For example, Google, Facebook, Slack, Dropbox, and so on are distributed, whereas a simple portfolio site or a personal blog are not usually distributed until traffic is very high.
分散应用的优势
下面是分散式应用程序的一些优势:
- DApps 是容错的,因为没有单点故障,因为它们是默认分布的。
- 它们防止违反网络审查,因为没有中央权力机构,政府可以向其施加压力,以删除一些内容。政府甚至不能屏蔽应用的域名或 IP 地址,因为 dapp 不能通过特定的 IP 地址或域名访问。显然,政府可以通过 IP 地址跟踪网络中的单个节点并关闭它们,但如果网络庞大,那么关闭应用程序几乎是不可能的,特别是如果节点分布在各个不同的国家。
- 用户很容易信任这个应用程序,因为它不是由一个可能欺骗用户获利的机构控制的。
分散应用的缺点
显然,每个系统都有一些优点和缺点。下面是分散式应用程序的一些缺点:
- 修复错误或更新 DApps 是困难的,因为网络中的每个对等体都必须更新它们的节点软件。
- 一些应用程序需要验证用户身份(即 KYC),由于没有中央权威机构来验证用户身份,这就成为开发此类应用程序时的一个问题。
- 它们很难构建,因为它们使用非常复杂的协议来达成共识,并且它们必须从一开始就构建成可扩展的。因此,我们不能只是实现一个想法,然后添加更多的功能和规模。
- 应用程序通常独立于第三方 API 来获取或存储某些东西。dapp 不应该依赖于集中式应用程序 API,但是 dapp 可以依赖于其他 dapp。由于还没有一个大型的 DApp 生态系统,所以很难建立一个 DApp。虽然理论上 dapp 可以依赖于其他 dapp,但实际上很难紧密耦合 dapp。
分散自治组织
通常,签署的文件代表组织,政府对他们有影响力。根据组织的类型,组织可能有也可能没有股东。
去中心化自治组织 ( 道)是以计算机程序为代表(即组织按照程序所写的规则运行),完全透明,股东完全控制,不受政府影响的组织。
为了实现这些目标,我们需要将“道”开发为“DApp”。因此,我们可以说道是 DApp 的一个子类。
Dash 和 DAC 是 Dao 的几个例子。
What is a decentralized autonomous corporation (DAC)? There is still no clear difference between DAC and DAO. Many people consider them to be the same whereas some people define DAC as DAO when DAO is intended to make profits for shareholders.
DApps 中的用户身份
DApps 的主要优势之一是它通常保证用户匿名。但许多应用程序需要验证用户身份才能使用该应用程序。由于 DApp 中没有中央权威机构,验证用户身份成为一个挑战。
在集中式应用程序中,人们通过请求用户提交某些扫描的文档、OTP 验证等来验证用户身份。这个过程叫做了解你的客户 ( KYC )。但是由于在 DApps 中没有人来验证用户身份,所以 DApp 必须自己验证用户身份。显然 DApps 无法理解和验证扫描文档,也无法发送短信;因此,我们需要向他们提供他们能够理解和验证的数字身份。主要问题是几乎没有 DApps 有数字身份,只有少数人知道如何获得数字身份。
数字身份有多种形式。目前,最推荐和最流行的形式是数字证书。数字证书(也称为公钥证书或身份证书)是用于证明公钥所有权的电子文档。基本上,用户拥有私钥、公钥和数字证书。私钥是秘密的,用户不应该与任何人分享。公钥可以与任何人共享。数字证书持有公钥和关于谁拥有公钥的信息。显然,制作这种证书并不难;因此,数字证书总是由您可以信任的授权实体颁发。数字证书有一个由证书颁发机构的私钥加密的加密字段。为了验证证书的真实性,我们只需要使用证书颁发机构的公钥解密该字段,如果它解密成功,那么我们就知道证书是有效的。
即使用户成功地获得了数字身份,并且通过了 DApp 的验证,仍然存在一个主要问题;也就是说,有各种各样的数字证书颁发机构,为了验证一个数字证书,我们需要颁发机构的公钥。包含所有权限的公钥并更新/添加新的确实很困难。由于这个问题,数字身份验证的过程通常包含在客户端,以便可以很容易地更新。仅仅将这种验证过程移到客户端并不能完全解决这个问题,因为有许多颁发数字证书的机构,并且跟踪所有这些证书,并且将它们添加到客户端是很麻烦的。
Why do users not verify each other's identity? Often, while we do trading in real life, we usually verify the identity of the other person ourselves or we bring in an authority to verify the identity. This idea can be applied to DApps as well. Users can verify each other's identity manually before performing trade with each other. This idea works for specific kinds of DApps, that is, for DApps in which people trade with each other. For example, if a DApp is a decentralized social network, then obviously a profile cannot be verified by this means. But if the DApp is for people to buy/sell something, then before making a payment, the buyer and seller can both verify each other's identity. Although this idea may seem fine while doing trading, when you think practically, it becomes very difficult because you may not want to do identity verification every time you trade and everyone not knows how to do identity verification. For example, if the DApp is a cab-booking app, then you will obviously not want to perform identity verification before booking a cab every time. But if you trade sometimes and you know how to verify identity, then it's fine to follow this procedure.
由于这些问题,我们目前剩下的唯一选择是由提供客户端的公司的授权人员手动验证用户身份。例如,创建一个比特币账户,我们不需要身份证明,但在将比特币提取为扁平货币时,交易所要求提供身份证明。客户端可以忽略未经验证的用户,不让他们使用客户端。并且他们可以保持客户端对其身份已经过他们验证的用户开放。这种解决方案也有一些小问题;也就是说,如果您切换客户端,您将不会找到同一组用户进行交互,因为不同的客户端具有不同的验证用户组。因此,所有用户都可能决定只使用特定的客户端,从而在客户端之间形成垄断。但这不是一个大问题,因为如果客户端无法正确验证用户,那么用户可以很容易地转移到另一个客户端,而不会丢失他们的关键数据,因为这些数据是分散存储的。
在应用程序中验证用户身份的想法是使用户在执行某种欺诈活动后难以逃脱,防止具有欺诈/犯罪背景的用户使用该应用程序,并为网络中的其他用户提供使其相信某个用户就是该用户所声称的人的手段。使用什么程序来验证用户身份并不重要;它们总是用户表现自己成为别人的方式。我们是使用数字身份还是扫描文档进行验证并不重要,因为两者都可能被窃取和重复使用。重要的是让用户很难将自己伪装成其他人,同时收集足够的数据来跟踪用户并证明用户进行了欺诈活动。
DApps 中的用户帐户
许多应用程序需要用户帐户的功能。与账户相关的数据只能由账户所有人修改。DApps 不能像集中式应用程序那样具有相同的基于用户名和密码的帐户功能,因为密码不能证明帐户的数据更改是由所有者请求的。
在 DApps 中实现用户账号的方法有很多。但是最流行的方法是使用一个公钥-私钥对来表示一个帐户。公钥的散列是帐户的唯一标识符。要对帐户数据进行更改,用户需要使用他/她的私钥对更改进行签名。我们需要假设用户会安全地存储他们的私钥。如果用户丢失了他们的私钥,那么他们将永远无法访问他们的帐户。
访问集中式应用程序
DApp 不应该因为单点故障而依赖集中式应用程序。但在某些情况下,没有其他选择。例如,如果一个 DApp 想要读取一个足球比分,那么它将从哪里获得数据呢?虽然一个 DApp 可以依赖另一个 DApp,但为什么国际足联要创造一个 DApp?国际足联不会仅仅因为其他国家想要数据就创造一个 DApp。这是因为 DApp 提供分数是没有好处的,因为它最终将完全由国际足联控制。
因此,在某些情况下,DApp 需要从集中式应用程序中获取数据。但是主要的问题是 DApp 如何知道从域中获取的数据没有被中间服务/人篡改,并且是实际的响应。根据 DApp 的架构,有各种方法可以解决这个问题。例如,在 Ethereum 中,对于访问集中式 API 的智能合约,它们可以使用 Oraclize 服务作为中间人,因为智能合约不能发出直接的 HTTP 请求。Oraclize 为其从集中式服务中为智能合约获取的数据提供了 TLSNotary 证明。
DApps 中的内部货币
对于一个长期持续的集中式应用程序来说,应用程序的所有者需要盈利才能保持它的运行。d apps 没有所有者,但仍然像任何其他集中式应用程序一样,DApp 的节点需要硬件和网络资源来保持运行。因此,DApp 的节点需要一些有用的东西来保持 DApp 的运行。这就是内部货币发挥作用的地方。大多数 dapp 都有内置的内部货币,或者我们可以说大多数成功的 dapp 都有内置的内部货币。
共识协议决定一个节点接收多少货币。根据共识协议,只有特定类型的节点才能获得货币。我们也可以说,有助于保持 DApp 安全和运行的节点是那些赚取货币的节点。只读取数据的节点不会得到任何回报。比如比特币,只有矿工成功挖矿才赚比特币。
最大的问题是,既然这是一种数字货币,为什么有人会重视它?嗯,根据经济学,任何有需求而供给不足的东西都会有价值。
让用户付费使用内部货币的 DApp 解决了需求问题。随着越来越多的用户使用 DApp,需求也会增加,因此,内部货币的价值也会增加。
设定一个可以生产的固定数量的货币,使货币变得稀缺,赋予其更高的价值。
货币是在一段时间内供应的,而不是一次性供应所有的货币。这样做是为了让进入网络以保持网络安全和运行的新节点也赚到钱。
DApps 内部货币的缺点
在 dapp 中使用内部货币的唯一缺点是 dapp 不再免费使用。这是集中式应用程序占上风的地方之一,因为集中式应用程序可以使用广告货币化,为第三方应用程序提供优质 API,因此可以对用户免费。
在 DApps,我们无法整合广告,因为没有人来检查广告标准;客户可能不显示广告,因为显示广告对他们没有好处。
什么是允许的 DApps?
直到现在,我们一直在学习 DApps,它是完全开放的,没有权限的;即任何人都可以参与,无需建立身份。
另一方面,许可的 DApps 并不对每个人开放。有权限的 dapp 继承无权限 dapp 的所有属性,除了您需要加入网络的权限。许可系统因许可 DApps 而异。
要加入许可的 DApp,你需要许可,所以无许可的 dapp 的共识协议在许可的 dapp 中可能不能很好地工作;因此,它们具有不同于无许可 DApps 的一致协议。被许可的 DApps 没有内部货币。
流行服饰
现在,我们已经对 dapp 是什么以及它们与集中式应用程序有何不同有了一些高层次的了解,让我们来探索一些流行且有用的 dapp。在探索这些 DApps 时,我们将在足以理解它们如何工作和解决各种问题的水平上探索它们,而不是潜得太深。
比特币
比特币是一种去中心化货币。比特币是最受欢迎的 DApp,它的成功显示了 dapp 的强大,并鼓励人们建立其他 dapp。
在我们深入了解比特币如何工作以及为什么人们和政府认为它是一种货币的细节之前,我们需要了解什么是总账和区块链。
什么是账本?
分类账基本上是交易的清单。数据库不同于分类账。在分类帐中,我们只能追加新的交易,而在数据库中,我们可以追加、修改和删除交易。数据库可以用来实现分类账。
什么是区块链?
区块链是一种用于创建分散分类帐的数据结构。区块链是由一系列的块组成的。一个块包含一组事务、前一个块的散列、时间戳(指示块的创建时间)、块奖励、块号等等。每个块都包含前一个块的散列,从而创建了一个相互链接的块链。网络中的每个节点都持有区块链的副本。
工作证明、利害关系证明等等是用来保证区块链安全的各种共识协议。根据共识协议,块以不同的方式创建并添加到区块链。在工作证明中,区块是通过一种叫做采矿的程序产生的,这种程序保证了区块链的安全。在工作证明协议中,挖掘涉及解决复杂的难题。我们将在本书后面了解更多关于区块链及其共识协议的内容。
比特币网络中的区块链持有比特币交易。通过向成功挖掘区块的节点奖励新的比特币,向网络供应比特币。
区块链数据结构的主要优点是它自动审计,使应用程序透明而安全。它可以防止欺诈和腐败。它可以用来解决许多其他问题,这取决于您如何实现和使用它。
比特币合法吗?
首先,比特币不是内部货币;相反,它是一种分散的货币。内部货币大多是合法的,因为它们是一种资产,用途显而易见。
主要的问题是,只兑换货币的 DApps 是否合法。直截了当的回答是,这在许多国家是合法的。很少有国家将它定为非法,大多数国家还没有做出决定。
以下是一些国家将其列为非法的原因,而大多数国家尚未做出决定:
- 由于 DApps 中的身份问题,用户帐户在比特币中没有任何与其相关联的身份;因此,它可以用于洗钱
- 这些虚拟货币非常不稳定,因此人们损失金钱的风险更高
- 使用虚拟货币逃税真的很容易
为什么会有人用比特币?
比特币网络只用于发送/接收比特币,不用于其他用途。所以你一定想知道为什么会有对比特币的需求。
以下是人们使用比特币的一些原因:
- 使用比特币的主要优势在于,它让在世界任何地方收发支付变得简单快捷
- 与比特币交易费用相比,在线支付交易费用昂贵
- 黑客可以从商家那里窃取你的支付信息,但在比特币的情况下,窃取比特币地址是完全无用的,因为为了使交易有效,它必须用相关的私钥签名,用户不需要与任何人分享该私钥来进行支付。
艾瑟芬
以太坊是一个去中心化的平台,允许我们在其上运行 DApps。这些 DApps 是使用智能合约编写的。一个或多个智能合约可以一起形成一个 DApp。以太坊智能合约是一个在以太坊上运行的程序。智能合同完全按照程序运行,没有任何停机、审查、欺诈和第三方干扰的可能性。
使用以太坊运行智能合约的主要优点是,它可以方便智能合约之间的交互。还有,你不用担心集成共识协议等事情;相反,您只需要编写应用程序逻辑。显然,你不能用以太坊建造任何类型的 DApp;您只能构建那些特性受以太坊支持的 DApps。
以太坊有一种内部货币叫做以太。要部署智能合约或执行智能合约的功能,您需要以太网。
这本书致力于使用以太坊构建 DApps。通过这本书,你将深入了解以太坊的每一点。
超级账本项目
Hyperledger 是一个致力于构建技术以构建许可的 DApps 的项目。Hyperledger fabric(或简称 fabric)是 Hyperledger 项目的一个实现。其他实现包括英特尔锯齿和 R3 Corda。
Fabric 是一个许可的分散平台,允许我们在其上运行许可的 DApps(称为链码)。我们需要部署我们自己的 fabric 实例,然后在其上部署我们许可的 DApps。网络中的每个节点都运行一个 fabric 实例。Fabric 是一个即插即用系统,您可以在其中轻松地即插即用各种共识协议和功能。
Hyperledger 使用区块链数据结构。基于 Hyperledger 的区块链目前可以选择没有共识协议(即 NoOps 协议)或者使用 PBFT ( 实用拜占庭容错)共识协议。它有一个特殊的节点,称为认证机构,控制谁可以加入网络,他们可以做什么。
IPFS 吗
IPFS ( 星际文件系统)是一个分散的文件系统。IPFS 使用 DHT ( 分布式哈希表)和 Merkle DAG ( 有向无环图)数据结构。它使用类似于 BitTorrent 的协议来决定如何在网络上移动数据。IPFS 的一个高级特性是它支持文件版本控制。为了实现文件版本控制,它使用了类似于 Git 的数据结构。
尽管它被称为分散式文件系统,但它并没有遵循文件系统的主要属性;也就是说,当我们在文件系统中存储一些东西时,它肯定会一直存在,直到被删除。但是 IPFS 不是这样的。每个节点并不保存所有文件;它存储它需要的文件。因此,如果一个文件不太受欢迎,那么显然很多节点不会有它;因此,该文件很有可能从网络上消失。因此,许多人更愿意称 IPFS 为一个分散的点对点文件共享应用程序。要不然,你可以把 IPFS 想象成 BitTorrent,完全去中心化;也就是它没有追踪器,有一些高级功能。
它是如何工作的?
让我们来看看 IPFS 是如何工作的。当我们在 IPFS 存储一个文件时,它被拆分成小于 256 KB 的块,并生成每个块的哈希。网络中的节点将它们需要的 IPFS 文件和它们的散列保存在一个散列表中。
有四种类型的 IPFS 文件:blob、list、tree 和 commit。一个 blob 代表存储在 IPFS 的一个实际文件的一部分。列表代表一个完整的文件,因为它包含 blobs 列表和其他列表。因为列表可以保存其他列表,所以它有助于网络上的数据压缩。树表示一个目录,因为它包含 blobs、列表、其他树和提交的列表。提交文件代表任何其他文件的版本历史中的快照。由于列表、树和提交链接到其他 IPFS 文件,它们形成了 Merkle DAG。
所以当我们想从网络上下载一个文件时,我们只需要 IPFS 列表文件的散列。或者,如果我们想下载一个目录,那么我们只需要 IPFS 树文件的散列。
由于每个文件都由一个散列来标识,因此名称不容易记住。如果我们更新一个文件,那么我们需要与每个想要下载该文件的人共享一个新的散列。为了解决这个问题,IPFS 使用了 IPNS 功能,该功能允许使用自我认证的名称或友好的名称来指向 IPFS 文件。
Filecoin
阻止 IPFS 成为分散文件系统的主要原因是节点只存储它们需要的文件。Filecoin 是一个类似于 IPFS 的分散式文件系统,使用内部货币来激励节点存储文件,从而提高文件可用性,使其更像一个文件系统。
网络中的节点会赚取 Filecoins 来租用磁盘空间,而要存储/检索文件,则需要花费 Filecoins。
除了 IPFS 技术公司,Filecoin 还使用区块链数据结构和可检索性证明协议。
写这篇文章的时候,Filecoin 还在开发中,所以很多东西还不清楚。
名称角
Namecoin 是一个分散的键值数据库。它也有一种内部货币,叫做硬币。Namecoin 使用区块链数据结构和工作证明共识协议。
在 Namecoin 中,可以存储数据的键值对。要注册一个键-值对,你需要花费 50 枚硬币.一旦注册,每 35999 块需要更新一次;否则,与该键关联的值将过期。要更新,你还需要姓名币。不需要更新密钥;也就是说,在你注册之后,你不需要花费任何硬币来保存密钥。
Namecoin 有一个名称空间特性,允许用户组织不同种类的键。任何人都可以创建名称空间或使用现有的名称空间来组织键。
一些最流行的名称空间是a
(特定于应用程序的数据)、d
(域名规范)、ds
(安全域名)、id
(身份)、is
(安全身份)、p
(产品),等等。
。比特域
要访问网站,浏览器首先会找到与该域相关联的 IP 地址。这些域名和 IP 地址映射存储在由大公司和政府控制的 DNS 服务器中。所以域名容易受到审查。政府和公司通常会封锁域名,如果该网站正在做一些非法的事情,或为他们造成损失,或由于其他原因。
因此,需要一个分散的域名数据库。由于 Namecoin 就像 DNS 服务器一样存储键值数据,Namecoin 可以用来实现分散式 DNS,这就是它已经被使用的地方。d 和 ds 名称空间包含以.bit
结尾的键,代表.bit
域名。从技术上讲,名称空间没有任何键的命名约定,但是 Namecoin 的所有节点和客户机都同意这个命名约定。如果我们试图在d
和ds
名称空间中存储无效的键,那么客户端将过滤无效的键。
支持.bit
域的浏览器需要在名称币的d
和ds
名称空间中查找,以找到与.bit
域相关联的 IP 地址。
d
和ds
名称空间的区别在于ds
存储支持 TLS 的域,而d
存储不支持 TLS 的域。我们已经使 DNS 去中心化;同样,我们也可以分散 TLS 证书的颁发。
这就是 TLS 在 Namecoin 中的工作方式。用户创建自签名证书并将证书哈希存储在 Namecoin 中。当支持针对.bit
域的 TLS 的客户端尝试访问受保护的.bit
域时,它会将服务器返回的证书哈希与存储在 Namecoin 中的哈希进行匹配,如果匹配,则它们会继续与服务器进行进一步的通信。
使用 Namecoin 形成的分散式 DNS 是 Zooko 三角的第一个解决方案。Zooko 三角形定义了具有三个属性的应用程序,即分散、身份和安全。数字身份不仅用于表示一个人,还可以表示一个域、公司或其他东西。
破折号
Dash 是一种类似比特币的去中心化货币。Dash 使用区块链数据结构和工作验证一致协议。Dash 解决了比特币引起的一些主要问题。以下是一些与比特币相关的问题:
- 交易需要几分钟才能完成,而在当今世界,我们需要交易即时完成。这是因为比特币网络中的挖掘难度是以这样一种方式调整的,即平均每 10 分钟就有一个区块被创建。我们将在本书的后面了解更多关于采矿的知识。
- 尽管账户没有关联的身份,但在交易所用比特币兑换真实货币或用比特币买东西是可以追踪的;因此,这些交易所或商家可能会向政府或其他当局透露您的身份。如果您运行自己的节点来发送/接收交易,那么您的 ISP 可以看到比特币地址,并使用 IP 地址跟踪所有者,因为比特币网络中的广播消息没有加密。
Dash 旨在解决这些问题,让交易几乎即时结算,让人们无法识别账户背后的真实身份。它还可以防止您的 ISP 跟踪您。
在比特币网络中,有两种节点,即矿工和普通节点。但是在 Dash 中,有三种节点,即矿工节点、主节点和普通节点。主节点让 Dash 如此特别。
分权治理和预算编制
要托管一个主节点,您需要 1000 个破折号和一个静态 IP 地址。在破折号网络中,主节点和矿工都获得破折号。开采一个区块,45%奖励归矿工,45%归主节点,10%留给预算系统。
主节点支持分散治理和预算。由于分散的治理和预算系统,Dash 被称为 DAO,因为它就是 DAO。
网络中的主节点就像股东一样;也就是说,他们有权决定这 10%的份额去哪里。这 10%的破折号通常用于资助其他项目。每个 masternode 都可以使用一票来批准一个项目。
关于项目提案的讨论发生在网络之外。但是投票发生在网络中。
Masternodes 可以为 DApps 中验证用户身份提供一种可能的解决方案;也就是说,主节点可以民主地选择一个节点来验证用户身份。本节点背后的人员或业务可以手工校验用户单据。这个奖励的一部分也可以去这个节点。如果节点没有提供好的服务,那么主节点可以投票给不同的节点。这可能是分散身份问题的一个很好的解决方案。
分散服务
masternodes 不仅仅是批准或拒绝一个提议,它还形成了一个提供各种服务的服务层。masternodes 提供服务的原因是,他们提供的服务越多,网络的功能就越丰富,从而增加了用户和交易,这提高了 Dash 货币的价格,块奖励也变得很高,因此帮助 masternodes 赚取更多利润。
Masternodes 提供的服务有 PrivateSend(一种提供匿名的混币服务)、InstantSend(一种提供几乎即时交易的服务)、DAPI(一种提供去中心化 API 的服务,这样用户就不需要运行一个节点)等等。
在给定时间,仅选择 10 个主节点。选择算法使用当前块散列来选择主节点。然后,我们请求他们提供服务。从大多数节点收到的响应被认为是正确的。这就是如何对主节点提供的服务达成共识。
服务证明一致性协议用于确保主节点在线、正在响应并具有最新的区块链。
BigChainDB
BigChainDB 允许您部署自己的有权限或无权限的分散数据库。它使用区块链数据结构以及其他各种特定于数据库的数据结构。BigChainDB,在写这篇文章的时候,还在开发中,所以很多东西还不清楚。
它还提供了许多其他特性,比如丰富的权限、查询、线性伸缩以及对多资产和联合一致性协议的本机支持。
OpenBazaar
OpenBazaar 是一个去中心化的电商平台。你可以使用 OpenBazaar 买卖商品。用户在 OpenBazaar 网络中不是匿名的,因为他们的 IP 地址被记录下来。节点可以是买方、卖方或仲裁者。
它使用 Kademlia 风格的分布式哈希表数据结构。销售者必须拥有一个节点并保持其运行,以使商品在网络中可见。
它通过使用工作证明共识协议来防止帐户垃圾邮件。它使用烧录证明、CHECKLOCKTIMEVERIFY 和保证金共识协议来防止评级和评论垃圾邮件。
买家和卖家使用比特币进行交易。买家可以在购物时添加主持人。如果买方和卖方之间发生纠纷,调解人负责解决纠纷。任何人都可以成为网络中的版主。版主通过解决纠纷赚取佣金。
涟漪
Ripple 是去中心化的汇款平台。它让我们可以转移法定货币、数字货币和商品。它使用区块链数据结构,并有自己的共识协议。在 ripple 文档中,你不会找到术语 blocks 和区块链;他们使用术语分类账代替。
在 ripple 中,资金和商品的转移通过信任链进行,其方式类似于哈瓦拉网络。在 ripple 中,有两种节点,即网关和常规节点。网关支持一种或多种货币和/或商品的存取。要成为 ripple 网络中的网关,您需要网关权限来形成信任链。网关通常是注册的金融机构、交易所、商户等等。
每个用户和网关都有一个帐户地址。每个用户都需要通过将网关地址添加到信任列表来添加他们信任的网关列表。找谁信任没有共识;这完全取决于用户,用户会承担信任网关的风险。甚至网关也可以添加它们信任的网关列表。
让我们看一个例子,居住在印度的用户 X 如何给居住在美国的用户 Y 汇款 500 美元。假设在印度有一个网关 XX,它接受现金(他们网站上的实物现金或卡支付)并只给你 ripple 上的 INR 余额,X 将访问 XX 办公室或网站并存入 30,000 INR,然后 XX 将广播一个交易,说我欠 X 30,000 INR。现在假设在美国有一个网关 YY,它只允许美元交易,而 Y 信任 YY 网关。现在,比方说,网关 XX 和 YY 互相不信任。由于 X 和 Y 不信任同一个网关,XX 和 YY 相互不信任,最后,XX 和 YY 不支持同一种货币。所以,对于 X 给 Y 汇款,他需要找中介网关,形成信任链。假设有另一个网关 ZZ,它受到 XX 和 YY 的信任,并且支持 USD 和 INR。现在,X 可以发送一笔交易,从 XX 向 ZZ 转账 50,000 印度卢比,ZZ 将其兑换成美元,然后 ZZ 将钱发送给 YY,要求 YY 将钱交给 Y。现在,X 欠 Y 500 美元,YY 欠 Y 500 美元,ZZ 欠 YY 500 美元,XX 欠 ZZ 30,000 印度卢比。但是这一切都很好,因为他们彼此信任,而在之前,X 和 Y 并不信任彼此。但是 XX、YY 和 ZZ 可以随时将钱转移到 ripple 之外,否则反向交易将扣除该值。
涟漪也有一个内部货币称为 XRP(或涟漪)。发送到网络的每笔交易都会产生一些波动。由于 XRP 是 ripple 的本地货币,它可以被发送给网络中的任何人而无需信任。在形成信任链时,也可以使用 XRP。请记住,每个网关都有自己的货币汇率。XRP 不是由采矿过程产生的;相反,总共有 1000 亿个 xrp 在开始时产生,并由 ripple 公司自己拥有。根据各种因素手动供应 XRP。
所有的交易都记录在分散的分类账中,这就形成了不可改变的历史。需要达成共识以确保所有节点在给定时间点具有相同的分类帐。在 ripple 中,有第三种节点叫做验证器,它是共识协议的一部分。验证器负责验证事务。任何人都可以成为验证者。但是其他节点保留了一个实际上可以信任的验证器列表。这个列表被称为 UNL(唯一节点列表)。验证器也有一个 UNL;也就是它信任的验证者作为验证者也想达成共识。目前,ripple 决定可以信任的验证器列表,但如果网络认为 ripple 选择的验证器不值得信任,那么他们可以在其节点软件中修改该列表。
您可以通过采用以前的分类帐并应用自那以后发生的所有交易来形成分类帐。因此,为了在当前分类账上达成一致,节点必须在之前的分类账和自那以后发生的交易集上达成一致。创建新分类帐后,一个节点(常规节点和验证器)启动一个计时器(几秒钟,大约 5 秒钟)并收集在前一个分类帐创建期间到达的新交易。当计时器到期时,它将根据至少 80%的 UNLs 记录那些有效的交易,并形成下一个分类账。验证者向网络广播一个提议(他们认为形成下一个分类账有效的一组交易)。如果验证人员根据其 UNLs 的建议和其他因素决定更改有效交易列表,他们可以多次广播同一分类帐的不同交易集的建议。所以你只需要等待 5-10 秒你的交易被网络确认。
有些人想知道这是否会导致许多不同版本的分类帐,因为每个节点可能有不同的 UNL。只要联合国后勤基地之间有最低程度的相互联系,就会很快达成共识。这主要是因为每个诚实节点的首要目标是达成共识。
摘要
在这一章中,我们学习了 DApps 是什么,并对它们的工作原理有了一个大概的了解。我们研究了 DApps 所面临的一些挑战以及针对这些问题的各种解决方案。最后,我们看到了一些流行的 DApps,并概述了它们的特别之处和工作原理。现在,您应该可以轻松解释什么是 DApp 以及它是如何工作的了。