区块链的基本原理
一,
区块链的三个基本概念:
假设, 我有一个账本,这个账本只允许添加 、不允许
删除 ---
交易: 每一次对账本的操作,导致账本状态改变,都是一次交易;
记录;
区块: 一个区块记录 一段时间内发生的所有交易和状态结果。 参与者会对这个时间内的所有导致账本状态改变的交易都进行确认,达到共识,这个区块才算合法;
链: 按照时间顺序,把各个区块串联起来而成,是整个账本状态变化的日志记录;
账本的底层基本结构是一个线性的链表。
如何往链上添加一个区块?
一个区块基本内容包括:
1.上一个区块的哈希值
2.这个新区块的内容
3.一个符合要求的nonce随机串。
上一个区块的哈希值能够快速判断这个新区块的内容是否合法。
nonce随机串是计算机消耗时间不停去计算尝试得到的。目的是使这个候选区块的哈希结果满足一定条件(比如小于某个值)。
只有内容合法+nonce随机串合法,这个 区块在格式上才会被认为“合法”。 合法之后,就会在网络中被广播出去。 其他节点收到广播,对这个候选区块进行验证,发现确实符合条件,才会承认“emmm, 是合法的,我就添加到我自己维护的区块链上吧”。 当多个节点都这样子承认了之后, 这个候选区块才会被网络接受,区块中的交易才会被认可。
在以上过程中, 有两个比较关键的步骤:
- 完成某个时间段里所有交易的共识(就是创建一个区块)
- 新区块添加到区块链中,被大家认可,被保护,无法篡改
二,
上面说到,创建区块,需要有一个合法的nonce随机串, 计算机要不停计算尝试才能得到。 这个根据算力寻找 nonce 串的识机制称为工作量证明( Proof of Work ,PoW )。
目前,要让哈希结果满足一定条件,并无已知的快速启发式算法,只能进行尝试性的暴力计算 。 尝试的次数越多(工作量越大),算出来的概率越大 。
通过调节对哈希结果的限制,比特币网络控制平均约 10 分钟产生一个合法区块 。 算出区块的节点将得到区块中所有交易的管理费和协议固定发放的奖励费,这个计算新区块的过程俗称为挖矿 。
而每个进行挖矿行为的计算机都被成为矿工。
只要你的电脑配置ok,每个人都可以使用自己的电脑进行挖矿。 那么问题就来了,如果有人恶意操作,故意不承认别人的合法交易咋办?
实际上,这种分布式的记账,比特币网络中存在大量的维护节点,而且大部分节点都是正常工作的,默认都只承认所看到的最长的链结构,只要网络中没有超过一半的节点提前勾结一起采取恶意行动,则最长的链将很大概率上成为最终合法的链 。而且随着时间增加,这个概率会越来越大。
如果,非得聚集超过一半以上的节点去作恶,那也得消耗很大的算力,他要是有这算力早就算出n个合法的区块啦....