【EOS开发学习笔记】程序和工具(一)cleos之get用法

先啰嗦几句:本人区块链小白一枚,正在自学EOS应用开发(当然目前也没有培训班培训),我的这个系列文章是我的学习笔记,因此,鉴于水平有限,难免有许多错误之处,还希望各位读者海涵,若能留言勘误,更是感激不尽。同时也欢迎热爱EOS开发的朋友加我微信(微信号:361757),暗号EOS,我已经创建了一个交流群,发布本文时(2018年4月11日),群人数已经达到99人。好了,系好安全带,我们的EOS应用开发之旅,马上开始!

本系列文章共分4篇,学习的内容为EOS.IO Programs & Tools

本文为第一部分,除了简单介绍nodeos/keosd/launcher/snapshot外,重点探索cleos的各个用法中的第一部分,get的用法。

在学习本文前,您需要先部署好EOS.IO运行环境,测试一下智能合约,然后再开始学习。

001 nodeos

nodeos是EOS.IO的核心守护进程,可以使用插件配置以运行节点。用途是块的生产,专用API端点和本地开发。当我们在部署了EOS.IO的服务器上运行nodeos时,nodeos会开始不断的生产区块,目前为0.5s/个。

在linux系统下,nodeos的配置文档位于root用户主目录下的隐藏文件夹.local内,具体路径如下:

cd ~./local/share/eosio/nodeos/config

这个文件夹下,有一个名为config.ini的文件,里边是对nodeos的一些配置文档。

002 keosd

keosd是一个钱包驻留守护程序,例如http接口和RPC API。

该程序位于 /home/username/eos/build/programs。

003 launcher

launcher简化了多个节点在局域网或更广泛的网络中的分布。它可以通过CLI进行配置以组成每个节点的配置文件,在对等主机之间安全地分发这些文件,然后启动多个nodeos实例。

在单节点的情况下,应该是不需要启动的。

004 snapshot

快照程序引用自EOSIO/genesis存储库子模块,其中包含用于从众包协议生成快找的nodejs应用程序,用于配置生成块或其他生成相关工具的Web GUI。

005 cleos

上面的程序基本都是一些基础进程,cleos才是这篇文章的重头戏,因为它可以做的事情太多了。现在跟随我一起,来探索一下吧!

cleos是一个命令行工具,它需要启动nodeos才可以使用。要想使用它,你需要知道节点的IP和端口号,并且这个节点还必须配置加载了eosio::chain_api_plugin。通过直接运行cleos,可以查看其支持的各种命令和简介。

程序位于:/home/username/eos/build/programs

这里有一个小技巧,就是如果你想了解某个子命令的帮助信息,只要不带参数的运行它就好了。

先看一下基本的命令有哪些:

$ cleos

ERROR: RequiredError: Subcommand required

Command Line Interface to EOSIO Client

Usage: ./cleos

[OPTIONS] SUBCOMMANDOptions: 

-h,--help                   Print this help message and exit 

-H,--host TEXT=localhost    the host where nodeos is running 

-p,--port UINT=8888         the port where nodeos is running 

--wallet-host TEXT=localhost                              the host where keosd is running 

--wallet-port UINT=8888     the port where keosd is running 

-v,--verbose                output verbose messages on error

Subcommands: 

version                     Retrieve version information 

create                      Create various items, on and off the blockchain 

get                         Retrieve various items and information from the blockchain 

set                         Set or update blockchain state 

transfer                    Transfer EOS from account to account 

net                         Interact with local p2p network connections 

wallet                      Interact with local wallet 

benchmark                   Configure and execute benchmarks  

push                        Push arbitrary transactions to the blockchain

1) Options

-h,--help,获取帮助信息,效果与直接运行cleos一样。

-H,--host TEXT=localhost,获取nodeos运行的主机名/ip地址

-p,--port UINT=8888,获取nodeos运行的主机端口

--wallet-host TEXT=localhost 获取keosd运行的主机名/ip地址

--wallet-port UINT=8888,获取keosd运行的主机端口

-v,--verbose,输出错误的详细信息

2) subcommands

2-1  version

获取版本信息,仅包含一个子命令:client(获取客户端版本信息)

使用方法:

$ cleos version client

Build version: 124c62d0

2-2 create

创建项目,在区块链上面或下面。

包含以下子命令:

key,创建一对新的key,并打印出来,包括私钥和公钥

$ cleos create key

Private key: 5JimvGoUyEK7Sfs773eFMyVMwySPig7qLruMDyX6rhEzr4Puw46

Public key: EOS8NftRSw6u2X65SUg2u6GG1mgpwYztaBAa2U56RGAqiVrX4uhko

account,在区块链上创建一个新的账户(这个相对复杂一点,需要的参数也比较多)

先来试一下:

$ cleos create account

ERROR: RequiredError: creator

Create a new account on the blockchain

Usage: cleos create account [OPTIONS] creator name OwnerKey ActiveKey

