1. EOS 新手教程

EOS 新手教程

在此新手教程中,你将学习到:

  • 如何快速地启动一个节点
  • 管理钱包和密钥
  • 创建账户
  • 编写智能合约
  • 编译合约
  • 部署合约

此新手教程主要参考了官方文档 EOSIO Guides。实际上,这些内容更详细的说明将会以系列内容的方式组织在各个专题模块中。

1. 环境说明

  • 智能合约使用 C++ 编写,并通过 clang/llvm 编译成 WASM。当然,EOSIO 提供了编译工具 eosio.cdt。
  • 操作系统目前不支持 Windows,比较主流的操作系统是 Ubuntu 16.04 或 CentOS 7。

关于环境说明更详细的内容,可以参考官方文档 EOSIO Introduction。

2. 安装 eosio

安装 eosio (nodeos, keosd, cleos) 和 eosio.cdt (eosio-cpp) 可以参考本人编写的关于软件安装相关的安装专栏。

3. 搭建 EOS 测试网络

为了实践 EOS,首先需要搭建 EOS 测试网络。这里,搭建 EOS 测试网络不仅指启动相关节点,还包括创建钱包、导入私钥、编译和部署智能合约、创建系统账号、创建测试账号等一系列操作。详细的教程可以参考本人编写的另一份专栏——搭建各类区块链测试网络教程。

这里,可以先通过下面提供的简单步骤先体验一下如何交互 EOS 网络。

Step 1. 启动 keosd

$ keosd &

这里将 keosd 以后台进程启动。

Step 2. 启动 nodeos

$ nodeos -e -p eosio \
--plugin eosio::producer_plugin \
--plugin eosio::chain_api_plugin \
--plugin eosio::http_plugin \
--plugin eosio::history_plugin \
--plugin eosio::history_api_plugin \
--access-control-allow-origin='*' \
--contracts-console \
--http-validate-host=false \
--verbose-http-errors >> nodeos.log 2>&1 &

这里将 nodeos 以后台进程启动。

其中,选项 --plugin 用于开放对应的插件功能。注意,这里只是为了测试方便,打开了 CORS (将其配置为 *),在生产环境中永远不要这样做!!!

Step 3. 验证上述操作是否成功

Step 3.1 检查 nodeos 是否能够正确生成区块

可以通过查看 nodeos.log 来确认是否正确生成了区块。

$ tail -f nodeos.log
Step 3.2 查看钱包
$ cleos wallet list
Wallets:
[]

可以看到,钱包初始为空。

Step 3.3 检查能否通过 API 访问 nodeos

可以通过下面两种方法查询刚启动的 EOS 节点信息。

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

Step 4. 创建和配置钱包

钱包用于存储公钥-私钥对。私钥用于对在区块链上执行的交易进行签名。可以通过命令行工具 cleos 访问钱包。

Step 4.1 创建钱包

下列命令会创建一个默认钱包 default。

$ cleos wallet create --to-console
Creating wallet: default
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5Kewn9L76X8Fpd....................t42S9XCw2"

上述命令会返回一个密钥,如下所示。为了后续操作方便,需要保存这里生成的密钥,以解锁钱包。也可以通过 --to-file 将创建后的密钥存入文件中。

Step 4.2 打开钱包

当启动 keosd 服务时,钱包默认是关闭的,需要运行下面的命令打开。

$ cleos wallet open

运行下面的命令返回钱包列表。

$ cleos wallet list
Wallets:
[
  "default"
]

Step 4.3 解锁钱包

钱包被打开之后,默认是被锁住的。需要上述密码进行解锁。

$ cleos wallet unlock

根据提示,输入钱包密码。

运行下面的命令返回钱包列表。

$ cleos wallet list
Wallets:
[
  "default *"
]

注意:其中的 * 代表钱包当前已被解锁。

Step 4.4 在钱包中创建和导入 Key

生成一个私钥,可以通过命令行工具 cleos 实现。

$ cleos wallet create_key

将返回类似如下内容

Created new private key with a public key of: "EOS8PEJ5FM42xLpHK...X6PymQu97KrGDJQY5Y"

Step 5. 导入系统用户 eosio 的私钥

