To answer this question, I think we should present a concrete example.
Here is the current Polkadot chainspec (I replaced the long blobs with [...]
). You can obtain this by runnning: polkadot build-spec --chain polkadot
. Note that this is a raw chainspec, you should always use raw chainspecs for launching your chains (see the substrate chainspec docs).
Actually most parts of the chainspec file can be changed but this won't change the parameters of the chain itself. As the chainspec can only define the configuration of the genesis block. To change the parameters of an active chain, you have to perform a runtime upgrade.
Here is from my experience how changing different parts of the chainspec file would impact the node (not the chain !):
{
"name": "Polkadot", // Change the chain name reported in Telemetry
"id": "polkadot", // Change the chain db directory on disk, eg. ~/.local/chains/**polkadot**/db/full
"chainType": "Live", // Switch between Live or Development, generally would only affect whether the node can connect to private IPv4 addresses.
"bootNodes": [ // Set the list of bootnodes to connect to on startup
[...]
],
"telemetryEndpoints": [ // Set the list of telemetry endpoints to report to
[
"/dns/telemetry.polkadot.io/tcp/443/x-parity-wss/%2Fsubmit%2F",
0
]
],
"properties": { // Set the values of various properties returned by the `system_properties` RPC
"ss58Format": 0,
"tokenDecimals": 10,
"tokenSymbol": "DOT"
},
"genesis": { // Cannot be changed or will connect to a different chain !
"raw": {
"top": {
[...]
},
"childrenDefault": {}
}
}
}