区块链快速入门(七)——比特币

一、比特币简介

比特币(BitCoin,BTC)是基于区块链技术的一种数字货币实现,比特币网络是历史上首个经过大规模长时间检验的数字货币系统。
自2009 年正式上线以来,比特币价格经历了数次的震荡,目前每枚比特币市场价格超过6000 美金,并曾经一度接近20000美金。
比特币网络在功能上具有如下特点:
A、去中心化
没有任何独立个体可以对网络中交易进行破坏,任何交易请求都需要大多数参与者的共识。
B、匿名性
比特币网络中账户地址是匿名的,无法从交易信息关联到具体的个体,但也很难进行审计
C、通胀预防
比特币的发行需要通过挖矿计算来进行,发行量每四年减半,总量上限为2100万枚,无法被超发。

二、比特币实现原理

1、比特币实现原理简介

比特币网络是一个分布式的点对点网络,网络中的矿工通过挖矿来竞争对交易记录的记账权,拥有记账权的矿工负责产生区块,记录交易记录的过程,维护网络的正常运行。
区块链网络提供一个公共可见的记账本,记账本并非记录每个账户的余额,而是用来记录发生过的交易的历史信息,可以避免重放***,即某个合法交易被多次重新发送造成***。

2、比特币的交易过程

比特币网络中每次发生交易,用户需要将交易记录写到比特币网络账本中,等网络确认后即可认为交易完成。
除了挖矿获得奖励的coinbase交易只有输出,正常情况下每个交易需要包括若干输入和输出,未经使用(引用)的交易输出(Unspent Transaction Outputs,UTXO)可以被新的交易引用作为其合法的输入。被使用过的交易的输出(Spent Transaction Outputs,STXO),则无法被引用作为合法输入。
因此,比特币网络中一笔合法的交易,必须是引用某些已存在交易的UTXO(必须是属于付款方才能合法引用)作为新交易的输入,并生成新的UTXO(将属于收款方)。
在交易过程中,付款方如何证明自己所引用的UTXO合法?比特币中通过“签名脚本”来实现,并且指定“输出脚本”来限制将来能使用新UTXO者只能为指定收款方。对每笔交易,付款方需要进行签名确认。并且,对每一笔交易来说,总输入不能小于总输出。总输入相比总输出多余的部分称为交易费用(Transaction Fee),为生成包含该交易区块的矿工所获得。目前规定每笔交易的交易费用不能小于0.0001BTC,交易费用越高,越多矿工愿意包含该交易,也就越早被放到网络中。交易费用在奖励矿工的同时,也避免了网络受到大量***。
交易中金额的最小单位是“聪”,即一亿分之一(10^-8)比特币。
刚放进网络中的交易(深度为0)并非是实时得到确认的。进入网络中的交易存在被推翻的可能性,一般要再生成几个新的区块后(深度大于0)才认为该交易被确认。

3、账户(地址)

比特币采用了非对称的加密算法,用户自己保留私钥,对自己发出的交易进行签名确认,并公开公钥。
比特币的账户地址其实就是用户公钥经过一系列Hash(HASH160或先进行SHA256,然后进行 RIPEMD160)及编码运算后生成的160位(20字节)的字符串。
一般地,常常对账户地址串进行Base58Check编码,并添加前导字节(表明支持哪种脚本)和4字节校验字节,以提高可读性和准确性。
账户并非直接是公钥内容,而是Hash后的值,避免公钥过早公开后导致被破解出私钥。

4、交易

交易是完成比特币功能的核心概念,一条交易可能包括如下信息:
A、付款人地址:合法的地址,公钥经过SHA256和RIPEMD160两次Hash得到160位Hash串。
B、付款人对交易的签字确认:确保交易内容不被篡改。
C、付款人资金的来源交易ID:从哪个交易的输出作为本次交易的输入。
D、交易的金额:多少钱,跟输入的差额为交易的服务费。
E、收款人地址:合法的地址。
F、时间戳:交易何时能生效。
网络中节点收到交易信息后,将进行如下检查:
A、交易是否已经处理过。
B、交易是否合法。包括地址是否合法、发起交易者是否是输入地址的合法拥有者、是否是UTXO。
C、交易的输入之和是否大于输出之和。
检查都通过,则将交易标记为合法的未确认交易,并在网络内进行广播。
用户可以从blockchain.info网站查看实时的交易信息,一个示例交易的内容如下:
区块链快速入门(七)——比特币

