上上期 中,我们运行了默认合约,体验了一下快速发币的感觉,然后在 上一期 中学习了 EOS 开发中的 5 个最基础的知识点。本期我们会更进一步,编写自己的第一个智能合约「HelloGakki」。
注:
1.测试环境为 macOS Sierra 10.12.6 / Dawn 3.0;
2. 本期智能合约案例来自 EOS 官方文档。
别急,首先让我们来学习两个「进阶操作」——
在上一个实例中,我们通过一长串命令直接启动 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 就行。
如果你运行过两次区块链网络会发现这样的情况,第二次运行的时候系统告诉你钱包已经存在:
但是你用./cleos wallet list命令查看钱包列表,会看到钱包列表是空的。这是EOS 的 Bug 吗?不是的,EOS的安全机制导致区块链重新启动后钱包是锁定状态(Locked),这时使用以下代码解锁既能使用。
./cleos wallet unlock -n default
然后输入创建钱包时生成的那串密钥,即能解锁钱包。
这时候再用 list 命令就可以看到 default 钱包出现了!
好了,现在我们可以来编写和创建第一个自己的智能合约「HelloGakki」了——这个合约相当于传统编程中的「Hello,World」。
(1)准备好代码编辑器
首先,编写智能合约我们推荐使用 Visual Studio 代码编辑器,以下是它的下载地址:
我们只要下载 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 文件夹,就会看见文件夹下有三个文件,这就说明智能合约编译好了!
接下来,我们只要加载与执行智能合约,就能和新垣结衣打招呼啦!
(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」,我们就成功向新垣结衣打了招呼 。同时我们看屏幕左侧的区块链操作系统,也输出了相关内容。
到这里,我们的第一个自己的智能合约案例就走完了!
今天我们升级了启动 nodeos 的方式,学会了钱包的加锁解锁操作。此外还往前跨了一大步——编写了自己的智能合约。
但是,还是那句老话,操作要和理论相结合。编译、执行智能合约时到底发生了什么事呢?大狗下期告诉你。
想要更好地学习 EOS 开发,请扫下方二维码进小密圈:
= END =
长按识别下方二维码
即可关注IMEOS.ONE公众号