Bitcoin

第一个完全分布式的p2p的数字加密货币

完全分布式

没有中心的访问节点,没有任何信用系统

P2p

点对点,网络发行

比特币价值

由挖矿难度决定

原理

怎么工作的

钱包

软件—记录着目为止所有比特币的交易—能管理私钥,生成比特币地址—发送、接受、存储比特币

私钥

独有
一般256位的随机数
可以类比为银行卡密码

公钥

由私钥生成的
公钥私钥并非一一对应
类似银行卡账号
可以看到余额

比特币地址

由公钥产生
第一位是1
由于接收比特币

加密复杂,验证简单

交易过程

只有jack能收到btc

因为bob用jack的公钥加密信息以及bob自己的数字签名

生成交易后会全网广播

每个人都能收到这个信息但是只有jack能解密,因为是用他的公钥加密的

其他人记录这笔交易

生成区块

区块

记录网络的交易信息

每个区块就是一个账本

大小<=1MB

产生大概在10min

每个区块大概记录4000条交易

区块链

记录比特币交易信息,就是一个账本

区块头

保证区块加密性

trans就是交易记录

区块难度

保证区块生成;决定挖矿难度

Nonce

Merkle root的关键参数

Merkel root

根据区块的所有交易记录生成的哈希值,保证区块的难度在一定区间内,

Merkel tree

最底层子节点是交易信息

每一个交易的信息都不允许被篡改

哈希函数:输入可以是0~无限位,输出都是一个256位的数——原始文件中任何改动会导致生成值的巨大差别

Pros of Merkel tree

只保存头部,因为头部有哈希值
分布式账本,大家都保留了账本,防止篡改——如果一个人想篡改,需要改变所有人的账本

节点

在分布式账本中,节点是网络中参与维护账本的设备或计算机。每个节点都运行着账本的一个副本,并通过共识算法与其他节点进行通信和协作。节点可以是个人计算机、服务器或其他网络设备。它们相互之间通过网络进行连接,并共同构成了分布式账本的网络。

区块

区块是分布式账本中的数据结构,用于存储一系列交易和相关的元数据。每个区块包含一个头部和一组交易记录。头部通常包含区块的哈希值、时间戳、前一个区块的哈希值以及其他元数据。

每年发布比特币恒定,保证了信用

怎么产生一个区块

实际就是在不断记录交易

一个交易产生会向全网进行广播,当所有的矿工收到这条广播后会把所有的交易存入自己当前区块中,当存入交易信息足够多,会为当前交易信息生成一个Merkel root,若难度系数也已满足目标,将该区块向全网进行广播,大家验证难度系数,若认可工作量,大家会把矿工产生的该区块加入到自己本地的区块中去,所有人接着该区块完成下一个区块。一条交易若被六个区块都确认就很难被篡改。【后续有六个区块】

广播交易

区块生成和验证

矿工节点会将收集到的交易信息打包成一个区块,并为该区块生成一个 Merkle Root。此外,矿工还需要通过解决一个复杂的数学难题,即工作量证明(Proof-of-Work)来满足难度系数要求。这个过程被称为挖矿。一旦矿工找到了符合难度系数的解,他们会将该区块广播到比特币网络中。

区块验证和认可

当其他节点收到新的区块广播时,它们会验证区块的有效性和符合规则。这个过程包括验证区块中的交易、验证工作量证明和检查区块的结构。如果区块通过验证,其他节点会接受该区块,并将其添加到自己的本地区块链中。这样,区块链将会延长,形成共识。

在比特币网络中,当其他节点接收到新的交易时,它们会验证交易的有效性,并将其加入到自己的内存池(也称为交易池)中。内存池是一个存储待处理交易的临时区域,其中包含其他节点广播的交易。

交易池的作用是为矿工节点提供交易选择的范围。当矿工准备挖掘新的区块时,它们从内存池中选择一些交易进行打包,形成新的区块。然后,这个新的区块被广播到网络中的其他节点。

在广播区块时,矿工节点通常只广播区块的头部信息和交易的摘要(例如,默克尔树的根)。其他节点接收到区块后,会验证区块的完整性,包括验证区块中的所有交易。如果验证通过,那么它们会将这个区块存储在本地的区块链中,并从内存池中移除相应的交易。

交易池

验证

区块链和挖矿怎么联系起来?

挖矿

生成区块的过程【产生哈希值的过程】

难度系数

区块上记录账本信息,记录完账本信息要为每个区块生成哈希值,计算哈希值就是在不断付出算力,如果算出的Merkel root满足difficulty target也就是难度系数,大家就认为这个区块是有效的,产生有效区块会得到一定的奖励。

难度系数

控制大概每10min生成6个区块

工作量证明

为了生成一个有效的区块,矿工节点需要进行工作量证明,即通过解决一个复杂的数学难题来找到符合难度目标(difficulty target)的区块头部的哈希值。这个数学难题通常是计算区块头部哈希的哈希值(也称为区块哈希),并将其与难度目标进行比较。

难度目标是一个固定的数值,它决定了挖矿的难度。矿工需要使用大量的计算能力来尝试不同的哈希值,直到找到一个满足难度目标的哈希值。这需要不断地尝试不同的随机数(称为Nonce),直到找到一个合适的哈希值。

btc供应恒定

每四年减半

难度

哈系数的本质是一个穷举算法,产生一个随机数

本质上难度系数不断变小,增加穷举次数,

信用

分布式系统

独立的验证机制

所有的交易信息被记录在全网

Proof of work

nonce是算哈希值的依据,可以不断修改

分叉

同时多个符合要求的区块

如何选择

选择较长的链,认为付出越多的算力的链越可靠

区块链

智能合约

公有链

私有链

一般有一个中心节点,