# State Transitions

The `x/incentive` module allows for two types of registration state transitions: `RegisterIncentiveProposal` and `CancelIncentiveProposal`. The logic for *gas metering* and *distributing rewards*, is handled through Hooks.

### Incentive Registration <a href="#incentive-registration" id="incentive-registration"></a>

A user registers an incentive defining the contract, allocations, and number of epochs. Once the proposal passes (i.e is approved by governance), the incentive module creates the incentive and distributes rewards.

1. User submits a `RegisterIncentiveProposal`.
2. Validators of the BlockX Chain vote on the proposal using `MsgVote` and proposal passes.
3. Create incentive for the contract with a `TotalGas = 0` and set its `startTime` to `ctx.Blocktime` if the following conditions are met:
   1. Incentives param is globally enabled
   2. Incentive is not yet registered
   3. Balance in the inflation pool is > 0 for each allocation denom except for the mint denomination. We know that the amount of the minting denom (eg: BCX) will be added to every block but for other denoms (IBC vouchers, ERC20 tokens using the `x/erc20` module) the module account needs to have a positive amount to distribute the incentives
   4. The sum of all registered allocations for each denom (current + proposed) is < 100


---

# 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.blockxnet.com/protocol-developers/modules/incentives/state-transitions.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.
