比特币技术之迷-概述

比特币技术之迷

闲暇之余,开始阅读比特币源码,本人将收集以及理解的相关资料作为记录,特开此专栏,给大家带入比特币的技术世界。
  

比特币相关资源链接如下:
 比特币技术白皮书:
  http://bitcoin.org/bitcoin.pdf
 
比特币相关wiki文章
  https://en.bitcoin.it/wiki/Category:Technical
 
比特币协议详解
  https://en.bitcoin.it/wiki/Protocol_specification
 
比特币协议规则
  https://en.bitcoin.it/wiki/Protocol_rules
 

  比特币客户端主要包括以下模块:
   初始化模块:
  
在初始化过程中,客户端会初始化各种模块,包括多线程同步操作相关模块
   节点发现模块:
  
客户端通过各种技术细节来实现其它比特币节点的发现
   节点连接模块
  
与其它节点的连接与保持模块
   sokect和消息模块
  
客户端处理来自其它节点的消息,并通过socket和其它节点进行连接
   block交换
  
节点间广播自身持有的block,并与相关节点交换,以建立完备的block chains
  
Transaction交换
   节点间相关交换与传递Transactions。
  
钱包服务
  
用户可以用本地钱包创建Transaction,相关Transaction放在本地钱包中,客户端提供一个服务来管理本地钱包
  
RPC接口
   客户端通过HTTP 和sockets提供
JSON-RPC接口,用来完成各种操作功能和管理本地钱包。
  
   轻客户端模式(fClient
Mode)
  
值得注意的是,客户端已经实现了一种轻模式,在这种模式中只会下载block头信息,这种实现用来实现轻客户端,同时不用验证和保存所有的block和transactions。
  

   目前控制这种轻客户端模式的控制变量已经在代码中硬性写为false了,估计是还没写完。
  

   主线程关键函数流程:
   init.cpp:
   
main()
    ExitTimeout
   
Shutdown
net.cpp:
    StartNode
   
ThreadGetMyExternalIP
    ThreadMapPort
   
ThreadSocketHandler
   
ThreadOpenConnections
   
ThreadMessageHandler
rpc.cpp:
   
ThreadRPCServer
irc.cpp:
   
ThreadIRCSeed
db.cpp:
   
ThreadFlushWalletDB
ui.cpp:
   
ThreadDelayedRepaint
    SendingDialogStartTransfer

各文件中关键类:
 net.cpp/.h:
    CNode: 
处理节点的连接
    CInv
   
CAddress
    CMessageHeader
   
CRequestTracker

main.cpp/.h:
    CDiskTxPos
   
CInPoint
    COutPoint
   
CTxIn
    CTxOut

CTransaction
   
CMerkleTx
    CTxIndex

CBlock
   
CBlockIndex
    CDiskBlockIndex
   
CBlockLocator

CAlert : CUnsignedAlert

wallet.cpp/.h
    CWallet : CKeyStore
   
CReserveKey
    CWalletTx : CMerkleTx
   
CWalletKey
    CAccount
   
CAccountingEntry

db.cpp/.h:
    CTxDB
   
CKeyPool
    CWalletDB

bignum.h
    CBigNum

util.h
    CCriticalSection: 用于线程同步

下一篇我们将讲解 比特币技术之迷-Transaction
交换

(待续)

时间: 2024-12-28 15:56:36

比特币技术之迷-概述的相关文章

比特币技术之迷-Transaction 交换

Transaction 交换每个客户端都会广播本地生成的Transaction,并转给来自其它节点的Transaction,本文主要描述Transaction之间的交换与流转过程. 大家也可以阅读以下文章,来理解Transaction是如何被确定是合法的https://en.bitcoin.it/wiki/Protocol_rules#.22tx.22_messages 钱包发送交易客户端定期调用main.cpp中的 SendMessages()函数,此函数中又调用 ResendWalletTr

AOP技术研究--AOP概述

