NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

如何部署 Ewasm 智能合约?

  • 2020-05-13
  • 本文字数:2187 字

    阅读完需:约 7 分钟

如何部署Ewasm 智能合约?

ETH 2.0 在共识层之外的最大改变就是引入了 Ewasm,以太坊风味的 WebAssembly 虚拟机。以太坊基金会计划分阶段推进 ETH 2.0 的开发工作。在以太坊官方的路线图中,目前以太坊基金会的工作重点是:阶段 0 ,推出信标链,在共识层实现从 PoW 到 PoS 的转变,实现用户 stake ETH 的功能。


ETH 2.0 已在共识层取得了重大进展。Prysmatic Labs 推出首个具有完整的 Eth2.0 阶段 0 主网配置的测试网 Topaz 并成功地验证了该测试网中的第一个区块,距离阶段 0 的成功上线又进了一步。


只不过本次上线的是单客户端测试网,还不能与其他客户端进行交互。Vitalik 发推称,将在未来的数周内推出联合测试网。这是 ETH 2.0 阶段 0 正式上线的前兆。


备受开发者关注的 Ewasm 虚拟机将于 2021 年在阶段 2 上线,届时,开发者方可在以太坊上进行正常的开发工作。


相较于比特币,以太坊最大的创新在于引入了虚拟机 EVM,将普通的转账交易变成了一段代码来执行。EVM 将智能合约带入了区块链世界。以太坊的目标是世界计算机,这也决定了 EVM 是图灵完备的。


随着以太坊的发展壮大, 以太坊社区的诉求发生了改变。EVM 需要解决效率与花费的问题,这与 EVM 的设计初衷是不相符的。因此,以太坊基金会把目光投向了 WebAssembly。


WebAssembly 是更有效率的字节码格式,便携性与安全性兼备,这一点已经被 Web 社区所验证过。毕竟有了 WebAssembly,在浏览器打游戏都会变得异常流畅。


同时,WebAssembly 在前端支持多种语言编写智能合约。对于开发者而言,编写 Ewasm 智能合约的语言选择更加自由。依赖强大的编译器,开发者可以使用 Rust、Go 等新兴语言编写 Ewasm 智能合约。从理论上讲,任何可以编译成 Wasm 的语言都可以用来编写 ETH 2.0 智能合约。


这也是 Subsrate、EOS、以太坊都选择 WebAssembly 作为虚拟机的原因:WebAssembly 被区块链之外的广大世界验证过,并且有着更庞大的社区。


尽管距离以太坊规划的时间还有一段距离,但 Ewasm 的开发工作早已开始。


下面列出了一些 EVM 与 Ewasm 在规范上的不同之处,无意评价 EVM 与 Ewasm 孰优孰劣,方便大家更好的理解 Ewasm 的工作机制。


以太坊智能合约交易在执行时,例如把 Token 转到别的地址,是将 EVM bytecode 读进以太坊的虚拟机执行。 EVM bytecode 有以下几点特色:


  1. 256 位元且堆叠式(staked-based)的虚拟机;

  2. 很多高阶的指令,例如:SSTORE、SLOAD、SHA3、 EC、 Call/Create contract;

  3. 与实体系统架构(通常是 32/64 位)有差异,而 256 位则需要靠模拟来完成;

  4. 较少程序语言(Vyper 与 Solidity);


Webassembly(WASM)是为了让不同程序语言开发的套件都能在浏览器使用的一种二进制程序语言,WASM 有以下几点特色:


  1. 堆叠式(staked-based)的虚拟机:有独立的区域空间(暂存器或是内存),存取堆叠前 3 个物件(EVM 则会存取 16 个);

  2. 支持 32 / 64 位的操作;

  3. 没有高阶的指令;

  4. RISC 指令集也可以对应到 CPU ISA;

  5. 社区比较大:前端支持较多的程序语言(C++, Rust, GO, …)


从以太坊原本的开发者来看,Ewasm 的上线对智能合约开发工作的影响并不大。从 solidity 合约到能被 Ewasm 执行的字节码,这其中主要是编译器在发挥作用。换句话说,开发者可以像之前一样进行智能合约开发工作,这是对开发者友好的处理方式。


更重要的是,正如上文所提到的那样,Ewasm 上线后,以太坊社区有可能进一步扩大。比如,非区块链开发者可以用 Rust 编写智能合约,这为整个以太坊社区带来了新的可能性。


经过一段时间的开发,现在以太坊的 Ewasm 已经支持了 EVM 的大部分功能,并且发布了 Ewasm 测试链,供开发者使用。


但由于 Ewasm test 已经关闭了,开发者需要通过社区贡献的开源软件来测试开发 Ewasm 合约,比如 SOLL 编译器SSVM-evmc 虚拟机。


SSVM-evmc 已经通过了 stWASM 的所有测试用例,达到了以太坊基金会的要求。



以最常见的 ERC 20 合约为例,我们来看下如何在以太坊 Ewasm 虚拟机上编写、部署 Ewasm 合约。


