[关闭]
@hitchhacker 2018-08-01T09:55:28.000000Z 字数 1371 阅读 1406

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

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 - 应用二进制接口)。整个过程如图所示:
trans.png-96.6kB
之所以有点复杂,是因为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 详细注释版

  1. #include <eosiolib/eosio.hpp>
  2. //通用eos库,写智能合约都要先把这个加载上,
  3. //里面集合了types,action,print,math,multi_index,dispatcher,contract……
  4. #include <eosiolib/print.hpp>
  5. using namespace eosio;
  6. //命名空间eosio
  7. class hello : public eosio::contract {
  8. //此处定义了hello类,派生自eosio的contract部分
  9. public:
  10. using contract::contract;
  11. /// @abi action
  12. void hi( account_name user ) {
  13. require_auth( user );
  14. print( "Hello, ", name{user} );
  15. }
  16. //hi函数:输入用户名,经过该用户授权,在控制台打印hello,[用户名]
  17. };
  18. EOSIO_ABI( hello, (hi) )
  19. //'EOSIO_ABI'是一个生成智能合约初始化函数的批处理工具,生成的函数是智能合约的入口,采用Switch case的方式调用具体Action对应的函数
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注