昨天在见证人群里看大佬巨佬们讨论命令行钱包的事情,说是v1.26.0(rc5)的版本导致以前的一些功能不好用,于是好奇测试了一番。
(图源 :pixabay)
测试环境
测试用到的环境以及工具如下:
- Ubuntu 22.04 LTS
- Hived (v1.26.0rc5)
- cli_wallet_v1.25.0 以及cli_wallet_v1.26.0rc5
- curl
首先,因为HF26已经生效,已经无法连接到v1.25.x的节点啦,所以只能测试连接v1.26.0rc5的节点啦。
Hived中配置如下参数:
webserver-ws-endpoint = 127.0.0.1:8091
webserver-http-endpoint = 127.0.0.1:8081
分别是ws监听的地址与端口、http监听的地址与端口。
另外,主要测试HTTP RPC方式连接使用钱包,而不是直接使用命令行钱包。
测试cli_wallet_v1.25.0
打开钱包:
cli_wallet_v1.25.0 -w mywallet -s ws://127.0.0.1:8091 -H --rpc-http-allowip 127.0.0.1
其中:
-w指定钱包(包含签名用的私钥)-s指定连接节点的ws地址和端口-H表示启用钱包HTTP RPC(默认端口为8093)--rpc-http-allowip表示只允许特定的IP地址
打开钱包后出现类似如下界面:
使用如下请求进行测试:
curl -d '{"jsonrpc": "2.0", "method": "get_block", "params": [1], "id": 1}' http://127.0.0.1:8093
会正常返回创世块的信息:
以上测试表明:使用v1.25.0版本钱包,连接v1.26.0版本节点,没有问题。
需要注意的是,如果钱包启动时,没加--rpc-http-allowip参数,那么访问时就会出现类似如下提示内容:
rejected connection from 127.0.0.1:42064 because it isn't in allowed set []
测试cli_wallet_v1.26.0rc5
使用v1.26.0命令行钱包和相应参数打开钱包:
cli_wallet_v1.26.0rc5 -w mywallet -s ws://127.0.0.1:8091 -H --rpc-http-allowip 127.0.0.1
提示信息看起来一切正常:
但是当我们尝试以发送请求时,发现请求发送后,没有任何响应,钱包端也无任何输出信息。
所以说,至少v1.26.0版本的命令行钱包,与v1.25.0版本的命令行钱包,行为表现上,是不一致的。
很多大佬、巨佬、或者交易所,可能都在使用命令行钱包(HTTP PRC方式)进行一些操作,比如交易所处理充值提现等。
钱包行为表现不一致,可能会给交易所等带来一些麻烦。好在v1.25.0版本的钱包还可以用,这大概算是个好消息。
测试cli_wallet_v1.26.0rc5 + -d参数
以上两个版本命令行钱包,都有一个-d参数可用,帮助信息如下:
-d [ --daemon ] Run the wallet in daemon mode
也就是说,以守护进程模式运行钱包。
我们加上-d参数进行测试:
cli_wallet_v1.26.0rc5 -w mywallet -s ws://127.0.0.1:8091 -H --rpc-http-allowip 127.0.0.1 -d
启动后提示信息如下:
这时我们发送如下请求:
curl -d '{"jsonrpc": "2.0", "method": "get_block", "params": [1], "id": 1}' http://127.0.0.1:8093
如果节点没开启wallet_bridge_api,会被提示找不到wallet_bridge_api,部分提示信息如下:
exception: unspecified\nAssert Exception:api_it r != data._registered_apis.end(): Could not find API wallet_bridge_api\n
在节点配置文件中加上如下语句:
plugin = wallet_bridge_api
重启节点后,重新发送上述请求:
curl -d '{"jsonrpc": "2.0", "method": "get_block", "params": [1], "id": 1}' http://127.0.0.1:8093
可以正常返回创世块信息:
也就是说,使用-d参数,以守护进程方式启动命令行钱包,钱包是可以正常接受HTTP RPC请求的。
另外,就是v1.26.0版本的命令行钱包,依赖于wallet_bridge_api插件,这个依赖无关HTTP RPC或者命令行方式。所以,如果计划使用v1.26.0版本的命令行钱包,对应节点中一定要打开wallet_bridge_api插件。
这也是v1.25版本与v1.26版本命令行钱包,又一处行为不一致的地方。当然了,如果使用的是官方节点或者第三方节点,那么就不用自己关心这个问题啦。
总结
- v1.25.0版本的命令行钱包连接v1.26.0节点后可以正常使用HTTP RPC
- v1.26.0版本的命令行钱包必须使用
-d参数后才可以使用HTTP RPC - v1.26.0版本的命令行钱包依赖于节点的
wallet_bridge_api插件
(图源 :pixabay)
有关命令行方式直接使用命令行钱包,可以参考文末链接。钱包HTTP RPC的使用方式,参考了 大神的早期文档,感兴趣的可以去学习一下。