Skip to content

0.10.2

Latest

Choose a tag to compare

@odesenfans odesenfans released this 16 Jun 20:19
164866b

This release expands the credit history API, adds authenticated IPFS CAR uploads and content-format filtering, optimizes Ethereum gas usage with EIP-1559, and lands a large stability pass focused on graceful shutdown, IPFS request-herd mitigation, and query performance.

New Features ✨

  • Expanded Credit History API: /credit_history gains time-range filtering, a direction (incoming/outgoing) filter, a resource-type filter (storage vs. compute spend), and a new summary endpoint. (PRs #1185, #1186, #1187, #1188) 💳
  • Authenticated IPFS CAR Upload: New endpoint for authenticated CAR (Content Addressable aRchive) uploads. (PR #1134) 🔐
  • Content Format Filter on Messages: Added a contentFormat query parameter to the messages list endpoint. (PR #1165) ✂️
  • Filter Account Files by Hash: Account file listings can now be filtered by hash. (PR #1162) 🔍
  • EIP-1559 Gas Optimization: Ethereum sync now uses EIP-1559 fee parameters to optimize gas costs. (PR #919) ⛽
  • Larger Uploads: Bumped the maximum file upload size to 1 GiB. (PR #1166) 📦

Security Hardening 🛡️

  • Balance Check on All Uploads: Enforce a balance check on every authenticated upload path. (PR #1149)
  • Early Signature Rejection: Reject pending messages with a missing signature early in processing. (PR #1157)
  • FORGET Authorization: Authorize FORGET via security-aggregate delegation. (PR #1156)
  • Credit Grant Draining: Prevent a backdated expense from draining a future-dated grant. (PR #1124)

Graceful Shutdown & Stability 🛑

  • SIGTERM Handling: Subprocess entry points now handle SIGTERM cleanly, unified on asyncio.run, with AsyncExitStack shutdown scaffolding and child-process tracking/termination via the JobsRunner. (PRs #1138, #1139, #1140, #1146)
  • Clean Resource Teardown: Properly close the RabbitMQ channel/connection, dispose SQLAlchemy engines, close the P2P client and shared MQ connection, close cached aiohttp sessions, and close NodeCache and IpfsService on shutdown. (PRs #1141, #1142, #1143, #1144, #1145)
  • Quieter Shutdown Logs: Silenced shutdown noise from MqWatcher and the Web3 provider. (PR #1154)

IPFS & Storage 🗄️

  • Request-Herd Mitigation: Added a randomized delay before IPFS fetches and STORE file-fetch metrics to measure herd behavior. (PRs #1164, #1171)
  • Faster Local Balance Pre-Check: Skip the IPFS size lookup in pre_check_balance when the file is already local, and widen the timeout otherwise. (PRs #1169, #1170)
  • Storage Client Consolidation: Route all IPFS storage operations through the pinning client and expose a storage_client property. (PRs #1179, #1180)

Performance ⚡

  • Denormalized Tags: Denormalized message and post tags into dedicated TEXT[] columns backed by a single GIN index covering every message type, replacing the POST-only JSONB index. (PRs #1116, #1117) 🏷️
  • Persisted Scoring Metrics: Persist node scoring metrics in dedicated partitioned tables. (PR #1150) 📊
  • Faster /posts/ Listing: Sped up the v0 /posts/ listing for filtered queries with a composite partial index. (PR #1133)
  • Faster Unconfirmed Messages: Sped up get_unconfirmed_messages using a denormalized column. (PR #1132)
  • Credit Balance Lot Cache: Eager-write lot cache for credit_balances. (PR #1122)

Bug Fixes 🐞

  • Duplicate WebSocket Fanout: Serialize MQ consumer start to stop duplicate message fanout. (PR #1173) 📡
  • WebSocket Connection Counter Leak: Fixed an active-connection counter leak in MessageBroadcaster. (PR #1118) 📊
  • Page Param Validation: Validate the page path parameter on the messages list endpoint. (PR #1174)
  • Retry Backoff Jitter: Apply full-jitter to message retry backoff. (PR #1172) 🔁
  • Invalid PROGRAM Metadata: Auto-reject PROGRAM messages with non-dict metadata. (PR #1137)
  • Auth Token Items: Unwrap configmanager Items in require_auth_token. (PR #1136) 🔑

Maintenance & Dependency Updates ⬆️

  • Removed the broken in-memory aggregates cache. (PR #1182)
  • Dropped the direct requests dependency. (PR #1158)
  • Tightened typing: narrowed JSONB content fields and credit-handler signatures, and introduced a SignableMessage protocol for signature verifiers. (PRs #1148, #1155)
  • Excluded .worktrees/ from the Docker build context. (PR #1167)
  • Bumped aleph-message to 1.2.0 and the Aleph P2P service client to 0.2.0. (PRs #1147, #1177)
  • Library refresh: pydantic, urllib3, psycopg2-binary, sentry-sdk, pytz, more-itertools, types-aiofiles.

Upgrade Guide

Make sure that your node is running v0.10.1 or later.

From v0.10.1, simply bump the version of these services:

  • On the docker-compose.yml file, the pyaleph and pyaleph-api services must now use alephim/pyaleph-node:0.10.2.

Then run docker compose pull && docker compose up -d to restart the services.

⚠️ Important - long-running migrations: This release denormalizes additional columns into the messages (and posts) tables. Migration 0056 adds a tags TEXT[] column and runs a batched full-table backfill followed by a concurrent GIN index rebuild; this can take several hours on slower nodes. Migrations 0058 (concurrent index on posts) and 0059 (partitioned scoring-metrics tables with a 12-month backfill from messages) also run during this upgrade. Do not interrupt the process. The first startup may take significantly longer than usual while migrations 0056–0059 complete. Monitor the logs to confirm migration completion before considering the node fully operational.

Full Changelog: 0.10.1...0.10.2