5、交易脚本

脚本(Script)是保障交易完成(主要用于检验交易是否合法)的核心机制,当所依附的交易发生时被触发。通过脚本机制而非写死交易过程,使比特币网络实现了一定的可扩展性。比特币脚本语言是一种非图灵完备的语言。
一般每个交易都会包括两个脚本:负责输入的解锁脚本(scriptSig)和负责输出的锁定脚本(scriptPubKey)。
输出脚本一般由付款方对交易设置锁定,用来对能动用交易的输出(例如,要花费该交易的输出)的对象(收款方)进行权限控制,例如限制必须是某个公钥的拥有者才能花费这笔交易。
认领脚本则用来证明自己可以满足交易输出脚本的锁定条件,即对某个交易的输出(比特币)的拥有权。
输出脚本目前支持两种类型:
P2PKH:Pay-To-Public-Key-Hash,允许用户将比特币发送到一个或多个典型的比特币地址上(证明拥有该公钥),前导字节一般为0x00。
P2SH:Pay-To-Script-Hash,支付者创建一个输出脚本,里边包含另一个脚本(认领脚本)的哈希,一般用于需要多人签名的场景,前导字节一般为0x05。
以P2PKH为例,输出脚本的格式为:
scriptPubKey: OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
OP_DUP是复制栈顶元素;
OP_HASH160是计算hash值;
OP_EQUALVERIFY 判断栈顶两元素是否相等;
OP_CHECKSIG判断签名是否合法。
上述指令实际上保证了只有pubKey的拥有者才能合法引用这个输出。
另外一个交易如果要花费这个输出,在引用这个输出的时候,需要提供认领脚本格式为
scriptSig: <sig> <pubKey>
其中,是拿pubKey 对应的私钥对交易(全部交易的输出、输入和脚本)Hash值进行签名,pubKey的Hash值需要等于pubKeyHash。进行交易验证时,会按照先scriptSig后scriptPubKey的顺序进行依次入栈处理,即完整指令为:

<sig> <pubKey> OP_DUP OP_HASH160 <pubKeyHash>
OP_EQUALVERIFY OP_CHECKSIG

引入脚本机制带来了灵活性,但也引入了更多的安全风险。比特币脚本支持的指令集十分简单,基于栈的处理方式,并且非图灵完备,此外还添加了额外的一些限制(大小限制等)。

6、区块

比特币区块链的一个区块不能超过1MB,将主要包括如下内容:
A、区块大小:4字节
B、区块头:80字节
C、交易个数计数器:1~9字节
D、所有交易的具体内容,可变长,匹配Merkle树叶子节点顺序。
其中,区块头信息包括:
A、版本号:4字节
B、上一个区块头的Hash值:链接到上一个合法的块上,对其区块头进行两次SHA256操作,32字节
C、本区块所包含的所有交易的Merkle树根的哈希值:两次SHA256操作,32字节
D、时间戳:4字节
E、难度指标:4字节
F、Nonce:4字节,POW 问题的答案。
可见,要对区块链的完整性进行检查,只需要检验各个区块头部信息即可,无需获取到具体的交易内容,是简单交易验证(Simple Payment Verification,SPV)的基本原理。另外,通过头部的链接,提供时序关系的同时加大了对区块中数据进行篡改的难度。
一个示例区块如下:
区块链快速入门(七)——比特币

7、如何避免作恶

基于经济博弈原理。在一个开放的网络中,法通过技术手段保证每个人都是合作的。但可以通过经济博弈来让合作者得到利益,让非合作者遭受损失和风险。
比特币网络中所有试图参与者(矿工)都首先要付出挖矿的代价,进行算力消耗,越想拿到新区块的决定权,抵押的算力越多。一旦失败,算力都会被没收掉,成为沉没成本。当网络中存在众多参与者时,个体试图拿到新区块决定权要付出的算力成本是巨大的,进行一次作恶付出的代价已经超过可能带来的好处。

8、负反馈调节

比特币网络在设计上,很好的体现了负反馈的控制论基本原理。
比特币网络中矿工越多,系统就越稳定,比特币价值就越高,但挖到矿的概率会降低。反之,网络中矿工减少,会让系统更容易导致被***,比特币价值越低,但挖到矿的概率会提高。因此,比特币的价格理论上应该稳定在一个合适的值(网络稳定性也会稳定在相应的值),价格乘以挖到矿的概率,恰好达到矿工的收益预期。
从长远角度看,硬件成本是下降的,但每个区块的比特币奖励每隔4年减半,最终将在2140年达到2100万枚,之后将完全依靠交易的服务费来鼓励矿工对网络的维护。
比特币最小单位是“聪”,即10^(-8) 比特币,总“聪”数为2.1E15。对于64位处理器来说,高精度浮点计数的限制导致单个数值不能超过2^53约 等于9E15。

9、共识机制

传统共识问题往往是考虑在一个相对封闭的分布式系统中,允许同时存在正常节点、故障节点,如何快速达成一致。
对于比特币网络来说,它是完全开放的,可能面向各种***情况,同时基于Internet的网络质量只能保证“尽力而为”,导致问题更加复杂,传统的一致性算法在这种场景下难以实用。
因此,比特币网络不得不对共识的目标和过程都进行了一系列限制,提出了基于POW的共识机制。
首先是不实现面向最终确认的共识,而是基于概率、随时间逐步增强确认的共识。现有达成的结果在理论上都可能被推翻,只是***者要付出的代价随时间而指数级上升,被推翻的可能性随之指数级的下降。
此外,考虑到Internet的尺度,达成共识的时间相对比较长。按照区块(一组交易)来进行阶段性的确认(快照),提高网络整体的可用性。
最后,限制网络中共识的噪音。通过进行大量的Hash计算和少数的合法结果来限制合法提案的个数,进一步提高网络中共识的稳定性。

三、挖矿

1、挖矿基本原理

挖矿是参与维护比特币网络的节点,通过协助生成新区块来获取一定量新增的比特币的过程。当用户向比特币网络中发布交易后,需要有人将交易进行确认,形成新的区块,串联到区块链中。在一个互相不信任的分布式系统中,比特币网络采用挖矿的方式来解决交易的确认。
目前,每10分钟左右生成一个不超过1MB大小的区块(记录10分钟内发生的验证过的交易内容),串联到最长的链尾部,每个区块的成功提交者可以得到系统12.5个比特币的奖励(奖励作为区块内的第一个交易,一定区块数后才能使用),以及用户附加到交易上的支付服务费用。即便没有任何用户交易,矿工也可以自行产生合法的区块并获得奖励。
每个区块的奖励最初是50个比特币,每隔 21万个区块自动减半,即4年时间,最终比特币总量稳定在2100万个。因此,比特币是一种通缩的货币。

2、挖矿过程

挖矿的具体过程为:参与者综合上一个区块的Hash值,上一个区块生成之后的新的验证过的交易内容,再加上自己猜测的一个随机数X,一起打包到一个候选新区块,让新区块的Hash值小于比特币网络中给定的一个数(难度值)。
系统每隔两周(即经过2016个区块)会根据上一周期的挖矿时间来调整挖矿难度(通过调整限制数的大小),来调节生成区块的时间稳定在 10 分钟左右。为了避免震荡,每次调整的最大幅度为4倍。历史上最快的出块时间小于10s,最慢的出块时间超过1个小时。
为了挖到矿,参与处理区块的用户端往往需要付出大量的时间和计算力。算力一般以每秒进行多少次Hash计算为单位,记为h/s。目前,比特币网络算力峰值已经达到了每秒数百亿亿次。
汇丰银行分析师Anton Tonev和Davy Jose曾表示,比特币区块链(通过挖矿)提供了一个局部的、迄今为止最优的解决方案:如何在分散的系统中验证信任。区块链本质上解决了传统依赖于第三方的问题,因为协议不只满足了中心化机构追踪交易的需求,还使得陌生人之间产生信任。区块链的技术和安全的过程使得陌生人之间在没有被信任的第三方时产生信任。

3、挖矿的评价

