EOS在ubuntu16.04搭建私有链(二)

上篇中讲到了私有链nodeos的启动和通过cleos管理wallet钱包。那么EOS怎么通过账户进行相互间的转账呢?EOS与ETH有很大的不同,在EOS中所有的功能都依靠智能合约。EOS主链仅仅是提供了一个平台,如果我们要激活私链,想在私链上完成转账等交易,就需要部署eos的基础合约。eos有几个比较重要的系统合约,是我们必须要部署的,记下来我们将介绍基础合约的部署和账户间转账等基本操作。

1.激活私有链

- eosio.bios:eos的系统启动合约。
- 这个合约是eos很多命令的基础合约,让我们可以直接通过eosio账户控制eos私链。


- eosio.token:eos的发币合约。
- 系统执行这个合约发行EOS,合约实现了指定代币发行给哪个账户、代币最大发行量、转账方法等功能。
- 
- eosio.msig:eos的提案合约。
- EOS持有人可以使用合约方法提出一个提案,其他人可以表决通过或者不通过这个提案,通过这个合约能实现交易的多重签名方案。

- eosio.system:eos的系统命令合约。
- 这个合约几乎实现了eos全部的系统命令,包括创建账户、资源质押、超级节点投票、域名竞拍等功能。

1.1eosio.bios合约部署
eosio.bios合约部署的账号为eosio,所以首先必须保证eosio加入钱包并且钱包处于unlock状态,其部署的命令如下:

cleos set contract eosio ./unittests/contracts/eosio.bios -p eosio
其中 ./unittests/contracts/eosio.bios 表示为该合约在本端的相当路径

部署完成中出现如下界面,则说明部署完成
EOS在ubuntu16.04搭建私有链(二)_第1张图片
1.2创建系统账户
eos的系统账户是用来部署智能合约的,由eosio账户创建,有以下几个账户:

- eosio.bpay:超级节点获取出块奖励的临时代管账户,增发EOS的1%的25%会先转到这个账户
- eosio.msig:用来部署eosio.msig合约
- eosio.names:用来管理域名竞拍
- eosio.ram:用来管理ram买卖
- eosio.ramfee:用来管理ram买卖产生的手续费,每笔买卖扣1%的手续费
- eosio.saving:增发EOS临时存放账户,增发总量 5%,其中80%放在此账户,另外 20%再分成25%和75%,分别给eosio.bpay和eosio.vpay
- eosio.stake:用来管理抵押换取cpu、net资源的EOS
- eosio.token:用来部署eosio.token合约
- eosio.vpay:节点们按照获得投票多少比例获取奖励的临时代管账户,增发EOS的1%的75%会先转到这个账户

注:
1.普通用户的账户名为1-9和26个小写字母的组合,并且长度不能超过13
2.只有系统账户可以带”.”

接下来就以eosio.bpay账户的创建为例进行说明:

创建密钥对:
cleos create key --to-console
	Private key: 5Jwau2z6j8nNE3U8vS5FHQJ1J19UhGeoKXahZGC5GhrpsS5maFC
	Public key: EOS8hnYXX88g8oAnJFQeLPgVJSQShWqLtkr1gnBPNfJmYCHXtuX8T

导入钱包:
cleos wallet import -n eosio.wallet --private-key 5Jwau2z6j8nNE3U8vS5FHQJ1J19UhGeoKXahZGC5GhrpsS5maFC
	imported private key for: EOS8hnYXX88g8oAnJFQeLPgVJSQShWqLtkr1gnBPNfJmYCHXtuX8T

创建用户:
cleos  create  account  eosio  eosio.bpay EOS8hnYXX88g8oAnJFQeLPgVJSQShWqLtkr1gnBPNfJmYCHXtuX8T EOS8hnYXX88g8oAnJFQeLPgVJSQShWqLtkr1gnBPNfJmYCHXtuX8T
	executed transaction: 51d4f0b9879b9953c2ccb99a93fedb80cd38b1a0e9acfccda93d2d25341f13c0  200 bytes  561 us

重复上述操作分别去创建余下的系统账户。

1.3eosio.token合约部署

cleos set contract eosio.token ./unittests/contracts/eosio.token -p eosio.token
返回:
Reading WASM from /home/deangj/Desktop/eos/unittests/contracts/eosio.token/eosio.token.wasm...
Publishing contract...
executed transaction: b6da0ce8f056665a1a663f4649b138fdd1e2ba7270c88ac4e1eafcf189c40d79  9304 bytes  1657 us
#         eosio <= eosio::setcode               {"account":"eosio.token","vmtype":0,"vmversion":0,"code":"0061736d0100000001aa011c60037f7e7f0060047f...
#         eosio <= eosio::setabi                {"account":"eosio.token","abi":"0e656f73696f3a3a6162692f312e310008076163636f756e7400010762616c616e63...

