基于量子链的 Dapp 开发
什么是比特币?
什么是比特币?

2008年秋天,一个网名叫中本聪的至今都保持神秘的人,发表了一篇只有八九页的论文,名字叫《比特币-一个点对点的电子货币系统》。这个就是一切的开始,所以大家也习惯叫这篇论文为创世论文。有人说比特币是区块链的第一个应用,这个说法没有错,但是我觉得有点把轻视比特币的地位了,其实没有比特币,就没有今天我们所谓的完整意义的区块链技术。前一节主要聊了区块链技术,这集来聊聊比特币。

全球化的账本

还是接着区块链来聊。上节说了,一个区块链可以看做是一个账本,理解这个账本的工作方式,就是理解比特币的最简单直接的方式。简化一点来说,比特币系统就是分布在全球的成千上万的用户的计算机,每个计算机上都有一个比特币区块链,虽然人很多,但是大家手中的区块链,或者说账本,内容都是一样的,由于共识机制的存在,凡是被恶意篡改过的账本,都会被网络所淘汰。比特币可说就是一个一旦写入,神仙都改不了的账本,也可以说比特币是一个绝对安全的数据库。

那这意味着什么呢?有了这个大家公认的账本,就可以进行价值的存储和转移了,比如账本上记录着小明有五个比特币,那么这一点就是全球人都公认的,如果这时候小明转给小红3个币,那么这个交易一旦记录进账本,也就成了大家都公认的事情了。所以,比特币出现以后互联网上人们从此可以不经过一个权威机构的监督,而完成价值的传递了。这一点是革命性的。

好,比特币系统就是一个大账本系统。上面记录了我有几个币,于是我还可以转账给别人。听起来不错,但是问题是,我是谁?我的币存在哪里?这个就要说到比特币地址的概念。

通过一定的方式,例如到 bitaddress.org 这个网站上。任何人都可以获得无限多个比特币地址。每次获得地址的时候,我们获得的不是一个字符串,而是两个。其中一个就是地址了,这个是可以公开给任何人的,另外一个就是这个地址对应的私钥了,私是私人,或者私密的私,钥是钥匙的钥。如果你听说过非对称加密这个概念的话,地址相当于公钥,用于加密,而私钥是跟公钥是唯一匹配的,用于解密经过公钥加密的信息。如果觉得这个不太好懂,没关系,那也可以这么理解。比特币地址相当于银行账户,私钥相当于密码。注意比特币系统里,你的真实身份是没有人知道的,你是不是小明不重要,重要的是你有这个比特币地址对应的私钥,这样你就有权利动用里面的比特币了。

理解了账本的概念,理解了账本的不可篡改和公开性,就能对比特币系统的基本运行方式有了最基本的理解了。

世上本无币,只有 UTXO

接下来我们要深挖一层,聊一聊到底什么才是一个具体比特币。这个过程中又有不少脑洞。

首先,有了比特币地址,大家就可以交易了。小明转给小红三个比特币,这个在比特币网络上就会形成一个交易。一个交易就是一条比特币网络上的实实在在的数据,比特币系统会把最近十分钟之内的所有交易存放到一个文件中,而这个文件就是区块链上的最新的一个区块。

那么具体点,一个比特币到底是什么呢。比如今天一个比特币的价格是三万块,那假如我花三万块钱,那我买到手的到底是个啥呢?答案可能有点出人意料,其实,世界上并没有一个东西叫做一个比特币。你可能会说,Peter,这个我知道,比特币不是看得见摸得着硬币,是一串数字对吧?比特币是一种数字化的存在,这个不假,但是其实可能跟你的想象不一样,比特币的系统里面,还真的没有那么一串数就对应1个比特币的。所以说花了三万块,甚至也没有买到谁手里的一串数字。

