区块链入门
- 格式:docx
- 大小:39.93 KB
- 文档页数:11
如何学习区块链技术学习区块链技术可以通过以下步骤进行:1. 理解基本概念:开始学习区块链技术前,先了解一些基本概念,如区块链、分布式账本、加密算法、共识机制等。
这些基本概念是后续学习的基础。
2. 学习核心知识:深入学习区块链的核心知识,包括哈希函数、公私钥加密、数字签名、共识算法等。
了解区块链的数据结构、交易验证和区块链网络的工作原理。
3. 阅读文献和书籍:阅读区块链领域的学术论文和专业书籍,如中本聪的比特币白皮书、以太坊的黄皮书等。
这些资源能够帮助您深入理解区块链的技术原理和应用场景。
4. 参加在线课程和培训:参加在线的区块链课程和培训可以帮助您系统地学习区块链技术。
有许多知名的在线平台提供区块链相关的课程,您可以根据自己的需求选择适合的课程进行学习。
5. 加入社区和论坛:加入区块链社区和论坛,与其他区块链爱好者和专家进行交流和讨论。
社区和论坛是学习和获取最新信息的绝佳平台,您可以向其他人请教问题、分享经验和参与讨论。
6. 探索开源项目:参与开源区块链项目,研究项目的代码和架构。
了解开源社区的贡献和最佳实践,通过实践加深对区块链技术的理解。
7. 实践开发:尝试自己动手开发一个简单的区块链项目,如创建一个智能合约、搭建一个私有链网络等。
实践是学习的关键,通过实际开发项目可以加深对区块链技术的理解和运用。
8. 持续学习和关注新技术:区块链技术发展迅速,新的技术和趋势不断涌现。
持续学习和关注最新的研究成果和技术发展,保持对区块链技术的更新和前沿的了解。
记住,学习区块链技术需要时间和耐心。
切记保持持续学习的态度,不断提升自己的技能和知识。
同时,多与他人交流和合作,通过分享和协作可以更好地学习和应用区块链技术。
区块链的知识点总结区块链知识点总结。
一、区块链的概念。
1. 定义。
- 区块链是一种分布式账本技术。
它将数据以区块的形式按时间顺序依次连接起来,每个区块包含了一定时间内的交易数据等信息。
这种账本由多个节点共同维护,不存在单一的中心控制机构。
- 例如比特币网络,它的交易记录都被存储在区块链上,全球众多的比特币节点共同维护这个账本,确保交易的真实性和不可篡改性。
2. 特点。
- 去中心化。
- 没有一个中心节点来控制整个系统。
在传统的金融系统中,银行是中心机构,负责处理交易、保存账户信息等。
而在区块链系统中,各个节点地位平等,都参与数据的验证和存储。
- 以以太坊为例,众多的节点分布在全球各地,共同参与以太坊区块链的运行,没有一个类似银行总部这样的中心来指挥。
- 不可篡改。
- 一旦数据被记录到区块链上,就很难被修改。
这是因为每个区块都包含了前一个区块的哈希值(一种加密算法生成的数字指纹),如果要修改某个区块的数据,就需要同时修改后续所有区块的哈希值,这在计算上几乎是不可能的。
- 比如在区块链上记录的房产交易记录,一旦记录成功,就无法被恶意篡改,保证了交易信息的真实性和稳定性。
- 透明性。
- 区块链上的数据是公开透明的(在公有链中),虽然交易双方的身份可能是匿名的(通过加密技术实现),但是交易的内容和过程是可以被查看的。
- 像比特币的区块链浏览器,可以查看每一笔比特币的交易流向,包括交易的金额、时间等信息。
二、区块链的结构。
1. 区块的组成。
- 区块头。
- 包含了版本号、前一区块的哈希值、默克尔根(一种对区块内交易数据进行哈希计算得到的根值)、时间戳和难度目标等信息。
- 例如在比特币的区块头中,前一区块的哈希值就像链条中的一环,将本区块与前一个区块连接起来,确保区块链的顺序性。
- 区块体。
- 主要包含了交易数据。
这些交易数据可以是数字货币的转账交易,也可以是智能合约相关的操作等。
- 在以太坊中,除了普通的以太币转账交易外,还有大量与智能合约交互的交易数据被记录在区块体中。
区块链基础知识点整理一、区块链技术1.什么是区块链?去中心化的、分布式的、区块化存储的数据库存储全部账户余额及交易流水的总账本每个节点有完整的账本数据账本数据记录了全部的历史交易数据交易数据存储在区块上每个区块包含前一区块ID及HASH,形成链2.区块链基本原理如果把区块链作为一个状态机,则每次交易就是试图改变一次状态,而每次共识生成的区块,就是参与者对于区块中所有交易内容导致状态改变的结果进行确认。
交易(Transaction):一次操作,导致账本状态的一次改变,如添加一条记录区块(Block):记录一段时间内发生的交易和状态结果,是对当前账本状态的一次共识链(Chain):由一个个区块按照发生顺序串联而成,是整个状态变化的日志记录。
3.区块链要解决的问题如何去中心化地共享数据?如何确保账户不被冒用?如何确保账户余额足够?如何确保交易记录不被篡改?谁负责记账?怎么保障记账者的可信?怎么保障记账者的积极性?4.区块链特性去中心化开放性(没有限制,开源,数据公开)去信任(仅信任机器)自治性,集体维护可靠的数据库(不可更改,永远可访问)匿名性,隐私保护5.核心技术P2P网络、数字签名、区块化数据库,竞争记账权、共识算法、交易回溯。
二、P2P网络及通讯技术(分布式技术网络)1.自动发现通过种子文件,获取初始节点(地址及端口)连接初始节点,获取初始节点知道的Peer把自己的地址及端口广播给各个Peer接收各个Peer广播的地址信息,构建出网络的全貌或片段2.技术领域分布式存储、分布式计算、分布式协同组播流媒体搜索引擎3.通信协议napster、Gnutella、eDonkey、Bittorrent(文件分发协议)XMPP、Jabber(即时通信协议)Paxos、Gossip(分布式系统状态同步协议)JXTA4.使用HASH算法及非对称加密及签名技术每个节点、每个人有唯一的一对公钥及私钥公钥同时也是每个节点、个人的地址和账号私钥是证明”我就是我“的唯一手段HASH算法对数据进行规整5.算法RSA、Elgamal、D-H、ECCSHA256、RIMPED1606.通常使用椭圆曲线算法生成密钥对比特币密钥长度:256位公钥哈希值=RIMPED160(SHA256(公钥))比特币地址=1+Base58(0+公钥哈希值+校验码)校验码=前四字节(SHA256(SHA256(0+公钥哈希值)))7.加密发送方使用接收方的公钥加密数据接收方使用本方的私钥解密数据通常使用本方面交换对称加密的Key8.签名发送方使用HASH算法计算数据的HASH值发送方使用本方的私钥加密HASH值,得到签名接收方使用HASH算法计算数据的HASH值接收方使用发送方的公钥解密签名得到发送的HASH值比较两个HASH值的一致性9.参考ElGamal算法,是一种较为常见的加密算法,它是基于1984年提出的公钥密码体制和椭圆曲线加密体系。
利用Java进行区块链开发的入门指南Java是一种广泛应用于软件开发领域的编程语言,而区块链技术作为一种新兴的分布式记账技术,在过去几年中得到了广泛的关注和应用。
本文将介绍如何利用Java进行区块链开发的入门指南,旨在帮助读者了解区块链的基本原理和Java语言的相关知识,以及如何使用Java构建简单的区块链应用。
一、区块链概述区块链是一种以区块为基本单位的分布式账本技术,所有的交易数据都被记录在区块中,并且每个区块通过哈希值与前一个区块链接起来,形成一个不可篡改的链式结构。
区块链的核心特点包括去中心化、安全性高、透明性和匿名性等。
二、Java和区块链的结合Java作为一种面向对象的编程语言,具有良好的跨平台性和丰富的开发生态,非常适合用于开发区块链应用。
Java提供了许多强大的工具和库,可以帮助开发者实现区块链的核心功能,如哈希算法、加密算法和网络通信等。
三、区块链开发环境的搭建在开始进行区块链开发之前,我们需要搭建相应的开发环境。
首先,需要安装Java开发工具包(JDK)和集成开发环境(IDE),如Eclipse或IntelliJ IDEA。
其次,需要选择一个适合的区块链开发框架,如Hyperledger Fabric或Ethereum。
最后,需要安装相应的依赖库和工具,如Maven和Git。
四、区块链的核心组件区块链应用包括多个核心组件,如区块、链、节点和智能合约等。
区块是记录交易信息的基本单位,链是将各个区块链接起来的数据结构,节点是参与区块链网络的设备,智能合约是运行在区块链上的可编程代码。
在Java中,我们可以使用类和接口来表示这些核心组件,并通过相应的方法和操作来实现相关功能。
五、使用Java实现智能合约智能合约是区块链的重要应用之一,它可以在不需要第三方的情况下,自动执行合约的代码。
在Java中,我们可以使用智能合约编程语言,如Solidity或JavaSC,来实现智能合约。
通过定义合约的数据结构和方法,并使用相应的API和工具,可以在Java中编写智能合约,并将其部署到区块链网络上。
区块链快速入门(四)——BFT(拜占庭容错)共识算法拜占庭容错(Byzantine Fault Tolerance,BFT)共识算法是指在分布式系统中,即便部分节点存在故障或者恶意攻击行为,系统仍然能够保持一致的算法。
在区块链技术中,BFT共识算法被广泛应用于解决拜占庭将军问题,确保区块链网络中的节点能够达成一致的交易顺序并保持数据一致性。
BFT共识算法与其他共识算法相比,具有以下几个优势:1.容错性强:BFT共识算法能够容忍系统中多达⅓的节点故障或者对网络的恶意攻击,仍然能够保持正确的共识结果。
2.快速确认:BFT共识算法具有高效的交易确认速度,通常能够在几秒钟内达成共识,适用于高频交易场景。
3.提高网络吞吐量:相比于其他共识算法,在相同的网络条件下,BFT共识算法能够提供更高的交易吞吐量。
4.保护用户权益:BFT共识算法确保每个参与节点在不被恶意节点操控的情况下都能获得一致的交易结果,保护用户的权益。
现在我们来介绍两种经典的BFT共识算法:拜占庭将军算法和Tendermint算法。
拜占庭将军算法是最早提出的BFT共识算法之一,它解决了拜占庭将军问题。
拜占庭将军问题是一个典型的分布式系统问题,指的是拜占庭将军希望通过消息交换来达成一致的行动,但是存在部分将军可能会传递错误的消息或者是恶意的将军。
拜占庭将军算法的核心思想是通过多次消息广播和反馈的方式,将投票的结果进行汇总,最终达成共识。
算法对消息进行多轮投票和反馈,并根据投票结果进行大多数决策,从而确保一致性。
Tendermint算法是一种共识引擎,通过BFT算法实现区块链网络中的共识。
Tendermint算法采用类似拜占庭将军算法的投票和反馈机制,但是采用了一些优化措施来提高性能和可扩展性。
Tendermint算法将共识过程分为四个阶段:提案、预投票、预提交和提交。
在每个阶段,节点进行投票和反馈,并在大多数节点达成一致意见后进行下一阶段。
通过该算法,Tendermint能够在网络中快速达成一致,并确保交易的正确性和一致性。
《区块链技术介绍,入门指南》随着技术的进步和经济的发展,区块链技术正在逐渐走进我们的生活。
你听说过比特币吗?那么,你是否知道比特币是基于区块链技术的呢?这是一种全新的分布式账本技术,无需中心化控制,不允许篡改数据,而且可以保护个人信息的隐私和安全。
本文将介绍区块链技术的一些基本概念,以及如何入门。
一、区块链技术的定义和特点区块链是一种去中心化的、无需基于信任的分布式账本技术,由多个节点构成的节点网络维护并同步整个网络,实现信息交换和共识机制的所需。
区块链是一种数据结构,由区块组成,每个区块包含多个交易和区块头信息。
区块链技术对安全性和信任的构建起到了重要作用,数据不可篡改,防止信息泄露等问题。
区块链的特点包括:去中心化、数据不可篡改、保护个人隐私、智能合约、开放性、安全性等。
在去中心化的设计下,网络节点可以自由参与,任何人都可以通过这个网络进行交易。
由于数据不可篡改,操作过程中无法对数据进行篡改或删除,对于保护个人数据隐私具有很好的作用。
此外,智能合约是一种对区块链技术的扩展应用。
它可以用于验证金融交易、物流流程和数据管理等。
二、区块链技术的应用场景区块链技术现在有很多应用场景,包括数字货币交换、智能合约、供应链管理、物联网设备和身份验证。
数字货币是基于区块链技术的一个典型应用场景,比特币是最典型的例子,但是现在还有许多其他数字货币,比如以太坊(Ethereum)、莱特币(Litecoin)等。
智能合约是区块链技术的一个扩展应用,可以以自动化的方式执行协议。
供应链管理是区块链技术在物流领域的应用,可以追踪产品的生命周期,确保物流安全和质量控制。
物联网设备也是区块链技术的应用领域之一,可以通过创建一个去中心化的智能设备网络,更好地保护设备数据的隐私和安全。
身份验证是区块链技术应用的另一个重要场景。
数据的不可篡改性和去中心化的设计有助于保护个人身份信息。
此外,区块链技术还可以用于确定医疗和教育记录等领域的身份,有帮助的领域中。
区块链〔blockchain〕是眼下的大热门,新闻媒体大量报道,宣称它将创造未来。
可是,简单易懂的入门文章却很少。
区块链到底是什么,有何特别之处,很少有解释。
下面,我就来尝试,写一篇最好懂的区块链教程。
毕竟它也不是很难的东西,核心概念非常简单,几句话就能说清楚。
我希望读完本文,你不仅可以理解区块链,还会明白什么是挖矿、为什么挖矿越来越难等问题。
需要说明的是,我并非这方面的专家。
虽然很早就关注,但是仔细地了解区块链,还是从今年初开场。
文中的错误和不准确的地方,欢送大家指正。
一、区块链的本质区块链是什么?一句话,它是一种特殊的分布式数据库。
首先,区块链的主要作用是储存信息。
任何需要保存的信息,都可以写入区块链,也可以从里面读取,所以它是数据库。
其次,任何人都可以架设效劳器,参加区块链网络,成为一个节点。
区块链的世界里面,没有中心节点,每个节点都是平等的,都保存着整个数据库。
你可以向任何一个节点,写入/读取数据,因为所有节点最后都会同步,保证区块链一致。
二、区块链的最大特点分布式数据库并非新创造,市场上早有此类产品。
但是,区块链有一个革命性特点。
区块链没有管理员,它是彻底无中心的。
其他的数据库都有管理员,但是区块链没有。
如果有人想对区块链添加审核,也实现不了,因为它的设计目标就是防止出现居于中心地位的管理当局。
正是因为无法管理,区块链才能做到无法被控制。
否那么一旦大公司大集团控制了管理权,他们就会控制整个平台,其他使用者就都必须听命于他们了。
但是,没有了管理员,人人都可以往里面写入数据,怎么才能保证数据是可信的呢?被坏人改了怎么办?请接着往下读,这就是区块链奇妙的地方。
三、区块区块链由一个个区块〔block〕组成。
区块很像数据库的记录,每次写入数据,就是创立一个区块。
每个区块包含两个局部。
•区块头〔Head〕:记录当前区块的特征值•区块体〔Body〕:实际数据区块头包含了当前区块的多项特征值。
•生成时间•实际数据〔即区块体〕的哈希•上一个区块的哈希•...这里,你需要理解什么叫哈希〔hash〕,这是理解区块链必需的。
区块链入门必备108知识点
1、什么是区块链
把多笔交易的信息以及表明该区块的信息打包放在一起,经验证后的这个包就是区块链。
每个区块里保存了上一个区块的hash值,使区块之间产生关系,也就是说的链了。
合起来就叫区块链。
2.什么是比特币
比特币概念是2009年中本聪提出的,总量是2100万个。
比特币链大约每10分钟产生一个区块,这个区块是矿工挖了10分钟挖出来的。
作为给矿工奖励,一定数量的比特币会发给矿工们,但是这个一定数量是每四年减半一次。
现在是12.5个。
照这样下去2040年全部的比特币问世。
3.什么是以太坊
以太坊与比特币最大的区别是有了智能合约。
使得开发者在上边可以开发,运行各种应用。
4.分布式账本
它是一种在网络成员之间共享,复制和同步的数据库。
直伯说,在区块链上的所有用户都有记账功能,而且内容一致,这样保证了数据不可篡改性。
区块链技术入门涉及哪些编程语言
区块链技术入门通常涉及以下几种编程语言:
1. Solidity:Solidity 是以太坊平台上智能合约的编程语言。
它是一种基于类似 JavaScript 的语言,用于编写智能合约和去中心化应用(DApp)。
2. C++:C++ 是比特币的主要实现语言之一。
许多区块链项目和底层协议使用 C++ 来构建比特币节点和其他区块链相关的应用。
3. Java:Java 是一个广泛使用的编程语言,用于开发分布式应用和企业级区块链平台。
一些知名的区块链平台如 Hyperledger Fabric 就是基于 Java 进行开发的。
4. Python:Python 是一种常用于快速原型开发和多种应用程序的高级编程语言。
它也被广泛用于以太坊智能合约开发、区块链网络和工具的构建。
5. Go:Go 是一种开发效率高、并行能力强的编程语言,特别适合构建分布式系统和区块链应用。
Hyperledger Fabric 就是使用 Go 语言编写的。
除了上述语言之外,还有其他语言也可以用于区块链开发,例如 JavaScript、Rust、Scala等,具体取决于您所涉及的区块链平台和开发框架。
选择合适的编程语言取决于您的需求、偏好和所要构建的应用目标。
对于区块链技术的入门,理解智能合约和去中心化应用的编程概念是一个很好的起点。
区块链(blockchain)是眼下的大热门,新闻媒体大量报道,宣称它将创造未来。
可是,简单易懂的入门文章却很少。
区块链到底是什么,有何特别之处,很少有解释。
下面,我就来尝试,写一篇最好懂的区块链教程。
毕竟它也不是很难的东西,核心概念非常简单,几句话就能说清楚。
我希望读完本文,你不仅可以理解区块链,还会明白什么是挖矿、为什么挖矿越来越难等问题。
需要说明的是,我并非这方面的专家。
虽然很早就关注,但是仔细地了解区块链,还是从今年初开始。
文中的错误和不准确的地方,欢迎大家指正。
区块链是什么?一句话,它是一种特殊的分布式数据库。
首先,区块链的主要作用是储存信息。
任何需要保存的信息,都可以写入区块链,也可以从里面读取,所以它是数据库。
其次,任何人都可以架设服务器,加入区块链网络,成为一个节点。
区块链的世界里面,没有中心节点,每个节点都是平等的,都保存着整个数据库。
你可以向任何一个节点,写入/读取数据,因为所有节点最后都会同步,保证区块链一致。
分布式数据库并非新发明,市场上早有此类产品。
但是,区块链有一个革命性特点。
区块链没有管理员,它是彻底无中心的。
其他的数据库都有管理员,但是区块链没有。
如果有人想对区块链添加审核,也实现不了,因为它的设计目标就是防止出现居于中心地位的管理当局。
正是因为无法管理,区块链才能做到无法被控制。
否则一旦大公司大集团控制了管理权,他们就会控制整个平台,其他使用者就都必须听命于他们了。
但是,没有了管理员,人人都可以往里面写入数据,怎么才能保证数据是可信的呢?被坏人改了怎么办?请接着往下读,这就是区块链奇妙的地方。
区块链由一个个区块(block)组成。
区块很像数据库的记录,每次写入数据,就是创建一个区块。
每个区块包含两个部分。
▪区块头(Head):记录当前区块的特征值▪区块体(Body):实际数据区块头包含了当前区块的多项特征值。
▪生成时间▪实际数据(即区块体)的哈希▪上一个区块的哈希▪...这里,你需要理解什么叫哈希(hash),这是理解区块链必需的。
所谓"哈希"就是计算机可以对任意内容,计算出一个长度相同的特征值。
区块链的哈希长度是256位,这就是说,不管原始内容是什么,最后都会计算出一个256位的二进制数字。
而且可以保证,只要原始内容不同,对应的哈希一定是不同的。
举例来说,字符串123的哈希是a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0(十六进制),转成二进制就是256位,而且只有123能得到这个哈希。
(理论上,其他字符串也有可能得到这个哈希,但是概率极低,可以近似认为不可能发生。
)因此,就有两个重要的推论。
▪推论1:每个区块的哈希都是不一样的,可以通过哈希标识区块。
▪推论2:如果区块的内容变了,它的哈希一定会改变。
区块与哈希是一一对应的,每个区块的哈希都是针对"区块头"(Head)计算的。
也就是说,把区块头的各项特征值,按照顺序连接在一起,组成一个很长的字符串,再对这个字符串计算哈希。
Hash = SHA256( 区块头 )上面就是区块哈希的计算公式,SHA256是区块链的哈希算法。
注意,这个公式里面只包含区块头,不包含区块体,也就是说,哈希由区块头唯一决定,前面说过,区块头包含很多内容,其中有当前区块体的哈希,还有上一个区块的哈希。
这意味着,如果当前区块体的内容变了,或者上一个区块的哈希变了,一定会引起当前区块的哈希改变。
这一点对区块链有重大意义。
如果有人修改了一个区块,该区块的哈希就变了。
为了让后面的区块还能连到它(因为下一个区块包含上一个区块的哈希),该人必须依次修改后面所有的区块,否则被改掉的区块就脱离区块链了。
由于后面要提到的原因,哈希的计算很耗时,短时间内修改多个区块几乎不可能发生,除非有人掌握了全网51%以上的计算能力。
正是通过这种联动机制,区块链保证了自身的可靠性,数据一旦写入,就无法被篡改。
这就像历史一样,发生了就是发生了,从此再无法改变。
每个区块都连着上一个区块,这也是"区块链"这个名字的由来。
由于必须保证节点之间的同步,所以新区块的添加速度不能太快。
试想一下,你刚刚同步了一个区块,准备基于它生成下一个区块,但这时别的节点又有新区块生成,你不得不放弃做了一半的计算,再次去同步。
因为每个区块的后面,只能跟着一个区块,你永远只能在最新区块的后面,生成下一个区块。
所以,你别无选择,一听到信号,就必须立刻同步。
所以,区块链的发明者中本聪(这是假名,真实身份至今未知)故意让添加新区块,变得很困难。
他的设计是,平均每10分钟,全网才能生成一个新区块,一小时也就六个。
这种产出速度不是通过命令达成的,而是故意设置了海量的计算。
也就是说,只有通过极其大量的计算,才能得到当前区块的有效哈希,从而把新区块添加到区块链。
由于计算量太大,所以快不起来。
这个过程就叫做采矿(mining),因为计算有效哈希的难度,好比在全世界的沙子里面,找到一粒符合条件的沙子。
计算哈希的机器就叫做矿机,操作矿机的人就叫做矿工。
读到这里,你可能会有一个疑问,人们都说采矿很难,可是采矿不就是用计算机算出一个哈希吗,这正是计算机的强项啊,怎么会变得很难,迟迟算不出来呢?原来不是任意一个哈希都可以,只有满足条件的哈希才会被区块链接受。
这个条件特别苛刻,使得绝大部分哈希都不满足要求,必须重算。
原来,区块头包含一个难度系数(difficulty),这个值决定了计算哈希的难度。
举例来说,第100000个区块的难度系数是14484.16236122。
区块链协议规定,使用一个常量除以难度系数,可以得到目标值(target)。
显然,难度系数越大,目标值就越小。
哈希的有效性跟目标值密切相关,只有小于目标值的哈希才是有效的,否则哈希无效,必须重算。
由于目标值非常小,哈希小于该值的机会极其渺茫,可能计算10亿次,才算中一次。
这就是采矿如此之慢的根本原因。
前面说过,当前区块的哈希由区块头唯一决定。
如果要对同一个区块反复计算哈希,就意味着,区块头必须不停地变化,否则不可能算出不一样的哈希。
区块头里面所有的特征值都是固定的,为了让区块头产生变化,中本聪故意增加了一个随机项,叫做Nonce。
Nonce 是一个随机值,矿工的作用其实就是猜出Nonce 的值,使得区块头的哈希可以小于目标值,从而能够写入区块链。
Nonce 是非常难猜的,目前只能通过穷举法一个个试错。
根据协议,Nonce 是一个32位的二进制值,即最大可以到21.47亿。
第100000 个区块的Nonce 值是274148111,可以理解成,矿工从0开始,一直计算了2.74 亿次,才得到了一个有效的Nonce 值,使得算出的哈希能够满足条件。
运气好的话,也许一会就找到了Nonce。
运气不好的话,可能算完了21.47亿次,都没有发现Nonce,即当前区块体不可能算出满足条件的哈希。
这时,协议允许矿工改变区块体,开始新的计算。
正如上一节所说,采矿具有随机性,没法保证正好十分钟产出一个区块,有时一分钟就算出来了,有时几个小时可能也没结果。
总体来看,随着硬件设备的提升,以及矿机的数量增长,计算速度一定会越来越快。
为了将产出速率恒定在十分钟,中本聪还设计了难度系数的动态调节机制。
他规定,难度系数每两周(2016个区块)调整一次。
如果这两周里面,区块的平均生成速度是9分钟,就意味着比法定速度快了10%,因此接下来的难度系数就要调高10%;如果平均生成速度是11分钟,就意味着比法定速度慢了10%,因此接下来的难度系数就要调低10%。
难度系数越调越高(目标值越来越小),导致了采矿越来越难。
即使区块链是可靠的,现在还有一个问题没有解决:如果两个人同时向区块链写入数据,也就是说,同时有两个区块加入,因为它们都连着前一个区块,就形成了分叉。
这时应该采纳哪一个区块呢?现在的规则是,新节点总是采用最长的那条区块链。
如果区块链有分叉,将看哪个分支在分叉点后面,先达到6个新区块(称为"六次确认")。
按照10分钟一个区块计算,一小时就可以确认。
由于新区块的生成速度由计算能力决定,所以这条规则就是说,拥有大多数计算能力的那条分支,就是正宗的区块链。
区块链作为无人管理的分布式数据库,从2009年开始已经运行了8年,没有出现大的问题。
这证明它是可行的。
但是,为了保证数据的可靠性,区块链也有自己的代价。
一是效率,数据写入区块链,最少要等待十分钟,所有节点都同步数据,则需要更多的时间;二是能耗,区块的生成需要矿工进行无数无意义的计算,这是非常耗费能源的。
因此,区块链的适用场景,其实非常有限。
1.不存在所有成员都信任的管理当局2.写入的数据不要求实时使用3.挖矿的收益能够弥补本身的成本如果无法满足上述的条件,那么传统的数据库是更好的解决方案。
目前,区块链最大的应用场景(可能也是唯一的应用场景),就是以比特币为代表的加密货币。
下一篇文章,我将会介绍比特币的入门知识。