比特幣技術之迷html
閒暇之餘,開始閱讀比特幣源碼,本人將收集以及理解的相關資料做爲記錄,特開此專欄,給你們帶入比特幣的技術世界。
比特幣相關資源連接以下:
比特幣技術白皮書:
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
CRequestTrackersocket
main.cpp/.h:
CDiskTxPos
CInPoint
COutPoint
CTxIn
CTxOut函數
CTransaction
CMerkleTx
CTxIndexpost
CBlock
CBlockIndex
CDiskBlockIndex
CBlockLocatorui
CAlert : CUnsignedAlerturl
wallet.cpp/.h
CWallet : CKeyStore
CReserveKey
CWalletTx : CMerkleTx
CWalletKey
CAccount
CAccountingEntry線程
db.cpp/.h:
CTxDB
CKeyPool
CWalletDBhtm
bignum.h
CBigNumblog
util.h
CCriticalSection: 用於線程同步
下一篇咱們將講解 比特幣技術之迷-Transaction 交換
(待續)