1. 主页
  2. 文档
  3. Monero-Doc 门罗币教程...
  4. 第一章 交互
  5. 4 Monerod

4 Monerod

概述

连接到门罗币网络

门罗币的守护进程 monerod 能保持你的计算机与门罗币网络同步。它从p2p网络下载并验证区块链。

没人知道你的私钥

Monerod 和你的钱包完全脱钩了。Monerod 不访问你的私钥——它没法知道你的交易和收支。所以你可以在单独的计算机或云端运行 monerod 。 事实上,你可以连接到半受信任的第三方提供的远程 monerod 实例。 这样的第三方并不能窃取你的资金。对于学习和实验这非常方便。 但是,使用远程、不可信节点会产生隐私和可靠性问题。对于任何真正的业务,你都应该运行自己的全节点。

语法

./monerod [options] [command]
./monerof [选项][命令]

选项定义守护进程应该如何工作。它们的名称遵循 --option-name 模式。 命令可以访问守护进程提供的特定服务。即使守护进程正在执行,命令也可以执行。 它们的名称遵循 command_name 模式。

运行

进入你的门罗币的目录。 在学习和测试阶段中,你最好使用 stagenet

./monerod --stagenet --detach                # 在后台运行守护进程
tail -f ~/.bitmonero/stagenet/bitmonero.log  # 查看日志文件
./monerod --stagenet exit                    # 要求守护进程退出

处理真正的门罗币(XMR)时,就需要 mainnnet 了。

./monerod --detach                           # 在后台运行守护进程
tail -f ~/.bitmonero/bitmonero.log           # 查看日志文件
./monerod exit                               # 要求守护进程退出

选项

选项定义守护进程应该如何工作,它们的名称遵循 --option-name 模式。 下面的分类只是为了让参考更容易理解。守护进程本身不以任何方式对选项进行分组。

帮助和版本

选项 描述
--help 列出可用选项。
--version 标准输出 monerod的版本,比如:Monero 'Boron Butterfly' (v0.14.0.0-release)
--os-version 显示构建时间戳和目标操作系统。输出示例: OS: Linux #1 SMP PREEMPT Fri Aug 24 12:48:58 UTC 2018 4.18.5-arch1-1-ARCH.

挑选网络

选项 描述
(missing) 默认情况下,monerod假定为mainnet
--stagenet stagenet上运行。记得用--stagenet运行你的钱包。
--testnet testnet 上运行。记得用 --testnet 运行你的钱包。

日志

选项 描述
--log-file 日志文件的完整路径。 示例(注意文件权限): ./monerod --log-file=/var/log/monero/mainnet/monerod.log
--log-level 0-4:0表示最小日志记录,4表示完全跟踪,默认为0。这些是常规预设,不需要调到最高级别。 例如,即使调到0档,你也可能会看到一些最重要的INFO条目。暂时更改为1可以更好地了解整个节点的运行方式。操作示例: ./monerod --log-level=1
--max-log-file-size 日志文件的软性限制(以字节为单位,大小默认为104850000bytes,刚好小于100MB)。 一旦日志文件超过该限制,monerod将使用UTC时间戳,以YYYY-MM-DD-HH-MM-SS的名字创建下一个日志文件。 在开发部署中,你可能更喜欢使用成型的解决方案,例如 logrotate。在这种情况下,请设置--max-log-file-size = 0以防止 monerod 管理日志文件。
--max-log-files 限制日志文件的数量(默认为50)。最旧的日志文件会被删除。在开发部署中,你可能更喜欢使用成型的解决方案,例如logrotate。

服务

当你在同一台计算机上运行门罗币钱包时,门罗币允许你偶尔调整其默认值。 如果你打算让一个节点(比如远程服务器或你自己的电脑)一直运行,下面的选项会很有帮助。

