区块链学习笔记1

区块链在本质上就是一种记账方法。

在区块链网络中,每个节点都维护着自己的一个账本,账本中记录着网络中发生的一笔笔账务。通过某种规则选出一个记账的节点,这个规则被称为“共识算法”。(在比特币系统中有一种激励机制,即负责记账的节点会获得额外的奖金。因此大家都会去抢夺记账权,而在此处,比特币系统设置了一个竞争机制,让各节点去抢,抢到这个机会就会获得记账权并得到这笔奖励,这种机制被称为“挖矿”)。

选出一个节点后,则一段时间内的账务数据都以这个节点记录的为准,这个节点记录后会把数据广播出去,告诉其他的节点,其他节点只需要通过网络来接收新的数据,接收后各自根据 自己现有的账本验证一下能不能接得上,有没有不匹配和不规范的,如果都符合要求,就存储到自己的账本中。

在区块链系统中采用了非对称加密,用公钥加密的数据必须用对应的私钥来解密,而用私钥加密(通常称为“签名”)的数 据必须用对应的公钥来解密。这个特点可是能发挥很大用处的,如果张三要发送给李四一张支票,那怎么传送呢?他在支票上用李四的公钥加了个密,然后再签上自己的名字(使用 自己的私钥签名),这个时候其他人就算拿到支票也没用,因为只有李 四才有自己的私钥,也只有李四才能解开这张支票来使用。这被称作"脚本系统"。

现在我们知道了,区块链的技术理念,其实就是大家共同来参与记账,通过一种规则不断地选出账务打包者,其他节点接收验证,并且每 个用户都有一对密钥表示自己,通过脚本系统的功能实现在公共网络中 定向发送有价值的数据。

区块链将产生的数据按照一定的时间间隔,分成一个个的数据块记录,然后再根据数据块的先后关系串联起来,也就是所谓的区块链了。

区块链核心技术:区块链账本、共识机制、密码算法、网络路由、脚本系统

区块链账本:

区块链学习笔记1_第1张图片

区块数据在逻辑上分成了区块头和区块体,每个区块头中通过梅克尔根关联了区块中众多的交易事务,而每个区块之间通过区 块头哈希值(区块头哈希值就是一个区块的身份证号)串联起来。这种链式结构的好处在于难以从中间破坏区块,因为如果修改其中一块,就必须修改前面的所有块,这样的难度是很大的。至于为什么修改一块就得修改前面所有块以及什么是梅尔克根会在下面提到。

共识机制:共识算法其实就是一个规则,每个节点都按照这个规则去确认各自 的数据。我们暂且抛开算法的原理,先来想一想在生活中我们会如何解 决这样一个问题:假设一群人开会,这群人中并没有一个领导或者说老 大,大家各抒己见,那么最后如何统一出一个决定出来呢?实际处理的 时候,我们一般会在某一个时间段中选出一个人来发表意见,那个人负 责汇总大家的内容,然后发布完整的意见,其他人投票表决,每个人都 有机会来做汇总发表,最后谁的支持者多就以谁的最终意见为准。这种 思路其实就算是一种共识算法了。然而在实际过程中,如果人数不多并 且数量是确定的,那还好处理些,如果人数很多而且数量也不固定,那 我们就很难让每个人都去发表意见然后再来投票决定了,这样效率就太 低了。我们需要通过一种机制筛选出最有代表性的人,在共识算法中就 是筛选出具有代表性的节点。(起初我以为共识算法是一种保障各节点数据相同的算法,而选择代表性的节点是另一个东西。现在看来好像这两者就是一回事。。)

密码算法:区块链本质上是一个链表,不同之处在于区块链的指针不是地址,而是哈希值。哈希值是通过密码算法中的哈希 算法计算得出的。哈希算法可以通过对一段数据计算后得出一段摘要字 符串,这种摘要字符串与原始数据是唯一对应的。如果对 原始数据进行修改,哪怕只是一点点修改,那么计算出来的哈希值都会 发生完全的变化。区块链账本对每个区块都会计算出一个哈希值,称为 区块哈希,通过区块哈希来串联区块。这有一个很好的作用就是,如果 有人篡改了中间的某一个区块数据,那么后面的区块就都要进行修改, 这个时候并不是简单地修改一下后面区块的地址指向就能结束的,由于 后面的区块是通过区块哈希来指向的,只要前面的区块发生变动,这个 区块哈希就无效了,就指不到正确的区块了。(这是因为哈希值本身也是计算区块哈希的一部分,如果中间一块被改了,那么这块的哈希值就变了,前面的区块就要修改区块的指向,这就意味着这块区块的哈希值也发生了变化,那么以此类推,前面的哈希值都变了,都得改)

区块中包含的每一笔事务数据也会被计算出一个哈希值,称 为“事务哈希”,每一个事务哈希都可以唯一地表示一个事务。对一个区 块中所有的事务进行哈希计算后,可以得出一组事务哈希,再通过对这 些事务哈希进行加工处理,最终会得出一棵哈希树的数据结构。哈希树 的顶部就是树根,称为“梅克尔根”。通过这个梅克尔根就可以将整个区 块中的事务约束起来,只要区块中的事务有任何改变,梅克尔根就会发 生变化,利用这一点,可以确保区块数据的完整性。
 

网络路由:在分布式的网络结构中,不存在一个指定 的服务器,大家没法通过一个服务器来直接交换彼此的身份信息,就只 能依靠彼此联系并传播信息。在区块链系统中,这个功能一般会定义成 一种协议,称为“节点发现协议”。
除了要发现节点外,更重要的一个功能就是同步数据。节点要保持 自己的账本数据是最新的,就必须要时时更新自己的数据。从哪更新 呢?既然没有服务器来下载,那就是通过邻近的节点了。通过向邻近节 点发送数据请求来获得最新的数据,节点彼此都充当服务者和被服务 者,通过这种方式,网络中的每一个节点都会在某一个时刻达成数据上 的一致。
 

 

 

参考自《白话区块链》

 

你可能感兴趣的:(区块链学习笔记1)