EOS开发完全解析(六):手摸手实现第一个EOS智能合约——He
一、概述
EOS智能合约由C++编写,所以真正商业开发的时候,肯定是需要全面学习C++语法的,通过最近爆出的越来越多的合约漏洞我们就知道问题的严重性了。可以毫不客气的说,写智能合约要比写以往任何代码都要更加认真、细致,因为这是直接跟金钱打交道!
我们今天讲的是实现EOS的第一个智能合约,所以重点在于讲解EOS上智能合约的开发流程,而不是内在实现逻辑,因此会用最简单的例子(20行以内搞定),以保证让更多的人理解整个EOS智能合约开发流程。
二、实现
2.1 安装eosio.cdt
由于EOS虚拟机是用WebAssembly实现的,但是EOS智能合约却是由C++编写的,所以我们需要将C++代码转换为WebAssembly虚拟机能执行的代码(wasm),该工具就是用来完成该转换的。
eosio.cdt源码地址:https://github.com/EOSIO/eosio.cdt/
官方推荐了几种安装方式,根据自己的系统环境选择即可,浪哥选择了一种装逼的方式,直接下载源码编译。
$ git clone --recursive https://github.com/eosio/eosio.cdt
$ cd eosio.cdt
$ ./build.sh
$ sudo ./install.sh
2.2 安装Sublime编辑器
编辑器并非必须用Sublime,只要能输入文本即可,浪哥主要是习惯用Sublime了。 Sublime Linux安装。
2.3 代码实现
该代码很简单,简单到浪哥是直接从EOS官网Copy过来的。这段代码实现的功能就是传入一个eos账号,然后打印出来。重点关注一下最后一句代码EOSIO_DISPATCH( hello, (hi))
,这句代码的意思就是发布的智能合约名称叫hello
,被调用的方法叫hi
。
#include <eosiolib/eosio.hpp>
#include <eosiolib/print.hpp>
using namespace eosio;
class hello : public contract {
public:
using contract::contract;
[[eosio::action]]
void hi( name user ) {
require_auth( user );//认证账号,确保调用者是本人
print( "Hello, ", name{user});
}
};
EOSIO_DISPATCH( hello, (hi))
2.4 编译代码
打开合约所在目录,执行如下指令:
eosio-cpp -abigen hello.cpp -o hello.wasm
执行成功后,会生成两个文件,分别以wasm
和api
结尾。
2.5 创建账号
部署合同时,会将其部署到帐户,我们这里创建一个名为hello
的账号。账号创建流程不解释,不明白的童鞋,回头复习一下之前的教程。 EOS开发完全解析(三):EOS账号创建
2.6 部署合约
./cleos set contract hello ~/contracts/hello -p hello@owner
这句代码的意思将hello
这个合约部署到hello
这个账号,授权方式是owner
权限。
温馨提示:授权方式建议用
active
即可,这里由于浪哥导入钱包的时候用的是owner
的私钥,所以只能用owner
部署。
2.7 执行合约
./cleos push action hello hi '[eosio]' -p eosio@active
这句代码的意思是调用hello
合约的hi
方法,参数为eosio
,授权账号为eosio
。
我们可以看到两边的控制台都打印了Hello, eosio
。
温馨提示:控制台默认不会打印输出内容,我们需要修改
config.ini
文件,该文件目录在~/.local/share/eosio/nodeos/config
,将contracts-console = true
。
至此我们就完成了一个完整的EOS智能合约开发流程,就是这么自信!
三、总结
有木有发现一个现象,我们目前对EOS的所有操作,都是基于命令行的,但是现有的Dapp几乎都是网站操作,那么他们又是怎么实现的呢?没错,这就是我们下一讲的重磅内容——JS调用EOS智能合约。
EOS开发系列教材推荐
EOS开发完全解析(一):Ubuntu上搭建EOS开发环境
EOS开发完全解析(二):用cleos命令行创建、导入、解锁钱包
EOS开发完全解析(三):EOS账号创建
EOS开发完全解析(四):EOS快速发币,何以圈钱?唯有发币!
EOS开发完全解析(五):EOS系统资源解析,转账免费且防DDOS攻击的精妙设计
获取最新、最全的EOS开发教程请关注微信公众号:区块链浪潮之巅——一个集项目分析与区块链技术开发于一体的公众号。