弑君者
2022/09/27阅读:19主题:默认主题
区块链技术与应用笔记
比特币中的密码学原理
hash hash的三个特性
-
hash函数会存在hash碰撞,这个是不可避免的。 -
很难从hash值反推出输入hash函数的值。 -
无法根据输入值,预测算出的hash值的规律
hash使用的hash算法是sha256
签名
签名是使用私钥进行加密,接受者使用发送者的公钥,进行解密,查看信息。
比特币中的数据结构
hash指针
区块链中使用hash指针代替了普通的指针,所谓hash指针就是一种数据结构,包含一个指针和一个加密hash值
{
point,
hash
}

区块链就是通过hash指针连接起来的数据结构

所以区块链是无法修改的,假如我们修改了其中一个区块的数据,我们通过我们保存的hash值,就可以验证前面区块的内容是否正确,如果算出来的hash值和我们保存的hash值一致,就确认前面的区块内容是正确的,也就是合法的。
Merkle tree(默克尔树)
类似于二叉树,不过里边是使用hash指针,左边是hash指针,右边是hash指针

只要我们记住根节点的hash值,就可以检测出默克尔树中任何一个节点是否进行了修改,因为你进行了修改之后,hash指针就无法匹配了。
默克尔树是包含区块中数据的交易数据,也就是区块中的交易数据,按照默克尔树的形式保存在区块中。
区块链节点包含两种节点
-
轻节点表示只包含block header信息 -
全节点表示包含block header和block body
默克尔树作用
-
提供默克尔证明,当一个交易被写到区块链中的时候,轻节点可以向全节点申请,获得当前交易数据,到默克尔树根节点的路径上的部分hash信息,然后根据交易算出的hash,反推回根节点的hash值,根据反推回的hash值和轻节点自己保存的hash对比,确定交易是否真的被写入了区块中。
2. 可以证明某个交易不在某个区块链
hash指针不适合那种场景

比特币协议
假如央行发行数字货币,如何发行?
如果使用公私钥发行,只能确定数字货币是央行发布的,但是无法保证数字货币被人用来不断的复制,不断的使用。
也就是无法解决double spending attack
解决办法就是央行可以维持一个中心化验证机制,就是每次交易,都需要去央行中心进行验证。
但是去中心化的数字货币呢?
其实也就是如何解决谁有权利发行货币,如何解决double spending attack。

A节点需要有指针指向A中转给B和C中币的来源,并且需要说明自己的公钥。 这样假设有B1想伪造A节点转币给别人的时候,因为B1需要说明币的来源和B1的公钥,这个时候,因为B1说明的币的来源也就是A中说明的币的来源中包含A的公钥,这样验证就无法通过。
所有这些验证都是通过脚本程序自动验证。
区块结构
Block header
-
version 协议版本信息 -
hash of previous block header 前一个区块的区块头的hash -
merkle root hash -
target 挖矿的目标值 -
nonce 挖矿需要找到的字符串,通过计算出nonce字符串,hash后小于targe,则证明挖矿成功
Block body
-
交易列表 transaction list

节点类型
-
full node 保存交易的所有信息 -
light node 只保存Block header的信息
比特币的共识机制 consensu of BitCoin
如何解决共识机制,系统中大多数的节点是好的,有一小部分节点是恶意的?
-
投票,投票谁有投票权,如果有超级计算机,产生超过半数的账户就会控制整个区块链。
H(Block header)<= target 寻找nonce(4个字节)
区块链是根据计算力解决谁有发布区块的权利的问题,如果有节点计算出nonce之后,就可以发布区块。

这里A转到B是合法的,A转到A‘也是合法的,就是区块链合法
这个时候,需要查看哪个分叉长度比较长,也就是最长合法链
block reward 出块奖励
刚开始可以奖励50BTC 50BTC -> 25BTC -> 12.5BTC
比特币系统的具体实现
UTXO
通过UTXO,可以保证查看币是否是合法的,如果币不在UTXO中,说明币是不合法的。
交易费 transaction fee
Block header的内部属性

如果只是调整nonce达不到小于等于target,还可以调整默克尔树的根节点的hash 因为当挖到矿可以进行发币,所以可以调整默克尔树的根节点的hash
出块时间是服从指数分布
挖矿
-
挖矿成功的概率和失败的概率是差别非常大的,不过这也很好理解,如果成功的概率很大,那收益也太大了😁。
比特币总量
比特币总量是2100万
比特币交易
比特币交易一般需要6个区块进行确认,然后才能确定交易成功
比特币区块链上中包含交易信息,但是假如极端情况下,没有交易信息,怎么办?
也会发布区块,只不过区块中包含的是空交易信息。
比特币网络
比特币网络是采用上链的交易集合
作者介绍