معيار Diamond (الوكلاء متعددو الأوجه)
استكشف معيار Diamond (EIP-2535) لبناء عقود قابلة للترقية عالية الوحداتية وقابلة للتوسع، وتتضمن أوجهًا متعددة.
معيار Diamond (الوكلاء متعددو الأوجه) درس مجاني في Blockchain Smart Contracts with Solidity على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Blockchain Smart Contracts with Solidity، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Blockchain Smart Contracts with Solidity 4 دروس في المجموع.
بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.
Intro to Diamond Standard
Welcome to the final lesson on upgradeable contracts! We've explored UUPS, but what if your contract grows too big or needs extreme modularity?
The Diamond Standard (EIP-2535) is a powerful pattern that allows a single proxy contract to delegate calls to multiple implementation contracts, called facets.
Single Proxy Limitations
Traditional proxy patterns, like UUPS or Transparent proxies, typically delegate all calls to a single implementation contract.
While effective, this can lead to:
- Contract Size Limit: Ethereum contracts have a 24KB limit. A single, monolithic implementation can hit this quickly.
- Complexity: A single contract managing many features becomes hard to maintain and audit.
- Upgrade Costs: Upgrading means redeploying the entire large implementation contract, even if only a small part changed.
Facets: Modular Contracts
The Diamond Standard solves this by breaking down your contract's logic into smaller, independent pieces called facets.
Think of facets as:
- Individual smart contracts, each handling specific functionalities.
- Like 'plugins' or 'modules' for your main proxy.
- Each facet has its own set of functions.
The Diamond proxy then decides which facet to forward a call to.
How Diamond Proxies Work
At its core, a Diamond proxy works similarly to other proxies:
- A user calls a function on the Diamond proxy.
- The proxy looks at the function selector (the first 4 bytes of the call data).
- It then determines which facet contains that function.
- Finally, it delegates the call (using
delegatecall) to the correct facet.
The magic is that the proxy maintains a mapping of function selectors to facet addresses.
Diamond Storage: Shared State
A crucial aspect of the Diamond Standard is how state is managed. Even though logic is split across facets, they all operate on the same storage within the Diamond proxy contract.
This is achieved by:
- Defining a shared storage struct (e.g.,
AppStorage). - Each facet accesses this shared storage using a specific Solidity pattern (often via a library).
- This ensures consistency and allows facets to interact with the same data.
Managing Facets with `diamondCut`
The central function for managing your Diamond is diamondCut. This function allows you to:
- Add new facets (new functionality).
- Replace existing facets (upgrade or fix bugs).
- Remove facets (deprecate functionality).
diamondCut is typically only callable by the contract's owner, making it the secure upgrade mechanism for your multi-faceted contract.
A Simple Facet Example
Here's what a very basic Solidity facet might look like. Remember, facets are just regular contracts that implement specific logic.
Try compiling this simple example:
pragma solidity ^0.8.0;
contract MySimpleFacet {
// Facets interact with shared storage
// located in the Diamond proxy contract.
// They don't declare state variables directly
// in the way a standalone contract would.
function getFacetVersion() external pure returns (string memory) {
return "MySimpleFacet v1.0";
}
function greetUser(string memory _name) external pure returns (string memory) {
return string(abi.encodePacked("Hello, ", _name, " from MySimpleFacet!"));
}
}The Diamond Proxy Itself
The Diamond proxy contract itself is remarkably lean. Its primary responsibilities are:
- Storing the mapping of function selectors to facet addresses.
- Implementing the
diamondCutfunction for upgrades. - The fallback function, which handles delegating calls to the correct facet.
It acts as the central router for all incoming calls, directing them to the appropriate piece of logic.
Why Choose Diamond Standard?
The Diamond Standard offers significant advantages for complex DApps:
- Unlimited Contract Size: Easily bypass the 24KB limit by splitting logic into many small facets.
- Extreme Modularity: Develop and deploy features independently.
- Gas Efficiency: Only upgrade (deploy) the specific facets that change, not the entire contract.
- Clear Separation of Concerns: Improves code readability, testing, and security auditing.
- Incremental Development: Add new features over time without affecting existing ones.
Diamond Standard Check
The Diamond Standard (EIP-2535) provides a robust framework for building highly modular and upgradeable smart contracts. Which of the following statements accurately describe its key benefits or characteristics?
Recap: Multi-facet Proxies
In this lesson, we explored the Diamond Standard (EIP-2535), a powerful pattern for building highly modular and upgradeable smart contracts.
- We learned about facets, which are individual contracts containing specific logic.
- The Diamond proxy delegates calls to these multiple facets based on function selectors.
- All facets share the Diamond proxy's storage.
- The
diamondCutfunction is used to add, replace, or remove facets. - Key benefits include overcoming the 24KB contract size limit, extreme modularity, and efficient upgrades.
You're now equipped with knowledge of advanced upgradeability patterns!
الأسئلة الشائعة
هل درس «معيار Diamond (الوكلاء متعددو الأوجه)» مجاني؟
نعم — نص درس «معيار Diamond (الوكلاء متعددو الأوجه)» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Blockchain Smart Contracts with Solidity، انتقل إلى CoddyKit PRO. تتضمن دورة Blockchain Smart Contracts with Solidity 4 دروس في المجموع.
ماذا ستتعلم في «معيار Diamond (الوكلاء متعددو الأوجه)»؟
استكشف معيار Diamond (EIP-2535) لبناء عقود قابلة للترقية عالية الوحداتية وقابلة للتوسع، وتتضمن أوجهًا متعددة. تتمرن على Blockchain Smart Contracts with Solidity مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Blockchain Smart Contracts with Solidity؟
لا تُشترط خبرة سابقة. Blockchain Smart Contracts with Solidity على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «معيار Diamond (الوكلاء متعددو الأوجه)»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Blockchain Smart Contracts with Solidity هذا؟
نعم. كل درس في Blockchain Smart Contracts with Solidity يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- لماذا العقود القابلة للترقية؟
- تنفيذ نمط UUPS Proxy
- معيار Diamond (الوكلاء متعددو الأوجه)
- نمط Transparent Proxy وتخطيط التخزين