eth目前的共识算法pow的整理
涉及的代码子包主要有consensus,miner,core,geth
/consensus 共识算法consensus.go1. Prepare方法2. CalcDifficulty方法:计算工作量3. AccumulateRewards方法:计算每个块的出块奖励4. VerifySeal方法:校验pow的工作量难度是否符合要求,返回nil则通过5. verifyHeader方法:校验区块头是否符合共识规则
/miner 挖矿 work.go commitNewWork():提交新的块,新的交易,从交易池中获取未打包的交易,然后提交交易,进行打包 核心代码:
// Create the current work task and check any fork transitions neededwork := self.currentif self.config.DAOForkSupport && self.config.DAOForkBlock != nil && self.config.DAOForkBlock.Cmp(header.Number) == 0 {misc.ApplyDAOHardFork(work.state)}pending, err := self.eth.TxPool().Pending()if err != nil {log.Error("Failed to fetch pending transactions", "err", err)return}txs := types.NewTransactionsByPriceAndNonce(self.current.signer, pending)work.commitTransactions(self.mux, txs, self.chain, self.coinbase)
eth/handler.goNewProtocolManager --> verifyHeader --> VerifySeal
整条链的运行,打包交易,出块的流程
/cmd/geth/main.go/mainmakeFullNode-->RegisterEthService-->eth.New-->NewProtocolManager --> verifyHeader --> VerifySeal