每个新的 EOSIO 链都有一个默认的系统账户 "eosio"。系统账户 "eosio" 被用于设置链通过加载系统级智能合约,这些系统级合约用于链上冶理和共识。每个新的 EOSIO 链都有一个开发密钥,并且这个密钥是相同的。加载这个密钥到钱包中以签名系统账户 "eosio" 发起的交易。

$ cleos wallet import

根据提示,输入下面的密钥。

5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3

注意,永远不要使用开发阶段的密钥 (如上面的密钥) 做生产阶段的密钥。这样做极大可能会导致你失去对自己账户的控制权。

至此,我们已经有一个默认的钱包,并且导入了系统账户 "eosio" 的密钥。

Step 6. 创建账户

什么是账户

账户是权限集合,存储于区块链上,被用于标识发送者/接收者。EOS 提供了灵活的权限结构使得根据权限配置权限可以由个体或集体控制。需要账户发送或接收一个有效的交易到区块链。

Step 6.1 创建测试账户

这里,我们创建两个区块链领域明星级账户 "alice" 和 "bob"。

$ cleos create account eosio bob EOS6YYpQ6jJ3p4d9bvYiStnkoE6zELJxbQJNZcj4tReGza4eoTiSC 
$ cleos create account eosio alice EOS6YYpQ6jJ3p4d9bvYiStnkoE6zELJxbQJNZcj4tReGza4eoTiSC

之后,你可以看到类似下面的确认消息,确认交易已经被广播。

executed transaction: 40c605006de...  200 bytes  153 us
#         eosio <= eosio::newaccount            {"creator":"eosio","name":"alice","owner":{"threshold":1,"keys":[{"key":"EOS5rti4LTL53xptjgQBXv9HxyU...
warning: transaction executed locally, but may not be confirmed by the network yet    ]

Step 6.2 公钥

注意,在 cleos 命令中将一个公钥关联到账户 alice。每个 EOSIO 账户都会关联一个公钥。

注意,一个账户名是所有权的唯一标识。你可以改变账户公钥,但是不能改变 EOSIO 账户所有权。

通过下面的命令可以获取与账户 "alice" 关联的公钥。

$ cleos get account alice

你将获得类似下面的输出。

permissions:
    owner     1:    1     EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
    active     1:    1 EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
memory:
    quota:       unlimited  used:      2.66 KiB

net bandwidth:
    used:               unlimited
    available:          unlimited
    limit:              unlimited

cpu bandwidth:
    used:               unlimited
    available:          unlimited
    limit:              unlimited

注意到账户 "alice" 实际上有 "owner" 和 "active" 两个公钥。EOSIO 拥有独特的权限结构以加强你账户的安全。你可以最低限度曝光你的账户通过将 "owner" 公钥冷存储,只使用 "active" 授权的密钥。这样,如果你的 "active" 密钥被盗,你可以通过 "owner" 权限重新获得账户的控制权。

在权限领域,如果你拥有 "owner" 权限,你可以改变 "active" 权限的私钥。但是,你不能做相反的操作。

排查错误

如果你在创建账户的时候出现错误,确保你的钱包是解锁的。

运行下面的命令,你应该会发现在打开的钱包名后面有个 *。

$ cleos wallet list
Wallets:
[
  "default *"
]

Reference

  1. EOSIO Developer Portal, https://developers.eos.io
  2. EOSIO Guides, https://developers.eos.io/eosio-home/docs
  3. EOSIO Introduction, https://developers.eos.io/eosio-home/docs/introduction
  4. Before You Begin, https://developers.eos.io/eosio-home/docs/setting-up-your-environment
  5. Start Your Node & Setup, https://developers.eos.io/eosio-home/docs/getting-the-software
  6. Install the CDT, https://developers.eos.io/eosio-home/docs/installing-the-contract-development-toolkit
  7. Create Development Wallet, https://developers.eos.io/eosio-home/docs/wallets
  8. Create Test Accounts, https://developers.eos.io/eosio-home/docs/accounts-1

项目源代码

项目源代码会逐步上传到 Github,地址为:

  • https://github.com/windstamp/blockchain
  • https://github.com/windstamp/eoscodes
  • https://github.com/windstamp/installscripts

Contributor

  1. Windstamp, https://github.com/windstamp

你可能感兴趣的:(1. EOS 新手教程)