宇宙链 宇宙链
Ctrl+D收藏宇宙链
首页 > 以太坊 > 正文

虚拟机科普专栏 | Rust智能合约的应用

作者:

时间:1900/1/1 0:00:00

往期“智能合约执行引擎的前世今生”、“熟悉的新朋友-链上JVM”中,我们介绍了智能合约的起源,以及自研的可以执行Java智能合约的执行引擎HVM。虽然HVM相比于EVM,性能已经有了很大的提升,但是由于其字节码数量很大,在解释执行的场景下执行性能十分受限。另一方面,合约漏洞(不考虑业务逻辑漏洞)引发的安全问题,每年都在发生,所造成的经济损失都十分严重,那么有没有一种方案能让使用者抛开个人因素,尽量写出安全的合约?

为了解决这两个迫切的问题,我们引入了wasm虚拟机FVM,以及Rust合约编写框架。下面本文将详细介绍这两个部分在智能合约领域的应用。

众所周知,solidity语法在更新时出于一些考量并没有做好兼容工作,导致不同版本的语法差异很大,开发人员在不同版本的语法之间来回切换,着实浪费精力。另外,由于区块链区别于传统的互联网技术有着“不可篡改”的特性,一旦产品发布,无法以补丁的形式修复现存在的问题,也无法在原有的基础上进行版本迭代。这就需要合约开发者能一次就写出没有任何问题的合约,否则容易造成巨额的经济损失。然而事情一旦过度依赖于"人",往往会带来量子学的色彩,最好是有另外一套机制来确保合约的正确性。

Numen:公链Aptos的VM虚拟机中存在的一个高危级别安全漏洞:金色财经报道,新加坡安全公司Numen Cyber Technology检测到Aptos公链的VM虚拟机中存在的一个高危级别安全漏洞,攻击者利用此漏洞可以在Aptos虚拟机中执行攻击者精心构造的特定代码,导致控制公链节点或使其瘫痪,Aptos Labs官方已经证实此漏洞的存在,Numen Cyber Labs已协助官方修复该安全漏洞。[2022/10/10 10:29:17]

Rust作为高效、可靠的通用语言毫无疑问是现有的最好解决方案。

Rust语言的可靠性依托于丰富的类型系统和所有权模型,以及强大的编译器,在编译期就能捕获经典错误。这迫使开发者在编写合约过程中,思考自己所写的每行代码是否准确,并通过编译器来确认,保证通过编译器检查的合约代码一定是安全的,极大的提高了合约的安全性以及可靠性。

此外,我们自研的合约框架提供了一个运行时的测试框架,让开发者能模拟合约运行,无需部署就能在链下找到合约中存在的问题。这无疑是给上链的合约增加了一重保险。

基于Polkadot的数据索引解决方案SubQuery集成以太坊虚拟机:金色财经报道,基于Polkadot的数据索引解决方案SubQuery已与Moonriver和Moonbeam合作集成了以太坊虚拟机(EVM)功能。因此,来自类似以太坊的系统的数据现在可以在Polkadot和Kusama的智能合约生态系统中无缝使用。SubQuery允许使用自定义参数过滤和索引数据。新系统适用于各种用例的去中心化应用程序的开发和维护,包括DeFi协议。[2021/10/29 21:06:43]

另外,我们的合约框架利用rust的宏展开技术,将操作放在宏注解里面。这样能让开发者在使用过程中更多的关注自己合约的业务逻辑,从某种程度上保证了合约逻辑安全,毕竟只需要专注一个部分而没有其他因素的干扰,能让开发者更加投入的去打磨逻辑的细节。

EVM在本质上是脚本程序,是基于栈的虚拟机,需要由编译程序翻译成指令后执行,即解释执行,这导致EVM的执行效率非常低。与之相对,wasm使用了编译执行的方式,采用了虚拟机/字节码技术,并定义了紧凑的二进制格式,拥有更高更快的智能合约执行速度。因此我们引入wasm极大的提高了整个合约的运行效率。

OKChain月报:首个桌面版客户端发布 智能合约虚拟机重大突破:据7月7日OKChain官方发布的月报显示,本月OKChain测试网实现了多项突破性技术进展,包括:

1、发布了首个可视化的全节点应用-OpenDEX,该应用当前版本v0.0.1,支持window和mac双系统;