# 创建账户的格式,cleos create account [options] <创建者> <账户名> <ownerkey> <activekey>,这里的ownerkey和activekey是前面通过cleos create key生成的两组key的public key

Positionals:

  creator TEXT                The name of the account creating the new account

  name TEXT                  The name of the new account

  OwnerKey TEXT              The owner public key for the new account

  ActiveKey TEXT              The active public key for the new account

Options:

  -x,--expiration            set the time in seconds before a transaction expires, defaults to 30s

# 设置交易到期的时间,单位为秒,默认为30s

  -f,--force-unique          force the transaction to be unique. this will consume extra bandwidth and remove any protections against accidently issuing the same transaction multiple times

# 强制设置事务唯一。这可以避免额外的带宽和意外的重复交易。

  -s,--skip-sign              Specify if unlocked wallet keys should be used to sign transaction

# 指定是否需要使用未打开的钱包密钥来签署事务

  -j,--json                  print result as json

# 是否打印json结果

  -d,--dont-broadcast        don't broadcast transaction to the network (just print to stdout)

# 不要广播到网络,只打印到stdout

  -p,--permission TEXT ...    An account and permission level to authorize, as in 'account@permission' (defaults to 'creator@active')

# 授权账户和权限级别,如 account@permission,默认为cteator@active

  --max-cpu-usage UINT        set an upper limit on the cpu usage budget, in instructions-retired, for the execution of the transaction (defaults to 0 which means no limit)

# 设置CPU预算上限默认为0,即不限制

  --max-net-usage UINT        set an upper limit on the net usage budget, in bytes, for the transaction (defaults to 0 which means no limit)

# 为事务设置净使用预算的上限,单位字节,默认为0即不限制

现在我们按照要求,尝试创建一个账户:

$ cleos create key # 创建OwnerKey

$ cleos create key # 创建ActiveKey

$ cleos create wallet unlock # 解锁钱包

$ cleos create account eosio bob2 <public-OwnerKey> <public-ActiveKey>

executed transaction: 08fe8f8c9010949c1a4e8ec09d806f93962ca8105563285e79c5090f9c5a0162  352 bytes  102400 cycles

#        eosio <= eosio::newaccount            {"creator":"eosio","name":"bob2","owner":{"threshold":1,"keys":[{"key":"EOS5sfiYLq8fEDoq7iWRNKDWCHJZ...

这样我们就成功的创建了一个叫做bob2的账户,它的creator是eosio。

3) get

老样子,先试试

$ cleos get

ERROR: RequiredError: Subcommand required

Retrieve various items and information from the blockchain

Usage: cleos get SUBCOMMAND

Subcommands:

  info                        Get current blockchain information

# 获取当前区块链信息

  block                      Retrieve a full block from the blockchain

# 检出一个完整的区块

  account                    Retrieve an account from the blockchain

# 检出一个区块链上的账户

  code                        Retrieve the code and ABI for an account

# 检出代码和ABI

  table                      Retrieve the contents of a database table

# 检出数据表的内容

  currency                    Retrieve information related to standard currencies

# 检出与标准货币相关的信息

  accounts                    Retrieve accounts associated with a public key

# 检出与公钥关联的账户

  servants                    Retrieve accounts which are servants of a given account 

# 检出给定账户的子账户

  transaction                Retrieve a transaction from the blockchain

# 检出一条区块链上的交易

  transactions                Retrieve all transactions with specific account name referenced in their scope

# 检出在其范围内引用的特定账户名称的所有事务

好了,我们一个一个试试

3-1 info

$ cleos get info

{

  "server_version": "124c62d0",  # 服务端版本

  "head_block_num": 277162, #块高度

  "last_irreversible_block_num": 277161, # 最后一个确认块

  "head_block_id": "00043aaa09080cf8ca265d4d1c1cd310578b0baee68959da490cfe99769d278a", # 头文件ID

  "head_block_time": "2018-04-11T03:29:39", # 头文件时间

  "head_block_producer": "eosio" # 区块生产者名称

}

3-2 block

$ cleos get block  # 会报错,提示需要输入块ID

$ cleos get block 277161 # 最后这个ID我们取刚才获取到的任意一个ID即可

