CertiK正式发布DeepSEA 1.0编译器

CertiK现已正式发布DeepSEA 1.0编译器。
用户可以访问CertiK的Github release page,下载可执行文件以及测试用例。
新发布的1.0版本中有两个重大更新:
· 编译器目前的完善程度已经达到能够编写企业级智能合约的标准。
· 新增了两个编译后端:目前除了以太坊和CertiK Chain之外,其还对以太坊2.0的WebAssembly ewasm提供实验性质的支持。
基础语言特性支持完备
在今年一月,CertiK发布了一版pre-alpha版本DeepSEA,它能够编译合约但是仍有一些未完成特性。随之发布了一个描述计划支持的基础语言特性的手册。
在这次的发布中CertiK完成了旧版本中的未完成特性,例如事件(events),keccak256哈希,calldata等等。
目前,DeepSEA 1.0编译器支持所有在手册中定义的语言特性。
这次的DeepSEA1.0远不是DeepSEA语言的最终版本。CertiK会继续完善DeepSEA,不过目前的版本已经可以被用来编写工业界等级的合约了 。
合约用例:
Olive.ds [],是从Olive在线直播平台的首次公开募币(ICO)的ERC 20合约[https://etherscan.io/address/0x9d9223436ddd466fc247e9dbbd20207e640fef58#code] 中衍生出来的。

这个Olive平台的合约是CertiK安全审计中碰到过较为复杂的一个合约,对于Olive的支持也意味着DeepSEA可以支持几乎所有代币类型的合约。

除此之外,目前CertiK在内部开发的支持CertiK Chain和安全功能的很多智能合约也可以被DeepSEA目前的语言特性完美支持。
· DeepSEA编译器的未来计划
DeepSEA编译器会继续加入更多的语言特性。在接下来的发布中会支持更多的后端编译对象平台,以及提供加载合约到交互式定理证明助手中来证明其安全性的功能。
对于WebAssembly的支持
WebAssembly (WASM) 在区块链行业可谓是新宠儿,很多业内公司都已经支持或者计划支持将WebAssemly作为智能合约运行的虚拟机平台。
WebAssembly作为一个经量级的底层语言首先出现于2015年,被作为浏览器引擎内核语言的它有着极多的生态系统支持。
WASM最具优势之处在于它是使用形式化方法设计的:它有形式化定义的语义以及一个可靠(sound)的类型系统。这个类型系统保证了如果一个WASM程序通过了编译,那它一定不会有任何的类型错误或者是内存安全问题。
WASM无歧义的语义也让在其之上构建证明框架或者形式化验证过的编译器变得十分容易。以上这些特性让WebAssembly成为了一个高安全需求智能合约的理想平台。目前,使用WebAssembly的区块链组织包括以太坊基金会(Ethereum Foundation),Parity Technologies,Cosmos,以及Hyperledger。
· DeepSEA对于以太坊WebAssembly的支持
这次的发布支持编译DeepSEA语言到以太坊 2.0将要使用的WebAssembly (eWasm)。
eWasm和平时在比如Firefox之类浏览器引擎中见到的普通的WASM之间的区别在于,使用eWasm的合约必须要符合一个特定的接口:程序只能暴露自己的内存以及主函数给外部,并且需要载入以太坊外部接口(Ethereum External Interface, EEI)来支持例如转账或者链上全局变量这种以太坊的特殊操作。
对于某些其他的特性,例如计算gas、哈希函数(keccak256),eWasm可通过调用事先编译好并且发布到链上指定地址的系统合约来完成。
因为以太坊 2.0还在开发中,eWasm的官方测试网以及一些诸如keccak256的系统合约还没有开放。所以目前DeepSEA的eWasm后端不支持任何使用keccak256的合约。这代表着利用了哈希来完成功能的语言特性也不被支持,例如struct,mapping,以及array。
DeepSEA对于WebAssembly的完备支持还在开发中。在未来的发布中CertiK会完成eWasm的部分,并且会加入对于其他公链平台使用的WebAssembly的支持。
· 运行一个WebAssembly合约
要运行一个WebAssembly合约,只需要下载DeepSEA编译器,并且在编译时加一个`ewasm`的flag。
在这里为大家展示一个简单的例子:
· 安装WebAssembly Binary Toolkit (WABT) 。可以参考WABT的github来安装,或者如果你使用的是MacOS的话,直接在命令行中输入`brew install wabt`。
· 使用DeepSEA来编译一些合约。
在这个例子中,编译一个简单的计算器合约:

并且在Javascript虚拟机上运行它:

WebAssembly合约的调用规则和以太坊1.0一样:在调用函数的时候,你需要传入此函数签名的前四个字节的哈希值。
为了让这个例子更直观将这些哈希值硬编码在JS脚本里面。在编译一个自定义的合约时,你可以修改JS脚本里面的函数哈希并且填入正确的参数。

区块链生态系统必须要建立在信任的基础上。有些人认为区块链值得信赖的原因在于共识协议,但由于某些可能产生的程序编写错误及恶意攻击,代码仍不可完全保证其安全性。
DeepSEA项目就是为了攻克例如以上或更加底层可能出现的问题与隐患而诞生。
DeepSEA的开发工作部分由哥伦比亚-IBM区块链中心和以太坊基金会资金支持。它以任何其它语言都无法企及的安全性让我们距离构建安全区块链生态系统的愿景更近了一步。