Latest Blog Posts
Tutorials and updates from the Chroma team.
Glamsterdam's Gas Repricing: Why Your Hardcoded Gas Limits Are About to Break
Glamsterdam's gas repricing EIPs change costs for DIV, KECCAK256, calldata, and nested storage. Here's what to audit before the upgrade ships.
Ethereum's Contract Size Limit Is Growing: What EIP-7954 Changes for Developers
EIP-7954 raises Ethereum's 24KiB contract size limit to 32KiB in Glamsterdam. Why the limit exists, what workarounds it forces, and what changes.
EIP-7951 and Ethereum's Fusaka Upgrade: Passkey Wallets Are Now First-Class on L1
EIP-7951 in Fusaka adds P-256 signature verification to Ethereum L1 at 6,900 gas, making passkey wallets viable without L2 workarounds.
EIP-7805 FOCIL: How Ethereum's Hegota Upgrade Hardens Transaction Inclusion
EIP-7805 FOCIL arrives in Ethereum's Hegota upgrade to make censorship by block builders structurally harder. How inclusion lists work and what it means for developers.
EIP-8141 Frame Transactions: Ethereum's Native Account Abstraction Model Explained
EIP-8141 Frame Transactions bring native account abstraction to Ethereum's Hegotá upgrade. How they differ from EIP-7702 and ERC-4337, explained.
ERC-8211: How Ethereum's Smart Batching Standard Solves Multi-Step DeFi Execution
ERC-8211 introduces runtime parameter resolution for multi-step DeFi batches — no more cascading reverts when swap outputs don't match deposit inputs.
EIP-7928 and Block-Level Access Lists: How Ethereum's Glamsterdam Upgrade Enables Parallel Execution
EIP-7928 introduces Block-Level Access Lists in Glamsterdam, enabling Ethereum parallel execution. Here's how BALs work and what dApp developers need to know.
Foundry 1.6: Parallelized Fuzzing and the check_interval Option That Cuts Invariant Test Time by 3.6x
Foundry 1.6 ships parallelized fuzzing, a configurable check_interval that cuts invariant test time by 3.6x, and time-based block fuzzing for catching vulnerabilities unit tests miss.
Foundry 1.5: The cast erc20 Commands and How They Simplify EVM Token Work
Foundry 1.5 ships cast erc20 — a dedicated CLI for ERC-20 balance checks, transfers, and approvals. Here's what changed and why it matters for your workflow.
ink! Is No Longer Maintained: What Polkadot Smart Contract Developers Should Do Now
ink! smart contract development on Polkadot ended in January 2026. Here's why it happened, what it means for existing code, and where to go next.
Solidity 0.8.34 Fixes a High-Severity Transient Storage Bug: What --via-ir Users Need to Know
A high-severity Solidity bug in 0.8.28–0.8.33 silently skips clearing transient storage in --via-ir mode. Who's affected and how to upgrade to 0.8.34.
EIP-7702 in Practice: Adding Smart Account Features to Your Existing Users
EIP-7702 lets you add session keys, gas sponsorship, and batching to EOA wallets using viem—no user migration required.
Hardhat 3 Is Production-Ready: What Changed and How to Migrate
Hardhat 3 rewrites the dev network in Rust, adds native Solidity tests, and simulates OP Stack locally. Here's what changed and how to migrate.
Deploying Solidity Contracts on Polkadot Hub: A Practical Guide for EVM Developers
Polkadot Hub now runs Solidity natively. Here's what EVM developers need to know about tooling setup, the forge test caveat, and deployment differences.
Playwright Web3 Testing: EIP-712 Permit Signatures and Gasless DeFi Approvals
Test EIP-712 permit signature flows in DeFi dApps with Playwright and @avalix/chroma — gasless approvals, real MetaMask popups, no mocks.
EVM dApp Testing on an Anvil Mainnet Fork: Real State, Zero Risk
Learn how to combine Anvil's mainnet fork with @avalix/chroma for EVM dApp testing against real on-chain state — no mainnet gas, no mocks.
Testing ERC-20 Token Approvals in DeFi dApps: A Playwright Walkthrough
Learn how to E2E test ERC-20 token approval flows in DeFi dApps using Playwright and real MetaMask interactions — no mocks required.
Testing NFT Mint Flows End-to-End with MetaMask and Playwright
Learn how to test NFT mint flows in EVM dApps using MetaMask and Playwright — connect wallets, confirm transactions, assert results without mocks.
The Hidden Cost of Mocked Wallets: A Practical E2E Strategy for dApps
Learn a pragmatic approach to dApp testing that combines unit, integration, and real wallet E2E coverage so teams can ship with confidence.
The Most Important Web3 Test Is the One Users Cancel
A practical guide to testing wallet rejection and recovery flows in dApps, and why these paths often matter more than happy-path automation.
Test What Users Actually Do: A Practical Reliability Model for Web3 dApps
An educational guide to testing real wallet-driven user flows in Web3, with a practical model teams can apply to reduce regressions and improve release confidence.
Testing the Human Layer in dApps: From Green Pipelines to Real User Trust
Why many Web3 teams still ship broken flows despite passing tests, and how to design end-to-end coverage around real wallet behavior.
Beyond Green Checks: Testing the Wallet Moments That Break dApps
Why many Web3 test suites pass while real users still fail, and how to design end-to-end tests around wallet behavior, rejection paths, and async chain state.
Build dApp Flows That Survive Wallet Rejections
Most blockchain apps test the happy path and miss what users do in real life: cancel prompts, switch accounts, and retry. Learn a practical approach to resilient wallet E2E testing.
Why dApp Tests Pass but User Flows Still Break: The Wallet UX Gap
A practical guide to testing real wallet interactions in Web3, with strategies to reduce flaky releases and catch the failures mocks miss.
From Local Testing to CI Pipelines: Shipping Reliable E2E Tests for Your dApp
A practical guide to taking your Web3 wallet tests from a local dev machine to a fully automated CI pipeline with Playwright and @avalix/chroma.
E2E Testing Your EVM dApp with MetaMask: No Mocks, Just Real Clicks
Run Playwright tests against a real MetaMask extension. Connect, sign, and reject flows covered in CI. No mocks, no manual clicks.