0%

在前面的比特币源码分析中,我们有意忽略了签名机制部分的介绍。 但比特币的签名机制远非我们想象的那么简单,正如这篇博客Bitcoin contracts所言:

Bitcoin achieves high flexibility due to three features: 1. scripts — unlocking funds in transactions is done using a simple scripting language, 2. signature hash flags — indicate which parts of the transaction are signed, 3. sequence numbers and lock time — mark transactions as not valid until specified time.

换句话说,正是因为不同签名格式(signature hash flags)的存在,才使得比特币的编程功能更加灵活多变。 接下来的三篇博客即从原理和源码两个角度来分析比特币的签名机制。 本篇博客先介绍基础知识,第二篇博客介绍签名流程的基本原理,第三篇博客btcd源码层面讲解签名流程。

源码分析所针对的btcd版本为: ed77733ec07dfc8a513741138419b8d9d3de9d2d

Read more »

从本节开始,我们从源码层面关注比特币交易的构建过程。 其中,我们尤其会关注比特币解锁脚本(为了使用UTXO)和新的锁定脚本(为了生成新的UTXO)的创建细节。我们相信通过跟踪两种脚本的创建过程,我们将对于比特币的交易细节理解得更为深入。

新交易的创建会涉及到两个代码仓库(btcdbtcwallet)编译生成的三个可执行文件(btcdbtcctl,和btcwallet)。 btcdbtcwallet代码版本号如下所示:

  • btcd版本:[git commit log]: ed77733ec07dfc8a513741138419b8d9d3de9d2d
  • btcwallet版本:[git commit log]: ae9416ad7623598121a7c8ad67a202c1be767155

读者如果没有阅读过之前的这两篇博客btcd源码解析btcd源码解析——从“新区块的生成”开始强烈建议先阅读完再来阅读本篇博客。

Read more »

前两篇博客headersFirstMode模式非headersFirstMode模式主要介绍了区块数据同步过程中两个节点如何交互。但我们当时遗留下一个问题:在peer A接收到区块数据之后,是如何将这个区块存储到本地的。回忆我们在headersFirstMode模式的I.F小节最后提到的

由于block的数据存储过程比较复杂,我们在后面会再写一篇博客介绍:从P2P连接中接收到的block数据是如何存储的

本篇博客主要就来介绍“区块数据的存储过程”。

Read more »

上一篇博客btcd源码解析——peer节点之间的区块数据同步(2)——headersFirstMode模式介绍了headersFirstMode模式下,peer节点之间的数据同步过程。本篇博客将介绍非headersFirstMode模式下的数据同步过程。 因为本篇博客中的许多函数都已经在上一篇博客中进行了讲解,且在此不会过多赘述,强烈建议读者在阅读完上一篇博客之后再来阅读本篇博客。

Read more »

从这一篇博客开始,我们将介绍btcd节点之间的数据同步。考虑到内容太长,分为三篇博客来讲解:

  • 第一篇 (本篇) 介绍节点是如何发起数据请求的
  • 第二篇介绍headersFirstMode模式下的数据同步
  • 第三篇介绍非headersFirstMode模式下的数据同步

源码解析是基于btcd仓库c26ffa870fd817666a857af1bf6498fabba1ffe3commit id 版本。

我们假设peer B是先启动的节点,peer A后启动。peer A在启动后需要从peer B同步数据,那么peer A应该首先向peer B发送数据请求。

Read more »