Skip to main content

Network

Represents a blockchain network.

Description

A Network object contains the desired configuration of a blockchain network and reports its ongoing status via status.

To provision a network, create a network object. The following request will create an Ethereum network with default configurations and install the Chainlink and The Graph plugins:

POST /v1alpha1/workspaces/{workspace}/networks
Content-Type: application/json

{
"metadata": {
"name": "octonet",
}
"spec": {
"chain": {
"type": "Ethereum",
"ethereum": {
"plugins": {
"chainlink": {},
"graph": {}
}
}
}
}
}

The server responds immediately with 201 Created and background controllers will start the provisioning process. For a full list of supported blockchain platforms and their respective plugins, see Supported chains and plugins.

You may request the network you just created:

GET /v1alpha1/workspaces/{workspace}/networks/octonet

And the server responds with:

{
"kind": "Network",
"version": "v1alpha1",
"metadata": {
"name": "octonet",
"workspace": <workspace>,
"rev": 1,
"ownerID": <owner_id>,
"createdAt": "2025-07-14T23:48:01.153Z",
"updatedAt": "2025-07-14T23:48:01.153Z",
},
"spec": {
"chain": {
"type": "Ethereum",
"ethereum": {
// ...
}
}
},
"status": {
"phase": "Pending",
"message": "Provisioning network",
"execution": {
"currentStep": 15,
"totalSteps": 56,
},
"chainSpecHash": "...",
"lastActivityAt": "2025-07-14T23:48:01.153Z",
"lastWakeUpAt": "2025-07-14T23:48:01.153Z"
}
}

Notice how the network status is reported under status.

If you are using forked networks and want to resync to the latest block height, you may send an update network request with spec.maintenanceRequest:

PUT /v1alpha1/workspaces/{workspace}/networks
Content-Type: application/json

{
"metadata": {
"name": "octonet",
}
"spec": {
"chain": {
"type": "Ethereum",
"ethereum": {
"plugins": {
"chainlink": {},
"graph": {}
}
},
},
"maintenanceRequest": {
"action": "Resync",
"nonce": 1
}
}
}

Note that nonce must be different from status.observedMaintenanceNonce (0 if not set) for the maintenance action to be applied.

If you no longer need a network, you may delete it:

DELETE /v1alpha1/workspaces/<workspace>/networks/octonet

Supported chains and plugins

We currently support the following chains (or platforms) and plugins:

TypeDescriptionPlugins AvailableKurtosis package
EthereumFull consensus + execution layerChainlink, DFNS, Graph, Uniswap, VRFethereum-package
ArbitrumArbitrum L2 networksChainlink, DFNS, Graph, VRFethereum-package
OptimismOptimism L2 networksChainlink, DFNS, Graph, VRFethereum-package
PolygonPolygon networksChainlink, DFNS, Graph, VRFethereum-package
BaseBase L2 networksChainlink, DFNS, Graph, VRFethereum-package
BNBBNB Smart ChainChainlink, DFNS, Graph, VRFethereum-package
AvalancheAvalanche C-ChainChainlink, DFNS, Graph, VRFethereum-package
FantomFantom networksChainlink, DFNS, Graph, VRFethereum-package
MantleMantle networksChainlink, DFNS, Graph, VRFethereum-package
ZKSyncZKSync Era networksChainlink, DFNS, Graph, VRFethereum-package
SolanaSolana networksN/Asolana-package
LayerZeroCross-chain infrastructureMulti-chain configurationlayerzero-package

Persistent network

By default, networks stop shortly after 24 hours since the last wake up. Any activity one the network (viewing, updating, using endpoints) will cause the network to be restarted. At the moment, all data on the network will be lost.

To have networks running permanently with stronger guarantees, set spec.persistent to true, subject to workspace quota limits. For more information about quotas, see Quota. Persistent networks may take longer to provision due to higher compute constraints.

Operations

GET /v1alpha1/workspaces/{workspace}/networks/{name}

Get network name in workspace workspace

Responses

HTTP CodeResponse
200 OKNetwork
404 Not FoundError

GET /v1alpha1/workspaces/{workspace}/networks

Get all networks in workspace workspace that the current requester has access to.

Query parameters

ListOptions

Selectable fields: status.phase, spec.chain.type, metadata.ownerID, spec.persistent

Responses

HTTP CodeResponse
200 OKNetworkList
404 Not FoundError

GET /v1alpha1/workspaces/{workspace}/networks/{name}/endpoints

Get all endpoints that network name exposes.

Responses

HTTP CodeResponse
200 OKEndpointSet
404 Not FoundError

POST /v1alpha1/workspaces/{workspace}/networks

Create a network in workspace workspace

Request body

Network

{
"metadata": {
"name": "octonet"
},
"spec": {
"chain": {
"type": "Ethereum",
"ethereum": {
"plugins": {
"chainlink": {},
"graph": {}
}
}
}
}
}

Responses

HTTP CodeResponse
201 CreatedNetwork
400 Bad RequestError

PUT /v1alpha1/workspaces/{workspace}/networks

Updates network name in full in workspace workspace

Request body

Network

Responses

