区块链技术入门

区块链网络上,数据以区块的形式存储,想象一下有不少存储着数据的区块,它们被连接在一块儿,这些数据一旦被连接就对链上的任何人均可见,而且再也没法改变了。这是一项具备非凡革新意义的技术,能够用来记录咱们能想到的几乎全部数据(如:产权、身份、余额、病历等等),不用担忧被篡改安全

咱们以比特币为例,来看看区块链是什么样子的。网络

比特币区块链是现存历史最悠久的区块链,它只存储比特币的交易数据,就像一个庞大的交易记录库,可追溯至第一笔比特币交易。ide

假设有三个存储着数据的区块,以下图:
在这里插入图片描述
这三个区块内都存储了一些交易数据,就像三个独立的excel表格同样,记录了交易的内容。函数

区块1按照时间顺序从第一笔交易开始记录,直到存满(1MB),以后的交易记录会继续依次存到区块2、区块3,以此类推.学习

每一个数据块会根据内部数据生成一个特殊的独一无二的数字签名。区块链

将区块1的数字签名添加到区块2中,就把区块1的数据和区块2的数据关联起来了,区块1的签名与区块2的其余数据同样成为了区块2签名的基础。以下图:
在这里插入图片描述
正是这些签名将数据块连接在了一块儿,造成了一条区块链。如今加上区块3,这条链就像这样:
在这里插入图片描述网站

为何说它没法更改

先看看签名是怎么生成的。

将数据块中数据串,代入一个哈希函数获得一个独一无二的64位的值就是签名。ui

这看上去好像只须要逐个生成新的签名就能够神不知鬼不觉的更改数据了。怎么避免这种状况的发生呢?3d

咱们再定义一下挖矿

区块链协议会对签名有一些要求,只有合格的签名才能够做为签名用,好比比特币区块链会根据前面必定数量的区块签名的算力,给出目前签名的难度,好比只有很多于连续10个零开头的签名才算是合格的签名,对应的区块才能够上链。excel

不要小看这“连续10个零开头”的规定,就是它让篡改数据的人头疼。

由于并不知道代入什么值才能够获得连续10个零开头的64位的值,只能不断的改变代入哈希函数的值计算,直到获得合格的签名为止,这个过程当中不知道须要代入多少次,纯粹看运气。

数据块中的交易记录、上一个块的签名,是不可变数据,若是只将它们代入哈希函数会得出一个固定的值。

数据块中除了那些不可变数据,还另外添加了一段特定长度的、能够改动的数据,这就是nonce。nonce不是预先肯定的数据,而是根据实际须要而找出的一串彻底随机的数字。

也就是不断改变nonce,直到找到一个合格的签名,肯定下nonce的值。这种反复更改nonce,对区块数据进行哈希运算以寻找合格签名的过程叫作挖矿,也就是矿工作的事。

最长链规则

区块链上的全部矿工都必须在区块链协议下工做,这是中本聪共识机制的一部分,始终以最长链为主链(有效链)的原则,所谓的“最长链规则”。(不是全部区块链都采用了中本聪共识机制)。

如今,咱们再次假设有一个攻击者修改了某个数据块的数据。而且他想为以后全部的数据块生成新的签名。注意,网络上不仅有他一个矿工,现在比特币区块链上有数百万矿工,其余的矿工都在夜以继日的挖矿,在不断的生成新的数据块,新的签名。这个攻击者要有多大的算力多么爆棚的运气才能够超过全网的矿工。

挖矿须要投入大量的电力,转化成算力,来找到合格的签名。也就是说找到一个合格的签名至关难,并且是须要大量成本的,而要超过全网的矿工,其成本投入不可估量。

总结

区块链上的矿工数越多,整条链的安全性就越高。

有一种例外,恶意参与者的算力真的超过全网其余人的总和,从理论上讲是有可能篡改区块链的,这就叫作51%攻击,目前遭受过51%攻击的著名区块链如bitGold、Verge、Ethereum Classic。想深刻学习的同窗能够点击系统学习区块链进入深刻浅出区块链-技术博客网站。