EOS合约开发1-开发环境搭建

前言

EOS目前的学习资料可以参考官方门户:https://developers.eos.io/ ,在环境搭建或者开发中遇到其他问题是尽量去github 上的 Issues寻找答案。

开发环境搭建

以下示例基于MacOS 10.13.4上测试

1.下载代码

git clone https://github.com/EOSIO/eos --recursive

2.运行构建脚本

cd eos
./eosio_build.sh

脚本运行完成后安装EOSIO

./eosio_install.sh

安装成功后控制台提示,注意观察。

3.安装合约开发环境 CDT(Contract Development Toolkit)

git clone --recursive https://github.com/eosio/eosio.cdt 
cd eosio.cdt
./build.sh
sudo ./install.sh

在1-3 步骤中如果出现ssl错误,换个网络或者检查是不是本机代理等问题,由于我公司网络是加了代理和支持IPv6,经常更新版本的时候出现SSL问题。

4.启动本地节点

nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin

5.测试获取当前节点信息

$ 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"
}

6.创建钱包

钱包是私钥存储的地方,并授权区块链上的相关操作。

创建默认钱包

$ 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

7.部署BIOS Contract

现在,我们已经有了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账户导入到钱包的私钥。

8.创建账户

部署完基本的系统合约后,我们可以创建我们自己的账户,现在创建两个账户 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上的合约开发。

你可能感兴趣的:(EOS相关)