ChainLaunch

Network Templates

Core ChainLaunch supports template export and import for both Fabric and Besu. ChainLaunch Pro adds template-driven Pro Sharing — sharing a template across…

Pro extensions

Core ChainLaunch supports template export and import for both Fabric and Besu. ChainLaunch Pro adds template-driven Pro Sharing — sharing a template across paired instances so a partner org can join a consortium with one click.

Export, share, and import complete network configurations as portable templates. Templates capture everything needed to recreate a network: organizations, nodes, channels, policies, and chaincode definitions.

Overview

Network templates use a variable system (${varName.property}) to make configurations portable. When you export a network, concrete values (org IDs, node IDs, key IDs) are replaced with variables. When you import, you map those variables to resources on the target instance.

Supported platforms:

  • Fabric — organizations, peers, orderers, channels, policies, consensus (etcdraft/smartbft), chaincode definitions
  • Besu — validator keys, consensus config (QBFT), genesis parameters, alloc, smart contract definitions (ABI + bytecode)

Export a Network

Via CLI

chainlaunch networks fabric template export --network-id 1 --out my-network.json

Template Structure

{
  "version": "2.0.0",
  "platform": "FABRIC",
  "name": "supply-chain-network",
  "description": "3-org supply chain network",
  "variables": [
    {
      "name": "org1",
      "type": "organization",
      "description": "Manufacturing org"
    },
    {
      "name": "org1Peer",
      "type": "node",
      "description": "Org1 peer node"
    },
    {
      "name": "org1Key",
      "type": "key",
      "description": "Org1 signing key"
    }
  ],
  "network": {
    "organizations": [
      {
        "mspId": "${org1.mspId}",
        "peers": ["${org1Peer.id}"],
        "orderers": ["${orderer1.id}"]
      }
    ],
    "channels": [
      {
        "name": "supply-chain",
        "organizations": ["${org1.mspId}", "${org2.mspId}"],
        "policies": {
          "Readers": { "type": "ImplicitMeta", "rule": "ANY Readers" },
          "Writers": { "type": "ImplicitMeta", "rule": "ANY Writers" },
          "Admins": { "type": "ImplicitMeta", "rule": "MAJORITY Admins" }
        }
      }
    ],
    "chaincodes": [
      {
        "name": "asset-tracker",
        "version": "1.0",
        "language": "golang",
        "dockerImage": "chaincode/asset-tracker:1.0"
      }
    ]
  }
}

Validate a Template

Before importing, validate that a template is well-formed and all variables can be resolved:

chainlaunch networks fabric template validate --file my-network.json

Response:

{
  "valid": true,
  "variables": [
    { "name": "org1", "type": "organization", "resolved": false },
    { "name": "org1Peer", "type": "node", "resolved": false }
  ],
  "warnings": []
}

If valid is false, the response includes errors explaining what's wrong.

Import a Template

Import creates the network and all associated resources (chaincodes, channels) in one operation.

Via CLI

Save the import-request JSON (template + variable bindings) to a file, then:

chainlaunch networks fabric template import --file import-request.json

Where import-request.json looks like:

{
  "template": {/* the template JSON */},
  "variableBindings": {
    "org1":     { "organizationId": 1 },
    "org1Peer": { "nodeId": 5 },
    "org1Key":  { "keyId": 3 },
    "org2":     { "organizationId": 2 },
    "orderer1": { "nodeId": 10 }
  }
}

The variableBindings map template variables to actual resources on the target instance. You need to create the organizations, nodes, and keys first, then bind them during import.

Variable Types

Type Placeholder Resolves to
organization ${varName.mspId} Organization MSP ID
node ${varName.id} Node ID
key ${varName.id} Key ID
mspId ${varName} Direct MSP ID string
ethereumAddress ${varName} Ethereum address (Besu)
publicKey ${varName} Public key hex (Besu)

Besu Templates

Besu templates include genesis configuration with validator key references:

{
  "version": "2.0.0",
  "platform": "BESU",
  "name": "defi-network",
  "variables": [
    { "name": "validator0Key", "type": "key" },
    { "name": "validator1Key", "type": "key" }
  ],
  "network": {
    "chainId": 1337,
    "consensus": "QBFT",
    "blockPeriod": 5,
    "epochLength": 30000,
    "validatorKeys": [
      "${validator0Key.id}",
      "${validator1Key.id}"
    ],
    "alloc": {
      "${validator0Key.ethereumAddress}": {
        "balance": "1000000000000000000000"
      }
    },
    "smartContracts": [
      {
        "name": "TokenContract",
        "abi": "[{...}]",
        "bytecode": "0x608060..."
      }
    ]
  }
}

Example Templates

ChainLaunch ships with example templates in the examples/templates/ directory:

Template Platform Description
fabric-supply-chain Fabric 3-org supply chain with asset tracking chaincode
besu-defi-network Besu 4-validator QBFT network with token contract
fabric-multi-org Fabric Multi-org consortium with custom policies

Use Cases

  • Repeatable deployments — export a staging network template, import in production
  • Client projects — system integrators can create template libraries for common patterns
  • Disaster recovery — templates + backups give you full recovery capability
  • Training — distribute pre-built network templates for workshops
  • Cross-instance sharing — combined with Node Sharing, templates enable multi-org consortiums

Next Steps