超级节点 EOS3.0 测试网络组建-EOS 中文社区特辑

lome · 2018年04月10日 · 最后由 dnbstarz 回复于 2018年08月22日 · 15175 次阅读
本帖已被设为精华帖!

EOS3.0测试网络组建-EOS中文社区特辑

声明:本文由EOS中文社区原创首发,转载请标明原文出处.

摘要

EOS 3.0已经发布,EOS中文社区决定组建一个测试网络用于EOS3.0的开发.这篇文章主要讲解EOS测试网络组建的过程,其中包括EOS的节点配置,运行,组网等,关于EOS3.0的安装,EOS中文社区(eosfans.io)会上传国内Docker镜像,及相关教程,本文不再赘述.

EOS3.0配置

config.ini的设置

由于整个网络的运行需要一个节点先产生创世区块,进行区块链网络的初始化。所以该节点在链静默条件下需要能生产区块, 所以要将enable-stale-production配置项设置为true.

EOS区块链的创始账号是eosio,由于eosio的密匙,已经公布出来,所以在开启网络之前我们要修改eosio的密匙对。

密匙对可以在本地生成,也可以使用生成工具生成。把密匙对改为所生成的密匙对。

例如你生成的密匙对为:

私钥:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
公钥:EOS5tfo9VMQcpjK3BWwzKQDP9Z4Xb3G5SWQVBZu2yP6e4hpH2A9iw

将密匙加入配置文件:

private-key = ["公钥","私钥"]

其他的配置如下:

get-transactions-time-limit = 3
genesis-json = “genesis.json”
block-log-dir = "blocks"
shared-file-dir = "blockchain"
shared-file-size = 8192
http-server-address = 0.0.0.0:8888
access-control-allow-credentials = false
# 这里填写你自己的服务器地址和监听的端口, 一般是 IP:9876
p2p-server-address =
agent-name = ""
send-whole-blocks = 1
allowed-connection = any
log-level-net-plugin = info
max-clients = 25
connection-cleanup-period = 30
network-version-match = 0
enable-stale-production = true
required-participation = 33
# 这里填写一对密钥对, 建议用全新的: https://eostea.github.io/eos-generate-key/
private-key = ["EOS5tfo9VMQcpjK3BWwzKQDP9Z4Xb3G5SWQVBZu2yP6e4hpH2A9iw","xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"]
plugin = eosio::producer_plugin
plugin = eosio::chain_api_plugin
plugin = eosio::wallet_api_plugin
plugin = eosio::account_history_api_plugin
plugin = eosio::http_plugin
# 这里填写节点用户名
producer-name =

genesis.json配置

genesis.json的配置如下:

{
  "initial_timestamp": "2018-04-06T12:00:00.000",
  "initial_key": "EOS5tfo9VMQcpjK3BWwzKQDP9Z4Xb3G5SWQVBZu2yP6e4hpH2A9iw",
  "initial_configuration": {
    "base_per_transaction_net_usage": 100,
    "base_per_transaction_cpu_usage": 500,
    "base_per_action_cpu_usage": 1000,
    "base_setcode_cpu_usage": 2097152,
    "per_signature_cpu_usage": 100000,
    "per_lock_net_usage": 32,
    "context_free_discount_cpu_usage_num": 20,
    "context_free_discount_cpu_usage_den": 100,
    "max_transaction_cpu_usage": 10485760,
    "max_transaction_net_usage": 104857,
    "max_block_cpu_usage": 104857600,
    "target_block_cpu_usage_pct": 1000,
    "max_block_net_usage": 1048576,
    "target_block_net_usage_pct": 1000,
    "max_transaction_lifetime": 3600,
    "max_transaction_exec_time": 0,
    "max_authority_depth": 6,
    "max_inline_depth": 4,
    "max_inline_action_size": 4096,
    "max_generated_transaction_count": 16
  },
  "initial_chain_id": "0000000000000000000000000000000000000000000000000000000000000000"
}

注意:genesis.json文件的initial_key必须和config.ini文件中的eosio的公匙一样,不然会导致网络运行不起来。

到此准备工作已经完成。

接下来把网络运行起来,我们来进行下一步的设置。

测试网络的初始化

创建钱包导入密匙

首先我们需要创建一个钱包来存eosio账户的密匙。   

cleos wallet create -n eosfans

执行结果会返回钱包的密匙如下:

Creating wallet: eosfans
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5KJMZ8mneheKXuneuVHL6YWxsipsqmr5yPvmm4nFG5N5bQRvswN"

这里需要保存好钱包的密匙,然后把eosio的密匙导入钱包:

cleos wallet import -n eosfans xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

### 发布eosio.bios智能合约

发布智能合约时请保持钱包在打开状态,如果钱包锁了可以用,需先打开钱包,命令如下:

