跳转至

去中心化应用

可盈利是一切应用存在的基础。

去中心化的历史

早期的 Web 上并没有这么多的应用和服务,一开始 Web 就是非常去中心化的。在 HTTP 协议的指导方针中,有一组可信的服务器将你输入的 Web 地址转换成服务器地址。HTTPS 更进一步加上了可信服务器和证书颁发机构这一层。人们可以架设一台个人服务器供他人连接,每个人都拥有自己的数据。

但是由于数据拥有权集中式的模型容易实现,从概念和编程上来说都容易,反而占据了主导。个人或群组负责服务器的维护成本,并从使用服务器软件的用户那里盈利。

随着 HTTP 网络的不断增长,一个名叫 Bram Cohen 的开发人员引入了一种新的协议,称为 BitTorrent。目的是解决通过 HTTP 协议下载大型媒体文件时间超长的问题,同时也是之前 P2P 协议的一种改进。问题在于下载大型文件所需的时间太长,并且随着 Web 的增长,能够获得的文件大小也在增长。与此同时,硬盘存储空间也在增长,连接到一起的人也越来越多。BitTorrent 把下载者同时变为上传者,从而解决了这个问题。

事实证明,对于大型数据集来说,BitTorrent 的速度、弹性和回报机制都要优于 HTTP。

但是目前仍然没有满足**四个条件1**的 dapp,仅有部分满足但是已经取得突出效果的应用:

  • PopcornTime:使用 BitTorrent 协议实现用户件的实时视频流,有点像使用种子的 Netflix。
  • OpenBazaar:目标是成为去中心化版的 eBay。
  • Lighthouse:一个内嵌了一系列智能合约的比特币钱包,这些智能合约就像 Kickstarter 一样帮忙像某些项目认筹。
  • Gems:一个社交消息应用,试图创建一个比 WhatsApp 更加公平的业务模型。

去中心化的生态系统

去中心化数据

对我来说,这是最重要的概念。现在我们放心大胆的把自己的数据交给“服务栈”,心甘情愿的用自己的数据换取她们提供的免费服务,甚至因为委托他们存储数据而支付费用。但实际上,只要用户免费把数据给他们,它们就能靠这些数据把存储数据的钱赚出来。

我们详细些提供商不会滥用我们的数据,也不会把数据卖给那些我们不愿意向其透露这些数据的人。然而现实是,我们知道,只要把数据委托给一个集中式实体,这份信任就可能会被辜负。

如何解决这个问题呢?怎么把数据以一种去中心化的方式存储,让你肚子拥有数据?理想的方案应该是提供一种去中心化的数据存储方式,它要足够健壮,并且尽可能不需要依靠信任保护数据。

方案一:把数据直接存放在比特币的区块链中

这种方法比较幼稚。它确实把数据去中心化了,因为每个人都有一份存储数据的区块链副本,但谁也不能修改数据。同样的在你把数据上传到区块链之后,比特币矿工只能免费存储你都数据,他们得到的报酬根本不足以负担支付的成本,所以也就没有了继续维护比特币网络的动机。

方案二:把数据存放在分布式散列表中

分布式散列表(DHT)在过去 10 年里得到了广泛采用。它不仅分发数据副本,还包含查找数据的索引函数,可以确保弹性。

去中心化财富

去中心化的身份标识

去中心化计算

去中心化带宽

网状网络是标准的集中式互联网的去中心化版。在网状网络中,用户不需要通过中心网关来访问站点。他们可以直接连接到最近的路由器上,一般就是附近的电脑。


随着所有基于劳动力的事情慢慢被自动化吞噬,数据市场极有可能慢慢编程最大的市场。

去中心化资产的去中心化市场


作为一个开发人员我们应该适当的跳出固有的思维定式,有时候我们可能会过多关注于纷繁复杂的技术点,可是对于使用者来说,他并不会在意你用什么方式实现,不管是中心化的还是去中心化的。大多数人不关心,他们想要的只是一些能够顺畅地帮忙他们解决问题的东西。

在必要时我们可以选择去中心化,并且希望用户能意识到数据的价值,希望这个世界将会慢慢懂得安全保管自己密钥的重要性。

构建一个去中心化应用

集中式架构

在构建基于服务器 - 客户端的标准 Web 应用时,有三种常用的范式,下面稍微介绍一下。

  1. REST

    服务器-客户端模型相当简单,并且已经成为在 Web 上交换数据的主要方式了。REST 指的是表述性状态转移(Representational State Transfer),是一组指南和最佳实践,用于创建基于服务器-客户端模型的可伸缩 Web 应用。REST 本身不是一项技术,它跟 AJAX 一样,是一种实践。这种实践鼓励大家使用 HTTP 协议中早已存在但极少使用的各种能力。用户只是将浏览器指向一个 URL(统一资源定位器)就会发送一个 HTTP 请求。每个HTTP 请求中都会包含一些参数,服务器可以根据这些信息来决定给发起请求的客户端什么样的响应。

  2. CRUD

    CRUD 指的是创建 - 读取 - 更新 - 删除(Create-Read-Update-Delete)。这些都是数据存储库上的基本操作,用来直接处理记录或数据对象。离开了些操作,记录就仅仅是被动的实体。通常情况下,它们就只是数据库表和记录。REST 跟运行着的系统进行交互,而 CRUD 处理系统中的数据。开发人员一般会使用 MongoDB 或 MySQL 之类的数据库在他们的数据上执行CRUD 动作。

  3. MVC

    MVC 指的是模型 - 视图 - 控制器 (Model-View-Controller),是目前最流行的软件编程范式。模型管理着应用程序的核心行为和数据。视图渲染应用程序的用户界面。控制器接收用户输入,根据需要来调用模型对象和视图,从而执行特定的动作。

去中心化结构:IPFS 介绍

在一个去中心化的架构中,CRUD 和 REST 会合二为一。因为就 REST 而言,数据会分散到去中心化网络中,而不是由某个人控制的计算机上。在本地执行操作或处理请求跟在远程上是一样的。你自己既是服务器又是客户端。

IPFS 作为去中心化数据存储,是因为它远超越了该领域的所有竞争对手,有经过多年研究积累的优秀思想和经过验证的实践经验。

dapp 不是运行在服务器上,而是运行在每个用户自己的计算机上。

我们看一下 IPFS 中的两个关键命令:

  • ADD,向 IPFS 添加数据
  • CAT,从 IPFS 读取数据

因为 IPFS 是去中心化数据存储,在你把数据添加到网络中后,除非你说唯一存储数据的人,否则根本没办法删除你添加的数据。这是因为其他访问过该数据的节点马上就有了一份副本。同时 IPFS 在更新数据时,本身文件并没有被删除,而是利用 Git 将文件本身版本化了。

向 IPFS 添加数据,本质上是在网络上发送了一个广播,告诉大家你有这份数据。实际上,你并没有把数据发送给任何一台计算机,数据只有在被请求时才会发送。另外,因为数据放在网络上,所以命令的处理结果也是发生在网络上的。

MVC 任然适用于去中心化应用程序,只是控制器不是跟服务器通话,而是跟区块链和 DTH 通话。


  1. 没有中心失效点,发行自己的“内部货币”,有去中心化公式,并且开源。