diff --git a/src/main/java/com/rust/litewalletjni/LiteWalletJni.java b/src/main/java/com/rust/litewalletjni/LiteWalletJni.java index a3c9d0b6..851213aa 100644 --- a/src/main/java/com/rust/litewalletjni/LiteWalletJni.java +++ b/src/main/java/com/rust/litewalletjni/LiteWalletJni.java @@ -42,8 +42,12 @@ package com.rust.litewalletjni; -public class LiteWalletJni -{ +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class LiteWalletJni { + + protected static final Logger LOGGER = LogManager.getLogger(LiteWalletJni.class); public static native String initlogging(); public static native String initnew(final String serveruri, final String params, final String saplingOutputb64, final String saplingSpendb64); @@ -57,8 +61,42 @@ public class LiteWalletJni public static native String checkseedphrase(final String input); - static { - System.loadLibrary("litewallet-jni"); + private static boolean loaded = false; + + public static void loadLibrary() { + if (loaded) { + return; + } + String osName = System.getProperty("os.name"); + String osArchitecture = System.getProperty("os.arch"); + + LOGGER.info("OS Name: {}", osName); + LOGGER.info("OS Architecture: {}", osArchitecture); + + try { + String libPath; + + if (osName.equals("Mac OS X") && osArchitecture.equals("x86_64")) { + libPath = "librust.dylib"; + } + else if (osName.equals("Linux") && osArchitecture.equals("arm")) { + libPath = "/home/pi/librust.so"; + } + else { + LOGGER.info("Library not found for OS: {}, arch: {}", osName, osArchitecture); + return; + } + + System.load(libPath); + loaded = true; + } + catch (UnsatisfiedLinkError e) { + LOGGER.info("Unable to load library"); + } + } + + public static boolean isLoaded() { + return loaded; } } diff --git a/src/main/java/org/qortal/controller/PirateChainWalletController.java b/src/main/java/org/qortal/controller/PirateChainWalletController.java index 46b209ae..2ef5a567 100644 --- a/src/main/java/org/qortal/controller/PirateChainWalletController.java +++ b/src/main/java/org/qortal/controller/PirateChainWalletController.java @@ -40,6 +40,8 @@ public class PirateChainWalletController extends Thread { public void run() { Thread.currentThread().setName("Pirate Chain Wallet Controller"); + LiteWalletJni.loadLibrary(); + try { while (running && !Controller.isStopping()) { Thread.sleep(1000); @@ -155,8 +157,8 @@ public class PirateChainWalletController extends Thread { } public void ensureInitialized() throws ForeignBlockchainException { - if (this.currentWallet == null || !this.currentWallet.isInitialized()) { - throw new ForeignBlockchainException("Unable to initialize Pirate wallet"); + if (!LiteWalletJni.isLoaded() || this.currentWallet == null || !this.currentWallet.isInitialized()) { + throw new ForeignBlockchainException("Pirate wallet isn't initialized yet"); } }