Зачем блокировать с помощью txs прерывать пустой блок, когда ethereum исходный код worker.go

Когда я смотрю файл ethereum work.go, метод commitNewWork разбивает фрагменты следующим образом:

if !noempty {
            // Create an empty block based on temporary copied state for sealing in advance without waiting block
            // execution finished.
            w.commit(uncles, nil, false, tstart)
        }

    // Fill the block with all available pending transactions.
    pending, err := w.eth.TxPool().Pending()
    if err != nil {
        log.Error("Failed to fetch pending transactions", "err", err)
        return
    }
    // Short circuit if there is no available pending transactions
    if len(pending) == 0 {
        w.updateSnapshot()
        return
    }
    // Split the pending transactions into locals and remotes
    localTxs, remoteTxs := make(map[common.Address]types.Transactions), pending
    for _, account := range w.eth.TxPool().Locals() {
        if txs := remoteTxs[account]; len(txs) > 0 {
            delete(remoteTxs, account)
            localTxs[account] = txs
        }
    }
    if len(localTxs) > 0 {
        txs := types.NewTransactionsByPriceAndNonce(w.current.signer, localTxs)
        if w.commitTransactions(txs, w.coinbase, interrupt) {
            return
        }
    }
    if len(remoteTxs) > 0 {
        txs := types.NewTransactionsByPriceAndNonce(w.current.signer, remoteTxs)
        if w.commitTransactions(txs, w.coinbase, interrupt) {
            return
        }
    }
    w.commit(uncles, w.fullTaskHook, true, tstart)

Почему блок с txs прерывает пустой блок? по моему мнению, сначала зафиксируйте блок с помощью txs, а затем зафиксируйте пустой, если нет блока с txs, поэтому код должен быть передан функции defer, и пустой не может прервать блок с помощью txs, когда тот же блок num .

emptyFun := func() {
        if !noempty {
            // Create an empty block based on temporary copied state for sealing in advance without waiting block
            // execution finished.
            w.commit(uncles, nil, false, tstart)
        }
    }
defer emptyFun()

тот же вопрос, посетите вопрос github

0 ответов

Другие вопросы по тегам