搭私链,速成,全面(刚入门适用)

管理员组 缘雨 4月前 137

本教程借鉴夜小白大神搭私链笔记 环境:Ubuntu 16.04, 内存8g EOS版本:1.6.3

看前备注:看此教程需要事先了解大概流程:1,下载了源码,编译,安装。(同一电脑只用装一次,只用换个文件夹启动另一个节点)2,先启动,启动肯定有问题,再关了它,它自动生成的配置文件,修改配置文件。3,启动,ok。4,注册超级节点,投票等等,我搭了10此以上,这步没出过问题。

做前备注:你要做的话,自己预备一大堆公私钥,教程里面的账户每个都要分配一对。

一,下载主网版本

1

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

2

cd eos

3,更新子模块

git submodule update --init --recursive(实测,可有可无,我也不知道为啥)

4

./eosio_build.sh -s "EOS"

(编译,并将主币符号从sys改为EOS)

5

sudo ./eosio_install.sh(执行安装)

二,配置文件(这步最容易晕)

  1. 1,先来讲讲启动的原理:有4个节点,分别是创世节 点和BP1,BP2,BP3。他们都各有自己单独的配置文件,他们之间互相监听就靠配置文件,

  2. 举例:创世节点 http-server-address = 127.0.0.1:8888 暴露的http,http访问链用的地址 p2p-listen-endpoint = 192.168.248.2:9838 本机监听的P2P地址 p2p-peer-address =192.168.248.2:9871 其他的节点P2P地址监听 p2p-peer-address =192.168.248.3:9872 p2p-peer-address =192.168.248.4:9873

    BP1: http-server-address = 127.0.0.1:8889 p2p-listen-endpoint = 192.168.248.2:9871 p2p-peer-address = 192.168.248.2:9838 p2p-peer-address = 192.168.248.3:9872 p2p-peer-address = 192.168.248.4:9873 注:列两个,大概能看出关系了,看不出也没关系,下面还有更详细的。

    2,实际操作

  3. 启动思想:先启动,再杀了,它自己产生config.ini文件,我们只需要修改它即可。

  4. 刚才cd eos 在eos目录中,里面有很多文件,为了避免混乱(特别是同一台服务器玩),我们返回上一层文件夹cd ../。然后创建4个文件夹,分别装4个节点,假如文件夹分别为A,B,C,D。

  5. 进入A文件夹cd A,然后运行 nohup nodeos -e -p eosio --data-dir ./data --config-dir ./config --plugin eosio::chain_api_plugin > eosio.log 2>&1 &

  6. 放心,离成功还早,刚才启动肯定是有问题的,所以我们杀了它pkill nodeos(最好建议kill id号杀,准确无误,万一你一台服务器装了很多就点,那么刚才那命令就杀光光了)。

  7. 杀了它后,我们在当前文件夹能看到一些新东西 图片中的lsf3其实就是eosio.log,日志,名字无所谓啦,重点是dataconfig。data是块数据,我们本来就失败启动,所以,删掉它,rm -rf data;重点来了,进入config文件夹,cd config,里面有一个config.ini文件。你可以使用vim,或者编辑工具,你随意,改一些东西:


这个东西默认是1024,自己玩后面加个0保险,以前我因为这个东西导致私链玩了几个月停掉了

当时是这样停掉的(如上图):占用的内存超出了设定,--filter-on参数会导致内存不足(你的硬件够强大无所谓啦)


上面已经介绍过,你要给外面访问的http地址(EOS暴露的)


本台节点暴露的p2p监听地址


其他节点的P2P端口,需要写进去,它才会去访问其他的节点 其实就是上面说的这个: http-server-address = 127.0.0.1:8889 p2p-listen-endpoint = 192.168.248.2:9871 p2p-peer-address = 192.168.248.2:9838 p2p-peer-address = 192.168.248.3:9872 p2p-peer-address = 192.168.248.4:9873 除了这些,还有以下:


这个如果不是false就改成false


这个是你要启动节点的公钥和私钥


只需要一个超级节点设置为true,全倒后第一个启动这个超级节点 enable-stale-production = true 这个东西稍后的BP1,BP2,BP3的配置中,你选一个设为true,以后节点全倒,第一个启动这个带true的。

