【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

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

评论

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

如何解决系统报错:nf_conntrack: table full, dropping packets

百度搜索:蓝易云

云计算 Linux 运维 服务器 云服务器

提升系统管理:监控和可观察性在DevOps中的作用

禅道项目管理

项目管理 DevOps 系统管理

数字音频处理软件 Steinberg Cubase Artis 10激活版 附完整破解教程

Rose

《深入理解计算机系统(原书第3版)》PDF

程序员李木子

10V单通道负载开关

攻城狮Wayne

【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的保障容量的三大关键方案实现

洛神灬殇

分布式 熔断 限流 降级 2024年第二十七篇文章

Native Instruments Kontakt 7 for Mac v7.8.0激活版下载

影影绰绰一往直前

四方维ECAD模型成为元器件的新标配

财见

创业7年复盘,中美企业服务市场差异浅析

Kyligence

AI 数据分析

使用 HashiCorp Vault 保护 NGINX 中的 SSL 私钥

NGINX开源社区

HashiCorp SSL/TLS nginx 开源版 安全防护 保护 SSL 密钥

foobar2000 for mac(多功能音频播放器)v2.6.2免激活版

影影绰绰一往直前

第38期 | GPTSecurity周报

云起无垠

Linux系统gunzip命令有何作用?如何使用?

百度搜索:蓝易云

云计算 Linux 运维 云服务器 gunzip

Cycling 74 Max for Mac v8.6.0激活版 音乐可视化编程软件

影影绰绰一往直前

Covalent Network:全新链上协议收入体系,财务透明革命引领者

股市老人

File list Export for Mac(文件列表导出工具)v2.9 激活版

影影绰绰一往直前

Amadeus Pro for Mac v2.8.13激活版(多轨音频编辑器)

影影绰绰一往直前

Java 编程指南:入门,语法与学习方法

小万哥

Java 程序人生 编程语言 软件工程 后端开发

XMind 转 Excel 与 CSV 的思路与实现

牧遥

Excel XMind 测试工具 csv Java’

linux的find命令常用说明

百度搜索:蓝易云

云计算 Linux 运维 云服务器 find

Wireshark中的ARP协议包分析

小齐写代码

Syncovery for mac v10.11.3激活版 文件备份和同步工具

影影绰绰一往直前

一文带你简单了解多租户模型定义以及好处

行云管家

SaaS 多租户

稀疏场景高性能训练方案演变|京东广告算法架构体系最佳实践

京东零售技术

人工智能 架构 算法 GPU算力

IPQ9574 and QCN9274 Industrial grade and commercial difference? Performance, transmission, etc

wifi6-yiyi

qcn9274 ipq9574

【年后跳槽必看篇-非广告】Kafka核心知识点-第四章

派大星

kafka Java’

如何对混合日志进行自动化解析

华为云开发者联盟

开发 华为云 华为云开发者联盟

面试官:什么是JIT、逃逸分析、锁消除、栈上分配和标量替换?

王磊

Java 面试

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