EOS目前的学习资料可以参考官方门户:https://developers.eos.io/ ,在环境搭建或者开发中遇到其他问题是尽量去github 上的 Issues寻找答案。
以下示例基于MacOS 10.13.4上测试
git clone https://github.com/EOSIO/eos --recursive
cd eos
./eosio_build.sh
脚本运行完成后安装EOSIO
./eosio_install.sh
安装成功后控制台提示,注意观察。
git clone --recursive https://github.com/eosio/eosio.cdt
cd eosio.cdt
./build.sh
sudo ./install.sh
在1-3 步骤中如果出现ssl错误,换个网络或者检查是不是本机代理等问题,由于我公司网络是加了代理和支持IPv6,经常更新版本的时候出现SSL问题。
nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin
$ cleos get info
{
"server_version": "0f6695cb",
"chain_id": "cf057bbfb72640471fd910bcb67639c22df9f92470936cddc1ade0e2f2e7dc4f",
"head_block_num": 298255,
"last_irreversible_block_num": 298254,
"last_irreversible_block_id": "00048d0ef88c2b6eaae5a978712e8caea6295f1d8b3779d7c2b53d2303b13e87",
"head_block_id": "00048d0f452a8d6672ec56328d1f7cf1d318860d9609c1d66fefc7a07a836b57",
"head_block_time": "2018-10-18T06:40:22.500",
"head_block_producer": "eosio",
"virtual_block_cpu_limit": 200000000,
"virtual_block_net_limit": 1048576000,
"block_cpu_limit": 199900,
"block_net_limit": 1048576,
"server_version_string": "v1.3.0"
}
钱包是私钥存储的地方,并授权区块链上的相关操作。
创建默认钱包
$ 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.
"PW5JHwXVK4CLQdKBFGWvGXD8Vhz......"
创建指定名字钱包
$ cleos wallet create -n mywallet --to-console
钱包创建完成后需要将密码保存起来,后面解锁钱包需要用上
解锁和锁定钱包
$ cleos wallet unlock
password:
$ cleos wallet lock
Locked: default
导入私链的私钥
上述启动的私链使用config.ini(位置 ~/Library/Application Support/eosio/nodeos/config)中的key,因此我们需要将该key的私钥导入到钱包中。
为了方便,我们直接使用defaul钱包。导入私钥:
$ cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
imported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
现在,我们已经有了eosio账户私钥的钱包,可以将部署eosio.bios合约。开发过程中我们可以直接说那个默认的eosio.bios,该合约可以让你控制其他账户的资源分配和API调用。在公链中,该合约用于管理合约的带宽、内存、CPU。
eosio.bios合约位于 ${EOSIO_SOURCE}/build/contracts/eosio.bios.
我们使用默认账户eosio来部署合约:
$ cleos set contract eosio build/contracts/eosio.bios -p eosio@active
Reading WAST...
Assembling WASM...
Publishing contract...
executed transaction: 414cf0dc7740d22474992779b2416b0eabdbc91522c16521307dd682051af083 4068 bytes 10000 cycles
# eosio <= eosio::setcode {"account":"eosio","vmtype":0,"vmversion":0,"code":"0061736d0100000001ab011960037f7e7f0060057f7e7e7e...
# eosio <= eosio::setabi {"account":"eosio","abi":{"types":[],"structs":[{"name":"set_account_limits","base":"","fields":[{"n...
部署完成后我们看到两个操作,eosio::setcode和eosio::setabi.
其中code表示合约如何运行,abi描述参数如何在二进制和json之间进行转换。
-p eosio@active表示 需要eosio 账户的active授权来签名该操作,签名使用eosio账户导入到钱包的私钥。
部署完基本的系统合约后,我们可以创建我们自己的账户,现在创建两个账户 user和tester。
$ cleos create key --to-console
Private key: 5HwsEkmXSuhqKkZVdF7mitHhKohBs96jCRYqMFkmMunU4NdJnW6
Public key: EOS5ZuvbB2XL5hDZteALbL8xhVjU2v5c6ZwB68xxBXJ2mJJWEYB8K
$ cleos wallet import --private-key 5HwsEkmXSuhqKkZVdF7mitHhKohBs96jCRYqMFkmMunU4NdJnW6
imported private key for: EOS5ZuvbB2XL5hDZteALbL8xhVjU2v5c6ZwB68xxBXJ2mJJWEYB8K
$ cleos create account eosio user EOS5ZuvbB2XL5hDZteALbL8xhVjU2v5c6ZwB68xxBXJ2mJJWEYB8K EOS5ZuvbB2XL5hDZteALbL8xhVjU2v5c6ZwB68xxBXJ2mJJWEYB8K
executed transaction: eba1e88928d468dc3edc4ada71155c05fdd5f054a9482ca4eaf376093b4310 200 bytes 216 us
# eosio <= eosio::newaccount {"creator":"eosio","name":"user","owner":{"threshold":1,"keys":[{"key":"EOS5ZuvbB2XL5hDZteALbL8x...
$ cleos create account eosio tester EOS5ZuvbB2XL5hDZteALbL8xhVjU2v5c6ZwB68xxBXJ2mJJWEYB8K EOS5ZuvbB2XL5hDZteALbL8xhVjU2v5c6ZwB68xxBXJ2mJJWEYB8K
executed transaction: 30fc9b69922885ec1b7f4c2e7dd55ab1461603f4a09d4a51e7a11a8c1bae3dfa 200 bytes 216 us
# eosio <= eosio::newaccount {"creator":"eosio","name":"use22ssr","owner":{"threshold":1,"keys":[{"key":"EOS5ZuvbB2XL5hDZteALbL8x...
查询我们创建的用户
$ cleos get accounts EOS5ZuvbB2XL5hDZteALbL8xhVjU2v5c6ZwB68xxBXJ2mJJWEYB8K
{
"account_names": [
"tester",
"user"
]
}
经过上述步骤后,我们本地的私链基本搭建完成。
平台已经有了,我们需要的是基于该平台开发一些去中心化应用,而其中的合约开发是DAPP的核心,接下来我们一起来学习EOS上的合约开发。