第5讲 世界宪讲:代码即法律

第5讲 世界宪讲:代码即法律

00:00
15:45


如果代码不可篡改,

就必须保证代码没有漏洞,

这是区块链最纠结的地方。







【区块链世界的“代码悖论”】
  
代码曾经是自由的,越优秀的代码越自由,就像越好的语言扩展性越强一样,然而一旦在代码中添加区块链,就实现了不可篡改性。既然代码不可篡改,就必须保证代码没有漏洞。对于区块链来说,这本身就是一个悖论。

我们在第三章谈到信任的机器,它是区块链的躯干。

第四章谈到了共识机制,它是区块链的灵魂。

而在区块链的世界里,无论是躯干还是灵魂,最终都是由代码构成。

在另一个现实世界,法律作为一种配置社会资源的机制,被社会经济发展的客观要求所决定,并直接影响着经济运行的全部过程。随着社会分工细化和人类活动范围日益扩张,法律逐渐变成国家制度的框架下加以确认的一套格式化规则体系,它能够简化社会关系的复杂程度、节约交易成本,帮助社会成员安全、规范、有序地进行交易。不管是基于社会契约论、功利主义论、暴力威慑论还是法律正当论,法律的约束力都从未突破人的自我意志。 

也就是说在现实世界,法律的解释是多样性的,而在区块链的世界,代码的解释是唯一性的。






【法律的本质是“合约”】
  
现行法律的本质是一种合约,它是由(生活于某一社群的)人和他们的领导者所缔结的,一种关于彼此该如何行动的共识。个体之间也存在着一些合约,这些合约可以理解为一种私法,相应的,这种私法仅对合约的参与者生效。

合同的概念可以追溯至远古时代,古希腊和古罗马人认为,合同是解决信任、透明度和执法问题的正式协议,如市场交易合同、企业组织生产经营活动的各种内部规章以及其它一些契约关系。

目前,主要依靠当事人的忠实履约或第三方来保障合约实行。在具体操作过程中合约会面临着一系列成本,比如:交易双方在要约与承诺阶段因大量的谈判而发生的签约成本;合同签订过程中双方还可能根据不同的情况对合同条款进行修改、补充,以使合同更加完备而产生的修约成本;合同的维护和执行过程中发生的履约成本等。

例如,你和一个人订立合约,借给他一笔钱,但他最后毁约了,不打算还这笔钱,此时你多半会将对方告上法庭。但在现实生活中,打官司这种事情充满了不确定性,通常情况下,将对方告上法庭,意味着你需要支付高昂的费用聘请律师,帮你在法庭上展开辩论,这一过程大多旷日持久。即使你最终赢得了官司,你也可能会遇到一些问题(比如,对方拒不执行法庭判决)。而对你比较有利的是,当初你和借款人把条款写了下来,订立了合约。

但法律的制定者和合约的起草者们都必须面对一个不容忽视的挑战:理想情况下,法律或者合约的内容应该是明确而没有歧义的,但现行的法律和合约都是由语句构成的,而语句,则是出了名地充满歧义。






【合约,区块链世界的“法律前置”】
  
一直以来,现行的法律体系都存在着两个巨大的问题:第一,合约或法律是由充满歧义的语句定义的;第二,强制执行合约或法律的代价非常大。

而随着区块链技术的诞生,这些问题将被逐一解决,由代码组成的区块链技术基于法律框架,通过预设自动执行的智能代码合约,在约束并引导人们的行为时引入技术,依靠技术使信息更加透明、数据更加可追踪、交易更加安全,并且大大降低了执行成本,这其实是一种“法律前置”,有一点《少数派报告》电影的味道。


在区块链世界中,由代码构成的智能代码合约形成了区块链的“自规则”——区块链中的法律,也就是说,代码即法律。

代码对应语言中的文字,但不同于文字的多释义,代码的含义具有唯一性。代码作为一种核心工具,我们可以用它来构筑并保护我们最基本价值理念的网络空间,同样也可以用代码使其消失殆尽。斯坦福的劳伦斯•莱斯格(Lessig)教授在《代码》书中反复强调:基于代码的软件或与协议能够像任何法律规则一样规管我们的生活。






【互联网1.0,法律主宰代码】
  
互联网的基础架构就是TCP/IP协议,这个协议规定数据包是如何在网络中进行传输和交换的。而就是这个简单的协议,保证了互联网的迅猛发展。因为,它没有试图在基础的网络架构里加入太多的东西,比如安全和控制等等,从而保证了基础架构的简单和灵活性。互联网的这种架构,让创新在网络的边缘节点(Edge)来进行,从而有很多的创新应用得以被发明出来。

