EKT多链技术谈 | 数学:区块链里的精密元件
前言:数学在人类文明的发展中起着非常重要的作用。牛顿当年通过数学计算预见了发射人造天体的可能性;爱因斯坦相对论的质能公式从数学论证的角度预示了原子能时代的来临;正是麦克斯韦方程先从数学上论证了电磁波,后来才会有电磁波声光信息传递技术的发展;电子数字计算机的诞生和发展更是在数学理论的指导下进行的。数学也是区块链发展的前提基础,是区块链行业未来发展的核心保障。如果说区块链中各种巧妙、完美设计的规则是其灵魂,那么深深渗透其中的数学思想则是血液,从而支撑整个区块链体系信任机制的建立。本文将浅析区块链世界里应用到的前沿数学理论,并以此尝试描述区块链世界的数学秩序。
【The symbol of God】
数学是上帝描述自然的符号 —— 黑格尔
数学一直是人类文明发展的主要文化力量,同时人类文化的发展又极大地影响了数学的进步;而且,数学还是一种艺术,因此,数学不但具有科学价值,还具有文化和经济的价值。
走进一个机房,在服务器排成的一道道墙之间,听着风扇的鼓噪,似乎能嗅出0和1在CPU和内存之间不间断的流动。从算筹算盘,到今天的计算机,我们用作计算的工具终于开始量到质的飞跃。计算机能做的事情越来越多,甚至超越了它们的制造者。上个世纪末,深蓝凭借前所未有的搜索和判断棋局的能力,成为第一台战胜人类国际象棋世界冠军的计算机,但它的胜利仍然仰仗于人类大师赋予的丰富国际象棋知识;而仅仅十余年后,Watson却已经能凭借自己的算法,先“理解”问题,然后有的放矢地在海量的数据库中寻找关联的答案。长此以往,工具将必在更多的方面超越它的制造者。而这一切,都来源于越来越精巧的计算。
也许你经常听过图灵机这个名字,但为什么计算机要被叫做图灵机呢?
在纽曼教授的数理逻辑课上,图灵第一次听到希尔伯特的可判定性问题以及哥德尔不完备性定理。那是1935年的春天,他刚刚完成在剑桥国王学院的四年本科学习,以优异的成绩被选为学院研究员,正准备在数学界大显身手,数理逻辑自然而然吸引了他的兴趣。图灵清楚地意识到,解决可判定性问题的关键,在于对“机械计算”的严格定义。考究希尔伯特的原意,这个词大概意味着“依照一定的有限的步骤,无需计算者的灵感就能完成的计算”,这在没有电子计算机的当时,算是相当有想象力又不失准确的定义。但图灵的想法更为单纯。什么是“机械计算”?机械计算就是一台机器可以完成的计算,这就是图灵的回答。
图灵的贡献是建立了图灵机的理论模型,奠定了人工智慧的基础
图灵机的一大优点,就是它的简单。只要给出状态转移表,任何一个人都可以模拟一台图灵机的计算。对工程师而言,在现实中用机械建造一台图灵机也并非什么难事。对于程序员来说,写一个模拟图灵机的简单程序更是不在话下。
没有根基也许可以建一座小屋,但绝对不能造一座坚固的大厦——Eng.Isidor Goldreich
密码学作为一门古老的学科,有着悠久而奇妙的历史。它用于保护军事和外交通信可追溯到几千年前文字刚刚产生的上古时期。几千年来,密码学一直在不断地向前发展。从凯撒密码开始,人们在发展新密码学算法的时候也在孜孜不倦的破解已有的密码学算法,因为对于破解者来说,密码难度越高,意味着其背后守护的秘密价值就越大。SHA家族的五个算法,分别是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512,后几个一般也可以统称为SHA-2,由美国国家安全局(NSA)所设计,并由美国国家标准与技术研究院(NIST)发布;是美国的政府标准。也是众多互联网和电子产品的密钥门神。哈希函数具有一个单向性,任何的东西进去,出来都是一串随机数。这跟黑洞很像,黑洞任意输进去,出来的都是随机数。非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。密码学构成了区块链的根基,关于密码学的更多探究,读者也可以翻阅我之前的文章。
【In Math We Trust】
数学是各式各样的证明技巧 —— 维特根斯坦
阿里巴巴知道打开藏着财宝的山洞的咒语。强盗抓住他,让他说出咒语。如果阿里巴巴说出咒语,就会因为没有利用价值而被杀死。如果阿里巴巴坚持不说,强盗不会相信他真的掌握咒语,也会杀死他。但阿里巴巴想了一个好办法,他对强盗说:“你们离我一箭之地,用弓箭指着我,你们举起右手我就念咒语打开石门,举起左手我就念咒语关上石门,如果我做不到或逃跑,你们就用弓箭射死我。” 故事中的阿里巴巴的遭遇并不鲜见。现实中最主要的原因就是怕信息被盗用。因为现实中大量的秘密被用来鉴别用户的身份,如果披露了某个秘密给对方,通常意味着对方有能力冒充你的身份。因此,虽然直接把秘密提供给对方是最简单的验证方式,但是大部分情况下都不能这样做。
零知识证明过程有两个参与方,一方叫证明者,一方叫验证者。证明者掌握着某个秘密,他想让验证者相信他掌握着秘密,但是又不想泄漏这个秘密给验证者。
双方按照一个协议,通过一系列交互,最终验证者会得出一个明确的结论,证明者是或不掌握这个秘密。整个协议有三个要点:
a. 零知识:校验一个事件正确与否,并不需要验证者重现整个事件
b.测试方式:测试不能完全由证明者给出
c. 测试内容:测试难题的内容要有区分度
在计算机领域,一般做法是把原始问题映射到NP问题。验证者只要验证证明者给出的NP问题的解即可,这个计算量需求不大。如果某人掌握秘密,能解原始问题,那么转换一下就可以解对应的NP问题。如果不掌握秘密,绕过原始问题,直接暴力求解NP问题,一般可以认为是不可能的。零知识证明实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。大量事实证明,零知识证明在密码学中非常有用。如果能够将零知识证明用于区块链验证,将可以有效解决隐私相关的许多问题。
数学是一种会不断进化的文化。——魏尔德
形式化验证是用逻辑来验证程序的可靠性,就是把一段程序用逻辑的方法证明一遍,证明它能得到预期的结果,没有bug。一般这类研究主要应用于昂贵的航天器材的操作系统、危险的医疗设备的程序之中。因为航天器材、医疗设备牵扯到人的生命,如果操作系统出现错误,那么很危险,又不能用测试一遍一遍的测,所以用形式化验证来做。比如美国航天局NASA就会雇佣大批形式化验证的专家来验证他们操作系统的正确性。
智能合约安全性是非常重要的。之前,我也写过关于以太坊字节码中常见安全问题的文章,但是像这样的大概检测只是浮于表面。理想情况下,我们想要保证我们的智能合约能够100%的正确。形式化验证(Formal verification)让我们可以确保某种错误的状态不会发生。形式化方法简单的说就是用数学工具进行定义、开发和验证(specification, development and verification)。数学家们认为,不论硬件还是软件工程,就像世间万物一样,所有的学问一样,归根结底是数学问题。“一个不懂数学的工程师不是一个好工程师”。如果所有的设计开发都能够按照严格的数学方法进行,那么开发出来的系统就会像数学本身一样的完美:软件不会出错,硬件永远正常。
在有了形式化的spec的情况下,那么可以Verification就大致可以分为“手算”和“机算”两种了,因为高明的数学家的“手算”未必就比纯自动化的“机算”差。举个例子,全自动化的Verification里面有一个叫做“Model Checking”的方法,就是穷举系统运行过程中所能达到的所有状态(States),这个建模,也就是写Spec的时候也需要非常高明的技巧,实质上就是 “机器定理证明”。1954年,Martin Davis第一次用机器证明了一个定理:“两个偶数相加还是偶数”,不过在更早之前,图灵就已经通过一个著名的“停机问题”证明了图灵完备的机器的不可解问题。
EVM(Ethereum Virtual Machine)其实是一个很好的理想化目标,其功能需求明确,实现简单,而且最重要的,也是涉及金钱的事物。未来有人能够按照IC设计的方案,从硬件(比如说ASIC)到OS(比如专用micro kernel),再到EVM,做一个完整的基于形式化方法开发的产品,那就完美了。
【EKT的思考】
在区块链里,区块打包完成后,通过共识机制解决了分布式账本结构下达成一致并抗攻击的问题,它解决了去中心化基础上的节点间互信问题,是保障区块链系统持续安全运行的关键。基于分布式网络中各节点的信任基础不同,可以分为工作量证明机制、拜占庭容错机制等,它们在节点进出进制、抗攻击性等方面各有优势。以工作量证明机制为例来说明共识机制的原理。达成共识需要一定的标准和规则,达到标准就可以获取记账权,同时这个标准或者规则是不能低成本实现的,否则记账的权威性和安全性容易受到挑战。
基于数学难度的计算工作量证明机制简单理解就是一份证明,用来确认你做过一定量的工作。因为监测工作的整个过程通常是极为低效的,而通过对工作的结果进行认证来证明完成了相应的工作量,则是一种非常高效的方式。比如现实生活中的毕业证、驾驶证等等,也是通过检验结果的方式(通过相关的考试)所取得的证明。工作量证明解决了完全去中心化、节点自由进出的情况下,记账权的确认问题。
我们EKT的多链,则采用了更进一步的基于委任权益证明的新方案,重新设计了一个保障每个合约都能正常运行的公链,拥有现成框架,且不可分割的多链构架。这一创新极大程度上简化了架构,降低了数据处理压力,确保一条链上流量激增不会影响到另一条链的效率,在链上进行的任何业务都不会收到其他业务干扰,有效实现了资源隔离。
其实EKT在设计时考虑的一个大的问题是,每一套数学逻辑证明的系统给下,都不会完美的解决所有问题。EKT 则提供了一套底层的区块链机制,其他的区块链项目可以很容易的基于 EKT 的主链代码部署一套自己的主链,然后按照需求做一些定制化的设定,比如选择共识机制等。在EKT上编写的区块链项目将无需过于担心安全性问题,因为每一个接口都是非常简单并且在许多条并行主链上部署和运行的。部署主链时可以灵活的发行自己主链的代币以及选择共识算法。新部署的主链也可以加入到 EKT 通用积分的整个生态,共享 EKT 生态的用户资源,代币也可以和EKT 主币以及其他主链的代币进行交换和流通。
区块链生态上开发、运行、管理和交易去中心化应用及应用内资产的平台,已经逐渐成为一种越来越广的需求 。让数字世界的内容资产化,内容生产者可以与内容消费者建立一致的价值体系,是构建这一类型平台的核心。所以,这一点对所有其他搭建在区块链上的应用和产品都是一样的。比如我要是在区块链上做了一个Minecraft游戏,那么任何人也可以在Minecraft游戏上开发新的游戏。只要接入区块链,所有的游戏、所有的 dapp 就天然拥有了这种潜在的扩展能力和开放性。
默认就是拥有这种扩展能力的,这也是 dapp 最自然的开放理念。如果有人不希望有这种开放性的话,他完全可以通过自己搭建私有服务器的中心化的方式来做。区块链平台会为所有的应用统一提供这种开放性和可扩展性。在EKT中,坚持了这样一个理念,一个货币系统中不需要图灵完备的开发语言,不同的应用间尽可能实现隔离的原则。因此我们在设计的时候,把token的处理和DApp的处理分开了,也就是说在EKT上存在两种类型的链:token链和DApp链。
EKT的DApp链是供不同开发者开发DApp的一条链。我们从智能合约开发语言、数据存储、效率三个方面进行了优化。EKT的DApp链基本上可以实现与现在的互联网应用相同甚至更快的开发速度,可实现的功能性也与互联网应用没有太大差异,最重要的是,我们可以实现大部分事件的1秒执行和确认,安全性要求比较高的事件可以实现3秒的确认。
目前区块链生态上开发、管理和交易的去中心化应用及应用内资产的平台就应该以该行业中开发者和用户的需求作为项目初期版本的设计出发点。现在我们所能看到的主要技术也都基于这一出发点,为这个目标服务。EKT的中心思想就是设计一个社区的机制,让开发者可以轻易的开发一个可以承载DAPP的主链,其他的交给EKT来处理, EKT 的“一链一主币,多链多共识”的机制为后来的区块链项目开发提供了很大的便利,可以使用于任何区块链适用的应用场景。我们推出的多链只能是一个最低的标准,就是说,你可以认为一个产品最小化的版本是需要包括哪些功能的,然后你可以在上面衍生其他新的功能和新的玩法,如果你只有这些最小化的功能,那这个产品肯定就没什么意思了。
以上就是我对区块链数学思维的一些思考,和一些在设计EKT的多链多共识时对建设多链底层的考虑。欢迎大家提出疑问,共同探讨。
End
参考阅读:
20120717 计算的极限:逻辑与图灵机
20170621区块链中的数学思想概述
20180301 形式化验证如何确保完美的智能合同?
20180324简评三个基于VRF的共识算法
20180414详解“多链多共识”机制
《BTC whitepaper》
《EKT whitepaper》