2010年以前,挖矿还是一个非常热门的盈利行业。但是随着相关技术和设备的发展,现在个人进行挖矿的收益已经降得很低。从概率上说,由于当前参与挖矿的计算力实在过于庞大(已经超出大部分的超算中心),一般的算力已经不可能挖到比特币。
从普通的CPU(2009年)、到后来的GPU(2010年)和 FPGA(2011年末)、到后来的ASIC矿机(2013 年年初,目前单片算力已达每秒数百亿次Hash 计算)、再到现在众多矿机联合组成矿池(知名矿池包括F2Pool、BitFury、BTCC等)。数年间,比特币矿机的技术走完了过去几十年的集成电路技术进化历程,并且还颇有创新之处。全网的算力已超过每秒10^18 次Hash计算。
基本上个体达到1/3的计算力,比特币网络就存在被破坏的风险;达到1/2的算力,从概率上就掌控整个网络。但是要实现这么大的算力,将需要付出巨大的经济成本。

四、共识机制

1、POW

工作量证明通过计算来猜测一个数值(nonce),使得拼凑上交易数据后内容的Hash值满足规定的上限(来源于hashcash)。由于Hash难题在目前计算模型下需要大量的计算,可以保证在一段时间内,系统中只能出现少数合法提案。如果能够提出合法提案,也证明提案者确实已经付出了一定的工作量。
合法提案会在网络中进行广播,收到的用户进行验证后,会基于用户认为的最长链基础上继续难题的计算。因此,系统中可能出现链的分叉(Fork),但最终会有一条链成为最长的链。
Hash问题具有不可逆的特点,因此,目前除了暴力计算外,还没有有效的算法进行解决。如果获得符合要求的nonce,则说明在概率上是付出了对应的算力。谁的算力多,谁最先解决问题的概率就越大。当掌握超过全网一半算力时,从概率上就能控制网络中链的走向。
参与POW计算比赛的人,将付出不小的经济成本(硬件、电力、维护等)。当没有最终成为首个算出合法nonce值的幸运儿时,成本都将被沉没掉。如果有人尝试恶意破坏,需要付出大量的经济成本。

2、POS

权益证明(Proof of Stake,PoS)最早在2013年被提出,最早在Peercoin系统中被实现,拥有股份越多的人越容易获取记账权(同时越倾向于维护网络的正常工作)。
典型的过程是通过保证金(代币、资产、名声等具备价值属性的物品即可)来对赌一个合法的块成为新的区块,收益为抵押资本的利息和交易服务费。提供证明的保证金(例如通过转账货币记录)越多,则获得记账权的概率就越大。合法记账者可以获得收益。POS试图解决在 POW中大量资源被浪费的缺点,受到了广泛关注。恶意参与者将存在保证金被罚没的风险,即损失经济利益。
通常,对于POS需要掌握超过全网1/3的资源才有可能左右最终的结果
POS也有一些改进的算法,包括授权股权证明机制(DPOS),即所有股东投票选出一个董事会,董事会中成员才有权进行代理记账。DPOS算法在实践中得到了不错的验证,但并没有理论上的证明。
2017年 8月,来自爱丁堡大学和康涅狄格大学的 Aggelos Kiayias等学者在论文《Ouroboros: A Provably Secure Proof-of-Stake Blockchain Protocol》中提出了Ouroboros区块链共识协议,可以达到诚实行为的近似纳什均衡,认为是首个可证实安全的POS协议。

五、闪电网络

1、闪电网络简介

比特币的交易网络最为人诟病的一点便是交易性能:全网每秒7笔左右的交易速度,远低于传统的金融交易系统;同时,等待6个块的可信确认将导致约1个小时的最终确认时间。为了提升性能,比特币社区提出了闪电网络等创新的设计。
闪电网络的主要思路十分简单——将大量交易放到比特币区块链之外进行,只把关键环节放到链上进行确认。最早于2015 年2月在论文《The Bitcoin Lightning Network:Scalable Off-Chain Instant Payments》中提出。闪电网络主要通过引入智能合约的思想来完善链下的交易渠道。核心的概念主要有两个:RSMC(Recoverable Sequence Maturity Contract)和 HTLC(Hashed Timelock Contract)。RSMC解决了链下交易的确认问题,HTLC解决了支付通道的问题。

