monero的python jsonrpc增强版(monerod,monero wallet rpc)。

python-monerorpc的Python项目详细描述


python monerorpc

python monerorpc是python jsonrpc for monero的改进版本(monerod rpcmonero-wallet-rpc)。

python monerorpc最初是从python-bitcoinrpc派生的。

它包括以下一般性改进:

  • http连接在使用requests.Session
  • AuthServiceProxy对象的生命周期内持续存在
  • 根据json-rpc 2.0发送协议“json rpc”
  • 发送正确的、递增的“id”
  • 使用标准的python json库
  • 可以选择记录所有rpc调用和结果
  • JSON-2.0批处理支持(模拟批处理)
    • json-2.0批处理似乎不适用于monero。
    • 批处理功能是模拟的,只是一个接一个地请求给定的方法。
    • 结果是一个字典列表。

它还包括一些更具体的细节:

  • 发送摘要http身份验证头
  • 将所有看起来像浮点数的json数字解析为十进制, 并将十进制值序列化为JSON-RPC连接。

它是做什么的?

python monero rpc通过rpc与monero通信。

包括:

  • monerod rpc以及
  • monero-wallet-rpc

python monerorpc接管包含所有必要头的实际http请求。

与类似项目相比:

  • monero-python

    • moneroPython
    • 该模块实现一个json-rpc后端(monerod rpcmonero-wallet-rpc)。
    • 它围绕这个后端实现(帐户、钱包、事务等)
    • 它提供了一些有用的实用程序,比如monero钱包地址验证器。
  • 实际差异:

    • 如果rpc方法发生更改或应添加新的方法,monero python必须调整其后端及其周围的实现,而使用python monerorpc则只需修改属性或使用如下新方法:
    rpc_connection.getbalance()# -> rpc_connection.get_balance()rpc_connection.new_method()

安装:

来自Pypi

要使用pip从pypi安装python-monerorpc,您只需要:

$ pip install python-monerorpc

来源

$ python setup.py install --user

注意:这将只安装monerorpc。如果您还想安装jsonrpc以保留 向后兼容,您必须用setup.py中的jsonrpc替换monerorpc,然后再次运行它。

示例:

示例用法monerod(获取信息):

frommonerorpc.authproxyimportAuthServiceProxy,JSONRPCException# initialisation, rpc_user and rpc_password are set as flags in the cli commandrpc_connection=AuthServiceProxy('http://{0}:{1}@127.0.0.1:18081/json_rpc'.format(rpc_user,rpc_password))info=rpc_connection.get_info()print(info)# rpc_user and rpc_password can also be left out (testing, develop, not recommended)rpc_connection=AuthServiceProxy('http://127.0.0.1:18081/json_rpc')

示例用法monerod(获取网络类型):

frommonerorpc.authproxyimportAuthServiceProxy,JSONRPCExceptionrpc_connection=AuthServiceProxy('http://{0}:{1}@127.0.0.1:18081/json_rpc'.format(rpc_user,rpc_password))result=Nonenetwork_type=Nonetry:result=rpc_connection.get_info()except(requests.HTTPError,requests.ConnectionError,JSONRPCException)ase:logger.error('RPC Error on getting address'+str(e))logger.exception(e)# Check network typenetwork_type=result.get('nettype')ifnotnetwork_type:raiseValueError('Error with: {0}'.format(result))print(network_type)

示例用法monerod(关于get block hash):

frommonerorpc.authproxyimportAuthServiceProxy,JSONRPCExceptionrpc_connection=AuthServiceProxy('http://{0}:{1}@127.0.0.1:18081/json_rpc'.format(rpc_user,rpc_password))params=[2]hash=rpc.on_get_block_hash(params)print(hash)

示例用法monero-wallet-rpc(获取余额):

