EOS 用 C++ 開發智能合約爲什麼要編譯成 WebAssembly?

許多人正試圖學習如何在EOS上開發智能合約。可是,這些智能合約是由C++編寫的,並編譯成WebAssembly,這對大多數非c++程序員來講彷佛很奇怪。所以,在深刻了解EOS以前,最好先學習一些關於WebAssembly的基本知識。html

什麼是WebAssembly

我不想從官方網站上覆制這個定義。你能夠本身看一下。在這裏,你能夠將其視爲能夠在Web瀏覽器中加載和運行的文件。它相似於Javascript,但它比JS更快,更簡單,更安全。python

如何編寫Webassembly

這裏是一個工做流程:c++

基本上有四個步驟,我將經過一個很是簡單的例子來講明。git

1.編寫C/C++代碼

如下代碼用於計算數字的平方根。程序員

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

2.將C/C++代碼編譯成wasm(Webassembly的格式)

編譯代碼有不少種方法。爲了簡化這個過程,我找到了一種很是簡單的方法github

將代碼複製到該網站並單擊build(構建)按鈕,你能夠找到編譯的文件,以下所示。web

而後將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的開發。

這裏是原文

相關文章
相關標籤/搜索