区块链技术概观(一):让我们从历史文本说起

时间:2019-07-27       来源:

近 5 年来,水电工协会大概在几个不同场合被要求讲讲区块链,大都是因为比特币的兴起以及对特殊的生态系统行为感到好奇。就笔者的经验而言,比特币同时涉及货币及密码学两个很硬的学问,因此就算台下大都是医生教授的场合,讲得不够好的话还是有多数听众无法理解。因此,当编辑部与笔者谈时,笔者只能说贵刊运气太好了,我们不荣誉会长综合了很多失败的经验,一定可以让读者在这次产生:我终于成为区块链专家的幻觉……呃,是快感才对。

数位货币的概念──以 Bitcoin 为例

在谈起先进区块链的始作俑者比特币之前,我们先来谈谈数位货币的概念。我们平日使用的货币,都是由国家级造币厂製作,有很好的防伪功能,同时也有军警系统防止盗取、假钞等问题,简而言之,在传统货币的角度看来,有国家的力量保证货币的信用力。当然也有失灵的时候,好比中央银行做太烂导致失控通膨,或景气快速反转产生的通缩等系统性风险。撇开这些不谈,传统货币目前的安全性真的很高吗?

思考一下我们现今的商业行为是否仍停留然在实体货币交换?恐怕大多数时候不是,而是在数位层面交换的!好比您把钱存进银行,钞票上又没写您的大名,银行是如何管理的?当然不可能为您特别开一个保险箱锁进去,而是全部收进银行自己的口袋运用。

银行收了您的钱,还可以再向中央银行借款变成槓桿,总之您的钱早就混在一堆钱里,连您自己都认不出来了,这怎幺办呢?再说到好比信用卡这类工具,也没有任何实体支付您的消费,就是签个名而已,这样子的金融体系已经存在数十年以上了!事实上,我们的货币交易行为甚至发行,早就混杂数位货币在其中了!有很多货币不是以钞票形式存在,只是帐本上的数字而已。

银行使用许多帐务法则记帐(如 Double Entry)及资讯安全、财务专家登记的每笔存款或支出,做成一个帐本,对银行来说,内部又有一笔超大的流水帐。如果中间有一道被骇客删了或改了,那幺帐务就大错乱了。讲到这里聪明的读者应该发现了,似乎数位货币不过就只是一个帐本而已……

去中心化、货币本身就有交易记录的架构

比特币之父中本聪发想数位货币时,就已经很确定把货币当成交易(transactions),每个数位货币就代表一次交易。和传统体系的不同是,传统上而言,货币的来源必须是中央银行,但比特币内容中没有,且中本聪反对有个集中管理的中心,因为一旦有了全能的中心,骇客只要攻击这中心就能造成系统瘫痪。

但如果没有中央造币,那幺如何发行、甚至确定每个交易所使用的货币都是合法来源而不是骇客凭空生出来的呢?比特币的发行在每个区块封装起来时就顺便产生了,放在区块的第一笔交易中,称为 coin base。这个 coin base 产生的货币数量一开始就写在协议中,因此每个参与者都可自行验证,如果产生区块的人乱填一个数字,那幺这区块就会认定为非法区块被作废,由另一位矿工产生的区块取代。因此中本聪成功设计出一套去中心化的发行系统。

那幺使用者帐户呢?使用者有多少货币或交易又该如何处理呢?比特币的区块讲明了,也就只是历史文本(感谢漫画《海 X 王》提供的专有名词),这个历史文本中,详细记录了每笔交易,包括发行及一般交易,所以您一旦申请比特币钱包地址后,进出纪录都会记录在历史文本中,全世界每个连上比特币系统的人都看得到。

所以您赚了多少钱、花了多少钱、剩余多少钱,全世界的人都能帮您作证,这方法有好有坏,好处是只要没拿到您的私人金钥,您的钱不太可能凭空消失或转走(证人太多了),坏处则是很多人都觉得比特币很隐私,但其实一点也没有,因为人人都看得到对方的钱包帐目。当然啦,因为钱包只是一串数字组合(就像 IP 位址,只是长多了),所以其他人未必能查到你是谁,不过总是线索明确就是。

▲ 比特币的流水帐务历史文本概观。

余额结算仰赖运算能力加速

另一个麻烦的坏处则是,历史文本只有交易流水帐,所以您若想知道帐户余额(好比我们每笔交易送出去时,收到的挖矿机都必需验证您是否真的还有这幺多钱可花),就必须把历史文本从头到尾扫瞄一次,捞出所有交易纪录,然后加总一次才能算出最近的余额。这个动作在帐务纪录少时算简单,但若比特币未来太热门,交易纪录成亿成兆,包準会出问题。不过中本聪赌的是到时电脑速度和储存体速度会变更快,应该有办法支撑。

为了安全快速的对帐机制,比特币的交易纪录有一套规则,以符合快速对帐的需求,我们直接看下图的实际交易纪录:

比特币的交易当然不外乎是钱的转移,由某甲转多少到某乙的钱包地址,但是,某甲的比特币之前可能是由某个交易得来的,好比一週前某甲由某丙手上得到 1 个比特币,但他今天只要付 0.5 个比特币出去。

为了对帐方便,这个交易的登记规则会直接把某丙转来的 1 个比特币丢进 input 栏位(等于把 1 个比特币丢到桌上),然后在 output 栏位中把 0.5 个比特币支付给某乙,再把 0.5 个比特币退回给某甲,这样在对帐时,就可以成对消去出入纪录,更方便快速对帐。上图中的交易由 1Jt5L9YPEuz12FvtFJWw2KEXdVSJC2rbz 这个帐号放了 6.9942BTC 到桌面,然后支付 2.7018BTC 给帐号 1GNCM5ATfaZZ8mcy61M19roTR8phrvAYcu,然后自己拿回 4.2923BTC。这两个数字加起来不到 6.9942,因为中间有 0.0001BTC 是交易费用,会由找到解答的矿工拿走。

当然眼快的人已经发现了,比特币的基本单位可以切得很小,都跑到小数点后 8 位去了。事实上这也是设计之初的考量。如前述,比特币的发行写在协议中,每隔 4 年发行量就减半一次,因此比特币的发行总量有最大值,这样的设计美其名是预防不合理通膨,但实际上会造成通缩。为了让货币在通缩出现时仍可用,因此乾脆切到小数点后 8 位。

所谓的通缩就是货币本身愈来愈贵,因此如果最小交易单位可切成一亿分之一,那幺就能在大涨时仍灵活对应现实世界需求。笔者从事金融研究多年,也很想知道这样设计的通缩究竟在未来会产生什幺样的效应,至少如果比特币变成常用数位货币,它一定会愈来愈贵,因为参与用户变多,钱却没有跟着变多,一般央行绝对不敢这样做。在一般世界中,通缩会造成货币动性变差,也就是大家都莫名其妙地不敢花钱,最终仍会导致货币系统崩坏。

总结

比特币是没有传统银行帐户结构的数位货币,只有一本从发行之初到现在的流水帐,由所有挖矿机共同维护,它的发行也不由中央机构发行,而是封装流水帐进入区块。由于发行是採取随着区块增加的共识型方式,因此在开始之初没有什幺交易,系统也比较脆弱。

(首图来源:Flickr/BTC Keychain CC BY 2.0)