在开始之前,请确保已经启动运行 Second State DevChain。如果没有,请点击这里查看如何安装 Second State DevChain,这个过程大约需要 10 分钟。

编译 ERC20 合约到 Ewasm 字节码

下面是一个非常常见的 ERC 20 合约代码。




使用SOLL 编译器将上面的 ERC 20 合约编译成 ewasm 字节码(SOLL 可以将 solidity 与 YUL 源码编译成 Ewasm 字节码)。


使用​xxd​工具将已编译的 ewasm 字节码转换为文本。


部署 Ewasm 合约

现在,让 ewasm 代码使用​0x​作为前缀,然后将其从默认 coinbase 地址部署到区块链。Coinbase 的默认密码是​1234​。




请注意,​sendTransaction​的返回值是交易哈希。我们可以使用哈希来查找新创建的合约地址。



接下来,在上述地址上创建一个合约实例。我们需要合约 ABI(基于 Solidity 源代码)才能正常工作。然后,我们可以查询这个 ERC20 合约中的帐户余额。合约创建者的地址可以查看到 token 的所有初始供应量,而其他人的地址则为零。

转账 ERC20 token

最后,我们调用 ​transfer​ ,在不同的账户之间转账 ERC20 Token。




就这样,我们已经实现了在一个真实的区块链上部署并执行了 Ewasm 智能合约。


欢迎来到 ETH 2.0 的世界!


SOLL 编译器与 SSVM-evmc 由 Second State 开发。


参考资源:


  1. https://medium.com/wasm/diving-into-ethereums-virtual-machine-evm-the-future-of-ewasm-722239bf5b18

  2. https://drive.google.com/file/d/1ufvspealOGje6GPp-yJnCeO73bch1wRe/edit


2020-05-13 17:101816

评论

发布
暂无评论
发现更多内容

微博和B站屏蔽马保国相关信息:自媒体蹭热度要适可而止

石头IT视角

阿里云在应用扩缩容下遇到的挑战与选型思考

阿里巴巴云原生

阿里云 Kubernetes 容器 云原生

1. 揭秘Spring类型转换 - 框架设计的基石

YourBatman

Spring Framework 类型转换 Converter

架构师训练营第一期-第十周课后作业

卖猪肉的大叔

极客大学架构师训练营

Jenkins使用ansible时出现!unreachable错误

Griffenliu

区块链系统面临哪些风险以及有哪些防范措施

CECBC

区块链

金融科技带来套利?专家认为监管应关注平台垄断、权力滥用等问题

CECBC

金融科技

写在日更之前,持续书写,见证文字的力量

boshi

随笔 随笔杂谈

阿里内部“高并发通关秘籍”曝光,看完带给你独一无二的认知!

比伯

Java 编程 架构 面试 计算机

架构师训练营 - 第 10 周课后作业(1 期)

Pudding

架构训练营 - 第10周课后作业 - 学习总结

Pudding

小白也能看懂!教你如何快速搭建实用的爬虫管理平台

华为云开发者联盟

Python Docker jenkins

划重点!DWS开发的五大要点

华为云开发者联盟

数据库 sql DWS

40 张图带你搞懂 TCP 和 UDP

编程 程序员 大前端 后端 网络

完了!这57道面试题(美团、BAT、携程),我咋一个都不会?

比伯

Java 程序员 架构 面试 计算机

盘点c++几种常见的设计模式及具体实现

linux大本营

c++ Linux 后台开发

软件架构指南

码语者

软件架构

京东11.11大促背后,那些系统架构经历了些什么?

京东科技开发者

数据库 云计算 云服务

京东成立探索研究院,打造产业数智化首个源头性科技高地; AI 论文:让机器像人类一样感知三维真实世界

京东科技开发者

人工智能 云计算

一个神奇的bug:OOM?优雅终止线程?系统内存占用较高?

华为云开发者联盟

sql jdk OOM

架构师训练营 - 第 11 周课后作业(1 期)

Pudding

基于区块链的区域股权市场创新试点

CECBC

区块链

根治可扩展、高可用、高性能“神器”:SpringCloud+Nginx高并发编程手册

Java架构追梦

Java nginx 架构 面试 微服务

shell脚本的使用该熟练起来了,你说呢?(篇二)

良知犹存

Shell

优秀商业可视化大屏(BI)设计演示

Marilyn

UI 商业智能

【经验分享】打破CMDB认知误区,掌握建设关键!

嘉为蓝鲸

运维 运维自动化 数据可视化 CMDB 配置信息

消防物联网,为逆行英雄守住第一道生命线

华为云开发者联盟

物联网 控制 消防

LeetCode题解:455. 分发饼干,贪心for循环,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

架构师训练营第一期-第十周学习总结

卖猪肉的大叔

极客大学架构师训练营

anyRTC 11月SDK更新

anyRTC开发者

flutter uni-app WebRTC RTC sdk

阿里技术专家熬夜一个月肛出内部“微服务学习笔记”,太完美了

小Q

Java 学习 编程 面试 微服务

如何部署Ewasm 智能合约?_区块链_Second State_InfoQ精选文章