2、RSMC

RSMC(Recoverable Sequence Maturity Contract),即可撤销的顺序成熟度合同。首先假定交易双方之间存在一个微支付通道(资金池)。交易双方先预存一部分资金到微支付通道里,初始情况下双方的分配方案等于预存的金额。每次发生交易,需要对交易后产生资金分配结果共同进行确认,同时签字把旧版本的分配方案作废掉。任何一方需要提现时,可以将手里双方签署过的交易结果写到区块链网络中,从而被确认。只有在提现时候才需要通过区块链。
任何一个版本的方案都需要经过双方的签名认证才合法。任何一方在任何时候都可以提出提现,提现时需要提供一个双方都签名过的资金分配方案(意味着肯定是某次交易后的结果,被双方确认过,但未必是最新的结果)。在一定时间内,如果另外一方拿出证明表明这个方案已经被作废(非最新的交易结果),则资金罚没给质疑方;否则按照提出方的结果进行分配。罚没机制可以确保了没人会故意拿一个旧的交易结果来提现。
另外,即使双方都确认了某次提现,首先提出提现一方的资金到账时间要晚于对方,鼓励大家尽量都在链外完成交易。通过RSMC,可以实现大量中间交易发生在链外。

3、HTLC

微支付通道是通过Hashed Timelock Contract来实现的,中文意思是哈希的带时钟的合约,即限时转账。通过智能合约,双方约定转账方先冻结一笔钱,并提供一个哈希值,如果在一定时间内有人能提出一个字符串,使得哈希计算后的值跟已知提供的哈希值匹配,则钱转给接收方。

4、闪电网络的实现

RSMC 保障了两个人之间的直接交易可以在链下完成,HTLC保障任意两个人之间的转账都可以通过一条支付通道来完成。闪电网络整合了RSMC和HTLC两种机制,就可以实现任意两个人之间的交易都在链下完成。
在整个交易中,智能合约起到中介的重要角色,而区块链网络则确保最终的交易结果被确认。

六、侧链

1、侧链简介

侧链(Sidechain)协议允许资产在比特币区块链和其它区块链之间互转。侧链也来自比特币社区,最早是在2013年12月提出,2014 年4月立项,由Blockstream公司(由比特币核心开发者 Adam Back、Matt Corallo等共同发起成立)主导研发。侧链协议于 2014年10月在白皮书《Enabling Blockchain Innovations with Pegged Sidechains》中公开。
侧链诞生前,众多山寨币的出现正在碎片化整个数字货币市场,再加上以太坊等项目的竞争,一些比特币开发者希望能借助侧链的形式扩展比特币的底层协议。
以比特币区块链作为主链(Parent chain),其它区块链作为侧链,二者通过双向挂钩(Two-way peg),可实现比特币从主链转移到侧链进行流通。
区块链快速入门(七)——比特币
侧链可以是一个独立的区块链,有自己按需定制的账本、共识机制、交易类型、脚本和合约的支持等。侧链不能发行比特币,但可以通过支持与比特币区块链挂钩来引入和流通一定数量的比特币。当比特币在侧链流通时,主链上对应的比特币会被锁定,直到比特币从侧链回到主链。侧链机制可将一些定制化或高频的交易放到比特币主链之外进行,实现比特币区块链的扩展。侧链的核心原理在于能够冻结一条链上的资产,然后在另一条链上产生,可以通过多种方式来实现。

2、SPV证明

在比特币系统中验证交易时,涉及到交易合法性检查、双重花费检查、脚
本检查等。由于验证过程需要完整的UTXO记录,通常要由运行着完整功能节点的矿工来完成。
而很多时候,用户只关心与自己相关的交易,比如当用户收到其他人号称发来的比特币时,只希望能够知道交易是否合法、是否已在区块链中存在了足够的时间(即获得足够的确认),而不需要自己成为完整节点做出完整验证。
中本聪设计的简单支付验证(Simplified Payment Verification,SPV)可以实现这一点。SPV能够以较小的代价判断某个支付交易是否已经被验证过(存在于区块链中),以及得到了多少算力保护(定位包含该交易的区块在区块链中的位置)。SPV 客户端只需要下载所有区块的区块头(Block Header),并进行简单的定位和计算工作就可以给出验证结论。
侧链协议中,用SPV来证明一个交易确实已经在区块链中发生过,称为SPV证明(SPV Proof)。一个SPV证明包括两部分内容:一组区块头的列表,表示工作量证明;一个特定输出(output)确实存在于某个区块中的密码学证明。

