)

前言

EOS做为一个新发行的货币, 目前在代币市场的热度也是比较高, 你想从事EOS代币,智能合约开发, 你首先得具备以下知识点,

  1. 必需得懂一门编译语言 ,这是你开发的基础, 逻辑思维很重要;
  2. 有一定的前端开发经验, 本教程会涉及EOS前端开发
  3. 有web开发经验, 最好会一门后端开发语言, 目前不能完全去中心化;
  4. 最好会Linux, Mac也可以, 目前EOS合约只支持C++编写, 楼主买不起Mac, 所有使用的是Linux ;
  5. 最后你得有耐心;

环境

  1. Linux 内存8G+ 硬盘40GB+ 可以使用虚拟机, 但是要把配置提高,EOSIO安装环境需要使用, 你如果不够, 也有办法解决
  2. Windos 这个不是必需的, 写代码方便而已
  3. NodeJS 后台推荐使用语言, 版本不要低于8.0.0
  4. EOSIO 智能合约编译部署环境, 网上有js4eos方式, 不用安装eosio, 也就是说Linux的配置可以省去

重点声明:

博主已经躺了不知道多少坑,才实现, 由于开发环境升级较快, 楼主也不想重复造轮子, 很多教程将已链接形式提供, 博主稍加点拨,

1,安装虚拟机也好, 双系统也好, 把Linux装了

虚拟机安装: http://www.nocmd.com/740.html
注意下载链接哪里有激活秘钥, 安装之后输入进去就行了, 双系统就不需要安装虚拟机了

Ubuntu 18 https://www.ubuntu.com/download/desktop
版本更新了没有关系, 下载最新版的就行了,

虚拟机安装Ubuntu : https://jingyan.baidu.com/article/ad310e801a04db1849f49e3a.html
老老实实看

2, 安装EOSIO开发环境, 使用js4eos 可以跳过这一步, 直接进入第三步

不要问我怎么进Linux
执行命令安装git: apt install git 或者 yum install git
这里有一个坑, 需要开启root,
输入 sudo passwd
不停的重复输入密码回车,设置你的开启root密码
输入 su 会让你输入密码, 输入你设置的root密码, 就可以安装git了

执行命令下载eosio源码
重要 : git clone -b v1.3.x https://github.com/EOSIO/eos --recursive
不要git最新的eosio, 那个版本没有eosiocpp, 网上很少教程
完成了上面的这步之后,接下来就是编译EOSIO,也是最耗时间的一步,如果在配置比较低的机器上(2核8G云主机,大概需要5个小时左右),在命令行敲入如下指令:
执行 cd eos

中间某些情况下可能会出现编译错误,只要最后没有见到一个用ASCII码显示的EOSIO这几个字母,就是用标点符号拼出来的EOSIO, 就是没有编译成功,导致没有编译成功的问题有很多种,如果有碰到这种情况,请输入:
执行 ./eosio_build.sh
如果./eosio_build.sh 失败了, 卡住不动了, 再次执行就好了, 不会重复加载的

最后一步!
./eosio_install.sh
这一步在一分钟之内会执行完成,然后恭喜你!已经完成了冗长的软件环境的准备工作。

首先我们在contracts目录下从skeleton合约(skeleton的意思就是骨架,可以理解为是一个空的项目)创建一个chatroom目录:
cd contracts
cp skeleton chatroom
cd chatroom
mv skeleton.hpp chatroom.hpp
mv skeleton.cpp chatroom.cpp

接下来我们选择我们平常经常使用的代码IDE来打开chatroom.cpp,进行修改。我们要提供一个接口叫say,目的就是为了区块链上能够记录下哪个用户说的哪句话,所以我们要把hi这个接口改成say,并且增加一个参数content,聊天的内容。我们的思路是用区块链的log来记录所有的聊天信息。改完之后代码如下:

#include <eosiolib/eosio.hpp>

using namespace eosio;

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

       /// @abi action
       void say( account_name user, std::string content) {
          require_auth(user);
           eosio_assert( content.size() <= 256, "chat content need to have less than 256 bytes." );
           eosio_assert( content.size() > 0, "chat content needs to have at least 1 byte." );
        }
 };
 
EOSIO_ABI( chat, (say) )

至于合约怎么写, 可以参考, https://eos.readthedocs.io/zh_CN/latest/ eosio开发中文文档

编辑完之后,我们开始编译,最终要编译出chatroom.wasm和chatroom.abi,这两个文件是最终要传到链上的,其中abi是接口的描述文件,wasm是合约的二进制代码,通过以下命令:
eosiocpp -o chatroom.wasm chatroom.cpp
eosiocpp -g chatroom.wasm chatroom.cpp
不止这几个文件, 请参考这个文章 http://www.blockchainbrother.com/article/2906
把需要编译的文件搞出来, .cpp的内容就不用改了, 主要看他怎么编译的

启动测试链

接下来我们就要在我们自己的链上来测试这段合约的运行情况,第一步我们要做的就是把链给启动起来。
首先修改config.ini文件,首先先敲一次nodeos命令,会报错,没关系,我们要先第一次运行来产生默认的config.ini,默认会生成在如下地方:

  • Mac OS: ~/Library/Application Support/eosio/nodeos/config/config.ini
  • Linux: ~/.local/share/eosio/nodeos/config/config.ini

