Mina 文档 - 故障排除

  • MinaFans
  • 更新于 2021-12-25 19:41
  • 阅读 4399

Mina 开发者中文文档

8. 故障排除

以下是您在尝试设置Mina守护进程时可能会遇到的一些常见问题。如果您不能在这里找到您的问题,请在Discord上寻求帮助或在Github上打开一个问题。

● 一般

● 同步节点

● 网络

● 账户和交易

● 区块生产者

● snark工作者

● 日志

总述

我的节点每隔几分钟就崩溃一次?

如果节点快速且重复地崩溃,这可能是一个配置问题,例如私钥上的权限不正确,由于错误地传递peers.txt文件而无法找到对等节点,错误的密码或密码中的特殊字符。日志的最后几行应该提供关于该问题的更多信息。

我关闭了SSH终端,节点崩溃了?

如果在前台启动mina守护进程,一旦它失焦,它就会关闭(通过SIGINT信号)。要在后台运行进程,您有很多选项:

● 使用-background标志启动守护进程。

● 作为systemd服务运行(参见文档)。

● 运行Docker(见文档)。

● 在终端多路复用器(如screen或tmux)中运行守护进程,您可以将其分离出来,以保持进程运行。

我们推荐作为一个服务/通过Docker运行,因为他们有在您的节点崩溃时自动重启的优势。

keys目录需要什么权限?

keys目录应该拥有700权限,而私钥文件应该拥有600权限。例如,当keys目录包含在您的主目录中,并且您的私钥文件名为my-wallet时,这些命令会更新权限:

chmod 700 ~/keys
chmod 600 ~/keys/my-wallet

我可以在Raspberry Pi / arm设备上运行吗?

不。仅支持x86-64,不支持ARM。

我的密码中有特殊字符,它给出一个错误?

您应该在密码周围使用引号。例如"MY_PASSWORD" 和/或 可以使用\字符转义密码中的特殊字符,如$

我在运行docker命令遇到一个权限错误?

按照本文的方法将当前用户添加到docker组中。您可以在命令前加上sudo,但不建议这样做。

我看到在macOS上monitor.ml.Error "Timed out getting connection from process" ?

如果您在macOS上运行Mina,看到下面的monitor.ml.Error "Timed out getting connection from process"您需要将您的主机名添加到/etc/hosts中,运行如下命令:

● $ hostname获得你的主名。

● 打开/etc/hosts 文档并添加映射:

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1    localhost
127.0.0.1    <ADD YOUR HOSTNAME HERE>
This is necessary because sometimes macOS doesn't resolve your hostname to your local IP address.

我需要什么硬件?

请在这里查看当前网络的要求。一些较低配置的VPS供应商在生产区块时可能会遇到问题。如果您持续经历错过区块,您可能希望尝试更强大的硬件。

我想要Mina服务在启动时启动吗?

如果您使用systemd来管理Mina守护进程,那么在重新启动计算机时,它将不会自动重新启动。您可以通过systemctl --user start mina手动运行服务,或者运行systemctl --user enable mina让服务在开机时自动启动。

我应该为CODA_PRIVKEY_PASS添加什么?

当您生成密钥对时,您创建了一个密码。使用您为CODA_PRIVKEY_PASS创建的密码。

我得到一个关于~/.mina-config/daemon.json丢失的错误信息?

这是一个可选文件,用于将配置选项传递给守护进程(而不是通过命令行传递)。守护进程在默认情况下查找它,如果不包含它,就会导致错误。忽略这个错误(除非您试图包含它),因为它不是致命的,守护进程会正常启动。

我看到关于验证器/验证器被定期终止的消息

这是正常的,这些进程目前会定期被终止并重新启动。忽略这些消息,除非它们导致致命的错误/崩溃。

我因“致命错误:内存不足”而崩溃?

这是一个常见的问题-在GitHub上查看这个贴子,并添加任何相关信息及日志,重启您的节点。

我可以使用环境变量来提供我的密码吗?

