1. 网络部署

本节内容将手把手教你使用XuperChain搭建一个3节点的区块链网络。帮助开发者掌握XuperChain网络的部署流程。

1.1. 前置阅读

在阅读本节前,请先阅读 XuperChain环境部署XuperChain基本操作 ,了解XuperChain单节点网络部署和基本操作等。

1.2. 准备环境

1. 创建网络部署环境

  1. # 在xuperchain目录执行
  2. make testnet

2. 查看网络部署环境

  1. tree testnet

可以看到如下部署环境,其中有3个节点,分别为node1、node2、node3。

  1. testnet
  2. ├── node1
  3. ├── bin
  4. ├── wasm2c
  5. ├── xchain
  6. └── xchain-cli
  7. ├── conf
  8. ├── contract.yaml
  9. ├── engine.yaml
  10. ├── env.yaml
  11. ├── ledger.yaml
  12. ├── log.yaml
  13. ├── network.yaml
  14. ├── server.yaml
  15. └── xchain-cli.yaml
  16. ├── control.sh
  17. └── data
  18. ├── genesis
  19. ├── poa.json
  20. ├── pow.json
  21. ├── tdpos.json
  22. ├── xpoa.json
  23. ├── xpos.json
  24. └── xuper.json
  25. ├── keys
  26. ├── address
  27. ├── private.key
  28. └── public.key
  29. └── netkeys
  30. ├── cacert.pem
  31. ├── cert.pem
  32. ├── net_private.key
  33. └── private.key
  34. ├── node2
  35. ├── bin
  36. ├── wasm2c
  37. ├── xchain
  38. └── xchain-cli
  39. ├── conf
  40. ├── contract.yaml
  41. ├── engine.yaml
  42. ├── env.yaml
  43. ├── ledger.yaml
  44. ├── log.yaml
  45. ├── network.yaml
  46. ├── server.yaml
  47. └── xchain-cli.yaml
  48. ├── control.sh
  49. └── data
  50. ├── genesis
  51. ├── poa.json
  52. ├── pow.json
  53. ├── tdpos.json
  54. ├── xpoa.json
  55. ├── xpos.json
  56. └── xuper.json
  57. ├── keys
  58. ├── address
  59. ├── private.key
  60. └── public.key
  61. └── netkeys
  62. ├── cacert.pem
  63. ├── cert.pem
  64. ├── net_private.key
  65. └── private.key
  66. └── node3
  67. ├── bin
  68. ├── wasm2c
  69. ├── xchain
  70. └── xchain-cli
  71. ├── conf
  72. ├── contract.yaml
  73. ├── engine.yaml
  74. ├── env.yaml
  75. ├── ledger.yaml
  76. ├── log.yaml
  77. ├── network.yaml
  78. ├── server.yaml
  79. └── xchain-cli.yaml
  80. ├── control.sh
  81. └── data
  82. ├── genesis
  83. ├── poa.json
  84. ├── pow.json
  85. ├── tdpos.json
  86. ├── xpoa.json
  87. ├── xpos.json
  88. └── xuper.json
  89. ├── keys
  90. ├── address
  91. ├── private.key
  92. └── public.key
  93. └── netkeys
  94. ├── cacert.pem
  95. ├── cert.pem
  96. ├── net_private.key
  97. └── private.key

1.3. 网络配置说明

注解

上述创建好的部署环境,网络已经默认配置好,此段仅仅是为了说明,开发者也可以跳过此小节,直接调到 启动网络 章节

节点加入网络需要通过网络中一个或者多个种子节点,区块链网络中任何一个节点都可以作为种子节点,通过配置种子节点的网络连接地址netURL可以加入网络。

1. 查看种子节点netURL

