1. 名词解释

  1. 创世节点(BIOS) 用于创建初始区块,加载基础合约,供其它节点同步连接。

  2. 矿工节点(BP) 主要用于生产同步区块,计算合约产生的费用归矿工账号所有。

  3. 查询节点 不产生区块,同步区块信息,提供区块信息查询功能。

  4. 私钥 用来进行签名操作,私钥可以生成唯一对应公钥。

  5. 公钥 用来对私钥的签名进行验证。

  6. 钱包 生成和保存私钥的地方,当需要进行签名操作时,会从钱包读取私钥列表,进行签名。

  7. 带宽 带宽分为cpu带宽和net带宽两种,每次执行合约都会消耗一定的带宽(从账号中扣取)。

  8. 合约 一段在链上可执行代码,绑定在账号上,每个账号只能绑定一份合约。

  9. 账号 存储用户信息,包括余额、带宽、合约(如果有)等。

  10. 总票数 总票数=总发行的货币数量。

  11. 投票 投票者抵押货币投票给矿工,当矿工投票数大于总票数的15%时创世节点停止产生区块,转由矿工生产区块。

    所谓的矿工节点与查询节点,只是为了区分是否生产区块的不同配置。

2. 节点代码编译、程序安装

注意:后面编译依赖GIT,所以务必保证代码根目录的.git完整,以及系统安装有git。

以下以ubuntu系统为例,其它系统步骤类似。

  1. 先安装GIT,如果已经安装则忽略这一步

    sudo apt update && sudo apt install git -y
  2. 从GIT上克隆最新代码

    git clone https://github.com/eosio/eos --recursive --depth 1
  3. 使用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

  4. 打包和安装

    编译成功会出现'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系系统
  5. 重新编译

    如果有修改代码,或者进行版本更新,请先关闭当前运行的钱包和节点程序,以及清除安装到系统的想着程序,再编译。

    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. 创建默认钱包和公私钥

  1. 启动钱包服务

    keosd --unlock-timeout 3600 # 3600秒后钱包重新锁定
  2. 创建钱包

    请保存输出的钱包密码,下次打开钱包时用的到。

    cleos wallet create -n default
    
    #打开钱包
    cleos wallet open -n default
  3. 创建公私钥

    cleos create key
  4. 把上步生成的私钥导入钱包

    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. 启动参数配置

  1. 创建eosio系统账号的公私钥,参见4. 创建钱包和公私钥

  2. 修改genesis.json的initial_key为上一步生成的公钥

  3. 启动节点,注意填写第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. 部署系统合约

  1. 下载编译合约编译器

     git clone https://github.com/eosio/eosio.cdt.git --recursive --depth 1
    cd eosio.cdt
    ./build.sh
    sudo ./install.sh
  2. 下载编译合约

     git clone https://github.com/eosio/eosio.contracts.git --depth 1
    cd eosio.contracts
    ./build.sh
  3. 创建系统账号

    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参数指定了根公钥,则这里必须相同。

  4. 部署货币合约,请确认在合约代码根目录执行,参见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
  5. 创建货币

    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. 部署系统合约,请确认在合约代码根目录执行,参见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. 注册矿工账号

  1. 创建矿工账号的公私钥,参见4. 创建钱包和公私钥

  2. 创建矿工账号

    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
  3. 转账给矿工账号

    cleos transfer [from] [recipient] [amount] [momo]
    # 参数说明
    # from 转账账号
    # recipient 接收转账账号
    # amount 金额
    # momo 注释 # 示例
    cleos transfer eosio eosnewbpa "9000000000.0000 EOS" "trans to eosnewbpa"
  4. 注册成矿工

    cleos system regproducer [name] [ActiveKey] [url]
    # 参数说明
    # name 矿工账号
    # ActiveKey 矿工账号的公钥
    # url 矿工的网站 #示例
    cleos system regproducer eosnewbpa EOS7n1U9Z2NQeVEvQZYjHCedNXRVWshmmuGH2j3r6bD4c8fH4U8QL https://192.168.0.57:8888
  5. 抵押相应的资源

    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'
  6. 投票给自己

    cleos system voteproducer prods [voter] [producers] -p [voter]
    # 参数说明
    # voter 矿工账号
    # producers 抵押的网络带宽资源 #示例
    cleos system voteproducer prods eosnewbpa eosnewbpa

