到底什么是重播(Replay)?我的理解

in #cn5 years ago

我们都知道,每当有影响steem区块链数据的共识升级(HardFork),或者当前运行的节点状态数据遭到破坏时,都要进行重播(Replay),在steemit官方github中也叫做reindexing.


(图源 :pexels.com)

重播(Replay)到底是做什么操作的呢?

区块链的状态

简单来讲,区块链是由一堆首尾相连区块排列组成,这些块中包含着用户所作的操作等等(Oprations),比如编号888的区块中张三转账一笔钱给李四小红点赞了小刚的一个帖子,等等等。

那么我们能从888区块中读出李四现在有了多少钱?小刚的那个帖子收益几何?小红还剩多少点赞能量?答案是显然不能。

所以我们需要按照一定的规则来处理区块数据,比如上述888区块中,张三的账户减掉一笔钱加到李四账户上,小红减掉一些点赞能量,小刚的帖子收益相应增加一些,等等等等。

这些随着区块的增加,被不断地处理,使得应用程序一直能够查询到区块的最新状态,比如说现在就可以用get_accounts来查询我的账户:

{"jsonrpc": "2.0", "method": "condenser_api.get_accounts", "params": [["oflyhigh"]], "id": 1}

在我撰写本文时,上述API调用可以查询到我的SP(vesting_shares)等资产:

限于篇幅,不贴长图了。

同理,还可以用其它API查询帖子收益、查询内部市场行情等等等等,这些都依赖于区块链最新状态,假如我们查询的节点状态不是最新,那么得到的数据可能就是陈旧过时的数据,可见这个最新状态多么重要。

什么是重播(Replay)?

好了,讲了这么多,好像也没说到底什么是重播(Replay)?

说到了区块链的状态,如果因为共识升级,区块链的之前的状态需要做一些修改,或者我们不小心把保存区块链状态的内存/文件破坏掉,这时候想简单的恢复状态是做不到的。

那么又要如何操作呢?简单来讲就是从创世块开始重新计算状态,一个块一个块的计算下去,比如第10个块,系统创建了@oflyhigh账户账户余额为0,第100个块@deanliu转给我10SBD,把所有的区块中的所有操作都重新计算一遍,建立起最新的状态。

这个从头把所有区块重新计算一遍来建立最新状态的过程,好像把区块链的过往操作重新上演了一遍,就叫做重播。

形象的比喻

假如你我有很多资金往来,今天我转给你一笔钱,明天你转给我一笔钱,后天我又转你一笔钱但是你又给我转回来一部分,每天转钱后我们都知道你欠我多少钱。

这里的每一天就好比一个区块,每天当中我们做的转钱操作就是Oprations(打包在transaction中,为了便于理解,不过多讲解),经过N天的操作后,你欠我多少钱,这个就是最新状态。

如果正常操作,我只需每天在前一天的状态上加减响应的金额,就会得到当前的最新状态。

但是有一天你不承认这个最新状态了,说这个不对,已经受到了破坏。这时候咋办?我们只需找到我们每天的转账记录,从第一天开始,一笔笔核对,计算每天的最新状态,直到今天。

这个从第一天开始核实转账记录最终算出当前最新状态的过程,就是重播。


以上为个人理解,如有错误,烦请不吝指正。


Vote For Me As Witness
https://steemit.com/~witnesses type in oflyhigh and click VOTE

Vote @oflyhigh via Steemconnect
Thank you!

Sort:  

恭喜你!您的这篇文章入选 @justyy 今日 (2019-09-01) 榜单 【优秀的文章】, 回复本条评论24小时内领赏,点赞本评论将支持 @dailychina 并增加将来您的奖赏。
@justyy 是CN区的见证人,请支持他,给他投票,或者设置justyy为见证人代理。感谢!@justyy的主要贡献:https://steemyy.com

Congratulations! This post has been selected by @justyy as today's (2019-09-01) 【Good Posts】, Steem On! Reply to this message in 24 hours to get rewards. Upvote this comment to support the @dailychina and increase your future rewards! ^_^

SteemIt 工具、API接口、机器人和教程
SteemIt Tools, Bots, APIs and Tutorial



If you believe what I am doing, please consider a spare vote voting me here, thank you very much indeed.

@justyy - the author of https://SteemYY.com and I have been a Steem Witness for more than a year now.

区块链中文第一大银行简介:你的比特币拿不了利息,但是你把比特币换成steem后就能拿利息了!

@oflyhigh, It's appreciable aspect that you are spreading the light upon the Knowledge Transfer aspect.

Posted using Partiko Android

Thank you so much for participating in the Partiko Delegation Plan Round 1! We really appreciate your support! As part of the delegation benefits, we just gave you a 3.01% upvote! Together, let’s change the world!

Coin Marketplace

STEEM 0.30
TRX 0.11
JST 0.033
BTC 64106.00
ETH 3129.71
USDT 1.00
SBD 4.16