Skip to content

Commit 8937919

Browse files
authored
Merge pull request #888 from valory-xyz/chore/bump-version
chore: release v2.2.4
2 parents e7c0ca7 + 0eae72d commit 8937919

22 files changed

Lines changed: 65 additions & 23 deletions

File tree

HISTORY.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
11
# Release History - open AEA
22

3+
## 2.2.4 (2026-05-07)
4+
5+
Plugins:
6+
7+
- `open-aea-ledger-ethereum`: makes `RPCRotationMiddleware`'s connection-reset detection locale-safe. `classify_error` now matches on `isinstance(ConnectionResetError)`, `isinstance(ssl.SSLError)` (excluding `ssl.SSLCertVerificationError`), and `errno == 10054` (WSAECONNRESET) — and walks the `__cause__`/`__context__` chain — instead of substring-matching the localized OS message. On non-English Windows installs, transient resets that previously slipped through as `"unknown"` and skipped the retry path are now retried correctly. Resolves the `terminate_and_withdraw` HTTP 500 reported on Polystrat / Pearl. #887
8+
- `open-aea-ledger-ethereum`: on connection-reset errors, `RPCRotationMiddleware` now evicts the cached `requests.Session` for the affected provider (`_evict_provider_session`) before retrying, so the next attempt performs a fresh TCP/TLS handshake instead of reusing the half-closed pooled socket. The cache read and `clear()` execute under the session manager's `_lock` when one is exposed; the `_current_index` snapshot in `_handle_error_and_rotate` is taken under the middleware's own lock. Eviction failures are logged at `WARNING` with `exc_info=True` so recovery-path regressions remain diagnosable. #887
9+
- `open-aea-ledger-ethereum`: removes the `len(rpc_urls) > 1` gate from `RPCRotationMiddleware.wrap_make_request` — single-URL deployments (Pearl's default) now enter the retry / session-eviction loop. The retry budget remains `min(MAX_RETRIES, len(rpc_urls) * 2)`; when the configured `MAX_RETRIES` is clamped by the pool size, an INFO log line is emitted once at `build()` time. On genuine pool exhaustion a single WARNING summary is emitted before the final `raise`, distinguishing systemic outages from one-off transient failures. #887
10+
- `open-aea-ledger-ethereum`: changes the registration of `ExtraDataToPOAMiddleware` from `inject(layer=0)` (innermost) to `add(...)` (outermost). Required because `RPCRotationMiddleware.wrap_make_request` calls each provider directly and bypasses the inner middleware chain (formatters, ENS, retry, exception, `AttributeDictMiddleware`); PoA processing must therefore wrap the rotation layer to apply on every response. Fixes BSC `extraData` field truncation that surfaced during CI. #887
11+
- `open-aea-ledger-ethereum`: widens `AttributeDictTranslator.to_dict` to accept plain `dict` (`Union[AttributeDict, TxReceipt, TxData, Dict[str, Any]]`). Required because responses returning through the rotation path arrive as plain dicts rather than `AttributeDict` instances (the inner middleware chain is bypassed). `TxReceipt` and `TxData` are TypedDicts and continue to flow through the same arm. The existing `AttributeDict` callers are unaffected. #887
12+
13+
Tests:
14+
15+
- Reworks `ACNWithBootstrappedEntryNodesDockerImage` (the libp2p ACN docker fixture) to support a multi-container topology (bootstrap node plus two entry nodes), replacing the single-container `wait()` with a per-container port poll. Resolves flaky ACN integration tests; unrelated to the WSAECONNRESET fix but absorbed into the same release for CI continuity. #887
16+
317
## 2.2.3 (2026-05-04)
418

519
AEA:

aea/__version__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
__title__ = "open-aea"
2424
__description__ = "Open Autonomous Economic Agent framework (without vendor lock-in)"
2525
__url__ = "https://github.com/valory-xyz/open-aea.git"
26-
__version__ = "2.2.3"
26+
__version__ = "2.2.4"
2727
__author__ = "Valory AG"
2828
__license__ = "Apache-2.0"
2929
__copyright__ = "2021 Valory AG, 2019 Fetch.AI Limited"

deploy-image/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ RUN apk add --no-cache go
1616

1717
# aea installation
1818
RUN pip install --upgrade pip
19-
RUN pip install --upgrade --force-reinstall open-aea[all]==2.2.3 "open-aea-cli-ipfs<3.0.0,>=2.2.3"
19+
RUN pip install --upgrade --force-reinstall open-aea[all]==2.2.4 "open-aea-cli-ipfs<3.0.0,>=2.2.4"
2020

2121
# directories and aea cli config
2222
WORKDIR /home/agents

deploy-image/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ The example uses the `fetchai/my_first_aea` project. You will likely want to mod
1111
Install subversion, then download the example directory to your local working directory
1212

1313
``` bash
14-
svn checkout https://github.com/valory-xyz/open-aea/tags/v2.2.3/packages packages
14+
svn checkout https://github.com/valory-xyz/open-aea/tags/v2.2.4/packages packages
1515
```
1616

1717
### Modify scripts

develop-image/docker-env.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/bin/bash
22

33
# Swap the following lines if you want to work with 'latest'
4-
DOCKER_IMAGE_TAG=valory/open-aea-develop:2.2.3
4+
DOCKER_IMAGE_TAG=valory/open-aea-develop:2.2.4
55
# DOCKER_IMAGE_TAG=valory/open-aea-develop:latest
66

77
DOCKER_BUILD_CONTEXT_DIR=..

docs/upgrading.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,34 @@ Below we describe the additional manual steps required to upgrade between differ
99

1010
### Upgrade guide
1111

12+
## `v2.2.3` to `v2.2.4`
13+
14+
This is a non-breaking patch release. The fixes target the `open-aea-ledger-ethereum` RPC rotation middleware and primarily affect Windows deployments, but two changes (PoA middleware ordering and `AttributeDictTranslator.to_dict` accepting plain `dict`) are global to all Ethereum users. Both are backwards-compatible.
15+
16+
### `open-aea-ledger-ethereum` — RPC rotation: locale-safe reset detection and session eviction
17+
18+
`RPCRotationMiddleware` now classifies WSAECONNRESET / SSL-EOF connection resets via `isinstance` and `errno == 10054` rather than substring-matching the OS error string. Non-English Windows installs that previously fell through as `"unknown"` (skipping the retry path entirely) now retry correctly. On a connection-reset classification, the affected `HTTPProvider`'s pooled `requests.Session` is evicted before the retry so the next attempt performs a fresh TCP/TLS handshake instead of reusing the half-closed socket. The retry path also fires for single-URL deployments (the previous `len(rpc_urls) > 1` gate was removed).
19+
20+
This is purely a behavioural improvement. No API or configuration change is required.
21+
22+
### `open-aea-ledger-ethereum` — PoA middleware now registered as outermost layer
23+
24+
`ExtraDataToPOAMiddleware` is now installed via `web3.middleware_onion.add(...)` (outermost) rather than `inject(..., layer=0)` (innermost). The change is required because `RPCRotationMiddleware.wrap_make_request` calls providers directly and bypasses the inner middleware chain; PoA processing must therefore wrap the rotation layer to apply to every response.
25+
26+
Practical impact for downstream consumers: PoA chains (BSC, etc.) continue to work correctly — and BSC `extraData` truncation that surfaced under rotation is fixed. If you were programmatically inspecting `web3.middleware_onion` and asserting the PoA middleware sits at position 0, update the assertion (or look it up by name).
27+
28+
### `open-aea-ledger-ethereum``AttributeDictTranslator.to_dict` accepts plain `dict`
29+
30+
The signature was widened from `Union[AttributeDict, TxReceipt, TxData]` to `Union[AttributeDict, TxReceipt, TxData, Dict[str, Any]]`, and the runtime guard accepts `(AttributeDict, dict)`. This is required so receipts returning through the rotation path — which bypasses `AttributeDictMiddleware` and therefore arrives as plain dicts — translate correctly. Existing callers passing `AttributeDict`, `TxReceipt`, or `TxData` are unaffected; the change is additive.
31+
32+
Downstream code that subclassed `AttributeDictTranslator` and tightened the parameter type to `AttributeDict` only should widen its override to match — otherwise mypy will reject the rotation-path call sites.
33+
34+
### Concrete upgrade steps
35+
36+
- `pip install --upgrade "open-aea[all]==2.2.4"` (and the same `2.2.4` pin for any `open-aea-*` plugin you use, in particular `open-aea-ledger-ethereum`).
37+
- `aea --version` should report `2.2.4`.
38+
- No agent / package / config edits are required.
39+
1240
## `v2.2.2` to `v2.2.3`
1341

1442
This is a non-breaking patch release. There are no API or runtime behaviour changes; the work below is a security bump and a repo-wide lint/test config consolidation that does not affect downstream consumers.

examples/tac_deploy/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ RUN apk add --no-cache go
1919

2020
# aea installation
2121
RUN python -m pip install --upgrade pip
22-
RUN pip install --upgrade --force-reinstall open-aea[all]==2.2.3
22+
RUN pip install --upgrade --force-reinstall open-aea[all]==2.2.4
2323

2424
# directories and aea cli config
2525
COPY /.aea /home/.aea

plugins/aea-ci-helpers/setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def _read_long_description() -> str:
3131

3232
setup(
3333
name="open-aea-ci-helpers",
34-
version="2.2.3",
34+
version="2.2.4",
3535
author="Valory AG",
3636
license="Apache-2.0",
3737
description="CI helper utilities for AEA-based projects.",

plugins/aea-cli-benchmark/setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def _read_long_description() -> str:
3232

3333
setup(
3434
name="open-aea-cli-benchmark",
35-
version="2.2.3",
35+
version="2.2.4",
3636
author="Valory AG",
3737
license="Apache-2.0",
3838
description="CLI extension for AEA framework benchmarking.",

plugins/aea-cli-ipfs/setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def _read_long_description() -> str:
3434

3535
setup(
3636
name="open-aea-cli-ipfs",
37-
version="2.2.3",
37+
version="2.2.4",
3838
author="Valory AG",
3939
license="Apache-2.0",
4040
description="CLI extension for open AEA framework wrapping IPFS functionality.",

0 commit comments

Comments
 (0)