2. 启动参数配置

  1. 创建eosio系统账号的公私钥,参见创建钱包和公私钥

  2. 修改genesis.json的initial_key为创世节点(BIOS)生成的公钥

  3. 启动节点,注意填写第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. 建议

  1. 从安全角度来说,不要私钥泄露给他人,知道账户私钥后,可以随意操纵账户。

  2. 如果使用助记词生成的私钥,请使用复杂度较高的助记词。

  3. 上面传入很多参数都是演示用的,如果正式部署,建议使用配置文件的方式。

  4. 建议使用SIGINT信号来关闭节点,防止程序产生脏数据。

    pkill -2 keosd nodeos
  5. 如果有脏数据产生,请使用--replay-blockchain参数或者--delete-all-blocks参数启动节点,重新同步数据。

  6. 节点启动前,请确认时间及时区正确,时间有偏移会影响区块数据验证。

    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 编译与部署的更多相关文章

  1. Spark入门实战系列--2.Spark编译与部署(上)--基础环境搭建

    [注] 1.该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取: 2.Spark编译与部署将以CentOS 64位操作系统为基础,主要是考虑到实际应用 ...

  2. Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .编译Hadooop 1.1 搭建环境 1.1.1 安装并设置maven 1. 下载mave ...

  3. Spark入门实战系列--2.Spark编译与部署(下)--Spark编译安装

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .编译Spark .时间不一样,SBT是白天编译,Maven是深夜进行的,获取依赖包速度不同 ...

  4. Windows Phone 8初学者开发—第8部分:理解编译和部署

    原文 Windows Phone 8初学者开发—第8部分:理解编译和部署 第8部分:理解编译和部署 原文地址: http://channel9.msdn.com/Series/Windows-Phon ...

  5. Spark编译与部署

    Spark入门实战系列--2.Spark编译与部署(上)--基础环境搭建   [注] 1.该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取: 2.S ...

  6. Qt 5.9.4 如何静态编译和部署?

    Qt 5.9.4 如何静态编译和部署? MSVC2015 x86 静态编译 Qt 部署静态库 VS2015 部署静态库 1. MSVC2015 x86 静态编译 1.1 Qt 官网下载最新源代码 立即 ...

  7. 使用Remix编译和部署以太坊智能合约

      Remix 是一個开源的 Solidity 智能合约开发环境,提供基本的编译.部署至本地或测试网络.执行合约等功能.Solidity 是 以太坊Ethereum 官方设计和支持的开发语言,专门用于 ...

  8. Spark1.0.0 源码编译和部署包生成

    问题导读:1.如何对Spark1.0.0源码编译?2.如何生成Spark1.0的部署包?3.如何获取包资源? Spark1.0.0的源码编译和部署包生成,其本质只有两种:Maven和SBT,只不过针对 ...

  9. RHEL6 最小化系统 编译安装部署zabbix (mysql)

    RHEL6 最小化系统 编译安装部署zabbix (mysql)官方说明详细见:https://www.zabbix.com/documentation/4.0/manual/installation ...

随机推荐

  1. OpenCV: “vector”: 未声明的标识符和Vector不是模板

    漏写using namespace std: 会出现此错误“vector”: 未声明的标识符或者是将“vector”写成‘Vector’会出现Vector不是模板的错误:改正即可

  2. 转: Struts2中拦截器与过滤器的区别及执行顺序

    当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标准的过滤器链 c) FilterDispatecher会 ...

  3. K8s控制器

    K8s控制器 POD分类 #自主式pod:退出后,不会被创建 #控制器管理的pod:在控制器的生命周期内,始终位置pod的副本数 控制器类型 ReplicationController和Replica ...

  4. 修改linux的MAC地址

    命令修改 步骤如下,但不唯一: 1.临时性的修改: ①依次输入以下命令: /sbin/ifconfig eth0 down /sbin/ifconfig eth0 hw ether 00:0C:29: ...

  5. Oracle允许IP访问配置

    http://www.linuxidc.com/Linux/2014-10/108650.htm 1.oracle服务器下/opt/app/oracle/product/11.2.0/network/ ...

  6. OmniGraffle原型案例 | 某APP产品原型PDF文件分享之二

    1.从 App 首页进入商城 App底部 Tab有社区.商城,我们点击「商城」进入「乐宠商城」,下面简称商城.商城采用的是经典的宫格式导航设计(还有普通列表式.和瀑布流列表式.或两者皆有等),主要有搜 ...

  7. python之文件复制

    python文件复制操作. # -*- coding: utf-8 -*- import shutil import os # file_path = 'C:\\Users\\WT\\Desktop\ ...

  8. 【Python】数值运算函数

  9. 2019-2020-2 20174314王方正 《网络对抗》 Exp0 Kali安装

    本博旨记录安装Kali的具体步骤. 一.Vmware的安装 略. 二.Vmware的配置 选择[文件]-[新建虚拟机]. 出现新建虚拟机导向,按照以下图示配置每一步.

  10. 【转载】在windows下使用gcc编译jni的简单教程

    转自:http://veikr.com/201207/windows_gcc_jni.html 1.安装MinGW,这个可以为windows提供gcc编译环境. 到http://sourceforge ...