0

漫谈比特币(二):记账

中本聪决心颠覆旧体系,而革命的第一步,则是从记账开始。

虚拟形态的电子货币,说白了只是一段二进制数据。谁拥有多少财富,谁给谁转了多少钱,本质上都是存储在硬盘中的一系列数据。对这种数据的记录行为,就是记账。

在现实世界中,记账是一件可有可无的随机行为。钱包中随便拿出一张钞票,凭借记忆,我们或许能够回忆出它来自谁手,但是再往前追溯一级,找出这张钞票的上上家,基本就是一件不可能完成的任务了。

虚拟世界的情况恰恰相反,由于所有的交易都会被记录在账本,因此每一笔资金的收支都有迹可寻,可以不费力气地追查到每一笔钱的来龙去脉。

《OAuth漫谈》一文中曾提过,纸币是一种Bearer Token,即不记名票据。特殊的防伪印刷赋予了钞票“自证清白”的能力,人们无须关心其持有者的身份,当然,也不用在意它的流通历史。

以二进制数据形态存在的电子货币,无法像纸币一样“自证清白”,通过引入第三方交易中介,将账本“私藏”起来,并且垄断记账权力:除了它自己,任何人不允许直接读写账本。以这种方式保证交易的安全执行,其逻辑与纸币正好相反。纸币的逻辑是,只看钱的真假,不管花钱的是谁;而电子货币的逻辑是,只看谁在花钱,不论钱的真假。

可是,电子货币是否也能像纸币一样“自证清白”呢?如果电子货币也能“自证清白”,交易中介还有存在的必要吗?对于这两个问题,中本聪给出的答案是:YES,and NO。

中本聪发明了一种特殊的记账方式,让电子货币也能像纸币一样,被打上防伪标记,从而彻底抛弃了交易过程中的第三方。

记账是一门学问,它是如此的重要,以至于有经济学家认为,资本主义的起源,就是来源于一种科学记账方法的发明。这种被称作“复式记账法”的记账技巧,五百多年前被意大利人发明出来之后,便作为行业教科书,在全世界一直沿用至今。

钱不会凭空产生,也不会凭空消失,有借必有贷,借贷必相等,是复式记账法的核心思想,同时也正是中本聪的灵感来源。

看一个具体的例子。针对一笔具体的交易,不管采用哪种记账方式,我们不可避免地至少需要记录以下几个信息:

  • 交易金额
  • 钱从哪里来
  • 钱到哪里去

对于交易金额,比特币与其他的记账方式没有什么不同,但是对于如何描述“钱从哪里来”和“钱到哪里去”,比特币和传统电子货币采用了完全不同的方式。

传统方式下,交易双方必然事先在交易中介进行了注册,因此,用交易发起方和交易接收方的账号(account ID),就可以分别表达“钱从哪里来”和“钱到哪里去”。

但是在比特币体系中,交易中介不复存在,交易双方的账户ID便无从谈起。那么如何表达“钱从哪里来”和“钱到哪里去”呢?

钱不会凭空产生,我现在要付给别人的钞票,一定是之前某个人付给我的。如果把“钱从哪里来”称为input,把“钱到哪里去”称为output,那么,当前这笔交易的input,一定是之前某一笔交易的output。因此,只需要找到之前这笔交易,将其output引用为当前交易的input,即可表达“钱从哪里来”。

前一笔交易的output,成为当前这笔交易的input,而当前这笔交易的output,又会成为后面一笔交易的input,于是所有的交易记录环环相扣,形成了一个链条。在这个链条的基础上,当发生了一笔新的交易,我们判断其是否合法,只需要判断它是否能够接入链条即可:

只有合法的交易记录,才能接入交易链,任何伪造的、非法的交易记录,都不可能成功加入交易链条,成为账本的一部分。这是比特币的最基本承诺,而实现这一承诺,借助的是现代密码学的公私钥非对称加密体系。

数字签名是公私钥非对称加密的一个常见用途。我给你发送一段数据,同时附带一份用我的私钥对其加密的密文,即所谓签名,如果你能用我的公钥将密文解密,并且结果和明文数据比对一致,就可以证明数据确实是我发给你的,并且没有被别人修改过。当然,前提是我的私钥没有泄露。

任何人都可以随时生成一对公私钥,密钥可以足够长足够随机,保证唯一性,然后把公钥公布于世,作为全宇宙唯一的字符串,公钥可以作为与他人沟通的代号,然后,在需要的时候,通过私钥签发数字签名,即可证明,他就是这个代号的拥有者。

