读书笔记——区块链原理、设计与应用(四)——比特币

比特币

    • 基本概念
    • 共识机制
    • 闪电网络
    • 侧链
    • 热点问题

比特币网络是一个分布式的点对点网络,网络中的矿工通过”挖矿“来完成对交易记录的记账过程,维护网络的正常运行。
区块链网络提供一个公开可见的记账本,该记账本并非记录每个账户的余额,而是用来记录发生过的交易的历史信息。该设计可以避免重放攻击,即某个合法交易被多次重新发送造成攻击。
UTXO(Unspent Transaction Outputs):未经使用的交易的输出
STO(Spent Transaction Outputs):被使用过的交易的输出

基本概念

  1. 账户/地址

比特币的账户地址是用户公钥经过一系列Hash(Hash160,或先进行SHA256,再进行RIPEMD160)及编码运算后生成的160位(20字节)的字符串。
注:账户并非直接是公钥内容,而是hash后的值,以避免公钥过早公开后导致被破解出私钥。

  1. 交易

一条交易可能包括如下信息:

  • 付款人地址:合法的地址,公钥经过SHA256和RIPEMD160量词Hash,得到20位Hash串;
  • 付款人对交易的签字确认:确保交易内容不被篡改;
  • 付款人资金的来源交易ID:哪个交易的输出作为本次交易的数入;
  • 交易的金额:多少钱与输入的差额为交易的服务费;
  • 收款人的地址:合法的地址;
  • 收款人的公钥:收款人的公钥;
  • 时间戳:交易何时能生效。

网络中节点收到交易信息后,将进行如下检查;

  • 交易是否已经处理过;
  • 交易是否合法,包括地址是否合法、发起交易者是否输入地址的合法拥有者、是否是UTXO;
  • 交易的输入之和是否大于输出之和。

如果检查通过,则将交易标记为合法的未确认交易,并在网络内进行广播。

  1. 交易脚本

脚本是保障交易完成(主要用于检验交易是否合法)的核心机制,当所依附的交易发生时被触发。
一般每个交易包括两个脚本:输出脚本和认领脚本。
输出脚本支持两种类型:

  • P2PKH
  • P2SH
  1. 区块

读书笔记——区块链原理、设计与应用(四)——比特币_第1张图片
读书笔记——区块链原理、设计与应用(四)——比特币_第2张图片

  1. 挖矿

挖矿是参与维护比特币网络的节点,通过协助生成新区块来获取一定量的新增比特币的过程。
具体过程:参与者综合上一个区块的Hash值,上一个区块生成之后的新的验证过的交易内容,再加上自己猜测的一个随机数X,一起打包到一个候选新区快,让新区快的Hash值小于比特币网络中给定的一个数。这是一道面向全体矿工的“计算题”,这个数越小,计算出来就越难。

共识机制

  1. 工作量证明(POW)

通过计算来猜测一个数值(nonce),使得拼凑上交易数据后内容的Hash值满足规定的上限。

问题:分叉和51%攻击

  1. 权益证明(POS)

类似现实生活中的股份机制,拥有股份越多的人越容易获得记账权。
问题:1/3算力

闪电网络

闪电网络的提出是为了提高比特币系统性能。
思路:将大量的交易放到比特币区块链之外进行,只把关键环节放到链上进行确认。
核心概念:RSMC(Recoverable Sequence Maturity Contract)和HTLC(Hashed TimeLock Contract)。前者解决链下交易的确认问题,后者解决支付通道问题。

1. RSMC

RSMC即可撤销的顺序成熟度合同。
工作原理:

  • 交易双方将协议的资金按比例分配后放入资金池中,并在互相签署合约后,将总资金广播计入主链区块中;

  • 交易双方在不超过资金池总金额的前提下,在主链下进行交易,交易次数无限制;

  • 一次交易都必须签署全新的合约,合约仅仅在双方的交易通道中流转,并未广播计入主链区块;

  • 当最后双方协议不再进行新交易,准备取回各自资金时,将由其中一方发起广播请求;

  • 如果其中一方发觉交易结果不正确,可以根据双方交易合约中的前置协议条件,在有效时间内提出真假合约验证请求;

  • 广播虚假交易合约一经证实,作假方在资金池内所有的自持资金将会作为赔偿支付给另一方。

