开发合约并部署到测试网【麒麟】

作者:michael@比特天梯

先决条件

  • 安装cleos客户端
  • 安装eosio-cpp合约编译器

详见 《EOS开发客户端安装》

麒麟测试网相关信息

  1. 官网
https://www.cryptokylin.io/
  1. 代码
https://github.com/cryptokylin/CryptoKylin-Testnet
  1. RPC入口
https://api.kylin.alohaeos.com
https://api-kylin.eoslaomao.com

chainID: 5fff1dae8dc8e2fc4d5b23b2c7665c97f9e9d8edf2b6485a86ba311c25639191
  1. 浏览器
http://tools.cryptokylin.io
https://kylin.bloks.io/
https://kylin.eosq.app/
  1. 在线钱包
https://kylin.bloks.io/wallet
https://eostoolkit.io/

开发合约

编辑以下代码并保持为hello.cpp

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

using namespace eosio;

class hello : public contract {
  public:
      using contract::contract;

      [[eosio::action]]
      void hi( name user ) {
         eosio::print( "Hello, ", name{user});
      }
};
EOSIO_DISPATCH( hello, (hi));

注意:不同版本的编译器对合约的语法有些不太一样(后续讲解合约语法的时候详解)

编译合约

到合约存放目录,执行以下命令进行合约编译

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

执行后,检查目录下是否生成.wasm和.abi文件;打开.abi文件如下:

{
    "____comment": "This file was generated with eosio-abigen. DO NOT EDIT Sat Nov 24 15:42:53 2018",
    "version": "eosio::abi/1.0",
    "structs": [
        {
            "name": "hi",
            "base": "",
            "fields": [
                {
                    "name": "user",
                    "type": "name"
                }
            ]
        }
    ],
    "types": [],
    "actions": [
        {
            "name": "hi",
            "type": "hi",
            "ricardian_contract": ""
        }
    ],
    "tables": [],
    "ricardian_clauses": [],
    "abi_extensions": []
}

注意:有的时候ABI文件生成可能会有问题,可以考虑手写该文件(后续章节详细讲解abi文件内容)

部署准备

  1. 创建钱包
$ cleos --url https://api.kylin.alohaeos.com wallet create --to-console

Creating wallet: default
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5Oj2NUsuj1t1CrqfVEoFyRoCDvZMJKuBckE5Nb1vodcITCTfjKc"
  1. 创建Account
    将ACCOUNT_NAME替换成你想创建的账户名称
$ curl http://faucet.cryptokylin.io/create_account\?ACCOUNT_NAME

创建成功会获得以下输出

{"msg": "succeeded", "keys": {"active_key": {"public": "EOS5DogFUDGtR9fmGDzZh2t6VDB8P1LJjts1sOjoN2Ej76zkYA73Z", "private": "5KDzFxeKT9F3R1ZDGRH9vabbvHvD3JoAW2YtGh5FmRW3WEeC6qi"}, "owner_key": {"public": "EOS6eXvZV6Hw4efXoEpNmj1HbQNdCfdbxLmDqborfsviajSr6c1yy", "private": "5CMrjVN5BPdqLAhv8oZRKWQgcAa1kNpvHjXRdf6HtXJbdeZAHRc"}}, "account": "ACCOUNT_NAME"}
  • ACCOUNT_NAME必须是小写字母数字组成的12位字符;
  • 创建成功的输出结果一定要记录,后续导入钱包的时候需要owner_key和active_key
  1. 将账户的private key导入钱包
$ cleos --url https://api.kylin.alohaeos.com wallet import --private-key 5KDzFxeKT9F3R1ZDGRH9vabbvHvD3JoAW2YtGh5FmRW3WEeC6qi
$ cleos --url https://api.kylin.alohaeos.com wallet import --private-key 5CMrjVN5BPdqLAhv8oZRKWQgcAa1kNpvHjXRdf6HtXJbdeZAHRc
  1. 查看账户信息
