长期以来,智能合约的开发语言一直以稳固性为主。它专注于开发可在以太坊EVM上运行的智能合约。然而,SOLidness存在一些严重的问题,包括算术溢出、类错误和delegatecall漏洞,这些漏洞已经冻结了3亿美元。所有这些漏洞都存在于开发语言层。换句话说,如果有更好的开发语言,它将创建一个更安全的智能合约。于是,web组装(wa)智能合约应运而生,创宇区块链安全实验室应运而生;从技术安全的角度,我们将带您快速探索流行的web组装(wa)智能合约。
什么是web程序集(wa)智能合约?
Web组装(wa)是一种面向支撑式虚拟机的二进制指令集。Wa被设计成在类似于C/C++/rust的平台上编译。最初的设计是为了解决JavaScript的性能问题。Wa是W3C正在推广的一种web标准,它得到了Google、Microsoft和Mozilla等浏览器供应商的支持。
Wa的特点是操作效率高、内存安全、不确定性和平台无关性。经过编译器和标准化团队多年的努力,以前已经有了一个成熟的社区。在区块链领域,包括本体,一些公链项目正在准备使用wa来承载智能合约。
Webassemb有三个特点
⼆⼆格式,不同于⽂ JavaScript代码格式
与JavaScript一样,实现webassemb标准的引擎可以在服务器或浏览器上运行webassemb
速度快,webassemb可以充分发挥硬件的功能。将来,您甚至可以在webassemb中使用SIMD或直接与GPU交互
当前以太坊虚拟机按顺序处理事务。以太坊网络上的每个节点执行交易并将其存储在区块链上。以允许访问;销售点;除了事务处理之外,以太坊团队还计划构建一个名为ewa的新虚拟机。
根据ewa规范,“要真正使以太坊成为世界计算机,我们需要一台性能稳定的虚拟机。当前的虚拟机体系结构是影响原始性能的最重要障碍之一。webassemb的标准是利用各种平台上可以访问的硬件功能,以达到接近本地机器的速度。这将为需要性能/吞吐量的各种通道打开大门。”
值得注意的是,ewa不是智能合约开发语言,而是编译器的一个组件。它允许以太坊开发人员让其他语言(如rust、C++)开发智能合约,并将它们编译成以太坊接受的web程序集。
Ewa是webassemb的一个安全集合,是web平台上一个相对较新的编译器。此外,wa(和ewa)模块还可以⽤ 在任何JavaScript条目中⽬. 对于大多数DAPP代码,超过75%的代码根本不是智能合约。它是使JavaScript能够与智能合约通信的代码。Ewa和JavaScript生成⽤ 相同的绑定和模块保持机制。
为什么选择rust来构建webassemb?
截至2017年底,四家浏览器厂商均已完成webassemb的初步实现,webpack实现webassemb**支持的消息也已公布。越来越多的团队在实现需求时将webassemb视为一种替代技术。
作为一种语言,rust是一种有效而可靠的语言。它的效率不仅限于开发效率,还因其执行效率而受到赞誉。它是一种罕见的兼顾开发效率和实现效率的语言。生锈速度快,内存效率高。由于缺乏时间和垃圾收集,它可以胜任具有特殊性能要求的服务。它可以在嵌入式设备上传输,并且很容易与其他语言集成。
在讨论wa在智能合约领域的巨大潜力时,上一节提到的wa的优点是它有着影响力的前沿编程语言,比如rust。优势⽤ 书面材料如下:
可预测的性能
没有不可预知的GC暂停,没有JIT编译器导致性能抖动,只有底层控件和上半身编程的完美结合。
更好的代码
代码标尺越快,加载速度就越快。Rust的wa模块不像垃圾收集器那样包含额外的成本。⾼ 层次优化和树震动优化可以消除⽆ 代码。
友好一点
一个充满活力的图书馆州系统帮助你赢得胜利。Rust有丰富的表达和零成本抽象,以及一个友好的社区来帮助您学习。
铁锈编译器⽬ 保持两个wa关联⽬ 目标:
wa32未知。此标记直接将llvm后端编译为wa。它适合于纯粹的代码编译,例如当您没有C依赖时。使用emscripten,它在默认情况下会变得更简洁,并且易于设置。
wa32未知emscripten。emscripten工具链被编译到wa中。当你有一个C依赖时,你必须使它,包括libc。
Wa32 unknown有望将新的rust代码集成到项中。
生锈和;Web程序集(wa)安全性
Rust已经被证明是具有不同层次系统编程知识的开发人员之间进行协作的有效工具。在其他编程语言中,只有通过经验丰富的开发人员进行广泛的测试和详细的代码检查,才能捕捉到它们。在rust中,编译器充当守护者,拒绝编译包含这些bug(包括并发bug)的代码。
在由构建的区块链项目上⽤ 生锈,天秤座;可以说,它是最**的语言。在实现语言中,Libra(改名为Diem)选择了***但高度安全的语言rust。然而,声称的安全并不意味着实际的安全。因为太受欢迎的人时间不够,所以隐藏的问题很多。无论语言有多安全,它都能保证实现的安全性。该漏洞通常来自代码实现过程。
rust社区也在讨论随机数的安全升级⽣ 功能。因此,尽管rust语言有一个安全的特性,但它并不完美。我们不能排除成为天秤座的致命弱点的可能性。**,过于依赖rust语言可能会导致单一依赖的问题。如果rust语言出现安全问题,将影响整个Libra系统,这可能需要时间来解决。毕竟天秤座的时间还很短,实现必要的多元化部署还需要时间。
尽管生锈加强了⾏ 在编译时。然而,rust还隐藏了第二种语言,它不强制执行这种内存安全保证:这称为不安全的rust。它不同于常规的生锈代码,但它提供了一个额外的超数量。
它可以存储从0到255的值。所以当你把它改成256的时候你会怎么说?这称为“整数溢出”。关于“生锈”有一些有趣的规则。在调试模式下编译时,rust会检查此类问题并导致程序死机,rust使用的术语表示程序由于错误而退出。
在release结构中,rust不会检测到溢出,相反,它将进入一个名为two’s complete wrapping的操作。简而言之,256变为0257变为1,依此类推。
近年来,rust语言以其迅猛的发展得到了广泛的关注。它的特点是保证系统的安全性⾼ 同时,获得了C++/C++的性能,这使得系统编程领域成为一个难得的充满希望的新选择。铁锈被许多物品使用后,其实际安全性能如何?
在前一篇文章中有一些关于rust安全性的研究成果,并对近年来rust语言开源项目中存在的安全缺陷进行了研究。在这项研究中,我们调查了五个用rust语言开发的软件系统、五个广泛使用的rust库和两个漏洞数据库。共调查了850个不安全代码缺陷、70个内存安全缺陷和100个线程安全缺陷。
存在不安全的锈蚀,因为静态分析本质上是保守的。当编译器试图确定一段代码是否具有保证时,**拒绝一些有效的程序并接受一些有效的程序。这必然意味着有时代码可能是合法的,但rust并不这么认为!在这种情况下,您可以让不安全的代码告诉编译器,“相信我,我知道我在做什么。”这样做的缺点是您只能依赖⾃⼰: 如果不安全代码出错,⽐ 比如取消引用⽤ 空指针,它可能会导致不安全的内存⽤.
生锈不安全的另一个原因是底层计算机硬件固有的不安全。如果生锈不允许不安全的操作,有些任务将根本无法完成。Rust需要能够直接与操作系统交互,甚至编写操作系统等底层系统的编程!
总结
不安全的rust直接影响到rust构建的wa智能合约的安全性,比如可能出现整数溢出,导致传输量前后出现巨大偏差等,幸好编译器充当了守护者,它拒绝编译带有这些难以捕获的bug的代码,这是非常安全的。
文章标题:webassembly智能合约特性及安全性技术分析
文章链接:https://www.btchangqing.cn/257818.html
更新时间:2021年05月14日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。