cleos wallet open -n eosfans
cleos wallet unlock -n eosfans
Password:这里输入密码

接下来我们就可以发布智能合约,命令如下:

cleos set contract eosio contracts/eosio.bios

此时,智能合约发布完成,可以用eosio主账号来创建新的账号。

发行代币

  1. 创建eosio.token账号,命令如下:
cleos create account eosio eosio.token public_key public_key
  1. 将eosio.token的私匙导入钱包。
  2. 发布代币合约: cleos set contract eosio.token contracts/eosio.token 结果如下: Reading WAST... Assembling WASM... Publishing contract... executed transaction: 924fc886136a604f36e726e36cea4324e4949c457077181d30667af5e5a696fd 8024 bytes 2200576 cycles # eosio <= eosio::setcode {"account":"eosio.token","vmtype":0,"vmversion":0,"code":"0061736d01000000018a011660067f7e7f7f7f7f0060057f7... # eosio <= eosio::setabi {"account":"test","abi":{"types":[],"structs":[{"name":"transfer","base":"","fields":[{"name":"from"...
  3. 创建代币:
cleos push action eosio.token create '["eosio", "10000000000.0000 EOS",0,0,0]' -p eosio.token

出现以下结果,就说明代币成功了:

executed transaction: 0a00766ada9f0dee409defce661ad70d9beb2d78ca2f745c7c7ab0efec6649fc  248 bytes  104448 cycles
#          eosio <= eosio.token::create                 {"issuer":"eosio","maximum_supply":"10000000000.0000 EOS","can_freeze":0,"can_recall":0,"can_whitelis...
  1. 发布代币:
cleos push action eosio.token issue '["eosio","1000000000.0000 EOS", "issue"]' -p eosio

此时在网络中已经存在了十亿个EOS代币。

设置BP

  1. 创建BP(Block Producer)账号

创建BP账号,账号是用来设BP的,创建账号这里就不在赘述。(BP:区块生产者)

  1. 设置BP

设置BP的命令如下:

cleos push action eosio setprods '{"version":6, "producers":[{"producer_name":"eostea","block_signing_key":"EOS5wMFMPiD6qbKSZQpJFdEpzvY2yC2o6XLsg97gPPrYHbW4KovjV"}]}' -p eosio

结果如下:

executed transaction: 9b05ff1d246d44cc6c3757f16de093bf2346531d04314d0378cbd2c155d94cae  568 bytes  117760 cycles
#         eosio <= eosio::setprods              {"version":6,"producers":[{"producer_name":"eostea2","block_signing_key":"EOS54stgvUjdSwn8jpLiW1AucR...

给BP发放代币

cleos push action eosio transfer '["eostea","100000.0000 EOS","mome"]' -p eosio 

查看账户余额

cleos get currency balance eosio.token eostea 

返回结果:

100000.0000 EOS

至此EOS测试网络的设置已经完毕,想要了解给更多BP相关的部署和设置等内容请到EOS中文社区wiki查看。

共收到 80 条回复
strahe 将本帖设为了精华贴 04月10日 22:00
3楼 已删除

问一下 cleos push action eosio setprods '{"version":6, "producers":[{"producer_name":"eostea","block_signing_key":"EOS5wMFMPiD6qbKSZQpJFdEpzvY2yC2o6XLsg97gPPrYHbW4KovjV"}]}' -p eosio 这里是 version 6 是什么意思?

是不是我每次添加一个 BP, version 需要+1

测试网络组建的时候,钱包插件关闭,然后连接测试网络,使用不了插件命令该怎么处理

skyhuihui 回复

可以在服务器本地开一个keosd,提供钱包api服务。

Akagi201 回复

version 6,只是一个版本好,没有具体含义

lome 回复

如何去使用呢,可不可以开一篇文档,或者你给我说怎么去弄,我来写也行

skyhuihui 回复

稍后我写一篇好了。

https://eosfans.io/wiki/eos-party-testnet 里说
将 genesis.json 文件拷贝到/data/eos目录, 不需要修改。
此贴说
注意:genesis.json文件的initial_key必须和config.ini文件中的eosio的公匙一样,不然会导致网络运行不起来。
那这个 initial_key 作用是什么,要不要对应

Surou 回复

这个教程是部署测试网络的教程,那个是加入测试网络的教程,使用场景不一样。

cleos push action eosio.token issue '["eosio","1000000000.0000 HAN", "issue"]' -p eosio

Error 3030001: missing required authority
Ensure that you have the related authority inside your transaction!;
If you are currently using 'cleos push action' command, try to add the relevant authority using -p option.
Error Details:
missing authority of haneos

我以eosio.token代币发成功了 但是为什么发布报权限错误呢

bruce 回复

查看一下钱包是否打开

