KEthereum库调用getPrivateKey()遇NoSuchMethodError问题求助
解决KEthereum库调用
getPrivateKey()时出现NoSuchMethodError(带随机后缀)的问题 问题场景
我在Kotlin单元测试中使用KEthereum库时遇到了一个诡异的错误:调用ECKeyPair.getPrivateKey()方法时抛出了java.lang.NoSuchMethodError,错误信息里的方法名后面莫名多了一串随机字符串-V6oYYD4,完整错误内容如下:
java.lang.NoSuchMethodError: 'java.math.BigInteger org.kethereum.model.ECKeyPair.getPrivateKey-V6oYYD4()'
当时我的调用代码是这样的:
val seed: org.kethereum.bip32.model.Seed = MnemonicWords(VALID_MNEMONIC_15).toSeed() val actualPrivateKey: String = seed.toKey("m/").keyPair.privateKey.key.toString()
解决方法
后来我翻了KEthereum库的测试文件,找到了问题的关键——必须先对ExtendedKey执行序列化操作。修改后的代码如下:
val seed: org.kethereum.bip32.model.Seed = MnemonicWords(VALID_MNEMONIC_15).toSeed() val derivedKey = seed.toKey("m/") assertThat(derivedKey.serialize()).isEqualTo(XPRV_OF_MNEMONIC_15)
修改后代码就能正常运行了。
原因推测
方法名后面的随机后缀-V6oYYD4,我推测是JVM编译代码时生成的特殊标识,可能和Kotlin的类型处理、库的内部编译配置有关。而序列化操作触发了正确的方法加载路径,避开了这个编译层面的异常。
内容的提问来源于stack exchange,提问作者Vergil333
相关产品推荐
相关产品推荐