选项 描述
--config-file 配置文件的完整路径。默认情况下,monerod 在 门罗币的数据目录中查找bitmonero.conf。
--data-dir 数据目录的完整路径。这是存储区块链,日志文件和p2p网络内存的地方。有关默认值和详细信息,请参阅数据目录
--pidfile PID文件的完整路径。仅适用于 --detach 。示例: ./monerod --detach --pidfile=/run/monero/monerod.pid
--detach 转至后台(从终端解耦)。对长时间运行/服务器的方案会很有用。一般情况下,你还需要使用 systemd 或类似方法管理 monerod 守护程序。默认情况下,monerod 在前台运行。
--non-interactive 在前台模式下不需要tty(但在容器中运行时,tty会很有帮助)。默认情况下,monerod 在前台运行并打开stdin进行读取。不给TTY分配进程会打破容器化,monerod进程会崩溃。你可以用 --detach 使tty在后台运行,如果是在容器化环境中,这会不太方便,因为规范用法是容器等待主进程存在(分叉会让事情更复杂)。
--no-igd 禁用路由器上的UPnP端口映射(“Internet网关设备”)。如果你不使用NAT转换的话(可以直接绑定到公共IP或通过Tor运行),请添加此选项以提高安全性。
--max-txpool-weight 设置交易池的大小(单位为字节)。默认为648000000(~618MB)。这些是待确认的交易(未包含在任何块中)。
--enforce-dns-checkpointing MoneroPulse 设置的检查节点是强制执行的。无人参与的节点比较适合设置强制执行。 碰到区块的哈希与相应的检查节点不匹配,本地区块链将会回滚几个区块,有效避免MoneroPulse 运算符认为的无效复刻。日志条目会记录报错:“ ERROR Local blockchain failed to pass a checkpoint, rolling back! (ERROR 本地区块链无法通过检查节点,回滚!)”最终无效复刻会被搁置,替代的(“修复的”)分叉文件将变大,节点会跟随替代的分叉。 默认情况下,检查节点仅通过生成以下日志条目来通知有关报错:错误警告:本地区块链无法通过 MoneroPulse 检查节点,你可能在分叉上。这时你需要从头开始同步,或者下载新的区块链引导程序,或者使用 --enforce-dns-checkpointing 命令选项启用检查节点强制执行。 参考:源代码
--disable-dns-checkpoints 核心开发人员设置的MoneroPulse检查节点将被放弃。尽管如此,检查节点程序仍然被保留。

P2P 网络

下列选项定义你的节点如何参与门罗币p2p网络,用于节点与节点间的通信。下列选项不影响钱包到节点的接口。 “节点”和“对等(peer)”的词汇可以互换使用。

选项 描述
--p2p-bind-ip 绑定到p2p网络协议的网络接口。默认值0.0.0.0 会绑定到所有网络接口。通常情况下你需要用这个。 如果要约束绑定,则必须更改此设置,例如通过Tor 来配置通过 Tor 的连接: DNS_PUBLIC=tcp://1.1.1.1 TORSOCKS_ALLOW_INBOUND=1 torsocks ./monerod --p2p-bind-ip 127.0.0.1 --no-igd --hide-my-port
--p2p-bind-port 用于侦听p2p网络连接的TCP端口。主网默认为18080,testnet默认为28080,stagenet默认为38080。通常你不用改变它。如果你在计算机上运行多个节点来模拟私有Monero p2p网络(可能使用私有Testnet),这个选项会很有帮助。例: ./monerod --p2p-bind-port=48080
--p2p-external-port 用于侦听路由器上p2p网络连接的TCP端口。如果你在NAT后面仍然希望接受传入连接,就会用到这个了。你必须将其设置为路由器上的相关端口。这是为了让 monerod 接收网络上的广播。默认值为0。
--hide-my-port monerod 仍将打开并在p2p端口上侦听。不过它不会说自己是备选节点。从技术上讲,它将在与p2p协议握手的响应中返回端口0(get_local_node_data函数中的node_data.my_port = 0)。实际上,你连接的节点不会将IP扩展到其他节点。总而言之,它并不是真正隐藏,更像是“不要广播出去”。
--seed-node 连接到一个节点以检索其他节点的地址,然后断开连接。如果未指定,monerod将在第一次运行时使用硬编码的种子节点,并在后续运行时使用节点在硬盘上的缓存。
--add-peer 手动将节点添加到本地对等(peer)列表。
--add-priority-node 指定要连接的节点列表,然后尝试保持连接。 要添加多个节点,请多次使用该选项。 例: ./monerod --add-priority-node=178.128.192.138:18081 --add-priority-node=144.76.202.167:18081
--add-exclusive-node 指定仅连接的节点列表。 如果给出此选项,则忽略选项--add-priority-node和--seed-node。 要添加多个节点,请多次使用该选项。 例: ./monerod --add-exclusive-node=178.128.192.138:18081 --add-exclusive-node=144.76.202.167:18081
--out-peers 设置到其他节点的最大传出连接数,默认值为8。-1表示代码默认值。
--in-peers 设置最大传入连接数(主动连接到你的节点),默认无限制。 -1表示代码默认值。
--limit-rate-up 设置传出数据传输限制[kB / s]。 默认为2048 kB / s。 值-1表示代码默认值。
--limit-rate-down 设置传入数据传输限制[kB / s],默认为8192 kB / s。 值-1表示代码默认值。
--limit-rate 为传入和传出数据设置相同的传输限制值。 默认情况下(-1)将使用单独的上/下默认限制。 最好使用--limit-up-up和--limit-rate-down来避免混淆。
--offline 不再监听其他节点,也不连接到任何节点。适用于使用本地档案(archival) 区块链。
--allow-local-ip 允许将本地IP添加到对等节点列表。适用于当你希望在一台计算机上拥有多个节点时,进行调试。

