投票 投票者抵押货币投票给矿工,当矿工投票数大于总票数的15%时创世节点中止产生区块,转由矿工生产区块。node
所谓的矿工节点与查询节点,只是为了区分是否生产区块的不一样配置。ios
注意:后面编译依赖GIT,因此务必保证代码根目录的.git完整,以及系统安装有git。
如下以ubuntu系统为例,其它系统步骤相似。git
先安装GIT,若是已经安装则忽略这一步github
sudo apt update && sudo apt install git -y
从GIT上克隆最新代码mongodb
git clone https://github.com/eosio/eos --recursive --depth 1
使用eosio_build.sh自动编译json
脚本会检查系统依赖库,并自动安装,请注意管理员权限提示,若是下载依赖库时中断请检查网络状态,而后再次执行。ubuntu
cd eosio export LOCAL_CMAKE_FLAGS="-DEOSIO_ROOT_KEY=EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV -DCORE_SYMBOL_NAME=EOS" ./script/eosio_build.sh
正式环境可使用LOCAL_CMAKE_FLAGS
环境变量指定根公钥EOSIO_ROOT_KEY
和系统货币符号CORE_SYMBOL_NAME
windows
打包和安装api
编译成功会出现'EOSIO'的ASCII图样提示,请执行如下操做,把程序安装到系统,若是出现编译错误,请提交错误提示给相关人员查看解决。安全
cd build/packages bash ./generate_package.sh [brew|deb|rpm] ls #ubuntu sudo dpkg -i eosio-v1.7.3.deb #redhat sudo yum install eosio-v1.7.3.rpm #或者 sudo rpm -ivh eosio-v1.7.3.rpm
参数说明:
brew
mac系统deb
ubuntu系系统rpm
redhat系系统从新编译
若是有修改代码,或者进行版本更新,请先关闭当前运行的钱包和节点程序,以及清除安装到系统的想着程序,再编译。
pkill -2 keosd nodeos #ubuntu sudo apt remove eosio #redhat sudo yum remove eosio
Linux: ~/.local/share/eosio/nodeos/config
Mac: ~/Library/Application Support/eosio/nodeos/config
启动钱包服务
keosd --unlock-timeout 3600 # 3600秒后钱包从新锁定
建立钱包
请保存输出的钱包密码,下次打开钱包时用的到。
cleos wallet create -n default #打开钱包 cleos wallet open -n default
建立公私钥
cleos create key
把上步生成的私钥导入钱包
cleos wallet import -n default --private-key [private key]
参数名 | 示例 | 说明 |
---|---|---|
agent-name | p2p网络中标识本身的节点的名字 | "eosio bios" |
producer-name | 矿工的帐号名 | "eosio" |
signature-provider | 矿工的公钥私钥,用于签名 | EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV =KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3 |
p2p-server-address | p2p服务监听地址,默认监听0.0.0.0:9876 | "0.0.0.0:9876" |
http-server-address | http服务器监听地址,若是不想提供http服务,能够把地址留空,则不http服务不启动。注意不填写会使用默认地址127.0.0.1:8888 | "127.0.0.1:8888" |
enable-stale-production | 启动后当即开始生产块。若是不是BIOS节点,这里填false。 | true |
p2p-peer-address | 其它节点的p2p同步地址,用于同步数据,此参数能够有多个,即链接到多个节点。 | "192.168.0.2:9876" |
启动节点,注意填写第1步生成的公私钥
nodeos --agent-name "eosio bios" --producer-name "eosio" \ --signature-provider [public key]=KEY:[private key] \ --plugin eosio::chain_plugin --plugin eosio::chain_api_plugin \ --p2p-server-address "0.0.0.0:9876" --http-server-address "127.0.0.1:8888" --enable-stale-production
下载编译合约编译器
git clone https://github.com/eosio/eosio.cdt.git --recursive --depth 1 cd eosio.cdt ./build.sh sudo ./install.sh
下载编译合约
git clone https://github.com/eosio/eosio.contracts.git --depth 1 cd eosio.contracts ./build.sh
建立系统帐号
OwnerKey与ActiveKey相同,参见6.1生成的公钥
cleos create account eosio eosio.token [OwnerKey] [ActiveKey] -p eosio cleos create account eosio eosio.msig [OwnerKey] [ActiveKey] -p eosio cleos create account eosio eosio.bpay [OwnerKey] [ActiveKey] -p eosio cleos create account eosio eosio.names [OwnerKey] [ActiveKey] -p eosio cleos create account eosio eosio.ram [OwnerKey] [ActiveKey] -p eosio cleos create account eosio eosio.ramfee [OwnerKey] [ActiveKey] -p eosio cleos create account eosio eosio.saving [OwnerKey] [ActiveKey] -p eosio cleos create account eosio eosio.stake [OwnerKey] [ActiveKey] -p eosio cleos create account eosio eosio.vpay [OwnerKey] [ActiveKey] -p eosio
若是使用LOCAL_CMAKE_FLAGS
参数指定了根公钥,则这里必须相同。
部署货币合约,请确认在合约代码根目录执行,参见6.2.2下载编译合约
cleos set contract eosio.token build/eosio.token -p eosio.token cleos set contract eosio.msig build/eosio.msig -p eosio.msig
建立货币
cleos push action eosio.token create '["eosio", "1000000000000.0000 EOS", 0, 0, 0]' -p eosio.token cleos push action eosio.token issue '["eosio", "1000000000000.0000 EOS", "issue"]' -p eosio
若是使用LOCAL_CMAKE_FLAGS
参数指定了系统货币符号,则这里必须相同。
部署系统合约,请确认在合约代码根目录执行,参见6.2.2下载编译合约
cleos set contract eosio build/eosio.system -p eosio cleos push action eosio init '[0, "4,EOS"]' -p eosio@active cleos push action eosio setpriv '["eosio.msig", 1]' -p eosio@active
建立矿工帐号
cleos system newaccount --stake-net [quantity] --stake-cpu [quantity] --buy-ram-kbytes 8192 \ [creater] [name] [OwnerKey] [ActiveKey] -p [creater] # 参数说明 # creater 矿工帐号的建立者帐号。 # name 矿工帐号的名字。 # quantity 购买带宽的资源,从建立者帐号扣取。 # OwnerKey与ActiveKey相同,矿工帐号的公钥,即上步生成的公钥。 # 示例 cleos system newaccount --stake-net "50.0000 EOS" --stake-cpu "50.0000 EOS" --buy-ram-kbytes 8888888 eosio eosnewbpa \ EOS7n1U9Z2NQeVEvQZYjHCedNXRVWshmmuGH2j3r6bD4c8fH4U8QL EOS7n1U9Z2NQeVEvQZYjHCedNXRVWshmmuGH2j3r6bD4c8fH4U8QL -p eosio
转帐给矿工帐号
cleos transfer [from] [recipient] [amount] [momo] # 参数说明 # from 转帐帐号 # recipient 接收转帐帐号 # amount 金额 # momo 注释 # 示例 cleos transfer eosio eosnewbpa "9000000000.0000 EOS" "trans to eosnewbpa"
注册成矿工
cleos system regproducer [name] [ActiveKey] [url] # 参数说明 # name 矿工帐号 # ActiveKey 矿工帐号的公钥 # url 矿工的网站 #示例 cleos system regproducer eosnewbpa EOS7n1U9Z2NQeVEvQZYjHCedNXRVWshmmuGH2j3r6bD4c8fH4U8QL https://192.168.0.57:8888
抵押相应的资源
cleos system delegatebw [name] [name] [stake_net_quantity] [stake_cpu_quantity] # 参数说明 # name 矿工帐号 # stake_net_quantity 抵押的网络带宽资源 # stake_cpu_quantity 抵押的CPU带宽资源 # 示例 cleos system delegatebw eosnewbpa eosnewbpa '4400000000.0000 EOS' '4400000000.0000 EOS'
投票给本身
cleos system voteproducer prods [voter] [producers] -p [voter] # 参数说明 # voter 矿工帐号 # producers 抵押的网络带宽资源 #示例 cleos system voteproducer prods eosnewbpa eosnewbpa
启动节点,注意填写第1步生成的公私钥
假设已知bios节点192.168.0.56:9876,BP节点192.168.0.58:9876。
nodeos --agent-name "eosnewbpa" --producer-name "eosnewbpa" \ --signature-provider [public key]=KEY:[private key] \ --p2p-server-address "0.0.0.0:9876" --http-server-address "127.0.0.1:8888" \ --p2p-peer-address "192.168.0.56:9876" --p2p-peer-address "192.168.0.58:9876"
查询节点配置与矿工节点配置相似,只是不注册成矿工,查询节点经常使用来数据查询。建议开启mongo_db_plugin插件。
mongo_db_plugin是保存区块交易信息到mongodb的插件。
假设已知bios节点192.168.0.56:9876,BP节点192.168.0.57:987六、192.168.0.58:9876,而且这三个节点都开启了mongo_db_plugin插件。
nodeos --agent-name "eosnewbpb" --producer-name "eosnewbpb" \ --signature-provider [public key]=KEY:[private key] \ --p2p-server-address "0.0.0.0:9876" --http-server-address "127.0.0.1:8888" \ --p2p-peer-address "192.168.0.56:9876" --p2p-peer-address "192.168.0.57:9876" --p2p-peer-address "192.168.0.58:9876" \ --plugin eosio::mongo_db_plugin --mongodb-uri mongodb://127.0.0.1:27017/EOSIO
建议使用SIGINT信号来关闭节点,防止程序产生脏数据。
pkill -2 keosd nodeos
节点启动前,请确认时间及时区正确,时间有偏移会影响区块数据验证。
sudo mv /etc/localtime /etc/localtime.bak sudo ln -s /usr/share/zoneinfo/UTC /etc/localtime # 使用 ntpdate 更新系统时间 sudo apt install ntpdate ntp -y # yum install ntpdate ntp -y sudo timedatectl set-timezone UTC sudo ntpdate -u time.windows.com sudo hwclock --systohc # 写入硬件 # 启动ntpd服务 sudo systemctl enable ntp # systemctl enable ntpd sudo systemctl start ntp # systemctl start ntpd