1 前言 1.1 软件编程技术发展 软件编程技术与程序设计语言是分不开的.过去的几十年中,程序设计语言对抽象机制的支持程度不断提高:从机器语言到汇编语言,到高级语言,再到面向对象语言.每一种新的程序设计语言的出现都带来软件编程方法的飞跃.汇编语言出现后,开发人员避免了直接使用0-l编码,而是利用符号来表示机器指令,从而更方便地编写程序.当程序规模继续增大的时候,出现了以Fortran.C.Pascal等为代表的高级语言,这些高级语言使得编写复杂的程序变得容易,开发人员可以更好地应付日益复杂的代码

Java面试--Spring技术要点--Spring概述

1.Spring的好处/特点 轻量:Spring是轻量的,基本的版本大约2MB. 控制反转(IOC):Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们. 面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开. 容器:Spring包含并管理应用中对象的生命周期和配置. MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品. 事务管理:Spring提供一个持续的事务管理接口,可以扩展到上

无人机航测技术及应用概述

无人机航测 无人机航测是传统航空摄影测量手段的有力补充,具有机动灵活.高效快速.精细准确.作业成本低.适用范围广.生产周期短等特点,在小区域和飞行困难地区高分辨率影像快速获取方面具有明显优势,随着无人机与数码相机技术的发展,基于无人机平台的数字航摄技术已显示出其独特的优势,无人机与航空摄影测量相结合使得"无人机数字低空遥感"成为航空遥感领域的一个崭新发展方向,无人机航拍可广泛应用于国家重大工程建设.灾害应急与处理.国土监察.资源开发.新农村和小城镇建设等方面,尤其在基础测绘.土地资源调

容灾备份技术的分类概述

容灾备份技术在企业的数据丢失或者遇到了重大灾难的时候会发挥相当强劲的作用.企业完全可以不必担心由于数据丢失而无法正常运作.下面多备份带您一起了解一下容灾备份技术的具体分类. 一.选取容灾备份技术的依据 容灾备份的目的是确保灾难发生后业务立即恢复,应用功能能够尽快投入使用,采用的各种技术不论是数据备份,数据复制,还是容灾备份技术,无非都是围绕着业务连续来进行,这些技术是容灾备份的关键环节.衡量这些技术标准无非是RPO(恢复点目标)和RTO(恢复时间目标),也就是出现灾难的时候多长时间可以让业务继续

ajax技术的基本概述

大家都知道ajax并非一种新的技术,而是几种原有技术的结合体.它由下列技术组合而成. 1.使用CSS和XHTML来表示. 2. 使用DOM模型来交互和动态显示. 3.使用XMLHttpRequest来和服务器进行异步通信. 4.使用javascript来绑定和调用. --------------------------------------------------------------------------------------------------------------------

SOA架构实现技术之WebServices概述

一.名词解释 1.SOA(Service Oriented Architecture),面向服务的架构.一种架构,包括了运行环境.编程模型.架构风格和相关方法论等在内的一整套分布式系统构造方法和环境.SOP涵盖了服务的整个生命周期.SOP的架构风格是以服务为最核心的抽象手段. 2.WebServices是一组函数库,与(客户端)项目开发时位于本地的函数库不同,Web服务(WebServices)位于服务提供者的服务器中.Web服务是部署在Web上的对象或应用程序组件. WebServices的特

(转)H.264中的NAL技术

NAL技术 1.NAL概述NAL全称Network Abstract Layer, 即网络抽象层.在H.264/AVC视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象层面(NAL).其中,前者负责有效表示视频数据的内容,而后者则负责格式化数据并提供头信息,以保证数据适合各种信道和存储介质上的传输.现实中的传输系统是多样化的,其可靠性,服务质量,封装方式等特征各不相同,NAL这一概念的提出提供了一个视频编码器和传输系统的友好接口,使得编码后的视频数据能够有效地在各种不

d3js技术文档

D3js技术文档 概述 D3 allows you to bind arbitrary data to a Document Object Model (DOM), and then apply data-driven transformations to the document. For example, you can use D3 to generate an HTML table from an array of numbers. Or, use the same data to cr