EOS 智能合约部署一(游戏编写入门)2018.10
2018-10-27 本文已影响60人
cowkeys
前言
如果有eth合约经验,很容易理解eos合约的开发。区别如下:
item | ETH | EOS | 注意 |
---|---|---|---|
部署 | 一个账户部署无限个合约,只要有eth | 一个账户只能部署一个合约,没有合约地址,所有接口均直接指向该账户 | |
语言 | solidity 语言开发,类似js语言 | C++ | |
费用 | 部署合约以及交易均收取手续费 手续费= gasprice*gaslimit | 部署和交易均无费用,但是需要账户抵押eos来获取内存,网络和cpu | |
web调用 | metamask | scatter | 现在很多钱包有对dapp的支持 |
前序步骤
至少先熟悉 以下几个步骤:搭建测试网络,钱包创建、钱包锁定和解锁、转账等操作
常用命令
cmd | meaning |
---|---|
$ cleos wallet create --to-console | 创建钱包 |
$ cleos wallet open | 打开钱包 |
$ cleos wallet unlock | 解锁钱包 |
$ cleos wallet list | 查看钱包列表 |
$ cleos create key --to-console | 生成一组公私钥 |
$ cleos create account [creator] [name] [OwnerKey] [ActiveKey] | 创建账号 |
$ cleos wallet keys | 查看钱包导入的key 公钥 |
$ |
开始编写合约 (先用一个helloworld合约来跑完流程,接着做一个抽牌的游戏)
- 先创建一个账号用来部署合约 使用eosio 来创建一个名为cont.hello 的账户, 以及两个测试用户bob, alice
$ cleos create account eosio cont.hello EOS8TaHGPEGnWifY4aM23u9PytJXBMh8KNqDd9SCkT1yt7fDLm3wB
# 若创建失败,可能是因为钱包未解锁 需使用解锁命令
$ cleos create account eosio bob EOS8TaHGPEGnWifY4aM23u9PytJXBMh8KNqDd9SCkT1yt7fDLm3wB
$ cleos create account eosio alice EOS8TaHGPEGnWifY4aM23u9PytJXBMh8KNqDd9SCkT1yt7fDLm3wB
- 新建项目创建helloworld合约代码 cpp
在 https://github.com/EOSIO/eos 项目下面 有一个contracts/eosiolib 目录,此目录是合约编写的必要库,需要放到项目路径下来进行调试编写。可见(官网示例) 学习基本语法介绍
我的目录所处位置/Users/dapp/eos/eosproject/hello 最终的 helloworld 代码如下:
#include <eosiolib/eosio.hpp>
#include <eosiolib/print.hpp>
using namespace eosio;
class hello : public contract {
public:
using contract::contract;
[[eosio::action]]
void hi( account_name user ) {
print( "Hello, ", name{user} );
}
[[eosio::action]]
void hi2( account_name user ) {
require_auth( user );
print( "Hello, ", name{user} );
}
};
EOSIO_ABI( hello, (hi))
- 编译
$ eosio-cpp -o hello.wasm hello.cpp --abigen
编译之后目录下会生成两个文件 hello.wasm 以及 hello.abi 关于部署合约的详情可参考(合约部署set)
- 部署
# 使用绝对路径
$ cleos set contract cont.hello /Users/dapp/eos/eosproject/hello -p cont.hello@active
如无意外 合约已经部署上链了。
- 命令调用
$ cleos push action cont.hello hi '["bob"]' -p bob@active
正常操作下会显示返回值 >> Hello, bob