[learning]steem区块链机器人开发学习活动(3)-熟悉steem的API以及构建一个OP

in STEEM CN/中文3 years ago (edited)

目录:

在前面的学习中,我们已经把依赖库装好了,下面进入实操部分。

熟悉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)

image.png

api会返回json格式的信息,看起来像是乱码一样。
但是里面有一切关于账户的信息,比如你有多少币,有多少RC,有多少SP等等,这是一个非常和实用的api。

其他还有很多api可以自己尝试。

构建一个operations

接下来简单的学习一下如何操作steem区块链。

一般操作就是构建一个operations,然后广播出去,节点同步后,这交易就成功了。

operations有很多种,比如转账啊,发帖啊,等等,大概列一下有这些。

image.png

image.png

image.png

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)

我们先来看看区块上是否成功了。

image.png
区块显示是成功了。

可以使用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获取你的名字替换上。

例:image.png

在区块53724368至53810768完成作业,可以获得100个learning代币。

Sort:  

感谢鱼叔的教程。我来交作业了!

123.png

非常棒!

交作业,哪里查询区块高度呢?

image.png

区块浏览器看:https://steemd.com/

虽然不对,但还是交上
6.png

交个作业。

image.png

Coin Marketplace

STEEM 0.29
TRX 0.12
JST 0.033
BTC 64107.66
ETH 3148.40
USDT 1.00
SBD 3.84