【一步步一起学DApp开发】(一)什么是去中心化应用

时间:2024-04-09 06:55:46

【一步步一起学DApp开发】(一)什么是去中心化应用


1.1 什么是DApp

网络中不存在能够完全控制DApp的节点。
这些对等节点(peer)可以是网络中的任何计算节点,因此,发现和防止节点对应用数据进行非法篡改或者与其他人分享错误信息是一个重要挑战。
所以需要对等节点之间有一些关于某个节点发布的数据是否正确的共识。

在DApp中,没有一个中心服务器来协调节点,或者决定什么是对、什么是错,因此应对这个挑战确实不容易。

一致性协议(concensus protocol)可用于解决这个问题。

不同的DApp通常使用不同数据结构类型的共识协议,例如比特币使用工作量证明协议(PoW)来达成共识。

为了让用户使用DApp,每一个DApp都需要一个客户端(client)。
使用DApp时,用户首先需要运行DApp中自己的节点服务端,然后将客户端连接至节点服务端。

客户端通常作为服务和/或节点形式出现,以便让使用DApp的过程更容易。

Tip:中心化应用可能是分布式的,也可能不是分布式的,但去中心化应用肯定是分布式的。

DApp的缺点:

  • 修改bug或者更新DApp很困难,因为网络中的每一个节点都需要更新其节点软件。

  • 一些应用要求验证用户身份(即KYC),却没有中心化的机构来
    验证用户身份,开发应用时会遇到问题

  • 创建去中心化应用比较困难

  • 应用通常独立于第三方API,以获取或者存储数据。DApp不能依
    赖中心化应用API,但是可以依赖其他DApp。

1.2 去中心化自治组织

DAO:去中心化自治组织。DAO是DApp的一个子类。

1.3 DApp中的用户身份

因为DApp中没有*机构,验证用户身份成了一个挑战。

在现实生活中,用户做交易时,通常会自己验证对方的身份或者可以请一个机构来验证身份,这个想法也可以应用到DApp中。在进行交易之前,用户可以手动验证彼此的身份,这个想法适用于人们彼此进行交易的DApp。假设有一个DApp是去中心化的社交网络,显然可以通过这种方式验证身份信息。假设一个DApp是用来买卖商品的,在支付之前买卖双方可以验证彼此的身份,尽管这个想法看起来是可行的,但是在实践中很难实现,因为你可能并不想每次进行交易的时候都验证身份,也不是每个人都知道如何验证身份。

由于这些原因,我们目前剩下的可选择方案是,由提供客户端的公司派人手动验证用户身份。例如,创建一个比特币账户不需要身份证明,但是当提取比特币并兑换成货币时,交易所会要求提供身份证明。客户端可以忽略未经验证的用户,不让他们使用,也可以对已经身份验证的用户开放使用。这个解决办法也会产生一些小问题,即如果转换客户端,会发现交互的用户不一样了,因为不同的客户端有不同的验证用户集。因此,所有用户可能决定只使用一个特定客户端。但这不是一个很大的问题,因为如果客户端不能有效验证用户,用户就可以方便地转向另一个客户端,而且不丢失关键数据,因为关键数据的存储是去中心化的。

用什么过程来验证用户身份并不重要,用户总有办法伪装成其他人;用数字身份或者用扫描文件进行验证并不重要,因为二者都可能被盗或者被重复使用。重要的是让用户难以伪装成其他人,并收集足够的数据追踪用户,证明该用户进行了一些欺诈行为。

1.4 DAPP中的用户账户

有多种方法能实现DApp中的用户账户,最热门的方式是使用公钥-私钥对(public-private key pair)来代表一个账户。公钥的哈希(hash)是账户的唯一身份。为了改变账户中的数据,用户需要用私钥签名。如果用户丢失私钥,就永远不能访问账户了。

1.5 访问中心化应用

一些情况下,DApp需要从中心化应用中抓取数据。
但主要问题是DApp如何知道从一个域名中抓取的数据有没有被中间人篡改,数据是否还是真实的响应?根据DApp架构的不同,解决办法也有所不同。

例如在以太坊中,智能合约不能直接发出HTTP请求,为了访问中心化API,可以使用Oraclize服务作为中间人。 Oraclize为从中心化服务智能合约中抓取的数据提供TLSNotary验证。

1.6 DApp中的内部货币

DApp节点需要硬件和网络资源才能维持运行。 DApp节点需要一些有用的回报来维持运行,于是内部货币登场了。大多数DApp都有内置内部货币,或者可以说最成功的DApp都有内置内部货币。

共识协议决定节点收取多少内部货币。根据共识协议,只有为维护DApp安全和运行做出贡献的那些特定节点可以赚取货币,只进行数据读取的节点没有回报。例如在比特币中,只有矿工(miner)成功挖矿才能赚取比特币。

1.7 什么是授权的DApp

授权的DApp继承了免权限DApp的全部属性,但需要权限才能参与到网络中去。各种授权的DApp用到的权限系统不同。

要加入一个授权的Dapp就需要权限,授权的DApp没有内部货币。

这部分内容比较枯燥,但却是理解DApp的基础。