节点 RPC API

提供了强大的 API。 它有三个用途:

  • 提供网络数据(统计、区块、 交易...)
  • 提供本地节点信息(对等节点列表,挖矿的算力...)
  • 为钱包提供接口(发送交易...)

这个 API 通常被称为“ RPC” ,因为它主要基于 json / RPC 标准。 以下选项定义 API 的行为方式。

选项 描述
--rpc-bind-ip 要侦听的IP。默认情况下为127.0.0.1,因为API为节点提供了完整的管理功能。将其设置为0.0.0.0可以侦听所有接口,但会仅与* -restricted- *选项和--confirm-external-bind 之一相连接。
--rpc-bind-port 要侦听的TCP端口。默认为18081(主网),28081(测试网),38081(stagenet)。
--rpc-restricted-bind-port 使用有限版本的API侦听TCP端口。有限的API可以公开,以创建开放节点。 同时,你可以防护完整的API端口,并继续使用本地查询和管理。
--confirm-external-bind 确认是你将 --rpc-bind-ip 设置为非本地主机IP,而且你了解其后果。
--restricted-rpc 限制API的仅查看命令,不返回隐私敏感数据。注意这对于 -rpc-restricted-bind-port没有意义,因为你最终会得到两个受限制的API。
--rpc-login 指定连接到API所需的用户名[:密码]。 实际使用似乎有限,因为API通信是通过HTTP的纯文本。
--rpc-access-control-origins 指定逗号分隔的原始列表以允许跨源资源共享。如果你想通过JavaScript直接从Web浏览器使用 monerod API(例如在纯粹的Web appp场景中),这非常有用。使用此选项,monerod将为其响应添加正确的HTTP CORS标头。如果使用此选项,还需要设置--rpc-login。 通常情况下,API由后端应用程序使用,并且此选项不是必需的。

接收门罗币

这些是 monerod 提供的网络通知和钱包通知,比如 monero-wallet-rpc 提供的 -- tx-notify。

