Diamond Standard (proxies met meerdere facets)
Verken de Diamond Standard (EIP-2535) voor het bouwen van zeer modulaire en schaalbare upgradebare contracten met meerdere facets.
Diamond Standard (proxies met meerdere facets) is een gratis Blockchain-smart contracts met Solidity-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Blockchain-smart contracts met Solidity. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Blockchain-smart contracts met Solidity bevat in totaal 4 lessen.
Introductie tot de Diamond Standard
Welkom bij de laatste les over upgradeable contracten! We hebben UUPS verkend, maar wat als je contract te groot wordt of extreme modulariteit nodig heeft?
De Diamond Standard (EIP-2535) is een krachtig patroon waarmee één proxycontract aanroepen kan delegeren aan meerdere implementatiecontracten, die facets worden genoemd.
Beperkingen van één proxy
Traditionele proxypatronen, zoals UUPS- of transparante proxies, delegeren doorgaans alle aanroepen aan één implementatiecontract.
Hoewel dit effectief is, kan het leiden tot:
- Limiet voor contractgrootte: Ethereum-contracten hebben een limiet van 24 KB. Eén monolithische implementatie kan deze limiet snel bereiken.
- Complexiteit: Eén contract dat veel functies beheert, wordt moeilijk te onderhouden en te controleren.
- Upgradekosten: Voor een upgrade moet het volledige grote implementatiecontract opnieuw worden gedeployed, zelfs als er maar een klein onderdeel is gewijzigd.
Facets: modulaire contracten
De Diamond Standard lost dit op door de logica van je contract op te splitsen in kleinere, onafhankelijke onderdelen die facets worden genoemd.
Je kunt facets zien als:
- Afzonderlijke slimme contracten die elk specifieke functionaliteit afhandelen.
- 'Plug-ins' of 'modules' voor je hoofdproxy.
- Facets met elk hun eigen verzameling functies.
De Diamond-proxy bepaalt vervolgens naar welke facet een aanroep wordt doorgestuurd.
Hoe Diamond-proxies werken
In de kern werkt een Diamond-proxy vergelijkbaar met andere proxies:
- Een gebruiker roept een functie aan op de Diamond-proxy.
- De proxy bekijkt de functieselector (de eerste 4 bytes van de aanroepgegevens).
- Vervolgens bepaalt de proxy welke facet die functie bevat.
- Tot slot delegeert de proxy de aanroep met
delegatecallnaar de juiste facet.
Het bijzondere is dat de proxy een toewijzing bijhoudt van functieselectors aan facetadressen.
Diamond-opslag: gedeelde status
Een cruciaal aspect van de Diamond Standard is de manier waarop de status wordt beheerd. Hoewel de logica over meerdere facets is verdeeld, werken ze allemaal met dezelfde opslag binnen het Diamond-proxycontract.
Dit gebeurt als volgt:
- Er wordt een gedeelde opslagstructuur gedefinieerd, bijvoorbeeld
AppStorage. - Elke facet gebruikt deze gedeelde opslag via een specifiek Solidity-patroon, vaak met behulp van een bibliotheek.
- Zo blijft de status consistent en kunnen facets met dezelfde gegevens werken.
Facets beheren met `diamondCut`
De centrale functie voor het beheren van je Diamond is diamondCut. Met deze functie kun je:
- Nieuwe facets toevoegen (nieuwe functionaliteit).
- Bestaande facets vervangen (upgraden of fouten oplossen).
- Facets verwijderen (functionaliteit uitfaseren).
diamondCut kan doorgaans alleen door de eigenaar van het contract worden aangeroepen. Daarmee is het de veilige upgradeprocedure voor je contract met meerdere facets.
Een eenvoudig facetvoorbeeld
Zo zou een zeer eenvoudige Solidity-facet eruit kunnen zien. Onthoud dat facets gewoon normale contracten zijn die specifieke logica implementeren.
Probeer dit eenvoudige voorbeeld te compileren:
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!"));
}
}De Diamond-proxy zelf
Het Diamond-proxycontract zelf is opvallend compact. De belangrijkste taken zijn:
- De toewijzing van functieselectors aan facetadressen opslaan.
- De functie
diamondCutvoor upgrades implementeren. - De fallbackfunctie uitvoeren, die aanroepen naar de juiste facet doorstuurt.
Het contract fungeert als centrale router voor alle binnenkomende aanroepen en stuurt deze naar het juiste onderdeel van de logica.
Waarom kiezen voor de Diamond Standard?
De Diamond Standard biedt aanzienlijke voordelen voor complexe DApps:
- Onbeperkte contractgrootte: Omzeil eenvoudig de limiet van 24 KB door de logica op te splitsen in veel kleine facets.
- Extreme modulariteit: Ontwikkel en deploy functies onafhankelijk van elkaar.
- Gas-efficiëntie: Upgrade en deploy alleen de facets die veranderen, niet het volledige contract.
- Duidelijke scheiding van verantwoordelijkheden: Dit verbetert de leesbaarheid van de code, het testen en de beveiligingscontrole.
- Stapsgewijze ontwikkeling: Voeg in de loop van de tijd nieuwe functies toe zonder bestaande functies te beïnvloeden.
Controle van de Diamond Standard
De Diamond Standard (EIP-2535) biedt een robuust raamwerk voor het bouwen van zeer modulaire en upgradeable slimme contracten. Welke van de volgende uitspraken beschrijven de belangrijkste voordelen of kenmerken correct?
Samenvatting: proxies met meerdere facets
In deze les hebben we de Diamond Standard (EIP-2535) verkend, een krachtig patroon voor het bouwen van zeer modulaire en upgradeable slimme contracten.
- We hebben geleerd over facets, afzonderlijke contracten die specifieke logica bevatten.
- De Diamond-proxy delegeert aanroepen op basis van functieselectors naar deze meerdere facets.
- Alle facets delen de opslag van de Diamond-proxy.
- De functie
diamondCutwordt gebruikt om facets toe te voegen, te vervangen of te verwijderen. - Belangrijke voordelen zijn het omzeilen van de limiet van 24 KB voor contractgrootte, extreme modulariteit en efficiënte upgrades.
Je beschikt nu over de kennis van geavanceerde patronen voor upgradebaarheid!
Leer Blockchain-smart contracts met Solidity met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 12
- Lessen
- 48
Veelgestelde vragen
Is de les “Diamond Standard (proxies met meerdere facets)” gratis?
Ja — de volledige tekst van “Diamond Standard (proxies met meerdere facets)” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Blockchain-smart contracts met Solidity wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Blockchain-smart contracts met Solidity bevat in totaal 4 lessen.
Wat leer ik in “Diamond Standard (proxies met meerdere facets)”?
Verken de Diamond Standard (EIP-2535) voor het bouwen van zeer modulaire en schaalbare upgradebare contracten met meerdere facets. Je oefent met Blockchain-smart contracts met Solidity door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Blockchain-smart contracts met Solidity te beginnen?
Ervaring vooraf is niet nodig. Blockchain-smart contracts met Solidity op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “Diamond Standard (proxies met meerdere facets)”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Blockchain-smart contracts met Solidity?
Ja. Elke les over Blockchain-smart contracts met Solidity bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Waarom upgradebare contracten?
- Implementatie van het UUPS-proxypatroon
- Diamond Standard (proxies met meerdere facets)
- Transparent Proxy-patroon en storage-layout