如果当初是按照AT&T(美国电话电报公司)的想法来规划互联网,那么它今天就不会是这个样子了。作为一个企业,AT&T必然会在基础的架构里加入很多的功能和控制,并会对边缘节点的接入应用进行限制,那样的互联网就不会像今天这样的自由。

一开始是美好的,控制着整个互联网的核心运作的,就是TCP/IP协议,它是严格执行这个协议的程序代码。在计算机网络的世界里,所有的规则定义是以代码来实现的。

然而发展的路径却并不是由程序员来说了算:第一代架构是由非商业组织研究者和黑客建立的,他们关注于如何建立一个网络;第二代架构则是由商业建立的;到了第三代架构,已经是政府的作品。现实社会的法律开始作用于网络空间,代码越来越不是法律,反而法律开始影响网络的构架,开始影响一行行代码。为了维护网络空间的稳定,网络实名制被提上议题,新发的帖子需要通过关键词审查;为了网络纯洁,图片需要改变外链规则。在网络空间内代码实现了法律所需要的效果,“法律”化身为代码。


不过,到了区块链时代,它区别于传统互联网,有着自定共识规则和自动实施规则的能力。区块链技术可以通过技术方法落实契约原则,解决信任问题。这是契约的前置,信任的锁定,法律的嵌入,社区的共识,每一笔交易都透明公开,通过共识协议和可编程的智能代码合约形式,可以建立互信、创造信用,制定和执行交易各方认同的商业条款,引入法律规则和监管控制节点,确保价值交换符合契约原则和法律规范,避免无法预知的交易风险。

谁要改变这样的代码就是与整个社区为敌,代码就是法律。

我们再了解一下它的流程,弄明白它为什么在技术上更加可靠。






【代码实现哈希值的计算】
  
我们知道比特币使用哈希加密算法来维护信息的安全性,那么代码要如何实现这一过程呢?

首先,打开终端,输入Python并点击Enter。然后你将进入Python REPL,在这种环境下,你可以直接使用Python命令,而不是在单独的文件中编写程序。最后输入以下数值,在每行之后敲击Enter,并在标记处输入TAB:




这样,你就创建了一个函数——hash(),该函数将计算出某一特定的使用MD5哈希算法的字符串的哈希值。将字符串插入上述的括号()中便可运行该函数。例如:

hash(liangzixuepai)

按下Enter并查看该字符串的哈希随机值:

e4b9cb27e1fa5e644dc53e20de8c108f

如果改变这串字符,会发生什么呢,是哈希值的微小变化还是什么?

hash("liangzixuepai") => e4b9cb27e1fa5e644dc53e20de8c108f

hash("lianzixuepai") => 8a76b8bce8a03603003f23cce0e1b034

你将看到在同一字符串上,调用该哈希函数将总是生成相同的哈希,但添加或改变其中的某一个字符将会生成一种完全不同的哈希值。

代码实现了哈希函数的运行,在区块链中,我们通过代码就可以计算哈希值,基于哈希算法的数字加密也才得以更好地进行。


 
【基于代码编程的区块链】
  
想要区块链自规则能够完整运行少不了代码的编程,下面从代码的角度实际讲一下如何形成一个完整的区块链。

第一个逻辑步骤是决定区块结构。为了保证事情尽可能的简单,我们只选择最必要的部分:index(下标)、timestamp(时间戳)、data(数据)、hash(哈希值)和 previous hash(前置哈希值)。如下图:




第二步是确保区块链的这个块中必能找到前一个块的哈希值,以此来保证整条链的完整性。代码如下:




第三步是哈希加密,这里采用的是哈希SHA25加密法(上面所用的是哈希MP5算法出来的散列值),为了保存完整的数据,必须用哈希计算整个区块。SHA-256会对块的内容进行加密,记录这个值应该和“挖矿”毫无关系,因为这里不需要解决工作量证明的问题。其代码如下:




第四步是块的生成,要生成一个块,必须知道前一个块的哈希值,然后创造其余所需的内容(= index, hash, data and timestamp)。块的data部分是由终端用户所提供的。代码如下:



第五步是块的存储,内存中的Javascript数组被用于存储区块链。区块链的第一个块通常被称为“起源块”,是硬编码的。



第六步为确认区块完整性,在任何时候,都必须确保一个区块或者一整条链的区块的完整性能够被确认。在我们从其他节点接收到新的区块,并需要决定接受或拒绝它们时,这一点尤为重要。

用代码表现为:




第七步为选择链,任何时候在链中都应该只有一组明确的块。万一出现冲突(例如:两个结点都生成了72号块时),前面的主干区块链会选择有最大数目认同的链。





最后是结点控制,某种程度上用户必须能够控制结点。这一点可以通过搭建一个HTTP服务器实现。




至此一个区块链世界已经创建完成,在短短二百多行代码中,这个数字世界的法律被建立,“代码即法律”得到了完美的诠释。

但值得注意的是,以上的代码只是最简单的一种代码架构,像比特币和以太坊的代码经过这么长时间的发展,已经发生了一些变化,它们要复杂得多,架构肯定也完整得多。


 
【区块链世界法律架构的确立,以以太坊为例】
  
以太坊(Ethereum)通过数字货币和编程语言的结合,为用户提供了一个智能合约编写的平台,用户能够以智能代码合约为底层系统确定自己区块链世界的“法律”。

以太坊的智能合约,由一个完整的编程语言构成,有时也被叫做以太脚本(EtherScript)。我们都知道,代码语言是人类用来控制计算机工作的,而反过来,计算机则无法猜透人类的意图,因此用任何代码语言写好的指令,对计算机来说都是准确无误没有歧义的。也就是说,计算机如何执行一段代码是不存在歧义的,除非是你的代码编写出了问题。在同样的条件下,这段代码总是会按照既定的步骤执行,这种特性正是人类现行法律与合约中所缺失的。有了以太脚本(EtherScript)之后,我们可以建立具备这种特性的合约了!

考虑到大部分的合约都涉及到经济价值的交换或者具有某种经济后果,因此我们可以在以太坊上用代码实现人类社会中各式各样的法律与合约。用代码实现合约,可以有严格明确的定义,并且可以自动被执行。

如此说来有些晦涩难懂,我们还是一起来看个简单例子吧。

假如,你自己做了一家网站,然后张某想以5000元的价格购买这家网站,同时张某承诺会在三月份进行付款。按照传统的交易流程,首先,你会与张某签订一个合约,合约里规定张某在三月份向你付款。合同签订完毕,你就将网站的控制权转移到了张某手里,等着张某到三月份给你付款。等到了三月份,按照你对合约的理解,张某应该付款了。但这时候,张某说,他认为合同里的三月份指的是明年三月,而不是今年三月。这个时候,你就要准备好花钱请律师,去法庭上好好讨论一下合同里的“三月份”到底是何年何月了。

而如果基于以太坊,你可以用以太脚本定义出如下图所示的“智能代码合约”,这份合约人和计算机都可以读懂:




一开始就读懂上图所示的代码合约可能要花点时间(如果你不是一名程序员的话),但一旦学会如何阅读,这份代码合约绝对比现有的律师们起草的合约要通俗易懂得多。如果采用这种方式,简单的代码合约一般的用户就可以起草,特殊一点的代码合约可能需要稍微资深一点的专家(就像复杂的传统合约也需要专门的律师起草一样)。作为结果,我们得到的这份合约,完全消除了类似“我认为,你认为”的这种误解,缔约双方是否依法履约的不确定性也一并被消除。

也就是说,代码脚本写成的这份合约,既定义了合约内容,又保证了合约内容的执行。

本质上而言,由代码构成的合约是一个无歧义且无法毁约的合约,只要双方都认同合约,那么合约就一定会执行,不管其中是否有人想毁约或者提出歧义,代码就是最好的语言,代码的自规则将自行运转,是不以人的主观意志为转移的机器法律。



【结语:代码即法律】
  
法律作为一种社区共识,它是以人性作为起点,以道德作为基础,以利益作为条件,以暴力作为信用而形成的一个“合约”,但这个“合约”很容易在高收益的诱使下被破坏,然后违约者被发现后才会受到法律制裁,这是一种“过去式”的惩罚机制;

而区块链代码是一种“内在的”规则,为软件代码定义的对应的算法运算规则,如果不遵守代码的运行机理,程序将返回一个error并停止运行,这是一种“进行时”的执行机制。代码所组成的“进行时”机制从根本上保证了整个规则体系的运转,如果代码无漏洞,该体系就无法被打破。

因此,代码意味着规则,区块链世界的宪章就是代码,代码即法律。

当然,最后的区块链世界会不会和互联网世界一样,仍然是由法律来主宰代码,谁也没有办法在这里预测。

有时候,我们低估了技术的力量,也高估了人性的底线。

但由于区块链技术的介入,如果想要修改区块链世界的宪章,那将是一场更激烈的战争。

以上内容来自专辑
用户评论

    还没有评论,快来发表第一个评论!