新手教程 EOSIO3.0 hello world 从 0 到 1

lome · 2018年04月03日 · 最后由 dnbstarz 回复于 2018年08月22日 · 15779 次阅读

EOSIO3.0 hello world 从0到1

1.智能合约文件的编写

#include <eosiolib/eosio.hpp>
#include <eosiolib/print.hpp>

//用eosio命名空间
using namespace eosio;

//所有的智能合约都继承自contract类
class hello : public eosio::contract {

  public:
      using contract::contract;

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

};
EOSIO_ABI( hello, (hi) )

2.合约文件的生成

很多人运行eosiocpp的时候提示:

not found ~/eos/build/bin/eosio-abigen

下面是生成文件的正确方法:

把programs/eosio-abigen文件夹下编译过得eosio-abigen文件放在~/eos/build/bin/文件夹下.

.wast生成:

eosiocpp -o hello.wast hello.cpp

生成.wast文件.

'.abi'生成:

eosiocpp -g hello.abi hello.cpp

生成.abi文件.文件内容如下:

{
  "____comment": "This file was generated by eosio-abigen. DO NOT EDIT - 2018-04-02T13:49:42",
  "types": [],
  "structs": [{
      "name": "hi",
      "base": "",
      "fields": [{
          "name": "user",
          "type": "account_name"
        }
      ]
    }
  ],
  "actions": [{
      "name": "hi",
      "type": "hi"
    }
  ],
  "tables": []
}

3.部署合约

lome@lome:~/eos/build/tools$ cleos set contract lome hello -p lome
Reading WAST...
Assembling WASM...
Publishing contract...
executed transaction: 245c6ef78373689de9036a4a0a1b3740f9ac15e059245c79d2e0a8807ba74907  1668 bytes  10000 cycles
#         eosio <= eosio::setcode               {"account":"lome","vmtype":0,"vmversion":0,"code":"0061736d01000000018b011460027f7e0060057e7e7e7e7f0...
#         eosio <= eosio::setabi                {"account":"lome","abi":{"types":[],"structs":[{"name":"hi","base":"","fields":[{"name":"user","type...

4.执行合约

lome@lome:~/eos/build/tools$ cleos push action lome hi '{"user": "lome"}' -p lome2
executed transaction: 6807d42b37660347a4f33704f1c8082be8517634c3c21ea76550b31c44465e73  244 bytes  1000 cycles
#          lome <= lome::hi                     {"user":"lome"}
>> Hello, lome

完成了~!!!!!

共收到 68 条回复

这个错误如何对应呢大神
./eosiocpp -g ./helloworld/helloworld.abi ./helloworld/helloworld.hpp
/home/eos/eos/build/tools/helloworld/helloworld.hpp:5:10: fatal error: 'eosiolib/eosio.hpp' file not found
#include
^~~~~~~~~~~~~~~~~~~~
1 error generated.

li 回复
lome@lome:~/eos/build/tools$ eosiocpp -g hello/hello.abi hello/hello.hpp
Generated hello/hello.abi ...

我这里是可以的,不要在tools文件下用./eosiocpp,直接用:

eosiocpp -g hello/hello.abi hello/hello.hpp

不用./eosiocpp不行啊,难道我的环境有问题?
eos@eos-virtual-machine:~/eos/build/tools$ eosiocpp -g ../contracts/helloworld/helloworld.abi ./contracts/helloworld/helloworld.hpp
eosiocpp: command not found

li 回复

环境变量没有设置好还是咋地?

我的环境变量是这样的
echo $PATH
/home/eos/bin:/home/eos/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

sudo make install

sudo make install发生下面的错误

Makefile:1322: recipe for target 'cmake_check_build_system' failed
make: *** [cmake_check_build_system] Error 1

li 回复

在build文件下,执行一下

helloworld.abi可以生成了,但是里面的内容确是这样的呢?

{
"____comment": "This file was generated by eosio-abigen. DO NOT EDIT - 2018-04-12T15:03:21",
"types": [],
"structs": [],
"actions": [],
"tables": [],
"clauses": []
}

请问,我是用docker装的EOS,怎么使用EOS的相关指令呢?比如eosiocpp

li 回复

这个是正确的,是因为hello.hpp里面什么内容都没有。

BlackBear 回复

抱歉,我没有用docker装过。都是电脑上直接构建,这样开发起来方便。

BlackBear 回复

关于docker你可以@strahe

BlackBear 回复

@BlackBear 你试试 docker exec 容器id eosiocpp

lome 回复

OK了,谢谢各位大师的指导!!社区真棒!

lome 回复

我也想直接装,但是每次装的时候都会报错譬如boost库找不到之类的,但是我是安装了boost的

wsxh 回复

谢谢你的回复,我按照您的说法,是能够运行eosiocpp的,但是出现了这个错误,麻烦您帮忙看看

BlackBear 回复

路径问题吧!

啊,玩这个编程要很好才能玩啊

很好啊!!!


麻烦问下这个是c++环境问题吗?

liu 回复

hello里面为什么会导入这些库?

lome 回复

搞定了,sudo make install 就可以了。。。这个库应该是各种基础文件都引用的库,我看好多文件里都有

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册