连载||智能预言机:执行智能合约简单、强大的手段(二)
Codius和谷歌本地客户端(Google Native Client)
谷歌的本地客户端是一个运行不可信x86代码的沙盒, 多数计算机都使用这一低级命令。 开发本地客户端是为了在网上运行编译的二进制代码。除了提高了软件的故障隔离能力,本地客户端还提供了受限执行环境,保护用户远离潜在的恶意代码。
本地客户端可以用来运行任意编程语言,目前支持C、C++、Python、V8JavaScript、Ruby、Go、Mono和 Lua。 新版本地客户端支持x86-32和x86-64架构,以及ARM和MIPS架构。 谷歌使用本地客户端运行运算密集的网页应用,如Hangouts Video、QuickOffice、ChromeOS应用以及代管不可信代码数据中心。 数据表明便携式本地客户端模块运行速度只比低级虚拟机编译的本地码慢10-25%,因此本地客户端不仅启动效率高,还能提供性能执行。
Codius使用本地客户端,也是因为它独一无二的安全性、性能和灵活性。
本地客户端比VM更轻,且与管理整个操作系统的容器相比,攻击面更小。 未来的话,虚拟机和容器可能会在性能和安全性方面取得更好的平衡,但目前阶段还不能满足一些要求。
要求以特定的性能编程语言编写合约势必有碍系统的落地。 相反,若某些作者或主持更倾向于使用自定义或性能语言编写合约,可以在本地客户端沙箱中执行此操作,也会提供额外的安全保障。
软件故障隔离和本地客户端依赖最小的可信代码基,同时具有足够的灵活性支持任何编程语言,并允许重新使用已开发和广泛使用的模块。
合约应用程序界面
即使智能合约在沙盒中运行,且程序功能被限制,还有应用程序接口的问题。 为了更精确的控制合约的功能,Codius合约作者详细规定了可访问的应用程序界面类型。
尽管合约宿主可以开发并公开自己选择的任意API,但建议采取一种强调沙盒内代码而非外部API的手段。 API是复杂功能的构件,但要先成为智能预言机可信代码基的一部分。 另一方面,开发并包含在特定合约中会比较容易,而非集成到合约宿主中。
以下是理想智能预言机可以提供的核心API。
秘密与密钥对
合约的一个关键属性是加密身份。 具体而言,合约的运行实例必须能够向合约参与方证明自己确实是在特定合约宿主上运行的特定标识代码基。 上一节中讨论了各方如何就代码哈希达成一致。 要将此哈希与在特定宿主上运行的给定实例相关联,宿主将为每个合约生成一个唯一的密钥对并签署公钥。
熵(随机)
许多合约用例都涉及密码学。 虽然密码学原语可在沙盒内实现(假设沙箱够高效),但很多加密协议都要求有个很好的熵源或随机值。 因此,智能预言机应该提供API来获取宿主认为可以使用在加密应用中的熵。
网络
预言机通常与真实世界交互并向智能合约提供真实世界状态的信息,也就是说要通过互联网与服务进行交互。 沙盒内可以使用任何应用层协议,如HTTP、SMTP甚至比特币或Ripple,直接传输层调用搭配外即可。
文件系统
随着合约日益复杂化,应对复杂性的需求也将随之增加。 可以将每个合约编译成单个二进制或源代码文件。 但是,实现合约可访问的虚拟文件系统或许意义更大。那么,这也提供了一种将合约与静态数据捆绑的方式。
文件系统API与包含模块功能稍有不同,但具体实现可能相似。包含模块避免合约重复他人编写并完善的代码。拥有虚拟文件系统允许合约作者以逻辑方式构件自己的项目。此外,许多普通的代码项目和实用程序都是用文件系统命令编写的,因此模拟该结构可以轻松将现有程序移植到沙盒中。
合约宿主(Contract Hosting)
单一(可信)宿主模型(Single (Trusted) Host Model)
最基本的智能预言机只包含一个预言机。 这个预言机是可信的,会正确地执行代码, 合约参与者可以信赖它不会携款逃跑或与合约的其他参与方相互勾结。
现在许多服务商为其它公司或个人提供运行代码的服务,说明服务商是用户所信任的。单一可信任宿主模型类似于软件或服务的提供者。对于多数智能合约,单一可信任宿主即可,而且它设置简单,很有吸引力。
多重(不可信)宿主模型(Multiple (Untrusted) Host Model)
虽然单一可信合约宿主对多数用户来说已经足够了, 但是大额合约最好还是使用多重宿主模型。 这一模型中,合约代码分布在几个独立的智能预言机中,比方说10个。设置一个阈值,为合约执行,需要阈值数量的智能预言机就结果达成一致。 比方说,用户使用7/10模型,只有当等于大于7个智能预言机一致时, 合约才能执行。 7/10模型留出了3个缓冲, 也许有的智能预言机离线、有问题或者被黑客攻击,只要不多于3个就不影响合约代码的执行。多重宿主模型比单一宿主模型更为复杂,成本更加高,但安全保障更强。
门限签名
门限签名是由算术方式,将多个不同签名组合计算得出。 不同的门限签名方案根据所使用的精确阈值不同允许程度的可定制性,但是一些支持任意阈值。 需要注意, 联合私钥并不是重新创建的,而是签名独立的部分被分开计算,然后合并成一个特定数据的签名。
记费
智能预言机最灵活的一点是计费体系, 允许合约参与方为合约的执行向智能预言机支付费用。 计费体系与核心系统设计完全分离,因此智能预言机接受任何参与方选择支付方式,可以是信用卡支付可以是比特币支付。 事前还是事后收取费用完全由预言机运营商决定。
容错
智能合约可以提供一些保证,包括:
• 有效性 - 代码按照书面忠实执行。
• 可用性 - 可以随时与合约进行交互。
• 保密性 - 未明确规定应披露的价值不会被披露。
假设合约使用门限签名方案,其中t是阈值,n是合约宿主总数。 阈值* t *必须大于1且小于n。 要创建签名需要t + 1为签名者。假设所有对合约宿主的请求都来自某些客户端,假设每个客户端都希望自己的请求成功。
那么合约将最多为t个故障提供有效性保证,为(n-t) - 1个故障提供可用性保证,对保密性零容错。
保密性
如果需要更强大的保密性保证,双方有多种选择。 他们可能会选择分隔合约的某些部分,并为每个部分使用不同的合约宿主。 那么这种情况下,可以使用盲签名来隐藏合约不同部分之间的关联。
还可使用加密技术,如同态加密和零知识证明来隐藏合约宿主运行的实际数据。
最后,很多情况下,各方可能会选择线下合约,说明无需向任何合约宿主透露任何信息,除非发生争议。
合约客户端(Contract Clients)
合约参与方为了管理自己参与的智能合约,需要与合约宿主进行交互的软件。
预计许多合约模块都有相应的客户端软件。 根据使用情况,客户端可能功能迥异,可以是图形用户界面也可以是命令行工具。
线下合约(Offline Contracts)
当前的法律系统中,多数合约完全是“线下”的,即无需调用法律体系。 需要的话会调用法律系统,使得合约参与方遵守合约条款。
智能合约领域,也可以有线下合约。合约参与方将遵守下面的协议:
1. 创建的合约明确规定合约参与方违背合约协议将会受到惩罚。
2. 在合约代码末尾增加随机值。这样,即使得到合约代码哈希,想要获取合约细节也非常困难。
3. 向合约宿主请求发送公钥至合约,但是可不用上传合约。
4. 公钥能够访问托管的基金或者有控制合约参与方资产的权力。
5. 现在,合约的参与方可以在线下进行交互。
6. 若合约的一方出现欺骗行为,受害者可以上传并运行合约,对违约一方进行惩罚。
合约参与方为出现欺骗行为,则上传并执行合约,否则不需要。
这种合约避免了运行合约的成本,除非出现纠纷。那么,合约宿主该如何取费?
i. 合约宿主者从纠纷中取费。
ii. 合约宿主者从发行公钥中取费。
步骤3中使用身份加密技术或允许同一宿主上的全部合约使用公共密钥对消息进行签名(对消息有一定的限制,比如强制消息遵守某种包括合约哈希的格式),能够避免对合约宿主的调用。由合约宿主决定是否提供这种功能。
金融及其它领域的应用
一般来说,任何具有明确条件或结果的任意类型协议或关系,都可以使用智能合约。 智能预言机使得智能合约的实施变得简单、灵活且强大。
下面是当前可期的一些应用,从最简单应用的开始,难度依次递增。有鉴于系统的可延展性,可以预见的是预言机相关功能会随着生态发展,以及不断壮大的模块及现有合约规模,进一步扩展。
1. 桥接价值网络。比特币和Ripple等分布式网络追踪账户及余额的账本或者区块链是分开的。传统金融系统也有自己的账本。建立在智能预言机上的合约能够在自动在不同系统间创建完全可信的桥接。桥接能够接收来一个系统中的支付并立即在另一个系统中显示余额,或发起支付。
2. 托管。智能合约可以充当托管账户,监控两人间的交易。商品、财产或者服务的买方现将货款打到合约账户中,合约监控外部服务,好比域名交易中的域名查询服务注册中心,或者不动产交易中的公共房屋所有权记录。当所有权由卖方转移至买方,合约会自动将货款发给卖方。
3. 加密货币钱包控制。比特币和Ripple目前还不能实现“拉取支付”(pull payment)。“拉取支付”类似信用卡支付模式,由卖方代表买方发起支付。合约控制的钱包有许多类型的复杂控制,从每日取款限额到允许或撤销特定实体对账户的访问。这也使得认购、条件支付以及不公开私钥的精细化钱包控制成为可能。
4. 数字资产拍卖。若赋予智能合约某数字资产的所有权,那么合约可以执行拍卖规则。合约可以被设计成在比特币或者Ripple网络上接受投标资金,拍卖结束后,向投标失败者返还资金。
5. 金融衍生品。监控数字或非数字资产的合约也能够应用于期货合约、远期合约、互换合约、期权合约。
6. 债权和股权。 根据事先制定的规则实现支付和权益变更的其他证券也能够写成智能合约。
7. 智能财产。智能财产的经典例子是智能汽车,根据可转让、不可伪造的数字通证(digital token)认主。 合约可以用来管理所有权的转移和附带规则,包括临时性授权及其它协议中使用财产做担保。
8. 投票。未来智能合约可以用来执行民主、官僚或资产或者组织其它类型的控制结构。合约执行事先定义的规则,包括更改合约自身代码的规则。 许多非金融应用要求更复杂的基础设施和更加成熟的生态系统,因此这样的应用建成需要一段时间。
结论
智能合约是科技、商业和法律领域令人兴奋的新前沿。
智能预言机将提供真实世界信息的预言机与由沙盒保护的代码执行环境相结合。 将不可信代码执行与分布式网络剥离, 减少了复杂度,从而增加了两个系统的安全性。