1.4eosio.msig合约部署

cleos set contract eosio.msig ./unittests/contracts/eosio.msig -p eosio.msig
返回:
Reading WASM from /home/deangj/Desktop/eos/unittests/contracts/eosio.msig/eosio.msig.wasm...
Publishing contract...
executed transaction: 7c372cdb5f47117e792123d8f74be0a18dc23a4ef1b8dc58c938b768fb8f4a03  10864 bytes  7191 us
#         eosio <= eosio::setcode               {"account":"eosio.msig","vmtype":0,"vmversion":0,"code":"0061736d0100000001c0011d60057f7e7e7f7f00600...
#         eosio <= eosio::setabi                {"account":"eosio.msig","abi":"0e656f73696f3a3a6162692f312e31001006616374696f6e0004076163636f756e740...

1.5发布EOS代币
调用eosio.token账户下的eosio.token智能合约的create函数。

cleos  push  action  eosio.token  create  '[ "eosio", "1000000000.0000 EOS"]' -p eosio.token

成功如下图:
EOS在ubuntu16.04搭建私有链(二)_第2张图片
cleos push action命令,用来触发eosio.token合约的create函数,代币发行账户是eosio,发行量10亿,代币的符号是EOS。

1.6eosio获取EOS代币
因为EOS的发行人是eosio账户,所以调用issue这个函数,需要eosio账户授权。

cleos  push  action  eosio.token  issue  '[ "eosio", "1000000000.0000 EOS", "test message"]' -p eosio

成功结果如下图:
EOS在ubuntu16.04搭建私有链(二)_第3张图片
查询eosio账户的额代币数额:

命令:
	cleos get table eosio.token eosio accounts
返回:
	{
	  "rows": [{
     	 "balance": "1000000000.0000 EOS"
   	 }
 	 ],
 	 "more": false
	}

1.7eosio.system合约部署
部署该合约的用户为eosio,命令如下:

cleos  set  contract  eosio  contracts/eosio.system  -p  eosio -x 1000

执行成功结果如下图:
EOS在ubuntu16.04搭建私有链(二)_第4张图片
1.8创建账户
这里我们创建账户,将使用cleos system newaccount命令,这是eos上创建普通账户所用的命令,底层实际上调用的是eosio.system合约的newaccount函数。之前提到的cleos create account命令,其实是为了eosio账户创建系统账户提供的命令,需要特殊权限才能执行。

cleos system newaccount  --stake-net  --stake-cpu   --buy-ram-kbytes            

eg:
	cleos system newaccount --stake-net "1.0000 EOS" --stake-cpu "1.0000 EOS" --buy-ram-kbytes 8  eosio chenhao1 EOS8W31XLdUcczdy6paxXjbwTSDpe4GML44PwYosJe1bQLTmVfArz EOS8W31XLdUcczdy6paxXjbwTSDpe4GML44PwYosJe1bQLTmVfArz
	eosio账户创建了一个账户chenhao1 ,为这个新账户抵押了1EOS、1EOS去换取cpu和net资源,付费为这个账户买了ram资源。
	
- 新创建的账户,需要抵押一定的EOS去换取cpu、net资源,需要花费一定EOS去买ram资源,用于交易的发送。用于抵押cpu和net的EOS是可以		赎回的,赎回需要3天时间。
- 资源的分配是按比例的。比如,抵押全网1%的eos,就可以换取全网1%的cpu或者net资源。
- cpu和net资源是可再生的,使用后一天就可恢复,ram是不可再生资源,用完得再买。

在执行上述命令时没,出现如下错误:
在这里插入图片描述
出现上述错误,我在 https://github.com/EOSIO/eos/issues 的网站找到解决的办法,运行

cleos push action eosio init '[0,"4,EOS"]' -p eosio@active
-p eosio@active表示权限

命令后完美解决,执行 cleos get account chenhao1 命令查看账户信息,如下图:
EOS在ubuntu16.04搭建私有链(二)_第5张图片
1.9投票选举超级节点
eos的主链或者私链,初始的时候都是被系统账户eosio控制的。但是,如果想要激活eos的所有功能,则必须投票选举超级节点,且全网投票必须超过发行总量的15%,即1.5个亿。主链上是选举21个超级节点,它们轮流出块。私链上,我们只需要选举一个超级节点,让它出块即可。下面,我们将为大家演示超级节点的选举过程。