选项 描述
--block-notify 为每个新区块运行程序。参数()必须是完整路径。如果参数中包含%s,它将被区块的哈希替换。 例: ./monerod --block-notify="/usr/bin/echo %s" 区块通知有助于即时反应。但是,你应该一直假定会错过一些区块通知,你应该独立轮询API来查漏补缺。 注意区块链的重组。区块通知可以恢复到和过去相同的高度。小型重组是正常的,每天都会发生。
--block-rate-notify 当最近收到的块数明显偏离预期时,运行程序。 参数()必须是完整路径。参数可以包含要插入的%t,%b,%e字符中的任何一个: %t:观察窗口中的分钟数 %b:在该窗口中观察到的块数 %e:预期在该窗口理想的块数中 该选项将让你知道网络的算力是否下降了很多。这表明可能大部分网络矿工正在开采一条私链,后来被释放到网络中。请注意,即时此事件触发,也并不一定说明事件发生了,只是说有这种可能。窗口中时间越久(%t参数),且实际和预期的块数之间的距离越大的话,预示可能的双花攻击的准备就越多。 建议:除非你进行重要的门罗币交易或其他操作,否则不要动它。它很难校准,容易被误解。如果这是一次真正的攻击,攻击针对的将高流动性实体而非小型商家。
--reorg-notify 区块链的重组发生时,运行程序(即,从区块链的顶部删除至少一个块)。 参数()必须是完整路径。 参数可以包含要插入的%s,%h,%n字符中的任何一个: %s:分叉发生的高度 %h:新区块链的高度 %d:从旧链中丢弃的块数 %n:要添加的块数 该选项会告诉你何时从链中删除块以由其他块替换。当发生51%的攻击时,会发生这种情况,但在正常情况下也会发生小的重组。 %d参数将被设置为从旧链中丢弃的块数(因此,如果这高于你等待对付款进行操作的块数,则该付款可能已被取消)。%n参数将被设置为新链中的块数(因此,如果这高于你等待接收付款的块数,则第一个块中的任何收款都将在你的平台上自动执行)。 建议:除非你进行重要的门罗币交易或其他操作,否则不要动它。在运送贵重物品之前,通过要求至少10次确认来简单说明重组。

性能

这些都是高级选项,允许你优化 monerod 节点的性能,有时以牺牲可靠性为代价。

选项 描述
--db-sync-mode 使用以下格式指定同步选项: [safe|fast|fastest]:[sync|async]:[<nblocks_per_sync>[blocks]|<nbytes_per_sync>[bytes]] 默认值为fast:async:250000000bytes。 fast:async:*可以在系统崩溃时破坏区块链数据库。如果只是monerod崩溃,它不应该崩溃。如果你担心系统崩溃,请使用safe:sync。
--max-concurrency 用于并行作业的最大线程数,默认值0。使用CPU线程数。
--prep-blocks-threads 计算组中的区块哈希(PoW)时要使用的最大线程数。默认为4。如果在同步时不希望monerod 占用计算机,请减小此值。
--fast-block-sync 通过使用嵌入的“已知”区块哈希来同步大部分区块。传递1为打开,0为关闭,默认为1。通常,整个节点必须计算每个区块的哈希来验证矿工的工作证明。由于Monero中使用的CryptoNight PoW非常昂贵(即使是用于验证),因此monerod会为旧块提供跳过这些计算的功能。换句话说,它是一种机制,可以信任旧块PoW有效性的monerod二进制文件,加快同步速率。
--block-sync-size 在同步区块链期间,在一个批次中处理多少个区块。默认情况下,较新历史记录为20个块,较旧历史记录为100个块(“pre v4”)。默认操作由值0表示。直观地说,你拥有的资源越多,你可能想要尝试的批量越大。 例: ./monerod --block-sync-size=500
--bootstrap-daemon-address 主机:“引导程序”远程打开节点的端口,当此节点仍未完全同步时,连接的钱包也可以使用该节点。 例: ./monerod --bootstrap-daemon-address = opennode.xmr-tw.org:18089。 该节点将选定的RPC调用转发到引导节点。钱包将自动透明地处理这个问题。显然,这种引导阶段具有类似于直接使用远程节点的隐私含义。
--bootstrap-daemon-login 指定[用户名:bootstrap 守护进程登录的密码(如果需要)]。这考虑了钱包使用的RPC接口。通常,开放节点不需要任何凭据。

挖矿

下面的选项使用标准软件堆栈 monerod 配置单独的 CPU 挖矿。在以下方面会很有用:

  • 生成你的 stagenet 或 testnet 代币
  • 测试和学习
  • 如果你的 CPU 资源充裕

