<!--
{
  "availability" : [

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

# Context

A kernel context — the root runtime object for every validation operation.

```
final class Context
```

## Overview

Holds chain parameters ([`ChainParameters`](/documentation/BitcoinKernel/ChainParameters)), optional
[`NotificationCallbacks`](/documentation/BitcoinKernel/NotificationCallbacks) and [`ValidationInterfaceCallbacks`](/documentation/BitcoinKernel/ValidationInterfaceCallbacks), and the
interrupt flag that [`interrupt()`](/documentation/BitcoinKernel/Context/interrupt()) toggles. A [`ChainstateManager`](/documentation/BitcoinKernel/ChainstateManager)
takes a context by reference, so one context can back multiple managers
— typical applications use a single long-lived context per process.

The kernel documents contexts as thread-safe for use from multiple
threads simultaneously. Create once, share freely.

Wraps the opaque `btck_Context` type; `deinit` calls
`btck_context_destroy` when the last Swift reference drops.