a.eosio将1.5亿EOS转账给chenhao1

命令:
	cleos  transfer  eosio  chenhao1  "150000000.0000 EOS"  -p  eosio

结果如下图:
EOS在ubuntu16.04搭建私有链(二)_第6张图片
b.chenhao1将EOS抵押为cpu、net资源,因为只有抵押为资源的EOS才能用于投票

命令:
	cleos  system  delegatebw  eosio  chenhao1  "150000000.0000 EOS"  "10.0000 EOS"

eosio账户为chenhao1账户抵押了1.5亿 EOS去换cpu资源,10 EOS去换net资源。结果如下图:
EOS在ubuntu16.04搭建私有链(二)_第7张图片
c.注册超级用户

生成密钥对:
	cleos create key --to-console
导入钱包:
	cleos wallet import -n eosio.wallet --private-key 5HxLKoLEnNA3dDctmPsbur4tkRxtNxtp3bft36VjZSxr66GLR6y
创建Super用户:
	cleos system newaccount --stake-net "1.0000 EOS" --stake-cpu "1.0000 EOS" --buy-ram-kbytes 8  eosio super EOS8W31XLdUcczdy6paxXjbwTSDpe4GML44PwYosJe1bQLTmVfArz EOS8W31XLdUcczdy6paxXjbwTSDpe4GML44PwYosJe1bQLTmVfArz
设置为超级用户:
	cleos  system  regproducer  super EOS7Wfi31Vh916Vi5WCwNuNfnA3HVymKUyGBrFWceEq3221ysR7Es

执行结果如下图:
EOS在ubuntu16.04搭建私有链(二)_第8张图片
d.投票
chenhao1投票给super,这里的投票是账户行为,等于将chenhao1抵押的全部EOS都投给了super,执行命令如下:

cleos  system  voteproducer  prods  chenhao1  super

执行结果如下图:
在这里插入图片描述
这步执行完毕后,私链就算激活了,这时你会发现eosio账户已经不能出块了,我们需要修改配置文件config.ini,将producer-name替换为super,signature-provider换成super的公私钥对,然后执行nodeos重启节点,这时就是super负责出块了。

2.基本操作

激活了私链之后,我们就解锁了eos全部的功能。下面,我将为大家介绍下EOS上的基本操作,如:查询账户详情、转账、质押资源、投票、查询账户余额等。

2.1账户查询
查询账户,这个命令可以看到账户的基本权限、cpu和net的质押和使用情况。命令如下:

cleos get account 

执行情况:
EOS在ubuntu16.04搭建私有链(二)_第9张图片
2.2转账
命令:

cleos transfer       

执行情况:
在这里插入图片描述
2.3账户余额查询
命令:

cleos get currency balance <发币合约部署的账户>    <代币符号>

执行情况:
在这里插入图片描述
2.4质押EOS换取cpu、net资源
命令:

cleos system delegatebw       

from account和to account相同时,是自己给自己质押资源;不同时,是其他账户帮忙质押资源给自己。执行情况:
在这里插入图片描述
2.5取消资源质押
命令:

cleos  system undelegatebw        

执行情况:
在这里插入图片描述
2.6查看待赎回的资源
取消质押后,EOS并不会马上回到账户余额里,需要等待三天。这时可以在refunds表里查看待赎回的资源。
命令:

cleos get table <合约部署账户>  refunds

执行情况:
EOS在ubuntu16.04搭建私有链(二)_第10张图片
2.7手动触发refund
如果三天后发现EOS还没回到余额里,则需要手动触发refund函数。undelegatebw命令,本质上是在函数里延迟三天调用refund函数,属于合约调合约,有失败的可能。refund函数属于eosio.system合约,所以需要使用cleos push action命令:

cleos push action eosio refund '["account"]'   -p account

因未超过3天,执行失败
2.8注册候选节点
注册为候选超级节点,注册之后其他账户才能为其投票,命令如下:

cleos system regproducer  

执行情况:
在这里插入图片描述
2.9为超级节点投票
命令:

cleos  system  voteproducer  prods   

执行情况:
在这里插入图片描述
2.10查看超级节点投票情况
命令:

cleos system listproducers

执行情况:
EOS在ubuntu16.04搭建私有链(二)_第11张图片
关于更多的cleos执行,请参照官方文档:https://developers.eos.io/eosio-nodeos/docs/overview-1

你可能感兴趣的:(EOS)