要进行如下的修改:

filter-on = *
enable-stale-production = true
producer-name = eosio
signature-provider = EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
plugin = eosio::chain_api_plugin
plugin = eosio::history_plugin
plugin = eosio::history_api_plugin
plugin = eosio::chain_plugin
plugin = eosio::bnet_plugin
plugin = eosio::producer_plugin

signature-provider保持公钥和genesis.json里面配置的一样即可,保存好修改

通过如下命令启动:

nodeos --delete-all-blocks
如果开始产块就一切正常,屏幕会不停的刷, 那就是正常, 不要停止, 打开一个新的命令行

部署
如果出现钱包的各种问题, 请先翻译报错, 然后访问 http://eosfans.io/wiki/cleos-command-reference 找到对应的解决方案

第一次运行的话我们需要准备好一个钱包文件,通过cleos wallet create来创建一个默认钱包,记住输出的privatekey秘钥,然后执行:

cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3

来导入刚刚配置在config.ini里面的私钥,这个私钥控制的是eosio账号,我们需要通过这个账号来给我们创建一个部署合约的账号,命令如下:

cleos create account eosio eosio.chat EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV

我们这里用和eosio同样的公钥,这样开发的过程中比较简单,实际在主网上部署的话,要用其他的方法,这个会在接下来的教程中详细介绍。

然后我们把合约部署到刚刚创建的eosio.chat账号下:

cleos set contract eosio.chat contracts/chatroom

不出问题正常的情况下,我们会看到:

Reading WASM from contracts/chatroom/chatroom.wasm...
Skipping set abi because the new abi is the same as the existing abi
Publishing contract...
executed transaction: b3cf96a311ee718d9cc9b934fe010401f6e046faa7eb00feba176dfca62586e8  2752 bytes  486 us
#         eosio <= eosio::setcode               {"account":"eosio.chat","vmtype":0,"vmversion":0,"code":"0061736d01000000013c0c60037f7e7f00600000600...
warning: transaction executed locally, but may not be confirmed by the network yet         ]

这样类似的输出,这样就表示我们的合约已经部署成功了!

调用
在保持钱包打开的情况下,我们通过如下的命令来实验我们刚刚部署到测试网的合约:

cleos push action eosio.chat say ‘{“user”:“eosio.chat”,“content”:“hello world”}’ -p eosio.chat@active
如果你的eosio.chat 密码忘记了, 可以尝试用eosio账户进行部署

如果提示钱包已经锁上,则需要用cleos wallet unlock —password <钱包密码>来解锁再进行上面的调用。

这个时候如果不出问题的话,可以得到如下的类似的输出:

executed transaction: a37e4f797c7349b02faa164cb14ae36baf5cafa746379718e46c3655fa920085  120 bytes  179 us
#    eosio.chat <= eosio.chat::say              {"user":"eosio.chat","content":"hello world"}
warning: transaction executed locally, but may not be confirmed by the network yet         ]

那么我们如何看我们的聊天记录呢?我们通过cleos get actions eosio.chat的返回值类似:

#    2   2018-10-25T10:45:57.500           eosio.chat::say => eosio.chat    c2f372ec... {"user":"eosio.chat","content":"hello world"}

部署到主链就换个网络就好了, 现在是测试网络, 需要配置nodeos生成的config.ini文件

3, js4eos编译, 部署eos合约

还是Linux, 安装Nodejs 参考 https://blog.csdn.net/wangtaoking1/article/details/78005038
js4eos 比较简单, 网上又有很多教程, 这里就直接发地址了 https://blog.csdn.net/ITleaks/article/details/83277378

有一个坑就是,TMD的那个测试网络我一直没测通, 获取不了免费的EOS, 最后合约没有部署, 很烦, 但是js4eos 还是能部署的

前端调用合约, scatter钱包授权

安装scatter 钱包, 下载链接 https://www.chromefor.com/scatter_v6-1-10/
安装到谷歌游览器, 如果安装失败, 请自行百度, 谷歌游览器插件安装失败怎么办!

注册eos账户, 可以让老用户帮你注册, 若不想麻烦就下载一个麦子钱包, 里面可以注册eos账户, 账户选择EOS, 不是EOS原力,
APP下载链接: http://www.mathwallet.org/cn/

scatter 钱包里面有绑定的eos账户, 需要操作他进行授权
这一套是没有框架的, 全是js, 这是一套搭建好的项目, 可以进行登入, 和调用合约
链接:https://pan.baidu.com/s/1-O7W-7dbuzD7e4j0yh3zkA
提取码:24v1

4, 后台调用

使用命令行插件, 使用cleos语法这样是最简便的
Nodejs 插件: require(‘child_process’);
JAVA也有, 自己百度去吧,
直接操作命令行,接收返回,自己解析
有问题发邮箱 1559733088@qq.com
我尽量回复, 目前EOS网上教程还是挺少的, 别喷我
以太坊智能合约代码, 我没有写注释, 能看懂的就看吧…
链接:https://pan.baidu.com/s/1QSvmWCPUBFzx2W4yu_sBWQ
提取码:6b2l

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