ARTICLE DETAIL

资讯详情

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

Shardeum Network Account Compare:多环境网络账户配置对比 CLI 工具实战指南

Shardeum Network Account Compare:多环境网络账户配置对比 CLI 工具实战指南 Shardeum Network Account Compare多环境网络账户配置对比 CLI 工具实战指南【免费下载链接】shardeumShardeum is an EVM based autoscaling blockchain项目地址: https://gitcode.com/GitHub_Trending/sh/shardeum导读network-account-compare是 Shardeum 仓库内置的一款 TypeScript 编写的命令行工具用于将链上实时拉取到的Network Account网络账户变更记录与本地environments/*.config.json中声明的环境配置逐项比对帮助节点运维者、开发者快速确认 mainnet、testnet、stagenet 等环境的链上参数与本地部署配置是否一致。阅读本文后你将掌握该工具的安装、全部 CLI 用法、颜色化输出语义以及其递归比较算法与特殊键处理等底层实现细节。一、工具定位它解决什么问题Shardeum 是一条 EVM 兼容的自动扩容区块链autoscaling blockchain其网络级参数如质押要求、奖励金额、惩罚比例、版本门槛等以Network Account的形式保存在链上状态中并会随着治理变更listOfChanges逐步演进。与此同时每个部署环境又维护着一份本地 JSON 配置见 environments 目录其中包含p2p节点数量、sharding共识组大小、debug调试密钥等参数。这两者之间一旦出现偏差例如链上刚通过了新配置、而本地配置未同步更新就可能造成节点行为与网络预期不一致。该工具正是为这一场景而设计从指定环境的 archiver 拉取 Network Account 的变更历史与本地环境配置文件逐键递归比对并给出颜色化差异报告。从源码结构看src/index.ts工具的核心调用链是通过axios请求${archiverUrl}/get-network-account?hashfalse获取网络账户数据读取仓库根目录environments/${environment}.config.json将网络账户中的listOfChanges与配置文件中的server段做嵌套递归比对输出✓/✗颜色化结果。二、安装与构建2.1 前置条件Node.js 环境项目依赖锁定版本见 package.json可访问目标环境的 archiver 服务详见下文“环境与 archiver 配置”2.2 安装步骤按官方 README 提供的方式# 1. 进入工具目录 cd scripts/network-account-compare # 2. 安装依赖 npm install # 3. 编译 TypeScript 源码tsc 输出到 dist/ npm run build构建后生成的 JS 产物位于dist/index.js由各 npm script 直接调用。tsconfig.json采用strict模式、target: ES2020、module: commonjs编译入口为src/**/*说明源码质量要求较高、类型约束严格。提示仓库是只读的以上命令仅用于在本地查看与运行该工具不会修改仓库内容。三、快速上手环境预设命令README 提供了最省事的使用方式——每个环境对应一个 npm script编译后自动以对应环境名执行# 与 mainnet 对比 npm run mainnet # 与 testnet 对比 npm run testnet # 与 stagenet 对比 npm run stagenet # 与 US devnet 对比 npm run devnet-us # 与 APAC devnet 对比 npm run devnet-apac # 与本地开发环境对比 npm run local这些脚本定义在 package.json 中例如mainnet: npm run build node dist/index.js -e mainnet——即每次都先编译再执行保证运行的是最新源码。注意 npm script 名中的连字符与 CLI 环境参数中的驼峰写法不同devnet-usvs-e devnetUs这是 README 中一个容易混淆的细节。3.1 可用环境清单环境标识-e参数对应网络archiver 地址源码默认值mainnet主网http://35.238.248.68:4000testnet测试网http://104.197.117.164:4000stagenet预发布网络http://34.57.177.170:4000devnetUs美国开发网http://35.227.45.34:4000devnetApac亚太开发网http://35.243.187.134:4000local本地开发http://localhost:4000各环境的基础差异节点规模、Chain ID、archiver 端点可参考 environments/README.md例如 local Chain ID 为8081、devnet 为8083、testnetITN为8082、mainnet 为8080。四、CLI 参数详解工具基于commanderv11.1.0构建在 src/index.ts 中注册了三个参数参数缩写必填说明--url url-u否指定 archiver URL。若省略则使用src/config.ts中对应环境的预定义地址--environment environment-e是目标环境名取值限定为mainnet/testnet/stagenet/devnetUs/devnetApac/local--verbose-v否开启详细调试输出默认关闭直接运行示例# 显式指定自定义 archiver如本地或自建节点 node dist/index.js -e local -u http://127.0.0.1:4000 # 开启 verbose 模式排查问题 node dist/index.js -e testnet -v代码中有两层校验兜底环境名校验若传入的环境名不在ENVIRONMENT_CONFIGS中立即以红色Error: Invalid environment ...退出process.exit(1)archiver URL 兜底若既未传-u、预定义配置中又没有该环境的 URL会提示通过--url提供地址后退出。五、配置机制与数据来源剖析5.1 archiver 地址定义src/config.ts环境的默认 archiver URL 全部硬编码在 src/config.ts 的ENVIRONMENT_CONFIGS中结构为Recordstring, { archiverUrl: string }。README 明确说明“可以在src/config.ts中按需修改这些 URL”——当某个环境的 archiver 节点变更时这是第一个需要关注的位置。5.2 本地环境配置读取工具通过相对路径定位配置文件src/index.tsconst configPath path.join(__dirname, .., .., .., environments, ${environment}.config.json)即从编译产物dist/回退三级落到仓库根目录的 environments 目录读取mainnet.config.json、testnet.config.json等文件。对比时仅使用其中的server段。以 mainnet.config.json 为例server段包含三类核心配置p2pbaselineNodes、minNodes、maxNodes、syncingDesiredMinCount、flexibleRotationDelta、formingNodesPerCycle、allowEndUserTxnInjections——决定网络节点规模与轮换策略shardingnodesPerConsensusGroup——每个共识组节点数debugdevPublicKeys、multisigKeys均为“公钥 → 权重”映射以及enableDebugFlags——这两组密钥正是下文“特殊键”逻辑的处理对象。5.3 链上数据接口工具向 archiver 请求的接口路径为/get-network-account?hashfalsesrc/index.ts。hashfalse表示返回完整数据而非哈希摘要以便读取current、next、listOfChanges等字段。六、比较算法深入递归对比与特殊键处理这是整个工具的技术核心实现位于 src/index.ts 的compareNestedValues函数逻辑可归纳为四个层次6.1 未定义值跳过规则对非特殊键若网络值或环境值任一为undefined直接视为匹配跳过对比这避免了“环境配置里恰好没配该字段”被误报为差异。6.2 类型与标量对比两侧类型不一致如numbervsstring时判定为类型不匹配标量非对象、非null直接以JSON.stringify结果做严格相等比较。6.3 特殊键multisigKeys / devPublicKeys键集合对比SPECIAL_KEYS定义了两个键src/index.tsconst SPECIAL_KEYS [multisigKeys, devPublicKeys] as const对这两个键采用键集合差集比较分别计算两侧键集合报告“环境中缺失 X”与“网络中缺失 X”两类差异而不逐个比较值。这是因为多签/开发者公钥集合代表权限成员重点是成员增减且链上与本地配置的权重值形态可能存在差异。6.4 通用对象递归其余对象类型则先报告“环境中存在但网络中缺失”的键对两侧共有的键递归调用compareNestedValues并将子路径差异以父键.子键形式聚合到差异列表。6.5 变更历史遍历compareChanges顶层入口 compareChanges 遍历网络账户data.listOfChanges中每条变更记录每条含cycle与change映射对change中的每个键通过key.split(.).reduce(...)把“点分路径”解析到环境配置server段的对应嵌套位置再交给递归比较。某条变更一旦出现差异即打印Change #1 (Cycle 123): ---------------------------------------- Details: ✗ Value mismatch: ...全部变更检查完毕若无任何差异则输出绿色✓ No mismatches found between Network Account and Environment Config。七、输出颜色语义README 明确规定了五类颜色含义源码中通过 ANSI 转义码\x1b[...m实现src/index.ts颜色含义绿色green配置匹配成功如最终的✓汇总红色red存在不匹配项或错误信息蓝色blue信息提示如“正在从某 URL 拉取数据”青色cyan变更详情如Change #N (Cycle ...)标题黄色yellow警告类提示预留给--verbose等场景白色/加粗/暗色标题与分隔线的辅助样式八、数据类型Network Account 响应结构src/types.ts 完整定义了响应的类型骨架理解它有助于解读输出顶层networkAccountaccountId、cycleNumber、hash、isGlobal、timestampdata.current当前生效的全部网络参数包括activeVersion、minVersion、latestVersion、chainID、certCycleDuration、enableNodeSlashing、enableRPCEndpoints、maintenanceFee、maintenanceInterval、nodePenaltyUsd、nodeRewardAmountUsd、nodeRewardCap、nodeRewardInterval、restakeCooldown、slashing三项惩罚百分比、stabilityScaleDiv/Mul、stakeLockTime、stakeRequiredUsd、txPause、title、description以及qa测试项等其中nodePenaltyUsd、nodeRewardAmountUsd、nodeRewardCap、stakeRequiredUsd等采用{ dataType, value }包装结构数字以字符串存储data.listOfChanges历史变更数组{ cycle, change }data.next待生效的下一条配置。另有一个辅助模块 src/comparator.ts 提供compareConfigs负责把current配置中{ dataType, value }形态的参数抽取为actual: value并归一为ConfigComparison[]结果结构——可作为扩展“当前配置快照对比”能力的参考实现。九、常见问题与使用建议环境名写错CLI 只接受六种环境标识且devnetUs、devnetApac为驼峰拼写npm script 层面则使用连字符devnet-us、devnet-apac。连不上 archiver工具会以红色输出Error fetching network account: ...并退出。请确认目标环境 archiver 存活、端口默认4000可达或改用-u指定可用节点。配置缺失导致误报非特殊键的undefined会被跳过若需严格对比可关注特殊键multisigKeys/devPublicKeys的成员增减输出。网络账户参数如何与本地配置对应链上以点分路径如p2p.minNodes记录变更工具正是依赖这一命名约定完成与环境配置server段的映射理解这一点对解读输出至关重要。十、相关资源导航工具 READMEscripts/network-account-compare/README.md入口与比较逻辑src/index.ts环境 archiver 地址src/config.ts响应类型定义src/types.ts当前配置快照比较src/comparator.ts各环境 JSON 配置environments含 environments/README.md 的环境差异说明依赖与 npm scriptspackage.json【免费下载链接】shardeumShardeum is an EVM based autoscaling blockchain项目地址: https://gitcode.com/GitHub_Trending/sh/shardeum创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表