bitcoin源码分析 – 交易验证

Transaction — Verify 交易验证是bitcoin的核心逻辑之一。交易验证包含两个问题: (1)验证的时机 (2)如何验证。 when and where 交易 区块 how AcceptToMemoryPoolWorker VerifyScript when and where 交易 当交易即将放如交易内存池中时, 将进行交易的验证。 调用时机: init(即程序启动时): LoadMempool 交易消息: NetMsgType::TX Wallet: (1)CommitTransaction (2)ReacceptWalletTransactions (3)ResendWalletTransactionsBefore UpdateMempoolForReorg AcceptToMemoryPool函数调用栈如下: AcceptToMemoryPool: AcceptToMemoryPoolWithTime AcceptToMemoryPoolWorker CheckInputs VerifyScript 其中AcceptToMemoryPoolWorker交易验证最核心的函数。 区块 (1)当ConnectBlock(新块产生或收到新块)时, 会对区块包含的所有交易进行验证。 init: CVerifyDB::VerifyDB(需checklevel4,默认为3,故默认不执行) TestBlockValidity(miner.cpp里BlockAssembler::CreateNewBlock调用) CChainState::ConnectTip 部分代码如下所示: CChainState::ConnectBlock: for (unsigned int i = 0; i < block.vtx.size();…

bitcoin源码分析 – 区块操作

Block — 操作 区块产生 区块网络消息 区块回滚 区块序列化 区块产生 ProcessNewBlock 区块网络消息 区块回滚 (1) init: ReplayBlocks (2) ActivateBestChain() ActivateBestChain() ActivateBestChainStep() chainActive.FindFork // Disconnect active blocks which are no longer in the best chain. DisconnectTip DisconnectBlock UndoReadFromDisk // Build list of new blocks to connect. ConnectTip ConnectBlock WriteUndoDataForBlock 孤立块保留多长时间? setBlockIndexCandidates 区块序列化