<!--
{
  "availability" : [

  ],
  "documentType" : "symbol",
  "framework" : "BitcoinKernel",
  "identifier" : "/documentation/BitcoinKernel/ChainstateManager",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "BitcoinKernel"
    ],
    "preciseIdentifier" : "s:13BitcoinKernel17ChainstateManagerC"
  },
  "title" : "ChainstateManager"
}
-->

# ChainstateManager

The chainstate manager — validates blocks, maintains the block index
and UTXO set, and exposes the active chain.

```
final class ChainstateManager
```

## Overview

One chainstate manager per on-disk data directory. Instantiate from a
[`ChainstateManagerOptions`](/documentation/BitcoinKernel/ChainstateManagerOptions) (which binds it to a [`Context`](/documentation/BitcoinKernel/Context)), then
feed blocks via [`processBlock(_:)`](/documentation/BitcoinKernel/ChainstateManager/processBlock(_:)) or headers via
[`processBlockHeader(_:state:)`](/documentation/BitcoinKernel/ChainstateManager/processBlockHeader(_:state:)). [`BlockchainSync`](/documentation/BitcoinKernel/BlockchainSync) drives the
block-feeding loop automatically; direct callers typically only use
[`processBlock(_:)`](/documentation/BitcoinKernel/ChainstateManager/processBlock(_:)) for replay or testing.

Wraps the opaque `btck_ChainstateManager` type; `deinit` calls
`btck_chainstate_manager_destroy` when the last Swift reference drops.