从1.0的比特币到2.0的以太坊,区块链都经历了什么

不容错过的区块链报道

——

区块链1.0 —— 比特币

区块链是一个分散的全球型数据库,将加密信息块一块一块链接起来。

比特币是一个分散的计算网络,用户可以在以比特币网络上进行记账。

比特币,将区块链的概念引入了我们的世界。比特币也是区块链技术中,最最知名的使用案例,其数字货币BTC,也是当之无愧的币王。

比特币如何利用区块链?

比特币使用区块链,存储比特币的交易信息。每一笔交易,都通过区块链和之前的交易相连接。

比特币,由POW挖矿实现共识机制,用哈希函数和UTXO确保数据的不变性和完整性。

1. POW(Proof of Work)

即工作量证明又称挖矿。比特币基于PoW算法来实现其共识机制。即根据挖矿贡献的有效工作,来决定比特币的分配。

2. 哈希函数(Hash Function)

也称为散列函数,是一个密码学函数,是单向函数。即你可以从输入得到输出,但如果只有输出,则无法得到输入值,且每个输入仅生成唯一的一个输出。

挖掘过程中,比特币使用哈希函数将新的交易编写到区块链中。

Hash(上一个Hash值、序号X、记账时间、交易记录) = Hash值

每个区块,都包含一个Hash值,它由上一个区块的Hash值和当前账页信息作为输入,计算得出。从而保证了区块链:

便与验证: 只要验证最后一个区块的Hash值,就相当于验证了整个账本。

不变性:任何一个交易信息的更改,会让所有之后的区块的Hash值,发生改变。从而无法回滚记录或者删除过去的记录。

比特币的不变性,用户无法回滚交易或删除过去的交易,避免了“双重支付”, 确保了数字货币的信誉,最终使得比特币具有价值。

比特币没有账户,使用UTXO

UTXO(Unspent Transaction Output):指未花费的交易输出。它是比特币交易生成和交易验证的一个核心概念。

每笔比特币交易都有输入和输出,别人付给你的钱是“交易输入”,你收到的钱是“交易输出”。一笔笔交易,构成了交易链,所有合法的比特币交易都可以向前追溯到一个或多个交易输出,这些链条的源头当然是——挖矿的奖励,末尾则是当前未花费的交易输出。所有未花费的输出——即整个比特币网络的UTXO。

所以,比特币网络中,并没有账户的概念,并没有比特币余额的说法,只有遍布全网区块链的UTXO。

区块链 2.0 ——以太坊

以太坊是一个分散的计算网络,让用户可以在以太网上运行智能合约和分散应用程序(DAPP Decentralized Application)。这些应用程序,将在没有中央服务器的情况下运行。

以太坊如何利用区块链?

以太坊使用区块链,存储有关在网络上运行的应用程序(DAPP)的信息。区块链网络会跟踪代码的执行情况以及所有应用程序所处的状态。

1. DAPP

以太坊网络就像手机的IOS系统和Android系统, 是平台系统,是底层的生态环境。DAPP就是平台上,衍生的各种分布式应用,也是区块链世界基础服务的提供方。DAPP之于区块链,就像APP之于IOS和Android。

2. 智能合约

智能合约是DAPP和区块链数据库之间的桥梁,发挥区块链"api连接器"的作用。打个比方,Dapp就像一个"启用区块链"的网站,而智能合约允许它连接到区块链上。

传统的Web应用程序,使用HTML,CSS和JavaScript来渲染页面。它还需要用API,从数据库中获取数据。当你打开Facebook网页,该页面会通过API来获取你的个人信息(姓名、性别等等),并将其显示在页面上。结构如下:前端→API→数据库

而Dapp与传统的Web应用程序非常相似,前端使用完全相同的技术来渲染页面。一个关键的区别是,DAPP不使用API访问数据库,而是通过智能合约,访问区块链数据库。结构如下:前端→智能合约→区块链

ETH选择了账户

账户余额制

以太坊为了运行DAPP,放弃了UTXO,选择了账户余额制。因为使用账户有如下好处:

节省大量的空间,每笔交易只有一个输入、一个输出、和一个签名。

更大的可替代性、编码简单,以及轻客户端。

BTC和ETH最大的不同

它就是——BTC用区块链记账和使用UTXO,而ETH用区块链运行程序代码和使用账户余额制。

为什么区块链1.0不能运行程序

而区块链2.0可以?

