# Solidity Developer > Practical Solidity tutorials, Ethereum protocol explanations, and development guides. These links point to published articles. Markdown copies preserve article text, code examples, source links, and authored compatibility notes. Use each article's canonical source when citing it. Articles span multiple Solidity and Ethereum versions. Check the publication date and any compatibility or review notes before using an example. An updated date records an authored change; it does not imply that every example was retested. ## Articles - [Foundry Invariant Testing for Real Protocols](): Build Foundry invariant tests for an ERC-4626 vault using handlers, multiple users, share transfers and a separate accounting model. Includes tested Solidity code. [Canonical source]() - [How to use ChatGPT with Solidity](): Practical ChatGPT prompts for learning Solidity, debugging compiler errors and developing tests, with version-specific context and careful review of results. [Canonical source]() - [How to ​integrate Uniswap 4 and create custom hooks](): Explore Uniswap v4's advanced features in our deep dive. Learn to integrate it into your contracts, create pools with custom hooks, and redefine DeFi trading. [Canonical source]() - [How to integrate Wormhole in your smart contracts](): Explore Wormhole's innovative blockchain interoperability solution. Learn about cross-chain communication using self-relaying and generic relayers. [Canonical source]() - [Solidity Deep Dive: PREVRANDAO](): Understand Ethereum’s PREVRANDAO value, its relationship to the Merge and the limitations of using public block data as application randomness. [Canonical source]() - [How Ethereum scales with Arbitrum Nitro and how to use it](): Explore Arbitrum Nitro’s architecture, execution and proof concepts, with versioned source references and context for the original integration examples. [Canonical source]() - [The Ultimate Merkle Tree Guide in Solidity](): Merkle trees are used everywhere in the world of blockchains. Learn how they work, how to use them yourself and what might be future optimizations for them. [Canonical source]() - [Understanding The Graph’s Decentralized Network](): Understand The Graph’s decentralized indexing network and how the original deployment workflow differs from the current service and tooling. [Canonical source]() - [Understanding ZKsync for Solidity Developers](): Explore ZKsync scaling and execution concepts, with notes distinguishing retired testnets, earlier tooling and current documentation. [Canonical source]() - [Exploring the Openzeppelin CrossChain Functionality](): A historical review of OpenZeppelin’s CrossChain abstractions, their version dependencies and the trust assumptions of cross-chain messaging. [Canonical source]() - [Deploying Solidity Contracts in Hedera](): Explore Solidity contracts on Hedera, including token-service examples, token association and the differences that matter when adapting EVM code. [Canonical source]() - [Writing ERC-20 Tests in Solidity with Foundry](): Write Solidity tests for an ERC-20 with Foundry. Explore assertions, expected reverts and project setup, with notes on the original example’s dependencies. [Canonical source]() - [ERC-4626: Tokenized Vaults and Share Accounting](): Understand ERC-4626 tokenized vaults, assets and shares, rounding rules and accounting checks, with corrections to the original example. [Canonical source]() - [Advancing the NFT standard: ERC721-Permit](): Explore ERC-4494 signature-based approvals for NFTs, including nonces and implementation details. Permit support depends on the token contract. [Canonical source]() - [Moonbeam: The EVM of Polkadot](): Understand Moonbeam and Moonriver in the Polkadot ecosystem, with updated deployment references and compatibility notes for the older examples. [Canonical source]() - [Advanced MultiSwap: How to better arbitrage with Solidity](): Explore the advanced historical MultiSwap example, its execution assumptions and why a sequence of swaps does not guarantee profit or lower fees. [Canonical source]() - [Deploying Solidity Smart Contracts to Solana](): A historical guide to Solidity on Solana through Solang, with compiler and target differences that prevent treating it as a drop-in EVM deployment. [Canonical source]() - [Smock 2: The powerful mocking tool for Hardhat](): Explore Smock v2 mocking and fakes for older Hardhat test suites, including corrected examples and compatibility notes for its dependencies. [Canonical source]() - [How to deploy on Evmos: The first EVM chain on Cosmos](): A historical Evmos deployment guide with updated network references and context for EVM execution in the Cosmos ecosystem. [Canonical source]() - [EIP-2535: A standard for organizing and upgrading a modular smart contract system.](): Understand ERC-2535 diamonds: facets, shared storage and upgrade controls, including the design choices and limitations of modular proxy systems. [Canonical source]() - [MultiSwap: How to arbitrage with Solidity](): Explore a historical multi-swap contract that combines DEX calls in one transaction, including its assumptions and the limits of trading examples. [Canonical source]() - [Understanding Optimism for Solidity Developers](): Explore Optimism’s rollup architecture and deployment concepts, including the trust assumptions and changes since the original tutorial. [Canonical source]() - [Aurora: Solidity on NEAR](): Understand Aurora’s EVM execution on NEAR, its architecture and deployment considerations, with corrections to the original network examples. [Canonical source]() - [What is ecrecover in Solidity?](): ecrecover is not an opcode, but an EVM precompile. Learn all you need to know about it and how you can utilize this in your contracts. [Canonical source]() - [How to use Binance Smart Chain in your Dapp](): With the launch of Binance Smart Chain a new ecosystem for Defi opened at the end of 2020. What is it and how can you use it? [Canonical source]() - [Using the new Uniswap v3 in your contracts](): The new Uniswap v3 is available on the mainnet. Learn what is new and how to integrate it in your contracts for trading or developments. [Canonical source]() - [The London Hardfork: What Changed](): Review Ethereum’s London upgrade: EIP-1559 fees, refund changes and what they mean for Solidity contracts and historical gas-token strategies. [Canonical source]() - [The Ultimate Ethereum Mainnet Deployment Guide](): Review Ethereum deployment preparation, configuration and verification through a historical tooling guide with updated compatibility notes. [Canonical source]() - [SushiSwap Explained!](): The Uniswap fork SushiSwap brought new features like staking and governance to the exchange. But how exactly are the contracts behind it working? [Canonical source]() - [Solidity Fast Track 2: Continue Learning Solidity Fast](): Do you want to continue learning Solidity fast? In this second part tutorial you will learn all the advanced basics about Solidity development. [Canonical source]() - [The Berlin Hardfork: What Changed](): Review Ethereum’s Berlin upgrade, access lists and cold-versus-warm access costs, with context for how the changes affected Solidity developers. [Canonical source]() - [Chi Gas Tokens: How the Old Refund Strategy Worked](): A historical explanation of Chi gas tokens and storage refunds. London changed the refund rules, so the original savings strategy is obsolete on Ethereum. [Canonical source]() - [OpenZeppelin Contracts 4 in Review](): A version-specific review of OpenZeppelin Contracts 4 and its Solidity 0.8 transition, with compatibility notes for maintaining older projects. [Canonical source]() - [EIP-3156: Creating a standard for Flash Loans](): Flash loans are a commonly used pattern for hacks, but what exactly are they? EIP-3156 is a standard unifying the idea into a new interface. Learn all about it. [Canonical source]() - [Tornado.cash: A story of anonymity and zk-SNARKs](): You may know tornado.cash from hacks. It's a service to bring anonymity to Ethereum. We'll explore the fascinating cryptography behind it and the future with its TORN token. [Canonical source]() - [High Stakes Roulette: A Historical Solidity Example](): A historical Solidity roulette example discussing randomness and accounting. The prototype is not presented as a secure or ready-to-deploy gambling system. [Canonical source]() - [How to implement generalized meta transactions](): We'll explore how to implement generalized meta transactions. Meta transactions allow users to sign a transaction and have someone else submit them to the blockchain. [Canonical source]() - [Utilizing Bitmaps to dramatically save on Gas](): Learn how bitmaps pack boolean values into storage words, where they can reduce gas costs, and how index and update patterns affect the result. [Canonical source]() - [Using the new Uniswap v2 as oracle in your contracts](): The new Uniswap v2 has added functionality to be used as oracle. Learn how to use it and integrate it in your contracts. [Canonical source]() - [Smock: The powerful mocking tool for Hardhat](): A guide to the original Smock mocking approach for Hardhat tests, with corrected examples and notes for its older dependency versions. [Canonical source]() - [How to build and use ERC-721 tokens in 2021](): Explore ERC-721 ownership, approvals, transfers and receiver checks through the original 2021 tutorial, with corrected implementation notes. [Canonical source]() - [Trustless token management with Set Protocol](): We'll explore Set Protocol, the perfect example for the new paradigm of Defi + composability. Create baskets that contain any tokens you want and let someone else manage it. [Canonical source]() - [Exploring Solidity 0.8’s Arithmetic and Error Handling](): Review Solidity 0.8’s checked arithmetic, panic errors and migration considerations, including when unchecked operations or older libraries change behavior. [Canonical source]() - [How to build and use ERC-1155 tokens](): With ERC-1155 you can have many tokens in one. Its power goes way beyond being used for games. Learn what it is and how you can use it today. [Canonical source]() - [Leveraging the power of Bitcoins with RSK](): Leveraging the power of the Bitcoin network for smart contracts, using RSK you can transfer mainnet Bitcoins to an EVM sidechain and vice-versa. Learn how to use it today. [Canonical source]() - [Solidity Fast Track: Learn Solidity Fast](): Do you want to learn Solidity in 20 minutes? In this tutorial you will learn all the blockchain and Solidity fundamentals required designed to be as fast as possible. [Canonical source]() - [Sourcify: Contract Verification Beyond Etherscan](): Understand Sourcify contract verification, metadata hashes and source availability, with current UI references and context for older tooling examples. [Canonical source]() - [Integrating the 0x API into your contracts](): A historical 0x Swap API integration, with compatibility notes explaining why old endpoints and response formats need review before reuse. [Canonical source]() - [How to build and use ERC-777 tokens](): Explore ERC-777 token operators and hooks, their relationship to ERC-20, and the integration considerations around external callbacks. [Canonical source]() - [COMP Governance Explained](): The COMP governance is a simple set of smart contracts. We'll take a close look at the core contract which adds decentralized governance to Compound. [Canonical source]() - [ERC-165: Interface Detection and Token Receivers](): Understand ERC-165 interface IDs and support checks, with ERC-20 examples showing why interface declarations alone cannot prevent stuck tokens. [Canonical source]() - [Understanding the World of Automated Smart Contract Analyzers](): Compare approaches to automated smart-contract analysis, including static analysis and symbolic execution, and understand where tools still need human review. [Canonical source]() - [A Long Way To Go: On Gasless Tokens and ERC20-Permit](): Understand ERC-2612 signed token approvals, nonces and deadlines, and how permits change approval flows for contracts that implement the standard. [Canonical source]() - [Smart Contract Testing with Waffle 3](): Explore Waffle 3 smart-contract testing, its matchers and fixtures, with compatibility notes for projects using the older ethers-based toolchain. [Canonical source]() - [Understanding Gnosis Chain (formerly xDai)](): Understand Gnosis Chain, formerly xDai, its own validator network and deployment considerations, with historical naming and bridge details clearly separated. [Canonical source]() - [Stack Too Deep](): You just have to add one tiny change in your contracts. With such a small change, you are confident your code is correct. But oh no, what's that error? [Canonical source]() - [Integrating Chainlink Price Feeds in Solidity](): Read Chainlink price feeds from Solidity and understand the checks around feed selection, decimals, freshness and application assumptions. [Canonical source]() - [TheGraph: Fixing the Web3 data querying](): Blockchain is like a database but without SQL. All the data is there, but no way to access it. Let me show you how to fix this with TheGraph and GraphQL. [Canonical source]() - [Adding Typescript to Truffle and Buidler](): Learn how to use Typescript in Truffle and Buidler projects to level up your JavaScript code with typechecking including contract types. [Canonical source]() - [Integrating Balancer in your contracts](): The new Balancer DEX is an alternative to Uniswap. Learn how to integrate it in your contracts. [Canonical source]() - [Navigating the pitfalls of securely interacting with ERC20 tokens](): You would think calling a few functions on an ERC-20 token is the simplest thing to do, right? Unfortunately I have some bad news, it's not. [Canonical source]() - [Integrating Aave: Yield and Its Tradeoffs](): Explore an early Aave integration, its deposit and withdrawal flow, and why lending yield introduces protocol, liquidity and integration risks. [Canonical source]() - [How to use Polygon (Matic) in your Dapp](): Understand Polygon PoS, its relationship to Ethereum and historical Matic terminology, with updated network guidance and notes on retired testnets. [Canonical source]() - [Migrating from Truffle to Buidler](): Do you want to get console.log and stack-traces within your Solidity code for your Truffle project? This will show you how to get it. [Canonical source]() - [Contract factories and clones](): How to deploy contracts as easily and cheaply as possible with advanced concepts. [Canonical source]() - [How to use IPFS in your Dapp?](): Learn how content-addressed IPFS files fit into a dapp, what content hashes verify, and why file availability still depends on storage and pinning. [Canonical source]() - [Downsizing contracts to fight the contract size limit](): There is a maximum size for smart contracts to prevent DOS attacks. What can you do to prevent your contracts from getting over the limit? [Canonical source]() - [Using EXTCODEHASH to Inspect Contract Code](): Learn what EXTCODEHASH identifies, how code-hash checks behave, and why a matching runtime hash is only one part of reviewing contract behavior. [Canonical source]() - [Using the new Uniswap v2 in your contracts](): The new Uniswap v2 is available on the mainnet. Learn how to integrate it in your contracts. [Canonical source]() - [Solidity and Truffle Continuous Integration Setup](): A historical Truffle CI setup with Travis and CircleCI, including corrected configuration examples and notes for maintaining an older project. [Canonical source]() - [Devcon 6: The Original Plan for 2021](): An archived announcement of plans for Devcon 6 in Colombia. The original 2021 plan was postponed; read the post with its historical context. [Canonical source]() - [The Year of the 20: Creating an ERC20 in 2020](): A tutorial on how to use the latest and best tools to create an ERC-20 token contract in the year 2020. [Canonical source]() - [How to get a Solidity developer job?](): Explore open-source work, direct applications, referrals and hackathons as routes into Solidity development, with older hiring-market claims kept in context. [Canonical source]() - [Design Pattern Solidity: Mock contracts for testing](): Mocking contracts are a powerful way to test your smart contracts. This post shows you how and why you should make fun of your contracts. [Canonical source]() - [Kickstart your Dapp frontend development with create-eth-app](): Making the most of create-eth-app to kickstart Dapp frontend development incl all features, how to use them and an explanation of optional integrations. [Canonical source]() - [The big picture of Solidity and Blockchain development in 2020](): Overview of the most important technologies, services and tools that you need to know as Solidity developer in 2020. [Canonical source]() - [Design Pattern Solidity: Free up unused storage](): Solidity design pattern of freeing up unused storage to save gas and reduce network load. [Canonical source]() - [How to setup Solidity Developer Environment on Windows](): Solidity development on a Windows machine, how to setup the environment and further tips. [Canonical source]() - [Avoiding out of gas for Truffle tests](): How to avoid out-of-gas exception in automated Truffle tests. [Canonical source]() - [Design Pattern Solidity: Stages](): Solidity design pattern of organizing your contract in different stages to control the workflow. [Canonical source]() - [Web3 1.2.5: Revert reason strings](): A version-specific look at revert-reason handling in Web3.js 1.2.5, with context for reading and maintaining older Ethereum applications. [Canonical source]() - [Gaining back control of the internet](): How Ocelot is decentralizing cloud computing and their first service to use an anonymous cloud machine called BurnerMachine. [Canonical source]() - [Devcon 5 - Review](): A review of my Devcon 5 experience in Japan in 2019. [Canonical source]() - [Devcon 5 - Information, Events, Links, Telegram](): Archived information and community links for Devcon 5 in Japan in 2019. Dates, event links and chat references are historical. [Canonical source]() - [Design Pattern Solidity: Off-chain beats on-chain](): Solidity design pattern of preferring off-chain storage and computation over on-chain. [Canonical source]() - [Design Pattern Solidity: Initialize Contract after Deployment](): Solidity design pattern of initializing a contract after the deployment and not during deployment. [Canonical source]() - [Consensys Blockchain Jobs Report](): An archived look at the 2019 Consensys blockchain jobs report: salary, growth and job-board data from the original period, with historical context. [Canonical source]() - [Provable — Randomness Oracle](): How the Provable (previously Oraclize) random number generator works in detail. [Canonical source]() - [Solidity Design Patterns: Multiply before Dividing](): Understand integer rounding in Solidity and why multiplication order matters, while checking overflow and the limits of fixed-precision arithmetic. [Canonical source]() - [Devcon 5 Applications: The 2019 Reminder](): An archived 2019 reminder about Devcon 5 applications. The original deadline has passed; this post is retained as historical event information. [Canonical source]() - [Randomness and the Blockchain](): How to achieve secure randomness for Solidity smart contracts, what are the challenges in a decentralized system and how to solve them. [Canonical source]() ## Optional - [Sitemap](): Indexable pages, including resources beyond the articles listed above. - [RSS feed](): Article summaries and original publication dates. - [Atom feed](): Article summaries with authored publication and update dates.