• Pieter Wuille's avatar
    Prepare block connection logic for headers-first. · e06a22b5
    Pieter Wuille authored
    This changes the block processing logic from "try to atomically switch
    to a new block" to a continuous "(dis)connect a block, aiming for the
    assumed best chain".
    
    This means the smallest atomic operations on the chainstate become
    individual block connections or disconnections, instead of entire
    reorganizations. It may mean that we try to reorganize to one block,
    fail, and rereorganize again to the old block. This is slower, but
    doesn't require unbounded RAM.
    
    It also means that a ConnectBlock which fails may be no longer called
    from the ProcessBlock which knows which node sent it. To deal with that,
    a mapBlockSource is kept, and invalid blocks cause asynchronous "reject"
    messages and banning (if necessary).
    e06a22b5
main.cpp 152 KB