$ cleos --url https://api.kylin.alohaeos.com get account ACCOUNT_NAME

created: 2018-11-24T08:19:54.000
permissions: 
     owner     1:    1 EOS6eXvZV6Hw4efXoEpNmj1HbQNdCfdbxLmDqborfsviajSr6c1yy
        active     1:    1 EOS5DogFUDGtR9fmGDzZh2t6VDB8P1LJjts1sOjoN2Ej76zkYA73Z
memory: 
     quota:     9.322 KiB    used:     2.926 KiB  

net bandwidth: 
     delegated:       1.0000 EOS           (total staked delegated to account from others)
     used:                 0 bytes
     available:        715.5 KiB  
     limit:            715.5 KiB  

cpu bandwidth:
     delegated:       1.0000 EOS           (total staked delegated to account from others)
     used:                 0 us   
     available:        134.7 ms   
     limit:            134.7 ms   

这个时候该账户的余额为0,所以输出信息中不包含EOS balances信息。并且初始拥有资源也很少,不足以支撑合约部署和执行。需要进行EOS账户充值并购买RAM资源

  1. 账户充值
$ curl http://faucet.cryptokylin.io/get_token?ACCOUNT_NAME

{"msg": "succeeded"}

每次充值100eos,每天最多获得1000个

  1. 购买RAM
    账户操作需要scatter钱包支撑,所以需要首先安装钱包并关联账户信息。
  • 安装scatter钱包桌面客户端
https://get-scatter.com/
  • 配置钱包
  • 打开scatter桌面应用程序;
  • 输入密码并创建钱包(一定要记住该密码和生成的助记词),如果该钱包真实使用,为了安全应该讲这两个信息手抄保存;
  • 打开设置-网络,输入钱包密码;添加测试网络信息如下:
名称:EOS TestNet - Kylin
主机名:api-kylin.eoslaomao.com
协议:https
端口:443
ChainId:5fff1dae8dc8e2fc4d5b23b2c7665c97f9e9d8edf2b6485a86ba311c25639191

保持后返回到主页
  • 点击Vault,创建两个Vault分别叫active和owner,将测试网中创建的账号active和owner的私钥导入;
  • 导入成功后,将可以看到“1 linked accounts”字样
  • 购买RAM
  • 点击Owner Vault下关联的账户,可以看到改账户拥有的资源信息;
  • 点击Manage RAM,进入后可以进行RAM的购买和卖出;
  • 买4096KB的RAM;

部署合约

$ cleos --url https://api.kylin.alohaeos.com set contract ACCOUNT_NAME hello

Reading WASM from hello/hello.wasm...
Publishing contract...
executed transaction: a282dab0f5c4f189871c0fa34eaa0b64acac25cd055ed2c9135ed9bea03d2836  1440 bytes  294 us
#         eosio <= eosio::setcode               {"account":"eosmimi12345","vmtype":0,"vmversion":0,"code":"0061736d0100000001390b60027f7e006000017f6...
#         eosio <= eosio::setabi                {"account":"eosmimi12345","abi":"0e656f73696f3a3a6162692f312e30000102686900010475736572046e616d65010...
warning: transaction executed locally, but may not be confirmed by the network yet         ] 

要在contract的根目录执行该命令,否则会提示找不到合约文件;另外,执行完前面步骤后,钱包状况可能已经是被锁了需要解锁一下;

执行合约

$ cleos --url https://api.kylin.alohaeos.com push action ACCOUNT_NAME hi '["bob"]' -p ACCOUNT_NAME

executed transaction: 8494b680ed90e088b8dfa4b8dc6c152cd0ac942c91ff721fea04216918ddf4bc  104 bytes  199 us
#  eosmimi12345 <= eosmimi12345::hi             {"user":"bob"}
warning: transaction executed locally, but may not be confirmed by the network yet         ] 

如果要在终端现实print的结果,需要在配置文件config.ini中,将contracts-console 设为 true,即:

contracts-console = true
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值