EOS 用 C++ 开发智能合约为何要编译成 WebAssembly?


声明:本文转载自https://my.oschina.net/u/2275217/blog/2054380,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

许多人正试图学习如何在EOS上开发智能合约。但是,这些智能合约是由C++编写的,并编译成WebAssembly,这对大多数非c++程序员来说似乎很奇怪。因此,在深入了解EOS之前,最好先学习一些关于WebAssembly的基本知识。

什么是WebAssembly

我不想从官方网站上复制这个定义。你可以自己看一下。在这里,你可以将其视为可以在Web浏览器中加载和运行的文件。它类似于Javascript,但它比JS更快,更简单,更安全。

如何编写Webassembly

这里是一个工作流程:

基本上有四个步骤,我将通过一个非常简单的例子来说明。

1.编写C/C++代码

以下代码用于计算数字的平方根。

#include <math.h>
float getSqrt (float num) {
  return sqrt(num);
}

2.将C/C++代码编译成wasm(Webassembly的格式)

编译代码有很多种方法。为了简化这个过程,我找到了一种非常简单的方法

将代码复制到该网站并单击build(构建)按钮,你可以找到编译的文件,如下所示。

然后将program.wasm文件下载到本地文件夹。

3.使用JavaScript将wasm加载到浏览器中

使用以下代码创建test.html,将其放在与program.wasm相同的文件目录中。

<!doctype html>
  <title>WASM Test</title>
  <script>
    fetch('./program.wasm')
    .then(res => {
      if (res.ok)
        return res.arrayBuffer();
      throw new Error(`Unable to fetch WASM.`);
    })
    .then(bytes => {
      return WebAssembly.compile(bytes);
    })
    .then(module => {
      return WebAssembly.instantiate(module);
    })
    .then(instance => {
      window.wasmSqrt = instance.exports.getSqrt;
    });
  </script>

4.在Web浏览器中运行该方法

要解决网站跨域问题,我们需要在该文件夹中运行本地Web服务器。使用Linux或Mac时,让我们执行一下这个命令:

python -m SimpleHTTPServer

然后打开我们的Chrome浏览器,转到此页面:http://localhost:8000/test.html。在控制台中,尝试以下方法:

完成

通过本教程,你就可以熟悉WebAssemply,但是对于高级研究,请查看@dan撰写的eos-example-exchange-contract-and-benefits-of-c

分享一个交互式的在线编程实战,EOS智能合约与DApp开发入门

EOS教程

本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。

这里是原文

本文发表于2018年09月19日 20:23
(c)注:本文转载自https://my.oschina.net/u/2275217/blog/2054380,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 2305 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1