3、双向挂钩

侧链协议的设计难点在于如何让资产在主链和侧链之间安全流转,即接受资产的链必须确保发送资产的链上的币被可靠锁定。
区块链快速入门(七)——比特币
侧链协议采用双向挂钩机制实现比特币向侧链转移和返回。主链和侧链需要对对方的特定交易做SPV验证。完整过程如下:
A、当用户要向侧链转移比特币时,首先在主链创建交易,待转移的比特币被发往一个特殊的输出,并在主链上被锁定。
B、等待一段确认期,使得上述交易获得足够的工作量确认。
C、用户在侧链创建交易提取比特币,需要在这笔交易的输入指明上述主链被锁定的输出,并提供足够的SPV证明。
D、等待一段竞争期,防止双重花费***。
E、比特币在侧链上自由流通。
F、当用户想让比特币返回主链时,采取类似的反向操作。首先在侧链创建交易,待返回的比特币被发往一个特殊的输出。先等待一段确认期后,在主链用足够的对侧链输出的SPV证明来解锁最早被锁定的输出。竞争期过后,主链比特币恢复流通。

七、热点问题

1、设计中的权衡

比特币的设计目标在于支持一套安全、开放、分布式的数字货币系统,因此,比特币协议的设计中很多地方都体现了权衡(trade-off)的思想。
A、区块容量:更大的区块容量可以带来更高的交易吞吐率,但会增加挖矿成本,带来中心化的风险,同时增大存储的代价。兼顾多方面的考虑,当前的区块容量上限设定为1MB。
B、出块间隔时间:更短的出块间隔可以缩短交易确认的时间,但也可能导致分叉增多,降低网络可用性。
C、脚本支持程度:更强大的脚本指令集可以带来更多灵活性,但也会引入更多安全风险。

2、分叉

比特币协议不会一成不变。当需要修复漏洞、扩展功能或调整结构时,比特币需要在全网的配合下进行升级。升级通常涉及更改交易的数据结构或区块的数据结构。
由于分布在全球的节点不可能同时完成升级来遵循新的协议,因此比特币区块链在升级时可能发生分叉(Fork)。对于一次升级,如果把网络中升级了的节点称为新节点,未升级的节点称为旧节点,根据新旧节点相互兼容性上的区别,可分为软分叉(Soft Fork)和硬分叉(Hard Fork)。
如果旧节点仍然能够验证接受新节点产生的交易和区块,则称为软分叉。旧节点可能不理解新节点产生的一部分数据,但不会拒绝。网络既向后和向前兼容,因此这类升级可以平稳进行。
如果旧节点不接受新节点产生的交易和区块,则称为硬分叉。网络只向后兼容,不向前兼容。这类升级往往引起一段时间内新旧节点所认可的区块不同,分出两条链,直到旧节点升级完成。
尽管通过硬分叉升级区块链协议的难度大于软分叉,但软分叉能做的事情毕竟有限,一些大胆的改动只能通过硬分叉完成。

3、交易延展性

交易延展性(Transaction Malleablility)是比特币的一个设计缺陷,是指当交易发发起者对交易签名(sign)后,交易ID仍然可能被改变。
发起者对交易的签名(scriptSig)位于交易的输入(vin)当中,属于交易内容的一部分。交易ID(txid)是整个交易内容的 Hash值,因此,造成***者(尤其是签名方)可以通过改变scriptSig来改变txid,而交易仍旧保持合法。例如,反转ECDSA签名过程中的S值,签名仍然合法,交易仍然能够被传播。
延展性***能改变交易ID,但交易的输入和输出不会被改变,所以***者不会直接盗取比特币。因此,延展性***在比特币网络一直存在,仍未被根治。
然而,延展性***仍然会带来一些问题。比如,在原始交易未被确认之前广播ID改变了的交易可能误导相关方对交易状态的判断,甚至发动拒绝服务***;多重签名场景下一个签名者有能力改变交易ID,给其他签名者的资产带来潜在风险。同时,延展性问题也会阻碍闪电网络等比特币扩展方案的实施。