请注意,真正的挖矿发生在矿池和高端的 GPU,而不是 CPU中。

选项 描述
--start-mining 指定要挖矿的钱包地址。这里必须是标准地址! 既不是subaddres ,也不是集成地址。
--mining-threads 指定挖矿线程数。默认情况下,只使用一个线程。为获得最佳结果,请将其设置为硬件的处理器数。
--extra-messages-file 指定要包含在coinbase 交易中的额外消息的文件。
--bg-mining-enable 实现“静悄悄”地挖矿。 在此模式下,挖矿只使用一小部分系统资源,从而不会明显降低计算机速度。这是为了鼓励人们挖矿来增强去中心化。据说只用CPU挖矿找到区块的机会越来越小,甚至在这个“静悄悄”的模式中也越来越小。 你可以使用下面的--bg- *选项调整 安静/功率 之间的度。
--bg-mining-ignore-battery 如果为真(true),则假定在无法查询系统电源状态时插入。
--bg-mining-min-idle-interval 指定用于确定空闲状态的最小回溯间隔(单位为秒)。
--bg-mining-idle-threshold 指定回顾间隔的最小平均空闲百分比。
--bg-mining-miner-target 指定矿工使用的最大cpu百分比。

测试门罗币

这些选项对 门罗币项目的开发人员和测试人员非常有用。普通用户可以略过这些。

选项 描述
--test-drop-download 在网络测试中:下载时,丢弃所有块,而不必检查/保存它们(非常快)。
--test-drop-download-height 和 --test-drop-download类似,但只在达到一定高度后丢弃。 默认为0。
--regtest 以回归测试模式运行。
--fixed-difficulty 修复了用于测试的难度。 默认为0。
--test-dbg-lock-sleep 睡眠时间以毫秒为单位,默认为0(关闭),用于在锁定互斥锁之前/之后进行调试。 值100到1000适用于测试。
--save-graph 保存dr Monero的数据。

旧版

这些选项应该不再是必要的。为了向后兼容,它们仍然存在于 monerod 中。

选项 描述
--fluffy-blocks 致密区块中继。默认。致密区块只是一个标头和一个事务ID列表。
--no-fluffy-blocks 经典完整区块中继。经典区块包含所有交易。
--show-time-stats 官方文档说“在处理区块/ 交易和磁盘同步时显示时间 - 统计信息”,但在通常的区块链同步期间似乎没有产生任何输出。
--zmq-rpc-bind-ip 要侦听的ZMQ RPC服务器的IP。默认为127.0.0.1。这还没有被广泛使用,因为ZMQ接口目前没有提供优于传统JSON-RPC接口的有意义的优势。不幸的是,目前无法禁用ZMQ服务器。
--zmq-rpc-bind-port ZMQ RPC服务器侦听的端口。 默认情况下18082用于主网,38082用于stagenet,28082用于testnet。
--db-type 指定数据库类型。 默认且仅可用:lmdb。

命令

命令可以访问守护进程提供的特定服务。对正在运行的守护进程执行命令。它们的名称遵循command_name 模式。

下面的小组只是为了让参考更易理解。守护进程本身不以任何方式对命令进行分组。

参见运行的示例用法。 你还可以直接在运行的 monerod 控制台中键入命令(如果不是分离的话)。

帮助,版本,状态

选项 描述
help [] 显示指定命令的帮助。
version 显示版本信息。 示例输出: Monero 'Boron Butterfly' (v0.14.0.0-release)
status 显示状态。 示例输出: Height: 186754/186754 (100.0%) on stagenet, not mining, net hash 317 H/s, v9, up to date, 8(out)+0(in) connections, uptime 0d 3h 48m 47s

P2P网络

