在 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 主机