中本聪共识


中本共识(Nakamoto Consensus)是指比特币和其他一些基于区块链技术的加密货币所采用的共识机制

中本聪共识(简称,NC共识) = PoW共识 + 时间戳 + 激励机制 + 最长链原则

1.PoW共识:

即工作量证明(PoW),表示全网所有节点共同求解一道数学难题,寻找一个随机数使得区块头的哈希值小于等于目标哈希值,并将满足条件的区块存储在区块链上,使得全网的节点认可这个区块,即完成PoW共识。(每个节点的计算能力即“算力”来竞争记账权的机制。 )

对于特定字符串后接随机nonce值所构成的串,要找到这样的nonce值,满足前n位均为0的SHA256值,需要多次进行哈希值的计算。

一般来说,n值越大,需要完成的哈希计算量也越大。由于哈希值的伪随机特性,要寻找4个前导0的哈希值,预期大概要进行216次尝试,这个数学期望的计算次数,就是所要求的“工作量”。

比特币网络中任何一个节点,如果想生成一个新的区块并写入区块链,必须解出比特币网络出的PoW问题。这道题关键的3个要素是工作量证明函数、区块及难度值。工作量证明函数是这道题的计算方法,区块决定了这道题的输入数据,难度值决定了这道题所需要的计算量。

1.1哈希指针

哈希指针是一类数据结构,除了包含通常的指针外,还包含一些数据信息以及与这些信息相关的密码哈希值,这就使得正常的指针可用于取回信息,哈希指针用于验证信息是否发生改变。

区块链中,前一个区块指针由哈希指针所替换,因此每个区块不仅仅告诉前一个区块的位置,也提供一个哈希值去验证这个区块所包含的数据是否发生改变。

比特币区块结构如下图所示:

比特币的区块由区块头及该区块所包含的交易列表组成。区块头的大小为80字节

4字节的版本号

32字节的上一个区块的哈希值

32字节的Merkle根哈希值

4字节的时间戳(当前时间)

4字节的当前难度值

4字节的随机数组成

区块包含的交易列表则附加在区块头后面,其中的第一笔交易是coinbase交易,这是一笔为了让矿工获得奖励及手续费的特殊交易。

1.2Merkle树

Merkle树大多用来进行完整性验证处理。Merkle树会大大减少数据的传输量以及计算的复杂度。

Merkle哈希树是一类基于哈希值的二叉树或多叉树,其叶子节点上的值通常为数据块的哈希值,而非叶子节点上的值是将该节点的所有子节点的组合结果的哈希值。

 区块链中的Merkle树是二叉树,用于存储交易信息。每个交易两两配对,构成Merkle树的叶子节点,进而生成整个Merkle树。

Merkle树使得用户可以通过从区块头得到的Merkle树根和别的用户所提供的中间哈希值列表去验证某个交易是否包含在区块中

Merkle树在区块链中的作用

  1. 数据完整性验证:Merkle树被用来验证区块中的交易数据的完整性。在一个区块中,交易数据经过哈希计算形成叶子节点,然后逐级合并成Merkle树的根节点。这样,通过比对区块头中的Merkle树根哈希值和区块中交易的哈希值,网络参与者可以有效地验证交易数据的完整性。如果根哈希值匹配,那么可以相信区块中的所有交易数据都是完整的,没有被篡改。
  2. 轻量级验证:Merkle树可以提供一种轻量级的验证机制。即使区块链中包含了大量的交易数据,但参与者只需获取Merkle树的根哈希值即可轻松验证交易的完整性,而无需获取和处理所有的交易数据。这种机制使得区块链网络的验证过程更加高效和快速。
  3. 快速定位数据:在某些情况下,Merkle树还可以用于快速定位具体的数据块。通过Merkle树的结构,可以在O(log n)的时间复杂度内快速定位到某个特定的数据块,这在某些场景下具有重要意义。

(如果需要验证某个特定的数据块,我们首先需要知道它的哈希值。通过这个哈希值,我们可以追溯到树的底部,找到包含该数据块哈希值的叶节点。然后,我们可以向上遍历树,逐级计算父节点的哈希值,直到计算到根节点为止。最终,我们将得到的根节点的哈希值与事先知道的 Merkle 根进行比较。如果它们相等,那么该数据块就是完整的。)

1.3数字签名

第一,只有你可以制作你自己的签名,但任何看到它的人都可以验证其有效

性;第二,我们希望签名只与某一特定文件发生联系,因此该签名不能用于表明你同意或

支持另一份不同的文件。对于手写签名来说,第二条就如同确保别人不能将你的签名从一

份文件上剪下来,贴到另一份文件的末尾那样。

数字签名方案由以下三个算法构成:

● (sk, pk) :=generateKeys(keysize) generateKeys方法把keysize作为输入,来产生一对公钥和私钥。私钥sk被安全保存,并用来签名一段消息;公钥pk是人人都可以找到的,拿到它,就可以用来验证你的签名。

● sig:=sign(sk, message) 签名过程是把一段消息和私钥作为一个输入,对于消息输出是签名。

● isValid:=verify(pk, message, sig) 验证过程是通过把一段消息和签名消息与公钥作为输入,如果返回的结果是真,证明签名属实;如果返回的结果为假,证明签名消息为假。

我们要求以下两个性质有效:

● 有效签名可以通过验证,即:verify(pk, message, sign(sk, message))==true

● 签名不可伪造。

1.4公钥即身份

公钥被视为一个身份的标识,而私钥则是与该身份相关联的机密信息。当某个消息被正确验证时,即使用公钥验证通过,那么可以确信该消息来自于与该公钥相关联的身份。

这种方法的优势在于,你可以随时创建新的身份,只需生成新的密钥对即可。公钥可以被视为你的身份标识,而私钥则是与之关联的控制权。在这种情况下,人们可以验证消息的真实性,通过验证消息使用的公钥以及消息的签名。

公钥通常是看起来像随机数的一串字符,它本身并不能直接揭示出你的真实身份。然而,一旦你开始使用这个公钥来签署消息或者发表声明,就可能暴露你的一些信息,导致你的真实身份被人识别出来。

这种技巧提供了一种方便且安全的方式来管理身份和数字签名,同时也为创建和管理身份提供了灵活性和隐私保护。

地址类似于一个银行账户的账号,想要给一个人转比特币,只要知道他的比特币地址就可以了。

私钥是用来给交易签名,用来证明这笔交易是有你发起的,别人收到这笔交易通过验证签名就可以确认交易中涉及的资金是合法的。

公钥加密  私钥解密 私钥签名  公钥验签 

私钥生成公钥,公钥生成地址

地址其实就是公钥的哈希值。

时间戳:表示生成区块的时间,能有效的对交易进行排序,防止双花(double spending)交易。

激励机制:表示系统对生成区块的矿工给予奖励,以提供动力,从而增加网络节点的规模,防止51%攻击。

最长链原则:系统始终会选择链条最长的链来作为主链,但是会导致区块确认时间较长和资源浪费等缺点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值