区块链节点

节点是区块链上的执行单元。多个节点彼此连接,构成一个P2P网络,承载了区块链上的通信,计算和存储。节点入网后(加入联盟),成为区块链上的一个共识单位。多个节点参与共识,确保了区块链上交易的一致。

节点文件目录、分类

FISCO-BCOS的节点包含了下列必要的文件。此处不列举节点在运行时生成的文件。

  1. node0
  2. |-- genesis.json #创世块文件(创世块信息,god账号,创世节点)
  3. |-- config.json #节点总配置文件(IP,端口,共识算法)
  4. |-- log.conf #节点日志配置文件(日志格式,优先级)
  5. |-- start.sh #节点启动脚本
  6. |-- stop.sh #节点停止脚本
  7. |-- data
  8. | |-- bootstrapnodes.json #节点启动时需访问的peers列表
  9. | |-- ca.crt #链根证书私钥
  10. | |-- agency.crt #机构证书私钥
  11. | |-- node.crt #节点证书私钥
  12. | |-- node.ca
  13. | |-- node.csr
  14. | |-- node.json
  15. | |-- node.key
  16. | |-- node.nodeid
  17. | |-- node.param
  18. | |-- node.private
  19. | |-- node.pubkey
  20. | `-- node.serial #节点证书序列号
  21. |-- keystore
  22. |-- fisco-bcos.log #节点启动日志
  23. `-- log #节点运行日志目录

其中,按类型归类:

  • 配置文件:genesis.json、config.json、log.conf、bootstrapnodes.json
  • 证书文件:ca.crt、agency.crt、node.crt、node.csr、node.key、node.private、node.pubkey
  • 功能文件:node.json
  • 信息文件:node.nodeid、node.serial、node.ca
  • 日志文件:fisco-bcos.log、log文件夹
  • 操作脚本:start.sh、stop.sh

配置文件

genesis.json

genesis.json中配置创世块的信息,是节点启动必备的信息。

  1. {
  2. "nonce": "0x0",
  3. "difficulty": "0x0",
  4. "mixhash": "0x0",
  5. "coinbase": "0x0",
  6. "timestamp": "0x0",
  7. "parentHash": "0x0",
  8. "extraData": "0x0",
  9. "gasLimit": "0x13880000000000",
  10. "god":"0xf78451eb46e20bc5336e279c52bda3a3e92c09b6",
  11. "alloc": {},
  12. "initMinerNodes":["d23058c33577f850832e47994df495c674ba66273df2fcb1e6ee7d7e1dbd7be78be2f7b302c9d15842110b3db6239da2aa98ddf68e512b452df748d3d3e4c1cd"]
  13. }

字段说明

配置项说明
timestamp创世块时间戳(毫秒)
god内置链管理员账号地址(填入<u>2.2 生成god账号</u> 小节中生成的地址)
alloc内置合约数据
initMinerNodes创世块节点NodeId(填入<u>2.3 生成节点身份NodeId</u>小节中生成NodeId)

config.json

节点的总配置文件,配置节点的IP,端口,共识算法,data目录等等

  1. {
  2. "sealEngine": "PBFT",
  3. "systemproxyaddress":"0x919868496524eedc26dbb81915fa1547a20f8998",
  4. "listenip":"127.0.0.1",
  5. "cryptomod":"0",
  6. "rpcport": "8545",
  7. "p2pport": "30303",
  8. "channelPort": "8891",
  9. "wallet":"./data/keys.info",
  10. "keystoredir":"./data/keystore/",
  11. "datadir":"./data/",
  12. "vm":"interpreter",
  13. "networkid":"12345",
  14. "logverbosity":"4",
  15. "coverlog":"OFF",
  16. "eventlog":"ON",
  17. "statlog":"OFF",
  18. "logconf":"./log.conf"
  19. }

字段说明

注意:rpcport 和 channelPort 仅限于被机构内的监控、运维、sdk等模块访问,切勿对外网开放

配置项说明
sealEngine共识算法(可选PBFT、RAFT、SinglePoint)
systemproxyaddress系统路由合约地址(生成方法可参看部署系统合约)
listenip节点监听IP
cryptomod落盘加密模式,默认为0,0:不加密,1:本地key加密,2:key center
rpcportRPC监听端口(若在同台机器上部署多个节点时,端口不能重复)
p2pportP2P网络监听端口(若在同台机器上部署多个节点时,端口不能重复)
channelPort链上链下监听端口(若在同台机器上部署多个节点时,端口不能重复)
wallet钱包文件路径
keystoredir账号文件目录路径
datadir节点数据目录路径
vmvm引擎 (默认 interpreter )
networkid网络ID
logverbosity日志级别(级别越高日志越详细,>8 TRACE,4<=x<8 DEBUG日志,<4 INFO日志)
coverlog覆盖率插件开关(ON或OFF)
eventlog合约日志开关(ON或OFF)
statlog统计日志开关(ON或OFF)
logconf日志配置文件路径(日志配置文件可参看日志配置文件说明)