假设我们设定node1、node2、node3都是种子节点,分别查看3个节点的netURL

  1. # 查看node1节点连接地址netURL
  2. cd node1
  3. ./bin/xchain-cli netURL preview
  4. # 得到如下结果,实际使用时,需要将ip配置节点的真实ip,port配置成
  5. /ip4/{{ip}}/tcp/{{port}}/p2p/Qmf2HeHe4sspGkfRCTq6257Vm3UHzvh2TeQJHHvHzzuFw6
  6. # 查看node2节点连接地址netURL
  7. cd ../node2
  8. ./bin/xchain-cli netURL preview
  9. /ip4/{{ip}}/tcp/{{port}}/p2p/QmQKp8pLWSgV4JiGjuULKV1JsdpxUtnDEUMP8sGaaUbwVL
  10. # 查看node3节点连接地址netURL
  11. cd ../node3
  12. ./bin/xchain-cli netURL preview
  13. /ip4/{{ip}}/tcp/{{port}}/p2p/QmZXjZibcL5hy2Ttv5CnAQnssvnCbPEGBzqk7sAnL69R1E

如果想给节点分配一个新的网络连接地址,可以使用如下命令:

  1. cd node1
  2. ./bin/xchain-cli netURL gen

2. p2p网络配置

  1. # 查看
  2. cd node1
  3. cat conf/network.yaml
  1. # p2p network config
  2. # Module is the name of p2p module plugin.(p2pv1 | p2pv2)
  3. module: p2pv2
  4. # Port the p2p network listened
  5. port: 47101
  6. # Address multiaddr string
  7. address: /ip4/127.0.0.1/tcp/47101
  8. # IsTls config the node use tls secure transparent
  9. isTls: true
  10. # KeyPath is the netdisk private key path
  11. keyPath: netkeys
  12. # BootNodes config the bootNodes the node to connect
  13. # BootNodes 也可以选择都链接同一个节点,在启动网络时需要先启动该节点
  14. bootNodes:
  15. - "/ip4/127.0.0.1/tcp/47101/p2p/Qmf2HeHe4sspGkfRCTq6257Vm3UHzvh2TeQJHHvHzzuFw6"
  16. - "/ip4/127.0.0.1/tcp/47102/p2p/QmQKp8pLWSgV4JiGjuULKV1JsdpxUtnDEUMP8sGaaUbwVL"
  17. - "/ip4/127.0.0.1/tcp/47103/p2p/QmZXjZibcL5hy2Ttv5CnAQnssvnCbPEGBzqk7sAnL69R1E"
  18. # service name
  19. serviceName: localhost

注解

注意: 如果您是部署在同一个服务器上,p2p模块端口应该配置不同,同时不要和其他已经被占用的端口冲突

1.4. 启动网络

进入每个节点部署路径,分别启动每个节点:

  1. cd ./testnet/node1
  2. sh ./control.sh start
  3. # 如果sh命令运行不成功的话可以使用bash命令
  4. # bash ./control.sh start
  5. cd ../node2
  6. sh ./control.sh start
  7. # 如果sh命令运行不成功的话可以使用bash命令
  8. # bash ./control.sh start
  9. cd ../node3
  10. sh ./control.sh start
  11. # 如果sh命令运行不成功的话可以使用bash命令
  12. # bash ./control.sh start

1.5. 确认服务状态

分别查看每个节点运行状态:

  1. ./bin/xchain-cli status -H :37101
  2. ./bin/xchain-cli status -H :37102
  3. ./bin/xchain-cli status -H :37103

1.6. 常见问题

  • 端口冲突:注意如果在一台机器上部署多个节点,各个节点的RPC监听端口以及p2p监听端口都需要设置地不相同,避免冲突;

  • 不同节点公私钥和netURL冲突:注意网络中不同节点./data/keys下的文件和./data/netkeys下的内容都应该不一样,这两个文件夹是节点在网络中的唯一标识,每个节点需要独自生成,否则网络启动异常;

  • 启动时连接种子节点失败:注意要先将种子节点启动,再起动其他节点,否则会因为加入网络失败而启动失败;