HTTP CodeResponse
200 OKNetwork
400 Bad RequestError
404 Not FoundError
409 ConflictError

DELETE /v1alpha1/workspaces/{workspace}/networks

Delete network name from workspace workspace

Responses

HTTP CodeResponse
200 OKNetwork
404 Not FoundError
409 ConflictError

API objects

Network

FieldTypeRequiredNotes
metadataObjectMetaStandard object metadata
spec.persistentbooleanWhether the network should be persistent
spec.maintenanceRequest.actionRestart | ResetState | ResyncMaintenance action to take
spec.maintenanceRequest.nonceintIncrement to trigger the maintenance action (compare with status.observedMaintenanceNonce)
spec.chain.typeEthereum | Arbitrum | Optimism | Base | BNB | Avalanche | Fantom | Mantle | ZKSync | Solana | LayerZeroYesThe chain type of the network
spec.chain.ethereumEthereumSpecYes if spec.chain.type == "Ethereum"Ethereum chain parameters
spec.chain.arbitrumLayer2SpecYes if spec.chain.type == "Arbitrum"Arbitrum chain parameters
spec.chain.optimismLayer2SpecYes if spec.chain.type == "Optimism"Optimism chain parameters
spec.chain.baseLayer2SpecYes if spec.chain.type == "Base"Base chain parameters
spec.chain.bnbLayer2SpecYes if spec.chain.type == "BNB"BNB chain parameters
spec.chain.avalancheLayer2SpecYes if spec.chain.type == "Avalanche"Avalanche chain parameters
spec.chain.fantomLayer2SpecYes if spec.chain.type == "Fantom"Fantom chain parameters
spec.chain.mantleLayer2SpecYes if spec.chain.type == "Mantle"Mantle chain parameters
spec.chain.zksyncLayer2SpecYes if spec.chain.type == "ZKSync"ZKSync chain parameters
spec.chain.solanaLayer2SpecYes if spec.chain.type == "Solana"ZKSync chain parameters
spec.chain.layerzeroLayerZeroSpecYes if spec.chain.type == "LayerZero"LayerZero chain parameters
status.enclaveIDstringInternal identifier for the running enclave
status.phasePending | Operational | Stopping | Stopped | ErrorNetwork phase
status.messagestringHuman-readable message of why the network is in this status
status.execution.outputstringThe output of the package
status.execution.currentStepintIndex of the step currently running
status.execution.totalStepsintTotal number of planned steps
status.chainSpecHashstringHash of the applied spec.chain
status.observedMaintenanceNonceintLast processed spec.maintenanceRequest.nonce
status.lastActivityAtstringLast activity time in RFC 3339 format
status.lastStoppedAtstringWhen the network last reached Stopped in RFC 3339 format
status.lastWakeUpAtstringWhen the network last resumed from Stopped or started for the first time in RFC 3339 format

EthereumSpec

FieldTypeRequiredNotes
packageVersionenumKurtosis package version
chainIDstringAutogenerated if omitted on create
blockTimeintSeconds
gasLimitintGenesis block gas limit
churnLimitQuotientintBeacon-chain parameter
ejectionBalanceintBeacon-chain parameter
followDistanceintBeacon-chain parameter
minWithdrawalDelayintBeacon-chain parameter
shardCommitteePeriodintBeacon-chain parameter
validatorCountintNumber of validators seeded
mnemonicRefLocalObjectReference24-word seed (EL + CL)
privateKeyRefLocalObjectReferenceYesFund-holding hot key
forking.enabledbooleanWhether this network will fork data from mainnet
forking.blockHeightstringBlock height to fork up to
plugins.chainlinkobjectChainlink node set-up
plugins.uniswapobjectUniswap config
plugins.graphobjectThe Graph config
plugins.vrfobjectVRF config
plugins.vrf.typevrfv2plus | mpcVRF type
plugins.dfnsobjectDFNS config
participantsEthereumParticipantSpec[]Participant parameters

EthereumParticipantSpec

FieldTypeRequiredNotes
elTypegeth | reth | nethermind | erigon | besuN/A
elImagestringN/A
elExtraArgsstringN/AExtra arguments to pass to the EL container
clTypelighthouse | teku | nimbus | lodestar | grandine | prysmN/A
clImagestringN/A
clExtraArgsstringN/AExtra arguments to pass to the CL container
countintN/A

Layer2Spec

FieldTypeRequiredNotes
chainIDstringAutogenerated if omitted on create
privateKeyRefLocalObjectReferenceFund-holding hot key
forking.enabledbooleanWhether this network will fork data from mainnet
forking.blockHeightstringBlock height to fork up to
plugins.chainlinkobjectChainlink node set-up
plugins.graphobjectThe Graph config
plugins.vrfobjectVRF config
plugins.vrf.typevrfv2plus | mpcVRF type
plugins.dfnsobjectDFNS config

LayerZeroSpec

NetworkList

FieldTypeRequiredNotes
itemsNetwork[]YesThe items of this list
metadataListMeta

EndpointSet

FieldTypeRequiredNotes
metadataObjectMetaStandard object metadata
mapRecord<string, string>YesMaps from service name to their URL