前一篇文章介绍了EOSIO中钱包、账户与账户权限的概念,这一篇文章继续学习EOSIO系统的主要组件,包括nodeos、keosd以及cleos。

本文执行的命令都是基于Docker环境,请先下载Docker镜像

docker pull eosio/eos

nodeos、keosd与cleos的关系

先来了解整体架构,下图展示了nodeos、keosd与cleos之间的关系。 

图中有几个关键信息:

  1. nodeos就是我们常说的节点,用来管理账号,上传数据到区块链。
  2. keosd是钱包管理客户端,用来保存钱包信息。
  3. cleos是用户(主要是开发人员)与keosd/nodeos交互的命令行工具。

nodeos

nodeos的官方定义如下

nodeos - server-side blockchain node component

nodeos是运行在服务端的区块链节点组件,是EOSIO系统的核心进程,可以通过它运行一个节点。

在Docker环境通过下面的命令运行一个nodeos节点。

docker run --name nodeos -p 8888:8888 -p 9876:9876 -t eosio/eos /opt/eosio/bin/nodeosd.sh arg1 arg2

这个命令有下面几层含义:

  1. 使用eosio/eos镜像,启动一个名称是nodeos的容器。
  2. 启动后将容器的8888端口映射到本机8888端口,9876端口映射到本机9876端口。
  3. 启动容器时执行 /opt/eosio/bin/nodeosd.sh 脚本,通过此脚本运行nodeos节点。

节点启动后,我们可以看到下面的信息,节点正在生成区块数据。

使用下面的命令进入nodeos容器,并找到nodeosd.sh文件所在的文件目录。

docker exec -it nodeos /bin/bash
cd /opt/eosio/bin/
ls

可以看到在这个目录下,除了nodeos.sh,还有nodeos、keosd、cleos,这说明在eosio/eos镜像中已经包含了这三个组件的完整信息,有兴趣的同学可以继续深入了解,我在这里就不展开介绍了。

keosd

keosd的官方定义如下

keosd - EOSIO wallet

keosd就是EOSIO的钱包管理客户端,可以被认为是一个存储公钥-私钥的仓库,同时管理钱包信息。

nodeos与keosd之间并不存在必然关联,只有在需要签名时它们才会产生联系,例如为交易签名。

有一点要注意的是,nodeos已经包含了keosd的完整功能,也就是说在nodeos上也可以管理钱包。

在Docker环境通过下面的命令运行一个keosd客户端。

docker run --name keosd -t eosio/eos /opt/eosio/bin/keosd arg1 arg2

与运行nodeos相比,有两点不同: 1.启动keosd不需要指定端口 2.使用/opt/eosio/bin/keosd 启动keosd客户端

启动信息如下 

使用下面的命令进入keosd容器

docker exec -it keosd /bin/bash

cleos

cleos的官方定义如下

cleos - command line interface to interact with the blockchain

cleos是用户与keosd/nodeos交互的命令行工具。

在nodeos或者keosd中,使用 cleos -h命令,可以查看cleos的帮助信息。

cleos 目前支持 version create get set trnsfer net wallet sign push 9个子命令。

建议大家先将所有命令翻看一遍,了解每个命令的功能范围,同时可以对照官方文档 Command Reference : https://github.com/EOSIO/eos/wiki/Command%20Reference 一起学习。

转自:https://www.taowong.com/blog/2018/06/28/eos-develop-4.html

参考资料

【系列】EOS智能合约开发08 - 详解 nodeos & cleos

【系列】EOS智能合约开发10 - 详解 keosd

Command Reference

Tutorial Comprehensive Accounts and Wallets

