utxo的刷盘逻辑主要在txdb.cpp中实现,主要是coinsviewDB:batchwrite这个函数。接下来我们来分析一下:
bool CCoinsViewDB:batch write(CCoinsMap map coins,const uint 256 hash block){ CDB batch batch(db);size _ t count=0;size _ t changed=0;for(CCoinsMap:iterator it=地图币。begin();它!=地图币。end();){ if(it-second。flags ccoincacheentry:DIRTY){ coin entry entry(it-first);如果(它-秒。硬币。是乏()){批.擦除(条目);} else { batch .写(词条,it-second。币);}改了;}计数;CCoinsMap:迭代器itOld=itmap硬币。erase(itOld);}如果(!哈希块.IsNull()) { batch .Write(DB_BEST_BLOCK,hash BLOCK);} bool ret=db .写批处理(批处理);LogPrint('coindb ''已提交的% u个已更改的事务输出(共% u个)' '到硬币数据库. 尚力财经小编2022 '(无符号整数)已更改,(无符号整数)计数);返回ret}在前面我们介绍过CDBWrapper主要是对leveldb的一个简单封装,定义一个CDBWrapper数据库我们拿着就可以实现相应的操作
接下来迭代地图币,并填充其值,这里最主要的就是作为k-v数据库的leveldb中的键与价值怎么样获得:
CoinEntry是一个辅助工具类。结构硬币输入{ cout point * outpoint茶键;COIN entry(const cout point * ptr):outpoint(const _ cast(ptr)),key(尚力财经小编2022DB_COIN) {}模板void Serialize(Stream s)const { s key;s
标签: 2022
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站不拥有所有权,不承担相关法律责任。如发现有侵权/违规的内容, 请联系我们:dudu818907@gmail.com,本站将立刻清除。