区块链几大核心:

分布式帐本,所需技术:微服务架构,高性能RPC通讯。

区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,每一个数据链表可以看作账本。它由多个区块构成了一个有时序的链表,而每个区块里含有多条交易trasaction(缩写为tx)构成的链表。

智能合约机制,所需技术:共识算法

1. 智能合约:智能合约就是一段代码,一个具体的场景下的应用程序。管方认可的是GO语言;它是运行在区块链上的模块化、可重用的自动执行脚本,有了它我们就可以完成复杂的业务逻辑,例如同一个区块链上有多份合约,而每份合约可以约定不同的参与者(企业或者相关方)。也可以指定每份合约里每个子命令做一批特定的事,大家可以把它想象成关系数据库里的事务。

我觉得我们可以把智能合约理解成区块链系统中的业务逻辑单元,多个合约构成区块链系统的业务层。

合约代码的逻辑定义了合约的内容。合约的账户保存了合约当前的运行状态,主要包含了4部分内容。

  • balance:当前余额
  • nonce: 交易次数
  • code: 合约代码
  • storge: 存储,是一棵MPT

我们可以拟定一个合约的需求(具体场景),从而开始编写这个应用程序:一个商品拍卖的智能合约。所有参与拍卖的人员对商品进行竞价,每次竞价时都会将相应的价格发送到智能合约中,合约会自动记录竞价人的报价,拍卖结束时,出价最高者获得拍卖品,同时出价最高者的钱会发送给受益人。其他人可以使用withDraw函数拿回自己的钱。

pragma solididity ^0.4.21               // 声明使用的solidity版本contract SimpleAuction{                 // 声明一个SimplaAuction的合约类address public beneficiary;         // 拍卖受益人uint public auctionEnd;             // 拍卖截止日期address public highestBidder;       // 当前的最高出价人mapping(address => uint) bids;      // 所有竞拍者的出价,map结构address[] bidders;                  // 所有竞拍者数组// 需要记录的事件,event主要用来记录日志event HighestBidIncreased(address bidder, uint amount); // 出价最高的人发生变动event Pay2Beneficiary(address winner, uint amount);     // 竞拍成功者的钱发送给受益人/// constructor是构造函数/// _biddingTime 表示拍卖时长/// _beneficiary 表示拍卖受益人constructor(uint _biddingTime, address _beneficiary) public{beneficiary = _beneficiary;auctionEnd = now + _biddingTime;}/// 对拍卖进行竞价,如果之前出过价,就会把之前的价格与当前价格求和作为竞价function bid() public payable{...}/// 参与投标的人在拍卖结束后取回自己的钱function withdraw() public returns(bool){}/// 结束拍卖,将最高出价的钱发送给受益人function pay2Beneficiary() public returns(bools){}}  

参见智能合约的详细代码及发布流程

2. 共识算法:区块链是一个去中心化的分布式系统,那么自然只能通过投票来决定一致性了:少数服从多数。当然,多少算多数呢?不同的共识算法下,结果并不相同。比如paxos算法就是超过一半,而PBFT则需要三分之二以上。

概念:paxos算法是假定通讯安全,没有traitor,然后通过proposer acceptor learner来进行一系列的交互,记录和统计,最终做出裁决。当然这个假设是可能出现叛徒(攻击者),由此引入拜占庭将军问题。拜占庭将军是指存在叛徒,它们可以篡改消息。所以引入容错拜占庭算法,对此情况加以改进。参见:Paxos算法的原理及过程。

拜占庭将军问题需要注意—就是投票的拜占庭将军(服务器)们有2种不可靠的形式。第一是迟钝(数据包延迟)、失忆(数据包丢失以及数据包重发)、失踪(服务器宕机)等不含背叛的行为,第二则是有将军是间谍(服务器被攻破)。如paxos这样的算法属于第一种,Fault-tolerance,它不能容忍服务器上有恶意代码;而如PBFT(Practical Byzantine Fault Tolerance)这样的算法是第二类,Byzantine-Fault-tolerance,它能够容忍一定数量的拜占庭将军节点存在,如PBFT、SBFT、RBFT算法等。

区块链安全与底层,所需技术:P2P网络传输,安全高效的加密算法(数字证书,CA,非对称加密)

数字证书 Digital Certificate:X.509规范的数字证书里,其Subject属性里就含有她的信息,包括国家C=US、所属的州或者省份ST=Michigan、所在城市L=Detroit、所属单位O=Mitchesll Cars、其他信息OU=Manufacturing、公用信息CN=Mary Morris/UID=123456等
CA颁发了两个证书:公钥与私钥,其中,私钥仅服务提供者保存,而公钥则可被所有人(服务使用者)保存。

