一、比特币架构


二、区块结构
区块是比特币存储交易的结构,一个区块总是指向其父节点。一个区块包含三 个字段:区块头、区块交易数量、交易列表。交易数量收到区块大小限制,输入、 输出数量和脚本都会占用区块空间,矿工往往喜欢获得最高费用的交易列表。
1、区块头
比特币区块头包含了当前区块和上一个区块的元信息,我们可以通过这些信息 来验证区块体的正确性。比特币区块头定义中虽然只包含 6 个字段,但每一个字段对于当前区块链的运行都必不可少。
比特币区块头长度为 80 字节,数据结构包含 nVersion、hashPrevBlock、 hashMerkleRoot、nTime、nBits、nNonce 字段。区块哈希可以由区块头进行两次 Sha256 运算获得。
2、区块体
比特币区块体用于存储真实的交易记录。区块体包含有序的交易列表,这些交易列表通过默克尔树算法生成的根哈希存储到区块头中,这样可以通过区块头中的少量信息对区块体中的交易进行验证。
三、比特币钱包
比特币的钱包在此指用于存储和管理用户密钥的数据结构,同时在比特币语境 中钱包还指用于管理密钥、比特币地址、地址余额、创建和签名交易的应用程序。
比特币钱包中不含有“加密货币”,只含有私钥/公钥对的密钥链,“加密货币” 则被以 UTXO 的形式存储在区块链中。比特币钱包不和用户身份绑定,可以随时创 建,一个用户可以拥有一个或多个比特币钱包。
比特币含有两种类型的钱包:
- 非确定性钱包(Nondeterministic wallet)
- 确定性钱包(deterministic wallet)
两者主要的区别为钱包内密钥是否是相互关联的。
四、比特币密钥
比特币密钥格式包含私钥、公钥、地址三部分。私钥、公钥、地址间的推导具有单向性,即私钥 --> 公钥 --> 地址,而不能反过来进行推导。
比特币私钥是通过随机生成的 256 位二进制数产生的。私钥经过椭圆曲线算出公钥。比特币地址由公钥通过 base58Check 编码而来。
五、比特币交易模型
1、UTXO
比特币的交易由输入的交易和输出的交易组成,每一笔交易都要消耗输入,然后产生输出,而所产生的输出,就是 UTXO。比特币的链上存储的实际上是一笔笔的交易 (Transactions),所有属于某个账户的 UTXO 就是该账户的金额。
2、交易脚本
比特币协议允许加入简单计算,该脚本使用了比特币协议开发者设计的带限制 的语言。这是一种基于堆栈的,无状态的,非图灵完备的语言。
1)解锁脚本
该脚本通常是一个签名和一个公钥,如果脚本执行任何类型的函数,诚实的节 点将会丢弃事务。
2)P2PKH
该脚本对公钥哈希和输出的所有者签名进行验证
公钥哈希为:RIPEMD-160(SHA256(PubKey))
脚本为:
OP_DUP OP_HASH160 <PubKeyHash> OP_EQUALVERIFY
OP_CHECKSIG
关联的脚本签名为:
<sig> <pubkey>
3)P2SH
OP_HASH160 <Hash160(redeemScript)> OP_EQUAL
签名:
<sig> [sig] [sig...] <redeemScript>
3、找零
找零指的是当一笔交易的输出用于另一笔的输入时,若比特币未全部花费,则 产生了找零。找零将会生成一个新的比特币地址将差额返回给该地址(若不找零,则差额将全部用作矿工手续费)。
六、比特币机制
1、交易优先级排序
交易池中的实体会依照交易优先级进行排序,当区块空间紧张时,打包会按照 交易优先级进行处理,交易优先级由多种因素决定:
- UTXO 交易创建时间:越早创建的交易优先级越高;
- 手续费大小:手续费更高的交易矿工会优先处理;
- UTXO 大小:金额过小的 UTXO 优先级会降低
2、难度调整机制
比特币难度值调整是为了保证出块速率保持在平 均每 10 分钟出一个区块。难度值调整的公式为:
新难度值 = 老难度值*(前 2016 个块出块时间/20160 分钟)
3、延迟交易确认
一般的,在实践中认为交易被打包到区块后,再等待 6 个区块生成才能认为区块已经被完全确认,这被称为比特币的延迟交易确认。
4、防止双花的两个重点
① 时间戳机制:
区块有明确的时间顺序,交易信息广播后,先被打进区块中的交易,就被认为是合法的,之后的交易就会被网络拒绝。
② 最长链原则:
比特币的POW共识机制里,矿工通过记账获得挖矿奖励,以最长链为原则,只有在最长链上挖矿的矿工才可以获得奖励。
七、比特币网络
比特币网络采用 P2P 网络模型,这种网络中每个节点关系对等,不存在中心服 务器。这种网络模型符合可靠性高、去中心化、开放包容的设计思想。
比特币挖矿是通过工作量证明机制,在工作量证明的过程中完成区块的打包的 过程。
比特币挖矿过程是比特币运行的必要过程,其对比特币具有重要意义。具体而言:
- 防范女巫攻击:女巫攻击者通过大量身份可以控制比特币网络的交易、区块广播过程,实行 51% 攻击等。但比特币挖矿要求参于比特币共识过程必须要付出成本(算力),从而避免了女巫攻击。
- 维持比特币生态:挖矿的矿工可以获得手续费和 Coinbase 作为挖矿奖励, 矿工是比特币生态的基础,挖矿有助于维护比特币的稳定性。
- 保护比特币安全:挖矿的工作量证明是通过计算工作量来确保比特币的安 全性的,工作量证明可以确保比特币账本不会被篡改,提升了比特币的安全 性。
- 维护区块链账本:挖矿的过程即共识过程,比特币挖矿可以处理比特币网络 产生的交易,维护区块链账本。