美文网首页Nervos Fans我爱编程
连载||智能预言机:执行智能合约简单、强大的手段(一)

连载||智能预言机:执行智能合约简单、强大的手段(一)

作者: 526ba0512193 | 来源:发表于2018-06-20 17:27 被阅读9次

综述

智能预言机(smart oracle)将商业逻辑、法律及其它共识规则编译成代码,为实施智能合约(smart contract)提供了一种简单、灵活的方法。智能预言机以预言机,或者说以任何为智能合约提供真实外在世界信息的实体为基础。 这样的系统中允许使用任何编程语言将规则编译成代码,合约能够与任何认可加密签名指令的服务交互,包括(但不限于),加密货币网络。我们引入一种名叫Codius的智能预言机(码律,在拉丁文中“ius”表示法律),使用谷歌本地客户端(Native Client)作为代码沙盒(code sandbox)。 

这篇论文中,会首先介绍一些定义和智能合约概念的背景。 然后介绍Codius智能预言机并描若干技术实施细节以及系统的安全威胁模型。最后描述智能合约在金融和非金融领域的应用,以及智能预言机对智能合约整体的可能产生的深远影响。

一些定义

智能合约

首先,智能合约是将特定条件与结果正式编译成代码的程序。 合约参与方事先就代码达成一致,须由诚实中立的系统执行代码。

开发并使用智能合约主要有以下三个关键步骤:

1. 将合约条款编译成代码。有鉴于数字系统是确定性的,包括违约惩罚和仲裁者举荐(非确定的)在内的合约全部可能结果都做出了明确规定。

a. 确定性系统中,所有变量都可用确切的函数关系来描述,系统的运动特性可完全确定。以确定性系统为研究对象的控制理论称为确定性控制理论,如线性控制理论、线性系统理论、非线性系统理论和最优控制理论等。

b. 确定性系统指的是由确定性条件约束的系统。

2. 就即将运行的代码达成一致。实践中,合约参与方通常会使用可配置合约模块创建相关合约。就合约达成一致后,代码执行过程中不应出现变更。

3. 以可信的方式执行代码。代码必须由中立的第三方或一组不会相互勾结的独立实体运行。也可以不执行代码,细节参见线下合约部分。

智能合约相较于传统合约的好处是:速度和效率方面的提升以及合约逐条执行的确定性。

预言机

有些智能合约系统,包括比特币智能合约,都是严格确定的。为实现与现实世界的交互,需要依靠外部系统“预言机”提交相应的加密签名信息。

预言机是可以签名引入外部世界状态信息的可信赖的实体。 签名能够以确定性方式进行验证, 因此预言机允许确定性的智能合约对不确定定的外部世界作出反应。

智能预言机或者合约宿主 

术语“智能预言机”与“合约宿主”为同义词。

合约参与方

合约参与方指同意使用智能合约执行协议的个人或者企业。 其它相关方还包括合约作者、合约所有者等。 合约作者指编写代码的人,作者可以是一个或者一组发表开源拍卖合约的开发者。 合约所有者指智能预言机执行合约前的准备人/实体。

注意,合约宿主不能是合约参与方或者与参与方有关联的实体。

公/私钥密码学

使用公/私钥密码学能将信息加密或编译成一组任意字符。信息被公钥加密时,只有对应的私钥能解密。

公/私钥密码学允许私钥持有者对信息进行加密签名。任何人都能判断出签名由且只由私钥持有者创建。

公/私钥密码学也是智能预言机的基础,因此需要了解基本的非对称加密和加密签名工作原理。

分布式网络和共识数据库

虽然Codius智能预言机项目独立于任何现有分布式网络、共识数据库以及加密货币,但实际上深受比特币及瑞波启发。

从预言机到智能预言机

智能合约、预言机的概念并非新生代。 早先的系统(包括比特币)依赖共识网络中执行合约,因此合约的执行必须是确定性的。 本文旨说明,使用智能预言机执行合约能够明显普遍化并简化系统。

