EOS 智能合约部署一(游戏编写入门)2018.10

96
cowkeys
2018.10.27 09:42 字数 324

前言

如果有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合约来跑完流程,接着做一个抽牌的游戏)

  1. 先创建一个账号用来部署合约 使用eosio 来创建一个名为cont.hello 的账户, 以及两个测试用户bob, alice
$ cleos create account eosio cont.hello EOS8TaHGPEGnWifY4aM23u9PytJXBMh8KNqDd9SCkT1yt7fDLm3wB
# 若创建失败,可能是因为钱包未解锁 需使用解锁命令
$ cleos create account eosio bob EOS8TaHGPEGnWifY4aM23u9PytJXBMh8KNqDd9SCkT1yt7fDLm3wB 
$ cleos create account eosio alice EOS8TaHGPEGnWifY4aM23u9PytJXBMh8KNqDd9SCkT1yt7fDLm3wB
  1. 新建项目创建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))
  1. 编译
$ eosio-cpp -o hello.wasm hello.cpp --abigen

编译之后目录下会生成两个文件 hello.wasm 以及 hello.abi 关于部署合约的详情可参考(合约部署set)

  1. 部署
# 使用绝对路径
$ cleos set contract cont.hello /Users/dapp/eos/eosproject/hello -p cont.hello@active

如无意外 合约已经部署上链了。

  1. 命令调用
$ cleos push action cont.hello hi '["bob"]' -p bob@active

正常操作下会显示返回值 >> Hello, bob

blockchain
Web note ad 1