9

Mina 文档 - 故障排除

 2 years ago
source link: https://learnblockchain.cn/article/3366
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

造成这种情况的一个常见原因是路由器不支持通用即插即用协议,该协议允许节点自动配置端口转发。如果您遇到这种类型的问题,找到您的路由器模型,搜索<model> port forwarding,并按照说明将端口从您的路由器转发到运行Mina节点的设备上。 默认情况下,您需要打开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 <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.0 mina-best-tip.log.5 循环。

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

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

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

links need to be replaced

https://docs.minaprotocol.com/en/using-mina/connecting#ubuntu-1804--debian-9-1

https://docs.minaprotocol.com/en/getting-started

https://docs.minaprotocol.com/en/advanced/bp-sidecar

https://docs.minaprotocol.com/en/troubleshooting#what-fee-should-i-use-to-send-a-transaction--my-transaction-is-stuck-as-pending

https://docs.minaprotocol.com/en/architecture/timelock

https://docs.minaprotocol.com/en/troubleshooting#how-can-I-increase-my-chance-of-winning-a-block

https://docs.minaprotocol.com/en/developers/graphql-api


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK