DAC configuration defaults
Default settings for a Data Availability Committee (AnyTrust) chain as defined in the Arbitrum Chain SDK.
src/prepareChainConfig.tssrc/prepareNodeConfig.tssrc/types/NodeConfig.generated.ts
Chain config defaults
Set at rollup creation time.
{
"arbitrum": {
"EnableArbOS": true,
"AllowDebugPrecompiles": false,
"DataAvailabilityCommittee": false,
"InitialArbOSVersion": 51,
"GenesisBlockNum": 0,
"MaxCodeSize": 24576,
"MaxInitCodeSize": 49152
}
}
To enable DAC, override DataAvailabilityCommittee to true at deployment:
prepareChainConfig({
chainId: 12345,
arbitrum: {
InitialChainOwner: '0x...',
DataAvailabilityCommittee: true,
},
});
Node config defaults (when DAC is enabled)
Generated by prepareNodeConfig() when chainConfig.arbitrum.DataAvailabilityCommittee is true.
{
"node": {
"data-availability": {
"enable": true,
"sequencer-inbox-address": "<from coreContracts>",
"parent-chain-node-url": "<from parentChainRpcUrl>",
"rest-aggregator": {
"enable": true,
"urls": ["http://localhost:9877"]
},
"rpc-aggregator": {
"enable": true,
"assumed-honest": 1,
"backends": "[{\"url\":\"http://localhost:9876\",\"pubkey\":\"YAAA...AAA==\"}]"
}
},
"batch-poster": {
"enable": true,
"max-size": 90000,
"parent-chain-wallet": {
"private-key": "<batchPosterPrivateKey>"
}
}
}
}
Full default values reference
Every DAC-related setting with its documented default, organized by config section.
node.data-availability
| Key | Default | Description |
|---|---|---|
enable | false | Enable AnyTrust Data Availability mode |
panic-on-error | false | Fail immediately on DAS errors (not recommended) |
parent-chain-connection-attempts | 15 | Parent chain RPC retries (standalone daserver only; 0 = infinite) |
parent-chain-node-url | — | Parent chain RPC URL (standalone daserver only) |
request-timeout | 5s | Timeout for Store requests |
sequencer-inbox-address | — | SequencerInbox contract address on parent chain |
node.data-availability.rest-aggregator
| Key | Default | Description |
|---|---|---|
enable | false | Enable REST retrieval of batch data |
max-per-endpoint-stats | 20 | Latency/success-rate stats entries per endpoint |
online-url-list | — | URL to a remote list of REST DAS endpoint URLs |
online-url-list-fetch-interval | 1h0m0s | How often to re-fetch the online URL list |
strategy | simple-explore-exploit | Endpoint selection strategy |
strategy-update-interval | 10s | How often to refresh strategy with latency/error data |
urls | [] | Static list of REST DAS endpoint URLs |
wait-before-try-next | 2s | Time before trying the next set of REST endpoints |
node.data-availability.rest-aggregator.simple-explore-exploit-strategy
| Key | Default | Description |
|---|---|---|
exploit-iterations | 1000 | Consecutive GetByHash calls using best-latency endpoints before switching to explore |
explore-iterations | 20 | Consecutive GetByHash calls using random endpoints before switching to exploit |
node.data-availability.rest-aggregator.sync-to-storage
| Key | Default | Description |
|---|---|---|
delay-on-error | 1s | Wait time before retrying after sync error |
eager | false | Eagerly sync batch data using L1 as index (vs lazy) |
eager-lower-bound-block | — | Starting L1 block for eager sync (only if no prior state) |
ignore-write-errors | true | Log-only on write failures during sync |
parent-chain-blocks-per-read | 100 | Max L1 blocks to read per eager sync poll |
retention-period | 360h0m0s | How long to retain synced data |
state-dir | — | Directory to persist sync progress |
sync-expired-data | true | Sync expired data (needed for mirror configs) |
node.data-availability.rpc-aggregator
| Key | Default | Description |
|---|---|---|
assumed-honest | — | H value; required signatures K = N + 1 - H |
backends | null | JSON array of {url, pubkey} objects. The aggregator assigns each backend a signersMask of 1 << i based on its index in the array, so member order must match the position of each public key in the onchain keyset. |
enable | false | Enable RPC storage of batch data (Batch Poster only) |
node.data-availability.rpc-aggregator.das-rpc-client
| Key | Default | Description |
|---|---|---|
enable-chunked-store | true | Send data to DAS in chunks instead of all at once |
server-url | — | DAS server URL |
node.data-availability.rpc-aggregator.das-rpc-client.data-stream
| Key | Default | Description |
|---|---|---|
max-store-chunk-body-size | 5242880 (5 MB) | Maximum HTTP body size per chunk |
node.data-availability.rpc-aggregator.das-rpc-client.data-stream.rpc-methods
| Key | Default | Description |
|---|---|---|
finalize-stream | das_commitChunkedStore | RPC method to finalize a chunked store session |
start-stream | das_startChunkedStore | RPC method to initiate a chunked store session |
stream-chunk | das_sendChunk | RPC method to send a data chunk |
node.batch-poster (DAC-relevant settings)
| Key | Default | Description |
|---|---|---|
das-retention-period | 360h0m0s | Period DASes retain stored batches in AnyTrust mode |
disable-dap-fallback-store-data-on-chain | false | If true, disables fallback to onchain batch posting when DA fails |
enable | false | Enable batch posting |
max-size | 100000 | Maximum estimated compressed batch size (bytes) |
error-delay | 10s | Delay after batch posting error before retry |
extra-batch-gas | 50000 | Extra gas added to batch posting estimate |
max-delay | 1h0m0s | Maximum batch posting delay |
max-empty-batch-delay | 72h0m0s | Maximum delay before posting an empty batch |
poll-interval | 10s | Interval to check for ready batches |
check-batch-correctness | true | Verify batch against inbox multiplexer |
compression-level | 11 | Batch compression level |
l1-block-bound-bypass | 1h0m0s | Post even if outside L1 bounds, within this margin |
delay-buffer-always-updatable | true | Always treat delay buffer as updatable |
delay-buffer-threshold-margin | 25 | Blocks before delay buffer threshold to post batch |
node.da-provider (Newer DAProvider interface)
| Key | Default | Description |
|---|---|---|
enable | false | Enable DAProvider client |
store-rpc-method | daprovider_store | Single-shot store RPC method name |
use-data-streaming | false | Use chunked streaming protocol for large payloads |
with-writer | false | DAProvider server supports writer interface |
node.da-provider.data-stream
| Key | Default | Description |
|---|---|---|
max-store-chunk-body-size | 5242880 (5 MB) | Maximum HTTP body size per chunk |
node.da-provider.data-stream.rpc-methods
| Key | Default | Description |
|---|---|---|
finalize-stream | daprovider_commitChunkedStore | RPC method to finalize a chunked store session |
start-stream | daprovider_startChunkedStore | RPC method to initiate a chunked store session |
stream-chunk | daprovider_sendChunk | RPC method to send a data chunk |
node.da-provider.rpc
| Key | Default | Description |
|---|---|---|
arg-log-limit | 2048 | Limit size of arguments in log entries |
retries | 3 | Retries on failure (0 = one attempt) |
retry-errors | websocket: close.*|dial tcp .*|.*i/o timeout|.*connection reset by peer|.*connection refused | Regex for auto-retried errors |
websocket-message-size-limit | 268435456 (256 MB) | WebSocket message size limit |
SDK-applied defaults(prepareNodeConfig)
When prepareNodeConfig() detects DataAvailabilityCommittee: true, it applies these concrete values. Source: src/prepareNodeConfig.ts:158-182
| Setting | Value Applied | Notes |
|---|---|---|
data-availability.enable | true | Overrides the false default |
data-availability.sequencer-inbox-address | coreContracts.sequencerInbox | From deployment output |
data-availability.parent-chain-node-url | parentChainRpcUrl | From params |
rest-aggregator.enable | true | Overrides the false default |
rest-aggregator.urls | ["<dasServerUrl>:9877"] | Falls back to http://localhost:9877 |
rpc-aggregator.enable | true | Overrides the false default |
rpc-aggregator.assumed-honest | 1 | Single honest member (dev default) |
rpc-aggregator.backends | JSON with 1 backend | URL at <dasServerUrl>:9876 |
batch-poster.enable | true | — |
batch-poster.max-size | 90000 | Lower than the NodeConfig default of 100000 |