[learning]steem区块链机器人开发学习活动(3)-熟悉steem的API以及构建一个OP
目录:
在前面的学习中,我们已经把依赖库装好了,下面进入实操部分。
熟悉steem的API
steem有很多的api,官方帮助文档在此:https://developers.steem.io/apidefinitions/
使用这些api,我们可以查询一切steem区块链上的信息。比如最常见的get_accounts可以查询到用户的信息。我们用这个api作为示例使用一下。
这里简单的使用一个https requests即可使用api,官方节点api.steemit.com有墙,我们可以改为使用@justyy提供的节点:https://api.justyy.com
import requests
nodes="https://api.justyy.com"
player="maiyude"
data = {"jsonrpc": "2.0", "method": "condenser_api.get_accounts", "params": [[player]], "id": 1}
response = requests.post(url=nodes, json=data)
rjson = response.json()
print(rjson)
api会返回json格式的信息,看起来像是乱码一样。
但是里面有一切关于账户的信息,比如你有多少币,有多少RC,有多少SP等等,这是一个非常和实用的api。
其他还有很多api可以自己尝试。
构建一个operations
接下来简单的学习一下如何操作steem区块链。
一般操作就是构建一个operations,然后广播出去,节点同步后,这交易就成功了。
operations有很多种,比如转账啊,发帖啊,等等,大概列一下有这些。
beem库里面有很多预设的方法可以直接调用,但是为了让大家好理解,我们这里来手动构建一个operations。
我们从最简单的Custom_json开始。
我们随意自定义一条这样的json信息发送到区块链上:
{"type": "learning","data":"hello world!"}
代码如下:
from beem.steem import Steem
from beembase import operations
from beem.transactionbuilder import TransactionBuilder
nodes="https://api.justyy.com"
player="maiyude" #你的用户名
keys="5JrxutJXvZwj" #你的key
s = Steem(keys=[keys],node=nodes)
id_name="learning"
json_data = {"type": "learning","data":"hello world!"}
op = operations.Custom_json(
**{
"json": json_data,
"required_auths": [],
"required_posting_auths": [player],
"id": id_name,
})
tx = TransactionBuilder(steem_instance=s)
tx.appendOps(op)
#把签名添加
tx.appendSigner(player, "posting")
print("1生成信息",tx)
tx.sign()
print("2签名信息",tx)
print("3广播信息")
broadcast=tx.broadcast()
print(broadcast)
我们先来看看区块上是否成功了。
区块显示是成功了。
可以使用steemd区块浏览器:https://steemd.com/@maiyude或者我搭建的一个浏览器:https://steemdb.steems.top/#/explorer/@maiyude
解释一下代码:
id_name="learning"
json_data = {"type": "learning","data":"hello world!"}
这是构建Custom_json的内容,可以自定义
op = operations.Custom_json(
**{
"json": json_data,
"required_auths": [],
"required_posting_auths": [player],
"id": id_name,
})
tx = TransactionBuilder(steem_instance=s)
这里写入OP信息,并创建一个空的交易TransactionBuilder
tx.appendOps(op)
#把签名添加
tx.appendSigner(player, "posting")
#签名
tx.sign()
#广播
broadcast=tx.broadcast()
print(broadcast)
上面几行分别是把op信息添加到TransactionBuilder里面去,然后添加账号的签名信息。
之后再用自己的私钥给这笔交易签名。
最后广播了出去。
其他转账、发帖等等操作的大致流程皆是如此,填写op信息,加入TransactionBuilder,签名广播。
课后作业
尝试结合get_accounts的api构建一条以下结构的Custom_json。
id_name="learning"
json_data = {"type": "learning","data":{"myname":"your name","round":1}}
里面的your name通过查询get_accounts api获取你的名字替换上。
例:
在区块53724368至53810768完成作业,可以获得100个learning代币。
感谢鱼叔的教程。我来交作业了!
非常棒!
交作业,哪里查询区块高度呢?
区块浏览器看:https://steemd.com/
虽然不对,但还是交上
![6.png](https://steemitimages.com/640x0/https://cdn.steemitimages.com/DQmbDyc9NpXGRFbMquPr8uWeU6B17p8VqXaGijCKHTFobXg/6.png)
交个作业。