<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://compose.diamonds/blog</id>
    <title>Compose Blog</title>
    <updated>2025-12-31T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://compose.diamonds/blog"/>
    <subtitle>Compose Blog</subtitle>
    <icon>https://compose.diamonds/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[Introducing ERC-8109 Diamonds, a Standard for Simpler Diamond Contracts]]></title>
        <id>https://compose.diamonds/blog/introducing-erc-8109-diamonds</id>
        <link href="https://compose.diamonds/blog/introducing-erc-8109-diamonds"/>
        <updated>2025-12-31T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This post is adapted from an article originally published on my Substack, and is reposted here because ERC-8109 directly informs the architecture and goals of Compose.]]></summary>
        <content type="html"><![CDATA[<blockquote>
<p>This post is adapted from an article originally <a href="https://eip2535diamonds.substack.com/p/introducing-erc-8109-diamonds-simplified" target="_blank" rel="noopener noreferrer" class="">published on my Substack</a>, and is reposted here because ERC-8109 directly informs the architecture and goals of Compose.</p>
</blockquote>
<p>While working on Compose, I decided to revisit parts of <a href="https://eips.ethereum.org/EIPS/eip-2535" target="_blank" rel="noopener noreferrer" class="">ERC-2535 Diamonds</a> to see how the standard could be improved. Initially, I thought this would be limited to terminology changes, which led to my post <a href="https://ethereum-magicians.org/t/revising-erc-2535-diamonds-to-simplify-and-improve-the-terminology/26973" target="_blank" rel="noopener noreferrer" class="">Revising ERC-2535 Diamonds to Simplify and Improve the Terminology</a>.</p>
<p>However, that effort revealed deeper opportunities for improvement — enough that I ultimately decided to propose a new standard for diamond contracts.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-flawed-narrative">A Flawed Narrative<a href="https://compose.diamonds/blog/introducing-erc-8109-diamonds#a-flawed-narrative" class="hash-link" aria-label="Direct link to A Flawed Narrative" title="Direct link to A Flawed Narrative" translate="no">​</a></h2>
<p>The primary issue I wanted to address is complexity.</p>
<p>Too many articles and discussions imply that diamonds are inherently complex, or that they should only be used when building complicated systems. That narrative is backwards.</p>
<p>Diamonds should be used when you want to build <strong>large systems that remain simple</strong> — systems that are easy to understand, reason about, test, audit, and evolve.</p>
<p>Any powerful tool can be used well or poorly. Diamonds can reduce complexity, or they can increase it if misapplied.</p>
<p>Let’s do this right.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-diamonds-reduce-complexity">How Diamonds Reduce Complexity<a href="https://compose.diamonds/blog/introducing-erc-8109-diamonds#how-diamonds-reduce-complexity" class="hash-link" aria-label="Direct link to How Diamonds Reduce Complexity" title="Direct link to How Diamonds Reduce Complexity" translate="no">​</a></h2>
<p>Diamonds reduce complexity in two fundamental ways:</p>
<ol>
<li class="">
<p>A single contract address
A diamond exposes a large surface area of functionality through one address, simplifying deployment, integration, tooling, and user interfaces.</p>
</li>
<li class="">
<p>Decomposition into focused facets
Large contracts are broken into small, purpose-built facets. Each facet is independently testable and understandable. The diamond then wires these facets together in a systematic, efficient, and documented manner.</p>
</li>
</ol>
<p>The benefits of modularity are well understood in software engineering — and diamonds bring those benefits on-chain.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="erc-8109-diamonds-simplified">ERC-8109: Diamonds, Simplified<a href="https://compose.diamonds/blog/introducing-erc-8109-diamonds#erc-8109-diamonds-simplified" class="hash-link" aria-label="Direct link to ERC-8109: Diamonds, Simplified" title="Direct link to ERC-8109: Diamonds, Simplified" translate="no">​</a></h2>
<p>The new standard, <a href="https://eips.ethereum.org/EIPS/eip-8109" target="_blank" rel="noopener noreferrer" class="">ERC-8109: Diamonds, Simplified</a>, focuses on reducing complexity while preserving the full power of diamond contracts. It does so by:</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-simplifying-terminology">1. Simplifying terminology<a href="https://compose.diamonds/blog/introducing-erc-8109-diamonds#1-simplifying-terminology" class="hash-link" aria-label="Direct link to 1. Simplifying terminology" title="Direct link to 1. Simplifying terminology" translate="no">​</a></h3>
<ul>
<li class="">“loupe” → introspection</li>
<li class="">“cut” → upgrade</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-simplifying-introspection">2. Simplifying introspection<a href="https://compose.diamonds/blog/introducing-erc-8109-diamonds#2-simplifying-introspection" class="hash-link" aria-label="Direct link to 2. Simplifying introspection" title="Direct link to 2. Simplifying introspection" translate="no">​</a></h3>
<p>Only two introspection functions are required:</p>
<ul>
<li class="">facetAddress(selector) — returns the facet address for a given function selector</li>
<li class="">functionFacetPairs() — returns all (selector, facet) pairs</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-standardizing-simpler-events">3. Standardizing simpler events<a href="https://compose.diamonds/blog/introducing-erc-8109-diamonds#3-standardizing-simpler-events" class="hash-link" aria-label="Direct link to 3. Standardizing simpler events" title="Direct link to 3. Standardizing simpler events" translate="no">​</a></h3>
<p>Replaces the monolithic DiamondCut event with per-function events:</p>
<ul>
<li class="">DiamondFunctionAdded</li>
<li class="">DiamondFunctionReplaced</li>
<li class="">DiamondFunctionRemoved</li>
</ul>
<p>These events simplify the implementation of functions that add/replace/remove functions and are easier for block explorers, indexers, and other tooling to consume.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-defining-an-optional-upgrade-function">4. Defining an optional upgrade function<a href="https://compose.diamonds/blog/introducing-erc-8109-diamonds#4-defining-an-optional-upgrade-function" class="hash-link" aria-label="Direct link to 4. Defining an optional upgrade function" title="Direct link to 4. Defining an optional upgrade function" translate="no">​</a></h3>
<p>An explicitly specified, optional, upgrade function, including metadata support, to ensure consistent behavior across tooling.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-providing-an-optional-upgrade-path">5. Providing an optional upgrade path<a href="https://compose.diamonds/blog/introducing-erc-8109-diamonds#5-providing-an-optional-upgrade-path" class="hash-link" aria-label="Direct link to 5. Providing an optional upgrade path" title="Direct link to 5. Providing an optional upgrade path" translate="no">​</a></h3>
<p>Existing ERC-2535 diamonds can adopt the new standard.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="compose">Compose<a href="https://compose.diamonds/blog/introducing-erc-8109-diamonds#compose" class="hash-link" aria-label="Direct link to Compose" title="Direct link to Compose" translate="no">​</a></h2>
<p>Compose goes beyond standards and documentation. Compose is the practical application of the ideas behind ERC-8109.</p>
<p>Together with <a href="https://github.com/maxnorm" target="_blank" rel="noopener noreferrer" class="">maxnorm</a> and others, I’m building Compose to help developers use ERC-8109 Diamonds to construct modular smart-contract systems. Compose will provide:</p>
<ul>
<li class="">A library of reusable, on-chain facets.</li>
<li class="">Tooling for deploying, testing, and working with diamonds.</li>
</ul>
<p>Compose is intended to make the <em>right</em> way to build diamond systems the <em>easy</em> way.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="call-to-action">Call to Action<a href="https://compose.diamonds/blog/introducing-erc-8109-diamonds#call-to-action" class="hash-link" aria-label="Direct link to Call to Action" title="Direct link to Call to Action" translate="no">​</a></h2>
<p>Please read the new standard here:
<a href="https://eips.ethereum.org/EIPS/eip-8109" target="_blank" rel="noopener noreferrer" class="">ERC-8109: Diamonds, Simplified</a></p>
<p>Share your feedback here:
<a href="https://ethereum-magicians.org/t/erc-8109-diamonds-simplified/27119" target="_blank" rel="noopener noreferrer" class="">Feedback for ERC-8109: Diamonds, Simplified</a></p>
<p>If you care about building large smart contract systems that remain simple, understandable, and robust, I invite your collaboration.</p>]]></content>
        <author>
            <name>Nick Mudge</name>
        </author>
        <category label="Architecture" term="Architecture"/>
        <category label="Standards" term="Standards"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Diamond Architecture Metaphors]]></title>
        <id>https://compose.diamonds/blog/diamond-architecture-metaphors</id>
        <link href="https://compose.diamonds/blog/diamond-architecture-metaphors"/>
        <updated>2025-12-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The following sections use metaphors to clarify diamond architectural intent and design philosophy.]]></summary>
        <content type="html"><![CDATA[<blockquote>
<p>The following sections use metaphors to clarify diamond architectural intent and design philosophy.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="modularity">Modularity<a href="https://compose.diamonds/blog/diamond-architecture-metaphors#modularity" class="hash-link" aria-label="Direct link to Modularity" title="Direct link to Modularity" translate="no">​</a></h2>
<p>Where monolithic contracts blur responsibility, diamonds draw sharp edges.
Each facet isolates a single concern, reducing complexity through separation.
Bound by a single address and storage, the result is a structured, unified whole.</p>
<p>A diamond is not defined by excess, but by intention.
Every facet exists for a reason, cut precisely to serve the whole.
This standard favors deliberate structure over accidental complexity, ensuring that each function has a clear place and purpose.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="immutable-functions">Immutable Functions<a href="https://compose.diamonds/blog/diamond-architecture-metaphors#immutable-functions" class="hash-link" aria-label="Direct link to Immutable Functions" title="Direct link to Immutable Functions" translate="no">​</a></h2>
<p>To support flawless architecture, this standard discourages immutable functions. Like imperfections within a diamond, they cloud structural clarity and cannot be polished away.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="immutable-diamonds">Immutable Diamonds<a href="https://compose.diamonds/blog/diamond-architecture-metaphors#immutable-diamonds" class="hash-link" aria-label="Direct link to Immutable Diamonds" title="Direct link to Immutable Diamonds" translate="no">​</a></h2>
<p>An immutable diamond is cut once, with no margin for error.
Every facet must be placed with intention, for no edge can be reworked after the stone is set.
Its strength comes from certainty, not change.</p>
<p>Immutability improves clarity.
When no future changes are possible, the design is complete.
Nothing is deferred, and nothing is concealed behind upgrade intent.</p>
<p>An immutable diamond is still modular.
Its facets are cut separately, inspected individually, and set only once.
Immutability does not remove structure — it freezes a structure already proven.</p>
<p>True permanence is chosen, not imposed.
A diamond may be set forever, but only after it has been examined, and graded.
This standard preserves the freedom to refine before committing to final form.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="upgrades">Upgrades<a href="https://compose.diamonds/blog/diamond-architecture-metaphors#upgrades" class="hash-link" aria-label="Direct link to Upgrades" title="Direct link to Upgrades" translate="no">​</a></h2>
<p>Software, like a rough stone, requires shaping.
This standard grants the freedom to polish and refine, turning a raw idea into a flawless diamond through the iterative process of upgrades.</p>
<p>A diamond is not perfected in a single strike.
It is shaped through measured cuts, evaluated under light, and refined over time.
This standard embraces evolution, allowing systems to improve without disturbing what already shines.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="single-contract-address">Single Contract Address<a href="https://compose.diamonds/blog/diamond-architecture-metaphors#single-contract-address" class="hash-link" aria-label="Direct link to Single Contract Address" title="Direct link to Single Contract Address" translate="no">​</a></h2>
<p>Behind many facets stands a solitary, enduring interface. It presents a singular, cohesive identity to the world, regardless of the depth of logic beneath the surface.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="composability">Composability<a href="https://compose.diamonds/blog/diamond-architecture-metaphors#composability" class="hash-link" aria-label="Direct link to Composability" title="Direct link to Composability" translate="no">​</a></h2>
<p>Deployed facets may be reused, recombined, and set into new designs.
From a shared library of facets, countless diamonds may emerge — distinct in purpose, consistent in form.
Reuse strengthens the ecosystem, as proven facets bring their clarity wherever they are set.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="transparency">Transparency<a href="https://compose.diamonds/blog/diamond-architecture-metaphors#transparency" class="hash-link" aria-label="Direct link to Transparency" title="Direct link to Transparency" translate="no">​</a></h2>
<p>True value requires transparency. Unlike opaque proxies that hide their functions, this standard ensures the architecture remains crystal clear, granting users an unobstructed view of its composition.</p>
<p>A diamond is judged by how it handles light. This standard ensures the architecture remains pure, allowing the light of public scrutiny to pass through every facet without obstruction or distortion.</p>
<p>Light reveals flaws before it reveals brilliance.
By making structure explicit and changes observable, this standard invites scrutiny as a form of strength, not risk.
Trust emerges not from obscurity, but from clarity.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="durability">Durability<a href="https://compose.diamonds/blog/diamond-architecture-metaphors#durability" class="hash-link" aria-label="Direct link to Durability" title="Direct link to Durability" translate="no">​</a></h2>
<p>Trends fade, tooling changes, but structure endures.
A diamond that is well cut today will remain sound tomorrow.
This standard aims not for novelty, but for designs that withstand time, upgrades, and inspection.</p>]]></content>
        <author>
            <name>Nick Mudge</name>
        </author>
        <category label="Architecture" term="Architecture"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Hello Compose World!]]></title>
        <id>https://compose.diamonds/blog/2025-10-28-welcome</id>
        <link href="https://compose.diamonds/blog/2025-10-28-welcome"/>
        <updated>2025-10-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Welcome to the blog]]></summary>
        <content type="html"><![CDATA[<p>Welcome to the blog</p>
<p>We're excited to share our journey with you.</p>
<p>Compose will be a powerful smart contract library that helps developers create beautiful, maintainable onchain applications with ease.</p>
<p>Stay tuned for more updates, and feel free to reach out if you have questions or suggestions!</p>
<p>Huge thanks to all the current &amp; future contributors to Compose! 🩵</p>]]></content>
        <author>
            <name>MN</name>
        </author>
        <category label="Hello" term="Hello"/>
    </entry>
</feed>