EOS quick start

来源:happeace 作者:happeace 2018-08-24 07:47:59

目的

使用 EOS docker 镜像快速运行,熟悉基本操作, 代币发行和交易。e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

这里跑的只是一个EOS单节点,没有和EOS测试网络或主网链接,有兴趣的可以自行了解。e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

前提

安装docker: 从 https://download.docker.com/mac/stable/Docker.dmg 下载后安装后,双击运行。e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

在Mac menu bar上找到docker运行图标依次找到 Preferences -> Daemon -> Registry mirrors 填入:e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

https://registry.docker-cn.com , 这样让docker从国内镜像仓库拉取会快一些。
e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

coekr-registry

e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

EOS 概览

运行EOS前,先了解下会涉及到的EOS组成部分:e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  • nodeos (node eos = nodeos) EOS 节点,是EOS核心组件,以守护进程的形式运行,区块的生成、操作链的API都由它负责
  • keosd (key eos = keosd) 负责和钱包交互,用于存储私钥
  • cleos (cli eos = cleos) 和EOS区块链交互、管理钱包的命令行工具
  • wallet 存储用户的私钥

关系如图所示e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么


overview

运行docker

拉取docker镜像e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

docker pull eosio/eos-dev

运行:e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

docker run --rm --name eosio -d -p 8888:8888 -p 9876:9876 -p 8900:8900 -v /tmp/work:/work -v /tmp/eosio/data:/mnt/dev/data -v /tmp/eosio/config:/mnt/dev/config eosio/eos-dev  /bin/bash -c "nodeos -e -p eosio --plugin eosio::producer_plugin --plugin eosio::history_plugin --filter-on=* --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --plugin eosio::http_plugin -d /mnt/dev/data --config-dir /mnt/dev/config --http-server-address=0.0.0.0:8888 --access-control-allow-origin=* --contracts-console --http-validate-host=false"

检验是否运行e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

docker ps | grep eosio

输出类似:e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

feac5002187e eosio/eos-dev "/bin/bash -c 'nodeo…" 8 hours ago Up 8 hours 0.0.0.0:8888->8888/tcp, 0.0.0.0:9876->9876/tcp eosioe97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

或直接访问接口:http://localhost:8888/v1/chain/get_info 能得到区块链信息表示正常运行e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

docker 镜像名称 可以换为 eosio/eos ,镜像只有两三百MB,eosio/eos-dev镜像有3个多GB。e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

eosio/eos 运行起来后docker内部会少一些软件,如 curle97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

~ docker images
REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
eosio/eos-dev                              latest              10052b957b65        6 days ago          3.11GB
eosio/eos                                  latest              01b0e8c06b2d        6 days ago          250MB

cleos 命令行工具

cleos 命令行工具可以和EOS区块链交互,可以用于管理钱包wallet。e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

由于cleos 现在是跑在docker中的,设置cleos命令,以便无需进入到docker中,方便直接在外面执行cleose97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

alias cleos='docker exec -it eosio /opt/eosio/bin/cleos -u http://localhost:8888'

可以将以上命令放到 ~/.bashrc 文件中 (使用zsh的放到 ~/.zshrc),方便在每次启动命令行工具时自动执行。比如执行:e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

echo "alias cleos='docker exec -it eosio /opt/eosio/bin/cleos -u http://localhost:8888'" >> ~/.bashrc

source ~/.bashrc

执行 cleos --help 能正常显示帮助信息,表明已成功。e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

cleos基本操作

  • cleos get info
    获取区块链信息e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  • docker exec -ti eosio bash
    进入docker内部,方便操作后面的命令,目前不进入docker内部有时操作钱包会有问题e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  • cleos wallet create --to-console
    创建钱包,会输出钱包的密码,妥善保存,以后有用e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  • cleos wallet unlock
    输入创建钱包时得到的密码就可以打开钱包。钱包创建完成后默认是打开的,不需要unlock,但过一段时间(默认900秒) 后需要unlocke97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  • cleos wallet list
    可以查看钱包和其状态。如以下结果,表面有个叫default的钱包,后面 * 表明钱包已 unlocke97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

    Wallets:
    [
      "default *"
    ]
    
  • cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
    导入默认账户 eosio 的私钥到钱包,方便后续以此账户操作,比如创建其他账户e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  • cleos create key --to-console
    创建一对公钥私钥 ,公钥 Public key 可以用于创建用户,私钥导入钱包后可以以用户的身份操作区块链。秘钥要成对使用。假设创建了秘钥对:
    Private key: 5JzX1ryWqP4NRijRhzVJSBbUwd8pzHbj4Kmy5ZXBAvXN7aHperM
    Public key: EOS7jpAz4sKTZnCMY1XbVHN2Zcdb2SzWnmuzmFm4MRAnBivyUzhece97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  • cleos create account eosio usera EOS7jpAz4sKTZnCMY1XbVHN2Zcdb2SzWnmuzmFm4MRAnBivyUzhec
    创建一个账户,usera 可以替换为你想要的用户名,EOS7jpAz4sKTZnCMY1XbVHN2Zcdb2SzWnmuzmFm4MRAnBivyUzhec 可以使用你生成的其他公钥e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  • cleos wallet import --private-key 5JzX1ryWqP4NRijRhzVJSBbUwd8pzHbj4Kmy5ZXBAvXN7aHperM
    导入账户私钥到钱包。 5JzX1ryWqP4NRijRhzVJSBbUwd8pzHbj4Kmy5ZXBAvXN7aHperM 可以替换为你生成的其他私钥e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