选项 描述
print_pl 显示完整的对等节点列表。
print_pl_stats 显示完整的对等节点列表统计信息(白色VS灰色的对等节点)。白色对等节点为在线且可以访问。灰色对等节点为离线,但你的monerod会记住它们过去的会话。
print_cn 显示具有连接主动性(传入/传出)和其他统计信息的已连接对等节点。
ban [] 禁止给定的IP达到设定的时间(单位为秒)。默认禁令是24小时。 例: ./monerod ban 187.63.135.161.
unban 取消对给定的限制。
bans 显示当前禁止的IP。 示例输出: 187.63.135.161 banned for 86397 seconds.
in_peers <max_number> 设置来自其他对等节点的传入连接。
out_peers <max_number> 设置与其他对等节点的传出连接。
limit [<kB/s>] 获取或设置下载和上传限制。
limit_down [<kB/s>] 获取或设置下载限制。
limit_up [<kB/s>] 获取或设置上传限制。

交易池

选项 描述
flush_txpool [] 刷新交易池中的指定交易,如果指定交易不存在,则刷新整个交易池。
print_pool 使用详细格式打印交易池。
print_pool_sh 使用短格式打印交易池。
print_pool_stats 打印交易池的统计信息(事务数,内存大小,费用,双花攻击尝试等)。

交易

选项 描述
print_coinbase_tx_sum <start_height> [<block_count>] 显示指定范围内所有发送的代币和付费的总和。 例: ./monerod print_coinbase_tx_sum 0 1000000000000
print_tx <transaction_hash> [+hex] [+json] 将指定的交易显示为JSON和/或HEX。
relay_tx 强制中继交易。如果你因任何原因要重新将交易广播出去,或者之前使用[“do_not_relay”:true ]创建交易,则非常有用。

区块链

选项 描述
print_height 显示本地区块高度。
sync_info 显示区块链同步进度和连接的对等节点以及下载/上传统计信息。
print_bc <begin_height> [<end_height>] 显示范围<begin_height> .. <end_height>中的块。该信息将包括区块ID,高度,时间戳,版本,大小,重量(weight),非币基交易(non-coinbase transactions)的数量,难度,随机数和奖励。
print_block <block_hash> | <block_height> 显示指定区块的详细数据。
hard_fork_info 显示当前的共识版本和未来的硬分叉区块高度(如果有)。
is_key_image_spent <key_image> 检查是否花费了指定的钥匙镜像。钥匙镜像是一个哈希值。

管理守护进程

选项 描述
exit, stop_daemon 让守护进程正常退出。 exit和stop_daemon是相同的(一个是另一个的别名)。
set_log |<{+,-,}categories> 设置当前日志级别/类别,其中是数字0-4。
print_status 显示守护程序是否正在运行。
update (check|download) 检查更新是否可用,并可选择下载。哈希值基于SHA-256。在linux上使用sha256sum来验证。 示例输出: Update available: v0.13.0.4: https://downloads.getmonero.org/cli/monero-linux-x64-v0.13.0.4.tar.bz2, hash 693e1a0210201f65138ace679d1ab1928aca06bb6e679c20d8b4d2d8717e50d6Update downloaded to: /opt/monero-v0.13.0.2/monero-linux-x64-v0.13.0.4.tar.bz2

挖矿

选项 描述
show_hr 要求monerod daemon 停止打印当前算力。 只有当monerod 挖矿时才有用。
hide_hr 要求monerod daemon 打印当前的算力。只有当monerod 挖矿时才有用。
start_mining [] [do_background_mining] [ignore_battery] 要求monerod daemon开始挖矿。区块奖励将转到。
stop_mining 要求monerod daemon 停止挖矿。

测试门罗币

选项 描述
start_save_graph 开始为Dr Monero保存数据。
stop_save_graph 停止为Dr Monero保存数据。

旧版

选项 描述
save 将区块链数据刷新到磁盘。通常不再需要,因为monerod会在退出时自动保存区块链。
output_histogram [@] <min_count> [<max_count>] 显示不同面额代币的输出数量。这只是在环签交易(RingCT)诞生之前的时代有用。旧钱包用它来确定哪些输出可用于所请求的mixin。 在环签交易中,面额与隐藏金额无关。 这些在SA答案中有更多信息。

我们要如何帮助您?