(转)EOSIO开发(四)- nodeos、keosd与cleos的更多相关文章

  1. EOS开发基础之四:使用cleos命令行客户端操作EOS——智能合约之eosio.bios和eosio.token

    现实世界中的合约,简单地说,是一个参与活动的所有人都需要遵循的协议.合约可以是正式的法律合同(例如,金融交易),或者是简单的游戏规则.典型的活动可以是诸如资金转移(在金融合约的情况下)或游戏动作(在游 ...

  2. (转)EOSIO开发(一)使用Docker构建本地环境

    前言 一直想学习EOS开发,但是不知道怎么入门.最近从GitHub上下载了源码,发现官方已经提供了完整的EOSIO开发入门教程,既然如此赶紧开始行动.今天是系列文章的第一篇,介绍如何使用Docker搭 ...

  3. EOS开发基础之五:使用cleos命令行客户端操作EOS——智能合约之Exchange

    先回答一下上一节中留下的问题,为什么我就看不到eosio这个账户中的钱呢?我明明为它create了很多token啊. 对,你是create了,但是没有issue啊.create了1000000000 ...

  4. JAVA EE企业级开发四步走完全攻略 [转]

    http://bbs.51cto.com/thread-550558-1.html 本文是J2EE企业级开发四步走完全攻略索引,因内容比较广泛,涉及整个JAVA EE开发相关知识,这是一个长期的计划, ...

  5. C#的百度地图开发(四)前端显示与定位

    原文:C#的百度地图开发(四)前端显示与定位 有了这些定位信息,那要如何在前端的页面上显示出来呢?这需要用到百度地图的JavaScript的API.下面是示例代码. 前端代码 <%@ Page  ...

  6. 【JAVA EE企业级开发四步走完全攻略】

    本文是J2EE企业级开发四步走完全攻略索引,因内容比较广泛,涉及整个JAVA EE开发相关知识,这是一个长期的计划,单个发blog比较零散,所以整理此索引,决定以后每发一季JAVA EE blog后会 ...

  7. 从零开始实现ASP.NET Core MVC的插件式开发(四) - 插件安装

    标题:从零开始实现ASP.NET Core MVC的插件式开发(四) - 插件安装 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/11260750. ...

  8. STC8H开发(四): FwLib_STC8 封装库的介绍和注意事项

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  9. EOS开发基础之六:使用cleos命令行客户端操作EOS——智能合约之eosio.msig和eosio.system

    上一节我们搞了老半天,也没整明白Exchange这个合约到底干啥用的.就它官方提供的说法,是用于货币的创造和交易.我没整明白,所以去看了下代码,发现代码头文件里面有下面这段话: This contra ...

随机推荐

  1. 实用方法 - 解决360Doc文章不能复制的问题(实现不登录直接复制)

    问题: 有时搜索文章的时候看到一些有用的文字,或者在网上搜索一些文献资料,找到需要的部分后,通常都可以使用 Ctrl + C,或者右键复制下来.但有些网站,比如:360个人图书馆(360Doc)会强制 ...

  2. Windows NTFS 符号链接 与 Linux 软连接

    Windows NTFS 符号链接又称“符号链接”==================================== F:\>mklink /d Link_d Target 为 Link ...

  3. imu_tk标定算法原理

    imu_tk代码地址 https://bitbucket.org/alberto_pretto/imu_tk II. S ENSOR E RROR M ODEL 对于理想的IMU,加速度计三元组的3个 ...

  4. vim操作表

  5. PP图和QQ图 检查2个数据集是否符合同一分布

    1.QQ图检查2个数据集是否符合同一分布,Purpose:Check If Two Data Sets Can Be Fit With the Same Distribution PP图和QQ图 - ...

  6. ionic中执行pop返回上一个页面,还需要执行操作

    <ion-navbar> </ion-navbar> 从A页面push到B页面拿到数据以后,从B页面pop到A页面,在A页面展示刚刚拿到的数据,用 ionViewDidEnte ...

  7. js return false\e.preventDefault() 以及session

    @{ ViewBag.Title = "Test"; } <h2>Test</h2> 区别的介绍 <br/> 我们在平时的编码中javascri ...

  8. Flink - FlinkKafkaConsumer010

    Properties properties = new Properties(); properties.setProperty("bootstrap.servers", &quo ...

  9. sql server创建临时表的两种写法和删除临时表

    --创建.删除临时表 --第一种方式 create table #tmp(name varchar(255),id int) --第二种方式 select count(id) as storyNum ...

  10. AD采集问题

    在调试AD采集时想问的一些问题 1.电路原理图中的VSS是什么意思? 2.电路原理图中的VDD是什么意思? 3.电路原理图中的VREF+和VREF-是什么意思? 4.电路原理图中的VBAT是用来干什么 ...