{

  "previous": "00043aa89db2e1cd1bb0963100d4f2f8d509994c0e7111cb2c34a91051ad49fd",

  "timestamp": "2018-04-11T03:29:39.000",

  "transaction_mroot": "644f83cb15c5c968bbbac40a2d0e830a27c15a318cb2ec6d67b5647069b4f765",

  "action_mroot": "9d83071ec793e7cc1f1c1d164f5bcb5bb25b153865b2c64a5eb07abb75934195",

  "block_mroot": "0d662207da7e67f09c4472907c44c5364fcc2f9ba33505674341bd8e2be71ac3",

  "producer": "eosio",

  "schedule_version": 0,

  "new_producers": null,

  "producer_signature": "EOSK7aQgderqj2t68SZc3rk2P3eMyZmutBUBXqhEfsTb43PzrEU7xdfvYy1D8w2LuZ648vpZMqmgqvsSY6reoBdA9j1cMuc8W",

  "regions": [{

      "region": 0,

      "cycles_summary": [[{

            "read_locks": [],

            "write_locks": [],

            "transactions": [{

                "status": "executed",

                "kcpu_usage": 2,

                "net_usage_words": 38,

                "id": "4099d5ee4afe48d33ec28e883742b19505ea3fb07c9f7cdddd9f4988a43d66a0"

              }

            ]

          }

        ]

      ]

    }

  ],

  "input_transactions": [],

  "id": "00043aa9252e8e04ed618aba50879fa48d53e6d1300c3ff0504ed15b345e94e1",

  "block_num": 277161,

  "ref_block_prefix": 3129631213

}

3-3 account

$ cleos get account #报错,需要账户名

$ cleos get account bob2 #用我们刚才创建的账户名

{

  "account_name": "bob2",

  "permissions": [{

      "perm_name": "active",

      "parent": "owner",

      "required_auth": {

        "threshold": 1,

        "keys": [{

            "key": "EOS8Aw3TYtBY1b3qJmP1tJqEsGzDaKL1gzbTuzfYuVHxkUFF8LDeZ",

            "weight": 1

          }

        ],

        "accounts": []

      }

    },{

      "perm_name": "owner",

      "parent": "",

      "required_auth": {

        "threshold": 1,

        "keys": [{

            "key": "EOS5sfiYLq8fEDoq7iWRNKDWCHJZvnj4kA2YBoo72bRLoJXwgZWZW",

            "weight": 1

          }

        ],

        "accounts": []

      }

    }

  ]

}

我们看到返回了一组json数据,其中包含了Owner和Active的publick-Key。

3-4 code

$ cleos get code # 提示报错,需要code name

ERROR: RequiredError: name

Retrieve the code and ABI for an account

Usage: cleos get code [OPTIONS] name

Positionals:

  name TEXT                  The name of the account whose code should be retrieved

Options:

  -c,--code TEXT              The name of the file to save the contract .wast to

  -a,--abi TEXT              The name of the file to save the contract .abi to

$ cleos get code bob2  # 依旧用bob2做为测试

code hash: 0000000000000000000000000000000000000000000000000000000000000000

3-5 table

$ cleos get table # 提示我们需要输入contract scope table参数

ERROR: RequiredError: contract

Retrieve the contents of a database table

Usage: cleos get table [OPTIONS] contract scope table

Positionals:

  contract TEXT              The contract who owns the table

# 拥有表的合约

  scope TEXT                  The scope within the contract in which the table is found

# 表的作用域

  table TEXT                  The name of the table as specified by the contract abi

# 表的名称

Options:

  -b,--binary UINT            Return the value as BINARY rather than using abi to interpret as JSON

  -l,--limit UINT            The maximum number of rows to return

  -k,--key TEXT              The name of the key to index by as defined by the abi, defaults to primary key

  -L,--lower TEXT            JSON representation of lower bound value of key, defaults to first

  -U,--upper TEXT            JSON representation of upper bound value value of key, defaults to last

由于我们目前没有创建过表,所以这里暂时没办法演示。

3-6 currency 

$ cleos get currency # 报错,提示了两个参数,balance(余额)和stats(状态)

$ cleos get currency balance #尝试获取余额,提示要输入合约和账户

$ cleos get currency balance currency eosio #查询合约“currency”(我们在配置环境时部署过的合约),账户eosio(我们曾经转过20个MGD进去)

20.0000 MGD

3-7 accounts

$ cleos get accounts # 要输入public key

$ cleos get accounts EOS5sfiYLq8fEDoq7iWRNKDWCHJZvnj4kA2YBoo72bRLoJXwgZWZW # 从前面随便取一个bob2的publickey试试

{

  "account_names": [

    "bob2"

  ]

}

3-8 servants

$ cleos get servants #报错,提示输入账户名

$ cleos get servants eosio #我们输入最高级别账户

{

  "controlled_accounts": [

    "bob1",

    "bob2",

    "currency",

    "zilly"

  ]

}

# 返回了该账户下的所有子账户

3-9 transaction

$ cleos get transaction # 报错,提示需要id,但我们暂时没有id,所以暂时没办法演示。

3-10 transactions

获取某个账户下的所有交易

$ cleos get transaction -j eosio # 获取eosio账户下的交易,并打印

{

  "transactions": []

}

# 因为没有,所以为空。

至此,cleos get部分我们基本都尝试过了,由于条件限制,有些操作可能无法演示,不过后面我们都会用到。

下一篇将继续探索 cleos下的set子命令的各个用法。

我是王越,EOS应用开发小白一枚,渴望与你链接,我已经建立了一个交流开发技术的微信群,期待你的加入!请加我微信 361757,暗号EOS

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容