比特币项目简介
比特币是基于区块链技术的一种数字货币实现,比特币网络是历史上首个经过大规模、长时间检查的数字货币系统
比特币网络在功能上具有如下特点:
- 去中心化: 意味着没有任何独立个体可以对网络中的交易进行破坏,任何交易请求都需要大多数参与者的共识。
- 匿名性: 比特币网络中账户地址是匿名的,无法从交易信息关联到具体的个体,但这也意味着很难进行审计
- 通胀预防: 比特币的发行需要通过挖矿计算来进行,发行量每四年减半,总量上限为2100万枚,无法被超发。
原理和设计
比特币网络是一个分布式的点对点网络,网络中的矿工通过“挖矿”来完成对交易记录的记账过程,维护网络的正常运行。
区块链网络提供一个公共可见的记账本,该记账本并非记录每个账户的余额,而是用来记录发生过得交易的历史信息。该设计可以避免重放攻击,即某个合法交易被多次重新发送造成攻击。
基本交易过程
基本交易过程: 每次发生交易,用户需要将新交易记录写到比特币区块链网络中,等网络确认后即可认为交易完成。每个交易包括一些输入和一些输出,未经使用的交易的输出(Unspent Transaction Outputs,UTXO)可以被新的交易引用作为合法的输入,被使用过的交易的输出(Spent Transaction Outputs,STO)则无法被引用作为合法输入。一笔合法的交易,即引用某些已存在交易的UTXO作为交易的输入,并生成新的输出的过程
在交易过程中,转账方需要通过签名脚本来证明自己是UTXO的合法使用者,并且指定输出脚本来限制未来本交易的使用者(收款方)
注意: 刚放进网络中的交易(深度为0)并非是实时得到确认的。进入网络中的交易存在着被推翻的可能性,一般要再生成几个新的区块(深度大于0)才认为该交易被确认。
重要概念
账户/地址
比特币采用了非对称的加密算法,用户自己保留私钥,对自己发出的交易进行签名确认,并公开私钥。
比特币的账户地址其实就是用户公钥经过一系列Hash及编码运算后生成的160位(20字节)的字符串。
交易
交易是完成比特币功能的核心概念
交易脚本
脚本是保障交易完成(主要用于检验交易是否合法)的核心机制,当所依附的交易发生时被触发。通过脚本机制而非写死交易过程,比特币网络实现了一定的可扩展性。比特币脚本语言是一种非图灵完备的语言,类似Forth语言。
一般每个交易都会包括:
- 输出脚本: 一般由付款方对交易设置锁定,用来对能动用这笔交易输出(例如,要花费交易的输出)的对象(收款方)进行权限控制,例如限制必须是某个公钥的拥有者才能花费这笔交易。
- 认领脚本: 用来证明自己可以满足交易输出脚本的锁定条件,即对某个交易的输出(比特币)的拥有权。
区块
比特币区块由区块头和区块体组成,要对区块链的完整性进行检查,只需要检查各个区块头信息即可,无需获取具体的交易内容,这也是简单交易验证的基本原理。
创新设计
比特币在设计上的创新点主要体现在避免作恶、负反馈调节和共识机制三个方面。
避免作恶
避免作恶基于经济博弈原理。通过经济博弈来让合作者得到利益,让非合作者遭受损失和风险。
负反馈调节
比特币网络中矿工越多,系统就越稳定,比特币价值就越高,但挖到矿的概率会降低。反之,网络中矿工减少,会让系统更容易被攻击,比特币价值降低,但挖到矿的概率会提高。
共识机制
传统共识问题往往是考虑在一个相对封闭的分布式系统中,允许同时存在正常节点、故障节点如何快速达成一致
比特币提出了基于Proof of Work(Pow)的共识机制:基于概率、随时间逐步增强确认的共识。现有达成的结果在理论上可能被推翻,只是攻击者要付出的代价随时间而指数级上升,被推翻的可能性随之指数级下降。
可用性的提升:考虑到Internet的尺度,达成共识的时间相对比较长,因此按照区块(一组交易)来进行阶段性的确认(快照),从而提高网络整体的可用性。
减少提案的个数:限制网络中共识的噪声,通过大量的Hash计算和少数的合法结果来限制合法提案的个数,进一步提高网络中共识的稳定性。
挖矿
基本原理
挖矿是参与维护比特币网络的节点,通过协助生成新区块来获取一定量新增比特币的过程。
挖矿过程
具体过程: 参与者综合上一个区块的Hash值,上一个区块生成之后的新的验证过得交易内容,再加上自己猜测的一个随机数X,一起打包到一个候选新区块,让新区块的Hash值小于比特币网络中给定的一个数。
系统每隔两周会根据上一周期的挖矿时间来调整挖矿难度(通过调整限制数的大小),调节生成区块的时间稳定在10分钟左右。为了避免震荡,每次调整的最大幅度为4倍。
如何看待挖矿
矿工个体达到全网1/3的算力,比特币网络就存在被破坏的风险了;达到1/2的算力,从概率上就掌控了整个网络了。但是要实现这么大的算力,将需要付出巨大的经济成本。除了尽量避免将算力放到同一个组织手里,没太好的办法,这是目前Pow机制自身造成的。
共识机制
比特币区块链采用 PoW 的机制来实现共识,对PoW试图改进衍生了PoS和DPoS, 原理仍然为通过经济惩罚来限制恶意参与。
工作量证明
工作量证明(Pow)通过计算来猜测一个数值(nonce),使得拼凑上交易数据后内容的Hash值满足规定的上线。由于Hash难题在目前计算模型下需要大量的计算,这就保证在一段时间内系统中只能出现少数合法提案。反过来,能够提出合提案也证明提案者确实付出了一定的工作量。
权益证明
权益证明:类似于现实生活中的股东机制,拥有股份越多的人越容易获取记账权(同时更倾向于维护网络的正常工作)
典型过程:通过保证金(代币、资产、名声等具备价值属性的物品即可)来对赌一个合法的块成为新的区块,收益为抵押资本的利息和交易服务费。提供证明的保证金(例如通过转账货币记录)越多,则获得记账权的概率就越大。合法记账者可以获得收益。
PoS试图解决在PoW中大量资源被浪费的缺点,受到了广泛的关注。恶意参与者将存在保证金被罚没的风险,即损失经济利益。
一般情况下,对于PoS来说,需要掌握超过全网1/3的资源,才有可能左右最终的结果。
闪电网络
比特币的一大缺点为交易性能:全网每秒7笔左右的交易速度,远低于传统金融交易系统;同时,等待6个区块的可信确认将导致约一个小时的最终确认时间。为了提升性能,提出了闪电网络等创新设计
闪电网络: 将大量交易放到比特币区块链之外进行,只把关键环节放到 链上进行确认。
闪电网络主要通过引入智能合约的思想来完善链下的交易渠道。核心的思想主要有两个:
- RSMC: 解决链下交易的确认问题
- HTLC: 解决支付通道的问题
RSMC
RSMC 即 “可撤销的顺序成熟度合同”。主要原理类似于资金池机制。
基本过程: 首先假定双方之间存在一个“微支付通道”(资金池)。交易双方先预存一部分资金到“微支付通道”里,初始情况下双方的分配方案等于预存的金额。每次发生交易,需要对交易后产生资金的分配结果共同进行确认,同时签字把旧版本的分配方案作废掉。任何一方需要提现时,可以将他手里双方签署过得交易结果写到区块链网络中,从而被确认。
优点: RSMC整个过程只有提现时才需要通过区块链,可以实现大量中间交易发生在链外。
HTLC
微支付通道是通过HTLC来实现的,中文意思是“哈希的带时钟的合约”。这其实就是限时转账
基本过程:通过智能合约,双方约定转账方先冻结一笔钱,并提供一个哈希值,如果在一定时间内有人能提出以个字符串,使得它的哈希后的值与已知值匹配(实际上意味着转账方授权了接收方来提现),则这笔钱转给接收方
闪电网络的概念
RSMC 保障了两个人之间的直接交易可以在链下完成,HTLC保障了任意两个人之间转账都可以通过一条“支付”通道来完成。闪电网络整合者两种机制,就可以实现任意两个人之间的交易都在链下完成。
在整个交易中,智能合约起到了中介的重要角色,而区块链网络则确保最终的交易结果被确认。
侧链
侧链协议:允许资产在比特币区块链和其他区块链之间互转。简单来说,以比特币区块链作为主链,其他区块链作为侧链,二者通过双向挂钩,实现比特币从主链转移到侧链进行流通。(实现了比特币区块链的扩展)
SPV 证明
在比特币系统中验证交易时,涉及交易合法性检查、双重花费检查、脚本检查等。由于验证过程需要完整的UTXO记录,通常要由运行着完整功能几点的矿工来完成。而很多时候用户只关心与自己相关的那些交易,只希望能够知道交易是否合法、是否已在区块链中存在了足够的时间(即获得足够的去人),而不需要自己成为完整节点做出完整性验证。
简单支付验证(Simplified Payment Verfication, SPV): 能够以较小的代价判断某个支付交易是否已经被验证过(存在于区块链中),以及得到了多少算力保护。SPV 客户端只需要下载所有区块的去块头,进行简单的定位和计算工作,就可以验证结论。
侧链协议中,用SPV来证明一个动作却是已经在区块链中发生过,称为SPV证明。SPV证明包括两部分内容:
- 一组区块头的列表,表示工作量证明
- 一个特定输出确实存在于某个区块中的密码学证明
双向挂钩
侧链协议的设计难点在于如何让资产在主链和侧链之间安全流转。
具体来说,协议采用双向挂钩机制实现比特币向侧链的转移和返回。主链和侧链需要对对方的特定交易做SPV验证。过程如下:
热点问题
设计中的权衡
比特币的设计目标在于支持一套安全、开放、分布式的数字货币系统。围绕着一目标,比特币协议的设计中很多地方都体现了权衡的思想:
- 区块容量: 大容量可带来更高的交易吞吐率,但会增加挖矿成本,带来中心化的风险,同时增大存储的代价。权衡设计当前的区块容量上限设定为1MB。
- 出块间隔时间: 更短的出块间隔时间可以缩短交易确认时间,但也可能导致分叉增多,降低网络可用性。
- 脚本支持程度: 更强大的脚本指令集可以带来更多的灵活性,但也会引入更多的安全风险
分叉
当需要修复漏洞、扩展功能或调整结构时,比特币需要在全网的配合下进行升级。升级通常涉及更改交易的数据结构或区块的数据结构。
分布在全球的节点不可能同时完成升级来遵循新的协议,因此升级时可能出现分叉。把网络中升级的几点称为新几点,未升级的节点称为旧节点,根据新旧节点相互兼容性上的区别,可分为软分叉和硬分叉:
- 软分叉: 如果旧节点仍然能够验证接受新节点产生的交易和区块,则称为软分叉。
- 硬分叉: 如果旧节点不能接受新节点产生的交易和区块,则称为硬分叉。
硬分叉升级区块链协议的难度大于软分叉,但软分叉能做的事情有限,大的改动只能通过硬分叉来完成。
交易延展性
交易延展性:是比特币的一个设计缺陷,是指当交易发起者对交易签名之后,交易ID仍然可能被改变。
延展性攻击会带来一些问题:
- 在原始交易未被确认之前广播ID改变的交易可能误导相关方对交易状态的判断,甚至发动拒绝服务攻击
- 多重签名场景下:一个签名者有能力改变交易ID,会给其他签名者的资产带来潜在风险
- 阻碍闪电网络等比特币扩展方案的实施
扩容之争
比特币区块容量现在在1MB以下,交易量已不能满足交易需求。比特币的一系列的方案提出:链上扩容提议、用侧链或闪电网络扩展比特币等
扩容之争主要有两派提出的方案:
- 核心开发者的 Bitcoin Core 团队主推的隔离见证方案(SegWit): 将交易中的签名部分从交易的输入中隔离出来,放到交易末尾的被称为见证的字段当中。同时,将区块容量上限理论上提高到4MB
- Bitcoin Unlimited 团队推出的方案(BU): 扩展比特币客户端,使矿工可以自由配置他们想要生成和验证的区块容量
比特币的监管和追踪
比特币的匿名特性,使得其交易的监管变得十分困难。
不过通过分析大量公开可得的交易记录,有很大概率可以追踪到比特币的实际转移路线,甚至可以追踪到真实用户
相关工具
客户端
比特币客户端用于和比特币网络进行交互,同时也可以参与网络的维护。
客户端分为三种:
- 完整客户端: 存储所有的交易历史记录,功能完备
- 轻量级客户端: 不保存交易副本,交易需要向别人查询
- 在线客户端: 通过网页模式来浏览第三方服务器提供的服务
钱包
比特币钱包可以存储和保护用户的私钥,并提供查询比特币余额、收发比特币等功能。
根据私钥存储方式不同,钱包分为以下几种:
- 离线钱包: 离线存储私钥,也称为“冷钱包”,安全性相对较强,但无法直接发送交易,便利性差
- 本地钱包: 用本地设备存储私钥,可直接向比特币网络发送交易,易用性强,但本地设备存在被攻击风险
- 在线钱包:用钱包服务器存储经用户口令加密过得私钥,易用性强,但钱包服务器同样可能被攻击
- 多重签名钱包:由多方共同管理一个钱包地址,比如2 of 3 模式下,集合三位管理者中两位的私钥便可以发送交易
矿机
比特币矿机是专门为“挖矿”设计的硬件设备,目前主要包括基于GPU和ASIC芯片的专用矿机。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。