写点什么

如何部署 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:101915

评论

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

在 7 月 4 日,PoseiSwap 治理通证 $POSE 上线了 BNB Chain 上的头部

鳄鱼视界

5G与妈祖守护的那片海

白洞计划

5G

“多”维演进:智能编码的深度进化

阿里云视频云

云计算 编码 视频编码 视频云

火山引擎DataLeap数据质量解决方案和最佳实践(三):最佳实践

字节跳动数据平台

在 7 月 4 日,PoseiSwap 治理通证 $POSE 上线了 BNB Chain 上的头部

威廉META

软件测试/测试开发丨Selenium的常用元素定位方法

测试人

Python 软件测试 自动化测试 测试开发 selenium

玩转“擎舵”,秒变AIGC时代营销创意“掌舵人”

Geek_2d6073

如何用 TDengine 预测 “未来”

爱倒腾的程序员

涛思数据 tdengine 时序数据库

聆心智能上榜“北京市通用人工智能大模型行业应用典型场景案例”

硬科技星球

研发质量指标大 PK:MTTR vs MTBF,谁是靠谱王?

LigaAI

高可用性 研发效能度量 MTTR 研发效能管理 企业号 7 月 PK 榜

GPU 容器虚拟化新能力发布和全场景实践

Baidu AICLOUD

GPU容器虚拟化

prometheus描点原理

蓝胖子的编程梦

Docker 云原生 Grafana Prometheus #k8s

MatrixOne 0.8.0 开放公测啦!

MatrixOrigin

云原生 超融合 #数据库 MatrixOne

关于Java已死,看看国外开发者怎么说的

越长大越悲伤

Java 后端

HDC开发者盛典 | 破解创业老板高效制果汁奥秘挑战!赢取代金券、按摩枕、收纳袋等礼品~

华为云PaaS服务小智

云计算 软件开发 华为云 华为开发者大会2023

​山东大学高校专区入驻飞桨AI Studio,优质教育资源等你来学!

飞桨PaddlePaddle

人工智能 百度 paddle 百度飞桨

ABAQUS有限元分析软件吃CPU还是GPU比较多?

思茂信息

gpu cpu 显卡 ANAQUS 有限元分析

架构课模块一作业

庚小庚

Spring Loaded代码热更新实践和原理分析 | 京东云技术团队

京东科技开发者

spring 热更新 Loader 企业号 7 月 PK 榜

认知负担的挑战与平台工程的机遇

SEAL安全

DevOps 平台工程 认知负担

图+AI 生成未来|悦数图数据库亮相 2023 世界人工智能大会

悦数图数据库

AI 图数据库 大模型 AIGC

推荐书单:个人成长的一些方法

老张

个人成长 书单

人脸识别技术的精度提高及其应用

来自四九城儿

MySQL的match函数在sp中使用的BUG解析

GreatSQL

数据库 greatsql

语音直播源码知识分享:探索新的沟通方式

山东布谷科技

软件开发 语音 源码搭建 直播源码 语音直播源码

华为云CodeArts IDE Online:让你随时随地畅享云端编码乐趣

华为云PaaS服务小智

云计算 软件开发 华为云 华为开发者大会2023

ElasticSearch - 批量更新bulk死锁问题排查 | 京东云技术团队

京东科技开发者

elasticsearch MQ 企业号 7 月 PK 榜 BulkProcessor

不能不知道的LED显示屏产业机遇

Dylan

机遇 产业 LED显示屏 led显示屏厂家

2023年CCF-百度松果基金课题申报持续进行中,截至7月24日

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 百度飞桨

PoseiSwap 治理通证POSE登录PancakeSwap,开盘涨幅超2100%

西柚子

了解Java可见性的本质

阿里技术

Java java 编程

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