智能合约被认为由尼克•萨博在上世纪90年代后期提出,尼克•萨博主张将关系形式化并编码至软硬件中,能够简化并保全商业逻辑与功能。萨博认为自动贩卖机是智能合约的“祖先”:投币—拿零食,不用实现跟贩卖机主人达成任何明确的协议。 同时期,另外一位密码学专家,戴伟在自己的B-money提议中也写到过自执行、基于密码学的数字合约,与萨博的理念相似。

形式化方法在古代就运用了,而在现代逻辑中又有了进一步的发展和完善。这种方法特别在数学、计算机科学、人工智能等领域得到广泛运用。它能精确地揭示各种逻辑规律,制定相应的逻辑规则,使各种理论体系更加严密。

人们对加密货币的兴趣将智能合约带回公众视线。 以数学为基础的加密货币网络为智能合约提供重要构件:使用加密签名实现对有价值的数字资产的转移。比如,比特币和瑞波协议中资产由公/私钥掌控的账户所有。 交易需附带账户私钥生成的签名,否则不能执行。智能合约能够创建此类加密签名,从而被指定为任一类型数字资产的部分或者完全的所有者。

但是,加密货币开发者也发现,想要设计出一种系统,既包含强大智能合约语言,又有稳健共识体系,难度着实高。比特币脚本语言允许对简单逻辑进行编码并执行。 然而,事实证明,编码高级逻辑并执行不可信代码非常之复杂。

共识网络功能设置时,必须十分谨慎,因为网络的任何变更都需要得到每个人的同意。 比特币百科中曾明确写道对此的担忧:“考虑到客户端实施中可能出现bug,有些复杂的脚本命令被禁用。 使用这些(复杂的)脚本命令的交易若想入链,任何问题都有可能引发分叉。” 区块链或分布式账本分叉,意味着出现多重竞争状态的网络,对于共识系统来说是需要极力避免的。

我们认为能够以安全、可信赖的方式实施功能强大的智能合约,同时避免加剧已有共识网络的复杂性。

执行不可信代码应该与共识数据库及其他追踪、转移资产所有权的服务解耦。 由独立的合约系统执行不可信代码并通过加密签名与共识数据库交互。 签名原生于共识协议,因此无需任何修改。 将合约与共识网络解耦还有其他好处:合约可以与多重网络甚至是任意类型的在线服交互。 好比,智能合约不仅能够与比特币和瑞波交互,还能与Paypal、Google、Ebay等网络服务,甚至SSH、LDAP、SMTP和XMPP等互联网协议交互。

若将合约执行与现有系统解耦, 代码在什么地方执行?这就要引入智能预言机了。

多数智能合约方案,甚至是共识网络内置的智能合约(比方说比特币智能合约),都依赖独立实体对合约外部世界的状态进行告知。好比,比特币合约依赖 “预言机”,将签名引入网络证实外部世界的事实,确认某特定条件是否被满足。 智能预言机进一步拓展了预言机的概念, 将不可信代码执行置于预言机手中。 智能预言机是可信或半可信的实体,既能提供有关外部世界的信息,也能执行合约参与方达成一致的代码。

实施智能预言机

智能预言机有多种实现形式。 接下来介绍一下多数智能预言机不可缺少的元素。 智能预言机的关键组成部分:安全的验证码、沙盒代码、预言机应用程序界面、合约宿主及计费模型、合约客户端。

注:以下为技术细节。

安全验证码

合约参与方就协议规则达成一致后,须将规则编译成代码。 检查代码及代码体现的商业逻辑是否与达成的共识一致。 另外,验证上传到智能预言机的代码与检查过的代码一致,这里,使用确定性代码编译、哈希和代码重用模块可以简化上述验证过程。

确定性编译

预言机最终执行的代码必须准确代表合约参与方达成的逻辑共识,此举关乎合约参与方的利益。 于编译语言来讲,要求源代码共享,同时通过可复制过程将源代码编译成机器代码。于解释型语言来讲,共享源代码足以。 无论哪种方法,都需要合约参与方就即将被智能预言机执行的最终命令达成一致。

哈希

加密保护的哈希是确认二进制或者源代码文件的简便方法。 哈希函数将任意大小的数据作为输入,产生长度固定的短字符串。 此串哈希是文字或数据独特的身份证。

虽然不必要,依然推荐使用抗碰撞哈希函数。意思是找到输出相同的两个不同输入是不可能的。