区块链2.0, 是可编程区块链,我们可以在区块链2.0上面,运行智能合约、DAPP(分散的应用程序),而区块链1.0不行。那么,为什么区块链1.0,不能运行程序?

因为,区块链1.0使用的脚本语言,不是图灵完备的。

什么是图灵完备

如果一门编程语言,给它足够时间,它就可以用计算机完成任何计算任务,解决任何计算问题,那么这门语言就是图灵完备的。如果需要解决任何问题,就需要运用到——“循环”、“条件控制”等语句。

什么是循环

循环是计算机科学领域的一种常见的控制流程,循环可以告诉计算机去反复执行任务。

比如:“点一百万次赞!” 点赞,就是任务。 循环:

点赞

点赞

点赞

点赞

......

共计一百万次。

什么是条件控制语句

就是满足一定条件,才执行任务。

比如,点赞数小于100,才点赞。

这里的条件就是:点赞数

比特币的脚本语言,没有循环语句和条件控制语句

因此,我们说:比特币脚本语言,不是图灵完备的。这导致比特币脚本语言,有一定的局限性。

当然,由于这些局限性,黑客就没办法使用这种脚本语言,写一些死循环(会造成网络瘫痪),或者一些能导致DOS攻击的恶意代码,也就避免了比特币网络受到DOS攻击。比特币的开发者,也认为核心区块链,不应该具备图灵完整性,来避免一些攻击和网络堵塞。

但是,也正是由于这些局限性,比特币网络,没有办法运行它复杂的程序了。而,ETH使用的语言,具备了图灵完整性。

打个比方:

区块链1.0就像古老的电话,只有打电话接电话这种核心功能。

而区块链2.0就像智能手机,上面可以运行各种各样的APP,可以运行游戏APP,可以运行微信,极大地影响了人们的生活。

在区块链上运行程序,到底是什么意思?

我们知道,在电脑上运行程序,是由CPU执行一系列的任务。在区块链上运行程序,是在区块链网络上运行各个任务。

需要注意的是,区块链网络的每个节点,都会记录:

1. 所有交易的历史

2. 所有智能合约的历史

3. 所有智能合约的当前状态

什么是状态?

你在淘宝上,购买一件商品,那么,会有显示如下的状态,已下单、已出库、已发货,你购买的进度,就是一个个的状态。

在区块链上运行程序,所有节点会进行同步,让智能合约所处的状态保持一致。

DAPP到底是什么?

DAPP是分散应用程序(decentralized application)的缩写,指:运行在分散式网络上的应用。

以太坊网络就像手机的IOS系统和Android系统, 是平台系统,是底层的生态环境。DAPP就是平台上,衍生的各种分布式应用,也是区块链世界基础服务的提供方。

DAPP之于区块链,就像APP之于IOS和Android。

DApp =前端+智能合约

一个DApp的前端,可以是任何语言编写的前端代码和用户界面(就像一个应用程序)。前端可以调用后端。

前端→智能合约→区块链

智能合约是DAPP和区块链数据库之间的桥梁,发挥区块链“api连接器”的作用。

打个比方,Dapp就像一个“启用区块链”的网站,而智能合约允许它连接到区块链上。

传统的Web应用程序,使用HTML,CSS和JavaScript来渲染页面(前端)。它还需要用API,从数据库中获取数据。比如,当你打开Facebook网页,该页面会通过API来获取你的个人信息(姓名、性别等等),并将其显示在页面上。结构如下:前端→API→数据库

而Dapp与传统的Web应用程序非常相似,前端使用完全相同的技术来渲染页面。

一个关键的区别是,DAPP不使用API访问数据库,而是通过智能合约,访问区块链数据库。结构如下:前端→智能合约→区块链

DAPP的特点

首先,用户的隐私得到很好的保护,信息被加密存储于区块链上。

其次,网络节点去中心化操作,所有节点同步DAPP各种状态。

第三,通过标准算法生产代币,代币根据应用场景使用,有贡献的用户可获得代币奖励。

前一阵子,火爆的以太坊的云养猫应用CyptoKitties,就是DAPP!

-END-

*文章为作者独立观点,不代表深创链立场

作者:爱莉莎(币乎专栏作家,程序媛,专案经理、小说写手、科普作者、俩娃妈、币乎账号:爱莉莎)

责编:张昆

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180427G16VRE00?refer=cp_1026

扫码关注云+社区