STEEM Transaction 签名学习笔记 (二)/ 投票操作的流程

昨天写完STEEM 签名学习笔记 (一)/ 读操作与写操作以后,发现完全不知道如何进行下去。我觉得我自己给自己挖了个坑,然后掉进坑里,出不来了。

貌似我需要先从坑里爬上来,然后找一部梯子,然后把梯子竖到坑里,然后我再从梯子爬上来,感觉逻辑有点混乱呢?哪里不对呢?


投票操作的流程(wallet)

以投票操作为例,来学习。

看了一下wallet的实现:

貌似怎么看,怎么简单,大致流程如下:

  • 声明vote_operation结构体实例
  • 给结构体实例赋初值
  • 声明signed_transaction结构体实例
  • vote_operation实例添加到signed_transaction实例中
  • signed_transaction实例广播出去

投票操作的流程实例

对应到我们前一篇文章中,来看看每个结构体都长啥样?

['vote',
     {'author': 'oflyhigh.test',
      'permlink': '6r3tt4-test',
      'voter': 'oflyhigh',
      'weight': 2000}]

填充完vote_operation 应该是这个样子。

{'expiration': '',
 'extensions': [],
 'operations': [],
 'ref_block_num': 0,
 'ref_block_prefix': 0,
 'signatures': []}

一个空的transaction应该长成这样,signed_transactiontransaction继承而来。

signed_transaction负责把这些内容填完整。
填完整以后是这个样子:

将填完整后的transaction广播出去的操作我们上节已经演示了如何用curl进行操作,这节就不再赘述了。

signed_transaction做了啥

如果按照我们上述分析,貌似将操作打包并完成签名也没啥难度啊,然而事实是难点都在signed_transaction这完成的。那么它做了啥呢?

因为,投票操作没有extensions,所以我们暂时不予考虑。

operation添加到transaction中也没啥难度。那么去除这些以外,它实际做了三件事:

  • 设置超时时间:expiration
  • 设置ref_block_numref_block_prefix
  • transaction进行签名: 添加signatures部分

好吧,这三个操作我还没搞明白呢,等我明天学习明白一点点再继续毁人不倦。

(封面图源 :pixabay)

H2
H3
H4
3 columns
2 columns
1 column
13 Comments