苹果M1芯片架构上的RSK节点? RSK节点是否可在苹果M1芯片架构上运行?

7

按照这些说明在搭载Apple M1 Pro芯片的2021 MBP上安装RSK节点。 我想在regtest模式下本地运行RSK节点。 安装完成后,运行启动RSKj命令:

java \
  -classpath ~/.rsk/rskj-core-3.1.0-IRIS-all.jar \
  -Drpc.providers.web.cors=\* \
  -Drpc.providers.web.ws.enabled=true \
  co.rsk.Start \
  --regtest

...导致以下错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Could not load library. Reasons: [no leveldbjni in java.library.path, /private/var/folders/40/k7t383452q75nkmr_5kl12_80000gn/T/libleveldbjni-64-8276576211622720497.jnilib: dlopen(/private/var/folders/40/k7t383452q75nkmr_5kl12_80000gn/T/libleveldbjni-64-8276576211622720497.jnilib, 0x0001): tried: '/private/var/folders/40/k7t383452q75nkmr_5kl12_80000gn/T/libleveldbjni-64-8276576211622720497.jnilib' (fat file, but missing compatible architecture (have 'x86_64,i386', need 'arm64e')), '/usr/lib/libleveldbjni-64-8276576211622720497.jnilib' (no such file)]
        at org.fusesource.hawtjni.runtime.Library.doLoad(Library.java:182)
        at org.fusesource.hawtjni.runtime.Library.load(Library.java:140)
        at org.fusesource.leveldbjni.JniDBFactory.<clinit>(JniDBFactory.java:48)
        at org.ethereum.datasource.LevelDbDataSource.init(LevelDbDataSource.java:104)
        at org.ethereum.datasource.LevelDbDataSource.makeDataSource(LevelDbDataSource.java:70)
        at co.rsk.RskContext.buildTrieStore(RskContext.java:1031)
        at co.rsk.RskContext.buildAbstractTrieStore(RskContext.java:951)
        at co.rsk.RskContext.getTrieStore(RskContext.java:408)
        at co.rsk.RskContext.buildRepositoryLocator(RskContext.java:1073)
        at co.rsk.RskContext.getRepositoryLocator(RskContext.java:384)
        at co.rsk.RskContext.getTransactionPool(RskContext.java:353)
        at co.rsk.RskContext.buildInternalServices(RskContext.java:844)
        at co.rsk.RskContext.buildNodeRunner(RskContext.java:836)
        at co.rsk.RskContext.getNodeRunner(RskContext.java:302)
        at co.rsk.Start.main(Start.java:34)

看起来最可能的问题是RSKj中的某个内容与我的芯片架构不兼容。 有没有一种解决方法可以让RSKj在M1芯片上运行?

2个回答

5
你可以尝试使用 Rosetta 在 M1 上运行 x86 代码。只需在命令开头添加 arch -x86_64 即可。
arch -x86_64 java \
  -classpath ~/.rsk/rskj-core-3.1.0-IRIS-all.jar \
  -Drpc.providers.web.cors=\* \
  -Drpc.providers.web.ws.enabled=true \
  co.rsk.Start \
  --regtest

arch: posix_spawnp: java: 可执行文件中的CPU类型错误 - Aleks Shenshin
有没有一种方法可以为 Rosetta “安装” 86_64 架构类型? - bguiz
从命令行安装Rosetta:softwareupdate --install-rosetta 更多信息:https://apple.stackexchange.com/questions/408375/zsh-bad-cpu-type-in-executable - Alexander Ushakov

5
您是正确的,问题出在leveldbjni依赖项上,它无法在aarch64架构上运行。但是,您可以通过在Docker容器中运行RSK节点来解决此限制。
这个过程在RSK devportal的Docker安装说明中详细描述。
总结: 您可以通过运行Docker来安装。
brew install --cask docker

注册一个免费的Docker账户,登录你已安装的桌面应用程序,然后在终端运行以下命令:

docker run rsksmart/rskj-standalone

接下来你需要从artifacts仓库下载Dockerfile.RegTestsupervisord.conf文件,在同一文件夹中执行以下操作:

docker buildx build --platform linux/amd64 -t regtest -f Dockerfile.RegTest .

当构建完成后,您将拥有一个可以运行RSK的容器。要运行容器,您应该执行以下命令:

docker run -d --name regtest-node-01  -p 4444:4444 -p 30305:30305 regtest

现在您的本地测试RSK节点将运行,准备测试您的智能合约。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接