2、OKChain在DeFi领域内比较火热的AMM应用上开始发力:完成了OKChainSWAP通证模型设计;

3、OKChain在衍生品领域内有所进展:OpenDEX币币杠杆的整体开发已完成

4、OKChain智能合约虚拟机有重大突破,并部署了OKChain-wasm单节点测试网络。

在生态建设方面,OKChain测试网参加Cosmos 跨链测试比赛-GOZ,获得第一阶段LIVENESS REWARD WINNERS。当前已有59个团队在OKChain测试网上成功申请为超级节点,包括HelloPool,ipfsforce,chainsguard,BitSong,Ankr,RenrenBit,币快报,Newpool等多个知名机构。此外,第一届黑客松大赛持续进行中,已二十余个团队参赛并完成作品提交。

?[2020/7/8]

WASM(WebAssembly)按照字面意思就是web汇编,是为web浏览器定制的汇编语言。这里虽然说是定制,但随着灵性的发展,它不仅仅只适用于web,其《核心规范》更是与平台无关。既然号称汇编,那它显然具有汇编语言的特点:

Telos发布以太坊虚拟机EVM 可运行与以太坊兼容的智能合约:Telos今日在其测试网上发布了一个以太坊虚拟机(EVM)。它将使开发者能够创建和运行与以太坊兼容的智能合约,而无需支付交易费用。开发者已经被邀请使用以太坊的主要编程语言Solidity来在测试网上运行智能合约,之后在7月份将在mainnet上启动Telos EVM。Telos声称可以支持每秒10000次交易(TPS),而且不收取交易费用。这是以太坊每秒14次交易收费的一个有竞争力的替代品。(Cointelegraph)[2020/6/18]

1)层次低,接近于机器语言,提高运行效率;

2)适合作为目标代码,由其他高级语言(C/C++/Rust/Go等)编译器生成,扩大适用性;

声音 | BM:新的 WABT 虚拟机在相同硬件上将快 2 倍:据 IMEOS 报道,REX 电报群在讨论 CPU 问题暴涨问题时,有成员提到 EOS 差不多相当于 ETH,Blocktwitter 能达到 4K TPS 是因为都是垃圾文本。BM 回应到,新的 WABT 虚拟机在相同硬件上将快 2 倍,衡量性能表现有持续,峰值和爆发。EOS 可以增加可持续率一旦我们修剪掉历史。该功能已经实施一半并具有高优先级,一旦修剪准备就绪,我们可以持续 CPU 提升到每秒 400 ms。一旦编译的 WASM 准备好,转账和投注将会降至 25% CPU 时间或更少。这意味着每次传输 250us 或每秒 1600 次传输。[2018/9/7]

另外模块是wasm程序编译、传输和加载的单位。wasm定义了两种模块格式:

二进制格式:是wasm模块的主要编码格式,文件以.wasm为后缀。由于其格式设计的非常紧凑,可以缩小二进制体积,拥有更快的传输和执行效率。文本格式:文件以.wat为后缀,此处不详细展开。模块的划分使得wasm的组织结构更加清晰,解析更为方便,极大地提升了解析的效率。

那么除了使用Rust来编写合约,以及将合约编译成wasm字节码,真正要将合约运行起来,依然需要为wasm提供一个运行环境,也就是FVM做的事。

从语义上讲,一个wasm模块从二进制格式到最终被执行可以分为3个阶段:解码,验证,执行。解码阶段把二进制模块解码为内存格式;验证阶段对模块进行静态分析,确保模块的结构满足规范要求,且函数的字节码没有不良行为;执行阶段又可以分为实例化和函数调用两个部分。

?FVM组成

显然,FVM完整的功能应当是包含上面提及到的解码、验证、实例化以及函数调用等部分。我们按照整个流程实现了FVM,但是在实际运行中,发现执行过程会消耗大量的性能在内存的读写及分配上。为了进一步提高FVM的执行性能,我们新增了一层编译模块,将wasm的栈式内存转为基于寄存器式内存,对内存进行标记并加以重复利用,避免了频繁的分配内存,极大的提升了整体执行效率。

FVM与平台的账本交互

