区块链之区块和交易
1. 区块链(blockchain)
从其名称就可窥得一二,blockchain = block + chain; 即由区块和链表组成,当然,区块链不仅仅指单纯的区块数据及数据组织,它还包括了区块链运行的分布式网络等,我们先从最简单的区块链数据说起。
区块,是在区块链网络中的数据组织单元,由链表来将区块进行串联。那这区块链与我们数据结构中的链表有什么区别呢?为何说它是一场技术革新呢?这就要从它的block构成说起。
区块链中的区块(block),由区块头、区块主体组成。
区块头,包括了前一块的哈希值,本区块的时间戳,区块主体的merkle数根,难度目标和随机值组成。
1.1 哈希
把区块链与普通的链表区分开来的关键元素之一就是哈希散列,它解决了链表的不可篡改问题。在通常的链表中,将链断开,重新插入一个新的链,或者修改链表中的数据,是对链表中的左右节点没有影响的。
而在区块链中,区块头包含了上一个区块的哈希散列,如果不清楚哈希散列的(下文介绍),可以将它当成一个加密值,当区块变化,这个加密值自然也发生变化,这个值由上个区块的区块头经过哈希得到。可以很容易的通过再次计算上个区块的头,来验证是否发生了篡改。
merkle树根也是应用的哈希方法对交易进行加密,它将交易两两hash, 并在上级也进行层层hash,直到根节点。
1.2 什么是哈希
哈希也叫哈希散列,是对数据的一种转换,将固定长度或者变长的数据,转换成指定长度的算法。
哈希常用在数据结构和密码学中,由于用途不同,在这两个领域中,哈希的含义并不相同,所以算法的侧重点也不一样。
在数据结构中,哈希主要的用途是用来加快查找速度,方便定位数据,如hashmap; hashmap通过对值进行hash,可以得到较均匀的key, 通过定位key,能加快查找value。key的作用是为了将元素适当地放在各个桶里,对于抗碰撞的要求没有那么高。换句话说,hash出来的key,只要保证value大致均匀的放在不同的桶里就可以了。所以其hash算法主要侧重于速度,如redis存储就是使用的哈希,数据存放在桶中。
常用的哈希有MD5、SHA2、SHA256等等。
2. 区块主体-交易
区块主体由一个个trasations组成,即打包的交易。它是存储在区块链中的实际数据,而区块则是记录确认某些交易是在何时以及何种顺序成为区块链中的一部分。
2.1 交易是如何打包
当客户端发起一笔交易,它将会广播到网络上,它会被存储各个矿机的一个缓存池中,等待矿机挖出区块以后,将其打包到区块中。
其中涉及到几个词语:客户端、矿机、挖矿。
1> 客户端
客户端指向区块链网络发起交易的一端,比如钱包。当用户通过钱包向某个账户进行转账,则这笔交易就会发送到区块链网络上。
2> 矿机和挖矿
区块链中为了实现安全的点对点交易,使用了区块和哈希来保证安全性和不可篡改性。那么就需要机器来产生区块,并且每次是全网唯一的一个区块,所以比特币是这样设计的:
由系统出一道难题,最先解出来的机器,就能产生区块,来打包交易;作为奖励,会送这台机器比特币。这个过程就成为挖矿,你可以理解为就像挖矿一样,需要通过不断的努力,才能得到想要的东西;
某台计算机通过不停的计算,由于其机器性能比较高,最快得到了正确的答案,它将这个喜讯广播到网络中,告诉其他机器,哈哈哈哈,这道题被为解出来了,你们看是这样的,所以你们放弃吧。其他机器收到这个噩耗,对这个解出的区块进行检查,发现结果是正确的,就会放弃当前的解题,当这个机器挖出来的作为区块链中最后的区块;并且投身到新的解题中。
为了抢占更多的区块,就要求计算机性能比较好,一台计算机就不够,可能是一群计算机,这就叫矿机和矿池。是为了专门进行挖矿,挖到越多的区块,其赚的的比特币也就越多。
其中有个问题,其他机器是如何校验挖矿成功的机器的结果是正确的,而不是随便填了一个值来忽悠大家呢,照理说大家也没有解出答案,都不知道答案,怎么就能知道它解出的是对的呢?那是因为题目虽然解题非常难,但是校验结果却是非常简单的。举个简单的例子:x % 3 = 1 , 假设题目是1和3,求x,x值可能有很多个,最先解出来的机器的答案是7,其他人很容易用7 % 3来校验其结果是不是正确,但是反过来,通过1 和 3来求x就有很多种可能。当然,比特币并不是这样简单的题目,这个举例只是为了更容易的理解计算难,校验简单是怎么一回事。
比特币通过修改题目的难度,来控制区块大概每10分钟产生一个。
2.2 区块打包交易的优先级
当区块产生以后,将会将其先去收到的缓存交易打包到区块中,当交易太多,可能一个区块打包不下,因为区块大小不是无限大的。那么矿机会按照这样的原则进行优先级排序,将优先级在前面的先处理。
1>交易时间
即这笔交易是何时产生的,先转账的先处理
2>手续费
每笔交易都需要支付手续费,手续费越高的越先处理
当网络中的交易不多时,手续费的高低可能对速度的感知不明显,当比特币交易很多时,手续费低的,可能会等待非常久才能处理到,它会优先处理手续费高的。手续费也是矿机的收入来源之一。
总结:区块头 + 交易组成了区块,区块 + 哈希组成了狭义上的区块链。
交易由客户端发起,由网络上的矿机处理,打包到区块中,变成不可篡改的交易,保证了交易的安全性,也就是对交易进行了确认。