主页 > imtoken地址查询 > 比特币/usdt 异常:错误:使用 unencr 运行
比特币/usdt 异常:错误:使用 unencr 运行
imtoken地址查询 2024-01-26 05:07:38
Bitcoin或usdt调用转账接口时,抛出类似如下的异常:
com.googlecode.jsonrpc4j.JsonRpcClientException: Error: running with an unencrypted wallet, but walletpassphrase was called. at com.googlecode.jsonrpc4j.DefaultExceptionResolver.createJsonRpcClientException(DefaultExceptionResolver.java:53) at com.googlecode.jsonrpc4j.DefaultExceptionResolver.resolveException(DefaultExceptionResolver.java:28) at com.googlecode.jsonrpc4j.JsonRpcClient.handleErrorResponse(JsonRpcClient.java:258) at com.googlecode.jsonrpc4j.JsonRpcClient.readResponse(JsonRpcClient.java:184) at com.googlecode.jsonrpc4j.JsonRpcClient.readResponse(JsonRpcClient.java:517) at com.googlecode.jsonrpc4j.JsonRpcHttpClient.invoke(JsonRpcHttpClient.java:155) at com.googlecode.jsonrpc4j.ProxyUtil$3.invoke(ProxyUtil.java:213) at com.sun.proxy.$Proxy69.walletpassphrase(Unknown Source) at com.dc3658.usdt.service.impl.CornServiceImpl.batchSendBtc(CornServiceImpl.java:493) at com.dc3658.usdt.service.impl.CornServiceImpl.sendBtcOrUsdt(CornServiceImpl.java:226) at com.dc3658.usdt.service.impl.CornServiceImpl.walletBtcBalanceCheck(CornServiceImpl.java:149) at com.dc3658.usdt.job.WalletBalanceJob.btcTransfer(WalletBalanceJob.java:69) at sun.reflect.GeneratedMethodAccessor221.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65) at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)
主要原因是钱包是加密的,在上面调用了解密操作。
如果直接调用以下命令:
./omnicore-cli -conf=/mnt/usdt_data/bitcoin.conf walletpassphrase 'password' 60
命令行将返回以下错误信息:
code:-15 message Error: running with an unencrypted wallet, but walletpassphrase was called.
加密操作
那么,如何解决这个问题,首先加密比特币或者usdt,对应的命令是:
./omnicore-cli -conf=/mnt/usdt_data/bitcoin.conf encryptwallet "password" // 或 ./bitcoin-cli -conf=/mnt/btc_data/bitcoin.conf encryptwallet "password"
其中-conf指定配置文件路径,encryptwallet指定加密后的密码。
一般来说,区块链节点加密后需要重启。
运行后,执行上述命令不会有任何异常。
锁钱包
WalletLock 调用从内存中删除钱包的加密密钥,从而锁定钱包。
本次调用后,需要再次调用walletpassphrase解锁钱包usdt密钥忘了,才能继续调用那些需要解锁钱包的RPC API。
先解锁钱包2分钟,执行交易:
~$ bitcoin-cli walletpassphrase "my pass phrase" 120
然后发送一个交易,需要解锁钱包:
~$ bitcoin-cli sendtoaddress "1M72Sfpbz1BPpXFHz9m3CdqATR44Jvaydd" 1.0
现在从内存中清除密码:
~$ bitcoin-cli walletlock
解锁操作
walletpassphrase 调用将钱包的解密密钥保存在内存中,并在指定超时后自动锁定钱包。
调用需要私钥的交易操作时usdt密钥忘了,需要先解锁钱包。
如果钱包已经解锁,再次发送walletpassphrase命令会重新计算钱包的锁定超时时间。
解锁钱包 60 秒:
~$ bitcoin-cli walletpassphrase "my pass phrase" 60
在 60 秒超时前手动锁定:
~$ bitcoin-cli walletlock