跟随大家学习编程语言一样,每次都会首先写一段代码,打印“hello,wrold”。通过对EOS的学习,今天将编译一个简单的hello智能合约部署到EOS私有链上。

1.EOS智能合约简介
之前学习过ETH,下面我将两者的智能合约进行简单的对比。

ETH EOS
编程语言 solidity 语言开发,类似js语言 C++
编译工具 solc eosio-cpp
部署方式 hello=(web3.eth.contract([…])).new({…}) cleos set contract hello DIR/hello -p hello@active
调用方法 hello.hi.sendTransaction(…) cleos push action hello hi ‘[“bob”]’ -p bob@active
费用 部署合约以及交易均收取手续费 部署和交易均无费用,但是需要账户抵押eos来获取内存,网络和cpu
账户 部署后生成一个合约账户,合约不可更改 无合约账户概念,每个用户只能部署一个合约,合约可更新

2.编译环境的搭建
EOS智能合约通过eosio-cpp编译工具编译生成WASM字节码和对应的ABI。具体命令如下:

eosio-cpp -o hello.wasm hello.cpp --abigen

由于之前在ubuntu16.04上编译EOS的源码失败,未能在 build/tools 目录下生成eosio-cpp 编译工具,需要自己单独去搭建。选择在ubuntu16.04上安装合约工具eosio.cdt,官方安装说明:https://developers.eos.io/eosio-cpp/docs/introduction-to-smart-contracts。具体安装过程如下:

1.下载eosio.cdt源码git clone --recursive https://github.com/eosio/eosio.cdt2.搭建环境cd eosio.cdt/./build.sh EOSbulid完成后如下:___           ___           ___                       ___/  /\         /  /\         /  /\        ___          /  /\/  /:/_       /  /::\       /  /:/_      /  /\        /  /::\/  /:/ /\     /  /:/\:\     /  /:/ /\    /  /:/       /  /:/\:\/  /:/ /:/_   /  /:/  \:\   /  /:/ /::\  /__/::\      /  /:/  \:\/__/:/ /:/ /\ /__/:/ \__\:\ /__/:/ /:/\:\ \__\/\:\__  /__/:/ \__\:\\  \:\/:/ /:/ \  \:\ /  /:/ \  \:\/:/~/:/    \  \:\/\ \  \:\ /  /:/\  \::/ /:/   \  \:\  /:/   \  \::/ /:/      \__\::/  \  \:\  /:/\  \:\/:/     \  \:\/:/     \__\/ /:/       /__/:/    \  \:\/:/\  \::/       \  \::/        /__/:/        \__\/      \  \::/\__\/         \__\/         \__\/                     \__\/For more information:EOSIO website: https://eos.io3.安装sudo ./install.sh执行完成后系统中存在 eosio-cpp 编译工具

源码下载编译实在太慢,整个过程耗时3h。建议大家直接下载安装包进行安装,执行过程如下:

1.下载安装包wget https://github.com/eosio/eosio.cdt/releases/download/v1.6.0/eosio.cdt_1.6.0-1_amd64.deb2.本地安装sudo apt install ./eosio.cdt_1.6.0-1_amd64.deb

除了eosio.cdt合约编译工具,目前比较流行的还有eosstudio.io集成编译器,需要在ubuntu上安装下载Docker。官网下载路径:https://www.eosstudio.io/ 感兴趣的同学可以自己去搭建。

3.合约编译
示例合约代码如下:

示例hello.hpp文件代码:
#include <eosiolib/eosio.hpp>
#include <eosiolib/print.hpp>using namespace eosio;CONTRACT hello : public contract {public:using contract::contract;hello(eosio::name receiver, eosio::name code, datastream<const char*> ds):contract(receiver, code, ds) {}ACTION hi(name user);private:TABLE tableStruct {name key;std::string name;};typedef eosio::multi_index<"table"_n, tableStruct> table;
};EOSIO_DISPATCH(hello, (hi))示例hello.cpp代码:
#include <hello.hpp>ACTION hello::hi(name user) {require_auth(user);print("Hello, ", name{user});
}官方的示例代码:https://developers.eos.io/eosio-home/docs/your-first-contract

EOS智能合约的编译指令如下:

eosio-cpp -o hello.wasm hello.cpp --abigen

编译过程中出现如下错误:
查询从eosio. cdt 1.3版本之后都会存在上述问题,下面给出解决办法:

依次执行下述命令
sudo add-apt-repository ppa:ubuntu-toolchain-r/testsudo apt-get updatesudo apt-get install gcc-4.9sudo apt-get upgrade libstdc++6 --fix-missingsudo apt-get dist-upgrade

执行上述命令耗时20min左右,完成后再次编译合约代码。

4.合约
4.1创建用户
首先创建一个部署合约的用户cnt.hello,如下:

1.生成密钥对cleos create key --to-console返回:Private key: 5Jm9Mcx8UFECqUGFGKta6aMM49oPZKPEFvwEHsLNtXeUVruwLPbPublic key: EOS7dukGKoaDX8g5Fpv7btRvD27Kj5m85du4XuquPHjFtHwQ1JFqz
2.导入钱包cleos wallet import -n eosio.wallet --private-key 5Jm9Mcx8UFECqUGFGKta6aMM49oPZKPEFvwEHsLNtXeUVruwLPb
3.创建用户cleos system newaccount --stake-net "1.0000 EOS" --stake-cpu "1.0000 EOS" --buy-ram-kbytes 8  eosio chenhao1 cnt.hello EOS7dukGKoaDX8g5Fpv7btRvD27Kj5m85du4XuquPHjFtHwQ1JFqz EOS7dukGKoaDX8g5Fpv7btRvD27Kj5m85du4XuquPHjFtHwQ1JFqz

4.2部署合约
命令:

cleos set contract cnt.hello ./hello -p cnt.hello@active

成功如下图:

4.3合约调用
命令:

cleos push action cnt.hello hi '["chenhao1"]' -p chenhao1@active

成功如下图:

EOS智能合约编译部署相关推荐

  1. js4eos支持EOS智能合约编译和部署了,再也不用编译EOS了

    EOS最近DAPP不断增多,活跃度也不错,但是EOS一直有一个心病,那就是操作门槛高,这也是EOS参与者账号少的核心原因.EOS门槛高主要体现在三个方面. 1)新账号创建机制异常复杂 必须有一个已经存 ...

  2. Beosin成都链安发布在线EOS-IDE免费版本 EOS智能合约在线编辑、编译、运行调试、部署一步到位...

    Beosin EOS-IDE产品链接: https://beosin.com/EOS-IDE/index.html#/ (推荐Chrome浏览器) 每一个区块链开发的程序员都需要一个界面友好,操作方便 ...

  3. EOS智能合约开发(四)EOS智能合约部署及调试(附编程示例)

    EOS的智能合约里面有一个action(动作)和transaction(交易)的概念. 对于我们开发以太坊开发者来说,基本上只有transaction的概念.如果我只要执行一种操作,而且是只读操作,就 ...

  4. c++ eos智能合约开发_EOS智能合约开发为何编译成WebAssembly?

    许多人正试图学习如何在EOS上开发智能合约.但是,这些智能合约是由C++编写的,并编译成WebAssembly,这对大多数非c++程序员来说似乎很奇怪.因此,在深入了解EOS之前,最好先学习一些关于W ...

  5. 原 EOS智能合约开发入门

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. EOS智能合约的开发需要使用llvm和abigen来生成abi文件. 为此eos提供了一个 名为eosiocpp的工具. ...

  6. c++ eos智能合约开发_十分钟教你开发EOS智能合约

    EOS环境搭建和启动节点 下面从EOS入门的环境搭建.编译运行一个智能合约.发送一些Aigsen,给大家做一些展示,希望能让非技术人员也有一些收获. 首先下载EOS环境搭建和启动节点.这一步其实还是比 ...

  7. 十分钟教你开发EOS智能合约

    十分钟教你开发EOS智能合约 在CSDN.柏链道捷(PDJ Education).HelloEOS.中关村区块链产业联盟主办的「EOS入门及最新技术解读」专场沙龙上,柏链道捷(PDJ Educatio ...

  8. 如何安装EOS智能合约开发工具包CDT

    本文简单的介绍一下如何安装EOS智能合约开发工具包(Contract Development Toolkit),简称CDT,是与智能合约编制相关的工具集合.对于EOSIO初学者来说,可以通过使用CDT ...

  9. EOS智能合约开发与交互

    EOS智能合约的开发.编译.部署与交互. ## 运行示例代码 ### 1.启动节点服务 在1#终端启动nodeos,建议先清除历史数据: ``` ~$ rm -rf ~/.local/share/eo ...

最新文章

  1. C++ 接口 函数导出_Python玩转Excel:实现函数自动填充、数据排序
  2. 开源 java CMS - FreeCMS2.6 模型管理
  3. 函数 —— strtok() 例如:Fred male 25,John male 62,Anna female 16两层循环
  4. 3889=神奇的函数
  5. 74HC595驱动程序
  6. 使用 jquery 创建数组
  7. 四大科技巨头跟随者众 智能家居市场容量可观
  8. Hyper-v Server动态内存
  9. linux修改resolv自动清除,centos 6.2的/etc/resolv.conf自动清空问题
  10. 设计模式 (七) 适配器模式
  11. QQ游戏基本通信机制(QQ游戏外挂编写)
  12. 微信公众平台被动回复用户消息开发全步骤
  13. python项目-Python 的练手项目有哪些值得推荐?
  14. App(iOS Android)开发时简单的用户反馈实现
  15. 安卓Activity的生命周期函数详解
  16. 关于sap的Logon的几个参数
  17. DHT11温湿度传感器(基于树莓派)
  18. 怎么压缩过大的GIF图片?三步缩小动态图片
  19. IoT技术概览(postscapes)
  20. Pycharm配置编译器

热门文章

  1. redis集群搭建参考文档
  2. UBTC信息大全:你想要的都在这里!
  3. 【重大更新】DevExpress v17.2新版亮点—WPF篇(三)
  4. 破解框星期天写作窝metasploit
  5. Linux安装JMeter进行压力测试
  6. Qt Quick 渲染机制
  7. react引入渲染markdown文件
  8. 软件工程与计算II-6-需求分析方法
  9. ECS的简单入门(六):传统GameObject模式转换到ECS模式
  10. #Android项目#XUI框架的使用