是的。将CODA_PRIVKEY_PASS环境变量设置为你的密码。

我试图安装在Ubuntu 20.04 / Debian 10****得到依赖错误吗?

查看我们的Discord指南,手动解决所需的依赖项。或者,使用支持的操作系统(Ubuntu 18.04/Debian 9)或Docker。

同步节点

我被卡在区块高度1和最大观察区块长度1

mina client status输出如下:

Block height:           1
Max observed block length:    1

此问题已由9652f8ee092ea77e29f5ab49fa0a295e36743e8b版本修复,请确保您已升级。在守护进程初始化时看到高度为1是很正常的。可能需要几分钟(20分钟到一个小时),节点才会进入追赶阶段。

我的“最大观察区块长度”是1,但我的区块高度是正确的?

此问题已由 9652f8ee092ea77e29f5ab49fa0a295e36743e8b版本修复,请确保您已升级。在升级之后,确保让守护进程运行(20分钟到一个小时),错误应该会自行解决。

我的节点在追赶过程被卡/区块高度没有更新

当节点同步时,区块高度应该等于最大观察到的区块长度,如mina client status输出所示,并且应该与当前网络的高度相匹配,如下图截图所示:

同步节点

当启动节点时,节点处于引导/追赶状态,区块高度将显示1或距离当前最佳区块长度几百个区块的数字(但远远大于1)。在追赶期间,区块高度不会增量更新,除了在新区块生产出来时,并且在追赶完成后会跳到正确的高度。所以要有耐心;这个过程可能需要几个小时才能完成,并且根据所使用的硬件有所不同。

我在高度1同步/不在网络的当前高度?

重要的是您当前的区块链长度,正如在mina client status中看到的,等于当前的网络高度。如果您的节点报告它在错误的高度被同步,那么它最终应该进入追赶阶段以使节点达到正确的高度。如果网络看到任何它试图追赶的短分叉,您可能偶尔会在追赶和已同步之间切换。

为什么我的区块链高度跳跃到1000+然后卡住?

我们只需要区块链的最后k(290)个区块来生成区块。所以一旦引导完成,转换边界的根(本质上是您的本地区块存储)应该是当前的最大高度减去k(290)。同步过程中需要花费大量时间的部分是下载那些丢失的k区块,这就是追赶的作用。在追赶期间,您不会看到您的区块高度增加(网络上产生的新区块除外),直到它跳转到当前高度并被同步。这需要时间,所以让它运行吧!

我的同步状态是脱机?

此状态表示在过去的24分钟内没有收到来自对等节点的任何消息。确保您正在使用最新的peers.txt文件。您可以通过以下命令向一个正在运行的节点添加新的对等节点:

cat peers.txt | xargs -I % mina advanced add-peers %

网络

我的主机供应商警告我:“Abuse message: Netscan detected”

我们的p2p网络模块的一些行为触发了一些主机提供商的这个警告(特别是我们在Hetzner上听到的)。为了减轻这种情况,请配置您的防火墙来允许来自ssh、http、https的流量,并拒绝向所有私有ip地址发送的流量。

以下是使用ufw防火墙工具的一个示例。感谢Ducca分享这些规则并确认他们修复了Hetzner上的问题。

允许 SSH, HTTP, HTTPS porst:

ufw allow 22
ufw allow 80
ufw allow 443
ufw enable

阻断外部私有连接:

ufw deny out from any to 10.0.0.0/8
ufw deny out from any to 172.16.0.0/12
ufw deny out from any to 192.168.0.0/16
ufw deny out from any to 100.64.0.0/10
ufw deny out from any to 198.18.0.0/15
ufw deny out from any to 169.254.0.0/16

更多信息请参见 #7053

哪些端口需要开放?

守护进程与对等体通信所需要打开的唯一端口是TCP端口8302

客户端端口8301不应该暴露给网络。可能会有对以前使用过但不再需要的其他端口的过时引用。

节点失败,“未能找到任何对等节点,崩溃,因为这不是一个种子节点”?

首先,确保您已经从收到的电子邮件中下载了最新的对等节点文件——URL不会改变,但对等节点列表会非常频繁地更新。

接下来,根据启动节点所使用的方法,确保向该文件传递了正确的路径。例如,如果使用systemd,在您的主目录中必须有一个peers.txt文件。

该错误应该已通过最近的更新解决,因此确保您使用的是最新版本,并拥有最新的peers文件。

我得到一个错误——不能从互联网上确定我们的IP?

如果您看couldn't determine our IP from the internet, use -external-ip,使用-external-ip <your-ip-address>,那么守护进程不能从这些服务提供者确定它自己的IP。您的防火墙可能正在阻止HTTP/S请求,或者您的网络连接配置错误。

为了绕过这个问题,在启动Mina守护进程时传入标志-external-ip <your-ip-address>要获取外部IP地址,运行curl ifconfig.me

是否需要手动配置端口转发?

Mina节点尽最大努力自我配置,使其能够连接到外部世界,而不需要您做任何额外的工作。然而,这可能会失败,取决于您的路由器和网络设置。在这种情况下,您可能必须手动转发外部端口。

造成这种情况的一个常见原因是路由器不支持通用即插即用协议,该协议允许节点自动配置端口转发。如果您遇到这种类型的问题,找到您的路由器模型,搜索&lt;model> port forwarding,并按照说明将端口从您的路由器转发到运行Mina节点的设备上。</model> 默认情况下,您需要打开TCP端口8302

注意:当在云节点运行Mina时,您应该为您的云提供商配置安全组。

我需要允许“Accept incoming connections”吗?

如果您看到一个或多个类似下面的警告,然后选择"Allow":

Do you want the application "mina" to accept incoming network connections?

账户和交易

我应该用什么费用来发送待处理的交易/我的交易?

包含在区块中的交易按其交易费用进行优先级排序。如果有很多交易是待处理的,那么最高费用的交易将首先包括在内。因此,提高您的费用是确保您的交易包括在内的最好方法。要查看运行节点上的交易池,可以使用以下命令(您需要安装jq,它用于格式化以下命令的输出,例如sudo apt install jq):

mina advanced pooled-user-commands | jq . | grep fee | sort | uniq -c | sort -n
   1   "fee": "0.031",
   5   "fee": "0.1",

如果池中有很多交易,您可能需要增加您的费用。有关交易费用的可视化概述,请参见这里

如果您有一个由于低费用而卡住的交易,您将不得不等待它被包含在一个区块中或者从交易池中被逐出,因为由于这个已知的问题,目前没有办法取消一个交易。

一个区块中可以包含多少交易?

在目前的网络上,是128个,也包括coinbase交易以及支付snark工作者的任何费用转账。

我可以取消交易吗?

目前不行,由于这个BUG

我发送了一笔交易,但它从未包含在区块中?

看到这个答案。该交易可能被挂起,然后最终从交易池中删除。请再次发送。

为什么coinbase是0 /没有交易包括在一个区块?

在某些情况下,不存在任何可购买的或过于昂贵的snark工作。在这种情况下,可能不可能包含coinbase交易,因此区块不会获得coinbase奖励。

如果交易没有包括在内,交易费用很可能不能低效用来购买来snark工作的费用,以包含交易。

发送交易的顺序重要吗?

是的,交易是根据与交易关联的一次性随机数(nonce)顺序处理的。因此,如果您发送了一个被卡住的交易(例如,低费用),那么接下来的所有交易也将被卡住,不管后面的交易使用的费用是多少。不幸的是,由于已知的问题,目前无法取消交易,因此您必须等待交易被包含或从交易池中删除。

为什么我的帐号显示“锁定”?

如果mina帐户列表的输出显示您的帐户被锁定,这意味着您需要使用您的私钥密码解锁它,以便使用它发送交易。要解锁,只需使用mina accounts unlock --public-key command.命令。

