# Activation Protocol

## Features

New versions of the LTO public node can bring new features. Those new features must be activated by many nodes at the same time.

### Features Identification

Each new feature is assigned with a unique sequential number. A list of new features with their IDs will be provided with each new release.

New features come with new versions of node’s software. Different versions can operate identically until the activation of new features.

### Feature Statuses on Blockchain

The feature status is stored on the blockchain. The initial feature status is `Voting` which can be then changed to `Approved` - meaning that the feature received the required number of votes from miners. After a defined period (number of blocks) the `Approved` features get `Activated` status. From that moment (block) the nodes that implement the feature start to operate in a new way.

## Voting

Voting is performed by miners. If a miner supports a feature and wants to vote for it he has to put the feature number (ID) in the list of supported features in the `features` section of the configuration file. After that, every block generated by this miner will contain the IDs of supported features.

On Mainnet every 10000 blocks, the node sums up the number of blocks with support for a feature. If a feature was supported in more than 80% of blocks during the last calculation period it becomes Approved. Otherwise, the voting continues and can take another voting period or more.

If the node sees that a new feature was approved, but the node does not implement it, it will log the warning message about the upcoming activation of an unsupported feature.

Before an approved feature becomes Activated another 10000 blocks have to pass. This period is intended for the update of non-mining nodes to a new version.

If a new feature was activated but the node was not updated to support it, the node will shutdown itself (default behavior) and log the error about activation of the unsupported feature.

{% hint style="info" %}
On the Testnet approval and activation periods are set to 3000 blocks each. This allows faster activation of new features for testing purposes.
{% endhint %}

## Example

In version 1.0.0 a new cool feature was introduced. It has ID `123`.

Mining pool `SuperMiners` with a total stake of 40% supports the feature. Administrator of `SuperMiners` updates the node from version 0.9.9 to 1.0.0. And adds `123` to the list of supported features in the configuration file. `SuperMiners` node starts to put ID `123` into each mined block since height 1228765. Other miners did not support the feature and only some of them updated their nodes to version 1.0.0.

At block number 1230000 the nodes calculated that only 50% of blocks support the feature `123`. So, the status of feature stays unchanged, the voting was unsuccessful for the period and it continues.

During the next 10000 blocks `SuperMiners` convinced few smaller miners to support the feature. On block 1240000 it turns out that the feature is supported in 9102 of last 10000 blocks. That means 91%. So, the status of the feature changed to approved. At this moment nodes that run on version 0.9.9 and earlier warn their owners about the approval of an unsupported feature.

At block 1250000 the feature number `123` will be activated and nodes version 1.0.0 and above will start to use it. Nodes on earlier versions will stop working.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.ltonetwork.com/protocol/public/activation.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
