Python Steem API介绍系列#4 - 转账操作篇

in #cn7 years ago (edited)

今天来说说如何使用Python API进行账户相关的操作。和帐户操作相关的方法都封装在了Commit这个类中,大家可以参考这个类的源代码

进行转账操作

要想进行转账操作,前面提到的POSTING key就不行了,这里需要获取另外一个key,也就是”Active key”,同样,点”Wallet” -> ”Permissions”,就会看到Active key,不是系统默认显示的key,点“LOGIN TO SHOW”,登陆后就可以看到一个以数字5开头的密码了。

有了这个key,就可以进行转账操作了。下面首先来调戏一下booster这个机器人,它和randowhale类似,你转钱给它,它就会Upvote你。下面用前面发过的测试贴来验证一下booster的upvote是不是够给力。

from steem import Steem

user = 'yuxi'

wif = {
    "active": "把你的Active key复制到这里"
}

steem = Steem(keys=wif)
steem.transfer('booster', 1 , 'SBD', memo='https://steemit.com/test/@yuxi/python-api-test', account=user)

运行完毕后,查看一下,在我的history里面显示转账成功。

然后耐心的等了两个多小时,看到booser来upvote了我的帖子,因为只有它自己upvote,所以很清楚的看到它这一下upvote还挺给力,我付了1 SBD,这下upvote却带来了$1.62。

下面再来试试在Steem不同账号之间的转账,比如,把1 SBD转到自己的Saving账户中去:

steem.transfer_to_savings(1, 'SBD', 'Python API test', account=user)

自动Redeem收入

我不知道大家怎么看待Steemit的这个功能,每次有收入到账了,还需要自己点下这个按钮才能真正入账。我觉得应该在用户的profile中添加一个选项,类似“Redeem automatically”,让用户自己来设置是想手工claim还是想让系统自动claim。

Anyway,下面来看看如何使用Python API来自动claim那些到账的rewards。

from steem import Steem
from steem.account import Account

user = 'yuxi'
account = Account(user)

wif = {
    "posting": "将你的POSTING key复制到这里"
}

try:
  steem = Steem(keys=wif)

  sbd   = account.balances["rewards"]["SBD"]
  st      = account.balances["rewards"]["STEEM"]
  vests = account.balances["rewards"]["VESTS"]

  if sbd >0 or st >0 or vests > 0:
    print('claiming rewards ... ')
    steem.claim_reward_balance(account=user)
  else:
    print('nothing to claim')
except:
  print('oops, something not right.')

接下来就可以添加一个Cron job,比如:每天的凌晨1点让系统自动执行你的这个程序,从而省去了手工claim rewards的麻烦。

通过API进行交易的初步设想

很多人都用过 blocktrades 的服务把SBD交易成比特币,在blocktrades的基本流程中,首先要根据你的交易信息,比如SBD -> BTC以及你的比特币钱包地址来生成一个memo,然后再把交易金额转到 @blocktrades 并把memo字段填上前面获取的memo值。不知道有哪位大神用过 blocktrades.us的API,如何通过调用API来生成 memo?(How to get memo field value via blocktrades API? ) @oflyhigh @myfirst @blocktrades

简单的伪代码如下,里面没有考虑影响是否交易的其他因素,比如:SBD/BTC的汇率是否合适等

THRESHOLD = 100
IF 帐户余额 > THRESHOLD
  MEMO = CALL_BLOCKTRADE_API(MY_BTC_ADDRESS, FROM, TO, AMOUNT)
  TRANSFER('blocktrades', 帐户余额, 'SBD', MEMO, account)
END

https://steemit.com 首发。非常感谢阅读,欢迎FOLLOW, Resteem和Upvote @yuxi 激励我创作更多更好的内容。

Sort:  

This post has received a 4.89 % upvote from @booster thanks to: @yuxi.

厉害啊,看的我一愣一愣的,给你个大大的赞

谢谢啦,表扬的我都脸红了

我也觉得不能理解, 为何要手动点一下才能到账, 而不是直接到账...

是的,手工点好麻烦

谢谢分享,我是一个新手,最近在学习steem-python的api,看了你的文章对我很有帮助!

哈哈,一同学习

你好,我是个新手,照你的代码执行出现下面这个错误,能帮我看一下吗:
File "redeem_steem.py", line 20
print('claiming rewards ... ')
^
IndentationError: expected an indented block

你好,这是代码缩进造成的问题。检查一下你的代码看看是否对齐了。还不行的话把代码贴到GitHub我帮你看看。

谢谢,缩进调整了一下,运行顺畅了点,结果是:
claiming rewards ...
oops, something not right.
还是有点问题,代码贴在GitHub上了:
https://github.com/steemit-xiaoliang/steemit-project/blob/redeem_steem/redeem_steem

代码没问题。你肯定是用的自己的Private posting key(5开头的),而不是public posting key(STM开头)?

如果还不行,在程序开头加上这句:import traceback
然后,在最后except后加上(注意缩进对齐):
except:
traceback.print_exc()

这样就能看到具体出错信息。把错误信息贴上来我再帮你看看

Coin Marketplace

STEEM 0.27
TRX 0.13
JST 0.031
BTC 61374.19
ETH 2885.69
USDT 1.00
SBD 3.55