在 Windows 机器上运行 RSKj 节点时如何修复 LevelDB 库加载错误?

Posted

技术标签:

【中文标题】在 Windows 机器上运行 RSKj 节点时如何修复 LevelDB 库加载错误?【英文标题】:How to fix LevelDB library load error when running RSKj node on a Windows machine? 【发布时间】:2021-10-05 17:18:46 【问题描述】:

我正在尝试在 Windows 机器上运行 RSK 区块链节点 RSKj。当我在终端中运行这一行时:

C:\Users\yemode> java -cp C:\Users\yemode\Downloads\Programs\rskj-core-3.0.1-IRIS-all.jar  co.rsk.Start

RSKj 节点开始运行,但出现以下错误:

Cannot load secp256k1 native library: java.lang.Exception: No native library is found for os.name=Windows and os.arch=x86. path=/org/bitcoin/native/Windows/x86
Exception in thread "main" java.lang.RuntimeException: Can't initialize database
        at org.ethereum.datasource.LevelDbDataSource.init(LevelDbDataSource.java:110)
        at org.ethereum.datasource.LevelDbDataSource.makeDataSource(LevelDbDataSource.java:70)
        at co.rsk.RskContext.buildTrieStore(RskContext.java:1015)
        at co.rsk.RskContext.buildAbstractTrieStore(RskContext.java:935)
        at co.rsk.RskContext.getTrieStore(RskContext.java:416)
        at co.rsk.RskContext.buildRepositoryLocator(RskContext.java:1057)
        at co.rsk.RskContext.getRepositoryLocator(RskContext.java:384)
        at co.rsk.RskContext.getTransactionPool(RskContext.java:353)
        at co.rsk.RskContext.buildInternalServices(RskContext.java:829)
        at co.rsk.RskContext.buildNodeRunner(RskContext.java:821)
        at co.rsk.RskContext.getNodeRunner(RskContext.java:302)
        at co.rsk.Start.main(Start.java:34)

这可能是什么问题?

【问题讨论】:

【参考方案1】:

这实际上是一个警告,而不是错误,尽管它可能看起来像后者。这意味着在您的操作系统和架构上,该特定库不存在,因此它回退到不同的实现(使用非本机库)。在这种情况下,块验证速度较慢,但​​ RSKj 应继续正常运行。

--import 标志可以帮助您克服初始同步的“缓慢”问题。请参阅reference in the CLI docs for RSKj。

您还可以发送 RPC 以确保您的节点运行正常。在终端中运行以下curl 命令

curl \
  -X POST \
  -H “Content-Type:application/json” \
  --data ‘“jsonrpc”:“2.0",“method”:“eth_blockNumber”,“params”:[],“id”:67’ \
  http://localhost:4444

响应应该和这个类似

“jsonrpc”:“2.0",“id”:67,“result”:“0x2b12”

result 是你的最后一个区块号

【讨论】:

我还建议您在几分钟后重新查询同一个 RPC 以检查块数是否增加。这可确保 RSK 节点确实在获取和验证新块,从而验证持久存储(使用任何实现)是否正常运行。

以上是关于在 Windows 机器上运行 RSKj 节点时如何修复 LevelDB 库加载错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 websockets 在本地 RSK 节点上订阅“newBlockHeaders”?

远程机器未运行时如何为远程 JMS 队列初始化 ConnectionFactory?

无法将 Linux 机器作为 Slave 添加到在 Windows 机器上运行的 Jenkins 主机

侦听firebase数据库节点时如何处理kotlin中的竞争条件

连接停止时如何处理猫鼬数据库

运行 Mongoose 时执行 ajax 调用时如何处理 Node.js 发现