三, 现在启动

刚才说了要公私钥,那肯定要钱包 返回上一级目录 cd ../ 启动keosd服务

nohup keosd --plugin eosio::wallet_api_plugin  > wallet.log 2>&1  &

创建秘钥对

cleos create key --to-console

将eosio账户的私钥导入钱包default

cleos wallet import --private-key  5KQwxxxxx

创秘钥对,填秘钥对,导私钥入钱包,钱包就讲这么多吧, 关于钱包还是比较简单的百度搜搜很多。再次强调,自己的公私钥对要准备一堆,备注好各自的名字

现在重点来了

请确认,我们在目录A,而且config文件夹中的config.ini修改完毕。之前的data也删了,那么就启动吧

nohup nodeos -e -p eosio –data-dir ./data –config-dir ./config –plugin eosio::chain_api_plugin > eosio.log 2>&1 &

还是那个命令,但是不一样的味道,如果正常,你运行tail -f eosio.log就可以看到创世节点默默出块了。现在要做的是启动三个节点,让他们注册成超级节点,给他们投票,然后三节点出块,创世节点退休。





别急,后面还多

注意了,下面是我粘贴复制的,ip写你自己的,公私钥写你自己的

别无脑复制粘贴,我创的账户,公钥是我自己的,你没私钥创了账户也用不了,自己生成一大堆公私钥去

加载BIOS合约 用于管理链上的堆栈和非堆栈资源,通过确认用户持有的token控制资源分配,包括带宽、CPU以及内存资源。 cleos -u http://192.168.248.2:8889 set contract eosio eosio.bios -p eosio@active 注:这条命令需要你进入到eos/build/contract目录,因为bios合约在那里


用eosio的秘钥对创建以下9个账户 eosio.bpay:矿工获取出块奖励的临时代管账户,增发EOS的1%的25%会先转到这个账户 eosio.msig:多重签名管理的账户 eosio.names:靓号账户拍卖管理的账户 eosio.ram:内存买卖管理的账户 eosio.ramfee:内存买卖收取手续费的账户,按照每笔交易0.5%的费率收取手续费 eosio.saving:增发EOS临时存放账户,增发总量 5%,其中80%放在此账户,另外 20%再分成25%和75%,分别给eosio.bpay和eosio.vpay eosio.stake:管理EOS抵押的账户 eosio.token:发行和管理token的账户 eosio.vpay:矿工按照获得投票多少比例获取奖励的临时代管账户,增发EOS的1%的75%会先转到这个账户


下面就是创建刚介绍的账户:(注意你的公私钥)

创建合约账户和系统子账户

cleos -u http://192.168.248.2:8889 create account eosio eosio.token EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV -p eosio

cleos -u http://192.168.248.2:8889 create account eosio eosio.msig EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV -p eosio

cleos -u http://192.168.248.2:8889 create account eosio eosio.bpay EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV -p eosio

cleos -u http://192.168.248.2:8889 create account eosio eosio.name EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV -p eosio

cleos -u http://192.168.248.2:8889 create account eosio eosio.ram EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV -p eosio

cleos -u http://192.168.248.2:8889 create account eosio eosio.ramfee EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV -p eosio

cleos -u http://192.168.248.2:8889 create account eosio eosio.saving EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV -p eosio

cleos -u http://192.168.248.2:8889 create account eosio eosio.stake EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV -p eosio

cleos -u http://192.168.248.2:8889 create account eosio eosio.vpay EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV -p eosio


查看公钥下绑定的账户 cleos -u http://192.168.248.2:8889 get accounts EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV 用于验证刚才的操作是否正确


(都在刚才的bios合约目录下) 部署eosio.token合约 cleos -u http://192.168.248.2:8889 set contract eosio.token eosio.token -p eosio.token@active


发币 cleos -u http://192.168.248.2:8889 push action eosio.token create '[ "eosio", "1000000000.0000 EOS"]' -p eosio.token@active


分配代币 cleos -u http://192.168.248.2:8889 push action eosio.token issue '[ "eosio", "200000000.0000 EOS", "init" ]' -p eosio@active


