EOS快速入门(二)钱包-账户 准备工作

准备工作

跟以太坊不同,EOS引入了Account账户,Wallet钱包,钱包密码,权限,等众多概念,理清楚这些概念,对尽快上手EOS开发有很大帮助,在正式上手前,先让我们梳理一下这些概念吧~~


如右图所示,Wallet是用来存储私钥的,钱包对应一个密码,输入密码才能解锁钱包,读取私钥。左边为一个EOS账户,里面存储着智能合约公钥等,你可以把它看做一个保险箱,需要拿去钱包里的私钥才能解锁这个保险箱。

在EOS账户体系中,默认有两种权限,即Owner和Active

owner权限是账户最高权限,具有Active所有权限,以及重置Active

Active是操作权角色,可用于平时的转账、投票等日常操作

除此之外,账户还可以自定义权限,来扩展对账户权限的管理,十分灵活也带来很多可能性。

钱包(Wallet)

    存储秘钥

    Lock和Unlock状态

    签名授权

账户(Account)

    可读名字(12个字符),被个人或多人拥有

    多权限管理、支持多签名、支持自定义权限

    可定义Action和Handler

EOS Dawn 3.0测试版本中创建一个账户的命令是:

    cleos create account{创建者账户名}{新的账户名}公钥1 公钥2

其中{创建者账户名}是为这个创建动作支付EOS的账户,公钥1和公钥2分别是两个不同权限的密钥对的公钥。

有了前面环境的搭建,现在可以开始启动测试链,进行开始测试钱包啦~~

没有搭建环境的小伙伴,请先参考EOS快速入门(一)搭建ubuntu开发环境

启动测试链

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"

在这里解释一下上面的启动命令做了哪些设置

使用eosio/eos镜像,启动一个名称是eosio的容器。

启动后将容器的8888端口映射到本机8888端口,9876端口映射到本机9876端口。

将docker容器里的3个文件夹连接到本地硬盘。

在Bash里启动Nodeos,并加载默认的插件,配置服务器地址,启用跨域访问以及加入合约调试功能

将一些目录挂载到本能/tmp文件夹下,这样在docker里可以持久化这些目录

启动keosd

docker run-d--name keosd--network=eosdev \-i eosio/eos-dev/bin/bash-c"keosd --http-server-address=0.0.0.0:9876"

启动keosd

安装合约开发工具

到home目录,大约需要二十分钟

$ wget https://github.com/eosio/eosio.cdt/releases/download/v1.4.0/eosio.cdt-1.4.0.x86_64.deb

有的文章用这个方法安装,官网不推荐这种方法,亲测很坑,简易用上面的方式安装。

git clone --recursive https://github.com/eosio/eosio.cdt --branch v1.3.2 --single-branch

cd eosio.cdt

./build.sh

安装

$ sudo apt install ./eosio.cdt-1.4.0.x86_64.deb

    安装完成后检测一下 

    $ which eosio-cpp

    执行之后 /usr/bin/eosio-cpp

第一步.创建测试钱包

第一步:创建钱包 以下命令会默认创建一个名为default的钱包 这里使用

cleos wallet create -n wallet_name --to-console(指定了钱包名字)

$ cleos wallet create --to-console

Creating wallet: wallet_name

Save password to use in the future to unlock this wallet.

Without password imported keys will not be retrievable.

钱包密码:PW5KXKRhjR2PuNSkVDoSJRZxQFCi5beJvVTKxPNnTuCFWyNpQdxdp

最后返回一个钱包,需要保存起来。后面的操作会用到

第二步:打开钱包

$ cleos wallet open -n wallet_name

Opened: wallet_name

可以用下面的命令查看钱包

$ cleos wallet list

Wallets:

[

  "default"

  "wallet_name"

]

第三步:解锁钱包 解锁钱包需要输入上面提到的钱包密码。

$ cleos wallet unlock -n wallet_name

password: Unlocked: wallet_name

    解锁后:

$ cleos wallet list wallet_name

Wallets:

[

  "default"

  "wallet_name*"

]

这里wallet_name钱包后面有一个星号标记来表示钱包已经解锁了。

第四步:导入密钥

钱包是用来管理密钥的。密钥是后面和链上的账户或者合约交互时的身份凭证。在这一步使用cleos来创建一个密钥对。

$ cleos wallet create_key -n wallet_name

Created new private key with a public key of: "EOS6p7ipqZzwgmT8AuhgEzFCBMnqfL57RZLSwsKasiT28r2ro65Pi"

