(苹果。图片来源于网络)
前情回顾:比特币史话·63 | 赌徒的破产(4): 算力对决
比特币史话·64 | 赌徒的破产(5): 泊松分布
比特币史话·65 | 赌徒的破产(6): 算力威慑
比特币史话·66 | 智能合约(1): 脚本的由来
比特币史话·67 | 智能合约(2): 合约并不智能
正文:
中本聪本尊我们无缘得以面叙,但是文如其人,见字如面,我们仔细阅读比特币代码中的术语命名、概念用词,以及散落在各处的那两三年间中本聪发表的文字,会在心中升腾出一个十分强烈的感觉,就是他总是坚持选择使用最朴素、最简单的概念和词汇来构造对于最晦涩问题的解决方案。他所解决的问题晦涩到什么程度?即使在比特币已经发明十多年后的今天,依然有很多人坚持认为比特币没有解决任何问题,或者不清楚比特币究竟解决了什么问题,因而没有任何价值。他所使用的概念简单到什么程度?技术圈子内的很多人看完比特币的开源代码之后,有种一度流行的评价就是,中本聪用的都是些老掉牙的技术,没有什么高级的东西,言下之意就是这些高论者也一样能发明出比特币,中本聪并没什么了不起的。其实,大家都明白,能把肤浅的东西搞得高深莫测不是本事,能把深奥的东西用浅显直白却又直指本质的语言讲出来、讲清楚,讲的普通人都一听就懂,才是真厉害。
在对于比特币脚本的命名上,中本聪的这一特点就得到了显著的体现。在这篇发表于2010年6月17日的论坛帖子中,中本聪解释了为什么要给比特币增加脚本支持,令比特币交易具有可编程性。由于比特币这种系统具有抗篡改的特性,这导致一旦上线,很多核心设计就不容易改动了。恰如中本聪所说的那样,“比特币的本质是,一旦0.1版本发布,其核心设计就将在其整个生命周期中一成不变。因此,我想对其进行设计以支持我可能想到的每种可能的交易类型。”[1]
但是,“问题在于,无论是否用到,每种情况都需要特殊的支持代码和数据字段,并且一次只能覆盖一种特殊情况。特殊情况会有一个爆炸式的增长。”
怎么解决呢?中本聪接着写道,“解决方案就是脚本(script),它把问题泛化(generalize),这样交易各方就可以把他们的交易描述为一个谓词(predicate),以供节点网络评估(evaluate)。节点仅需要在评估发送者的条件是否满足的程度上理解这笔交易。”
中本聪这句话里所说的“谓词”和“评估”都是计算机术语,或者扩张一点讲,是形式逻辑术语。“评估”函数在计算机语言中一般会简写成“eval”,并且改个名字叫做“求值”,并由此引申出一些更为高级的特性词汇比如“惰性求值”(lazy evaluation),这在函数式编程语言或者具有函数式特性的编程语言中会比较常见。而所谓“谓词”,就是一个说明事物性质的断言。比如“苹果可以吃”这句话,是一个命题。其中“可以吃”就是一个谓词。对苹果求值,结果为真,那么苹果可以吃;对石头求值,结果为假,那么石头不能吃。
中本聪觉得“谓词”太过于晦涩,于是他选择了使用一个更简单的词“脚本”。“脚本实际上就是一个谓词。它只不过是一个等式,求值结果为真或假。谓词是一个冗长而陌生的词,因此我将其称为脚本。”中本聪在2010年6月17日的论坛帖子中如此说道。
“脚本”(script)[2],在戏剧中指表演者的对话和舞台指示,在影视剧中指演员的对话和语言,在视频游戏中指游戏的叙事和文本,在漫画中指叙事和人物对话,在计算机中指通过解释器进行解释执行的计算机程序。要仔细搞明白这个问题,我们需要再次乘坐时光机,回到100多年前的英国,去了解一下那个被英国政府以同性恋为罪名指控和定罪,强制执行阉割,并最终造成犯罪分子吃下毒苹果自杀身亡的悲剧故事。这个犯罪分子,名字叫做艾伦·图灵(Alan Turing, 1912-1954)。
【未完待续】(公众号:刘教链)