This page provides some tips on how to upgrade AI agent between different versions of the {{open_autonomy}} framework. For full release notes check the <a href="https://github.com/valory-xyz/open-autonomy/tags" target="_blank">Open-Autonomy repo</a>.

Below, we describe the additional manual steps required to upgrade between different versions:


# Open Autonomy

## `v0.21.21` to `v0.21.22`

This release ships the resilience-hardening audit (#2501) and the FSM-correctness audit (#2502), and picks up the `open-aea 2.2.6` bump. There are no API or wire-format changes — downstream apps only need to repin the framework and re-pull package hashes.

### `open-aea` bumped `2.2.5` → `2.2.6`

Update any direct `open-aea` / `open-aea-*` pins in your downstream `pyproject.toml` / `setup.py` / `tox.ini` / Dockerfiles from `==2.2.5` to `==2.2.6`. The `valory/ledger:0.19.0` connection now ships with `open-aea`'s per-attempt `MAX_RETRY_DELAY = 60s` cap on the `get_transaction_receipt` retry loop, which bounds worst-case wall-clock per receipt call.

### Regenerated package hashes

All first-party packages under `packages/valory/` have new IPFS hashes because the `open-aea-*` plugin pins inside each `aea-config.yaml` / `contract.yaml` / `skill.yaml` / `service.yaml` / `connection.yaml` were rewritten as part of the bump. If you maintain a downstream repo that pins `valory/*` packages by hash, run:

```bash
autonomy packages sync --update-packages
autonomy packages lock
```

to pull the regenerated hashes and re-lock your own `packages.json`.

### Concrete upgrade steps

1. Bump `open-autonomy` pin to `==0.21.22` (and any matching `open-aea-test-autonomy` / `open-aea-helpers` pin to `==0.21.22`).
2. Bump `open-aea` / `open-aea-*` pins to `==2.2.6`.
3. Run `autonomy packages sync --update-packages` to pull the updated framework packages.
4. Run `autonomy packages lock` to regenerate downstream package hashes.

## `v0.21.20` to `v0.21.21`

This is a chore release that picks up the `open-aea 2.2.5` bump and regenerates the package hashes. There are no runtime, API, or wire-format changes in `open-autonomy` itself.

### `open-aea` bumped `2.2.3` → `2.2.5`

Update any direct `open-aea` / `open-aea-*` pins in your downstream `pyproject.toml` / `setup.py` / `tox.ini` / Dockerfiles from `==2.2.3` to `==2.2.5`. If your CI also runs `aea-ci check-third-party-hashes`, point its `--upstream` flag at `valory-xyz/open-aea@2.2.5`.

### Regenerated package hashes

All first-party packages under `packages/valory/` have new IPFS hashes because the `open-aea-*` pins inside each `aea-config.yaml` / `contract.yaml` / `skill.yaml` / `service.yaml` / `connection.yaml` were rewritten as part of the bump. If you maintain a downstream repo that pins `valory/*` packages by hash, run:

```bash
autonomy packages sync --update-packages
autonomy packages lock
```

to pull the regenerated hashes and re-lock your own `packages.json`.

### Concrete upgrade steps

1. Bump `open-autonomy` pin to `==0.21.21` (and any matching `open-aea-test-autonomy` pin to `==0.21.21`).
2. Bump `open-aea` / `open-aea-*` pins to `==2.2.5`.
3. Run `autonomy packages sync --update-packages` to pull the updated framework packages.
4. Run `autonomy packages lock` to regenerate downstream package hashes.

## `v0.21.19` to `v0.21.20`

This release fixes a long-standing PyPI packaging regression, picks up the `open-aea 2.2.3` security-floor bump, and migrates the linter/security tooling onto the `tomte 0.7.0` canonical configs. The runtime API surface is unchanged.

### Ejected contracts now bundled in the wheel/sdist

If you install `open-autonomy` from PyPI (rather than from the `packages/` source tree) and your code imports any of the framework-shipped contracts via `autonomy.data.contracts.<name>` — for example `gnosis_safe`, `multisend`, `service_registry`, `erc20`, `recovery_module`, etc. — those imports were silently failing on `0.21.17`–`0.21.19` because the eject step was not bundled into the published artifacts. `0.21.20` restores the bundling, so resolving these contracts at runtime works again without checking out the `packages/` tree.

No action required if you were already pinning `<0.21.17` or installing from source. If you were on `0.21.17`–`0.21.19` and worked around this by checking out `packages/` at runtime, you can drop the workaround.

### Named env-var placeholders in `service.yaml` overrides

Service overrides like:

```yaml
type: skill
public_id: valory/example_abci:0.1.0
models:
  params:
    args:
      message: ${HELLO_WORLD_MESSAGE:str:hi}
```

now surface a `HELLO_WORLD_MESSAGE` entry in the agent's environment alongside the existing path-keyed `SKILL_VALORY_EXAMPLE_ABCI_MODELS_PARAMS_ARGS_MESSAGE`. If you have middleware that injects values from `service.yaml` keyed by the named placeholder, this used to fall through to the inline default; it now matches and overrides correctly. `os.environ` still wins when both are present.

### `open-aea` bumped `2.2.2` → `2.2.3`

A `GitPython>=3.1.47` security floor (`GHSA-rpm5-65cw-6hj4`, `GHSA-x2qx-6953-8485`) plus open-aea's own internal cleanup. No API or wire-format changes; all third-party packages that `open-autonomy` consumes from open-aea ship the same hashes in `2.2.3` as in `2.2.2`. Update any direct `open-aea`/`open-aea-*` pins in your downstream `pyproject.toml` / `setup.py` to `==2.2.3`.

### `aea-helpers bin-template-path` works outside PyInstaller

If you call `aea-helpers bin-template-path` from your own tooling — `make eject-contracts` and the PyInstaller build do — it no longer crashes with `AttributeError: module 'sys' has no attribute '_MEIPASS'` when run from a regular Python interpreter. No changes required on your side.

### `open-aea-ledger-solana` re-enabled

The plugin had been excluded from `[all]` since `0.21.17` because of a transitive `construct<=2.10.61` cap. Open-aea `2.2.2` removed the cap, and `0.21.20` re-includes the plugin. If you removed an explicit `open-aea-ledger-solana` pin as a workaround, you can let `open-autonomy[all]` pull it back in.

### Tooling: `tomte` bumped `0.6.5` → `0.7.0`, `setup.cfg` removed

This is **only relevant if your downstream repo's `tox.ini` mirrors `open-autonomy`'s lint scaffolding**. The runtime framework is unaffected.

- `tomte check-spelling` was dropped in `0.7.0`. If your downstream `tox.ini` had a `[testenv:spell-check]` block, drop it; the canonical config no longer covers it.
- `tomte 0.7.0` ships canonical lint configs (`bandit.yaml`, `darglint.cfg`, `flake8.cfg`, `gitleaks.toml`, `pylintrc`, `safety-policy.yml`, `isort.cfg`) as packaged resources. `open-autonomy`'s `tox.ini` now references them via `{envsitepackagesdir}/tomte/configs/<config>`; the forked `.gitleaks.toml` and `.pylintrc` are gone.
- `setup.cfg` is removed. `aea generate-all-protocols` (open-aea ≥ 2.2.3) now reads isort config from `pyproject.toml [tool.isort]` instead. If you mirrored the `setup.cfg [isort]` stub in your downstream repo, replace it with a `[tool.isort]` block in your `pyproject.toml`.

### Concrete upgrade steps

1. Bump `open-autonomy` pin to `==0.21.20` (and any matching `open-aea-test-autonomy` pin to `==0.21.20`).
2. Bump `open-aea`/`open-aea-*` pins to `==2.2.3`.
3. If you mirror `open-autonomy`'s lint scaffolding, bump `tomte[*]` to `==0.7.0`, drop the spell-check testenv, and migrate any `[isort]` config from `setup.cfg` to `pyproject.toml [tool.isort]`.
4. Run `autonomy packages sync --update-packages` to pull the updated third-party packages.
5. Run `autonomy packages lock` to regenerate downstream package hashes.

## `v0.21.18` to `v0.21.19`

This release introduces a mock Tendermint server for single-agent services and significantly trims the framework's runtime dependency footprint.

### `docker` moved to an optional `[docker]` extra

The `docker` Python SDK is no longer a hard dependency. If your code imports `docker` directly (for example, custom tooling that builds or manages containers outside of `autonomy deploy`), install with:

```bash
pip install open-autonomy[docker]
```

The `autonomy deploy` workflows keep working as before — the extra is pulled in automatically by `open-autonomy[all]`.

### Dropped transitive dependencies

The following packages are no longer installed by `open-autonomy`:

- `texttable` — replaced by an inlined table renderer in chain helpers
- `python-dotenv` — replaced by `aea.helpers.base.load_env_file`
- `typing_extensions` — no longer used
- `aiohttp` — replaced by `asyncio` stdlib HTTP server
- `hexbytes` — replaced by plain `bytes` for multisend tx data
- `gql` — subgraph queries now posted via the aea http helper
- `Flask`, `Werkzeug` — replaced by an inlined Flask-compatible HTTP server
- `watchdog` — removed (no runtime users in autonomy)
- `protobuf` (explicit pin) — arrives transitively via `open-aea`

If your downstream repo relied on any of these being installed by `open-autonomy`, declare them directly in your own `pyproject.toml` / `setup.py`.

### `[chain]` extra added

On-chain helpers now live behind an optional `[chain]` extra. `open-autonomy[all]` still pulls it in.

### PyPI license classifier fix

The `0.21.18` wheel shipped with `License :: Other/Proprietary License` in its metadata because of a malformed `license` field. The wheel now correctly advertises `License :: OSI Approved :: Apache Software License`. If you added an `open-autonomy` entry to `[Authorized Packages]` in `liccheck` config as a workaround, you can remove it.

### Mock Tendermint for single-agent services

You can now skip running a Tendermint node entirely for single-agent services by setting `use_mock: true` (with `use_tendermint: false`) in the `valory/abci` connection config (via connection overrides or `aea-config.yaml`). The built-in `MockServerChannel` produces blocks on transaction submission and is a drop-in replacement for testing and lightweight deployments. See `docs/advanced_reference/mock_tendermint.md`.

### Concrete upgrade steps

1. Bump `open-autonomy` pin to `==0.21.19`.
2. If you import `docker` in your own code, switch your dependency to `open-autonomy[docker]` or add `docker` directly.
3. If you were pinning any of the dropped transitive deps via `open-autonomy`, declare them directly.
4. Run `autonomy packages sync --update-packages` to pull the updated third-party packages.
5. Run `autonomy packages lock` to regenerate downstream package hashes.

## `v0.21.17` to `v0.21.18`

- `open-aea-ledger-ethereum-hwi` is now an optional extra instead of a hard dependency. If you use hardware wallet support (`--hwi` flag), install with `pip install open-autonomy[hwi]`. This change fixes multi-platform Docker image builds on armv7 which failed due to missing pre-built wheels for `hidapi` and `Pillow`.

## `v0.21.16` to `v0.21.17`

This release bumps `open-aea` from `2.1.0` to `2.2.1`, migrates scripts to CLI commands, and removes the unmaintained `open-aea-ledger-ethereum-flashbots` plugin.

Main dependency updates to account for:

- `open-aea: ==2.1.0 -> ==2.2.1`
- `open-aea-ledger-ethereum: ==2.1.0 -> ==2.2.1`
- `open-aea-ledger-ethereum-hwi: ==2.1.0 -> ==2.2.1`
- `open-aea-ledger-cosmos: ==2.1.0 -> ==2.2.1`
- `open-aea-cli-ipfs: ==2.1.0 -> ==2.2.1`
- `tomte: ==0.6.1 -> ==0.6.5`

### `open-aea-ledger-ethereum-flashbots` removed upstream

The `open-aea-ledger-ethereum-flashbots` plugin was removed from open-aea in 2.2.1. The last published `2.2.0` wheel remains on PyPI but receives no further releases.

Impact on downstream repos:

- **Remove `open-aea-ledger-ethereum-flashbots` from dependency pins** in `pyproject.toml`, `Pipfile`, `tox.ini`, or `setup.py`.
- **Drop any `ethereum_flashbots` block** from the `valory/ledger` connection config (the upstream `connection.yaml` no longer declares it — use plain `ethereum` instead).
- **Remove `aea_ledger_ethereum_flashbots` PyInstaller flags** (`--collect-all`, `--hidden-import`) from release workflows.
- **Audit `aea-config.yaml`** in agent packages for references to `open-aea-ledger-ethereum-flashbots` and drop them.
- **`autonomy replay` flows** no longer provision an `ethereum_flashbots_private_key.txt` or register the `ethereum-flashbots` key. Replays that relied on the flashbots ledger being set up implicitly will fail at `aea run`. Switch to plain `ethereum` in replay fixtures, or pin `open-aea<=2.2.0` + the frozen flashbots plugin.
- The skill-level `use_flashbots` parameter on `send_raw_transaction` is intentionally preserved (default `False`) to avoid a payload wire-format change. Agents with `use_flashbots=False` keep working unchanged; agents that explicitly set `use_flashbots=True` will fail at runtime.

### Scripts → CLI migration

All Python scripts in `scripts/` have been migrated to CLI commands:

- `check_copyright.py` → `tomte check-copyright`
- `check_doc_links.py` → `tomte check-doc-links`
- `freeze_dependencies.py` → `tomte freeze-dependencies`
- `generate_package_list.py` → `aea-ci generate-pkg-list`
- `check_ipfs_hashes_pushed.py` → `aea-ci check-ipfs-pushed`
- `check_third_party_hashes.py` → `aea-ci check-third-party-hashes --upstream valory-xyz/open-aea@2.2.1`
- `generate_api_documentation.py` → `aea-ci generate-api-docs --source-dir autonomy ...`
- `generate_contract_list.py` → `aea-helpers generate-contract-list`

If your CI invokes any of these scripts directly, update to the corresponding CLI command.

### Concrete upgrade steps

1. Bump `open-autonomy` pin to `==0.21.17`.
2. Bump all `open-aea*` pins to `==2.2.1`.
3. Drop `open-aea-ledger-ethereum-flashbots` from dependencies and configs as described above.
4. Run `autonomy packages sync --update-packages` to pull the updated third-party packages.
5. Run `autonomy packages lock` to regenerate downstream package hashes.
6. Replace any direct `scripts/` invocations with the corresponding CLI commands.

## `v0.21.15` to `v0.21.16`

- The `aea-helpers` plugin now includes 4 new commands for deployment and release management:
    - `aea-helpers config-replace --mapping config-mapping.json` — replaces `scripts/aea-config-replace.py` with a generic YAML config substitution using a mapping file
    - `aea-helpers run-agent --name <agent>` — replaces `run_agent.sh` with built-in port management (`--free-ports`), config replacement, and tendermint lifecycle
    - `aea-helpers run-service --name <service>` — replaces `run_service.sh` with parameterized deployment (agent count, resource limits, pre/post hooks)
    - `aea-helpers make-release --version <ver> --env <env>` — replaces `make_release.sh` for creating git tags and GitHub releases
- New `--skip-tendermint` flag on `run-agent` for agents configured with `use_tendermint: false`
- Fixes `customs` package type handling in `check-doc-hashes` (no longer crashes on mech tool packages)
- Fixes IPFS connection handler to support directories and binary files
- To migrate deployment scripts: extract your `PATH_TO_VAR` dict from `aea-config-replace.py` into a `config-mapping.json` file, then delete `aea-config-replace.py`, `run_agent.sh`, and `run_service.sh`
- Mech repos should use the `mech` CLI from `mech-server` instead of `run_agent.sh`/`run_service.sh`

## `v0.21.14` to `v0.21.15`

- The `aea-helpers` plugin is now available as a standalone PyPI package. It consolidates the duplicated CI scripts (`bump.py`, `check_dependencies.py`, `check_doc_ipfs_hashes.py`) that were previously copy-pasted across repositories.
- If your repository has local copies of these scripts in `scripts/` or `utils/`, you can replace them with the `aea-helpers` CLI commands:
    - `aea-helpers bump-dependencies` replaces `scripts/bump.py`
    - `aea-helpers check-dependencies --check` replaces `scripts/check_dependencies.py`
    - `aea-helpers check-doc-hashes` replaces `scripts/check_doc_ipfs_hashes.py`
- Add `aea-helpers>=0.1.0` to your project dependencies and `tox.ini` deps to use.
- Hardcoded package exclusions (e.g. `requests` version hacks, popping `open-aea-ledger-solana`) are now configurable via `--exclude` flags instead.

## `v0.21.12` to `v0.21.14`

- Ensures ABIs have all parameters from explorer #2445
- Fixes ERC20 transfer transaction handling #2444
- Fixes environment variable override validation for friendly names #2447
- Fixes requests version range to `<2.33.0,>=2.28.1` for compatibility #2443

No breaking changes. Bump `open-autonomy` version pin and regenerate package hashes.

## `v0.21.11` to `v0.21.12`

- Python support is now `3.10-3.14` (previously `3.10-3.11`).
- Regenerate your environment and lock files when upgrading, as several toolchain and runtime dependencies were bumped to support newer Python versions.

Main dependency updates to account for:

- `open-aea: ==2.0.8 -> ==2.1.0`
- `tomte: ==0.4.0 -> ==0.6.1`
- `click: >=8.1.0,<8.3.0 -> >=8.1.0,<9`
- `pytest: ==7.4.4 -> ==8.4.2`
- `protobuf: >=4.21.6,<4.25.0 -> >=5,<6`
- `requests: >=2.28.1,<2.32.5 -> >=2.28.1,<2.33.0`
- `docker: 4.2.0 -> 7.1.0`
- `typing_extensions`: `<4.15.0,>=3.10.0.2` -> `<=4.15.0,>=3.10.0.2`
- `grpcio`: `==1.53.0` -> `==1.78.0`

Exact APIs/functions to check:

### 1) Click `flag_value` default handling

If your downstream CLI uses Click options with `flag_value`, audit these exact patterns against Open Autonomy fixes:

- `autonomy/cli/deploy.py::build_deployment_command`
- `autonomy/cli/deploy.py::run`
- `autonomy/cli/deploy.py::run_deployment_from_token`
- `autonomy/cli/fetch.py::fetch`
- `autonomy/cli/analyse.py::abci_app_specs`
- `autonomy/cli/analyse.py::abci_app_specs`
- `autonomy/cli/mint.py::mint`
- `autonomy/cli/service.py::service`

Required behaviour:

- Do **not** rely on decorator order to select defaults when multiple flags write to the same parameter.
- Use explicit normalization in code for unset values (e.g. `if sync_type is None: sync_type = SyncTypes.THIRD_PARTY`).
- Ensure upgrade command handlers consume a single `registry: str` mode rather than split boolean flags (`local` / `remote`).

### 2) Python 3.13/3.14 asyncio/multiprocessing compatibility

Audit downstream code for these exact anti-patterns and replacements:

- `multiprocessing.Manager()` without explicit context on Python 3.14+.
  - Required fix pattern: use `multiprocessing.get_context("spawn").Manager()` where process-manager context must be controlled.
- Accessing private queue loop internals (e.g. `queue._loop`).
  - Required fix pattern: store/use explicit event loop references instead of private attributes.
- Removed/unsupported asyncio APIs in modern Python:
  - `asyncio.StreamReader(loop=...)`
  - `asyncio.ensure_future(..., loop=...)`
  - unconditional `asyncio.get_child_watcher()` / child-watcher usage on Python 3.14+
- Ready-awaitable internals relying on module-level coroutine/future objects.
  - Required fix pattern: use a lightweight awaitable object/factory that is loop-safe across Python 3.10-3.14.

### 3) Plugin dependency compatibility (Ethereum + Flashbots)

If you install both plugins, verify dependency constraints in your lock/constraints files:

- The Flashbots plugin package must be compatible with the same 2.1.x line of the Ethereum plugin package.
- Reject locks where Flashbots still constrains Ethereum to `<2.1.0`.

Run after upgrade:

```bash
make new_env
```

### API compatibility notes

- CLI/API-surface changes:
  - `autonomy.cli.deploy.py::build_deployment_command` and `autonomy.cli.deploy.py::run_deployment_from_token` 
     now always prompt on `-p` and support `AEA_PASSWORD` for `--password`.

## `v0.21.10` to `v0.21.11`

No backwards incompatible changes.

## `v0.21.9` to `v0.21.10`

No backwards incompatible changes.

## `v0.21.8` to `v0.21.9`

No backwards incompatible changes.

## `v0.21.7` to `v0.21.8`

No backwards incompatible changes.

## `v0.21.6` to `v0.21.7`

No backwards incompatible changes.

## `v0.21.5` to `v0.21.6`

No backwards incompatible changes.

## `v0.21.4` to `v0.21.5`

No backwards incompatible changes.

## `v0.21.3` to `v0.21.4`

No backwards incompatible changes.

## `v0.21.2` to `v0.21.3`

No backwards incompatible changes.

## `v0.21.1` to `v0.21.2`

No backwards incompatible changes.

## `v0.21.0` to `v0.21.1`

No backwards incompatible changes.

## `v0.20.1` to `v0.21.0`

Breaking changes (open-autonomy)
- `autonomy analyse logs` will now throw `ValueError` if the agent's name is not valid for a SQL query.
  - Action required: Agent's name must comply with the regex `^[a-zA-Z_][a-zA-Z0-9_-]*$`.
- Web requests made by open-autonomy will now timeout in 30 seconds if no response is received.
  - Action required: Handle the `Timeout` error if not already.
- `get_origin` and `get_args` are now removed.
  - Action required: Import them directly from `typing`.

Notable dependency upgrades
- `open-aea` v1.65.0→v2.0.0
  - Link: https://github.com/valory-xyz/open-aea/blob/main/docs/upgrading.md#v1650-to-v200
  - Important changes: (Coming from `click`)
    - `get_metavar` now requires a new parameter, `ctx: Context`.
    - `aea`, `autonomy`, and their subcommands that expect some arguments (for example `aea`, `aea ipfs`, etc.), when used without any arguments will now finish with exit code 2 instead of 0, and print their usage help in stderr.
- `web3` v6→v7
  - Link: https://web3py.readthedocs.io/en/stable/migration.html#migrating-from-v6-to-v7
  - Important changes:
    - Contract instances will now have `encode_abi` function instead of `encodeABI`.
    - `fn_name` parameter of `encode_abi` is changed to `abi_element_identifier`.
    - Transaction related instances will now have attributes in snake_case instead of camelCase. For example, `raw_transaction` instead of `rawTransaction`. (Coming from `eth-account` also)
    - `HexBytes` instances' `.hex()` method will not return a string with `0x` prefix. Use `.to_0x_hex()` instead. (Coming from `hexbytes`)

## `v0.20.1` to `v0.20.2`

No backwards incompatible changes.

## `v0.20.0` to `v0.20.1`

No backwards incompatible changes.

## `v0.19.11` to `v0.20.0`

- The `Chain` and `ChainType` now have the `OPTIMISM` enum value. And the `OPTIMISTIC` enum value has been removed.

## `v0.19.10` to `v0.19.11`

No backwards incompatible changes.

## `v0.19.9` to `v0.19.10`

No backwards incompatible changes.

## `v0.19.8` to `v0.19.9`

No backwards incompatible changes.

## `v0.19.7` to `v0.19.8`

No backwards incompatible changes.

## `v0.19.6` to `v0.19.7`

No backwards incompatible changes.

## `v0.19.5` to `v0.19.6`

No backwards incompatible changes.

## `v0.19.4` to `v0.19.5`

No backwards incompatible changes.

## `v0.19.3` to `v0.19.4`

No backwards incompatible changes.

## `v0.19.2` to `v0.19.3`

No backwards incompatible changes.

## `v0.19.1` to `v0.19.2`

No backwards incompatible changes.

## `v0.19.0` to `v0.19.1`

No backwards incompatible changes.

## `v0.18.4` to `v0.19.0`

- The ledger has introduced a new configuration, called `min_allowed_tip`. 
  The value is set to 1GWEI. However, this limit only applies for Gnosis.
  This is not expected to cause important differences in the calculated tip for the rest of the chains,
  because there is an outlier detection mechanism.
  However, the best practice would be to override this value to `0` for any chain other than Gnosis.
  This is planned to be changed in the next `open-aea` version to improve DevX and make this a non-breaking change.
- The agent now performs an early failure check when attributes for rounds are missing. 
  This check is implemented in the metaclass using a specialized attribute named `extended_requirements`. 
  To customize the attributes being checked for a specific round, 
  developers must modify the `extended_requirements` attribute.

## `v0.18.3` to `v0.18.4`

No backwards incompatible changes.

## `v0.18.2` to `v0.18.3`

No backwards incompatible changes.

## `v0.18.1` to `v0.18.2`

No backwards incompatible changes.

## `v0.18.0` to `v0.18.1`

No backwards incompatible changes.

## `v0.17.0` to `v0.18.0`

- The agent and service configurations for dictionaries should now be in the following form: 
  `${dict:{"some_key": "some_value"}`. 
  For more information, please take a look at an example upgrade in https://github.com/valory-xyz/trader/pull/311. 
- The generated builds do not include the environment variables of the agents inside the compose file anymore.
  Instead, they exist in a separate environment file per agent and are referenced in the compose file.

## `v0.16.1` to `v0.17.0`

- The structure of the build folder has been updated. 
  The folder is now named `abci_build_{uuid}`, 
  where `{uuid}` is a 4-character random hash, 
  replacing the previous format of `abci_build`.
- The naming convention for service containers has been revised. 
  Previously, containers were named `{trimmed_service_name}_{abci|tm}_{index}`. 
  Now, the format has changed to `{trimmed_service_name}{uuid}_{abci|tm}_{index}`, 
  where `{uuid}` is a unique identifier.

## `v0.16.0` to `v0.16.1`

No backwards incompatible changes.

## `v0.15.2` to `v0.16.0`

- The `priority_fee_estimation_trigger` has been removed from the `eip1559` configuration of the ledger connection.
- The `default_priority_fee` is now optional. 
  If it is set to `None`, dynamic pricing will be applied. 
  Otherwise, the specified value will be used.

## `v0.15.1` to `v0.15.2`

No backwards incompatible changes.

## `v0.15.0` to `v0.15.1`

No backwards incompatible changes.

## `v0.14.14.post2` to `v0.15.0`

- After this release, developers do not need to make sure that cross-period persisted keys preexist in the database
  before the first period ends anymore. 
  You may remove any additional logic you had in place to protect from that (#2131).
- The cross-period persisted keys are now initialized by the framework during startup. 
  The corresponding property is used to get the value. 
  If a property with the same name does not exist, then the pre-existing value in the db is used, otherwise `None`.
- You need to keep the above in mind when:
  1. Reading cross-period values from the db.
  2. Implementing properties for cross-period keys, 
     as the returned value will end up being the one that will be writen to the db during startup.

## `v0.14.14` to `v0.14.14.post2`

No backwards incompatible changes.

## `v0.14.14.post1` to `v0.14.14.post2`

The breaking feature introduced in `v0.14.14` and `v0.14.14.post1` has been removed.
For more information please check the `HISTORY.md` file.

## `v0.14.14` to `v0.14.14.post1`

A breaking feature was introduced. 
We suggest using the `v0.14.14.post2` release instead.
For more information please check the `HISTORY.md` file.

## `v0.14.13` to `v0.14.14`

A breaking feature was introduced. 
We suggest using the `v0.14.14.post2` release instead.
For more information please check the `HISTORY.md` file.

## `v0.14.12` to `v0.14.13`

No backwards incompatible changes

## `v0.14.11.post1` to `v0.14.12`

- This release pins `click>=8.1.0,<9` so update your environments to avoid dependency conflicts

## `v0.14.11` to `v0.14.11.post1`

No backwards incompatible changes

## `v0.14.10` to `v0.14.11`

No backwards incompatible changes

## `v0.14.9` to `v0.14.10`

No backwards incompatible changes

## `v0.14.8` to `v0.14.9`

No backwards incompatible changes

## `v0.14.7` to `v0.14.8`

No backwards incompatible changes

## `v0.14.6` to `v0.14.7`

No backwards incompatible changes

## `v0.14.5` to `v0.14.6`

No backwards incompatible changes

## `v0.14.4` to `v0.14.5`

No backwards incompatible changes

## `v0.14.3.post1` to `v0.14.4`

No backwards incompatible changes

## `v0.14.3` to `v0.14.3.post1`

No backwards incompatible changes

## `v0.14.2` to `v0.14.3`

No backwards incompatible changes

## `v0.14.1` to `v0.14.2`

No backwards incompatible changes

## `v0.14.0` to `v0.14.1`

No backwards incompatible changes

## `v0.13.10` to `v0.14.0`

- This release introduces automated dependency verification on the minting tools, this means when minting a package you will have to mint all of the dependencies beforehand. The minting tools uses a subgraph to verify dependencies so you might have to wait for a small amount of time before you can mint the package after you mint the dependencies. 
- Since the dependency verification is automated the `--skip-hash-check` and `--skip-dependencies-check` flags have been deprecated on the `autonomy mint/service` command groups

## `v0.13.9.post1` to `v0.13.10`

No backwards incompatible changes

## `v0.13.9` to `v0.13.9.post1`

No backwards incompatible changes

## `v0.13.8` to `v0.13.9`

No backwards incompatible changes

## `v0.13.7` to `v0.13.8`

No backwards incompatible changes

## `v0.13.6` to `v0.13.7`

No backwards incompatible changes

## `v0.13.5` to `v0.13.6`

No backwards incompatible changes

## `v0.13.4` to `v0.13.5`

No backwards incompatible changes

## `v0.13.3` to `v0.13.4`

No backwards incompatible changes

## `v0.13.2` to `v0.13.3`

No backwards incompatible changes

## `v0.13.1` to `v0.13.2`

- The usage `--password` of flag has been deprecated on `autonomy deploy` command group. Use `OPEN_AUTONOMY_PRIVATE_KEY_PASSWORD` environment variable to export the private key password string when running `autonomy deploy build/run` commands.

## `v0.13.1` to `v0.13.1.post1`

No backwards incompatible changes

## `v0.13.0` to `v0.13.1`

- This release introduces support for defining service level dependencies, which means you can define python dependencies at the service level which will take priority over the agent or component level dependencies. The `dependencies` parameter is currently optional to make the upgrading easier. But this will be required in the next release, so please update your services accordingly.

## `v0.12.1.post4` to `v0.13.0`

- `open-aea-web3` has been replaced with `web3py`
- `protobuf` has been bumped to `protobuf>=4.21.6,<5.0.0`, this means you will have to bump your protocol generator to `v24.3` and generate your protocol packages again.
- The `valory/open-autonomy` image will use Python 3.11 as default interpreter for running agents

## `v0.12.1.post3` to `v0.12.1.post4`

No backwards incompatible changes

## `v0.12.1.post2` to `v0.12.1.post3`

No backwards incompatible changes

## `v0.12.1.post1` to `v0.12.1.post2`

No backwards incompatible changes

## `v0.12.1` to `v0.12.1.post1`

- Environment variable names have changed for custom contract address, refer to the `mint/service` CLI tools documentation regarding the changes.

## `v0.12.0` to `v0.12.1`

No backwards incompatible changes

## `v0.11.1` to `v0.12.0`

- Renamed the `background_behaviour_cls` in `AbstractRoundBehaviour` to `termination_behaviour_cls`. 
 *Should be taken into consideration for all the apps that are utilizing the termination.*
- Renamed the `background_behaviour` in `AbstractRoundBehaviour` to `termination_behaviour`.
- Renamed the `is_background_behaviour_set` property in `AbstractRoundBehaviour` to `is_termination_set`.
- Renamed the `background_round_cls` argument of the `add_termination` method in `AbciApp` to `termination_round_cls`. 
 *Should be taken into consideration for all the apps that are utilizing the termination.*
- Renamed the `background_round_cls` attribute of the `AbciApp` to `termination_round_cls`.
- Renamed the `_background_round` attribute of the `AbciApp` to `_termination_round`.
- Renamed the `background_round` property of the `AbciApp` to `termination_round`.
- The `AbstractRound` class now requires a `SkillContext` positional argument. 
 To accommodate this change, 
 all round tests will need to be modified to include a mocked context in addition to the synchronized data.

1 && 4 should be taken into consideration for all the apps that are utilizing the termination.

## `v0.11.0` to `v0.11.1`

The `autonomy deploy run` command now handles the exists from deployment and to do this we're running the deployments in detached mode and waiting for the user to cancel what that means is from now on when running the deployments the logs won't be printed out by default. If you want to check out the logs for containers you can use `docker logs` command.

## `v0.10.11.post1` to `v0.11.0`

- `web3py` has been replaced with `open-aea-web3` and we forked this from `web3py@v6.0.0`, that means the method names will use the `snake_case` and the `camelCase` naming has been deprecated
- Support for `Python 3.7` has been deprecated

## `v0.10.11` to `v0.10.11.post1`

No backwards incompatible changes

## `v0.10.10.post1` to `v0.10.11`

No backwards incompatible changes

## `v0.10.10` to `v0.10.10.post1`

No backwards incompatible changes

## `v0.10.9` to `v0.10.10`

No backwards incompatible changes

## `v0.10.8` to `v0.10.9`

No backwards incompatible changes

## `v0.10.7` to `v0.10.8`

No backwards incompatible changes

## `v0.10.6` to `v0.10.7`

No backwards incompatible changes

## `v0.10.5.post2` to `v0.10.6`

No backwards incompatible changes

## `v0.10.5.post1` to `v0.10.5.post2`

No backwards incompatible changes

## `v0.10.4` to `v0.10.5.post1`

No backwards incompatible changes

## `v0.10.3` to `v0.10.4`

No backwards incompatible changes

## `v0.10.2` to `v0.10.3`

No backwards incompatible changes

## `v0.10.1` to `v0.10.2`

No backwards incompatible changes

## `v0.10.0.post2` to `v0.10.1`

This version fixes a bug on the build tools which will introduce a change on the expected output of the deployment builds. Before this bug fix the deployment tools did not index the agents on the manual builds, which lead to the behaviour where if you built the deployment using just one key or `--n` flag the agents were indexed from `0` instead. With this bug fix the deployment tools will use the `all_participants` list to index the agents before building the deployments.

## `v0.10.0.post1` to `v0.10.0.post2`

No backwards incompatible changes

## `v0.10.0` to `v0.10.0.post1`

No backwards incompatible changes

## `v0.9.1` to `v0.10.0`

Breaking changes

- The `AbciAppDB`'s `create()` is responsible for setting the cross-period keys for the new period and converting the 
  corresponding data to the correct format. The skills using the `create()` method now do not need to manually set the 
  data for the next period as this is handled automatically via the cross-period keys.
- The setup parameters should not be defined as lists anymore.
- `observation_interval` has been renamed to `reset_pause_duration`.
- The services which are currently using termination will need to set `use_termination: True` 
  in their configuration in order to continue using it. Otherwise, `use_termination: False` should be used.
- Before this update the `autonomy mint/service` command groups used to have key file as a required argument, 
  but it's been made optional since the usage of hardware wallet does not require a key file.
- Autonomy deploy build does not support the usage of `--force` flag to remove the existing build directories.
- The service components need to be updated. The service configurations needs to specify the new `deployment` parameter, 
  which is used in order to expose agent ports when using the deployment commands. It can be empty (`deployment: {}`) 
  if you do not intend to override the generated compose file for the deployments to expose agent ports.
- The agent configurations will need to be updated with regard to the following overrides:
  - In the ABCI skill override don't use `TENDERMINT_URL` and `TENDERMINT_COM_URL` for Tendermint parameters.
  - In the ABCI connection override don't use `ABCI_HOST` and `ABCI_PORT` for ABCI connection parameters.
  - Tendermint and ABCI connection parameters now use the same environment variables' pattern as all other 
    configurations.

## `v0.9.0` to `v0.9.1`

No backwards incompatible changes

## `v0.8.0` to `v0.9.0`

Breaking changes

- On the skill configuration
  - The `max_participants` parameter has been removed. If the `consensus` configuration is empty after removing `max_participants`, it should be removed as well.
  - The `consensus_threshold` should now be specified in the `setup` parameters. If `null`, the recommended setting, then it is calculated automatically from the participants provided.
- The synchronized database is now `serializable` and `hashable`. This means that the data inserted into the database are now enforced to be primitive or non-primitive built-in types only, except for `sets` and `frozensets` since an error is raised as they cannot be `serialized`/`hashed` and therefore cannot be inserted into the database. In essence, the data should be `json serializable`.
- The usage of local Tendermint Consensus Gadget is optional in the deployment setup, use `-ltm, --local-tm-setup` when building a deployment using `autonomy deploy build` command to include a Tendermint Consensus Gadget setup.
- The `cross_period_persisted_keys` and database conditions needs to be defined as sets as part of the `AbciApp` class, before this they were defined using a list
- On the round class implementation
  - `payload_attribute` attribute has been removed
  - Usage of payloads with multiple attributes has been simplified since the user can now specify a tuple of keys in order to store all the data of a payload to the database.
- Round `selection_key` is now a tuple for multiple-attribute payloads.

## `v0.7.0` to `v0.8.0`

- Support for `--rpc` and `--sca` flags has been deprecated on `autonomy deploy from-token` command. Refer to the CLI documentation to understand how to use custom `RPC`.
- The transaction payload classes needs to be defined using the data classes and needs to be immutable
- `Transaction` is a data class
- IPFS connection and protocol need to be added to your `aea-config.yaml`, if they utilize `valory/abstract_round_abci` skill.
- IPFS dialogues and handler need to be specified.
- `send_to_ipfs` and `get_from_ipfs` are now moved to `BaseBehaviour` and are generators.
- E2E tests now utilize a local deployment of the IPFS, as such you will need to import the `ipfs_daemon` and `ipfs_domain` fixtures from `aea_test_autonomy.fixture_helpers`.

## `v0.6.0` to `v0.7.0`

Breaking changes

- The new `AbstractRound` and `BaseBehaviour` meta classes enforce checks on the class attributes. For concrete classes inheriting from `AbstractRound` the developer must set `synchronized_data_class`, `allowed_tx_type` and `payload_attribute`. For concrete classes inheriting from `BaseBehaviour` the developer must set `matching_round`. These assumptions were present before but not enforced at the class definition level by the framework.
- The set of `all_participants` is now retrieved from the safe instance referenced by `safe_contract_address` and assumed to be present on the target chain.
- The usage of `safe_deployment_abci` has been deprecated and support for the package has been dropped. From now on, use the development tools for running a local development image with pre-configured safe to test your applications.

## `v0.5.0.post2` to `v0.6.0`

Breaking changes

- Optional: The developer can update to use the auto-generated behaviour and round ids. In this case, the `behaviour_id` and `round_id` need no longer be set on the class. When accessing the auto generated ids on the class use `auto_behaviour_id()` and `auto_round_id()` class methods. On the instance `behaviour_id` and `round_id` properties resolve the auto id class methods, so no change is required.
- Required: The pre- (`db_pre_conditions`) and post- (`db_post_conditions`) conditions on the synchronized data need to be defined for each initial and final state in an `AbciApp`. See `transaction_settlement_abci` for an example.


## `v0.5.0.post1` to `v0.5.0.post2`


No backwards incompatible changes


## `v0.5.0` to `v0.5.0.post1`


No backwards incompatible changes

## `v0.4.0` to `v0.5.0`


One backwards incompatible change
## Service component

- This release introduces a new format for defining multiple overrides for an agent on a service configuration. Please follow this [guide](./configure_service/service_configuration_file.md) to update your service configurations accordingly.

## `v0.3.5` to `v0.4.0`

Multiple backwards incompatible changes

### Autonomy CLI module

- `autonomy analyse abci` command group has been deprecated

- `autonomy analyse abci check-app-specs` and `autonomy analyse generate-app-specs` has been merged into `autonomy analyse fsm-specs`
  - The usage of `--infile` flag has been deprecated and replaced with the usage of the `--package` flag
  - Input format for `--app-class` has been changed from `packages.author.skills.skill_name.rounds.SomeAbciApp` to `SomeAbciApp`
  - Users will have to manually switch to the newer version, i.e., remove the path prefix in all their FSM specifications. For example an FSM specification with a `label: packages.author.skills.my_abci.rounds.MyAbciApp` now becomes `label: MyAbciApp`

- `autonomy analyse abci check-handlers` has been moved to `autonomy analyse handlers`
  - `--packages-dr` flag has been deprecated, use `--registry-path` at top level instead
  - Input format for common handlers and skip skills options has been updated
    - Old format - `--common abci,http,contract_api,ledger_api,signing --skip abstract_abci,counter,counter_client,hello_world_abci`
    - New format `-h abci -h http -h contract_api -h ledger_api -h signing -i abstract_abci -i counter -i counter_client -i hello_world_abci`

- `autonomy analyse abci docstrings` has been moved to `autonomy analyse docstrings`
  - `--check` flag has been deprecated and the command will perform the check by default
  - `--update` flag has been introduced to update the docstring if necessary

- `autonomy analyse abci logs` has been moved to `autonomy analyse logs`

### Autonomy test plugin

- `tag` property has been renamed to `image` on `aea_test_autonomy.docker.base.DockerImage` class

### Core packages

- `_HarHatHelperIntegration` has been renamed to `HardHatHelperIntegration` in `packages/valory/skills/abstract_round_abci/test_tools/integration.py`
- `ResetPauseABCIApp` has been renamed to `ResetPauseAbciApp` in `packages/valory/skills/reset_pause_abci/rounds.py`
- `ApiSpecs` now use `dataclasses` in order to encapsulate data, which means that `response_key`, and `response_type` can be accessed via the `response_info` instance attribute. Moreover, this attribute now includes the new `response_index` and `error_key`, `error_index`, `error_type`, `error_data`. The `retries_info` instance attribute gives access to the `retries_attempted` and `retries` which are now public and also includes the new `backoff_factor`.

### Test tools

- The `packages.valory.skills.abstract_round_abci.test_tools.apis` module which contained the `DummyMessage` has been removed. `MagicMock` can be used instead. For example, `DummyMessage(my_test_body)` can be converted to `MagicMock(body=my_test_body)`.

## `v0.3.4` to `v0.3.5`

No backwards incompatible changes

### Upgrade guide

This release introduces a new format for `packages.json` file, the older version is still supported but will be deprecated on `v1.0.0` so make sure to update your projects to use the new format.

## `v0.3.3` to `v0.3.4`

No backwards incompatible changes

## `v0.3.2` to `v0.3.3`

No backwards incompatible changes

## `v0.3.1` to `v0.3.2`

No backwards incompatible changes

## `v0.3.0` to `v0.3.1`

No backwards incompatible changes

## `v0.2.2` to `v0.3.0`

No backwards incompatible changes except:

- Deprecated the usage of `hashes.csv` and replaces it with `packages.json`, which is maintained by `autonomy packages lock`
- `--check` flag is deprecated from `autonomy hash all`, from now package consistencies can be verified by `autonomy packages lock --check`
- Various test fixtures have moved and been renamed.

## `v0.2.1.post1` to `v0.2.2`

No backwards incompatible changes except:

All imports from `autonomy.test_tools.*` are now found at `aea_test_autonomy.*`, after installing `open-aea-test-autonomy`.

## `v0.2.1` to `v0.2.1.post1`

No backwards incompatible changes

## `v0.2.0` to `v0.2.1`

- `build-images` command has been renamed to `build-image`
- Build support for dependency has been removed from the `build-image` command
- `autonomy deploy build deployment` has been renamed to `autonomy deploy build`

Refer to quick start docs for more information on the updated deployment flow.

## `v0.1.6` to `v0.2.0`

Multiple backwards incompatible changes:

- The service config no longer accepts the `network` key on the first YAML page. The network can now be defined via the package overrides.
- Dependency specifications are now checked against imports for all packages, this means initially packages might need modifying to reference/unreference missing/irrelevant dependencies.
- The global configuration file for the `aea`/`autonomy` CLI has a breaking change. Please remove `~/.aea/cli_config.yaml` and rerun `autonomy init --remote`.

## `v0.1.5` to `v0.1.6`

No backwards incompatible changes

## `v0.1.4` to `v0.1.5`

No backwards incompatible changes

## `v0.1.3` to `v0.1.4`

This release changes the build process for docker images and service deployments. Refer to documentation for more information.

## `v0.1.2` to `v0.1.3`

This release introduces the usage of CID v1 hashes.

## `v0.1.1` to `v0.1.2`

No backwards incompatible changes

## `v0.1.0` to `v0.1.1`

No backwards incompatible changes

## `v0.1.0rc1/2` to `v0.1.0`
