在前面的话
这份笔记,省去了大量严谨的密码学知识,比如非对称加密的内容。
数字货币与电子货币
数字货币和电子货币的关键都在于记账,但是电子货币采用中心化记账,而数字货币通过去中心化特性来确保没有人能够操纵数字货币。
而比特币就是一种加密数字货币。
比特币工作原理
比特币钱包
- 比特币钱包用于存储私钥和公钥,里面没有比特币
- 私钥用于付款时的数字签名,公钥可以得到比特币地址用于收款
A从账户X中转账给账户Y的具体交易过程:
- A向全网发布广播,广播中的信息需要包含:
- 原始交易信息(包含打款金额、打款账户地址、收款账户地址)
- 原始交易信息经过Hash算法后得到的一条摘要信息
- 签名(用私钥对交易信息摘要进行加密得到)
- 网络中其他节点收到广播后需要验证A是否有权转出账户X中的钱,步骤如下:
- 得到原始交易信息中的打款者账户地址(这个就是公钥)
- 以打款者账户地址为公钥对签名进行解密
- 如果解密信息与原始交易信息的摘要信息一致,那么就认为A有账户X的所有权
比特币的核心问题(记账和发行)
- 货币如何发行?由谁发行?
- 交易由谁来记账
挖矿
比特币通过挖矿机制记账并且发行比特币。
- 挖矿机制:
- 记账有利润:比特币奖励(比特币发行的方式) + 交易手续费
- 通过付出计算量解决一个难题,谁先解决谁获得记账权
- 作恶成本高
- 发行区块的过程就是比特币发行的过程
- 发行时间间隔可控,不会发生通货膨胀
难题
难题的设计:
- 不容易完成
- 容易验证
- 具有随机性(能力越强,完成概率越大,但不一定)
挖矿的工具:hash算法
挖矿共识
挖矿过程:
- 根据当前链末端的数据块计算出prev_hash,这个值将作为新数据块的头部
- 矿工生成一个随机数nonce,并将新数据块的头部prev_hash、收集到的交易的merkle树根(可以理解为能记录多次交易的一个哈希值)、随机数nonce作为哈希函数的输入,计算H(prev_hash || merkle || nonce)
- 若 H( ) 的函数值小于某一个预设的阈值, 则 nonce 合法,否则重新生成 nonce,继续计算
- 找到合法的nonce后迅速进行广播,其他矿工在收到该消息后停止挖矿并进行验证,验证通 过后,认为新的区块已产生(达成共识);
- 矿工基于新产生的区块继续挖矿。
- 总结一下,挖比特币的过程就是找出一个能够得到指定范围hash值的一个随机数。而通过调整这个预设的阈值,可以控制挖矿的速度。
比特币交易
- 所有者A利用他的私钥对前一次交易(比特货来源)和下一位所有者B签署一个数字签名,并将这个签名附加在这枚货币的末尾,制作成交易单
- A将交易单广播至全网,比特币就发送给了B,每个节点都将收到的交易信息纳入一个区块中(这里会进行对于交易的验证,该交易是否有效,有效才会打包,此时B还用不了这个比特币,直到区块验证成功)
- 每个节点通过解一道数学难题,从而去获得创建新区块权利,并争取得到比特币的奖励(新比特币会在此过程中产生)
- 当一个节点找到解时,它就向全网广播该区块记录的所有盖时间戳交易,并由全网其他节点核对
- 全网其他节点核对该区块记账的正确性,没有错误后他们竞争下一个区块(区块确认后B就可以用得到的比特币了),这样就形成了一个合法记账的区块链。
验证
验证的内容太过专业化。简单介绍一下
验证主要分为:
- 交易验证
- 区块验证
SPV简单支付验证,可以轻量级的验证交易是否被确认,但是需要依靠全链获取数据。
分叉处理和双花问题
如果在相近时间内有多个打包好的临时区块被打包广播怎么办?
- 某一节点若收到多个针对同一前续区块的后续临时区块,则该节点会在本地区块链上建立分支。
- 直到下一个区块出现,其中的一条链就会被证实为较长的一条,另一条分支被放弃。
软分叉和硬分叉
硬分叉(Hard Fork)和软分叉(Soft Fork)的区别:
- 硬分叉和软分叉是区块链协议升级的两种方式,主要区别在于是否兼容旧版本节点,以及是否需要所有用户升级客户端。
硬分叉(Hard Fork)
- 定义:硬分叉是不向后兼容的协议升级,旧节点无法识别新规则产生的区块,导致区块链永久分裂成两条独立的链。
- 特点:必须强制升级:所有节点(矿工、用户、交易所)必须更新软件,否则会被留在旧链上。
软分叉(Soft Fork)
- 定义:软分叉是向后兼容的协议升级,旧节点可以接受新规则产生的区块(但无法完全参与新功能),不会导致链分裂。
- 特点:无需强制升级:未升级的节点仍能验证交易,但可能无法使用新功能。