Skip to main content

使用单节点搭建私有链

Neo-CLI 支持单节点模式下正常生成区块,只需一个节点即可正常运行私有链。NEO-Private-Net 项目是一个已配置好的私有链,下载后可以直接运行。

你也可以自己配置私有链,下文将介绍具体方法。

准备工作#

  1. 首先安装 Neo-CLI,安装过程请参考 Neo 节点的安装部署
  2. 安装插件 DBFTPlugin
  3. 运行 Neo-CLI,输入 create wallet <path> 命令创建一个钱包,如 create wallet consensus.json
  4. 设置钱包密码(password),并确认密码。
  5. 记录钱包公钥(pubkey),后面会用到。

修改节点配置文件#

修改config.json#

在Neo-CLI的 config.json 文件中进行如下修改:

  • 设置 UnlockWallet 下的参数 Path 为钱包文件名,Password 为钱包密码。
  • 设置 IsActivetrue
  • 设置 ConsoleOutputActivetrue
  • 设置 ValidatorsCount 为1。
  • StandbyCommittee 中输入前面创建的consensus.json钱包的公钥(StandbyCommittee 中只有一个公钥的时候为单节点模式)。

可参照下面的配置:

{  "ApplicationConfiguration": {    "Logger": {      "Path": "Logs",      "ConsoleOutput": true,      "Active": true    },    "Storage": {      "Engine": "LevelDBStore",      "Path": "Data_LevelDB_{0}"    },    "P2P": {      "Port": 21333,      "WsPort": 21334    },    "UnlockWallet": {      "Path": "consensus.json",      "Password": "1",      "IsActive": true    },    "PluginURL": "https://github.com/neo-project/neo-modules/releases/download/v{1}/{0}.zip"  },  "ProtocolConfiguration": {    "Network": 5309138,    "MillisecondsPerBlock": 15000,    "MaxTraceableBlocks": 2102400,    "ValidatorsCount": 1,    "StandbyCommittee": [      "02ff249d06faaf0b5ba865e1531bfabe07f89aef39ab59082e3bc140be0318055d"    ],    "SeedList": []  }}

Plugins\DBFTPlugin 路径下的config文件中进行如下修改:

  • 设置 AutoStart 为 true,并将Networkneo-cliconfig.json中的Network设为相同数值,例如:
{  "PluginConfiguration": {    "RecoveryLogs": "ConsensusState",    "IgnoreRecoveryLogs": false,    "AutoStart": true,    "Network": 5309138,    "MaxBlockSize": 262144,    "MaxBlockSystemFee": 900000000000  }}

启动私有链#

:::note 如果运行 Neo-CLI 之前节点同步了 Neo 测试网的区块文件,需要先删除 Data 目录,否则会导致私链无法正常出块。 :::

进入 neo-cli 目录,双击 neo-cli.exe 或打开 cmd 并运行dotnet neo-cli.dll即可启动私链。成功建立的私链如下图所示。

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

提取私有链中的 NEO/GAS#

在 Neo 网络的创世块中存放着 1 亿份 NEO 和 3 千万 GAS,当私链搭建起来后,GAS 也将伴着新区块的生成而生成。你可以使用 Neo-CLI 从多方签名合约中提取出这部分 NEO 和 GAS 以便内部开发测试使用。

使用 Neo-CLI 提取#

  1. 复制共识节点成为一个外部节点。
  2. 将共识节点的tcp地址localhost:21333加入外部节点config.json中的seedlist。
  3. 修改外部节点config.json中的端口使其不与共识冲突。可参照下面的配置:
{  "ApplicationConfiguration": {    "Logger": {      "Path": "Logs",      "ConsoleOutput": false,      "Active": false    },    "Storage": {      "Engine": "LevelDBStore",      "Path": "Data_LevelDB_{0}"    },    "P2P": {      "Port": 23333,      "WsPort": 23334    },    "UnlockWallet": {      "Path": "",      "Password": "",      "IsActive": false    },    "PluginURL": "https://github.com/neo-project/neo-modules/releases/download/v{1}/{0}.zip"  },  "ProtocolConfiguration": {    "Network": 5309138,    "MillisecondsPerBlock": 15000,    "MaxTraceableBlocks": 2102400,    "ValidatorsCount": 1,    "StandbyCommittee": [      "02ff249d06faaf0b5ba865e1531bfabe07f89aef39ab59082e3bc140be0318055d"    ],    "SeedList": [    "localhost:21333"    ]  }}
  1. 启动私链及外部节点,后续操作均在外部节点上。

  2. 打开共识节点钱包 open wallet consensus.json,使用命令 import multisigaddress m pubkeys,创建一个多方签名地址。

    这里设置最小签名数 m 为 1,pubkeys 为钱包 consensus.json 的公钥。例如:

    import multisigaddress 1 02ff249d06faaf0b5ba865e1531bfabe07f89aef39ab59082e3bc140be0318055d
  3. 输入命令 list asset,可以看到合约地址中出现了 100,000,000 NEO 和 30,000,000 GAS。

  4. 使用命令 create wallet 创建一个新钱包进行后续开发操作,并复制地址。

  5. 重新打开共识节点钱包 open wallet consensus.json,使用 send 指令转出 NEO 和 GAS 到新钱包地址。例:send neo NWu2gb7PzhZb4ci9LvW4gBYAQFMGb1s1o7 100000000, send gas NWu2gb7PzhZb4ci9LvW4gBYAQFMGb1s1o7 10000000

note

每次转账都会消耗少量 GAS 作为手续费,请确保转账时有足够的 GAS (一般不超过 0.02 个gas)。

节点操作详细指令可参照CLI 命令参考