操作、事务、区块 以及区块链
先来简单介绍一下操作、事务以及区块
操作(operation): 你在steemit上的每一项活动,发帖、回复、点赞、转账等都是操作
事务(transaction): 事务中包含一个或者几个操作(可能是不同人不同种类操作)
区块(block): 每个区块中可能包含一组(0组)或者N组事务
区块链(blockchain): 一系列不断增加(3秒每个)的区块,就构成了STEEM区块链。
亦即:
区块链由区块组成、区块中包含事务,事务中包含操作,操作是我们在STEEM上活动的基本单位。
STEEMIT 一个事务中两个操作的例子
Image source
以发帖为例,我们发表帖子,可以选择发帖的同时投票,也可以选择不投票。
如果勾选了箭头所示的单选框,就会在发帖的同时给帖子投票。
发帖、投票是两个独立的操作,
发帖的同时给帖子投票就是把两个操作放到一个事务中
以我的帖子为例,发帖和投票在一个事务中有相同的transaction_id
如果我们在steemd上打开这个transaction就会看到里边有两项操作,发帖和投票。
Python 库处理发帖并投票的实现
Steemit Python 库也支持发帖的同时投票。
如果设置了对应参数,则在发帖操作以外
post_op = operations.Comment(
**{"parent_author": parent_author,
"parent_permlink": parent_permlink,
"author": author,
"permlink": permlink,
"title": title,
"body": body,
"json_metadata": json_metadata}
)
ops = [post_op]
额外增加了投票操作
if self_vote:
vote_op = operations.Vote(
**{'voter': author,
'author': author,
'permlink': permlink,
'weight': 10000,
}
)
ops.append(vote_op)
通过这个例子可知,Python库是支持把多个操作放到一个事务中的
将多个操作放到一个事务中的例子
Steem 官方Python 库同时提供了一个将多个操作放到一个事务中的例子
详情可以参考这里:
Batching Operations
Most of the time each transaction contains only one operation (for example, an upvote, a transfer or a new post). We can however cram multiple operations in a single transaction, to achieve better efficiency and size reduction.
This script will also teach us how to create and sign transactions ourselves.
代码太长,感兴趣的朋友自己去看吧。
我的测试
我修改了这个例子,并针对我的一个回复进行测试:
(两个操作在一个事务中,相同的transaction_id)
(两个操作在一个事务中,详情)
结论
使用使用官方Python库,将多个操作(operation)放入一个事务中(transaction)是切实可行的。