比特币源码解读之整体框架

      本文主要描述了进程启动时初始化(加载地址、区块、钱包信息,启动节点线程以及矿工挖矿线程等)、比特币客户端交易的发起(交易初始化、提交交易请求、确认和广播及交易)以及比特币客户端当前节点地址和收款方地址。下文将根据总体框架图分别描述各个功能在源码中的函数实现(注:本文不深入函数细节,旨在让大家对整个框架有个初步了解)。
整体框架结构图如下所示:

比特币源码解读之整体框架

1 初始化参数

(1)初始化入口在ui.cpp的OnInit()函数,OnInit()调用OnInit2()函数。
(2)OnInit2()函数调用LoadAddresses()加载地址,该函数加载addr.txt文件中其他节点的地址。
(3)OnInit2()函数调用LoadBlockIndex()加载区块,该函数默认加载blkindex.dat中的数据。
(4)OnInit2()函数调用LoadWallet()加载钱包地址,该函数默认wallet.dat中本节点的地址和收款方的地址。
(5)OnInit2()函数调用ReacceptWalletTransactions()处理孤立块。
(6)OnInit2()函数调用StartNode(strErrors)函数启动当前节点,该节点将监听本地默认端口8333,而后创建4个线程:

  • 从IRC中获取地址信息:_beginthread(ThreadIRCSeed, 0, NULL)
  • 接收其他节点的连接请求信息_beginthread(ThreadSocketHandler, 0, new SOCKET(hListenSocket))
  • 本节点和其他节点建立联系_beginthread(ThreadOpenConnections, 0, NULL)
  • 消息处理线程,处理发送和接收的消_beginthread(ThreadMessageHandler, 0, NULL)

(7)OnInit2()函数将启动ThreadBitcoinMiner线程,该线程用来区块的产生、交易的确认等等。

2 交易

(1)比特币客户端发起交易入口在ui.cpp文件
CSendDialog::OnButtonSend(wxCommandEvent& event) 函数进行处理。
(2)交易的发起位于SendMoney()函数,该函数实现了以下功能:

  • 新建交易CreateTransaction
  • 提交交易请求CommitTransactionSpent
  • 接受交易wtxNew.AcceptTransaction
  • 广播交易wtxNew.RelayWalletTransaction

    3 地址管理

           地址管理分为当前节点地址管理和收款方地址管理,地址存储在wallet.dat文件中。
    (1)当前节点地址管理位于CYourAddressDialog类中,包含新建、重命名、复制等等方法,如下图所示:
    比特币源码解读之整体框架
    (2)收款方地址管理位于CAddressBookDialog类中,包含新建、重命名、复制等等方法,如下图所示:
    比特币源码解读之整体框架

总结

       本文属于比特币系列的第二篇,源码介绍的第一篇。本文主要是介绍比特币总体框架,不涉及各个功能的实现细节,让大家对比特币有一个全局认识,各个功能实现细节将会在后续系列文章中进行描述。大家如果有什么疑问,可以在本文下方留言。

上一篇:
比特币源码解读之前期准备

下一篇:
比特币源码解析之初始化

版权声明:B链网原创,严禁修改。转载请注明作者和原文链接

作者:雨后的蚊子

原文链接:http://www.360bchain.com/article/33.html