联盟链Fabric和公有链比特币的区别

联盟链Fabric和公有链比特币的区别

最近研究了一下联盟链的代表超级账本这个开源项目,准备再做一个Fabric的源码分析系列,本文先总结一下Fabric和比特币的一些关键性的区别或者也可以称为改进和创新,阅读本文前建议读者先了解下比特币源码或者对比特币原理有初步认识,可以阅读笔者的比特币源码分析系列(还没有完成)。

区别一:引入了msp管理机制

比特币中的交易是发送方通过私钥签名交易,把交易内容和公钥一起广播出去,接收方收到交易后通过公钥对交易做签名验证来完成交易的认证。具体过程如下图:

其中每一个参与个体都会生成一个公私密钥对,这个是谁都可以生成的,每一个公私密钥对都是被整个比特币网络所接受的,所以是一个开放的体系。而联盟链对此做了限制也就是msp(Membership Service Providers)其实简单来理解就是有一个公钥池,所有联盟链的网络中出现的公钥必须在公钥池里,来保证参与网络的成员的是可信的。

区别二:图灵完备的程序语言支持

比特币体系下支持了一套比较简单的指令集合,这个指令集仅仅提供了一些最基本的验证等指令,非图灵完备。但是以太坊发明后,区块链就进入了2.0时代,其中最标志的的改进就是引入了图灵完备的编程语言。而联盟链沿用了这个改进的技术方案。其中Fabric支持比较好的是go语言的脚本支持(Fabric本身就是go语言开发的),具体的实现本文简单的给出一个架构图,后续文章会详细介绍,其中图中的链码就是go语言开发的在区块链体系下的协议脚本,也称为智能合约。

如上图,用户开发的链码(智能合约)会被放在一个docker虚拟机中执行,链码的api调用会通过调用api代理客户端进而通过网络通讯,调用到系统链码,最后作用到数据库中。

区别三:引入了状态数据库

在比特币体系中,只有区块一个数据库,数据库中存放的是区块,其实是一个区块链的结构,而账户的资金状态信息是通过utxo这个机制来保证的,其实类似于复式记账法的一种机制,数据库中并不记录你当前账户的余额,只是记录每一笔交易,从哪儿来到哪儿去,一个账户想花钱,只能先找到一笔输出到这个账户的交易,然后生成一笔输出到别人的交易。说的有点绕,具体可以参考笔者比特币源码系列中关于交易的讲解。

而Fabric中维持了一个状态数据库,记录了每一个账户的余额(或者叫key-value状态更确切),虽然在utxo体系中通过一笔一笔的交易也可以构造出一个这样的数据库(其实比特币也是这么做的,只不过这个数据库只在内存中),但是Fabric把这个数据库专门隔离了出来,这样最起码对链码的编写十分有利方便。

区别四:引入了通道的概念

在比特币中只有一个大家共有的区块链,而Fabric引入了一个叫做通道的概念,每一个通道都有自己独有的区块链,各个通道之间互不干涉,相当于比特币是一个支持单进程的系统,而Fabric支持了多进程。

区别五:去除了pow的共识,改用了order模式

比特币一直被某些人诟病的是它的算力浪费,比特币体系的维持是通过挖矿来实现的,而挖矿其实就是不停的改变一个字段的值,让整个区块的hash值前n位为0,这样做的目的其实是让区块生成是需要工作量的,保证了它的串改难度高。比如一个黑客想串改10个区块的内容,他就要先于网络中其他的节点先构造出来10个hash前n位是0的区块,这个工作量是巨大的,在特定的时间内很难实现。

Fabric将挖矿的方式变了,用order方式,简单来讲就是把挖矿构造一个hash前n位为0的区块,变成了构造一个有order节点签名的区块。谁先得到了order的签名谁就挖到了矿。(不过这里其实挖矿集成到了order服务器上,只有order有权限挖矿,它把交易收集起来,排序,组成区块,签名,然后广播出去)

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏极客编程

一个EOS区块链RPC API接口的PHP SDK包

作为我们Block Producer对社区利益的承诺的一部分,我们希望专注于构建有助于提高EOS平台采用率的工具/应用程序。与大多数大型应用程序一样,当你只有少...

1521
来自专栏数据库

DATUM和BigchainDB

2017年12月14日OKEx上线DAT币。该币的官方网站是datum.org。通过阅读其白皮书,发现该币的技术实现依赖一个叫做BigchainDB的技术,号称...

5238
来自专栏华仔的技术笔记

Ethereum的理解

3675
来自专栏区块链大本营

嘘!4种方法,让区块链与内容「相结合」!

3096
来自专栏友弟技术工作室

通过一个App Demo的演示深入理解区块链运行原理

2884
来自专栏FreeBuf

空手套白狼?USDT 假充值逻辑缺陷漏洞利用分析

6月28日,慢雾科技发布了一条针对 USDT 的预警和漏洞分析,提醒各大交易所尽快暂停 USDT 充值功能,并自查代码是否存在该逻辑缺陷。全文如下:

3273
来自专栏腾讯云区块链

智能合约简介

在Fabric中,chaincode(链码)也称为智能合约,是用高级语言编写的一段代码。代码主要是读取和操作账本上的数据。 智能合约是一座连接用户应用和Fabr...

2461
来自专栏区块链入门

第三课 以太坊术语说明及开发者资源列表

也称钱包,提供账户管理、挖矿、转账、智能合约的部署和执行等等功能,以太坊节点利用以太坊客户端接入到以太坊网络。 现在以太坊客户端主要有:Wallent/ist ...

772
来自专栏比原链

人人都应学习的公链知识——比原总体架构

PPT链接:introduction-bytom-architecture-2018

981
来自专栏区块链大本营

20分钟,我用简单的Python代码创建了一个完整的区块链!想学吗?

这是篇技术文,我们会用Python一步步搭建一个完整的区块链。不过,在此之前,咱们还是先说说你什么你该学习如何从零搭建一个区块链。

1041

扫码关注云+社区