EOS开发——GETTING STARTED

概述

EOSIO 有许多程序组件。我们把主要用到的列在下边:

  • nodeos(node+eos=nodeos)-核心的EOSIO节点守护进程,可以用插件来进行配置以运行节点。示例用途是区块生产,专用API端点和本地开发。
  • cleos (cli+eos = cleos) 同区块链进行交互和管理钱包的命令行接口
  • keosd(Key+eos = keosd) 将EOSIO密钥安全存储到钱包的组件。

这些组件之间的基本关系在下图中展示。在接下来的部分,你将会编译EOSIO组件,在单主机中进行部署以及配置单节点测试网络(testnet)

Docker快速入门

安装docker

首先,我们需要在你的电脑上安装docker.

Docker是一个容器管理服务。Docker的意图是让开发人员在可移植容器中创建全部配置好的系统环境来简化应用部署。系统环境由运行在操作系统配置中的目标应用程序组成,操作系统配置提供了应用需要的所有运行时支持。开发者在容器中创建所需的系统配置,然后将容器打包以便进行部署。目的是让用户可以获取容器的一份拷贝,然后在自己的Docker环境中进行部署,并且无需执行大量系统和应用程序配置即可关闭和运行。

安装Docker请遵循如下指南:
https://docs.docker.com/install/

EOSIO dev Docker镜像

EOSIOS Dev Docker镜像是为本地开发设计的EOSIO软件的编译版本。

从仓库中pull镜像:

docker pull eosio/eos-dev

启动EOSIO 节点:

sudo docker run --rm --name eosio -d -p 8888:8888 -p 9876:9876 -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::wallet_api_plugin --plugin eosio::wallet_plugin --plugin eosio::producer_plugin --plugin eosio::history_plugin --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"

检查是否正常工作:

 sudo docker logs --tail 10 eosio

输入将会是下面这个样子:

1929001ms thread-0   producer_plugin.cpp:585       block_production_loo ] Produced block 0000366974ce4e2a... #13929 @ 2018-05-23T16:32:09.000 signed by eosio [trxs: 0, lib: 13928, confirmed: 0]
1929502ms thread-0   producer_plugin.cpp:585       block_production_loo ] Produced block 0000366aea085023... #13930 @ 2018-05-23T16:32:09.500 signed by eosio [trxs: 0, lib: 13929, confirmed: 0]
1930002ms thread-0   producer_plugin.cpp:585       block_production_loo ] Produced block 0000366b7f074fdd... #13931 @ 2018-05-23T16:32:10.000 signed by eosio [trxs: 0, lib: 13930, confirmed: 0]
1930501ms thread-0   producer_plugin.cpp:585       block_production_loo ] Produced block 0000366cd8222adb... #13932 @ 2018-05-23T16:32:10.500 signed by eosio [trxs: 0, lib: 13931, confirmed: 0]
1931002ms thread-0   producer_plugin.cpp:585       block_production_loo ] Produced block 0000366d5c1ec38d... #13933 @ 2018-05-23T16:32:11.000 signed by eosio [trxs: 0, lib: 13932, confirmed: 0]
1931501ms thread-0   producer_plugin.cpp:585       block_production_loo ] Produced block 0000366e45c1f235... #13934 @ 2018-05-23T16:32:11.500 signed by eosio [trxs: 0, lib: 13933, confirmed: 0]
1932001ms thread-0   producer_plugin.cpp:585       block_production_loo ] Produced block 0000366f98adb324... #13935 @ 2018-05-23T16:32:12.000 signed by eosio [trxs: 0, lib: 13934, confirmed: 0]
1932501ms thread-0   producer_plugin.cpp:585       block_production_loo ] Produced block 00003670a0f01daa... #13936 @ 2018-05-23T16:32:12.500 signed by eosio [trxs: 0, lib: 13935, confirmed: 0]
1933001ms thread-0   producer_plugin.cpp:585       block_production_loo ] Produced block 00003671e8b36e1e... #13937 @ 2018-05-23T16:32:13.000 signed by eosio [trxs: 0, lib: 13936, confirmed: 0]
1933501ms thread-0   producer_plugin.cpp:585       block_production_loo ] Produced block 0000367257fe1623... #13938 @ 2018-05-23T16:32:13.500 signed by eosio [trxs: 0, lib: 13937, confirmed: 0]

恭喜~你已经有一个简单的单节点区块链运行在你的Docker容器中了!

可以在浏览器中输入下面的地址来检查RPC接口是否工作:

http://localhost:8888/v1/chain/get_info

看到的信息将会是下面这个样子:

 {
    "server_version": "0961a560",
    "chain_id": "cf057bbfb72640471fd910bcb67639c22df9f92470936cddc1ade0e2f2e7dc4f",
    "head_block_num": 13780,
    "last_irreversible_block_num": 13779,
    "last_irreversible_block_id": "000035d36e1ca29ba378081c574ab3b5ab4214ba29754dd42b512690a9f03e80",
    "head_block_id": "000035d4165c9225d7a04822d142fbcb15f997a6f2571dc7bae8437dea782205",
    "head_block_time": "2018-05-23T16:30:54",
    "head_block_producer": "eosio",
    "virtual_block_cpu_limit": 100000000,
    "virtual_block_net_limit": 1048576000,
    "block_cpu_limit": 99900,
    "block_net_limit": 1048576
}

Cleos