合约和交易

启用合约eosio.token ,以此合约发行代币,并做一笔交易。e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

首先,需要创建一个账户eosio.token 来使用合约eosio.token发行代币e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  • cleos create key --to-console
    创建一对秘钥,假设如下:
    Private key: 5KD8V6MuBhu21gxTknqiqwCvoQ18Qvuz9PYgh4vEt3DdcDkcf3Q
    Public key: EOS637Cf9ZYB6xTgKVzafFTWNmhWWswqTJc4x35y1YPhsyK8hRBNVe97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  • cleos create account eosio eosio.token EOS637Cf9ZYB6xTgKVzafFTWNmhWWswqTJc4x35y1YPhsyK8hRBNV
    使用公钥创建账户 eosio.tokene97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  • cleos wallet import --private-key 5KD8V6MuBhu21gxTknqiqwCvoQ18Qvuz9PYgh4vEt3DdcDkcf3Q
    导入eosio.token账户的私钥到钱包e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  • cleos set contract eosio contracts/eosio.bios -p eosio
    给账户eosio设置合约 eosio.biose97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  • cleos set contract eosio.token contracts/eosio.token -p eosio.token
    给账户eosio.token设置合约 eosio.tokene97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  • 创建代币e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

    cleos push action eosio.token create \
      '{"issuer":"eosio", "maximum_supply":"1000000000.0000 SYS"}' \
      -p eosio.token
    
  • 发放代币e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

    cleos push action eosio.token issue \
      '[ "eosio", "1000000000.0000 SYS", "memo"  ]' \
      -p eosio
    
  • cleos transfer eosio usera '25 SYS' 'transfer remark'
    给用户usera 转账 25 个代币,附带的消息是 “transfer remark”e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  • cleos get currency balance eosio.token usera
    可以查看该账户余额e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  • cleos get account usera
    查看账户信息,也能看到余额e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  • 也可以用这种方式实现两个账户间转账:e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

    cleos push action eosio.token transfer \
      '[ "eosio", “usera", "5.0000 SYS", "message"  ]' \
      -p eosio
    
  • 交易命令执行成功后会紧接着输出 transaction id, 可使用 transaction id 查看交易的详细信息 :e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

    cleos get transaction 14575b582bdbf65c03a4122293b114059b70ad66d5ba8c14aca0e9db7ed9e97b
    

这篇 quick start 还比较浅,可以去 官网 查看EOS介绍。e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

包括以上的EOS概览、quick start、cleos操作账户和钱包,以及 EOS RPC API (即http接口)等等。e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

关于钱包 EOS RPC API:e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

目前在官网上看到在调用 RPC API 交易时,需要使用到钱包的API 如 /v1/wallet/sign_transaction, 但始终没找到钱包 RPC API 的说明。e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

关于钱包守护进程kesod:e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

调用 钱包命令(cleos wallet xxxxxx)时,docker 内部会自动启动管理钱包的进程 keosd,其启动的方式是:/opt/eosio/bin/keosd --http-server-address=127.0.0.1:8900e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

--http-server-address=127.0.0.1:8900 表明该进程的http服务只监听 docker 内部的http请求 (钱包安全性的原因?), 开发时需要外部访问钱包 http RPC 接口的, 可以docker exec -ti eosio bash进入到docker内这样启动:e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

nohup /opt/eosio/bin/keosd --http-server-address=0.0.0.0:8900 --http-validate-host=false --unlock-timeout=99999999 > keosd.log 2>&1 &

监听所有 IP 来的 http 请求, 且给钱包超时锁定设置了比较长的时间,这样不用频繁去unlock钱包。e97BCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

公众号关注 bcfanscom 或搜索“区块链粉丝”,参与大咖直播和糖果空投活动

BCfans公众号