Smart contract-bibliotheken
Laatst bewerkt: @tarcanhursit(opens in a new tab), 29 april 2024
U hoeft niet elk smart contract in uw project vanaf nul te schrijven. Er zijn veel smart contract-bibliotheken met open broncode beschikbaar die herbruikbare bouwstenen bevatten voor uw project, zodat u niet het wiel opnieuw hoeft uit te vinden.
Vereisten
Voordat u in smart contract-bibliotheken duikt, raden we aan om de structuur van een smart contract goed onder de knie te hebben. Ga naar anatomie van smart contracts als u dit nog niet hebt gedaan.
Wat zit er in een bibliotheek
Meestal vindt u twee soorten bouwstenen in smart contract-bibliotheken: herbruikbaar gedrag dat u kunt toevoegen aan uw contracten, en implementaties van verschillende standaarden.
Gedrag
Bij het schrijven van slimme contracten is de kans groot dat u steeds weer dezelfde patronen schrijft, zoals het toewijzen van een admin-adres om beschermde handelingen in een contract uit te voeren, of het toevoegen van een pauze-noodknop in het geval van een onverwacht probleem.
Smart contract-bibliotheken zorgen meestal voor herbruikbare implementaties van deze gedragingen als bibliotheken(opens in a new tab) of via overerving(opens in a new tab) in Solidity.
Als voorbeeld volgt hier een vereenvoudigde versie van het Ownable
contract(opens in a new tab) uit de OpenZeppelin-contractenbibliotheek(opens in a new tab), die een adres als eigenaar van een contract aanwijst en voor een modifier zorgt om de toegang tot een methode alleen aan die eigenaar te beperken.
1contract Ownable {2 address public owner;34 constructor() internal {5 owner = msg.sender;6 }78 modifier onlyOwner() {9 require(owner == msg.sender, "Ownable: caller is not the owner");10 _;11 }12}Toon alleKopiëren
Om een bouwsteen als deze in uw contract te gebruiken, moet u deze eerst importeren en vervolgens uitbouwen in uw eigen contracten. Hierdoor kunt u de modifier van het basiscontract Ownable
gebruiken om uw eigen functies te beveiligen.
1import ".../Ownable.sol"; // Path to the imported library23contract MyContract is Ownable {4 // The following function can only be called by the owner5 function secured() onlyOwner public {6 msg.sender.transfer(1 ether);7 }8}Kopiëren
Een ander populair voorbeeld is SafeMath(opens in a new tab) of DsMath(opens in a new tab). Dit zijn bibliotheken (in tegenstelling tot basiscontracten) die rekenkundige functies leveren met overflow-controles, die niet door de taal worden aangeboden. Het is een goede gewoonte om een van deze bibliotheken te gebruiken in plaats van rekenkundige bewerkingen om uw contract te beschermen tegen overflows, die desastreuze gevolgen kunnen hebben!
Standaarden
Om de componeerbaarheid en interoperabiliteit te vergemakkelijken, heeft de Ethereum-gemeenschap verschillende standaarden gedefinieerd in de vorm van ERC's. U kunt er meer over lezen in het gedeelte standaarden.
Bij het opnemen van een ERC als onderdeel van uw contracten, is het een goed idee om te zoeken naar standaardimplementaties in plaats van te proberen uw eigen implementatie uit te rollen. Veel smart contract-bibliotheken bevatten implementaties voor de populairste ERC's. De alomtegenwoordige ERC20 fungible tokenstandaard is bijvoorbeeld te vinden in HQ20(opens in a new tab), DappSys(opens in a new tab) en OpenZeppelin(opens in a new tab). Daarnaast bieden sommige ERC's ook canonieke implementaties als onderdeel van de ERC zelf.
Het is het vermelden waard dat sommige ERC's niet op zichzelf staan, maar aanvullingen zijn op andere ERC's. Zo voegt ERC2612(opens in a new tab) een extensie toe aan ERC20 om de bruikbaarheid te verbeteren.
Hoe voeg ik een bibliotheek toe
Raadpleeg altijd de documentatie van de bibliotheek die u wilt gebruiken voor specifieke instructies over hoe u deze in uw project kunt opnemen. Verschillende Solidity-contractbibliotheken zijn verpakt met npm
, dus u kunt gewoon npm install
uitvoeren. De meeste tools voor compiling-contracten kijken in uw node_modules
voor smart contract-bibliotheken, dus u kunt het volgende doen:
1// This will load the @openzeppelin/contracts library from your node_modules2import "@openzeppelin/contracts/token/ERC721/ERC721.sol";34contract MyNFT is ERC721 {5 constructor() ERC721("MyNFT", "MNFT") public { }6}Kopiëren
Ongeacht de methode die u gebruikt, houd bij het gebruiken van een bibliotheek altijd de taal-versie in de gaten. U kunt bijvoorbeeld geen bibliotheek voor Solidity 0.6 gebruiken als u uw contracten in Solidity 0.5 schrijft.
Wanneer te gebruiken
Het gebruik van een smart contract-bibliotheek voor uw project heeft verschillende voordelen. Eerst en vooral bespaart het u tijd door gebruiksklare bouwstenen te verschaffen die u in uw systeem kunt opnemen, in plaats van ze zelf te moeten programmeren.
Veiligheid is ook een groot pluspunt. Open source smart contract-bibliotheken worden ook vaak zeer kritisch bekeken. Aangezien veel projecten ervan afhankelijk zijn, is er een sterke stimulans vanuit de gemeenschap om deze voortdurend te evalueren. Het is veel gebruikelijker om fouten te vinden in applicatiecode dan in herbruikbare contractbibliotheken. Sommige bibliotheken ondergaan ook externe audits(opens in a new tab) voor extra beveiliging.
Maar het gebruik van smart contract-bibliotheken brengt het risico met zich mee dat er code in uw project wordt opgenomen waar u niet vertrouwd mee bent. Het is verleidelijk om een contract te importeren en het direct in uw project te zetten, maar zonder goed te begrijpen wat dit contract doet, kunt u onbedoeld een probleem in uw systeem introduceren door onverwacht gedrag. Zorg er altijd voor dat u de documentatie leest van de code die u importeert en controleer vervolgens de code zelf voordat u deze deel laat uitmaken van uw project!
Tot slot moet u bij het nemen van een beslissing over het al dan niet gebruiken van een bibliotheek rekening houden met het totale gebruik ervan. Een breed geaccepteerde versie heeft als voordeel dat er een grotere gemeenschap is en dat er meer mensen kunnen zien of er problemen zijn. Veiligheid moet voorop staan wanneer u iets bouwt met smart contracts!
Gerelateerde tools
OpenZeppelin Contracts - Meest populaire bibliotheek voor veilige ontwikkeling van smart contracts.
DappSys - Veilige, eenvoudige, flexibele bouwstenen voor smart contracts.
HQ20 - Een Solidity-project met contracten, bibliotheken en voorbeelden om u te helpen bij het bouwen van volledig uitgeruste gedistribueerde applicaties voor de echte wereld.
thirdweb Solidity SDK - Biedt de tools die nodig zijn om aangepaste smart contracts efficiënt te bouwen
Gerelateerde tutorials
- Security considerations for Ethereum developers _- Een tutorial over beveiligingsoverwegingen bij het bouwen van smart contracts, inclusief het gebruik van bibliotheken._a
- Het smart contract van de ERC-20-token begrijpen -Tutorial over de ERC20-standaard, afkomstig van verschillende bibliotheken.
Verder lezen
Weet je van een community resource die je heeft geholpen? Bewerk deze pagina en voeg het toe!