弑君者

V1

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

默克尔树作用

  1. 提供默克尔证明,当一个交易被写到区块链中的时候,轻节点可以向全节点申请,获得当前交易数据,到默克尔树根节点的路径上的部分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

  1. version 协议版本信息
  2. hash of previous block header 前一个区块的区块头的hash
  3. merkle root hash
  4. target 挖矿的目标值
  5. nonce 挖矿需要找到的字符串,通过计算出nonce字符串,hash后小于targe,则证明挖矿成功

Block body

  1. 交易列表 transaction list

节点类型

  1. full node 保存交易的所有信息
  2. light node 只保存Block header的信息

比特币的共识机制 consensu of BitCoin

如何解决共识机制,系统中大多数的节点是好的,有一小部分节点是恶意的?

  1. 投票,投票谁有投票权,如果有超级计算机,产生超过半数的账户就会控制整个区块链。

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

出块时间是服从指数分布

挖矿

  1. 挖矿成功的概率和失败的概率是差别非常大的,不过这也很好理解,如果成功的概率很大,那收益也太大了😁。

比特币总量

比特币总量是2100万

比特币交易

比特币交易一般需要6个区块进行确认,然后才能确定交易成功

比特币区块链上中包含交易信息,但是假如极端情况下,没有交易信息,怎么办?

也会发布区块,只不过区块中包含的是空交易信息。

比特币网络

比特币网络是采用上链的交易集合

分类:

后端

标签:

区块链

作者介绍

弑君者
V1