Awesome Diamonds
A curated list of awesome EIP2535 Diamonds resources, libraries, tools and more.
Please check the contribution guidelines for information on formatting and writing pull requests.
Official
- EIP2535 Diamonds - Standard.
- EIP2535 Diamonds discussion thread - Github issue created to discuss Diamonds.
- Twitter @eip2535 - Twitter handle.
- EIP2535 Blog - Technical articles about diamonds.
- EIP2535 Discord Server - Discord server for discussing EIP2535 Diamonds and related things.
- Diamond reference implementation comparisons - Compares Diamond reference implementations.
- diamond-1-hardhat - Simple Diamond reference implementation.
- diamond-2-hardhat - Gas-optimized Diamond reference implementation.
- diamond-3-hardhat - Simple loupe (introspecting functions) Diamond reference implementation.
Websites
Articles
Diamonds
- Introduction to EIP-2535 Diamonds - Explains the problem diamonds were initially developed to solve, how they work, how to organize them, and how to deploy and upgrade them.
- Compliance with EIP-2535 Diamonds Standard - How implementations can comply with the standard.
- EIP-2535: A Technical Overview of the Diamond Smart Contract Standard - Overview and tutorial.
- EIP-2535: A standard for organizing and upgrading a modular smart contract system. - Describes what diamonds are, how they work and how to use them.
- Diamond Loupe Functions - Explains the need and use of loupe functions (diamond introspecting functions).
- How to Share Functions Between Facets of a Diamond - Shows ways to share functionality between facets of a diamond.
- A Beginner’s Guide to The Diamond Standard Proxy - Explains EIP-2535 Diamonds.
- Idiots Guide to Using an EIP-2535 Diamond Proxy
- EIP 2535: Diamond standard explained — Part 1: Why diamonds?
- EIP 2535: Diamond standard explained – Part 2: What are diamonds and how they work
- EIP 2535: Diamond standard explained – Part 3: Understanding storage patterns in diamonds
- The Diamond Standard (EIP-2535) Explained: Part 1
- The Diamond Standard (EIP-2535) Explained: Part 2
- A better way to initialize upgradeable contracts - Shows how to execute initialization functions during diamond upgrades.
- An Introduction to ERC2535 Diamonds Development And Why Solidity Devs Should Adopt It
- Transforming web3 through a Diamond Management System
- Achieving Universal and Reusable Smart Contracts via ERC2535 Diamond Proxy Standard
- A guide to building and deploying upgradeable contracts on CELO with Diamond standard
- How to use TypeScript with EIP-2535: Diamonds
Diamond Storage
- How Diamond Storage Works - Explains diamond storage and shows an example.
- New Storage Layout For Proxy Contracts and Diamonds - First written article that describes diamond storage.
- AppStorage Pattern for State Variables in Solidity - Describes and shows AppStorage.
- Rules for Upgrading Diamond Storage - Best documentation about upgrading Diamond Storage.
- Migrating the EIP-2535 Diamond Storage layout - Shows Diamond Storage and how to migrate data to new Diamond Storage in upgrades.
Diamond Upgrades
- Diamond Upgrades - How to perform diamond upgrades.
- Example of Adding New State Variables in Diamond Upgrade - Shows how to add new state variables to a diamond.
- A better way to initialize upgradeable contracts - Shows how to execute initialization functions during diamond upgrades.
- Upgradeable Smart Contracts and Initialization - Compares methods of initializing upgrades.
Diamonds in Projects
🌱 Beanstalk🤝 EIP-2535💎 - Lays out benefits of EIP-2535 with examples from their project.- Smart Contracts as Apps - EIP-2535 Diamonds and the feasibility of a DAO Operating System
- Dark Forest & the Diamond Standard - Dark Forest project moves to and dicusses diamonds.
- The Diamond Standard: A new paradigm for upgradeability - DerivaDEX on diamonds.
- We like the (EIP-2535) Diamonds - Premia Finance talks about their use of diamonds.
- Why Gotchivault is upgrading to the Diamond standard - How to upgrade an existing proxy contract to EIP2535 Diamonds.
- Handling multiple tokens, with a modern solidity architecture via Diamonds & ERC1155
- Smart contract packages — upgradeability for normal people
Diamond Project Documentation
Videos
- Ethereum Diamonds - EIP-2535 Multi Facet Proxy
- How to Organize a Diamond with Facets
- Create Diamond Contracts In Your Browser Using Remix And Louper
- Share Functions And Storage With Diamond Contracts | Louper/Remix
Libraries
- SolidState Solidity - Upgradeable-first Solidity smart contract development library that supports diamonds.
- ERC20 Facet - A facet that adds ERC-20 token functionality to the host contract.
- ERC721A-Upgradeable - Gas efficient ERC721 implementation.
- ERC1155-DiamondStorage - ERC1155 Implementation
- OpenZeppelin Diamonds - OpenZeppelin contracts transpiled to use Diamonds & Facets
Tools
User Interfaces
- Louper - The Ethereum Diamond Inspector - User interface for diamonds.
- DiamondScan - User inteface for diamonds.
- Governance Diamonds - User interface for exploring diamonds.
- diamond-etherscan - Make your EIP-2535 Diamond etherscan compatible.
- Diamantair - Deploying new diamonds from a template.
Hardhat
- diamond-2-hardhat-v6 - diamond-2-hardhat using TypeScript and Hardhat with Ethers v6.
- diamond-hardhat - Extension that adds deeper Hardhat integrations for faster/more maintainable ERC2535 Diamond contract development.
- hardhat-diamond-abi - Hardhat plugin to combine multiple ABIs into a Diamond ABI artifact.
- hardhat-deploy - Hardhat plugin that supports deploying, upgrading and managing diamonds.
- Zem - Hardhat deployment management system that supports deploying, upgrading and managing diamonds.
Foundry
- diamond-foundry - A modern framework for creating EIP2535 Diamonds.
- Foundry-Hardhat-Diamonds - Mimimal template for Diamonds.
- foundry-diamond-deploy - Minimal example of a Diamond deployment script using foundry.
- Diamond-Foundry - Foundry version of Diamond Pattern (EIP-2535) reference implementation.
Package Management & Facet Registries
- 0xpm - Diamond-based smart contract package manager.
- Ethereum Package Manager - GUI to deploy and upgrade Diamond proxies and facets. Granular facet control with ability to toggle facet functions on/off.
Python
- Inspector Facet - Inspection utility for EIP2535 Diamond proxies. Written in Python.
Command line tools
- diamond-diff - Tool that helps retrieve the necessary
diamondCut
by checking against a Diamond model.
Transpilers
- OpenZeppelin Transpiler for Diamonds - Updated OpenZeppelin Transpiler supporting Diamond patter with significant speed improvements
Security Audits
Note that some changes have been made to the Diamond reference implementations since the following audits have been done.
Omniscia
-
Smart Contract Audit - Omniscia published a smart contract audit of the diamond implementing AllianceBlock’s token bridge, which uses the diamond-3 implementation.
-
Smart Contract Audit - Omniscia published a smart contract audit of the Seen.Haus Marketplace Diamond, which uses the diamond-3 implementation, modified for role-based access rather than single-owner.
Certik
- Smart Contract Audit - Certik published a smart contract audit of Aavegotchi’s core diamond which use the diamond-3 implementation.
- Smart Contract Audit - Certik published a smart contract audit of DOTC’s diamond.
Quantstamp
-
Smart Contract Audit - Quantstamp published a smart contract audit of Aavegotchi’s staking diamond which used the diamond-2 implementation.
-
Smart Contract Audit - Quantstamp published a smart contract audit of BarnBridge’s Barn diamond, which uses BarnBridge’s own implementation of EIP-2535 Diamonds based on diamond-1.
-
Smart Contract Audit - Quantstamp published a smart contract audit of DerivaDEX’s governance diamond, which uses the diamond-3 implementation.
MixBytes
- Smart Contract Audit - MixBytes published a smart contract audit of PieDAO’s ExperiPie diamond, which uses the diamond-2 implementation.
Haechi Audit
- Smart Contract Audit - Haechi Audit published a smart contract audit of BarnBridge’s Barn diamond, which uses BarnBridge’s own implementation of EIP-2535 Diamonds based on diamond-1.
Projects using Diamonds
- DerivaDEX
- BarnBridge
- Aavegotchi
- ERC721A-Upgradeable
- PieDAO
- Boson Protocol
- hardhat-deploy
- Nifty Cannon
- AllianceBlock
- Louper
- solidstate-solidity
- Nayms
- Diamond Setter
- Sherlock
- Premia Finance
- Nocturnal Finance
- scaffold-eth
- diamond-starter-kit
- scaffold-eth-diamond-standard
- Sanshu Inu
- Gelato Network
- Teller Finance
- seen.haus
- thx.network
- Token Gallery
- Beanstalk Protocol
- kanaloa.network
- PoolSharks
- Bitpixel
- neodymium-contracts
- INU Token
- Sigmadex
- TuffToken
- hardhat-diamond-abi
- EnterDAO
- Gemcutter
- GNUS.AI
- Dark Forest
- Moonstream DAO
- Chain of Empires
- LI.FI
- cryptopoopz.com
- Copium Wars
- Typenauts
- connext.network
- The Saudis
- Spring Game
- oncyber
- Avathereum
- Cartesi
- Energy Web
- Shattered Eon
- Zem
- SolarProtocol
- VOID.MONEY
- Simple DeFi
- CroSwap
- Lightm
- PartyFinance
- 1o1.art
- withmantra.com
- Nobility Token
- meTokens
- Fyde Treasury Protocol
- VaporFi
- MetaMask Grants DAO
- zkSync
- Crypto Unicorns
- Forward Protocol
- Ubiquity Dollar
- Geo Web
- Nexera ID
- CronosNode NFTs
- Tombala Games
- Perp88
- Helix2
- Pendle
- Worker Node Toolkit
- NiftyKit
- Babylon
- Autify Network