--- 摄于 2017 年 9 月 藏川线前段
上周,我去泰国浪去了,而且周二也更新了一篇,虽然不是 CITA 系列,但是也不算跳票(emmm,就这样安慰自己)。然后恭喜自己的个人项目 cita-cli 被公司 fork 到了官方库,作为官方对外提供的 cli 工具使用,后面的开发会迁移到公司项目下,自己的库只做同步,issue 和 pr 也在官方仓库接受,地址在这里:https://github.com/cryptape/cita-cli。
Auth 的任务非常单一:
重构 auth 的原因是,之前的版本,存在滥用并发导致的并发问题,会漏掉一些本应该挡住的错误交易。
交易池:https://github.com/cryptape/cita-common/tree/develop/tx_pool
让交易保证顺序出入交易池,加上序列化(txwal.rs),确保交易入池后不会出现意外丢失
MQ 消息处理:https://github.com/cryptape/cita/blob/develop/cita-auth/src/handler.rs#L577
rayon 并行验证:
let results: Vec<(
H256,
Option<Vec<u8>>,
)> = requests_no_cached
.into_par_iter()
.map(|(tx_hash, ref req)| {
let result = verify_tx_sig(req);
match result {
Ok(pubkey) => (tx_hash, Some(pubkey)),
Err(_) => (tx_hash, None),
}
})
.collect();
重点是交易出入交易池必须是线性处理的,而验证 bft 发来的 blockbody 交易块,可以开启 rayon 的线程池验证。
这系列的模块,基本上是以从难到易,从外到内的方式讲解的,其实易于理解也是相对而言,本身每个模块内部还有很多细节需要研究,但是这个系列嘛,本身并不过多纠结于某处细节,讲的是整体思路,所以显得越后面篇幅越短,其实真的不短,只是确实在之前的基础之上,思路讲清就没啥可以说的了。
下一篇尝试讲解一下同步机制。
请登录后评论
评论区
加载更多