@lome 钱包打开也报错,我看上面操作有一步是将eosio的key导入钱包中,但是我看说明是创建钱包会自动导入默认eosio的key。不知道是不是这里出问题

你好,我想问一下这个方法搭建的测试网络,同局域网的其他机器可以连接并且同步区块吗?

chuanhui 回复

网络通常没问题的

strahe 回复

你好,比如我的ip是1.2.3.4,我的节点是BP节点,另外的节点要连接同步我的区块,需要修改那些配置选项

strahe 欢迎加入 EOS 中文社区测试网络 Party 中提及了此贴 05月04日 15:42
chuanhui 回复

我也想组件一个自己的局域网,请问你组成功了吗,能不能说说!

lemon 回复

还没有,感觉3.0是只能发布合约代币

@lome 如果想在局域网搭建一个eos私有测试网络,同局域网的其他机器可以连接同步区块的那种,应该怎么做哈,希望您可以提供一些帮助,谢谢

chuanhui 回复

https://eosfans.io/topics/265 这个加上网站的wiki基本上就可以搞定。

lome 回复

还是有点不明白,请问能不能写个完整的教程,谢谢

@lome 按这个教程,nodes启动之后不产块了

停在这个界面了,麻烦提示一下我哪里出错了哈

chuanhui 回复

没有错,你设置的bp没有出块。

lome 回复

@lome 没明白,这个字段enable-stale-production不是设置为true了么,如果要出块应该怎么设置

@lemon 你的局域网测试环境跑起来了没,我的其他节点不能连接出块节点同步区块

chuanhui 回复

还没,我还没搞明白到底他们的链接方式,投票方式等。。。

貌似 config.ini 中必须 producer-name = eosio,不然没法启动

Surou 回复

如果 enable-stale-production = true的情况下 , 就要设置 producer-name = eosio 否则无法启动。但如果是设置了多 BP的情况下,就要将其配置成其他的值。

VincentShi 回复

是不是一个EOS网络整体 只有第一个BP需要配置 enable-stale-production = true

@lome 我的另一个申请bp账户是kg,在执行给bp发代币的时候出错了

这个是为什么,哪里写错了哈

chuanhui 回复

transfer操作的内容是from,to,quantity,memo你少了一个

lome 回复

我看了abi的transfer操作,您说的对,可是我这样执行,结果还是这个错误

37楼 已删除

我这样没问题呀!一点问题都没有

$ cleos set contract eosio eosio.token/
Reading WAST...
Assembling WASM...
Publishing contract...
executed transaction: 08939a994251e3d0fcafe69125c11cbedc76061e3afc381fc86216d68488fb4f  8016 bytes  2200576 cycles
#         eosio <= eosio::setcode               {"account":"eosio","vmtype":0,"vmversion":0,"code":"0061736d01000000018a011660067f7e7f7f7f7f0060057f...
#         eosio <= eosio::setabi                {"account":"eosio","abi":{"types":[],"structs":[{"name":"transfer","base":"","fields":[{"name":"from...
lome@lome:~/eos/build/contracts$ cleos push action eosio create '["eosio","100000 TEA",0,0,0]' -p eosio
executed transaction: 46f19941e20fb4bc4fd9472e0ce8737427e07714bb663b1c239b1791c237c64c  248 bytes  104448 cycles
#         eosio <= eosio::create                {"issuer":"eosio","maximum_supply":"100000 TEA","can_freeze":0,"can_recall":0,"can_whitelist":0}
lome@lome:~/eos/build/contracts$ cleos push action eosio issue '["eosio","100000 TEA","issue"]' -p eosio
executed transaction: 48f57b6ab8b65ca9ee73d03c468de4126a834107516244e564cd1d2670f9c3f8  256 bytes  107520 cycles
#         eosio <= eosio::issue                 {"to":"eosio","quantity":"100000 TEA","memo":"issue"}
>> issue
lome@lome:~/eos/build/contracts$ cleos push action eosio transfer '["eosio","eostea","1000 TEA","test"]' -p eosio
executed transaction: d57b0865af88eef01a74e93f1146c0736a8b585435497ff11c9414387213b9fc  264 bytes  109568 cycles
#         eosio <= eosio::transfer              {"from":"eosio","to":"eostea","quantity":"1000 TEA","memo":"test"}
>> transfer
#        eostea <= eosio::transfer              {"from":"eosio","to":"eostea","quantity":"1000 TEA","memo":"test"}

@lome 这个eosio.token合约发布了之后的命令里的合约名字段怎么变成了eosio,比如回复里这个

chuanhui 回复

这个字段是发布合约的用户名。

@lome 我发现本来是eosio账户在出块,cleos push action eosio setprods 设置另外的账户出块之后,eosio账户就不出块了,不是轮流出块的吗,这么是操作错误吗,还是本来就是这样

chuanhui 回复

那是因为你没有把eosio设置成bp

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册