比特币源码研读之二

注:纯粹是自己的记录,没有任何参考价值

面对着不知所云的比特币源码,我尝试着采用逐字阅读的笨办法来解读。同时也参考菜菜子的文章还有网上搜索来的解读。

本次选取的是merkle.h,面对浩瀚的程序,我选择挨个打开,当看到merkle.h时,有一种熟悉感,因为区块头里面有Merkle树的根值,那就从它开始了。

// Copyright (c) 2015 The Bitcoin Core developers

// Distributed under the MIT software license, see the accompanying

//file COPYING orhttp://www.opensource.org/licenses/mit-license.php.

一般每段程序前面都会有这样几句,BIECOIN Core团队开发的程序,根据MIT软件开发协议发布,见下文,文件附件及网址。

#ifndef BITCOIN_MERKLE

#define BITCOIN_MERKLE

搜索解释:头件的中的#ifndef,这是"if not defined"的简写宏定义的一种。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。条件指示符#ifndef的最主要目的是防止头文件的重复包含和编译。一般格式是这样的:

#ifndef <标识>

#define <标识>

...

...

#endif

查看程序,果然在最后有#endif。

#include

#include

#include是在程序编译之前要处理的内容,称为编译预处理命令。编译预处理命令还有很多,它们都以“#”开头,并且不用分号结尾,所以不是c语言的程序语句。

C系统的编程语言中,声明在这个地方插入别的文件中的代码,打“<>”这种尖括号,说的是,这个文件是编程环境标配拥有的文件,到默认的标配的地方去找这个文件。

stdint.h是标准C库的头文件,#include 属于STL库 模板库,但为什么没有后缀呢,这是C++里包含的东西写库的人为了和标准C和C++库区分开,所有的模板库的文件都没有后缀。

#include "primitives/transaction.h"

#include "primitives/block.h"

#include "uint256.h"

下面紧接着就是打“”的文件了,表示这不是编程环境标配拥有的文件,要在你的工程文件所在的目录中找,或是在编程环境设定中要查找的目录中去找。或者说标准模板库里没有,但是我需要经常用到,那好我自己就编写一段保存起来,用的时候再调用,因为是自己制作的,那就放在工程文件里,而不是放在标准库房里。这和我们的工作很相似。

uint256 ComputeMerkleRoot(const std::vector& leaves, bool* mutated = NULL);

std::vector ComputeMerkleBranch(const std::vector& leaves, uint32_t position);

uint256 ComputeMerkleRootFromBranch(const uint256& leaf, const std::vector& branch, uint32_t position);

下面就是注释了,

/*

* Compute the Merkle root of the transactions in a block.

* *mutated is set to true if a duplicated subtree was found.

*/

我尝试着将/*用在程序中,发现了规律,这很小的发现虽说时别人的基本功,因为枯燥的阅读添加了乐趣。计算区块里交易的Merkle根值。当找到复制出的子树时,指针变量mutated就被置1。

uint256 BlockMerkleRoot(const CBlock& block, bool* mutated = NULL);

/*

* Compute the Merkle root of the witness transactions in a block.

* *mutated is set to true if a duplicated subtree was found.

*/

Witness见证

uint256 BlockWitnessMerkleRoot(const CBlock& block, bool* mutated = NULL);

/*

* Compute the Merkle branch for the tree of transactions in a block, for a

* given position.

* This can be verified using ComputeMerkleRootFromBranch.

*/

我理解的意思是,计算出根植来了,当你想要查询交易时,可以根据构造出的二叉树结构来很快查询到,上一条是构造,这一条是查询某条交易。

std::vector BlockMerkleBranch(const CBlock& block, uint32_t position);

#endif

因为涉及到uint256.h,又找来该头文件来读一读

// Copyright (c) 2009-2010 Satoshi Nakamoto

// Copyright (c) 2009-2016 The Bitcoin Core developers

// Distributed under the MIT software license, see the accompanying

// file COPYING orhttp://www.opensource.org/licenses/mit-license.php.

同样是前面一段描述,多了一行中本聪的版本。

#ifndef BITCOIN_UINT256_H

#define BITCOIN_UINT256_H

#include

#include

#include

#include

#include

#include

#include "crypto/common.h"

和前面一样,先把一些工具拿来备着,等用到的时候立等可取。

自己的感觉就像是面对一本书,一个字都不认识,开始从字母开始,研究半天大概明白了一个字的意思。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容