当我查看代码时,存在关于save_transaction的问题,如果我正在保存事务,则尚未提交,并且机器已关闭,我该如何恢复或重播这些事务? 在代码中,在保存交易之前更新帐户状态
pub fn put_account_state_sets(
&self,account_state_sets: Vec<HashMap<accountAddress,accountStateBlob>>,first_version: Version,cs: &mut ChangeSet,) -> Result<Vec<HashValue>> {
let blob_sets = account_state_sets
.into_iter()
.map(|account_states| {
account_states
.into_iter()
.map(|(addr,blob)| (addr.hash(),blob))
.collect::<Vec<_>>()
})
.collect::<Vec<_>>();
let (new_root_hash_vec,tree_update_batch) =
JellyfishMerkleTree::new(self).put_blob_sets(blob_sets,first_version)?;
cs.counter_bumps.bump(
LedgerCounter::NewStateNodes,tree_update_batch.node_batch.len(),);
cs.counter_bumps.bump(
LedgerCounter::NewStateLeaves,tree_update_batch.num_new_leaves,);
tree_update_batch
.node_batch
.iter()
.map(|(node_key,node)| cs.batch.put::<JellyfishMerkleNodeSchema>(node_key,node))
.collect::<Result<Vec<()>>>()?;
cs.counter_bumps.bump(
LedgerCounter::StaleStateNodes,tree_update_batch.stale_node_index_batch.len(),);
cs.counter_bumps.bump(
LedgerCounter::StaleStateLeaves,tree_update_batch.num_stale_leaves,);
tree_update_batch
.stale_node_index_batch
.iter()
.map(|row| cs.batch.put::<StaleNodeIndexSchema>(row,&()))
.collect::<Result<Vec<()>>>()?;
Ok(new_root_hash_vec)
}