部署eosio.msig合约 cleos -u http://192.168.248.2:8889 set contract eosio.msig eosio.msig -p eosio.msig@active


设置特殊权限 cleos -u http://192.168.248.2:8889 push action eosio setpriv '["eosio.msig", 1]' -p eosio@active


部署eosio.system合约 cleos -u http://192.168.248.2:8889 set contract eosio eosio.system -p eosio@active


创建账户(三个超级节点账户和三个投票账户) lsf1 cleos -u http://192.168.248.2:8889 system newaccount --stake-net "50.0000 EOS" --stake-cpu "50.0000 EOS" --buy-ram-kbytes 102400 eosio lsf1 EOS68a554L2FDPor6ufib5aCzKrVD5QdrowVCK6Z3YSg6Su6SktSN EOS68a554L2FDPor6ufib5aCzKrVD5QdrowVCK6Z3YSg6Su6SktSN -p eosio


lsf2 cleos -u http://192.168.248.2:8889 system newaccount --stake-net "50.0000 EOS" --stake-cpu "50.0000 EOS" --buy-ram-kbytes 102400 eosio lsf2 EOS4zXAz6MPeE4AH3V1H5ZbMfyWeDRSpiJ7LFKLCsrhVGXo6PFrRG EOS4zXAz6MPeE4AH3V1H5ZbMfyWeDRSpiJ7LFKLCsrhVGXo6PFrRG -p eosio


lsf3 cleos -u http://192.168.248.2:8889 system newaccount --stake-net "50.0000 EOS" --stake-cpu "50.0000 EOS" --buy-ram-kbytes 102400 eosio lsf3 EOS74TBmFstT7ACqirKLz3HwAoMth5YxMU4se8akEwR7TuWS8U48W EOS74TBmFstT7ACqirKLz3HwAoMth5YxMU4se8akEwR7TuWS8U48W -p eosio


user1 cleos -u http://192.168.248.2:8889 system newaccount --stake-net "50.0000 EOS" --stake-cpu "50.0000 EOS" --buy-ram-kbytes 102400 eosio user1 EOS6snxB5GECuydKew1HKoGtZM8pCJmCZ85fwfUAJq6STqy8mrCTs EOS6snxB5GECuydKew1HKoGtZM8pCJmCZ85fwfUAJq6STqy8mrCTs -p eosio


user2 cleos -u http://192.168.248.2:8889 system newaccount --stake-net "50.0000 EOS" --stake-cpu "50.0000 EOS" --buy-ram-kbytes 102400 eosio user2 EOS6Wgnkx88YesaAVETJw84fsSkSyLk33HCZeeTeDDuZZuV75Qi2X EOS6Wgnkx88YesaAVETJw84fsSkSyLk33HCZeeTeDDuZZuV75Qi2X -p eosio


user3 cleos -u http://192.168.248.2:8889 system newaccount --stake-net "50.0000 EOS" --stake-cpu "50.0000 EOS" --buy-ram-kbytes 102400 eosio user3 EOS5hAfPZjgMqukfSkyk4QLfSFqtsKd5Rw5dhWzzH2QmyBxQDrPir EOS5hAfPZjgMqukfSkyk4QLfSFqtsKd5Rw5dhWzzH2QmyBxQDrPir -p eosio


注册出块节点候选人 cleos -u http://192.168.248.2:8889 system regproducer lsf1 EOS68a554L2FDPor6ufib5aCzKrVD5QdrowVCK6Z3YSg6Su6SktSN


cleos -u http://192.168.248.2:8889 system regproducer lsf2 EOS4zXAz6MPeE4AH3V1H5ZbMfyWeDRSpiJ7LFKLCsrhVGXo6PFrRG


cleos -u http://192.168.248.2:8889 system regproducer lsf3 EOS74TBmFstT7ACqirKLz3HwAoMth5YxMU4se8akEwR7TuWS8U48W


cleos -u http://192.168.248.2:8889 system regproducer lsf4 EOS58RQNcZMaXh4ZUv9hFD8wDzNMsMYaoyaKVFAToPbZnMZhBN2Mw