4、扩容争议

比特币当前将区块容量限制在1MB以下。随着用户和交易量的增加,区块容量限制已逐渐不能满足比特币的交易需求,使得交易日益拥堵、交易手续费不断上涨。
关于比特币扩容的持续争论从2015年便已开始,期间有一系列方案被摆上台面,包括各种链上扩容提议、用侧链或闪电网络扩展比特币等。考虑到比特币复杂的社区环境,任何扩容方案想要达成广泛共识都比较困难,不同的方案之间也很难调和。
当前,扩容之争主要集中在两派:代表核心开发者的Bitcoin Core团队主推的隔离见证方案和Bitcoin Unlimited团队推出的方案。
隔离见证(Segregated Witness,简称SegWit)是指将交易中的签名部分从交易的输入中隔离出来,放到交易末尾的被称为见证(Witness)的字段当中。
对交易ID 的计算将不再包含签名部分,是延展性问题的一种解法,给引入闪电网络等第二层协议增强了安全性。
同时,隔离见证会将区块容量上限理论上提高到4MB。
Bitcoin Unlimited方案(简称 BU)是指扩展比特币客户端,使矿工可以自由配置想要生成和验证的区块的容量。
根据方案的设想,区块容量的上限会根据众多节点和矿工的配置进行自然收敛。

5、比特币的监管和追踪

比特币的匿名特性,使得其上交易的监管变得十分困难。不少非法分子利用其匿名性,通过比特币转移资金。例如WannaCry 网络病毒向受害者勒索比特币,短短三天时间里传播并影响到全球150多个国家。
但通过比特币就可以实现完全匿名化并不现实。虽然交易账户自身是匿名的Hash地址,但一些研究成果(如《An analysis of anonymity in the bitcoin system》)表明,通过分析大量公开可得的交易记录,有很大概率可以追踪到比特币的实际转移路线,甚至可以追踪到真实用户。

八、比特币相关工具

1、客户端

比特币客户端用于和比特币网络进行交互,同时可以参与到网络的维护。
客户端分为三种:完整客户端、轻量级客户端和在线客户端。
完整客户端:存储所有的交易历史记录,功能完备。
轻量级客户端:不保存交易副本,交易需要向别人查询。
在线客户端:通过网页模式来浏览第三方服务器提供的服务。
比特币客户端下载地址:https://bitcoin.org/en/download
基于比特币客户端,可以很容易实现用户钱包功能。

2、钱包

比特币钱包存储和保护用户的私钥,并提供查询比特币余额、收发比特币等功能。根据私钥存储方式不同,钱包主要分为以下几种:
离线钱包:离线存储私钥,也称为“冷钱包”。安全性相对最强,但无法直接发送交易,便利性差。
本地钱包:用本地设备存储私钥。可直接向比特币网络发送交易,易用性强,但本地设备存在被***风险。
在线钱包:用钱包服务器存储经用户口令加密过的私钥。易用性强,但钱包服务器同样可能被***。
多重签名钱包:由多方共同管理一个钱包地址,比如2of 3模式下,集合三位管理者中的两位的私钥便可以发送交易。
比特币钱包下载地址:https://bitcoin.org/en/choose-your-wallet

3、矿机

比特币矿机是专门为“挖矿”设计的硬件设备,目前主要包括基于GPU和ASIC芯片的专用矿机。矿机往往采用特殊的设计来加速挖矿过程中的计算处理。
矿机最重要的属性是可提供的算力(通常以每秒可进行 Hash计算的次数来表示)和所需要的功耗。当算力足够大,可以在概率意义上挖到足够多的新的区块,来弥补电力费用时,矿机是可以盈利的;当单位电力产生的算力不足以支付电力费用时,矿机无法盈利,只能被淘汰。
目前,比特币网络中的全网算力仍然在快速增长中,矿工需要综合考虑算力变化、比特币价格、功耗带来的电费等许多问题,需要算好经济账。