比特帝国

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

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

「Hello,Gakki」— 编写第一份智能合约 | 大狗教你EOS开发(四)

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

上上期 中,我们运行了默认合约,体验了一下快速发币的感觉,然后在 上一期 中学习了 EOS 开发中的 5 个最基础的知识点。本期我们会更进一步,编写自己的第一个智能合约「HelloGakki」。

注:

1. 测试环境为 macOS Sierra 10.12.6  / Dawn 3.0;

2. 本期智能合约案例来自 EOS 官方文档。


别急,首先让我们来学习两个「进阶操作」——

1 区块链系统的启动方式升级

在上一个实例中,我们通过一长串命令直接启动 nodeos 区块链操作系统:

./nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugin eosio::chain_api_plugin --plugin eosio::account_history_api_plugin

这个操作现在可以升级了——先配置 config.ini ,然后直接运行 nodeos 启动,这样做的好处是配置方面更加的个性化,就像安装软件时的「经典安装」与「自定义安装」的区别。

这个过程很简单,只需要以下四步:

(1)先要通过上面那一长串命令运行一遍

因为只有在第一遍运行之后,在 /Users/ [用户名] /Library/Application Support 下才会生成eosio这个文件夹。

(2)修改 config.ini 文件

通过这个地址 https://pan.baidu.com/s/1PevnqrYaHxMXRsozduWHWA 将 ini 配置文件下载下来,覆盖掉/Users/ [用户名] /Library/Application Support/eosio/nodeos/config这个位置的 config.ini 文件。

然后在config里搜索 [你的用户名] 这几个字,把它替换成你当前用户的用户名。

(3)修改配置文件

如果硬盘不满足32G剩余空间的同学,可能运行时会报错,这时候我们修改config.ini中的 shared-file-size 参数,令其等于你想要的大小就可以。例如,我们剩余空间只有8G,把这个参数值改为8*1024=8192以下就可运行。

shared-file-size = 8192

(4)运行 nodeos

现在想要运行 nodeos 操作系统,只要进入 nodeos 目录,使用 nodeos 命令就可以了:

cd /Users/[用户名]/eos/programs/nodeos
nodeos

要中断系统的话只要按下 Ctrl + C 就行。

2 学会钱包加锁 / 解锁操作

如果你运行过两次区块链网络会发现这样的情况,第二次运行的时候系统告诉你钱包已经存在:

但是你用./cleos wallet list命令查看钱包列表,会看到钱包列表是空的。这是EOS 的 Bug 吗?不是的,EOS的安全机制导致区块链重新启动后钱包是锁定状态(Locked),这时使用以下代码解锁既能使用。

./cleos wallet unlock -n default

然后输入创建钱包时生成的那串密钥,即能解锁钱包。

这时候再用 list 命令就可以看到 default 钱包出现了!

3 智能合约的编写与编译

好了,现在我们可以来编写和创建第一个自己的智能合约「HelloGakki」了——这个合约相当于传统编程中的「Hello,World」。

(1)准备好代码编辑器

首先,编写智能合约我们推荐使用 Visual Studio 代码编辑器,以下是它的下载地址:

https://www.visualstudio.com/zh-hans/downloads/

我们只要下载 Visual Studio Community 也就是免费的社区版即可。

下载完成后,我们通过安装C++扩展以获得编辑器对C++的支持。


(2)编写智能合约

然后新建一个文档,将以下内容复制粘贴进去。

#include <eosiolib/eosio.hpp>
#include <eosiolib/print.hpp>
using namespace eosio;

class hello : public eosio::contract {
  public:
      using contract::contract;

      /// @abi action 
    void hi( account_name user ) {
      require_auth( user );
      print( "Hello, ", name{user} );
    }
};

EOSIO_ABI( hello, (hi) )

然后进入 /Users/liaohua/eos/build/contracts 目录,新建一个叫做 hello 的文件夹。

然后把这个文件命名为 hello.cpp 保存在 hello 文件夹下。

(3)编译智能合约

再次用到 iTerm 非常好用的分屏功能,点击 Split Pane Horizontally 将屏幕分成三个部分。

左侧加载我们的 nodeos 区块链操作系统,右上的屏幕加载智能合约,右下的屏幕运行 cleos 。如果对于 nodeos 和 cleos 这两个不清楚,还请回顾 上一期 的内容:)。

首先用 cd 命令访问我们cpp文件所在的目录:

/Users/liaohua/eos/build/contracts/hello

然后先通过以下命令编译出 wast 文件:

eosiocpp -o hello.wast hello.cpp

会有 warning ,不过如果没有 error 我们就不用去理它。

然后再通过以下命令编译出 abi 文件:

eosiocpp -g hello.abi hello.cpp

这时,我们再访问 hello 文件夹,就会看见文件夹下有三个文件,这就说明智能合约编译好了!

4 智能合约的加载与运行

接下来,我们只要加载与执行智能合约,就能和新垣结衣打招呼啦!

(1)重置

首先我们可能要清空一下 /Users/[用户名]/Library/Application Support/eosio/nodeos/data 文件夹中的内容,因为大家可能没有将上次的钱包密钥和账户密钥保留下来。

然后我们在iTerm左侧窗口进入/Users/[用户名]/eos/programs/nodeos文件夹,用 1 中的方法执行 nodeos ,此时区块重新从 0 算起了。

在iTerm的右下窗口,我们进入/Users/[用户名]/eos/build/programs/cleos文件夹,按照 第二期 中的方法创建钱包,加载 bios 合约。

./cleos wallet create
./cleos set contract eosio ../../contracts/eosio.bios -p eosio

这次我们可以把我们操作中用到的所有密钥都保存下来,这样下次我们就不用删文件然后重来啦。

(2)创建账户

然后我们创建两个账户,一个叫做 gakki,一个叫做 gakkifans。

./cleos create key
./cleos wallet import [ 生成的私钥 ]
./cleos create account eosio gakki [ 生成的公钥 ] [ 生成的公钥 ]
./cleos create account eosio gakkifans [ 生成的公钥 ] [ 生成的公钥 ]

(3)加载合约

执行如下命令,让 gakkifans 账户加载 HelloGakki 合约。

./cleos set contract gakkifans ../../contracts/hello

如果成功,返回如下图所示:


(4)执行合约

执行如下命令,gakkifans 账户执行 HelloGakki 合约。

cleos push action gakkifans hi '["gakki"]' -p gakki

如果出现如上返回,即表示控制台输出了「 Hello, gakki」,我们就成功向新垣结衣打了招呼 。同时我们看屏幕左侧的区块链操作系统,也输出了相关内容。

到这里,我们的第一个自己的智能合约案例就走完了!

5 总结与预告

今天我们升级了启动 nodeos 的方式,学会了钱包的加锁解锁操作。此外还往前跨了一大步——编写了自己的智能合约。
但是,还是那句老话,操作要和理论相结合。编译、执行智能合约时到底发生了什么事呢?大狗下期告诉你。

想要更好地学习 EOS 开发,请扫下方二维码进小密圈:


= END =


长按识别下方二维码

即可关注IMEOS.ONE公众号


比特帝国区块链交易所

最新评论

返回顶部