自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

呼,是出一口气;吸,是争一口气!

生活不止眼前的苟且,还有读不懂的诗和到不了的远方。

  • 博客(145)
  • 资源 (1)
  • 收藏
  • 关注

原创 比特币源码解析(26) - 可执行程序 - Bitcoind

0x01 Step 11: Import Blocks从这一步的名字也可以看出这一步主要的内容就是导入区块,也就是从外部文件中导入区块信息,并加载到内存,更新区块索引等信息,具体代码如下。// ********************************************************* Step 11: import blocks if (!CheckDiskS...

2019-04-03 17:35:49 441 1

原创 比特币源码解析(25) - 可执行程序 - Bitcoind

0x01 Step 8:Start indexer分析完了第七步,下面我们继续来看第八步的内容。// ********************************************************* Step 8: start indexers if (gArgs.GetBoolArg("-txindex", DEFAULT_TXINDEX)) { g...

2019-04-03 17:31:52 292

原创 比特币源码解析(24) - 可执行程序 - Bitcoind

0x00 失踪人口回归每隔一段时间都是说要写完,结果都是写了一篇就搁下了。。啪啪啪!打脸,嗯,加油写!0x01 AppInitMain Step 7: load block chain 续(2)CCoinsViewCache在上一章中,我们分析到了init.cpp line 1515这里,到此为止整体的状态是我们已经从内存中读取了所有区块的信息,并且建立了所有区块的索引,按常理来讲,接下来...

2019-04-03 17:15:12 410

原创 比特币源码解析(23) - 可执行程序 - Bitcoind

目录目录0x00 回来啦~0x01 AppInitMain Step 7: load block chain 续(1)LoadGenesisBlockCCoinsViewDBReplayBlocks0x00 回来啦~翻起上一篇比特币的分析还是2017年11月16日,现已经2018年6月26了,半年时间过的真快啊。中间也一直想继续写,但总是因为各种事耽误了,...

2018-06-27 15:27:14 1590 4

原创 【CryptoKitties源码解析】养猫的正确姿势!

今天想介绍一个最近比较火的一个“区块链”应用CryptoKitties,这个应用本质上实现的功能就是电子猫的繁殖与交易两个功能,功能上虽然比较简单但是再加上区块链这个强大的底层技术作为支撑,让它在整个行业掀起了一波热潮,甚至还导致了以太坊主网的堵塞,使得以太坊中未确认的交易数量从平常的2.5k增涨到了15k,网络中其他的交易也都受到了极大的影响。

2017-12-10 23:13:19 8744 11

原创 【区块链开发指南】区块链进阶

存储额外数据在区块链上存储额外数据是指那些存在区块链上但是对交易没有任何影响的数据,目前存储额外数据主要有两种方法:OP_RETURN和Multi-Signatures。OP_RETURN2013年,比特币协议中引进了一项新的功能,即:创建一种名为OP_RETURN的交易,可以嵌入40字节小段数据(目前已经是80字节)。

2017-12-10 23:05:11 3145

原创 【区块链开发指南】区块链基础之挖矿和矿池

什么是挖矿?讨论到比特币时,经常会提到的一个名词就是“挖矿”,那么挖矿到底是什么呢?它的详细过程又是怎么的呢?对于我个人而言,以前我知道所谓挖矿大概就是要找一个随机数,使得区块的哈希值小于某个数,但具体是怎样的呢?不知道。。。当然,还不仅如此,很多其他的概念像区块的结构、交易的结构、脚本的类型、P2SH这些概念具体内容到底是什么,其实还是很模糊,只知道大概有某些内容,所以这系列的总结也是为了让自己对

2017-11-28 14:19:22 6774

原创 【区块链开发指南】区块链基础之区块和交易

在区块链网络当中,所有的数据都以区块的形式记录在各个节点上。而每个区块又以单独的文件保存在节点本地磁盘上,在比特币(Linux系统)中所有的区块信息都保存在~/.bitcoin/blocks/目录下面,并以blk***.dat文件名标示。

2017-11-28 14:17:24 5936

原创 【区块链开发指南】区块链基础之比特币地址

