比特股命令行神器:uptick

之前在介绍比特股开源代码时,漏掉了基于Python的uptick和其依赖库 python-bitshares,因为我确实没发现。最近试用了一下uptick, 我认为非常好用,用了之后,我不想用图形界面的钱包了。本文介绍一下uptick和其依赖的库。

作者:Fabian Schuh

这两个项目的作者是 Fabian Schuh,网名 xeroc, github地址: https://github.com/xeroc ,目前比特股理事会成员之一。个人感觉,他写的代码质量比较高。

项目简介

uptick

uptick是基于Python的命令行工具,用于获取比特股区块链上的各种信息,也可以发起交易和转账。

代码地址: https://github.com/xeroc/uptick

python-bitshares

python-bitshares是基于Python的、与比特股API节点交互的库。uptick的底层。

代码地址: https://github.com/xeroc/python-bitshares

文档地址: http://docs.pybitshares.com/en/latest/

安装步骤

  • 确保系统安装了Python3 (3.3 3.4 3.5 3.6应该都没问题)
  • 确保系统安装了基于Python3的最新版本pip(9.0.1)
  • 命令行: pip3 install uptick
  • 命令行: pip3 install pycrypto (这一步理论上不需要,应该是某一个库依赖没写好的bug)

安装完成之后,首先需要设置API节点,否则默认是一个欧洲的节点,国内用的话很慢。国内尝试这两种

uptick set node wss://bit.btsabc.org/ws     #比特帝国节点
uptick set node wss://bts.transwiser.com/ws #transwiser节点

当然,自己编译了并运行了全节点的话,就更快了:

uptick set node ws://127.0.0.1:8090/

这个节点设定同时影响uptick和python-bitshares库,或者说uptick直接修改和使用了库里面的配置。

uptick常用命令用法表

命令 含义 举例
uptick 获取帮助  
uptick −−help 获取帮助  
uptick <COMMAND> −−help 获取特定子命令的帮助 uptick trades −−help
uptick addkey 增加私钥到钱包,一般用active key用于交易  
uptick listkeys 列出钱包中所有私钥  
uptick listaccounts 列出钱包中所有账号  
uptick trades <MARKET> 查看某个市场的交易历史 uptick trades BTS:CNY #最近,基于CNY的BTS成交情况
uptick orderbook <MARKET> 查看某个市场的当前限价单 uptick orderbook BTS:CNY #现在市场上,基于CNY有多少BTS的买单和卖单
uptick buy <AMOUNT> <ASSET> <PRICE> <BASE> 提交买单 uptick buy 2 BTS 0.4 CNY # 想用0.4CNY/BTS的价格购买2BTS
uptick configuration 查看当前配置  
uptick set <NAME> <VALUE> 修改配置 uptick set node ws://127.0.0.1:8090 # 设置API节点为本地重钱包
uptick info 获取各种信息  
uptick info bitcrab 获取账号bitcrab的相关信息  
uptick info BTS 获取核心资产BTS的相关信息  
uptick history <account> 获取某个账号的历史交易记录 uptick hisotry bitcrab
uptick balance <account> 获取某个账号的当前余额 uptick balance os
uptick feeds <ASSET> 获取某个智能资产的喂价信息 uptick feeds CNY
uptick openorders <account> 获取某个账号的未成交限价单 uptick openorders a-bot

python-bitshares代码示例

python-bitshares的文档也写得很好,有python基础的人能很快上手,这里给出两个示例代码。

获取最近一小时的最多50条BTS:CNY交易,计算这些交易的平均价格

#!/usr/bin/env python3

from bitshares.market import Market
market = Market('BTS:CNY')
from datetime import datetime,timedelta
now = datetime.utcnow()
d = timedelta(hours=-1)
onehourago = now + d


trades = market.trades(limit=50,start=onehourago,stop=now)

def getSum(filledOrders):
    cny = 0
    bts = 0
    for order in filledOrders:
        print(order['time'])
        cny += order['base']['amount']
        bts += order['quote']['amount']

    return {'cny': cny, 'bts': bts,
            'price':  cny/bts if bts >0 else 0,
            'size': len(filledOrders) }

print('成交:', getSum(trades))

获取当前市场上BTS:CNY的最多100条限价单,并分别计算买单和卖单的平均价格

#!/usr/bin/env python3

from bitshares.market import Market
market = Market('BTS:CNY')

orderbook = market.orderbook(limit=50)
#区块链最多返回50个买单和卖单,默认limit=25
bids=orderbook['bids']
asks=orderbook['asks']

def getSum(orders):
    cny = 0
    bts = 0
    for order in orders:
        cny += order['base']['amount']
        bts += order['quote']['amount']

    return {'cny': cny, 'bts': bts,
            'price': cny/bts,
            'size': len(orders) }

print('买单:', getSum(bids))
print('卖单:', getSum(asks))

给读者的思考

感谢阅读到这里的朋友,这么枯燥的技术细节您都读完了,能否思考以下问题呢?

  • uptick/python-bitshares可以发起交易,账号存储在本地计算机,安全性如何?
  • 如何利用uptick/python-bitshares发起交易?
  • 如何利用uptick/python-bitshares发起转账?

虽然我的博客、公众号有一些读者,但很少有留言的,我希望读到这里的朋友留言,给出您的任何想法(不限上面的3个问题),谢谢!