Show / Hide Table of Contents

在本地主机搭建私有链

这篇文章我们将介绍如何在一台 Windows 系统的电脑上搭建私有链。

安装节点

首先安装 Neo-CLI,并将节点文件复制为 4 份,文件夹名分别命名为 node1、node2、node3、node4。

安装过程请参考 Neo 节点的安装部署

安装插件

要使节点达成共识,需要安装 SimplePolicy 插件启用共识策略。

  1. 下载 SimplePolicy 插件并解压。

  2. 将文件夹 Plugins 拷贝四份,分别放置到四个节点文件夹中。

创建钱包文件

使用 Neo-CLI 或 Neo-GUI 创建四个不同的钱包文件,命名为 1.json、2.json、3.json、4.json,分别放置于四个节点的文件夹中。

修改 config.json

在每个节点下的 config.json 文件中进行如下修改:

  • 设置每个端口不重复且不被其它程序占用。

  • 设置 UnlockWallet 下的参数 Path 为钱包文件名, Password 为钱包密码。

  • 设置 StartConsensusIsActivetrue

可参照下面的配置:

node1/config.json

{
  "ApplicationConfiguration": {
    "Paths": {
      "Chain": "Chain_{0}",
      "ApplicationLogs": "ApplicationLogs_{0}"
    },
    "P2P": {
      "Port": 10001,
      "WsPort": 10002
    },
    "RPC": {
      "Port": 10003,
      "SslCert": "",
      "SslCertPassword": ""
    },
    "UnlockWallet": {
      "Path": "1.json",
      "Password": "11111111",
      "StartConsensus": true,
      "IsActive": true
    }
  }
}

node2/config.json

{
  "ApplicationConfiguration": {
    "Paths": {
      "Chain": "Chain_{0}",
      "ApplicationLogs": "ApplicationLogs_{0}"
    },
    "P2P": {
      "Port": 20001,
      "WsPort": 20002
    },
    "RPC": {
      "Port": 20003,
      "SslCert": "",
      "SslCertPassword": ""
    },
    "UnlockWallet": {
      "Path": "2.json",
      "Password": "11111111",
      "StartConsensus": true,
      "IsActive": true
    }
  }
}

node3/config.json

{
  "ApplicationConfiguration": {
    "Paths": {
      "Chain": "Chain_{0}",
      "ApplicationLogs": "ApplicationLogs_{0}"
    },
    "P2P": {
      "Port": 30001,
      "WsPort": 30002
    },
    "RPC": {
      "Port": 30003,
      "SslCert": "",
      "SslCertPassword": ""
    },
    "UnlockWallet": {
      "Path": "3.json",
      "Password": "11111111",
      "StartConsensus": true,
      "IsActive": true
    }
  }
}

node4/config.json

{
  "ApplicationConfiguration": {
    "Paths": {
      "Chain": "Chain_{0}",
      "ApplicationLogs": "ApplicationLogs_{0}"
    },
    "P2P": {
      "Port": 40001,
      "WsPort": 40002
    },
    "RPC": {
      "Port": 40003,
      "SslCert": "",
      "SslCertPassword": ""
    },
    "UnlockWallet": {
      "Path": "4.json",
      "Password": "11111111",
      "StartConsensus": true,
      "IsActive": true
    }
  }
}

修改 protocol.json

在每个节点下的 protocol.json 文件中,对以下参数进行修改,并保证所有节点的配置一致。

  • Magic :私有链 ID,可设置为 [0 - 4294967295] 区间内的任意整数。

  • StandbyValidators :备用共识节点的公钥,这里输入 4 个钱包的公钥。

  • SeedList :种子节点的 IP 地址和端口号,IP 地址设置为 localhost,端口为 config.json 中配置的 4 个 P2P Port。

可参照下面的配置:

{
  "ProtocolConfiguration": {
    "Magic": 123456,
    "AddressVersion": 23,
    "SecondsPerBlock": 15,
    "StandbyValidators": [
      "037ebe29fff57d8c177870e9d9eecb046b27fc290ccbac88a0e3da8bac5daa630d",
      "03b34a4be80db4a38f62bb41d63f9b1cb664e5e0416c1ac39db605a8e30ef270cc",
      "03cc384ca982168bf6f08922d27c8acc4357d52a7e8ad8281d4af6683e6f63e94d",
      "03da4ed85a991134bf45592a5b04d6d71399f23a85843f43e6ac1a5d30f5473711"
    ],
    "SeedList": [
      "localhost:10001",
      "localhost:20001",
      "localhost:30001",
      "localhost:40001"
    ],
    "SystemFee": {
      "EnrollmentTransaction": 10,
      "IssueTransaction": 5,
      "PublishTransaction": 5,
      "RegisterTransaction": 100
    }
  }
}

创建快捷启动

为了方便启动私链,创建一个记事本文件,输入 dotnet neo-cli.dll /rpc 然后重命名为 1Run.cmd。将其复制到 4 个节点目录下。

到此,私有链已经搭建完成了,所有修改过的文件结构如下

├─node1
│      1.json
│      1Run.cmd
│      config.json
│      protocol.json
│
├─node2
│      1Run.cmd
│      2.json
│      config.json
│      protocol.json
│
├─node3
│      1Run.cmd
│      3.json
│      config.json
│      protocol.json
│
└─node4
        1Run.cmd
        4.json
        config.json
        protocol.json

启动私有链

进入每个节点目录,双击 1Run.cmd ,当共识过程如图所示,表示私链成功建立:

如果关闭所有窗口,将停止私有链。

提取私有链中的 Neo/GAS

请参考 提取 NEO 和 GAS