联盟链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 条评论
登录 后参与评论

相关文章

来自专栏极客编程

智能合约用solidity编程语言开发一个以太坊应用区块链投票实例

智能合约开发用solidity编程语言部署在以太坊这个区块链平台,本文提供一个官方实战示例快速入门,用例子深入浅出智能合约开发,体会以太坊构建去中心化可信交易技...

882

内部区块链的优缺点

我经常转发与银行或大型企业实施的区块链实验有关的新闻,并提出这样的疑问:”他们为什么会在这种内部场景使用区块链呢?“

3777
来自专栏丑胖侠

以太坊实战-再谈nonce使用陷阱

在《以太坊实战之如何正确处理nonce》一文中我们介绍了nonce的基本概念和使用方法。也提到了它能够覆盖之前交易的特异功能。但是那只是nonce的冰山一角。今...

44110
来自专栏极客编程

用Solidity语言通过以太坊钱包开发hello world示例

使用以太坊钱包开发实现经典的HelloWord智能合约类。本文中,我们将看到如何编写简单的合约并将其部署到区块链上。我们还将通过发送和读取数据来了解如何与我们的...

511
来自专栏CDA数据分析师

以太坊是什么丨以太坊开发入门指南

原文地址:https://www.cnblogs.com/tinyxiong/p/7878468.html

590
来自专栏智能计算时代

什么是区块链

区块链是支撑比特币的基础技术,是过去一年的流行语之一。几乎每个人都在谈论区块链,而且有充分的理由。分布式账本是区块链技术的艺术术语,它提供了一个令人兴奋的新方法...

2694
来自专栏月色的自留地

比特币核心概念及算法

1575

分区化:以太坊扩展性问题的解决方案?

太坊区块链毫无疑问具备创新的本质。其智能协同功能促进了分布式应用程序(DApps)和原始币(ICOs)的发展。然而,尽管迄今为止的以太坊已经取得了短期的成功,但...

60915
来自专栏阿仁的商业视界

十一张图解析区块链原理

区块链概念很火,尤其是2018年伊始在各互联网指数上热度都极大上扬。区块链到底是怎么回事?区块链原理到底是什么?本文就是为揭开区块链原理而来,让我们仔细研究下区...

6016
来自专栏liuchengxu

终极指南:为什么以太坊不仅仅一个是加密货币

尽管比特币(Bitcoin)和以太坊(Ethereum)是经常被一起提及的两个词,但实际上,比特币与以太坊有着很大的区别。它们唯一的共同点是,以太坊也是一个在区...

992

扫码关注云+社区