比特股命令行神器: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’]

<span class="k">return</span> <span class="p">{</span><span class="s1">&#39;cny&#39;</span><span class="p">:</span> <span class="n">cny</span><span class="p">,</span> <span class="s1">&#39;bts&#39;</span><span class="p">:</span> <span class="n">bts</span><span class="p">,</span>
        <span class="s1">&#39;price&#39;</span><span class="p">:</span>  <span class="n">cny</span><span class="o">/</span><span class="n">bts</span> <span class="k">if</span> <span class="n">bts</span> <span class="o">&gt;</span><span class="mi">0</span> <span class="k">else</span> <span class="mi">0</span><span class="p">,</span>
        <span class="s1">&#39;size&#39;</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">filledOrders</span><span class="p">)</span> <span class="p">}</span>

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’]

<span class="k">return</span> <span class="p">{</span><span class="s1">&#39;cny&#39;</span><span class="p">:</span> <span class="n">cny</span><span class="p">,</span> <span class="s1">&#39;bts&#39;</span><span class="p">:</span> <span class="n">bts</span><span class="p">,</span>
        <span class="s1">&#39;price&#39;</span><span class="p">:</span> <span class="n">cny</span><span class="o">/</span><span class="n">bts</span><span class="p">,</span>
        <span class="s1">&#39;size&#39;</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">orders</span><span class="p">)</span> <span class="p">}</span>

print(‘买单:’, getSum(bids))
print(‘卖单:’, getSum(asks))

给读者的思考

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

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

原文链接:https://blog.xiaofuxing.name/2017/06/01/uptick.html