比特币地址是一个由数字和字母组成的字符串,并且由公钥经过Hash函数生成。通常我们见到的比特币地址是经过Base58Check编码的,这种编码使用了58个字符和校验码,提高了可读性、避免了歧义,并能有效防止地址输入时产生的错误。

2017-11-28 14:14:01 3322

原创 【区块链开发指南】序言

申明:本系列文章皆是关于《区块链开发指南》一书的摘选与总结,希望能够普及区块链技术,推动区块链行业的健康发展。

2017-11-25 13:47:55 4419

原创 比特币源码解析(22) - 可执行程序 - Bitcoind

0x01 AppInitMain Step 7: load block chain计算缓存大小 fReindex = gArgs.GetBoolArg("-reindex", false); bool fReindexChainState = gArgs.GetBoolArg("-reindex-chainstate", false); // cache size calcula

2017-11-16 22:03:15 5241 8

原创 比特币源码解析(21) - 可执行程序 - Bitcoind

0x00 摘要经过前面20章的分析,我们已经渐渐接近比特币的核心功能部分了,也就是它的共识、交易处理等等。虽然前面基本上都是做的一些初始化的工作,但是这些工作对于比特币的整体运行来说都是必不可缺的,并且就像在之前讲过的信号处理、并发处理等等都是值得学习的部分,本章主要介绍AppInitMain中的Step 6,代码略微有些长所以就分割成小段来进行分析。0x01 AppInitMain Step 6:

2017-11-12 22:49:37 6637 3

原创 比特币源码解析(20) - 可执行程序 - Bitcoind

0x01 AppInitMain Step 5: verify wallet database integrity#ifdef ENABLE_WALLET if (!WalletVerify()) return false;#endifStep 5主要是验证钱包数据库的完整性,从而避免钱包内容被本地错误的修改。钱包的启用是通过一个宏定义来进行实现的,如果启用了这个宏那么就

2017-11-10 19:43:28 2626

原创 比特币源码解析(19) - 可执行程序 - Bitcoind

0x01 StartRPCbool StartRPC(){ LogPrint(BCLog::RPC, "Starting RPC\n"); fRPCRunning = true; g_rpcSignals.Started(); return true;}启动RPC就是将之前的连接到Started的信号全部触发运行,并修改变量fRPCRunning为true,而St

2017-11-09 15:06:41 2403

原创 比特币源码解析(18) - 可执行程序 - Bitcoind