所谓非对称加密,就是公钥加密的消息仅私钥可以解密;同理,私钥加密的消息,仅公钥可以解密。对应于前者,可以实现客户端访问服务器时加密消息,例如访问安全级别高的页面时提交的表单信息都需要用公钥加密,确保只有服务器才能解密网络报文。对应于后者,则可实现签名功能(Mary Morris用私钥对一段信息的内容加密后,生成签名附加在消息中。接收者可从CA机构获取到公钥,用公钥解密签名后,再与内容比对,以确定消息是否来自MaryMorris及内容是否被篡改),如下面图所示:

CA是PKI系统中通信双方信任的实体,被称为可信第三方(Trusted Third Party, TTP)。作为可信第三方的行为具有非否认性。

在HyperLedger Fabric体系中,CA被广泛运用于每一个具体的对象,如orderer、peer以及最小单位的user等。后端开发的工程师应该比较了解,在HyperLedger Fabric中CA被用于各种对象的登记、登出、注册、撤销等操作。

证书信任链条:RCA(Root CA)根证书以及ICA(Intermediate CA)中间证书。这些证书由RCA开始构成一个证书信任链,有许多CA证书权威机构,各自有其RCA。如果RCA得不到信任,那么其下的ICA也无法认证通过。当然,自己的服务器也可以生成RCA。

Peer-to-Peer,对等网络,即对等计算机网络,是一种在对等者(Peer)之间分配任务和工作负载的分布式应用架构。

团队构成:fabric联盟链的开发人员主要分为三类:底层是系统运维,负责系统的部署与维护;其次是组织管理人员,负责证书、MSP权限管理、共识机制等;最后是业务开发人员,他们负责编写chaincode、创建维护channel、执行transaction交易等。

fabric技术团队人员的构成:

学习路线深入掌握一个区块链框架,如果你熟悉Java,那么Fabric是个不错的选择。

根据以上的几个要点,通过实践:一步一步搭建区块链系统

重要的参考文章:

区块链开源框架 HyperLedger Fabric 学习思路分享
区块链开源实现hyperledger fabric架构详解

区块链2.0的分类与特点

区块链系统架构图:

区块链2.0的典型代表是以太坊(Ethereum)和超级账本(Hyperledger),分别代表了区块链的两个重要的发展方向:应用于公众的公有链和应用于企业的联盟链。

公有链、联盟链和私有链

公有链是指对所有人开放,任何人都可以参与的区块链;联盟链是被多个组织构成的联盟控制,进入和退出需要授权的区块链;私有链是完全被单独的个人或某个组织控制的区块链。公有链不适合大部分企业应用场景,未来企业应用的重点是联盟链,但现阶段关注的重点是公有链,公有链是区块链技术的试验田,会遇到各种复杂的情况和问题,是对新技术和新业务的测试,这对企业应用提供很好的借鉴。

对于区块链的去中心化、安全、高效这三个特性,符合蒙代尔不可能三角关系,即不可能同时满足三个条件。公有链实现了完全的去中心化和安全,因此在性能上就很低,联盟链为了企业应用,提高了性能和安全,就不得不在去中心化上进行妥协,通过一个中心化的授权方式来管理节点,实现了半中心化。

区块链2.0的优势

区块链1.0被称之为“全球账簿”。相应的,区块链2.0可以被看作一台“全球计算机”:实现了区块链系统的图灵完备,可以在区块链上传和执行应用程序,并且程序的有效执行能得到保证,在此基础上实现了智能合约的功能。相对于区块链1.0,区块链2.0有如下优势:

1. 支持智能合约

2. 适应大部分应用场景的交易速度

3. 支持信息加密

4. 无资源消耗

技术架构

区块链2.0采用五层架构,从下到上分别是数据层、网络层、共识层、激励层、智能合约层

1. PoS:Proof of Stake,权益证明

2. DPoS:Delegate Proof of Stake,股份授权证明

3. Casper:投注共识

4.PBFT:Practical Byzantine Fault Tolerance,拜占庭容错算法

5. PoET:Proof of Elapsed Time,消逝时间量证明

