Skip to content

Changelog

All notable changes to Web3 Agent Kit are documented here.


[1.18.5] - 2026-09-29

Features

  • chains: Base Sepolia (84532) registered as a first-class Chain member (base-sepolia, default RPC https://sepolia.base.org, CHAIN_IDS entry, BaseScan Sepolia explorer) so the Insight/PriorSeal conformance spike can evaluate a Base Sepolia call through the same chain-validated CallEnvelopeV1.from_transaction gate as every other chain.
  • examples: bounded WAK / Insight / PriorSeal conformance spike — WAK-owned JSON boundary, offline N1–N5b acceptance harness, live-boundary and call-event retention support, and the vendored v1 conformance bundle.

Build

  • cryptography>=41.0.0 added to runtime dependencies (Ed25519 receipt/attestation verification used by the spike boundary).

Fixed

  • The acceptance report records runtime provenance (runtime.packageVersion, commit, tree state) alongside the fixture-pinned wakVersion; a report produced by a tree carrying unreleased core changes is no longer indistinguishable from one produced by the released tag. Isolated core-change diff at docs/review/1.18.5-core-change-base-sepolia.patch.

[1.18.4] - 2026-09-19

Fixed

  • The static signer-surface check no longer misses violations when the scanned package sits under a directory named venv, .venv, build or dist. Exclusions were evaluated against the absolute path, so such an ancestor excluded the entire scan: the checker reported zero signer calls and exited 0 while an unapproved call was present. Exclusions are now relative to the scan root, so ancestors cannot suppress the scan while nested environment directories remain excluded.

This affected the most common way to run the check — from inside a virtualenv. CI did not catch it because the runner checks out to a path with no excluded ancestor.

Added

  • Regression tests parametrised over five ancestor names and four nested directory names, plus the missing empty-stderr assertion on the checker module test.

[1.18.3] - 2026-09-18

Fixed

  • python -m web3_agent_kit.execution.p0_probe no longer emits a RuntimeWarning. web3_agent_kit.execution.__init__ imported the probe eagerly, so runpy found it in sys.modules before executing it. The console entry point was unaffected — it never goes through runpy — which is why the warning survived a suite that exercised the entry point.
  • run_all_probes remains importable from web3_agent_kit.execution via a lazy wrapper, so the documented import path still works.

Added

  • A test asserting python -m produces empty stderr, not merely exit 0. The bug was a warning, so a pass/fail-only check would not have caught it.

[1.18.2] - 2026-09-18

Fixed

  • The CLI version pin is bumped alongside the package. It is hardcoded separately from pyproject.toml and __version__, and Release Please has no knowledge of it.

Changed

  • p0_probe and check_signing_surface moved into web3_agent_kit.execution, so both ship inside the wheel. Previously they lived in tools/, which is not packaged, which meant an evidence bundle could reference a verification step that an installed package could not perform. New entry points: wak-p0-probe and wak-signing-surface.
  • tools/ keeps thin wrappers for the source-checkout workflow.

Added

  • Packaging tests that build a wheel and inspect its contents, rather than asserting that a module imports. An import test passes in a source checkout even when the module is absent from the distribution.

[1.18.1] - 2026-09-18

Fixed

  • execution: three pre-sign gate gaps that allowed signing without the policy being fully applied. A chain mismatch between the evaluated chain and the transaction's chainId was not detected; an unbound wallet signed contract creation (to=None); and a policy allow produced a signature with no principal exact-call authorization. Each is reproducible with tools/p0_probe.py against the previous revision.
  • The CLI version pin is now covered by a test. It is hardcoded separately from pyproject.toml and __version__, and had drifted two minor versions behind without anything failing.

Added

  • CallEnvelopeV1 (agent-call-envelope.v1) as a canonical, versioned call identity, with the policy verdict kept in a separate domain-separated commitment so "policy allowed" and "the principal authorized this exact call" remain independently verifiable.
  • AuthorizationProvider protocol and NullAuthorizationProvider. Policy allow is no longer sufficient to sign.
  • tools/p0_probe.py, which reproduces the enforcement findings against any revision.

Changed

  • airdrop, messaging and governance accept an injected policy, authorization provider and preconfigured gate. Governance previously built a fresh gate per call, resetting its authorization sequence and replay set.

Breaking

  • PreSignInterceptor requires an authorization provider for any signature.
  • allow_unattended is removed; confirmation is UX and cannot substitute for authorization.
  • Transactions must carry from; the envelope needs an executor to have an identity.
  • AuthorizationRequest.call_fingerprint changed value. It is now the canonical envelope digest: the action label is excluded, the executor is included.

[1.18.0] - 2026-09-18

Features

  • execution: enforced pre-sign authorization gate. Every write-capable module now signs through a single approved API that evaluates the execution policy before any signature is produced. A missing policy is fail-closed, a confirmation-required policy refuses to sign unattended, and every evaluation is recorded in an append-only audit log with the authorized call fingerprint.
  • Added PreSignInterceptor and Wallet.bind_enforcement(). A wallet with no bound gate refuses to sign write-capable transactions.
  • Migrated the airdrop, messaging, governance, bridge and restaking signing paths behind the gate, including the three that previously bypassed the Wallet wrapper.
  • Added tools/check_signing_surface.py, enforced in CI, which fails on any new unapproved direct signer call.

Security

  • ExecutionPolicy is now exported and enforced on the signing path. It was previously unreachable from the modules that build transactions.

Breaking

  • Modules that previously signed without a policy now raise EnforcementDenied. messaging, governance and airdrop accept an optional policy= argument; when omitted, they deny rather than sign unprotected.

Dependencies

  • Bumped web3, eth-account, eth-abi, eth-keys, eth-keyfile, eth-rlp, and several utility packages.

[1.16.2] - 2026-09-08

Fixed

  • Synchronized package, CLI, documentation, and website metadata.
  • Corrected the published coverage statistic and canonical website links.
  • Fixed broken documentation anchors and completed the MkDocs navigation.

[1.14.0] - 2026-07-21

Security

  • REST API now requires authentication (X-API-Key / WEB3_API_KEY) on all sensitive endpoints; server fails closed and refuses to start if WEB3_API_KEY is unset
  • Default API bind host changed from 0.0.0.0 to 127.0.0.1; explicit 0.0.0.0 now logs a network-exposure warning
  • CORS configuration hardened via CORS_ALLOWED_ORIGINS env var; unsafe * + credentials combination is rejected at startup
  • /wallet/create disabled by default (ENABLE_WALLET_CREATE_ENDPOINT=false), clearer one-time-secret warning

Fixed

  • Spend governor now enforced by default on every Agent, and no longer crashes when integrated into Agent._act()
  • GET /wallet/balance/{address} now queries the requested address instead of the env wallet's balance

Added

  • Wallet.from_keystore(path, password) for standard Ethereum JSON keystore files

Removed

  • Unused httpx2 dependency

Breaking Changes

  • WEB3_API_KEY is now mandatory to start the REST API server
  • AgentConfig.governor is active by default with conservative spend limits

[1.13.0] - 2026-07-14

Changed

  • Version bump to 1.13.0 across package metadata (__init__.py, pyproject.toml)

[1.12.0] - 2026-07-12

Fixed

  • CRITICAL DX: package import path is now web3_agent_kit (was incorrectly installed as src)
  • README/docs/examples import paths aligned with real package name
  • CLI version string synced to release version
  • Notification module duplication cleaned (notifications/ canonical; utils/notif_* are shims)

Added

  • Agent(private_key=...) convenience constructor
  • Agent.execute() alias for Agent.run()
  • CI import smoke test for public package path

Changed

  • Source tree renamed: src/ → web3_agent_kit/
  • Pytest/coverage config now tracks web3_agent_kit

Stats

  • 1,149 tests passing
  • 61% coverage
  • Public import: from web3_agent_kit import Agent, Wallet, Chain

[1.11.0] - 2026-07-11

Added

  • Solana module — full Solana blockchain integration
  • SolanaClient — async RPC client (getBalance, getTokenAccounts, sendTransaction, getTransaction, getTokenSupply)
  • SolanaWallet — keypair management, send SOL/SPL tokens, sign messages (base58/base64)
  • JupiterDEX — Jupiter aggregator (quote, swap, token search, price API)
  • SolanaNFT — Metaplex DAS API (getAssetsByOwner, getAsset, collections, portfolio summary)
  • DEX Aggregator — unified multi-chain DEX interface
  • EVM: 1inch, Paraswap, 0x Protocol
  • Solana: Jupiter
  • get_best_quote() auto-selects best provider across all chains
  • 73 new tests — 45 Solana + 14 Aggregator + 14 NFT
  • pyproject.toml: added solana optional deps (solders, spl-token, base58)

Changed

  • Chain.SOLANA enum now backed by real implementation (was stub)
  • solders import is lazy — only loaded when SolanaWallet is instantiated

[1.10.0] - 2026-07-06

Added

  • Async airdrop module — 31 time.sleep() calls converted to asyncio.sleep() / page.wait_for_timeout()
  • scheduler.py, discovery.py, faucet.py, onchain.py, multi_wallet.py, wl_grinder.py, form_filler.py, base.py
  • Simulator test suite — 29 new tests for TransactionSimulator
  • PyPI trusted publisher — OIDC-based auto-publish on GitHub Release (no API token needed)

Changed

  • AirdropScheduler.start() now uses async event loop in background thread
  • AirdropScheduler.run_task_now() is now async (await)
  • FaucetClaimer.claim_chain() is now async (await)
  • AirdropFarmer.farm_campaign() is now async (await)
  • CI: added pytest-asyncio dependency for async test support

Stats

  • 27 modules (was 23)
  • 163 source files (was 115)
  • 1,033 tests passing (was 991)
  • 60% coverage (was 31%)
  • 8 chains supported

[1.9.1] - 2026-07-01

Fixed

  • Coverage badge: 58% → 31% (actual)
  • Version bump to 1.9.1

Stats

  • 23 modules
  • 115 source files
  • 991 tests passing
  • 31% coverage
  • 8 chains supported

[1.9.0] - 2026-06-30

Added

  • Oracle Aggregator — Multi-source price feeds (Chainlink, DexScreener, CoinGecko) with weighted median, cache, and auto-fallback
  • Event Listener — On-chain event subscription with webhooks, callbacks, and background polling
  • Transaction Simulator — Pre-flight TX verification via eth_call, Tenderly API, and local fork
  • Account Abstraction — ERC-4337 bundler, paymaster integration (Pimlico), smart account factory (SimpleAccount, Safe, Kernel)
  • Cross-chain Messaging — LayerZero + Wormhole + CCIP unified API with status tracking and fee estimation
  • Governance — Snapshot + Tally + on-chain governor, proposal tracking, voting power, delegation
  • .env.example with all module configurations
  • Integration test suite (tests/test_integration.py)
  • PyPI auto-publish workflow via GitHub Actions
  • Aave V3, Curve, Uniswap V3 DeFi integrations

Changed

  • restaking/ moved to plugins/restaking/ — now a plugin, not a core module
  • notifications/ merged into utils/ — backward-compatible re-exports maintained
  • README updated with 6 new module sections, architecture diagram, and stats
  • PyPI keywords updated with oracle, erc4337, governance, cross-chain, layerzero, simulation
  • Version bump to 1.9.0

Stats

  • 23 modules (was 18)
  • 115 source files (was 104)
  • 32,743 lines of code
  • 991 tests passing (was 986)
  • 31% coverage
  • 8 chains supported (was 7)

[1.8.0] - 2026-06-29

Added

  • Aave V3 integration — supply, borrow, repay, liquidation
  • Curve Finance — swaps across all pool types, gauge deposits
  • Uniswap V3 — pool queries, multi-hop quotes, position NFTs

Changed

  • CI workflow fixed (httpx2 typo removed)
  • README stats updated

[1.7.0] - 2026-06-28

Added

  • Restaking module — EigenLayer, Babylon BTC, Solana restaking
  • Notifications module — Telegram, Discord, email alerts
  • Plugin system — custom tool registration
  • MEV protection — Flashbots, private mempool

[1.6.0] - 2026-06-06

Added

  • CLI tool wak — 7 commands for terminal usage (info, doctor, wallet, gas, token, examples, agent)
  • ASCII art banner on CLI startup
  • click + rich CLI dependencies

Changed

  • Updated README with CLI tool usage
  • Version bump to 1.6.0

[1.5.0] - 2026-06-05

Added

  • Gas optimizer with historical analysis
  • Portfolio tracker with P&L
  • Cross-chain bridge via Li.Fi + Socket