frommonerorpc.authproxyimportAuthServiceProxy,JSONRPCException# initialisation, rpc_user and rpc_password are set as flags in the cli commandrpc_connection=AuthServiceProxy('http://{0}:{1}@127.0.0.1:18083/json_rpc'.format(rpc_user,rpc_password))balance=rpc_connection.get_balance()print(balance)

示例用法monero-wallet-rpc(进行传输):

frommonerorpc.authproxyimportAuthServiceProxy,JSONRPCException# initialisation, rpc_user and rpc_password are set as flags in the cli commandrpc_connection=AuthServiceProxy('http://{0}:{1}@127.0.0.1:18083/json_rpc'.format(rpc_user,rpc_password))destinations={"destinations":[{"address":"some_address","amount":1}],"mixin":10}result=rpc_connection.transfer(destinations)print(result)

示例用法monero-wallet-rpc(批处理):

frommonerorpc.authproxyimportAuthServiceProxy,JSONRPCExceptionimportpprint# initialisation, rpc_user and rpc_password are set as flags in the cli commandrpc_connection=AuthServiceProxy('http://{0}:{1}@127.0.0.1:18083/json_rpc'.format(rpc_user,rpc_password))# some example batchparams={"account_index":0,"address_indices":[0,1]}result=rpc.batch_([["get_balance"],["get_balance",params]])pprint.pprint(result)# make transfer and get balance in a batchdestinations={"destinations":[{"address":"some_address","amount":1}],"mixin":10}result=rpc.batch_([["transfer",destinations],["get_balance"]])pprint.pprint(result)

日志记录:

将所有rpc调用记录到stderr:

frommonerorpc.authproxyimportAuthServiceProxy,JSONRPCExceptionimportlogginglogging.basicConfig()logging.getLogger("MoneroRPC").setLevel(logging.DEBUG)rpc_connection=AuthServiceProxy('http://{0}:{1}@127.0.0.1:18081/json_rpc'.format(rpc_user,rpc_password))print(rpc_connection.get_info())

在stderr上生成如下输出:

    DEBUG:MoneroRPC:-1-> get_info []
    DEBUG:MoneroRPC:<-1- {u'result': {u'incoming_connections_count': 0, ...etc }

错误:

可能的错误和错误代码:

  • no code
    • 返回rpc响应中包含的error
  • -341
    • could not establish a connection, original error: {}
    • 包括原始异常消息
  • -342
    • missing HTTP response from server
  • -343
    • missing JSON-RPC result
  • -344
    • received HTTP status code {}
    • 包括http状态代码,而不是200

测试:

安装测试要求:

    virtualenv -q venv
    . venv/bin/activate
    pip install -r requirements.txt

使用pytest

运行单元测试
# virtualenv activated (see above)
    pytest tests.py

作者

  • norman moeschter schenck-初始工作-normoes

另请参阅参与此项目的contributors名单。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
支持不同屏幕大小的java为什么要在安卓中使用fragment而不是activity   java从JTextField获取输入并将其放入if/else语句中   返回空结果的java复杂sql查询   在Java中如何确定三个骰子的直线?   java如何在我的web项目中配置log4J   上次修改的Java文件返回0   amazonwebservicesjava:Dhttps。未使用proxyHost   java Parse createdAt与当前时间的比较(以分钟为单位)   java sonar“测量过滤器为树形图”颜色显示灰色框而不是绿色框   目标c使用SWT Java创建NSPover   java最新版本tomcatembedloggingjuli与其他嵌入式构件不匹配。。这不是tomcat的一部分吗?   java Hibernate+Spring:无法筛选延迟加载的集合   java如何读取整个文件并列出文件中的项目?   java如何创建没有本地主机地址的ServerSocket对象   java使用Base64将BigInteger转换为字符串,并反转结果   java为什么我的JAXB解组器找不到导入模式中声明的元素?   使用SSL忽略的java Android SMTP邮件发件人   java我无法删除应用程序中的文件   java Tesseract:在hOCR文件中获取单词可信度(x_wconf)