0x01 InitHTTPServer初始化访问控制列表(ACL) if (!InitHTTPAllowList()) return false; if (gArgs.GetBoolArg("-rpcssl", false)) { uiInterface.ThreadSafeMessageBox( "SSL mode for RPC

2017-11-07 10:55:13 3778

原创 比特币源码解析(17) - 可执行程序 - Bitcoind

0x01 Step 4a - ContinueCScheduler 实现 // Start the lightweight task scheduler thread CScheduler::Function serviceLoop = boost::bind(&CScheduler::serviceQueue, &scheduler); threadGroup.create_

2017-09-25 17:05:03 3879 2

原创 比特币源码解析(16) - 可执行程序 - Bitcoind

0x01 AppInitSanityChecks - Step 4 sanity checksbool AppInitSanityChecks(){ // ********************************************************* Step 4: sanity checks // Initialize elliptic curve code

2017-09-22 12:46:49 3410

原创 c++并发编程 - Boost Thread

0x00 摘要在分析比特币源码时,最开始就简单学习了一些boost thread的简单用法和最基本的互斥锁,但看到后面发现还用到了更深层次的并发编程知识,于是又回来完整的学习一下,这里做个学习的总结。本文的内容主要包括线程组(Thread group)以及各种互斥锁(lock_guard, unique_lock)以及更高级一点的condition variable。

2017-09-21 22:03:13 3524 2

原创 比特币源码解析(15) - 可执行程序 - Bitcoind

0x01 Step 3: parameter-to-internal-flags - continue由于Step 3中的内容太多,所以上一章未能完成,这一章继续分析Step 3中剩下的内容。

2017-09-20 10:18:54 4829

原创 比特币源码解析(14) - 可执行程序 - Bitcoind

0x00 AppInitParameterInteraction这个函数包括源码中的Step 2和Step 3两个,主要实现的功能是设置区块链运行时的一些参数。0x01 Step 2 - parameter interactions // if using block pruning, then disallow txindex if (gArgs.GetArg("-prune", 0

2017-09-14 17:11:05 6054 2

原创 比特币源码解析(13) - 可执行程序 - Bitcoind

0x01 AppInitBasicSetup本章我们继续分析AppInit()中的下一个函数AppInitBasicSetup(),从这个函数开始,源码将变量初始化的过程分了很多个Step,我们也按照这样的顺序来依次分析。Step 1: Setup#ifdef _MSC_VER // 如果是VS环境那么就执行 // Turn off Microsoft heap dump noise

2017-09-13 09:45:36 4888 5

原创 比特币源码解析(12) - 可执行程序 - Bitcoind

0x01 InitParameterInteraction下面我们来看上一章第二个函数的实现代码,这个函数中包括一系列的if语句,我们一个个来看。 // when specifying an explicit binding address, you want to listen on it // even when -connect or -proxy is specified

2017-09-11 22:06:58 4493 2

原创 比特币源码解析(11) - 可执行程序 - Bitcoind

0x01 AppInit - Continue对于AppInit中剩下的一部分代码,我们首先浏览一下主要实现的功能,然后再具体介绍每个函数的实现方法。// src/bitcoind.cpp line 127-185// -server defaults to true for bitcoind but not for the GUI so do this here gArgs.So

2017-09-08 19:46:10 5682

原创 比特币源码分析(10) - 可执行程序 - Bitcoind

0x01 AppInit接下来分析main函数中的最后一个函数AppInit,首先看前面一部分代码, // src/bitcoind.cpp line 65-95boost::thread_group threadGroup;CScheduler scheduler;bool fRet = false;// Parameters//// If Qt is used, parameter

2017-09-08 15:48:56 9433

原创 比特币源码解析(9) - 可执行程序 - Bitcoind

我使用的是Ubuntu 16.04 系统所以直接按照https://github.com/bitcoin/bitcoin/blob/master/doc/build-unix.md 编译就可以成功,编译完成之后,生成了一下几个可执行文件

2017-09-03 16:54:51 16183 5

原创 比特币源码解析(7) - 数据结构 - 区块

区块是区块链的组成基本结构,也是交易信息的载体,矿工通过挖矿的形式来产生新的区块并获得奖励,新块产生的过程也是一个交易打包的过程,只有加入到区块中的交易才会被系统所有其他节点所认可,才是有效的。

2017-09-01 19:47:41 9455 1

原创 比特币源码解析(6) - 数据结构 - 交易池

我们知道当交易被广播并且被矿工接收到时,矿工就会把交易加入到本地的交易池当中,每个矿工又会对自己的交易池设置相应的限制,来保证交易数量不会过多,矿工在打包交易到区块中时,也会根据一定的优先顺序来选择交易,从而让自己能获得尽量多的交易费。

2017-09-01 19:45:39 11634

原创 比特币源码解析(5) - 数据结构 - 交易

交易(transaction)是比特币甚至所有区块链中最核心的数据结构之一,可以说其他所有的模块都是为交易服务的,包括交易的产生、广播、共识、存储等等,所以我们首先从交易出发,然后逐步延伸到其他的部分。

2017-09-01 12:01:44 15260 7

原创 比特币源码解析(4) - 准备知识 - libevent & QT

原本想先把这些准备知识(BOOST, libevent, QT)都仔细搞懂之后再去研究比特币的代码的,开始学习了之后才发现还是太天真了,每一项技术背后都不是那么简单的,想完全搞清楚也并非短时间能够搞定,尤其是看到网上一篇QT的教程,作者到16年3月11日截止已经连续写了快4年!所以现在打算转换策略,先了解这些技术的主要功能以及参考资料,等看到具体应用时再回来看他们的原理

2017-08-31 22:04:55 9576

原创 比特币源码解析(3) - 准备知识 - Boost

Boost中Test模块是用来给代码做单元测试的,测试的方法是白盒测试,所以编写测试必须对待测试的模块有深度的理解,然后再对正常功能和可能会出现的问题进行测试,测试的实际过程就是给定输入判定是否和预期的输出相同,所以Test本质上也是个验证等式的工具外加了一层包装。

2017-08-29 22:16:54 10172 1

原创 比特币源码解析(2) - 准备知识 - Boost

0x00 简介Boost是一个开源、跨平台、功能强大的c++库,并且是除了stl外最常用的库,实现了很多基本操作,能让开发变得更加简单、快捷。下面我们就介绍bitcoin源码中主要用到的一些类,官方文档见:http://www.boost.org/doc/libs/1_65_0/ ,其中的每一个类也都包含着非常强大的功能,所以也不是短短几章就可以介绍完的,这里就对他们的基本用法做些介绍,以便于理解比

2017-08-29 11:28:52 19876 6

原创 比特币源码解析(1) - 整体框架

比特币源码解析(1) - 整体框架0x00 写在前面研究了这么久的区块链却一直都没有完整的看过一个区块链项目的代码,甚至还一度沉迷各种ICO,每天看着各种货币层出不穷,跌跌涨涨,起起伏伏,不亦乐乎。现在看来,也许整体来讲赚了点小钱,可是那又有什么意义呢?终究不是长久之计。这两天终于静下来大概浏览了一遍比特币的源代码,比特币作为数字货币的鼻祖,这句话虽然不严格,但是就目前的市场价格而言,可谓是当之无愧

2017-08-27 21:26:14 40660 18

原创 Codeforces 606E Freelancer's Dreams - 线性规划

题目链接: http://codeforces.com/contest/606/problem/E题目意思就是有个二货想成为一个程序员高手还想买套房,成为高手需要经验p,买套房需要金钱q,然而他现在啥都没有(经验金钱都为0),但是他有n个项目,对于每个项目每天可以得经验ai,金钱bi,但是一天只能做一个项目,一个项目做的天数可以是小数经验和金钱还是按照倍数得到, 问最少需要多少天可以实

2015-12-11 20:40:07 1380

原创 bzoj 1588 [HNOI2002]营业额统计

题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=1588Splay模板题。。#include #include using namespace std;#define Key_value (ch[root][ch[root][1]])const int inf = 0x3f3f3f3f;const int ma

2015-12-08 19:53:22 325

原创 poj 3468 A Simple Problem with Integers - Splay

题目链接: http://poj.org/problem?id=3468题意:区间更新,求区间和。本来是线段树区间更新的入门题,一直听说Splay这个神奇的数据结构没去学,于是就学了一下,第一道。。推荐学习:http://notonlysuccess.me/?p=709http://blog.csdn.net/acm_cxlove/article/details/7

2015-12-08 19:49:20 323

原创 bzoj4034[HAOI2015]T2 - 树链剖分

题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=4034题目意思:有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a 。操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。操作 3 :询问某个节点 x 到根的路径中所有点的

2015-11-30 19:20:23 362

原创 bzoj1036: [ZJOI2008]树的统计Count - 树链剖分

题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=1036题意: 给一棵树, 点上有权值, 带单点更新, 询问两点间权值最大值以及路径上所有点权值和。树链剖分入门题。#include using namespace std;#define lson l,m,rt<<1#define rson m+1,r

2015-11-30 11:51:46 387

原创 SPOJ Query on a tree - 树链剖分

题目链接:http://www.spoj.com/problems/QTREE/题意:给一棵树,单点更新, 询问树上两点间路径上边权最大值。树链剖分模板题,学习资料: http://wenku.baidu.com/link?url=SGLjpJtYbJ0HxDYlU_GMXE1qCFS0gbmpDGWPxI7mQuNAsJP0y872mNKwpZ8P054g5XMhFGZb

2015-11-30 10:01:15 338

原创 千里之行, 始于足下

wu.

2015-11-29 16:58:53 551

转载 圆的反演

原文链接: http://blog.csdn.net/acdreamers/article/details/16966369反演的定义:已知一圆C,圆心为O,半径为r,如果P与P’在过圆心O的直线上,且,则称P与P'关于O互为反演。反演的性质:(1)除反演中心外,平面上的每一个点都只有唯一的反演点,且这种关系是对称的,位于反演圆上

2015-11-12 16:09:07 2511

2006陈启峰 - 消防站解题报告

2006陈启峰 - 消防站解题报告 poj 2152 fire

2015-10-10

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除