区块生产者不需要解锁账号就可以生产区块。

我向水龙头申请了资金,却一直没到?

检查水龙头的状态,看看它是否有任何已知的问题。

您还可以检查这个资源管理器,以查看来自水龙头的所有待处理交易,以查看是否列出了您的交易,或者是否有最近的水龙头交易。

如果您刚刚启动了您的节点,并且还没有同步,那么从水龙头发送的任何余额都不会显示出来,直到节点被同步。

什么是时间锁定的帐户/为什么有些帐户是定时的,有些是不定时的?

请在这里查看文档。

我可以在我被同步之前发送付款吗?

可以,但前提是您的账本上已经有资金了。如果您向水龙头或其他社区成员请求资金,您将需要等待,直到您被同步,以便您可以使用余额发送。

错误:指定的发件人不在分类帐中或在发送交易时将交易发送到交易池中

查看这个答案,如果您在分类账中没有现有的余额,您将需要等待直到您被同步。

我正在运行一个区块生产者,但我在mina帐户列表中没有看到任何东西?

如果您启动守护进程时传递了block-producer-key标志,那么您仍然需要将帐户导入到守护进程以发送交易。为此,使用mina accounts import -priv-key命令,传入私钥文件的位置。

区块生产者

如何运行区块生产者节点?

默认情况下,使用文档中启动节点的方法将运行区块生产者。

我如何知道我正在运行一个区块生产者?

要检查区块生产者的状态,运行mina client status并查找正在运行的区块生产者行。您应该看到一个值1和您的公钥。

运行一个区块生产者

图中的『下一个区块将在多久之后生产』让您知道您赢得下一次出块时隙的时间。如果您在这个纪元没有赢得出块机会,“None this epoch…”的信息将显示出来,并将只在新纪元开始时更新。

我怎样才能增加我赢得区块的机会?

赢得一个区块的机会是由可验证随机函数(VRF)决定的,赢得一个区块的机会与您的质押数量成比例。VRF将总是返回相同的结果,无论它运行多少次,所以没有办法提高您赢得一个区块的机会。除了您的质押数量,还得靠运气。

与您的公钥相关的质押在epoch开始时预先确定。在设计上有延迟,因此在本纪元收到资助、区块链奖励、接收委托、收到snark工作者费用都不会提高本纪元内的出块概率,因为这些数据在被纳入统计前需至少经历一个完整的epoch(~ 2周)。

为什么我的区块是孤立的/为什么我没有得到区块奖励?

由于选择区块生产者的方式,每个slot可以有多个区块生产者。因此,如果为同一个slot产生两个(或更多)区块,它将导致短分叉,并且只会选择一个作为合法链——在这个实例中,赢家是根据每个区块生产者的VRF输出随机产生的。如果您总是看到孤立的区块,那么您可能生成区块的速度太慢了,因此其他区块生产者在构建当前最长的链之前看不到您的区块。

在追赶阶段,也可能产生区块,这个区块也会很快孤立,因为它没有建立在正确的高度。

我没有产生一个区块/我错过了一个插slot?

您可能会错过一个slot/不能成功地生成一个区块,有几个原因,例如,在生成slot时,节点重新启动并处于引导过程中。

同时,您必须在slot时间(3分钟)内产生一个区块。如果您使用的是功能较弱的硬件,或者守护进程正在竞争资源,那么它可能不会及时生成区块。在这种情况下,您应该在您的日志中找到:

Internally generated block $state_hash cannot be rebroadcast because it's not a valid time to do so ($timing)

不建议在生产区块的同时在同一台机器上运行snark 工作者,因为snark工作者是资源密集型的,可能导致不能及时生产区块。您可以在区块生产过程中禁用snark工作者,例如,使用snark stopper脚本。

为什么区块率这么低/多久应该有一个区块?

当前网络上的一个slot是每3分钟一次,但不是所有的slot都应该产生一个区块,平均来说,我们希望每4分钟产生一个区块。然而,并不是所有的出块人都在线并活跃地生产区块,所以并不是所有的slot都产生区块,有时候区块之间会有很长的延迟。随着更多出块人在线,这种情况将得到改善。

