EOS智能合约编译部署
跟随大家学习编程语言一样,每次都会首先写一段代码,打印“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智能合约编译部署相关推荐
- js4eos支持EOS智能合约编译和部署了,再也不用编译EOS了
EOS最近DAPP不断增多,活跃度也不错,但是EOS一直有一个心病,那就是操作门槛高,这也是EOS参与者账号少的核心原因.EOS门槛高主要体现在三个方面. 1)新账号创建机制异常复杂 必须有一个已经存 ...
- Beosin成都链安发布在线EOS-IDE免费版本 EOS智能合约在线编辑、编译、运行调试、部署一步到位...
Beosin EOS-IDE产品链接: https://beosin.com/EOS-IDE/index.html#/ (推荐Chrome浏览器) 每一个区块链开发的程序员都需要一个界面友好,操作方便 ...
- EOS智能合约开发(四)EOS智能合约部署及调试(附编程示例)
EOS的智能合约里面有一个action(动作)和transaction(交易)的概念. 对于我们开发以太坊开发者来说,基本上只有transaction的概念.如果我只要执行一种操作,而且是只读操作,就 ...
- c++ eos智能合约开发_EOS智能合约开发为何编译成WebAssembly?
许多人正试图学习如何在EOS上开发智能合约.但是,这些智能合约是由C++编写的,并编译成WebAssembly,这对大多数非c++程序员来说似乎很奇怪.因此,在深入了解EOS之前,最好先学习一些关于W ...
- 原 EOS智能合约开发入门
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. EOS智能合约的开发需要使用llvm和abigen来生成abi文件. 为此eos提供了一个 名为eosiocpp的工具. ...
- c++ eos智能合约开发_十分钟教你开发EOS智能合约
EOS环境搭建和启动节点 下面从EOS入门的环境搭建.编译运行一个智能合约.发送一些Aigsen,给大家做一些展示,希望能让非技术人员也有一些收获. 首先下载EOS环境搭建和启动节点.这一步其实还是比 ...
- 十分钟教你开发EOS智能合约
十分钟教你开发EOS智能合约 在CSDN.柏链道捷(PDJ Education).HelloEOS.中关村区块链产业联盟主办的「EOS入门及最新技术解读」专场沙龙上,柏链道捷(PDJ Educatio ...
- 如何安装EOS智能合约开发工具包CDT
本文简单的介绍一下如何安装EOS智能合约开发工具包(Contract Development Toolkit),简称CDT,是与智能合约编制相关的工具集合.对于EOSIO初学者来说,可以通过使用CDT ...
- EOS智能合约开发与交互
EOS智能合约的开发.编译.部署与交互. ## 运行示例代码 ### 1.启动节点服务 在1#终端启动nodeos,建议先清除历史数据: ``` ~$ rm -rf ~/.local/share/eo ...
最新文章
- C++ 接口 函数导出_Python玩转Excel:实现函数自动填充、数据排序
- 开源 java CMS - FreeCMS2.6 模型管理
- 函数 —— strtok() 例如:Fred male 25,John male 62,Anna female 16两层循环
- 3889=神奇的函数
- 74HC595驱动程序
- 使用 jquery 创建数组
- 四大科技巨头跟随者众 智能家居市场容量可观
- Hyper-v Server动态内存
- linux修改resolv自动清除,centos 6.2的/etc/resolv.conf自动清空问题
- 设计模式 (七) 适配器模式
- QQ游戏基本通信机制(QQ游戏外挂编写)
- 微信公众平台被动回复用户消息开发全步骤
- python项目-Python 的练手项目有哪些值得推荐?
- App(iOS Android)开发时简单的用户反馈实现
- 安卓Activity的生命周期函数详解
- 关于sap的Logon的几个参数
- DHT11温湿度传感器(基于树莓派)
- 怎么压缩过大的GIF图片?三步缩小动态图片
- IoT技术概览(postscapes)
- Pycharm配置编译器