将多个操作(operation)放入一个事务中(transaction)steemCreated with Sketch.

in #cn7 years ago

操作、事务、区块 以及区块链
先来简单介绍一下操作、事务以及区块

操作(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)是切实可行的。