这三万块钱换来的,其实就是一次交易。卖方收到钱之后,会往我的地址中转入1个比特币。前面我们做过类比,说比特币地址就相当于银行账户,但是其实这个说法也有问题。专业人士会告诉你,比特币的世界里,没有账户,只有交易。例如,我的一个地址中显示的我有3个币。其实3这个数字也不是直接存到地址里的,而是根据包含这个地的址相关的交易运算出来的。具体来说,我的地址会跟别人的地址进行交易,其中有入账也有出账,每次的金额都会保存到一个个的交易中。通过我的地址,比特币系统就很容易获得所有跟这个地址相关的交易,并运算出这个地址中入账的金额比出账的金额大多少。比特币系统的这种获取余额的方式叫做 UTXO 。UTXO 是 Unspent Transaction Output 的缩写,直接翻译过来意思是:未花费的交易输出 ,简单理解就是一个地址中的输入金额减去输出金额。实际中这个模型比我这里说的有更多的细节,网上很容易找到详细的资料,因为这个概念真的是很重要。

所以说,世上本没有币,有的只有交易,有的只是 UTXO 。

比特币真的是挖矿挖出来的?

那么最早的比特币是如何产生的呢?或者说比特币的发行机制是什么呢?这就涉及到挖矿的概念了。

我2010年最早接触比特币的时候,看到挖矿这个概念,感觉很费电,所以对比特币的第一印象其实是不好的。现在我对挖矿费电这个事想法变了,不过这里咱们要讨论的不是我们对挖矿这个事的价值判断,而是说说它在比特币系统中发挥的实质性的作用。

比特币做为一个大账本系统,上面会不断的形成交易,这些交易首先是在一台计算机上发起的,然后会扩展到分布在全球的比特币网络之上,所有比特币网络上的计算机都需要记录下来才行,这个过程叫做记账。那些把比特币的大账本完整的下载到自己的计算机上,每天24小时开着机器,随时准备帮助大家记账的人,就是矿工。但问题是,大家都是自己买的机器,花着自家的电费,让我帮助陌生人记账,那你给我一个理由啊?比特币系统每隔十分钟就会生成一定数量的比特币来奖励记账行为,而挖矿的本质其实就是记账。不过有意思的是,每次生成的币不是给所有矿工平分的,而只是给抢到记账权的那一个矿工。一般来讲,谁的计算能力强,谁就能有更大的概率抢到记账权。这就是为啥矿工都拼命升级硬件,花很多电费的原因。

说起记账权,这个来插几句。网络上的交易是随机产生的,由于信息的扩展需要时间,所以各个矿工十分钟之内收集到一个区块中的交易其实是不完全相同的。但是区块链的要求是,最终大家的区块链都应该是相同的,这个矛盾的解决,就是通过记账权。每次记账前,比特币系统会给大家出一道数学题,哪个矿工先解答出来,他就能把自己的区块率先写到区块链上,也就是这个矿工抢到了记账权。抢到记账权的矿工的区块,会作为唯一权威的区块扩散到全网。

比特币程序中规定了,系统能够发出的比特币的总量是2100万,每过四年,矿工每十分钟获得的比特币奖励都会减半。所以这就构成了比特币的稀缺性,于是才有人愿意进来持有比特币。

需要知道的是,比特币最早生成都是奖励给矿工的,不是矿工但想要获得比特币人,就要去跟矿工买。这个就是比特币的发行机制了。

总结

要做 Dapp 开发,比特币相关的需要知道的知识我觉得这些就够了。来总结一下吧。首先我们介绍了比特币是一个全球人维护的一个公开的账本,每个人都可以申请比特币地址,然后在系统上进行交易,账本的不可篡改保证了我们的资产是安全的,只有持有地址对应的私钥的人,才能够进行转账。接下来我们聊了比特币在系统底层到底是什么,了解了比特币的余额其实并不是存储在地址上的,而是通过 UTXO 模型,根据这个地址相关的所有历史交易运算出来的。最后一部分介绍了比特币是如何生成的,系统每隔十分钟就会往系统中注入一定数额的比特币奖励记账行为,所以从表面上看,就好像是抢到记账权的那个矿工挖到了比特币,于是记账的过程被叫做挖矿了,很有意思吧。