为什么O(1)实验室赢得了大部分区块出块?

为了保持网络稳定,O(1) Labs拥有30%的质押,因此赢得slot和生产区块的概率要大得多。余额为66,000 mina的用户有0.1%的机会获得每个slot,所以每隔几天就会提出一个区块,但运气是决定您获得一个区块的频率的主要因素。

我如何知道我是否赢得了一个区块或交易通过?

最简单的方法是检查区块资源管理器。您还可以通过GraphQL API获得最近区块的这些信息。

为什么我有一个信息“No blocks won this this epoch”?

这个答案

Snark工作者

我的snark工作没有被购买/我应该为一个snark工作者支付什么费用?

如果您正在运行一个snark工作程序,并且没有看到任何工作被包含在区块中,那么很可能其他人正在生成更便宜的snark工作。多个snark工作者都在竞争相同的snark工作,只有收费最低的工作才会被区块生产者购买,纳入到snark池中。

有时在区块中会包含高额费用,这是snark工人选择完成哪些工作以及哪些工作需要由区块生产者购买的函数。

默认情况下,snark worker的工作选择是随机的。您可以通过在mina daemon命令中添加-work-selection seq标志来改变这一点,该命令将按照从扫描状态中包含作业的顺序工作,这样您的snark将不会在长时间延迟后才被包含。

对于选择费用,您可以查看历史区块来确定已经购买的价格,或者查看这里列出的表格。

如何禁用snark工作者?

运行 mina client set-snark-worker来禁用snark worker。要再次启用,传递您的公钥mina client set-snark-worker -address &lt;YOUR_PUBLIC_KEY>.

我可以在同一台机器上运行snark工作程序和区块生成程序吗?

是的,您可以这样做,但您应该在区块生产过程中停止snark工作者,以免竞争资源而错过区块的生产。一般来说,snark工作者也会消耗更多的资源。请参阅snark stopper脚本,以帮助实现自动化。

日志记录

我在日志中看到奇怪的消息/错误?

日志是杂乱的并且经常包含“可怕的”消息,如连接失败等。一般来说,如果消息不是致命的,节点也不会崩溃,那么就没什么好担心的。下面的信息都被认为是“正常的”:

"RPC #841 failed: \"internal RPC error error: unknown stream_idx\""
"Peer $peer didn't have enough information to answer ledger_hash query. See error for more details: $error"
"Timed out waiting for the parent of $cached_transition after 0 ms, signalling a catchup job"
"Failed to reset stream (this means it was probably closed successfully): $error
    error: {
 "string":
  "RPC #365 failed: \"internal RPC error error: unknown stream_idx\""
}

如何使日志作为服务运行?

journalctl --user -u mina -n 1000 -f

如何让我的日志运行Docker?

docker logs --follow mina

我如何得到我的日志运行守护进程手动?

tail -f ~/.mina-config/mina.log

有多少日志保存/日志在哪里?

~/.mina-config目录包含Mina日志。该目录包含以下内容:

mina.log—该文件包含守护进程的最新日志。每个日志文件的大小限制为10个MiB,可以在50个日志文件中轮换。旋转后的日志文件命名为mina.log.xmina.log.0mina.log.50

mina-best-tip.log—用于编写最佳的tip日志,以便更容易地从节点收集所需的日志,以确定硬分叉的状态。每个文件限制为5个MiB,最多文件名从mina-best-tip.log.0mina-best-tip.log.5 循环。

mina-prover.log -该日志记录内存使用情况和prover的批处理大小,限制为128 MiB,并通过单个日志文件旋转。

mina-verifier.log-该日志记录内存使用情况和验证器的批处理大小,限制为128 MiB,并通过单个日志文件循环。

● mina.version——这个文件包含运行守护进程的Git SHA。

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
MinaFans
MinaFans
minafans.tech