比特币的思路正是如此。交易者无需事先到中介处进行注册,只需自己生成一对公私钥,把公钥(经过适当处理)作为收款账号,提供给付款方,作为其支付时填写的output字段。而对于付款方,他这笔交易的input,必须关联到之前某一笔交易的output,另外他还需要提供以其私钥生成的数字签名,以此证明,他就是那笔output的拥有者。

具体而言,针对一笔交易,在传统的记账字段基础上,比特币增加了两个重要的信息:数字签名和验证脚本。

  • 数字签名
  • 验证脚本

交易链条如下图所示:

input指向历史上某一笔交易的output,表达这笔资金的来源,而数字签名,则是用来证明,付款人是那笔output的真正拥有者。

而当历史上某笔交易的output,被一笔新的交易“认作”input之时,验证脚本就开始发挥作用,验证脚本实际上就是一段小程序,它以公开透明、标准化的方式,提供交易参与者以及任何第三方,验证新交易(所提供的数字签名)是否合法的能力。

通过上一笔交易的验证脚本,来验证当前这笔交易的数字签名,从而判定当前交易的合法性,逻辑上,数字签名是提供给input对应的那笔历史交易使用的,而对于验证脚本,是当本次交易的output在未来被支付的时候起作用的,因此它们又分别被称为input script和output script。

在现实生活中,我们可以把来自不同上家的钞票聚在一起,一次性花掉,也可以把一笔钱一次性支付(分配)给多个下家。在比特币的交易链条中,也是如此:一个input可以来源于多个不同的oupt,同时一个output也可以指向多个不同的input。因此,事实上的比特币交易链,并非是一根单链表,而是一个有向无环图(DAG):

交易链条中的每一个节点,就是比特币的一个货币单元,一个货币单元是交易中不可以拆分的最小单位,当一个节点的output被其他节点引用为input的时候,就代表这个货币单元已经被消费,反之,如果一个节点的output尚未被其他节点的input所引用,就意味着这个这笔钱还没有被花掉。用计算机的语言来描述,那就是,在交易有向无环图中,出度大于0的节点,代表已消费掉的比特币,出度等于0的节点,代表尚未被消费的比特币。

中本聪称那些出度为0的节点为UTXO(Unspent Transaction Output),于是一个人(或者说一对公钥私钥代表的账户)在比特币账本上所拥有的财富,实际上就是其拥有的UTXO的金额总数。

数字签名和验证脚本相互配合,赋予了电子货币类似于纸质货币的自我证明能力,同时作为一种数字货币,它天生具备的可编程能力,又将纸币远远地甩在了身后。

可编程货币是一件很有意思的东西。中央银行发行的货币,一定是由基本的固定货币单元组成的。1000元人民币,可能是由十张100元组成,也可能是二十张50元钞票组成,但是绝不可能是一张999元加一张一元钞票。但是对于比特币而言,钞票的面值已经不再受限。交易链中的任何一笔交易,就对应一张比特币钞票,如果把它纸质化,相当于比特币可以发行无数张面额各不相同的钞票。

在比特币的逻辑中,验证脚本是用来验证交易合法性的,然而,因为它本质上是一段可执行的代码,而代码可以完成的事情,绝不仅限于给执行者返回一个yes或者no。验证脚本的可扩展性,赋予了比特币这种可编程货币,在货币职能之外,无限想象的空间。

把加密技术引入记账,到这一步,中本聪已经解决了交易的证伪问题,即,除了当事人本身(在私钥没有泄露的前提下),没有任何人能够伪造出一笔合法的、能够被交易链条接受的交易,但是,这并没有解决历史交易的防篡改问题。当一个合法的交易记录被接入交易链之后,它就应成为一个无法修改的历史事实,不可以被任何人(包括交易发起人)篡改。仿篡改和防伪造同等重要,只有把这两个问题都解决了,才能彻底抛弃交易中介,否则,账本还是逃不过被“私藏”起来的命运。如何在账本曝光的情况下,防止交易被篡改,正是中本聪下一步需要解决的问题。

五百年前,复式记账法的发明,吹响了资本主义的号角。五百年后,古老记账技巧和现代密码学的结合,为中本聪的去中心化货币事业,铺平了第一块道砖。当然,路还很长。

 



王 剑

发表评论

电子邮件地址不会被公开。 必填项已用*标注