查看投票投票情况 由于没有投票,投票率为0 查看出块节点 cleos -u http://192.168.248.2:8889 get schedule cleos -u http://192.168.248.2:8889 system listproducers


说句老实话,我复制粘贴都累的慌 快要成功了,现在,启动BP1,BP2,BP3。就是上面的lsf1,lsf2,lsf3。把他们的公私钥加到相应的config.ini文件中,启动。启动不赘述了,和eosio创世节点一个样。 给user1、user2、user3分别转账 cleos -u http://192.168.248.2:8889 push action eosio.token transfer '["eosio", "user1","50000000.0000 EOS","vote"]' -p eosio


cleos -u http://192.168.248.2:8889 push action eosio.token transfer '["eosio", "user2","50000000.0000 EOS","vote"]' -p eosio


cleos -u http://192.168.248.2:8889 push action eosio.token transfer '["eosio", "user3","50000000.0000 EOS","vote"]' -p eosio


cleos -u http://192.168.248.2:8889 get account user1

给uesr1、user2、user3分别抵押25000000.0000SYS,占系统15% 以下命令分别执行5次,这里有一点就是如果一次抵押数值太大就会越界,具体峰值不知道,刚开始25000000.0000的时候报错


抵押资源 cleos -u http://192.168.248.2:8889 system delegatebw user1 user1 "5000000.0000 EOS" "5000000.0000 EOS"

cleos -u http://192.168.248.2:8889 system delegatebw user2 user2 "5000000.0000 EOS" "5000000.0000 EOS"

cleos -u http://192.168.248.2:8889 system delegatebw user3 user3 "5000000.0000 EOS" "5000000.0000 EOS"


投票 cleos -u http://192.168.248.2:8889 system voteproducer prods user1 lsf1 cleos -u http://192.168.248.2:8889 system voteproducer prods user2 lsf2 cleos -u http://192.168.248.2:8889 system voteproducer prods user3 lsf3 再次查看投票投票情况 投票完成,每个候选节点获得33%的票 cleos -u http://192.168.248.2:8889 system listproducers

投票前,由eosio出块,BP1、BP2、BP3分别同步eosio的出块信息,当投票完成后,BP1、BP2、BP3分别出块,eosio停止出块,eosio同步BP1、BP2、BP3交替出块

这里我解释下:后面的东西比较乱,因为我粘贴复制的夜小白大神的笔记,为什么后面我要复制粘贴呢,因为后面基本不会出错,我只在最容易错的地方,踩了坑的地方,多多备注

干货只留给看到最后的人,嘻嘻!常用命令总结:

  1. pkill nodoes,干掉所有节点(这台服务器上的)

  2. 正常关闭节点方式 kill xxx(nodeos的进程id) 启动也就随便启动了

  3. 出现脏数据(非正常关闭),这就麻烦了,要加 --replay-blockchain --hard-replay-blockchain 时间超级久,它会把链上的所有操作重新确认一遍

  4. 平常正常启动不加 -e,它的意思是强制出块,不过,我之前不知道的时候也没出啥毛病 附件是我的config.ini文件,注意了,每个版本的config.ini文件不通用哟,我以前把1.5.0的用在1.6.3,用不了

未完待续!后期优化,并增加 我教程写的稀烂,所以,遇到问题可以来问我 qq:741862697

上传的附件:
还没有人收藏过本帖~
最新回复 (5)
  • 管理员组 缘雨 4月前
    0 引用 2
    头晕,明天优化增加
  • 一级用户组 fengzi 4月前
    0 引用 3
    老铁,赶紧学学Markdown去,可读性有点低啊
  • 一级用户组 fengzi 3月前
    0 引用 4
    git submodule update --init --recursive  在你切换分支的时候,需要执行一下
  • 一级用户组 fengzi 3月前
    0 引用 5
    启动nodeos时,nohup不需要加,nodeos内部对hup信号已经做了处理,加上&就可以了
  • 管理员组 缘雨 3月前
    0 引用 6
    fengzi 启动nodeos时,nohup不需要加,nodeos内部对hup信号已经做了处理,加上&就可以了
    没深究过这个,好多都是从笔记里拷贝过来滴,懒,哈哈哈
返回