模块

传统合约一般都是制式合约,智能合约也一样。 任何智能预言机系统都能提供些可重复使用的代码, 既增加便利性又提升了安全性。

许多合约的逻辑都简单易懂,这些逻辑建立于广泛使用的模块之上。模块可以包含基本功能,比方说,与比特币或者瑞波网络连接的机制;模块也可以包含高级功能,比方说,标准化拍卖、托管或者债券功能。

Codius使用由哈希鉴定的模块,可以被多个合约分享并引用。

代码沙盒

智能预言机的核心理念在于允许用户同意合约代码并将合约上传至可信单个或多个第三方执行。 智能预言机必须能够安全执行用户代码,这些代码不可信,甚至可能是恶意的。 预言机必须能够保护自身系统以及运行的其它合约的完整性。

以下是四种常用的限制不可信代码功能(沙盒)的方法。不同的智能预言机系统可能选择不同方法,有时为安全起见,还可能多种方法联用。

1. 虚拟机

虚拟机是在单个物理机内模拟相互分离的计算机环境。 一台服务器或计算机可以运行多个虚拟机,每个虚拟机都有完整的操作系统。虚拟机的安全依赖计算机处理器的虚拟命令集。 虚拟机与外部世界或者宿主计算机的通信受虚拟机监视器的严格管控。

虚拟机技术可以追溯到上世纪六十年代,现广应用于代码沙盒。 多数云计算提供商使用虚拟机在单个主机上运行多个用户的代码。 虚拟机用于代码沙盒优点是安全性高, 缺点是计算机资源成本略高,由于每台虚拟机都包含完整操作系统,每次运行合约都启动虚拟机并不现实。但运行高额合约时,合约宿主可以推荐虚拟机选项,为达到更为安全的执行环境,合约所有人愿意支付更多费用。

2. 操作系统保护域

许多处理器架构都内置保护域。 主要由操作系统使用,允许操作系统将单个处理相互分离开,并与底层硬件隔绝。 最终依赖保护域的安全技术包括处理相关隔绝、FreeBSD jails、Linux containers、SELinux、AppArmor。

软件部署方面,如Docker等容器系统(container system),正超越虚拟机为人们所青睐,因为启动够轻够快。 然而,这些容器作为沙盒技术的安全性还不够。

这一模式下,安全完全依赖宿主操作系统执行权限层的能力,也就是说核心的故障可能导致沙盒漏洞。另外,多数流行的操作系统内核都有非常大的攻击表面,因此相较依赖小型可信任代码的沙盒,安全保证方便更困难。 那么,出于安全的考量,操作系统相关功能,比方说保护域,以及处理相关隔绝手段可以与其它机制联用。

3. 软件故障隔离

软件故障隔离依靠编译软件来减少命令集。 沙盒通过静态验证二进制代码确保不包含允许集以外的操作,来执行其规则。

软件故障隔是种有趣的沙盒形式,验证器是唯一的可信部分,且实施仅需少量代码,相当于可信代码基数被最小化,也就是说验证系统更为简单,因此安全性更高。

4. 性能安全(Capability-based security)

性能安全是设计原则, 规定程序不得擅自引用不允许该程序使用的功能或资源。可以这样理解,某人没办法具体描述一些实施犯罪的想法,就不可能做出违法的事情。

智能合约系统可以要求合约的编写使用某种性能安全的语言,从而沙盒不可信代码。 编程语言E专门被设计,要求使用不可伪造的通证访问所有资源。 如JavaScript之类的解释性语言套路跟E语言差不多:语言仅在浏览器中公开某些类和功能(例如Web API)。 系统也可以自定义有相同属性的独立语言。 但是, 若性能安全是唯一的沙盒层,也意味着合约作者都不得不使用这种比较小众语言。

未完待续

https://github.com/codius/codius/wiki/Smart-Oracles:-A-Simple,-Powerful-Approach-to-Smart-Contracts#smart-contract​github.com

相关文章

网友评论

    本文标题:连载||智能预言机:执行智能合约简单、强大的手段(一)

    本文链接:https://www.haomeiwen.com/subject/uuvxyftx.html