# network-upgrades

```javascript
import { CodeExample } from "components/CodeExample";
```

The network itself has network-wide settings that can be updated.

This is performed by validators voting for and agreeing to new values the same way that consensus is reached for transaction sets, etc.

A node can be configured to vote for upgrades using the `upgrades` endpoint . See [Commands](https://developers.docs.bantufoundation.org/run-core-node/commands) for more information.

The network settings are:

* the version of the protocol used to process transactions
* the maximum number of transactions that can be included in a given ledger close
* the cost (fee) associated with processing operations
* the base reserve used to calculate the lumen balance needed to store things in the ledger

When the network time is later than the `upgradetime` specified in the upgrade settings, the validator will vote to update the network to the value specified in the upgrade setting. If the network time is passed the `upgradetime` by more than 12 hours, the upgrade will be ignored

When a validator is armed to change network values, the output of `info` will contain information about the vote.

For a new value to be adopted, the same level of consensus between nodes needs to be reached as for transaction sets.

## Important notes on network wide settings

Changes to network wide settings have to be orchestrated properly between validators as well as non validating nodes:

* a change is vetted between operators (changes can be bundled)
* an effective date in the future is picked for the change to take effect (controlled by `upgradetime`)
* if applicable, communication is sent out to all network users

An improper plan may cause issues such as:

* nodes missing consensus (aka "getting stuck"), and having to use history to rejoin
* network reconfiguration taking effect at a non deterministic time (causing fees to change ahead of schedule for example)

For more information look at [Network Upgrade](https://developers.docs.bantufoundation.org/run-core-node/network-upgrades).

## Example upgrade command

Example here is to upgrade the protocol version to version 9 on January-31-2018.

1. `$ bantu-core http-command 'upgrades?mode=set&upgradetime=2018-01-31T20:00:00Z&protocolversion=9'`
2. `$ bantu-core http-command info`

At this point `info` will tell you that the node is setup to vote for this upgrade:

```javascript
"status" : [ 
    "Armed with network upgrades: upgradetime=2018-01-31T20:00:00Z, protocolversion=9" 
    ]
```