在rust智能合约中,我们对数据是否上链做了明确的区分,只有标定特定宏注解的字段数据才会上链交互。在合约部署时,对于初始化的字段写入账本;在调用合约方法时,如果使用到合约的持久化字段,合约执行引擎会调用账本读取的方法从账本中获取其数据。对于存在有数据写入操作(即更新)的字段,待合约执行结束后,若账本还未存在此字段则将其写入账本,若此字段已存在,则对相应的账本数据进行更新。

整体流程

整个介绍下来,相信大家对Rust智能合约的使用有了个大概的印象。这里对整个流程做个梳理:

step1:?用户通过Rust合约框架编写智能合约(一定要测试)

step2:编译合约为wasm文件

step3:将wasm合约文件部署到FVM

完成以上步骤你就成功的运行了一个合约?。

目前的合约都只是针对相对简单的业务,在我们的规划中,FVM既能应用在现有的合约场景,又能应用在业务复杂以及对合约执行速度有较高要求的场景。同时给了非区块链行业技术人员一种“零学习成本”的上链方法——使用他们熟悉的编程语言来编写合约。扩大了区块链技术的应用场景以及影响范围,以便探寻更多的区块链技术落地方案。

目前FVM在性能上的表现已经很好的达到了预期,但是我们不会满足于眼前的现状停滞不前。在后续的规划中,我们将继续探寻一些优化方案,比如:

1)?虚拟机缓存的优化;

2)引入AOT(Ahead-of-Time),?即预先编译的方式,替换现有的字节码解释执行,将wasm模块直接编译成go代码,利用go的插件机制直接加载运行,得到极致的性能体验。

技术在不断的推陈出新,优化工作将一直持续下去,“保持先进”是我们的目标。

本文从「安全性」以及「效率的提升」两个角度,引出了对rust智能合约支持的FVM,探讨了rust与wasm在智能合约上为什么会有如此表现,以及我们使用FVM的意义。接下来我们还会对支持区块链上SQL执行的KVSQL进行详细介绍,敬请期待!

作者简介

李凯

趣链科技基础平台部区块链虚拟机研究小组

参考文献

?rust程序设计语言

《WebAssembly原理与核心技术》

标签:ASMWASAINUSTasm币价格最新价格人民币WASABIdurianchainbittrustsystem

以太坊热门资讯
区块链技术持续走热,如何改善版权领域?

链集市?·让区块链落地更简单 《区块链行业观察》专栏·第49?篇作者丨Miriam?Stankovich 图片丨来源于网络 区块链技术以其相对较低的维护成本、更高的透明度、更少的行政负担和抗欺诈能力得到了众多企业和部门的广泛认可和采用.

1900/1/1 0:00:00
MetaMask再提示Airdrop 并依赖于用户行为实施钓鱼

巴比特讯,MetaMask最新发推再次提示有关Airdrop相关的内容。ConsenSys的去中心化Web开发人员DanFinlay声称,该局涉及铸造新的恶意令牌,将其发送到用户帐户,并依靠用户调查这个神秘令牌是什么来钓鱼这些用.

1900/1/1 0:00:00
慢雾:DAO Maker Vesting合约遭黑客攻击,攻击者获利近400万美金

巴比特讯,据慢雾区情报,DAOMaker的Vesting合约遭到黑客攻击。DeRaceToken(DERC),Coinspaid(CPD),CapsuleCoin(CAPS),ShowcaseToken(SHO)都使用了DaoMake.

1900/1/1 0:00:00
数据:CryptoPunks地板价突破100ETH

巴比特讯,9月17日,据larvalabs数据显示,CryptoPunks地板价突破100ETH,现报102ETH,相较于9月14日不足80ETH的地板价有所回升,直接原因和Reddit创始人AlexisOhanian入场有关.

1900/1/1 0:00:00
公地弹性:以Gitcoin为例,探讨去中心化技术社区治理中的“弹性”

介绍: 去中心化技术既是一种组合:一种社会和技术位的构建以形成一个功能性整体,一种组合:一种数据存储、一种历史记录,以及共同创造一个大于其总和的整体.

1900/1/1 0:00:00
德国私人银行Hauck & Aufh?user收购加密托管平台Kapilendo Custodian

据Thepaypers9月20日消息,总部位于德国的私人银行Hauck&Aufh?userPrivatbankiers宣布与Bloxxon就收购加密货币托管机构KapilendoCustodian达成协议.

1900/1/1 0:00:00