主页 > 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

比特币/usdt异常:Error: running with an unencrypted wallet, but walletpassphrase was called.插图