log.conf

log.conf中配置节点日志生成的格式、路径和优先级。

  1. * GLOBAL:
  2. ENABLED = true
  3. TO_FILE = true
  4. TO_STANDARD_OUTPUT = false
  5. FORMAT = "%level|%datetime{%Y-%M-%d %H:%m:%s:%g}|%msg"
  6. FILENAME = "./log/log_%datetime{%Y%M%d%H}.log"
  7. MILLISECONDS_WIDTH = 3
  8. PERFORMANCE_TRACKING = false
  9. MAX_LOG_FILE_SIZE = 209715200 ## 200MB - Comment starts with two hashes (##)
  10. LOG_FLUSH_THRESHOLD = 100 ## Flush after every 100 logs
  11.  
  12. * FATAL:
  13. ENABLED = false
  14. TO_FILE = false
  15.  
  16. * ERROR:
  17. ENABLED = true
  18. TO_FILE = false
  19.  
  20. * WARNING:
  21. ENABLED = true
  22. TO_FILE = false
  23.  
  24. * INFO:
  25. ENABLED = true
  26. TO_FILE = false
  27.  
  28. * DEBUG:
  29. ENABLED = false
  30. TO_FILE = false
  31.  
  32. * TRACE:
  33. ENABLED = false
  34. TO_FILE = false
  35.  
  36. * VERBOSE:
  37. ENABLED = false
  38. TO_FILE = false

字段说明

配置项说明
FORMAT日志格式,典型如%level
FILENAME例如/mydata/nodedata-1/log/log_%datetime{%Y%M%d%H}.log
MAX_LOG_FILE_SIZE最大日志文件大小
LOG_FLUSH_THRESHOLD超过多少条日志即可落盘

bootstrapnodes.json

配置节点启动时主动去连接的节点。在连接成功后,节点会自动同步彼此的peers,进而连接更多的节点。

  1. {"nodes":[
  2. {"host":"127.0.0.1","p2pport":"30303"},
  3. {"host":"127.0.0.1","p2pport":"30304"}
  4. ]}

证书文件

参考证书说明

功能文件

node.json

节点注册入网需要提供的文件,在生成节点证书时自动生成。

  1. {
  2. "id":"d23058c33577f850832e47994df495c674ba66273df2fcb1e6ee7d7e1dbd7be78be2f7b302c9d15842110b3db6239da2aa98ddf68e512b452df748d3d3e4c1cd",
  3. "name":"node0",
  4. "agency":"test_agency",
  5. "caHash":"A809F269BEE93DA4"
  6. }

信息文件

node.nodeid

保存节点nodeid信息,在生成节点证书时自动生成。

  1. d23058c33577f850832e47994df495c674ba66273df2fcb1e6ee7d7e1dbd7be78be2f7b302c9d15842110b3db6239da2aa98ddf68e512b452df748d3d3e4c1cd

node.serial

保存节点证书的序列号,在生成节点证书时自动生成。

  1. A809F269BEE93DA4

日志文件

fisco-bcos.log

节点的启动日志。若节点无法启动时,查看此日志。

log文件夹

节点运行时打印出的日志,按照日志优先级,存放于此。

  1. log/
  2. |-- debug_log_2018081319.log
  3. |-- error_log_2018081319.log
  4. |-- fatal_log_2018081319.log
  5. |-- info_log_2018081319.log
  6. |-- log_2018081319.log #全部的日志
  7. |-- stat_log_2018081319.log #统计日志
  8. |-- trace_log_2018081319.log
  9. |-- verbose_log_2018081319.log
  10. `-- warn_log_2018081319.log

操作脚本

start.sh

必须cd到脚本所在目录下才能正确运行此脚本。执行后,节点在后台被启动。

  1. cd /mydata/node0
  2. sh start.sh

stop.sh

与start.sh配合,必须cd到脚本所在目录下才能正确使用此脚本停掉节点。

  1. cd /mydata/node0
  2. sh stop.sh