你可能已经听过“区块链”和“智能合约”这两个术语,但它们实际是什么意思?我们将揭开其神秘面纱,向你解释实用的区块链解决方案,然后给你一些如何创建它们的指导。这是一个高层次概述,包括:
区块链基础
为什么使用区块链?
什么是区块链?
区块链如何工作?
以太坊区块链
什么是以太坊?
什么是智能合约?
以太坊网络
分布式应用(Dapps)
为什么使用区块链?
当有很多个位于世界各地的参与方,它们之间在无法互相信任、但需要共享数据和传输价值情况下,就需要使用区块链了。金融界将这种信任描述为交易对手风险,即其他参与方最后不履约的风险。区块链通过一种创新的数学系统、密码学和点对点网络,完全解决了交易对手风险。在我们详细了解它们的工作原理之前,我们需要回顾一些历史,以及区块链产生的必要性。
第一个数据库
在20世纪60年代,第一台计算机式数据库出现。这些硬件占据了很多房间,而互联网还有几十年才出现,数据通常存储于中心的实体位置。这是一种中心化方式,意味着数据的位置和访问都由中央机构控制。中心化系统可由恶意角色从内部或外部控制,所以我们相信这些系统拥有者有足够意愿和资源来保护数据的安全性和完整性。中心化数据库在今天依然是最常见的,支持着大多数在线和离线应用。
自我托管博客就是中心化数据库的一种常见形式。所有者为了让文章更好,可以进行事后编辑,或者无需追索就可以审查用户。即使拥有一名正直的所有者,黑客也会渗透到服务器并实施恶意行为。如果没有数据库备份,那就几乎无法确认哪些数据被修改或损坏。
如下图所示,每个服务器边上的箭头都是需要信任的连接。
共享数据需求
共享大量数据是非常昂贵和麻烦的。我们可以通过在需要共享的各参与方分配数据来缓解这种负担。读 / 写由这个群体中的一方或多方控制,因此受制于类似中心化数据库的变化方式。
现代共享数据库使用技术来减少这种损坏,其中部分技术与区块链重叠。根据不同的共享数据库系统,它可以有以下特点:
-
永久性:创建一个新拷贝并将旧数据保留为历史记录,而不是直接覆盖旧数据。该记录可以被访问,用于证明某一时刻存在的数据。
-
共识性:对于要共享的数据库,所有参与方必须就其内容达成一致(达成共识)。有很多种达成共识的方法,其中一种(工作量证明),我们将在下一节区块链中讨论。
区块链具有以上特点并将其运用到更深层次,完全解决了信任问题。
什么是区块链?
区块链是核心是一个共享数据库,该数据库称作分类账本。就像一个银行,简单的区块链分类账本会跟踪货币(这里指加密货币)所有权。与中心化银行不同,每个人都有该账本的拷贝,而且可以验证彼此的账户。这就是区块链的分布式(或去中心化)特点。每个包含账本拷贝的连接设备被称作节点。
区块链网络中账户之间的交互被称作交易(Transactions),它们可以是货币交易,例如发给某个人以太坊中的加密货币以太币;它们还可以是数据传输,例如评论或用户名。区块链上的每个账户都有唯一的签名,让每个人都知道是哪个账户激活该交易。
比起之前的数据库,区块链除了解决信任问题,还有以下主要优点:
-
完全去中心化:读 / 写数据库是分散和安全的,单独某个人或某个组无法控制区块链。
-
极致容错:容错是系统处理损坏数据的能力,虽然容错能力不是区块链特有的,它将此概念逻辑化,让每个人共享数据库来验证其变化。
-
独立验证:交易可以由任何人验证,无须第三方,这有时也被称作脱媒。
现在我们对区块链价值有一定了解,下面让我们来深入了解它们的工作原理。
区块链如何工作?
在一个公链中,任何人都可以读写数据。读取数据是免费的,但向公链中写数据是需要花费的。这种花费有助于阻止垃圾内容,并通过支付保护其安全性。网络上的任何节点都可以参与称作挖矿的方式来保护网络。由于挖矿需要计算能力和电费,矿工们的服务会得到一定报酬。
挖矿
网络中的每个节点可以选择参与挖矿。通常,节点的矿工需要竞争解决保护区块链内容的数学问题。每个区块都是刚创建的待处理交易集合,需要添加进链条中最新的区块后面。数学问题比赛的获胜者创造了下一个区块,并收到一些加密货币作为奖励。这激励了节点来保护网络,防止太多权力掌握在任何一个矿工手中。
哈希
一旦新区块被开采出来,其他矿工将被通知,它们开始验证并将这个新区块添加到其链条的副本中。我们之前提到的数学问题称作加密哈希(或简称哈希)。哈希函数是一个特殊单向的过程,它接收数据并返回一个表示该数据固定长度的字符串。虽然原始数据不能从其哈希值中再现,但相同数据始终产生相同的哈希值。因此,未验证的数据可以使用相同函数进行哈希,并与原始数据比较。 如果它们相同,则数据验证通过。
一旦一半以上的矿工验证了新区块,网络则就新区块达成共识,并成为链条中永久的一部分。现在这个数据可以很容易被非采矿节点下载(同步),且其有效性得到保证。
这是整个可视化过程:
1.Bob 尝试向 Alice 发送 1 ETH。
2.Bob 和 Alice 的交易与其它自上个区块之后发生的交易绑定在一起。
3.矿工们竞争验证新交易集合产生的区块。
4.成功创建新区块的矿工将会得到报酬。
5.交易通过验证,Alice 收到 1 ETH。
什么是以太坊?
以太坊不仅是一个数据库,它还允许你在区块链的可信环境中运行程序。以太坊在区块链上搭建了一个名为 EVM(Ethereum Virtual Machine,以太坊虚拟机)的虚拟机。EVM 允许在区块链上验证和执行代码,为代码在每个人的机器上以相同方式运行提供保障。这些代码包含在智能合约中(更多如下)。
除了追踪账户余额,以太坊使用相同方法将 EVM 的状态保存在区块链上。所有节点处理智能合约,来验证合约本身及其输出的完整性。
什么是智能合约?
智能合约是指在 EVM 上运行的程序,它们与其他编程语言十分相似。智能合约可以接受和存储以太币、数据、或两者组合。然后,使用编入合约的逻辑,它可以将以太币分发到其他帐户、甚至其他智能合约。你可以看到复杂系统是如何从这种灵活性中发展起来的。
智能合约是用 Solidity 语言编写的。Solidity 是静态类型,支持继承、库和复杂的用户定义类型等功能。它的文件扩展名是“.sol”。 Solidity 的语法类似于 JavaScript。 我们将在以后教程中介绍 Solidity 基础知识,但你也可以通过查看文档来深入了解。
这里继续 Bob 和 Alice 的智能合约案例。这一次,他们正在使用托管合约(一个货币储存空间,储存一定货币直到满足某条件),以便在最终交易之前存储其以太币。
1.Alice 想雇佣 Bob 来建立一个露台。为了让双方保持诚实,Alice 同意在托管合约中存放露台款项,Bob 同意在合约中存入同等金额。
2.Bob 完成了露台,Alice 很激动!她许可智能合约释放资金。
3.Bob 收回了 1 ETH 的抵押,和 Alice 支付的 1 ETH
在更复杂的托管合约中,如果 Bob 没有完成露台,或他完成的非常糟糕,可以将规定写入合约代码中,以释放 Bob 给 Alice 的抵押。
以太坊网络
到目前为止,我们已经描述了主要网络(或主网),以太坊的公链。任何人都可以创建一个节点并开始验证交易;因此,它是高度安全的。链上的数据,包括账户余额和交易,都是公开的。网络上的以太币具有市场价值,并可以交换其他数字货币、或例如美元的法定货币。
除了主网,还有测试网络(本地和公有),以及私有网络。
本地测试网络
以太坊区块链可以在本地进行模拟开发。本地测试网络可以即时处理交易,并且以太币可以根据需求进行分配。存在一系列的以太坊模拟器;我们推荐我们自己的:Ganache。
公有测试网络
这些测试网络是存在和公开的。这些网络上的以太币仅用于测试目的,没有货币价值。由于这些网络是公有的,所以货币是免费的,开发人员在最终部署以太坊应用程序到主网之前,需要使用它们测试。
* Ropsten:由以太坊基金会创建的官方测试网络。
-
Kovan:一种使用“权威证明(Proof of Authority)”共识方法的公有测试网络。这意味着其交易由选定人员进行验证,从而只需要4秒的出块时间。此测试环境上的以太币供应也受到控制,以减轻垃圾内容的攻击。这个链条的信息是公开的。 Kovan 是由 Parity 科技创建的,需要他们的 Parity 以太坊客户端。
-
Rinkeby:一个同样使用权威证明的官方测试网络。 任何以太坊客户端都可以访问,由以太坊基金会创建。
私有 / 企业网络
私有以太坊网络允许各参与方共享数据,而不使其公开访问。私有区块链是一个很好的选择,当:
-
分享敏感数据,如医疗保健记录,这是不允许或不希望公开的。
-
小团体需要更大的容量。随着网络规模的缩小,私有区块链可以扩展到更大的规模,并处理比公链更重的读 / 写量。
基于以太坊的私链同样运行EVM,因此也兼容 Truffle 和其他开发工具。摩根大通最初开发的Quorum就是一个非常好的例子,也与Truffle兼容。更多关于在Quorum上使用Truffle的内容请访问我们的博客。
Dapps(分布式应用程序)
使用智能合约的应用程序大多数(虽然不是全部)的后端处理称为 dapps,分布式应用程序的缩写。这些 dapps 的用户界面使用包括你可能已经知道的语言:HTML,CSS和JavaScript。这些文件可以托管在传统可信的 Web 服务器上,或无需信用的分布式文件服务上,如 Swarm 或 IPFS。
鉴于以太坊区块链的好处,dapp 可能是许多行业的解决方案,包括但不限于:
- 档案保存
- 货币(金融)
- 供应链
- 房地产
- 交易市场
…这种例子不胜枚举。我们将在不久后提供如何建立自己的 dapps 的详细教程,所以将本教程加入书签,并继续关注吧。
原文链接: http://truffleframework.com/tutorials/ethereum-overview
作者: Truffle Team
翻译&校对: Nina & Elisa