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. Chrome 提标 您的浏览器限制了第三方Cookie...解决方法

    最近升级Chrome后会出现  您的浏览器限制了第三方Cookie,这将影响您正常登录,您可以更改浏览器的隐私设置,解除限制后重试. 解决方法: chrome://flags/ 把这句复制到浏览器回车 ...

  2. C++-hihoCode1546-[快速幂]

    枚举子集,要求子集的min+max<=k,求子集个数,答案对1000000007取模 #include <bits/stdc++.h> using namespace std; ,M ...

  3. HDU-1719 Friend

    刚开始想打个表... 结果我发现我理解错了题目意思,以为a,b必须是两个不同的数字,然后完全无法理解样例的3为什么是friend number...很尴尬就只能去网上找题解,才发现a,b可以相等(太菜 ...

  4. C语言-条件编译使用分析

    1.基本概念 条件编译的行为类似于C语言中的if…else… 条件编译是预编译指示命令,用于控制是否编译某段代码 2.实例分析 条件编译初探     22-1.c #include <stdio ...

  5. python3 yield实现假的多并发

    import time def fun1(): while True: print("fun1") time.sleep(0.1) yield def fun2(): while ...

  6. python3 求一个list的所有子集

    python3 求一个list的所有子集 def PowerSetsBinary(items): N = len(items) for i in range(2 ** N):#子集的个数 combo ...

  7. kruskal算法生成最小生成树

    kurskal算法更适合稀疏图 kruskal算法伪代码: int kruskal(){ 令最小生成树的边权之和为ans, 最小生成树的当前边数为Num_Edge; 将所有边按边权从小到大排序; fo ...

  8. 题解 【Codeforces381A】 Sereja and Dima

    本题是很好的双指针练习题. 关于双指针,详见洛谷日报#73. 我们可以用两个指针l和r表示题中两人接下来要比较的数字,用fl标记下一个将要取的人,并分别用两个计数器统计双方的答案. 因此,我们有了如下 ...

  9. Go_CSP并发模型

    go语言的最大两个亮点,一个是goroutine,一个就是chan了.二者合体的典型应用CSP,基本就是大家认可的并行开发神器,简化了并行程序的开发难度,我们来看一下CSP. 11.1.CSP是什么 ...

  10. windows 安装 cordova

    windows 安装 cordova 参考资料:https://www.cnblogs.com/bpdxqx/p/6061719.html 1.安装nodejs(自动包含npm) 2.在命令行中通过n ...