2. HTLC

HTLC即哈希时间锁定合约。
工作原理:
通过智能合约,双方约定转账方先冻结一笔钱,并提供一个哈希值,如果在一定时间内有人能提供一个字符串,使得它哈希后的值与已知值匹配(实际上意味着转账方授权了接收方来提现),则这笔钱转给接收方。

RSMC保障了两个人之间的直接交易可以在链下完成,HTLC保障了任意两个人之间的转账都可以通过一条"支付“通道来完成。

侧链

侧链协议允许资产在比特币区块链和其他区块链之间互转。
以比特币区块链作为主链,其他区块链作为侧链,二者通过双向挂钩(two-way peg),实现比特币从主链转移到侧链进行流通。

  1. SPV证明

简单支付验证(Simplified Payment Verification ,SPV)能够以较小的代价判断某个支付交易是否已经被验证过(存在于区块链中),以及得到了多少算力保护(定位包含该交易的区块在区块链中的位置)。SPV客户端只需要下载所有区块的区块头,并进行简单的定位和验证,就可以给出验证结论。。
SPV证明包含两部分的内容:一组区块头的内容,表示工作量证明;一个特定输出确实存在于某个区块中的密码学证明。

  1. 双向挂钩

读书笔记——区块链原理、设计与应用(四)——比特币_第3张图片
1)当用户向侧链转移比特币的时候,首先在主链创建交易,待转移的比特币被发往一个特殊的输出,这些比特币在主链上被锁定;
2)等待一段确认期,使得上述交易获得足够的工作量确认;
3)用户在侧链创建交易提取比特币,需要在这笔交易的输入指明上述主链被锁定的输出,并提供足够的SPV证明;
4)等待一段竞争期,防止双花攻击;
5)比特币在侧链上自由流通;
6)当用户想让比特币返回主链时,采取类似的动作。首先在侧链创建交易,待返回的比特币被发往一个特殊的输出。等待一段确认期后,在主链用足够的对侧链输出的SPV证明来解锁最早被锁定的输出。等待一段竞争期后,主链比特币恢复流通。

侧脸技术应用代表:ConsenSys、Rootstock、Lisk等。

热点问题

  1. 区块容量为1MB

更大的区块容量可以带来更高的交易吞吐率,但会增加挖矿成本,带来中心化的风险,同时增大存储的代价。

  1. 出块间隔时间

更短的出块间隔可以缩短交易确认时间,但也可能导致分叉增多,降低网络可用性。

  1. 脚本支持程度

更强大的脚本指令集可以带来更多的灵活性,但也会引入更多的安全风险。

  1. 分叉

由于分布在全球的节点不可能同时完成升级来遵循新的协议,因此比特币区块链在升时可能发生分叉。对于一次升级,如果把网络中升级的节点称为新节点,未升级的节点称为旧节点,根据新旧节点相互兼容性上的区别,可分为软分叉( soft fork)和硬分叉( hard fork)。

  • 软分叉:旧节点仍然能够验证接受新节点产生的交易和区块。旧节点可能不理解新节点产生的一部分数据,但不会拒绝。网络既向后又向前兼容,因此这次升级可以平稳进行。
  • 硬分叉:旧节点不接受新节点产生的交易和区块。网络只向后兼容,不向前兼容。这类升级往往引起一段时间内新旧节点所认可的区块不同,分出两条链直到旧节点升级完成。
  1. 扩容之争
  • 隔离见证方案
    将交易中的签名部分从交易的输入中隔离出来,放到交易末尾的被称为见证的字段当中,对交易ID的计算将不再包含这一签名部分。
  • Bitcoin Unlimited方案
    扩展比特不客户端,使矿工可以自由配置他们想要生成和验证的区块容量。

你可能感兴趣的:(读书笔记)