区块链学堂——公有链、私有链、联盟链、侧链、互联链
转载请注明出处,微信公众号:叶先生的鱼
要设计一个区块链系统架构,首先要针对特定的用户需求和应用场景,选择或者定制最合适的区块链类型。
区块链严格定义上被划分为3种类型:公有链,私有链、和联盟链,但是在实际应用中单一的某种链常常无法满足用户需求,就出现了多种类型的结合,比如私有链+联盟链、联盟链+公有链等不同组合形式,最后产生了侧链和互联链。掌握了这5种区块链类型的各自特点,是理解和设计区块链网络系统架构的基础和核心,其重要性不言而喻。
一:公有链(Public blockchains)
公有链是对所有人公开,用户不需要注册和授权就能够匿名访问网络和区块,任何人都可以自由加入和退出网络,并参与记账和交易。
公有链是真正完全意义上的去中心化区块链,它通过密码学(非对称加密)算法保证了交易的安全性和不可篡改性,在陌生的网络(非安全)环境中,建立了互信和共识机制。在公有链中共识机制一般是工作量证明(POW)和权益证明(POS)。
公有链因为人人可参与,无需授权的特点又被称为非许可链,即不需要验证身份即可参与一切网络活动。目前比特币、以太坊、超级账本、大多数山寨币以及智能合约都是建立在公有链上,其中公有链的始祖是比特币区块链。
公有链适用于数字货币、电子商务、互联网金融、知识产权等应用场景。
二:联盟链(Consortium blockchains)
联盟链仅限于联盟成员,因其只针对成员开放全部或部分功能,所以联盟链上的读写权限、以及记账规则都按联盟规则来“私人定制”。联盟链上的共识过程由预先选好的节点控制,一般来说,他适用于机构间的交易、结算、或清算等B2B场景。比如人民银行开发一个基于联盟链的结算、清算系统,工建中农等银行作为联盟成员加入这个系统,获得相应的授权,就可以实时进行不同银行之间的实时结算、清算,与现有的中心化系统相比,这样不仅大大提升了结算、清算效率,几乎不需要人工参与,还能大大降低结算、清算成本。联盟链几乎不采用工作量证明共识机制而是采用权益证明或PBTF等共识算法。
联盟链由参与成员机构共同维护,并提供了对参与成员的管理、认证、授权、监控、审计等全套安全管理功能。2015年成立的R3联盟,就是银行业的一个联盟链,目前已加入的成员多达40多个,包括世界著名的银行摩根大通、汇丰、高盛等。
联盟链适用于行业协会、高级别机构组织、大型连锁企业对下属单位和分管机构的交易和监管。
三:私有链(Private blockchain)
私有链对单独的个人或实体开放,仅在私有组织,比如公司内部使用,私有链上的读写权限,参与记账的权限都由私有组织来制定。比如企业内部的办公审批、财务审计;政府行业的预算和执行。私有链的主要价值在于提供安全、可塑源,不可篡改,自动执行,这是传统系统很难同时做到的。
因为私有链加入结点少,所以交易速度快。私有链的交易速度可以比任何其他的区块链都快,甚至接近了并不是一个区块链的常规数据库的速度。而且因为就算少量的节点,也都具有很高的信任度,所以并不需要每个节点来验证一个交易(无需挖矿)。
由于私有链和联盟链都需要授权加入和访问,私有链和联盟链也被称作许可链。
私有链适用于企业、组织内部。
四:侧链(Side Chains)
严格来说侧链不是区块链的一种类型,它只是在现实应用中,开发者对区块链的一种延伸(扩展),而特别取了个绰号。目前,市场上公开的虚拟货币系统,绝大多数都是基于比特币系统进行规则修改或扩展而来,因为比特币的设计规则已十分固定,难以做出较大修改和扩展,于是这些代币系统的开发者门干脆以比特币平台为基础,重构出一条区块链,然后使用新的规则,发布新的虚拟货币,这条重构出来的区块链就被称为侧链。普遍认为能和比特币区块链进行交互,并能与比特币挂钩的区块链就是侧链。
侧链目前主要适用于代币发行。
五:互联链(InteChains)
互联链就是各种不同的区块链之间的互联互通所形成的一个更大的生态区块链。比如电商平台公有链+物流公有链+物流联盟链+银行联盟链 +.....,它们之间的相互协作、通讯、共识、就是一个典型的互联链。
网络
理解区块链的五种类型(严格来讲是三种),是学习区块链、设计区块链系统、甚至分析区块链投资标的的重要一步,路漫漫其修远兮,吾将上下而求索。
- 通过自定义配置实现插件式设计
- 让IoC动态解析自定义配置(提供基于Unity的实现)
- 如何让ASP.NET默认的资源编程方式支持非.ResX资源存储
- 在VS中通过建立依赖关系使文件结构更清晰
- 一个关于ConfigurationManager.GetSecion方法的小问题
- 追踪记录每笔业务操作数据改变的利器——SQLCDC
- 一个完整的用于追踪数据改变的解决方案
- C# 4.0新特性-"协变"与"逆变"以及背后的编程思想
- 通过内存分析工具来证明字符串驻留机制
- 如果在BackgroundWorker运行过程中关闭窗体…
- 从数据到代码——基于T4的代码生成方式
- 解决T4模板的程序集引用的五种方案
- 编写T4模板进行代码生成无法避免的两个话题:"Assembly Locking"&"Debug"
- 从yield关键字看IEnumerable和Collection的区别
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用ES5,ES6和SAP ABAP实现非波拉契数列Fibonacci
- SpringBoot整合自定义注解
- nginx被动检测
- Python获取股票历史数据
- 实习第四周
- 浅谈推进有赞全站 HTTPS 项目-工程篇
- Checks autowiring problems in a bean class问题解决
- 有赞权限系统
- python处理txt文件常用方法
- 修改springboot运行时命令行Banner
- 适应性页面自己的看法
- Vant 1.0 正式发布:轻量、可靠的移动端 Vue 组件库
- SAP CDS view单元测试框架Test Double介绍
- 漫谈 React 组件库开发(二):组件库最佳实践
- 搭建简易的物联网服务端和客户端-移动家庭能力平台【1】(二十三)