好记性不如烂笔头。有过制定计划经验的你应该体会过记录的重要性,不论是记录金钱的收入与开销、帮助自己养成良好的理财习惯;还是记录时间的花费、学会更珍惜自己的注意力...等。
我每隔一段时间会下载不同的记帐app,却从来没能够成功维持长期记帐的习惯,归根究底有两个原因: (1) 如果没有在支付当下就记录下来,事后要再记是很困难的; (2) 要填的内容太多太繁琐了。
由于记录每一笔开销会耗费过多注意力,所以我选择最简单的"预算控管"方法,把要存起来的钱直接拨到另一个户头隔离起来。这种方式虽然执行起来容易,但却不容易掌握金钱流动的轨迹,也无法根据过去的行为模式来调整自己的消费习惯。我反思自己无法持续记帐最大的困扰点,就在于金流(价值流)与信息流不同步所致。
区块链技术就是实现价值流与信息流同步的一种方式。帐本自动同步能够提升记帐的效率与正确性。如此一来第一个问题就解决了,我根本不必动笔。那第二个问题呢?区块链有办法确保都记录下来我需要的资讯了吗?
帐本最主要的功能就是:检索(retrieve)。好的资料库必须让检索"不重复、不遗漏"。
记帐最根本的原则,必须谨守奥卡姆剃刀定律(Occam's Razor)。Occam's Razor的核心概念为"如无必要、勿增实体"。重点在于化繁为简的功力。
以下让我们透过介绍区块链的资料结构,来看看区块链是怎样做到"不重复、不遗漏"的,或许你会对它如何替你记帐多一些基本认识。
一个区块可分成四个部分:容量大小(Block size)+区块头(Block Header)+交易数量(Transaction Counter)+相关交易资讯(Transactions)。
让区块链做你的烂笔头第一部分、容量大小(Block size):这跟一般人的记帐概念比较不一样。传统记帐方式重视的是交易内容本身,你可能会觉得,干嘛针对容量去做记录呢?
因为容量大小直接影响到的就是矿工获得的报酬(你每次交易所付的交易费就是根据交易的容量大小计算)、以及交易处理的速度(受到矿工硬碟容量和带宽限制等影响),两者都是区块链运作机制的核心。
根据《精通比特币》(2014年出版)中提到的数据,平均每个交易至少占250bytes(也可能更大),平均每个区块至少包含超过500个交易。最早的时候比特币很便宜,发出垃圾交易成本很低,为了防止恶意的干扰,中本聪才设计了一个1MB的暂时上限。如果交易数量成指数级增长,原有的限制将不敷使用,这时就会牵涉到容量扩充的问题。
第二部分、区块头(Block header):
一般人对元认知能力(meta-cognition)这个词应该不陌生,元认知能力指的是对自己思考过程的认知与理解。人有元认知能力,资料也有所谓的元资料(meta-data),元资料的定义就是"资料的资料(data about data)",主要是描述资料本身的属性,而区块头记载的就是元资料,元资料是给电脑读的,不是给人读的。
区块头(block header)包含了什么呢?
1)版本号:为什么交易纪录要放一个版本号?版本号是干嘛用的?
就像所有的软体都需要不断迭代更新版本,追加新的功能、优化现有功能。把版本号写入是为了说明清楚:针对此区块,目前大家遵循的交易规则是什么。当新版本出现后,如果只有一部分用户升级了软体,而另外一部分没有升级的话,造成的后果就称为区块链的"分叉",届时会有两种不同的版本同时运行。
2)前一个区块的hash值:每个区块中都包含前一个区块的hash值,这样才能把每个区块连结在一起,形成区块链。有点像记帐时用流水号控管的观念,如果中间有断号、序列不连续等情况,很容易就能被发现。这部分是形成区块“链”最关键的连结。
3)Merkle Root:用途是把这个区块的所有交易打包在一块。因为原始交易量非常庞大,可能包含数千笔,这部分有点像是把很多个档案封包、压缩成一个数值表示,大大节省了存储空间。
4)时间戳(Time Stamp):区块产生的时间点。在交易上打上时间戳有助于溯源(trace back),它可以提供历史轨迹,自带审计功能。
5)困难度目标值(Difficulty Target):每个区块都是由矿工努力挖矿产生的,而比特币最主要的挖矿机制是采用工作量证明(Proof-of-Work)。但要证明工作量,首先必须有一个目标值。下面用个简单的类比解释。
假想你在玩一个掷骰子游戏,手拿两颗骰子。你先设定起始目标值为12,接下来你开始掷骰子,只要掷出小于12的数值,就完成了工作量证明,完成的概率是35/36。
下一轮,目标值被改为11,这时有三种情况你会无法完成工作量证明,即当你掷出(6, 6)、(6, 5)、(5, 6)时,完成的概率会降为33/36。
以此类推,当目标值越来越小时,要算出低于目标值的难度就越大。困难度目标值的大小会动态调整,目的是尽量维持在让矿工们每10分钟产出一个区块。
6)Nonce值:是一个初始向量,为随机值。是工作量证明不可或缺的数值。矿工平常在做的,就是不停的变更区块头中的nonce数值,并对每次变更后的区块头做hash运算,将结果与困难度目标值做对比,如果小于目标值,则解题成功,工作量证明完成。
第三部分、交易数量:单纯的计数器功能,记录一个区块中包含多少交易。
第四部分、交易本身的资讯:里面包含的资讯很多,不过也比较直观,和一般拿小册子记帐的概念相近,包括我付给哪个地址、金额多少这类的。交易本身的资料结构如下:
小记
"时间总是在过后才显得飞快,一块钱总是在月底显得特别珍贵",这种感悟都是没有记录导致的窘境。
区块链技术提供你一个交易当下不花时间写笔记、事后又能快速复盘的途径。
以上大致介绍完区块链的资料结构。我们把一个区块(block)看成一个基本的记帐单位,你也可以核对自己的记帐app、小小总结一下区块链的哪些栏位强调了不重复、不遗漏的特性?
网友评论