区块链在维基百科上是这样被定义的:区块链是一个分布式数据库,用于维护不断增加的记录列表(称为区块)。
这个解释听起来并不像想象中那么晦涩难懂。但,它究竟是什么样的,又是如何运作的呢?
为了清晰的展示一个“区块链”我们将会使用一个叫做“Blockchan CLI”的开源编码工具。于此同时,我也开发了一个基于浏览器应用的版本供大家参考使用。
先不要被这些技术细节吓到,即使你不是一个专业的“程序猿”,你只是“入门级”的新手或者单纯的对区块链技术感兴趣,你也可以通过以下的展示,看到这项技术的本质,让你对它有更进一步的理解。
首先我们要安装上面提到的开发软件,大功告成之后,运行终端,你会看到这样一句话:
接下来我们来看看一个“区块”长什么样子?
首先你要在命令提示符后输入blockchain或者bc,紧接着你就会看到以下画面。
这就是一个Block
下面我们来科普下这些字眼都是什么意思。
❶ Index (Block #)编号:这是哪一个区块?(这个命名为Genesis的区块的编号就是)
❷ Hash函数:简单的理解就是接受一段数据作为输入,然后生成一串数据作为输出,来判断这个区块是否有效
❸ Previous Hash:前一个区块是否有效?
❹ Timestamp:这个区块是什么时间创建的
❺ Data:这个区块里储存了什么样的数据
❻ Nonce:需要运行多少次算法循环(迭代)才能定位这个区块
在我们的的示例中,所有新建的区块链都会以为开端。我们都知道,每一个新产生的区块都是基于上一个区块的,所以这个Genesis是第一个我们要“挖”的块。
什么是“挖”呢?期间究竟发生了什么?
接下来就让我们开始吧。在命令提示符后输入mine IloveHuer♥。
就像我们在之前提到的,当前的区块都是基于上一个区块而建立的。这个例子中,我们着手开始的区块就是命名Genesis的这个Block。
❶ Index:o+1 = 1
❸ Timestamp:区块被添加的时间
❹ Data:IloveHuer♥
❺ Hash:??
❻ Nonce:??
到这里我们就又回产生一个疑问,我们正在创建的这个区块的Hash值是怎么得到的呢?我们简单的看下。Hash值的定义:它是用来标识数据,唯一的且有固定长度的数值。Hash函数会把Index,前一个区块的Hash值及以上述所列出的所有数据作为输入值,计算后的出新的Hash值。得到的Hash值都是唯一的,并且相同的输入值只会得到同一个Hash值。
此时你还会注意到Hash值还有一个特点,就是开头都至少有四个,不用深入理解,这也被称作我们都熟悉的POW系统。
紧接着我们再来解释下什么是nonce。
通俗点说,nonce就是一个数字,它表示在寻找到下一个有效的区块Hash值所需运行算法的次数。这个计算nonce值的算法过程就是我们所说的“挖”:寻找一个有效的区块,并进行确认。
以下代(字)码(母)就代表一个简单的“挖”的过程,当然实际的操作和算法会复杂的多,同时还要强大的处理器来运行所有的代码。
所有成功“挖”到的人都会获得一定数量的比特币或者佣金作为奖励,他们在维护区块链安全和功能的同时,也获得了报酬。
最后我们来解释下为什么区块链这样运作的机制的意义。
这样的原理机制保证了区块链的不可复制和随意篡改的特性。
比如,我们现在有以下区块链A→B→C,如果有人试图修改在A上的数据,那么会有以下连锁反应:
1.区块A上的数据发生改变;
2.区块A的Hash值发生变化,因为录入值data一项发生了改变;
3.此时,A的Hash值会因为输入数据被篡改,Hash值失去开端的“几个0”,区块A变无效;
4.区块B的Hash值发生变化,因为A的Hash值曾用来计算B;
5.区块B变无效;
6.同理,区块C Hash值发生变化;
7.区块C变无效。
写到这里,相信大多数人对区块链的原理技术会有一个大致的了解了。大家不需要都懂编程或过分纠结一些专业词汇,明白其中的大致原理即可。当然有钻研探究精神的同学也可以多了解多尝试。
领取专属 10元无门槛券
私享最新 技术干货