钱包把公钥地址返回给用户并自动记录了私钥。如果用户想看到这一对密钥,可以用下面的命令查看:

$ cleos wallet private_keys -n wallet_name

输入钱包密码后,我们就能看到刚才创建的这一对密钥

password: [[

  "EOS6p7ipqZzwgmT8AuhgEzFCBMnqfL57RZLSwsKasiT28r2ro65Pi",

  "5J11woL2FDBTacK4NYgmHkycNZc7agN1CJbAb2sJ8e1eY49ojLY"

  ]

]

第五步: 导入eosio账户的密钥

eosio是一个特殊的账户。它作为默认系统用户来管理系统的合约和链的行为。这个账户的密钥是固定好了的。我们需要

导入这个账户的私钥以便在后面使用这个账户。

eosio账户类似root账户

  cd ~/.local/share/eosio/nodeos/config #此文件中会看到账户信息

执行下面的命令,并在输入私钥提示符出现的时候输入 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3

$ cleos wallet import -n wallet_name

private key: imported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV

现在已经创建了eosio这个账户的密钥对

第六步:创建测试账户

我们将在这一个部分用eosio账户和上一步生成的公钥创建测试账户alice。

cleos create account eosio alice EOS6p7ipqZzwgmT8AuhgEzFCBMnqfL57RZLSwsKasiT28r2ro65Pi

第七部:操作智能合约

部署一个智能合约,需要部署到一个特定的账户。我们先创建一个hello的账户。

cleos create account eosio hello EOS6p7ipqZzwgmT8AuhgEzFCBMnqfL57RZLSwsKasiT28r2ro65Pi

显示如下:

executed transaction: 9d8ec5597918187cb58a985159bc79a9b74e7514f3b4c4f7da42cbb5e8c72816  200 bytes  334 us

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

warning: transaction executed locally, but may not be confirmed by the network yet        ]

在docker 容器里已经有一些合约和编译完成的文件可以直接部署。 这里选择一个简单的合约hello来部署。合约里只有一个hi方法。 合约的源代码如下:

#include <eosiolib/eosio.hpp>

using namespace eosio;

class hello : public eosio::contract {

  public:

  using contract::contract;

  /// @abi action

  void hi( account_name user ) {

    require_auth( user );

print( "Hello, ", name{user} );

  }

};

EOSIO_ABI( hello, (hi) )

部署的命令如下。其中我们使用了hello这个账户来部署合约。

$ cleos set contract hello /opt/eosio/contracts/hello

执行完显示如下信息

Reading WASM from /opt/eosio/contracts/hello/hello.wasm...

Publishing contract...

executed transaction: 84df00f6cbabcc2f79361586d30407f0e2d518f3b3f2604641310bd510a652fb  4168 bytes  492 us

#        eosio <= eosio::setcode              {"account":"hello","vmtype":0,"vmversion":0,"code":"0061736d01000000013b0c60027f7e006000017e60027e7e...

#        eosio <= eosio::setabi                {"account":"hello","abi":"0e656f73696f3a3a6162692f312e30000102686900010475736572046e616d650100000000...

warning: transaction executed locally, but may not be confirmed by the network yet    ]

在前面启动docker容器的时候,我们通过参数-v /tmp/eosio/work:/work把容器和外部主机的目录连接了起来。 因此放在/tmp/eosio/work的文件可以在容器里通过/work来访问到。

为了调试改版的智能合约,需要在/tmp/eosio/work下建立一个contract目录,并开放所有权限。

cd /tmp/eosio/work

sudo mkdir contract

现在在contract目录下建立一个hello目录。在hello目录下创建文件hello.cpp。执行如下操作

$ eosiocpp -o hello.wasm hello.cpp

$ eosiocpp -g hello.abi hello.cpp

生成hello.wasm和hello.abi文件。再部署合约一次

cleos set contract hello /work/contract/hello

执行如下命令

$ cleos push action hello hi'["alice"]'-p alice@active

显示如下,证明执行成功

executed transaction: ea8f63479b26fd317fe47501ce8239f7532f6967bd04970d2838120a936174bf  104 bytes  256 us#        hello <= hello::hi                    {"user":"alice"}

>> Hello,alicewarning: transaction executed locally,but may not be confirmed by the network yet]

到这里,我们已经初步了解了钱包,账户和智能合约的一些基本操作。

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

推荐阅读更多精彩内容