ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

基于 `nodeos` 快速搭建本地单节点测试网:从零开始让节点出块

基于 `nodeos` 快速搭建本地单节点测试网:从零开始让节点出块 区块链【免费下载链接】eosAn open source smart contract platform项目地址https://gitcode.com/gh_mirrors/eo/eos点击查看免费下载导读nodeos是 EOSIO 区块链的核心节点守护进程负责共识、区块生产、状态存储与 RPC 服务。本指南以docs/01_nodeos/02_usage/03_development-environment/00_local-single-node-testnet.md为主骨架讲解如何在一台主机上以最小配置启动一个由单一生产者eosio驱动的本地测试链并通过cleos get info验证链上状态。读者学完后将掌握一条可出块测试链的启动命令、config.ini的自定义配置方法、数据与配置目录的管理方式以及nodeos相关插件与参数的底层机制。cleos是命令行客户端用于管理钱包、向链上发送 actionkeosd是钱包守护进程负责私钥管理与数字签名。若未显式启动keosdcleos会在默认端口127.0.0.1:8900自动拉起它。一、前置条件安装与路径准备在动手之前请确认以下三点已就绪安装 EOSIO 软件参考安装指南。官方支持的环境包括 Amazon Linux 2、CentOS 7.x/8.x、Ubuntu 16.04/18.04/20.04以及 macOS 10.14Mojave及更高版本。可以选择安装预编译二进制或从源码构建。确保三个可执行文件在 PATH 中nodeos、cleos、keosd必须能直接从命令行调用。如果你是用 shell 脚本方式构建的还需要执行安装脚本把二进制安装到系统路径。了解nodeos选项机制nodeos的行为由两类选项决定——nodeos自身选项如--data-dir、--config-dir和插件选项如--plugin eosio::chain_api_plugin。详见Nodeos Options。插件选项必须配合对应的--plugin启用才生效否则会被忽略。二、快速启动一行命令让nodeos开始出块打开一个终端窗口执行以下命令即可启动一条单节点区块链nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin这条命令中各参数的含义如下参数说明-e/--enable-stale-production允许在链过期stale的情况下继续出块。单节点测试链没有外部节点持续供给新块链几乎总是处于 stale 状态因此必须开启。对应源码见plugins/producer_plugin/producer_plugin.cpp中(enable-stale-production,e, ...)的定义源码位置-p eosio/--producer-name eosio指定由本节点控制的出块账户名为eosio。该选项是vector类型可多次指定多个生产者producer_plugin.cpp中(producer-name,p, ...)定义为 composingmultitoken源码位置--plugin eosio::chain_api_plugin加载链 API 插件暴露/v1/chain/*系列 RPC 端点如get_info、get_block供cleos查询链状态--plugin eosio::history_api_plugin加载历史 API 插件提供交易历史查询能力Nodeos Minimal Options最小配置提示一个能出块的最小nodeos实例需要同时加载chain_api_plugin与history_api_plugin并配合-e与-p eosio。你也可以自行创建账户并把它指定为生产者名如-p inita。2.1 启动后的预期日志启动成功后终端会输出类似如下的区块生产日志1575001ms thread-0 chain_controller.cpp:235 _push_block ] initm #1 2017-09-04T04:26:15 | 0 trx, 0 pending, exectime_ms0 1575001ms thread-0 producer_plugin.cpp:207 block_production_loo ] initm generated block #1 2017-09-04T04:26:15 with 0 trxs 0 pending 1578001ms thread-0 chain_controller.cpp:235 _push_block ] initc #2 2017-09-04T04:26:18 | 0 trx, 0 pending, exectime_ms0 ... eosio generated block 046b9984... #101527 2018-04-01T14:24:58.000 with 0 trxs eosio generated block 5e527ee2... #101528 2018-04-01T14:24:58.500 with 0 trxs观察要点#1、#2是区块高度说明节点正在从创世块开始出块eosio generated block ...表明区块由生产者eosio签名生成块间隔约 0.5 秒500ms符合 EOSIO 的block_interval_ms 500设定。此时nodeos正在以单一生产者eosio运行。默认 HTTP RPC 监听地址为127.0.0.1:8888在programs/nodeos/main.cpp中通过http_plugin::set_defaults({... .default_http_port 8888})设置源码位置。三、查询节点信息cleos get info在另一个终端窗口执行cleos get info返回的 JSON 大致如下{ server_version: 0f9df63e, chain_id: cf057bbfb72640471fd910bcb67639c22df9f92470936cddc1ade0e2f2e7dc4f, head_block_num: 134, last_irreversible_block_num: 133, last_irreversible_block_id: 00000085060e9872849ef87bef3b19ab07de9faaed71154510c7f0aeeaddae2c, head_block_id: 000000861e3222dce1c7c2cfb938940d8aac22c816cc8b0b89f6bf65a8ad5bdc, head_block_time: 2019-11-18T22:13:10.500, head_block_producer: eosio, virtual_block_cpu_limit: 228396, virtual_block_net_limit: 1197744, block_cpu_limit: 199900, block_net_limit: 1048576, server_version_string: v2.0.0-rc2, fork_db_head_block_num: 134, fork_db_head_block_id: 000000861e3222dce1c7c2cfb938940d8aac22c816cc8b0b89f6bf65a8ad5bdc, server_full_version_string: v2.0.0-rc2-0f9df63e1eca4dda4cb7df30683f4a1220599444 }关键字段解读字段含义chain_id链 ID由创世状态genesis计算得到。当前仓库默认创世配置的根密钥定义于libraries/chain/genesis_state_root_key.cpp.in通过${EOSIO_ROOT_KEY}注入genesis_state::compute_chain_id()将整个创世状态打包哈希得到链 ID见libraries/chain/genesis_state.cpphead_block_num/head_block_id当前链头区块的高度与 IDlast_irreversible_block_num最近不可逆区块高度LIB。单节点下通常仅落后链头 1 个块head_block_producer当前块的生产者应为eosioblock_cpu_limit/block_net_limit每个块的 CPU微秒与 NET字节资源上限server_version_string节点版本字符串如v2.0.0-rc2若head_block_num持续增长、head_block_producer为eosio说明出块正常测试链已可用。四、进阶配置定制config.ini单条命令适合快速验证进阶用户往往需要固化配置。nodeos使用自定义配置目录其位置随操作系统而定macOS~/Library/Application Support/eosio/nodeos/configLinux~/.local/share/eosio/nodeos/config构建过程会在该目录中预置一个默认的genesis.json。你也可以用--config-dir参数指定其他配置目录但此时需要手动拷贝一份genesis.json到该目录。4.1 生成并编辑默认config.ininodeos启动时会先在配置目录中查找config.ini若不存在则自动生成一份带全部默认项的文件。具体做法先运行nodeos随后立刻按Ctrl-C关闭它此时配置目录中已生成默认config.ini。打开该文件在默认内容基础上添加/更新以下设置# config.ini: # Enable production on a stale chain, since a single-node test chain is pretty much always stale enable-stale-production true # Enable block production with the testnet producers producer-name eosio # Load the block producer plugin, so you can produce blocks plugin eosio::producer_plugin # As well as API and HTTP plugins plugin eosio::chain_api_plugin plugin eosio::http_plugin plugin eosio::history_api_plugin各项配置与命令行参数一一对应enable-stale-production true等价于-e允许在 stale 链上出块producer-name eosio等价于-p eosio声明出块账户plugin eosio::producer_plugin加载出块插件命令行示例中未显式列出但-e/-p均为该插件的选项因此必须显式加载plugin eosio::http_pluginHTTP 服务基础插件RPC 端点依赖它plugin eosio::chain_api_plugin/eosio::history_api_pluginRPC 功能插件。提示config.ini中的插件选项即使没写对应的plugin ...只要该选项所属插件已通过命令行或其他方式加载选项仍会生效反之插件未加载时选项会被忽略见 Nodeos Options 的插件选项说明。4.2 使用配置文件启动配置完成后直接运行nodeosnodeos会自动从配置目录读取config.ini并开始出块。4.3 数据目录运行时数据共享内存、日志等存放在数据目录macOS~/Library/Application Support/eosio/nodeos/dataLinux~/.local/share/eosio/nodeos/data可通过--data-dir参数指定其他位置。在programs/nodeos/main.cpp中数据目录与配置目录的默认值由app().set_default_data_dir(...)与app().set_default_config_dir(...)设定源码位置路径形态为fc::app_path()/eosio/nodeos/{data,config}。五、底层机制出块与创世状态速览为了让读者对为什么这样配置就能出块有更本质的理解这里给出两点源码佐证出块开关enable-stale-production在producer_plugin.cpp中通过bool_switch直接写入my-_production_enabled源码位置只有该标志为真时节点才会在链头时间落后当前时间超过一个块间隔默认 500ms的情况下继续生产区块。此外max-irreversible-block-age默认-1表示不限控制节点仅在生产链的 LIB 年龄不超过该值时出块源码位置。创世与链 ID默认创世状态的初始时间戳为2018-06-01T12:00:00初始密钥取自注入的EOSIO_ROOT_KEY链 ID 由genesis_state::compute_chain_id()对完整创世状态做 raw 序列化后哈希生成源码位置。这就是cleos get info中chain_id的由来也解释了为什么--config-dir自定义目录时必须手动放置genesis.json——链的根基来自创世文件。六、下一步继续探索本地测试网完成单节点出块后可以继续深入单主机单节点 共识协议测试网增加producer_plugin、producer_api_plugin导入开发密钥并通过schedule_protocol_feature_activations预激活协议特性、部署eosio.boot与eosio.bios系统合约使测试链具备完整共识与系统合约能力单主机多节点测试网启动两个nodeos实例含net_api_plugin通过 P2P 互联并用setprods更新生产者调度表实现多节点共识出块Nodeos 全部选项全面了解nodeos自身选项与各插件选项插件文档总览深入chain_api_plugin、producer_plugin、http_plugin等插件的详细配置。七、常见问题速查现象可能原因与解决启动后没有出块日志忘记加-eenable-stale-production单节点链处于 stale 状态不会出块cleos get info连接失败nodeos未启动或 HTTP 端口被占用默认 8888自定义--config-dir后启动报错该目录缺少genesis.json请手动从默认配置目录拷贝日志出现Database dirty flag set上次非正常退出导致需按提示回放replay或用--hard-replay-blockchain恢复想指定自己的账户出块用-p 你的账户名并确保该账户密钥已通过signature-provider或private-key提供给节点赞分享区块链【免费下载链接】eosAn open source smart contract platform项目地址https://gitcode.com/gh_mirrors/eo/eos点击查看免费下载相关推荐如何用 multinode-demo 搭建本地单节点测试网并运行 bench-tps 压测如何用 multinode demo 搭建本地单节点测试网并运行 bench tps 压测 如果你需要在改动 Solana 交易管线代码后量化验证吞吐量官方区块链后端分布式系统EOSIO项目搭建本地单节点测试网络并启用共识协议EOSIO项目搭建本地单节点测试网络并启用共识协议 概述 本文将详细介绍如何在EOSIO区块链项目中搭建一个本地单节点测试网络并启用共识协议功能。这种配置被区块链Diem 本地测试验证器网络运行指南从源码与 Docker 两种方式快速搭建单节点开发环境Diem 本地测试验证器网络运行指南从源码与 Docker 两种方式快速搭建单节点开发环境 本篇指南以 Diem 官方文档 tutorial run loca区块链金融科技上一篇Deep-Live-Cam项目运行时报错ModuleNotFoundError: No module named torch解决方案下一篇如何免费解锁所有显卡超采样技术OptiScaler终极配置指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表