区块链系统简要架构和重点知识点梳理相关推荐

  1. 区块链系统架构图_区块链模型架构

    一般说来,区块链系统由数据层.网络层.共识层.激励层.合约层和应用层组成. 其中,数据层封装了底层数据区块以及相关的数据加密和时间戳等技术:网络层则包括分布式组网机制.数据传播机制和数据验证机制等:共 ...

  2. 通知|百度1+X区块链系统应用与设计职业技能等级证书(初、中级)线上师资普及培训班...

    NO.1 国家"十四五"规划将区块链纳入数字产业之一,产业实力持续快速提升,区块链人才成为推动产业发展的中坚力量 NO.2  区块链技术应用向电子政务.智慧金融.交通出行.工业制造 ...

  3. WDK_基于Fabric的区块链系统开发

    文章目录 摘要 一.Fabric环境搭建 1.1 安装docker 1.2 安装go 1.3 安装Node.js 1.4 部署hyperledger Fabric 二.Fabric的概念 2.1 逻辑 ...

  4. 区块链系统开发实现原理,区块链为什么叫区块链?

    区块链交易平台系统开发原理:"区块链使用强大的加密技术来维护虚拟安全,通过整体计算机的复杂数学运算机制来验证,删除与存储,区块与之前的区块相互关联,因此形成区块链." 区块链分为三 ...

  5. 牛逼,一整套基于Java开发的的区块链系统(附完整源码)

    前言 近几年区块链概念越来越火,特别是区块链技术被纳入国家基础设施建设名单后,各大企业也开始招兵买马,对区块链技术进行研究,从各大招聘网站的区块链职位来看,薪资待遇都很不错,月薪30K到80K的都有, ...

  6. 基于Java开发一套完整的区块链系统(附源码)

    来源:https://blog.csdn.net/victory_long 前言 近几年区块链概念越来越火,特别是区块链技术被纳入国家基础设施建设名单后,各大企业也开始招兵买马,对区块链技术进行研究, ...

  7. 零数开放许可链通过工信部电子标准院区块链系统功能测试

    近日,零数科技再获国家级资历认证,团队自主研发的区块链底层平台"零数开放许可链",通过了工信部电子标准院的区块链系统功能测试,荣获认证证书.这不仅意味着零数科技满足国家权威单位对国 ...

  8. 区块链系统面临的风险和防范

    区块链是涉及多方的开放系统,早期的应用又与虚拟加密货币相关,由此使得区块链系统所内含的和面对的风险得以暴露,同时各种安全措施也得以被及时使用和验证.但区块链在真实世界的大规模应用尚未展开,因此区块链所 ...

  9. 区块链系统其实是一个分布式数据库系统

    想知道更多关于区块链技术知识,请百度[链客区块链技术问答社区]链客,有问必答! 区块链系统和CAP.ACID和BASE 为什么我们说区块链系统其实是一个分布式数据库系统? ACID 传统的数据库都满足 ...

最新文章

  1. hadoop 2.7.3 java_java - Hadoop 2.7.3 Java运行时错误 - 找不到core-site.xml - 堆栈内存溢出...
  2. C语言再学习 -- 内存管理
  3. linux下Mysql命令
  4. merge into on多个条件_“京沪二线”贯穿山东半岛,沿线多个城市将受益,来了解一下吧...
  5. java 单元测试技巧_其他一些单元测试技巧
  6. oracle 28000错误码,Oracle数据库 ORA-28000 错误处理方式
  7. mw315r 虚拟服务器,水星MW315R桥接设置教程
  8. 2-ESP8266 SDK开发基础入门篇--点亮一个灯
  9. java8 求list最大值
  10. xp计算机如何查看内存大小,xp如何查看内存大小
  11. 树莓派gpio接ttl转usb串口调试
  12. 程序员如何告别肩颈疲劳
  13. 马哥教育42期第四周作业
  14. jetson用什么编译器_Jetson Nano安装 Jupyter lab
  15. 实现 3D 时间动画展示效果
  16. <转载>主机ping虚拟机ip请求超时解决办法
  17. Qt:QTableView(01) 的用法
  18. 【atoi函数的介绍以及模拟实现】
  19. STM32中文参考手册_V10
  20. 微信oa服务器,企业号来了—你必须了解OA与微信结合的几种方式

热门文章

  1. 年轻人能为世界做些什么
  2. 题目75:若两个素数之差为2,则该对素数称为双胞胎数,如3,5就是一对双胞胎数。编写程序,实现如下功能:输入n的值,统计显示n以内的所有双胞胎数。
  3. C语言经典实例005:计算正方形的周长
  4. 居家第十七天阿飞的晚餐
  5. About Significance Tests
  6. 计算机考研408每日一题 day153
  7. 2013年5月11日 13:44:13
  8. pdf转图片(多页和一张图片)
  9. java 创建临时临时文件
  10. 对表空间 'USERS' 无权限