本章我们来看下区块链是怎么构成的,并且来看看区块链的交易,这个最重要的部分是怎么运作的。
区块链的构成
区块链正如它名字一样,我们可以理解它是由区块和链组成的,一个个的区块被串在了一起,形成了一条链。上面记载着从开始到现在的所有记录。我们可以把区块链想象成一个堆栈,每个区块都指向前序的区块。
我们看到上述模型,区块是一个个被链接起来的,一个区块保留着上一个区块的哈希。那这个哈希值是什么呢?
对于区块链的哈希我们可以分为两块来说,一个哈希是用来标识当前区块链的,通过对区块头进行两次SHA256生成。
另一个哈希值就是上一个区块的哈希,是对上一个区块的引用,所以如果我们更改其中一个的区块信息,就要重新计算哈希值,后续所有区块的哈希值都要变更,除非重新计算后面所有的区块,不然这个区块就没有办法修改
区块的核心内容就是一长串的交易数据,它们被打包在了区块之中。比特币网络中,平均每隔10分钟就会打包确认一个区块。但是随着这个网络算力的提升,10分钟的打包时间是否就可以缩短了?当然不是,中本聪在设计的时候就在头信息中加入了目标值,用于动态的调整网络的算力。那随机数又是什么呢?就是用户计算目标值使用的变量,默认都是从0开始的。随机数和目标值在之后的挖矿篇章会详细说明
所以我们看到区块链是由区块的头信息和区块体以及区块之间的链接构成的
关于头信息区块链的头信息,我们可以看下下面这张来自“mastering bitcoin”这本书中的图。
涉及到的字段会在接下来的文章中讲解到
区块链的交易
区块体的重要组成部分是交易,传输、验证等一系列区块链的操作都是围绕着交易,服务于交易的。下面就是中本聪论文中提到的交易模型
模型中有公私钥、签名、验证、哈希等,接下来我们就来分别讲下
首先说到了非对称加密的公私钥机制,比特币网络的交易发送者使用私钥进行签名,而接收者使用对应的公钥进行验证。用户使用自己的私钥将前一次交易和下一个拥有者的公钥签署一个哈希数字签名,添加到电子货币的末尾,以这种方式来进行交易,因为交易记录是公开的,所以交易无需在安全的网络中进行传输。
交易发生后我们都可以使用拥有者的公钥来进行验证。
只要我们保管好私钥,那交易就是安全的,由于区块链的匿名性,如果遗失或者公开了密钥,那么交易后的电子货币就不完全属于你了。
我们看中本聪的论文时会发现,对于这个交易模型还提出了一个问题,就是A用户在给B用户转移电子货币时,你怎么能确认A用户没有付款给C用户呢?
中本聪提出了交易必须是公开的,并且让所有参与者对交易收到顺序的单一历史达成共识
所以我们引入了时间戳服务器
关于时间戳服务
一般传统的时间戳服务会又机构或公司提供,其实时间戳服务比较简单,就是一个标识时间戳的字符串。但是这个字符串是否有权威,是否是可信的,就会
涉及到对应公司的资质。所以我们看到有很多公司在提供时间戳的服务,但这种方式对于比特币来说肯定是不合适的。我们不能在区块链网络中引入一个中心化
的时间戳服务
这个时候中本聪就提出了一种时间戳的概念,这个就涉及到之后会说到的共识机制,我们可以先看下示意图
简单来说比特币网络提出了一个分布式的时间戳服务的方案,在比特币的头信息中,是包含一个时间戳的,但是并不准确,这个时间戳wiki上的解释是只要大于前11个区块的时间戳中值且小于网络调整时间 + 2 小时就被认为是有效的,所以仅仅依靠这个时间戳是不够的。我们看到上面示意图的展示,比特币网络通过将区块的哈希值串成一条链,来证明数据在这个时间点是存在的。比特币网络的时间戳我们可以简单的理解成是通过哈希值来实现的,由数据得到哈希值,由于哈希的不断连接、不断增强,来确认了各个数据的时间位置。其中涉及到的区块的确认,我们在之后会再说到
总结下来区块链的模型往粗的来说,就是单向链接的区块,在区块中包含了一些头信息和最重要的区块的交易信息
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。