eosio 编译与部署
1. 名词解释
创世节点(BIOS) 用于创建初始区块,加载基础合约,供其它节点同步连接。
矿工节点(BP) 主要用于生产同步区块,计算合约产生的费用归矿工账号所有。
查询节点 不产生区块,同步区块信息,提供区块信息查询功能。
私钥 用来进行签名操作,私钥可以生成唯一对应公钥。
公钥 用来对私钥的签名进行验证。
钱包 生成和保存私钥的地方,当需要进行签名操作时,会从钱包读取私钥列表,进行签名。
带宽 带宽分为cpu带宽和net带宽两种,每次执行合约都会消耗一定的带宽(从账号中扣取)。
合约 一段在链上可执行代码,绑定在账号上,每个账号只能绑定一份合约。
账号 存储用户信息,包括余额、带宽、合约(如果有)等。
总票数 总票数=总发行的货币数量。
投票 投票者抵押货币投票给矿工,当矿工投票数大于总票数的15%时创世节点停止产生区块,转由矿工生产区块。
所谓的矿工节点与查询节点,只是为了区分是否生产区块的不同配置。
2. 节点代码编译、程序安装
注意:后面编译依赖GIT,所以务必保证代码根目录的.git完整,以及系统安装有git。
以下以ubuntu系统为例,其它系统步骤类似。
先安装GIT,如果已经安装则忽略这一步
sudo apt update && sudo apt install git -y
从GIT上克隆最新代码
git clone https://github.com/eosio/eos --recursive --depth 1
使用eosio_build.sh自动编译
脚本会检查系统依赖库,并自动安装,请注意管理员权限提示,如果下载依赖库时中断请检查网络状态,然后再次执行。
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打包和安装
编译成功会出现'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
参数说明:
brewmac系统debubuntu系系统rpmredhat系系统
重新编译
如果有修改代码,或者进行版本更新,请先关闭当前运行的钱包和节点程序,以及清除安装到系统的想着程序,再编译。pkill -2 keosd nodeos
#ubuntu
sudo apt remove eosio
#redhat
sudo yum remove eosio
3. 默认配置文件所在目录
Linux: ~/.local/share/eosio/nodeos/config
Mac: ~/Library/Application Support/eosio/nodeos/config
4. 创建默认钱包和公私钥
启动钱包服务
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]
5. 通用配置
| 参数名 | 示例 | 说明 |
|---|---|---|
| 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" |
6. 创世节点配置
6.1. 启动参数配置
创建eosio系统账号的公私钥,参见4. 创建钱包和公私钥
修改genesis.json的initial_key为上一步生成的公钥
启动节点,注意填写第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
6.2. 部署系统合约
下载编译合约编译器
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
7. 矿工节点配置
1. 注册矿工账号
创建矿工账号的公私钥,参见4. 创建钱包和公私钥
创建矿工账号
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
2. 启动参数配置
创建eosio系统账号的公私钥,参见创建钱包和公私钥
修改genesis.json的initial_key为创世节点(BIOS)生成的公钥
启动节点,注意填写第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"
8. 查询节点配置
查询节点配置与矿工节点配置类似,只是不注册成矿工,查询节点常用来数据查询。建议开启mongo_db_plugin插件。
mongo_db_plugin是保存区块交易信息到mongodb的插件。
假设已知bios节点192.168.0.56:9876,BP节点192.168.0.57:9876、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
9. 建议
从安全角度来说,不要私钥泄露给他人,知道账户私钥后,可以随意操纵账户。
如果使用助记词生成的私钥,请使用复杂度较高的助记词。
上面传入很多参数都是演示用的,如果正式部署,建议使用配置文件的方式。
建议使用SIGINT信号来关闭节点,防止程序产生脏数据。
pkill -2 keosd nodeos
如果有脏数据产生,请使用--replay-blockchain参数或者--delete-all-blocks参数启动节点,重新同步数据。
节点启动前,请确认时间及时区正确,时间有偏移会影响区块数据验证。
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
eosio 编译与部署的更多相关文章
- Spark入门实战系列--2.Spark编译与部署(上)--基础环境搭建
[注] 1.该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取: 2.Spark编译与部署将以CentOS 64位操作系统为基础,主要是考虑到实际应用 ...
- Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .编译Hadooop 1.1 搭建环境 1.1.1 安装并设置maven 1. 下载mave ...
- Spark入门实战系列--2.Spark编译与部署(下)--Spark编译安装
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .编译Spark .时间不一样,SBT是白天编译,Maven是深夜进行的,获取依赖包速度不同 ...
- Windows Phone 8初学者开发—第8部分:理解编译和部署
原文 Windows Phone 8初学者开发—第8部分:理解编译和部署 第8部分:理解编译和部署 原文地址: http://channel9.msdn.com/Series/Windows-Phon ...
- Spark编译与部署
Spark入门实战系列--2.Spark编译与部署(上)--基础环境搭建 [注] 1.该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取: 2.S ...
- Qt 5.9.4 如何静态编译和部署?
Qt 5.9.4 如何静态编译和部署? MSVC2015 x86 静态编译 Qt 部署静态库 VS2015 部署静态库 1. MSVC2015 x86 静态编译 1.1 Qt 官网下载最新源代码 立即 ...
- 使用Remix编译和部署以太坊智能合约
Remix 是一個开源的 Solidity 智能合约开发环境,提供基本的编译.部署至本地或测试网络.执行合约等功能.Solidity 是 以太坊Ethereum 官方设计和支持的开发语言,专门用于 ...
- Spark1.0.0 源码编译和部署包生成
问题导读:1.如何对Spark1.0.0源码编译?2.如何生成Spark1.0的部署包?3.如何获取包资源? Spark1.0.0的源码编译和部署包生成,其本质只有两种:Maven和SBT,只不过针对 ...
- RHEL6 最小化系统 编译安装部署zabbix (mysql)
RHEL6 最小化系统 编译安装部署zabbix (mysql)官方说明详细见:https://www.zabbix.com/documentation/4.0/manual/installation ...
随机推荐
- 2019-08-09 纪中NOIP模拟B组
T1 [JZOJ1035] 粉刷匠 题目描述 windy有N条木板需要被粉刷. 每条木板被分为M个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一 ...
- linux-安装、启动nginx
1.下载安装pcre库 pcre是一个正则表达式库,nginx的rewrite模块需要依赖该库. 下载地址:http://www.pcre.org/ wget https://ftp.pcre.org ...
- 洛谷P1177 【模板】快速排序
https://www.luogu.org/problem/P1177 #include<bits/stdc++.h> using namespace std; int n; multis ...
- MySQL | linux中数据库导出和导入
一.数据库导出(深坑) 命令:mysqldump -u用户名 -p密码 要导出的数据库 > 导出之后的文件.sql mysqldump -uroot -p database_01 > da ...
- 错误:pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.
pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', ...
- 赋值SQL语句
UPDATE TAB_DEV_MS SET DT_DETECTION_STARTTIME = TO_DATE ( '2017-01-01 00:00:00', 'YYYY-MM-DD HH24:MI: ...
- nginx挂了怎么办
1.什么是502 bad gateway 报错: 简单来说 502 是报错类型代码 bad gateway 错误的网关. 2.产生错误的原因: 连接超时 我们向服务器发送请求 由于服务器当前连接太多, ...
- B1027 打印沙漏
题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805294251491328 1027 打印沙漏 (20 分) ...
- vue项目接入百度地图
方法一 :使用第三方工具 vue-baidu-map 安装命令: yarn add vue-baidu-map --save 文档地址:https://dafrok.github.io/vue-bai ...
- Ad Hoc类问题
__________________________________ Ad Hoc类问题的方法:(1)机理分析法.分析题目描述,推出算法. (2)统计分析法.追寻最终的数学模型. Problem 1: ...