比特币技术之迷
闲暇之余,开始阅读比特币源码,本人将收集以及理解的相关资料作为记录,特开此专栏,给大家带入比特币的技术世界。
比特币相关资源链接如下:
比特币技术白皮书:
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
交换
(待续)