比特帝国

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

比特帝国 首页 EOS EOS教程 EOS高级教程 查看内容

「Hello,Gakki」背后的知识 | 大狗教你EOS开发(七)

2018-6-28 10:24| 发布者: IMEOS| 查看: 206| 评论: 0|原作者: IMEOS

本期是 IMEOS EOS教程的第 7 期,主要分析 第 4 期 「Hello,Gakki」智能合约背后的重要概念:李嘉图合约与 WebAssembly ,并给出 hello.cpp 的一个详细注释版,以让大家更好的理解智能合约。

1 啥是李嘉图合约?

只要是智能合约,都会匹配一份「李嘉图合约( Ricardian Contract )」。李嘉图合约相当于一份法律文件,规定着与智能合约发出的每个动作( Action )相关的被法律约束的行为( Behavior )。「 Hello,Gakki 」智能合约对应的李嘉图合约请查看以下链接:

https://pan.baidu.com/s/1JEgOABGUKwLT35Fl7NcPFw

李嘉图合约是EOS的重要组成部分。不仅每份智能合约能匹配一份李嘉图合约,而且 EOS 的宪法也被规范为李嘉图合约,具体内容可参阅官网。

2 啥是 WebAssembly ?

在编写「 Hello,Gakki 」智能合约的时候,我们经将cpp编译出wast(Web Assembly 文本文件),然后又编译出 ABI( Application Binary Interface —— 应用二进制接口)。整个过程如图所示:

注:本图来自 EOSAsia

之所以有点复杂,是因为 EOS 用到了 WebAssembly 技术。

这个 WebAssembly 是什么?

作为硬核程序员,BM 使用 C++ 作为智能合约开发语言。但是,操作智能合约总不能通过命令行来进行,需要有一种方式让用户通过网页来操作智能合约,所以 WebAssembly 就登场了。

简而言之,WebAssembly 是这样一个东西,他让我们能通过 Nodejs 来操作智能合约。

WebAssembly 有什么样的优势呢?

一言以蔽之:

Javascript 是一个叫 Brendan Eich 的家伙用10天时间做出来的,因此……Javascript 存在一些天坑,而其中最大的坑是——!随着 Web App 越来越复杂,这个慢渐渐变得不可忍受了。然后,各种解决方案被提出,最新的一种就是这个 Webassembly 了—— C++ 代码编译为 wast 文件,然后 Nodejs 能直接执行 wast,从而速度变得嗖嗖的快,乃至Web App 也有望达到原生 App 的性能!

从这一点来看,EOS 的确有着追求效率的基因。

3 hello.cpp 详细注释版

//注释内容的版权属于 IMEOS 


#include <eosiolib/eosio.hpp>

//通用eos库,写智能合约都要先把这个加载上

//里面集合了types, action, print, math, multi_index, dispatcher, contract这几个hpp


#include <eosiolib/print.hpp>


using namespace eosio;

//命名空间eosio


class hello : public eosio::contract {

//此处定义了hello类,派生自eosio的contract部分

  public:

    using contract::contract;


      /// @abi action 

    void hi( account_name user ) {

      require_auth( user );

      print( "Hello, ", name{user} );

    }

    //hi函数:输入用户名,经过该用户授权,在控制台打印hello,[用户名]


};


EOSIO_ABI( hello, ( hi ) )

//'EOSIO_ABI'是一个生成智能合约初始化函数的批处理工具,生成的函数是智能合约的入口,采用Switch case的方式调用具体Action对应的函数

4 总结与预告

在 第 5 期 和 第 6 期 「插播」了 Docker 下的 EOS 配置及使用方案后,我们回归了主线,继续来讲智能合约。但是,到目前为止,智能合约还都是通过 cleos 工具来运行的,还不能说我们构建了一个区块链应用

在下一期,我们会打通 Javascript 和智能合约,实现一个功能最简但完整的「区块链应用」。

下期见!

要进小密圈请扫下方二维码:

= END =


长按识别下方二维码

即可关注IMEOS.ONE公众号


比特帝国区块链交易所

最新评论

返回顶部