cleos是一个命令行接口,同区块链进行交互来管理钱包。为了方便我们为运行在我们容器内部的cleos创建一个bash alias。在终端中运行如下命令:

alias cleos='docker exec eosio /opt/eosio/bin/cleos --wallet-url http://localhost:8888'

停止eosio:

docker stop eosio

现在在终端中输入 cleos --help,你将会看到下面的输出:

Command Line Interface to EOSIO Client
Usage: /opt/eosio/bin/cleos [OPTIONS] SUBCOMMAND    

Options:
  -h,--help                   Print this help message and exit
  -u,--url TEXT=http://localhost:8888/
                              the http/https URL where nodeos is running
  --wallet-url TEXT=http://localhost:8900/
                              the http/https URL where keosd is running
  -r,--header                 pass specific HTTP header; repeat this option to pass multiple headers
  -n,--no-verify              don't verify peer certificate when using HTTPS
  -v,--verbose                output verbose actions 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
  sign                        Sign a transaction
  push                        Push arbitrary transactions to the blockchain
  multisig                    Multisig contract commands
  system                      Send eosio.system contract action to the blockchain

账户和权限

账户是存储在区块链上的人类可读的标识符,每笔交易都会根据账户的配置权限进行权限评估.每个已命名的权限都有一个阈值,在此权限下签署的交易必须满足阈值才认为是有效的。交易通过使用具有加载和解锁钱包的客户端来签署。钱包是保护和使用你的密钥的软件。在区块链上这些keys可能会也可能不会被授予一个账户的权限。

钱包

钱包是存储keys的客户端,这些Keys可能被关联了一个或多个账户的权限,也可能没被关联。理想情况下,一个钱包有被一个高熵密码保护的锁定(加密)和解锁(解密)状态。EOSIO/eos仓库捆绑了一个名为cleos的命令行界面的客户端,它同一个名为keosd的轻客户端进行交互,它们同钱包一起共同展示了这种模式。

账户

一个账户是存储在区块链上的一个人类可读的名字。根据权限的配置它可以被个人或者个人组成的团体拥有。需要使用一个账户来将一个交易转移或者推送到区块链上。

授权和权限

权限决定了任何给定的消息是否合适的授权了。

每个账户都有两个原生的命名权限。

  • owner 权限代表着一个账户的所有权。只有少许的交易需要这种权限,最需要注意的是对owner权限做出任何改变的消息。一般来说,建议对owner权限进行冷存储(cold storage)并且不同任何人分享此权限。owner权限可以用来恢复另外一个可能被损坏的(compromised)权限。
  • active 权限被用来转移资金,为生产商投票以及进行其它高级账户的更改。

除了原生的权限,帐户还可拥有可用于进一步扩展帐户管理的自定义命名权限。自定义权限非常灵活,并且在实现时可以解决许多可能的用例。这很大程度上取决于开发人员如何使用它们,以及采用什么约定(如果有的话)。

任何给定授权的权限可以分配给一个或多个公用密钥或有效的帐户名称。

把它们放到一起

以下是所有上述概念的组合以及它们如何实际应用的一些松散例子。

默认账户配置(单签名(Single-Sig))

这是帐户在创建后的配置方式,针对所有者权限和活动权限它会拥有单个密钥,这两个密钥的权重均为1,权限的阈值均为1。默认配置需要一个单一的签名来为原生权限的消息授权。

@bob账户授权

Permission  Account Weight  Threshold
owner    EOS5EzTZZQQxdrDaJAPD9pDzGJZ5bj34HaAb8yuvjFHGWzqV25Dch   1  1   
active  EOS61chK8GbH4ukWcbom8HgK95AeUfP8MBPn7XRq8FeMBYYTgwmcX    1  1

在@bob帐户示例中,此表显示@ bob的owner密钥的权限权重为1,并且在该权限下推送交易所需的阈值为1。

要在owner权限下推送交易,只有@ bob需要使用其owner密钥对交易进行签名,以使交易符合验证条件。此密钥将存储在钱包中,然后通过使用cleos进行处理。

多签名账户 && 自定义权限

以下示例是虚拟账户@multisig的权限。在这种情况下,两个用户被授权为虚拟帐户@multisig的owner和active权限,有三个用户被授予权重不同的自定义publish权限。

@multisig account authorities

在这种情况下,需要权重阈值2来更改owner权限级别,这意味着由于所有用户都具有权重1,因此他们都必须对交易进行签名才能获得完全授权。

要发送需要激活权限的交易,阈值设置为1.这意味着只需要1个签名即可对来自帐户active权限的消息进行授权。

还有一个名为publish的自定义命名权限。为了这个示例,publish权限用于通过使用推理博客dApp将帖子publish到@ multisig的博客。publish权限的阈值为2,@ bob和@stacy的权重均为2,公钥的权重为1.这意味着@bob和@stacy可以在没有额外签名的情况下publish,而公众密钥需要额外签名才能在公共许可下对消息授权。

因此,上述权限表意味着作为帐户owner的@ bob和@stacy提升了类似于主持人或编辑者的权限。尽管这个原始示例有局限性,特别是在扩展性方面,因此不一定是一个好的设计,但它充分证明了EOSIO权限系统的灵活性。

此外,请注意上表中的权限是使用帐户名称和密钥设置的。乍一看这可能看起来这没有什么,但它确实增加了一些额外的灵活性。

总结

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

推荐阅读更多精彩内容