您想知道区块链到底是什么吗?想了解区块链的基本原理吗?想知道区块链技术到底如何发展吗?本指南将为您一一解答。您还可以亲身体验构建属于您自己的分布式应用程序(DApp)。接下来,您只需按照我们为您准备的分步说明逐步操作即可。本文来自howtotoken,一份区块链应用开发指南。
指南目录
1. 什么是区块链?
1.1 区块链的关键组成部分
1.2 区块链系统的类型
1.3 区块链的演变
2. 区块链发展简介
2.1 DApp 开发的主要问题
2.2 区块链上的 DApp 开发工具
2.3 如何开发 DApp
3. 深入探索
1. 什么是区块链?
区块链是一个分布式的且不断扩大的数据块或数据表,每个数据记录都被加密。每个区块包含所有或部分最近交易的信息,一个交易计算器,以及区块链版本号,和幻数——前一区块的加密哈希函数(添加一个新区块时,由计算机随机为新区块给出幻数,所有每个区块都是独一无二的)。
由于每个区块都有前一个区块的加密散列值,时间戳和交易数据,区块链的信息很容易被验证并且无法删除。当数据记录在一个区块上,在后续区块中不能修改前面区块的数据,因为区块链是分布式的,并且新区块一般采用点对点的网络管理方式。
简单地说,区块链与 Google 文档非常相似。只有有权访问共享文档的人才可以修改文档,并且所有人可以立即看到更改后的文档。但是,区块链与 Google 文档相比,有两个主要的特点:
- 在区块链中,不能删除或编辑已经发布的信息。您可以添加新的信息,但不能删除或更改已添加到系统中的任何信息。
- 区块链是分布式的,没有专设权威机构来控制它,它被系统中的每个使用者所拥有。Google 文档存储于 Google 服务器,原则上说,Google 是管理这些文档的权威机构。
为了让您更好地了解区块链,我们将解释区块链的主要组成部分,区块链的类型以及区块链系统是如何诞生的。
1.1 区块链的关键组成部分
所有区块链系统都包含以下部分:
应用节点
每个区块链系统都有自己的节点应用程序,用户需要安装应用程序才能访问区块链。比特币钱包就是一个例子。
区块链生态系统有两种不同类型的节点应用程序:轻节点和全节点。轻节点对于适用于简单访问区块链并在系统内进行交易的用户,若需要更多服务则用全节点。两者之间的主要区别在于全节点需要下载完整的区块链,而轻节点只需下载验证数据真实性的区块头即可。区块链上的大部分节点都是轻节点。全节点虽然占用更多的存储空间并消耗更多的流量,却可以为用户提供更多的安全保障。
共享分类账
它是在节点应用程序内部发挥管理作用的数据结构。当用户安装节点应用程序时,内部的分类账数据结构可以查看该区块链上所有区块和交易的信息。
每个区块链生态系统只存在一个共享分类账,所以的节点应用程序都使用同一个共享分类账。例如,有很多客户端(节点应用程序)允许访问以太坊,并且这些客户端均可以同时运行,但您通过所有客户端访问的以太坊分类账都是相同的。
共识算法
共识算法为区块链生态系统提供了基本规则,一部分节点应用程序也应用共识算法。共识算法可以确定区块链系统为所有节点获取共享分类账的方式。区块链生态系统根据需要和目的使用不同的共识算法。比特币需要几分钟才能达成对于分类账的共识(通过全节点验证分类账),但 Ripple 能保证在短短几秒内达成共识。
验证分类账的主要方法是通过时间证明,工作量证明和权益证明。在允许他们参与建立共识之前,可以使用不同的方法来验证节点。建立不同的共识算法,所需的共识算法建立费用和交易费用会有所不同。
1.2 区块链系统的类型
区块链生态系统主要有两种类型:公共和私有。
在公共区块链中,只要用户安装了相关区块链节点应用程序,便可以访问系统并在其中进行交易。众所周知的比特币和以太坊便是公共区块链。
在联盟区块链中,用户参与前需要通过验证。例如,网络启动器需要对使用网络的新用户进行验证。所以只有“已验证”或“受邀”的用户才能访问系统。联盟链通常应用于企业的商业运营。目前,最流行在 Hyperledger Fabric 平台上构建区块链联盟。在 IBM 网站上有基于 Hyperledger Fabric 平台的联盟链构建案例。
公共区块链适合普通用户使用,私有区块链一般供公司内部使用。
1.3 区块链的演变
2008 年,Satoshi Nakamoto 首次推出比特币。但是,Nakamoto 并不是第一个想到使用数字现金或者使用分布式统进行直接交易的人。可以说比特币是站在密码领域这个巨人的肩膀上的。Stuart Haber 和 W. Scott Stornetta 于 1991 年描绘了一个与区块链基本相似的密码保护链块。
1997 年 Hashcash 工作量证明算法问世,目前这个算法是比特币挖矿系统的核心。Wei Dai 早在 1998 年就提出了一个名为 “B-Money” 的分散式电子现金系统,该系统通过工作量来“创造”金钱。Satoshi Nakamoto 创作的一篇关于比特币的文章中引用了 B-Money。然而,Nakamoto 是第一个将这些成就融合在一起的人,并将分布式点对点系统(现称为区块链)带入生活,从而实现数字货币交易。
从 2008 年问世至今,区块链生态系统发生了许多变化。这些系统分别是区块链技术的几个“代”。区块链生态系统总共有四代,每一代都试图解决不同的问题,为区块链技术增加新的功能。接下来我们将更详细地介绍每一代区块链生态系统,以便让您了解四代区块链系统之间的不同以及新一代的系统到底带来了什么样的新功能。
第一代
Bitcoin, Litecoin, Monero, Dash 等均为第一代区块链系统。
第一代区块链系统是第一批应用点对点分布式网络的系统。Satoshi Nakamoto 在比特币的白皮书中提到,这些系统可以在两方之间直接进行“电子现金”交易,无需通过第三方金融机构。第一代区块链作为完美的开源支付系统,无需第三方参与。
第二代
Ethereum,NEO,Qtum 等均为第二代区块链系统。
系统可以为区块链添加了定制交易的智能合约技术,还扩大了区块链上的交易记录,融入了编程语言。以太坊为用户提供了创建“智能合约”的机会,使用 Solidity 语言添加几行代码来设置区块链系统内可定制交易的监管规则。
第三代
Bitshares,Lisk,ARK 等均为第三代区块链系统。
第三代区块链主要解决可扩展性的问题。随着比特币和其他系统的用户量不断壮大,需要进行大量交易,系统出现了低效率的问题。
为了解决扩展问题,第三代区块链在共识算法中引入了权益证明方法,该方法比传统的权益证明或价值证明方法更高效,更简洁。简而言之,它的工作原理如下:系统上所有的节点都有相同的投票权,然后他们选举出少量的“证人”。证人是挖矿和监控网络的人。获得挖矿机会是证人参与监测和建立共识的动力。通过少数目击者建立共识比通过所有节点建立共识更快,更高效,从而解决了可扩展性问题。
第四代
IOTA,EOS 等均为第四代区块链系统。
这些系统也解决了可扩展性这个问题,但解决方式与上一代不同。
EOS 通过构建一个“类似操作系统”的网络来解决可扩展性问题,该网络被委托权益证明,来实现水平扩展和垂直扩展。IOTA引入了一个新的区块链系统来解决问题,新的区块链系统完全不同于已经存在的区块链系统。新的区块链系统应用 Tangle 网络,是一种无区块,可扩展,轻量的分散式分类账。因为系统的共识算法,并且Tangle网络的内在组成决定网络可以实现自我调节。
值得注意的是,第四代区块链仍然没有达成共识。有些人声称区块链共识已经出现,而另有一些人说像 EOS 和 IOTA 这样的项目并不是新一代的区块链技术,因为它们只是解决了与第三代区块链相同的问题。
您可以关注另一个项目:闪电网络(Lightning Network)。于 2018 年 3 月 19 日发布测试版,闪电网络正在引入非连锁交易。基本上,目前所有基于区块链的项目都使用链上交易:用户之间的所有交易信息都被写入区块链网络的公共分类账中。将交易信息写入分类账中需要时间,并且只有通过全节点才能验证每笔交易。这就是为什么交易处理时间相对较长(比特币至少需要 10 分钟),而且交易费用高。
闪电网络是一个“第二层”网络,将在区块链的基础上进行脱链交易。工作方式是这样的:两个愿意进行交易的用户将通过受保护的支付渠道直接进行交易(这是中本聪在比特币开发初期所设想的)。交易之后,这两个用户会将一些加密货币放入多重签名地址,并更改其他用户从该地址兑换的金额。每个参与方都可以随时关闭这个支付渠道,两个用户的最新余额将被写入公共账中。这项技术可为用户提供立即付款服务,减少交易费用。并且保护了用户隐私,因为并非所有的小额交易都被写入公共账中,只有最后一笔余额记录公共账。虽然闪电网络仍处于测试阶段,但这个项目非常具有前景。诞生的阿尔特币可能会“杀死”比特币,因为更便宜,更快速的交易就是它的主要优势。
2. 区块链发展简介
我们已经了解了什么是区块链,接下来让我们来仔细研究一下区块链的发展。 区块链技术最受欢迎的应用之一是 Dapps (分散式应用程序)。这些基本都是适用于区块链上的应用程序。听上去似乎很酷!
你也许会想,在区块链系统饱受关注的情况下,为什么只有这么少的 DApps 可用?答案很简单:并不是所有即将成功开发 DApp 的公司都已经把所有组件准备好。
2.1 DApp 开发面临的主要问题
DApp 开发需要类似于网络应用程序开发所需的工具:计算,文件存储,外部数据,货币化和支付。到 2017 年底,大约已经筹备完成 70%,货币化和支付工具已经开发完全并可以开始运营,但计算,文件存储和外部数据组件仍在开发中。
在很多人使用的 DApp 时,堆栈开发相关的问题才会变得很重要,需要良好的可扩展性来支撑。所以这些问题暂时不会阻止 DApp 的创建,只是目前难以扩展它。这个行业发展非常迅速,今年早些时候堆栈可能会全面完成,我们便可以看到 DApp 数量的爆炸式增长。如果你也想参与 DApp 的未来,那你需要从开发简单的 DApps 开始。我们希望这篇指南能为您提供帮助。
正如您在下文将要看到的那样,创建一个简单的 DApp 是可以实现的,并没有那么困难。我们将指导您完成这个过程,以便您可以获得区块链的实践经验。本指南将会一步一步地进行指导,即使您之前没有任何编程经验,您也能够理解每个步骤。当然,如果您曾经使用过 Solidity 或者尝试编写过一些智能合约,那对于创建 DApp 来说,肯定有很大帮助。
2.2 在区块链上开发 DApp 需要的工具
首先,我们来看看 DApp 开发需要的主要工具:
Geth:用于运行以太坊全节点的命令行接口。简而言之,这是一个连接以太坊区块链的应用程序。以太坊在此为所有操作系统提供安装说明。您将需要它,因为以太坊区块链是开发 DApps 的主要平台。
Solidity:在以太坊编写智能合约的编程语言。您可以在其网站上找到安装说明。您还需要安装 Solidity 编译器才能使用 Solidity 语言编写代码。
Truffle: DApps 的开发环境。您将需要创建,运行和测试所有分散的应用程序。Truffle 的安装方法见此超链接。
Ganache:这是一个区块链模拟器。您可以使用它来测试您的 DApp,而无需连接到真实的以太坊区块链上。此超链接可安装 Ganache。
2.3 如何开发 DApp
现在让我们来看看开发 DApp 需要进行的主要步骤。不会涉及太多关于编码的细节,我们的目标是概述 DApp 开发到底是什么样子的。如果您想按照所有步骤进行编码,通过阅读每个步骤中的超链接也可完成。
1.安装 Geth。如上所述,您将需要它连接到以太坊的区块链。
2.启动以太坊节点,并连接其他节点,开始下载区块链。当您安装了 Geth 时,可以通过命令行完成区块链的下载。区块链下载大约需要10-15分钟,具体时间取决于您的互联网网速。在控制台的输出中,您可以看到区块号。下载完成后,输出中的区块号应接近此页面上的区块号。
3.如果你还没有安装 Truffle,那么现在安装。
4.创建一个 Truffle 项目,Truffle 将创建运行整个堆栈 DApp 所需的文件和目录,还会创建一个示例应用程序。
5.下一步是使用 Solidity 语言创建一个智能合约代码。这里有一个案例,关于如何创建一个简单的“投票”智能合约。
6.您需要用 Solidity 语言将代码添加到 Truffle 项目中。这里可以在这里找到详细的解释。
7.继续开发您的智能合约。为此,您需要一个测试账户和一些以太币。更多关于设置账户和获取以太币的详细信息。
8.当你有一个帐户和以太币时,在区块链上运行您已经准备好的合约。这里有个关于在测试网络上开发合同的教程。这个过程需要几分钟时间,具体时间取决于您合约的复杂程度和您计算机的容量。
9.试着通过 Truffle 您的合约。如果一切正常运行,说明您的合同是完全正常的,您可以继续下一步。
10.启动服务器。如果一切正确,您将看到一个网页,显示您在合约中编写的内容,现在您便可以运行您的 DApp。
如果您已经按照教程中的所有步骤进行操作,那么您便可以创建了一个本地运行的 DApp。希望本教程能够让您体验在区块链上开发应用程序。