> ## Documentation Index
> Fetch the complete documentation index at: https://docs.datafdn.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Runtime Configuration

> DATA Foundation API endpoint, DKG state, threshold tuning, system addresses, and Aeneid runtime notes for the CDR SDK.

<Note>
  This page covers the release-specific and operational details that sit beyond
  basic setup. Start with [Setup CDR Client](/developers/cdr-sdk/setup) first.
</Note>

## DKG State and the DATA Foundation API Endpoint

The SDK reads state from two backends:

| Backend                      | Configured by  | What it reads                                                                   |
| ---------------------------- | -------------- | ------------------------------------------------------------------------------- |
| **EVM**                      | `publicClient` | CDR contract state: vaults, fees, `maxEncryptedDataSize`, operational threshold |
| **DATA Foundation API REST** | `apiUrl`       | DKG state: active round, global public key, threshold, validators, attestations |

The `apiUrl` is a **required** `CDRClient` parameter. It is the base URL of a
DATA Foundation API REST endpoint, and the `observer` uses it for every DKG read.

```typescript theme={null}
const client = new CDRClient({
  network: "testnet",
  publicClient,
  walletClient,
  apiUrl: "http://172.192.41.96:1317",
});
```

For production deployments, point `apiUrl` at your own Story node's REST
gateway rather than the shared endpoint. See
[DATA Foundation API REST Endpoint](/developers/cdr-sdk/setup#data-foundation-api-rest-endpoint)
for the per-network values.

<Note>
  The `observer` caches round-keyed DKG snapshots for rounds in the stable
  Active and Ended stages, with in-flight request deduplication. The active
  round itself is always re-fetched, since it can transition at any time.
</Note>

## Threshold Tuning

By default the SDK uses the network's own DKG threshold when combining partial
decryptions. You can raise the bar with the optional `minThresholdRatio`
parameter, a value in `[0, 1]`:

```typescript theme={null}
const client = new CDRClient({
  network: "testnet",
  publicClient,
  walletClient,
  apiUrl: "http://172.192.41.96:1317",
  minThresholdRatio: 0.67,
});
```

The effective threshold becomes
`max(network.threshold, ceil(participants * minThresholdRatio))`.

<Warning>
  Values above `1` would require more partials than there are participants,
  causing `collectPartials` / `accessCDR` to time out forever. The SDK rejects
  them.
</Warning>

## Contract Addresses

The current Aeneid release uses the following core system addresses:

| Contract | Address                                      |
| -------- | -------------------------------------------- |
| DKG      | `0xCcCcCC0000000000000000000000000000000004` |
| CDR      | `0xCcCcCC0000000000000000000000000000000005` |

The SDK already knows these addresses. For DATA Foundation license-gated condition
contracts, see
[How the DATA Foundation License Read Pattern Works](/developers/cdr-sdk/ip-asset-vaults#how-the-data-foundation-license-read-pattern-works).

## Release Posture and Availability

* Aeneid is the current public **testnet** release for the SDK.
* Confidentiality depends on the DKG threshold and validator / enclave trust
  assumptions described in the CDR overview.
* Availability depends on enough validators responding before timeout. If reads
  fail to reach threshold, retry or increase `timeoutMs`.
* DKG reads depend on the `apiUrl` DATA Foundation API endpoint being correct and
  reachable. Point it at a node you trust for production use.

## Current Release Notes

* DATA Foundation license-gated vaults still require manual condition encoding.
* The CDR SDK does not auto-wrap IP to WIP or auto-approve WIP for license
  minting.
* `accessCDR()` can auto-generate the ephemeral keypair and query `threshold`
  when those params are omitted.
* `createVault` / `readVault` / `createFileVault` / `readFileVault` are
  available as high-level aliases.
* `getRegisteredValidators()` only includes validators whose registration is
  fully ratified (`status = Finalized`).
* `timeoutMs: 120_000` is a good starting point for `accessCDR()` and
  `downloadFile()`.
