本篇博客是PBFT
代码解读的第三篇博客。
Fabric中PBFT源码解读(2)
本篇博客是PBFT
代码解读的第二篇博客。
Fabric中PBFT源码解读(1)
笔者一直以来想学习一下PBFT
的完整工程实践。但在网上搜了很多源码和博客,都没能找到一份比较独立且完整的PBFT
实现。无奈之下,只能从Hyperledger Fabric
的代码中学习其PBFT
共识部分的代码。 因此,接下来的系列博客中,笔者将介绍在Fabric
中是如何实现PBFT
共识算法的。
对分布式系统中各种一致性的理解
分布式系统中存在着各种“一致性”的概念,本篇博客主要对这些概念进行一个总结。 本篇博客没有太多原创的内容,主要是从自己的视角将一些博客和书籍中的知识进行汇总,留作日后的复习。
谈谈序列化的作用
我们应该都用过各种序列化(serialization)的方法(如Python中的pickle.dumps),甚至自己也写过一些序列化的小工具,但可能很少深入思考过序列化的作用。本篇博客即对该问题进行探讨。
谈谈FLP和CAP的关系
承接上一篇博客:也谈分布式系统中的网络模型和故障模型,本篇博客仍然想探讨一些分布式系统的理论知识。
也谈分布式系统中的网络模型和故障模型
分布式系统中的网络模型和故障模型是个老生常谈的问题了。然而这两个模型的界限和联系似乎并不清晰,本篇博客打算谈谈笔者对这两个模型的理解。
并不唯一的交易ID
我们知道,比特币中使用交易ID
(TxID
) 来作为交易在全网的唯一标识。在此语境下,绝大多数人都认为TxID
一定是全网唯一的。 绝大多数情况是这样。但事实上,曾经两起出现过在不同区块中的交易的TxID相同的情况。本篇博客即来介绍这两起TxID
碰撞的故事。
btcd源码解析——交易创建(3)——构造解锁脚本
上一篇博客的最后,我们讲到 AddAllInputScripts
函数体中针对每一个非witness
的input
调用了SignTxOutput
函数。该函数主要用来对当前input
构造解锁脚本。 解锁脚本构造的最关键部分在于签名的构造,因而该函数中是用了Sign
这个词。 此外,SignTxOutput
函数名中虽然写的是output
,但这个output
是UTXO
的意思,也就是当前交易的input
。
在继续本篇博客的阅读之前,强烈建议读者先阅读关于签名机制的三篇博客签名机制(1) —— 基础知识, 签名机制(2) ——签名流程和签名机制(3) —— 源码分析,其中介绍了各种签名哈希类型下message
的内容。