主页 > imtoken官网苹果版 > 《Go语言Hyperledger区块链开发实战》第1章区块链技术基础
《Go语言Hyperledger区块链开发实战》第1章区块链技术基础
1. 比特币平台的发展。 2009年1月3日,中本聪挖出了比特币的第一个区块,即创世区块。 2010年5月22日是比特币的发展历程。 具有里程碑意义的一天。 这一天,早期的比特币矿工 Laszlo Hanyecz 用 10,000 个比特币为他的女儿买了两个披萨,大约相当于 41 美元。 2011年,津巴布韦经历了严重的通货膨胀。 进一步推高比特币的价值。 2013 年 11 月,1 比特币的价格飙升至 1000 美元。 2014 年 2 月,全球最大的比特币交易商 MT.Gox(昵称门头狗)遭到黑客攻击,损失了 85 万个比特币。 根据当时的市值,它的价值超过 4.5 亿美元。 现在1个比特币的市值已经达到了4万多美元。 越来越多的国家和企业接受并认可比特币。 2. 比特币挖矿 比特币系统是一个去中心化的分布式系统,有众多分布在世界各地的矿工参与记账,因此如何在所有矿工之间形成共识,防止矿工在记账时作弊是非常困难的。 重要的。 共识算法可以解决这个问题,实现不同节点上数据的一致性和正确性。 在比特币系统中,共识算法需要解决以下两个问题:(1)确定记账节点的选择机制; (2) 保证账本数据在全网保持正确性和一致性。
这个过程就是比特币挖矿。 比特币系统采用工作量证明(PoW,Proof of Work)共识算法。 比特币的区块头结构中包含一个“难度目标”字段,这是所有矿工的一道算术题。 比特币区块头还包含一个字段 Nonce比特币创世区块诞生时间,这是一个随机数集,用来寻找难度目标。 解决问题的过程就是不断调整Nonce的值,然后对区块头进行两次SHA256运算得到结果。 可以用下面的公式来表达运算过程: result = SHA256(SHA256(block header data)) 如果结果小于给定的难度目标值,则认为解算成功。 最先解决问题的矿工获得记账权。 网络中的节点收到打包块后,将按照以下步骤进行处理 (1) 验证打包块。 验证过程比较复杂,这里不再介绍。 (2) 如果验证失败,则该块被丢弃,不做任何处理。 比特币系统规定,只有通过 6 次确认的交易才算真正的交易。 这样即使有的矿工作弊,也不会因为没有得到足够的确认而无法成功。 (3) 如果验证通过,则意味着本轮挖矿结束,其他节点放弃竞争记账权的计算,将区块记录在自己的账本中。 1.2.3 以太坊 2013年底,Vitalik发布了以太坊(Ethereum)的第一本白皮书,吸引了一批认可以太坊概念的合作伙伴并启动了该项目。
2014年,以太坊陆续发布了多个版本的测试网,并开启了为期42天的以太坊预售,共募集了31531个比特币,按照当时的比特币汇率折合1843万美元。 2015年7月,以太坊网络正式发布,标志着以太坊区块链正式上线。 运行在以太坊平台上的智能合约是被称为“智能合约”的特殊应用。 智能合约的概念最早由法学学者Nick Szabo于1996年提出,他对智能合约的定义是:“智能合约”是以数字形式定义的一系列承诺,相关方可以就这些承诺(智能合约)执行协议。 . 以太坊的诞生使得智能合约从理论走向实践。 以太坊平台专为智能合约的执行而设计,所有参与者都可以开发自己的智能合约应用程序,使智能合约可以在分布式账本上存储和运行。 1.2.4 Hyperledger项目 Hyperledger项目的核心目标包括。 ? 通过使用企业级DLT(Distributed Ledger Technology,分布式账本技术)解决方案为商业交易提供支持。 ? 建立和支持技术社区。 ? 普及推广区块链技术,提供市场机会。
? 提供用于社区开发的工具集。 ? 提供社区驱动的开放式基础设施。 Hyperledger 项目包含的子项目 1.2.5 区块链开发语言 Solidity:以太坊推出的智能合约开发语言。 由于受到以太坊的影响以及Solidity是一门专注于开发智能合约的语言,它是一种被广泛使用的区块链编程语言。 Java:作为一种历史悠久、流行度很高的编程语言,Java拥有超过900万开发者。 许多区块链应用程序是使用 Java 语言开发的。 · GO:是Google于2009年推出的开发语言,也是本书的主题之一。 其他流行的开发语言几乎都是上个世纪的产物。 GO语言是近年来非常流行的新兴开发语言。 具有语法简洁、并发度高、运行高效等特点。 更适合区块链底层系统的开发。 Fabric 区块链和以太坊官方客户端 Geth 都是使用 GO 语言开发的。 · · JavaScript:最常用的前端脚本语言,用于开发网络应用程序。 开发区块链应用程序时经常使用 JavaScript。 · Python:近几年非常流行的编程语言。 作者撰写本书时,Python在知名的TIOBE开发语言榜单中排名第一。 · C#:微软推出的一种编程语言,广泛用于Windows应用程序和Web应用程序的开发。
C++:经典的编程语言,更适合区块链底层系统的开发。 比特币是使用 C++ 开发的。 Go语言区块链开发实战教学老师: 职位: 第一章区块链技术基础 学前小知识 区块链技术不仅奠定了比特币、以太坊等传奇品牌的技术基础,也上升到了中国的国家战略。 本书的主题是使用Go语言开发基于Hyperledger Fabric的区块链应用。 作为第一章,我们首先介绍区块链技术的基础知识,为后续的学习打下基础。 知识点 1.1 区块链的工作原理和底层技术 1.2 经典区块链平台 1.1 区块链的工作原理和底层技术 1.1.1 分布式系统的概念 1.1.2 什么是比特币系统 1.1.3 共识算法用比特币挖矿 1.1.4双花问题 1.1.5 区块链技术赋予比特币价值 1.1.1 分布式系统的概念 所有的区块链应用都是分布式系统。 所谓分布式系统是指建立在网络上的软件系统。 在分布式系统中,一组独立的计算机按照统一的规则各司其职,紧密合作,呈现给用户的是一个统一的整体。 好像只有一台服务器。 分布式系统在大数据、云计算、物联网以及本书介绍的区块链技术等领域有着广泛的应用。
1.1.2 区块链技术总体架构 “区块链”一词最早出现在中本聪的论文《比特币:一种点对点电子现金系统》中。 (1) 我们可以把参与比特币系统的每一台计算机都称为一个节点。 (2) 每个节点将新交易收集到一个块中。 (3) 节点可以创建链上的下一个区块,将当前区块的哈希值作为新区块的“前一个哈希”字段值。 区块链架构示意图 区块链设计 1. 存储层 存储层主要实现区块链的存储功能,涉及数据存储(存储格式、区块大小)、加密算法等技术细节。 2、网络层实现分布式网络编程,涉及网络通信协议(点对点通信)、共识算法等技术细节。 共识算法包括比特币采用的工作量证明(PoW,算力多者记账)和以太坊采用的权益证明(PoS,份额多者记账)。 在分布式系统中,还有一种非常常用的共识算法,就是投票。 节点投票形成共识。 3. 扩展层 扩展层是对经典区块链技术的补充和扩展。 企业级应用是区块链扩展层的一个主要发展方向。 区块链技术发展初期,应用场景多为公链应用,大家可以选择参与。 正因如此,当时很少有企业愿意应用区块链技术。 还有一个因素:没有专门针对企业应用的区块链项目,大部分公链项目都需要使用数字货币进行支付。
数字货币价值波动太剧烈比特币创世区块诞生时间,企业难以控制项目成本。 Hyperledger Fabric是以Hyperledger Fabric为代表的企业级区块链,实现了完整的权限控制和安全保障,可以解决企业之间的信用问题。 产业链上下游环节之间,企业之间可能存在信息交互与合作。 如果采用传统的离线记账方式,显然效率低下。 许多企业都有自己的信息系统,但它们之间又相互孤立,形成了信息孤岛。 打通这些信息孤岛的成本是巨大的,而且它们之间也存在信任问题。 联盟链由产业链相关企业共同开发建设。 信息上传到链上,不能随意修改,可以解决企业间的信用问题。 只要相关企业做好科普工作,就可以大大提高企业之间的合作效率,打通信息孤岛,最终形成行业大数据。 4. 应用层 应用层主要负责实现区块链技术在生产、交易、流通和社会生活中的应用。 目前,区块链技术还处于科普和底层基础设施建设阶段。 在这个阶段完成之前,区块链技术大规模应用的条件还不成熟。 目前比较经典的区块链应用包括金融交易、存证、溯源、数字资产、公益(慈善、众筹、...)等。 1.1.3 加密算法 1. 哈希算法 2. 对称加密算法 3.非对称加密算法 四、国密算法 1、哈希算法 哈希是一种可以将不同长度的数据映射为固定长度数据的函数。
因此,散列函数也称为汇总函数,或散列函数。 哈希算法MD5处理的最大报文长度得到的摘要数据的长度没有限制,128位数据,表示为32位十六进制字符串SHA1 264位160位数据SHA-224 264位 240位数据 SHA -256 264位 256位数据 SHA-384 2128位 384位数据 SHA-512 2128位 512位数据 SM3 264位 256位数据在线进行MD5处理data A group of centralized systems for MD5 processing of data结果待处理消息摘要数据123456 E10ADC3949BA59ABBE56E057F20F883E 123456789701234567890 D726DA56936D0A63A2B4D8D3ECA0D07B 123 202CB962AC59075B964B07152D234B70 1 C4CA4238A0B923820DCC509A6F75849B abcdefghijklmnopqrstuvwxyz C3FCD3D76192E4007DFB496CCA67E13B 比特币系统中采用SHA-256算法计算区块的摘要信息。
FD80DEDA69B71529B1BC7A275FD00A45 区块链是近年来炙手可热的新兴技术。 它不仅催生了比特币、以太坊等著名的分布式应用平台,还被确定为国家战略,成为国家发展的关键IT技术。 在区块链发展初期,大部分项目属于公链项目,企业使用区块链技术的成功案例并不多。 区块链技术3.0可以实现具有完整权限控制和安全保障的企业级区块链——联盟链。 联盟链可以解决企业之间的信用问题。 由产业链相关企业共同开发建设。 信息上传到链上,不能随意修改。 为打造高可信度的企业级区块链应用项目。 27969908728DE0176CD7FDB95B9C6B91 2. 对称加密算法 3.非对称加密算法 4.国密算法? SM1:对称加密算法,密钥长度为128位,算法未公开,固化在芯片中。 ? SM2:开源非对称加密算法,可用于数据加密、解密和数字签名。 ? SM3:一种用于生成数据摘要的开源哈希算法。 ? SM4:一种开源的对称块加密算法,密钥长度为128位。 ? SM7:对称块加密算法,密钥长度为128位,适用于非接触式IC卡。 ? SM9:身份密码算法,身份密码以用户的身份(如邮箱、手机号、QQ号、微信账号等)作为公钥,省略了数字证书和公钥交换的过程,使得安全系统易于部署和管理,非常适合端到端的离线安全通信。
? ZUC祖冲之算法:我国自主研发的流密码算法,是用于移动通信网络的国际标准密码算法。 1.1.4 区块链的分类 1. 公链 2. 私有链 3. 联盟链 1. 公链上的任何人都可以参与公链的运行,包括以下操作: (1) 读取区块中的数据; (2) 发起交易; (3) 作为矿工参与挖矿。 2. 私有链是由特定组织控制的区块链,整个网络由该组织的成员机构组成。 共识算法由指定的一组节点完成。 私有链只是一定程度的去中心化。 通常用于企业的内部运营和管理。 私有链可以有效保护企业的商业秘密; 由于参与共识过程的节点较少,交易速度非常快; 并且不需要向矿工支付交易费用,成本低。 3. 联盟链联盟链是由机构(企业)共同打造的区块链,适用于商业伙伴之间的交易、结算、清算等B2B应用场景。 对于企业来说,需要考虑区块链的以下要求 · 参与者必须是经过认证的、可识别的或可识别的。 · 参与者需要获得授权。 · 可以高效地处理交易,以免影响商机。 · 低延迟交易确认,使交易可以快速记录在区块链中。 · 交易数据的私密性和保密性应满足业务交易的需要。 1.2 经典区块链平台 1.2.1 区块链技术发展阶段 1.2.2 比特币 1.2.3 以太坊 1.2.4 超级账本项目 1.2.5 区块链开发语言 1.2.1 区块链技术发展阶段 (1) 区块链1.0:以数字货币为代表比特币是区块链1.0的经典应用。
(2)区块链2.0:以太坊的诞生拉开了区块链2.0的序幕,智能合约的概念拓展了区块链的应用场景。 (3)区块链3.0:区块链3.0的经典应用是实现完全权限控制和安全保护的企业级区块链——联盟链。 联盟链可以解决企业之间的信用问题。 由产业链相关企业共同开发建设。 信息上传到链上,不能随意修改。 1.2.2 比特币 比特币平台是区块链技术应用的第一个项目,也是最经典的区块链平台。 一、比特币平台的发展历程 二、比特币挖矿