ERC20 begrijpen

Dit artikel gaat ervan uit dat de lezer op zijn minst al bekend is met de volgende concepten: de Ethereum blockchain, dapps, ether, smart contracts & ICO’s.

Om snel weer terug te keren, is de Ethereum-blockchain een gedistribueerd, open-source op blockchain gebaseerd computerplatform. Dit computerplatform, het Ethereum-netwerk, host gedecentraliseerde applicaties (dapps) die worden uitgevoerd met stukjes codes die smart contracts worden genoemd; alle transacties op het Ethereum-netwerk, evenals de computerkosten voor het uitvoeren van slimme contracten, worden betaald in de cryptocurrency-ether van Ethereum.

Sommige, maar niet alle, van deze dapps (gedecentraliseerde apps) vereisen een extra in-dapp-valuta – deze dapps introduceren hun nieuwe valuta, token genaamd, en zamelen geld in via een initial coin offer (ICO).

Het Ethereum blockchain-platform is zo gebouwd dat het allerlei soorten dapps aanmoedigt – inclusief degenen die moeten worden gemaakt, onderhouden & overdracht van digitale activa. Deze dapp-specifieke Ethereum-tokens kunnen worden geïmplementeerd om een ​​netwerk van dapps te creëren met zinvolle use-cases zoals factoring van facturen, browserbrede betalingen, & een cryptocurrency-debetkaart.

Alle eerder genoemde ideeën zijn momenteel live op Ethereum gebaseerde dapp-tokens die een zeer gebruikelijke token-programmeerstandaard volgen; in feite volgt 99% van alle geïmplementeerde Ethereum-tokens deze standaard, de ERC20-standaard.

De ERC20-tokenstandaard, die staat voor Ethereum Requests for Comment, is een standaardset van programmeerregels die naar verwachting alle op Ethereum gebaseerde token zullen volgen. Ontwikkelaars waren het eens over deze zes functies & twee gebeurtenissen als het minimaal haalbare token om verwacht gedrag te normaliseren tijdens communicatie via het Ethereum-netwerk – door dit protocol vast te stellen, kunnen Ethereum-ontwikkelaars gemakkelijk met externe slimme contracten werken.

Introductie van Solidity

Terwijl de meest populaire Ethereum cliënt is momenteel geschreven in GO van Google, de keuzes voor een ontwikkelaarvriendelijke slimme contracttaal zijn er in overvloed. Ontwikkelaars kunnen kiezen uit talen zoals Vyper, Bamboe, Slang & Stevigheid.

Voor de rest van dit artikel lichten we toe & walkthrough Solidity-syntaxis.

Solidity is een contractgeoriënteerde programmeertaal op hoog niveau die wordt gebruikt voor het implementeren van slimme contracten. De Solidity-syntaxis is voor degenen die bekend zijn met programmeren een mengelmoes van Javascript, Python, & C concepten; het is statisch getypeerd, ondersteunt overerving & heeft een groot aantal bibliotheken vanaf het begin. Ga voor meer informatie over Solidity naar de documentatie die hier te vinden is: https://solidity.readthedocs.io/en/develop/#

ERC20 Interface-doorloop

We gaan wat dieper graven in wat precies & hoe deze standaard wordt geïmplementeerd in het Ethereum-netwerk – zoals eerder vermeld, behandelen we dit specifiek in de Solidity-syntaxis.

In Ethereum-land begint het allemaal & eindigt met contracten. Solidity-documentatie definieert contracten als “een verzameling code (zijn functies​ & data (zijn staat) die zich op een specifiek adres op de Ethereum-blockchain bevinden. ” Ethereum-contracten ondersteunen overerving – dus een contract kan een voorbeeld zijn van een ander contract.

Volgens deze logica kan een abstract contract, een contract dat strikt wordt gebruikt voor overerving, ook worden gebruikt als failsafe door te definiëren wat een nieuw contract moet bevatten om te compileren. Deze abstracte contracten worden ook wel interface contracten.

Dit betekent dat elk tokencontract dat een ERC20-instantie is, niet compileert zonder het volgende; dit betekent daarentegen dat Ethereum-ontwikkelaars nu weten welke functies & gedragingen die ze kunnen verwachten bij interactie met een ERC20-token.

De ERC20-standaard is een interfacecontract dat in totaal zes uitvoerbare functies bevat & twee logboekgebeurtenissen.

Toelage

Met de Allowance-functie kunnen twee adressen een herhaalde unidirectionele overdracht creëren; een portemonnee-adres tokenOwner & een seconde portemonnee spender worden gedefinieerd als de twee portefeuilles die zullen deelnemen aan herhaalde transacties. In het bijzonder zal de portemonnee-uitgever zich terugtrekken sommige bedrag van het portemonneetoken Eigenaar op sommige interval – beide zijn variabelen die later worden bepaald.

Goedkeuren

Voor de Approve-functie verwijzen we naar onze Allowance-functie: de functie staat toe dat twee adressen herhaaldelijk unidirectioneel worden ingetrokken. De goedkeuringsfunctie, toepasselijk genoemd, is een eenvoudige standaardfunctie die de eigenaar van de portemonnee oproept om een ​​transactie te ‘goedkeuren’ die namens hem / haar wordt uitgevoerd in de context van een toelage. Deze functie vereist twee ingangen, het adres van de spender & het aantal tokens dat wordt verzonden. De uitvoer retourneert een openbare boolean die aangeeft of goedkeuring is verleend of afgewezen.

BalanceOf

BalanceOf is een intuïtieve functie die een enkele adresinvoerparameter accepteert (adrestokenOwner) & geeft een enkele openbare constante terug (uint-saldo). De geretourneerde uint-constante, saldo, vertegenwoordigt het aantal tokens dat het opgevraagde adres bevat – onthoud dat transacties op een blockchain meestal openbaar zijn, Ethereum is niet anders.

TotalSupply

De totalSupply-functie, zoals je waarschijnlijk uit de naam kunt raden, is een anonieme constructorfunctie die slechts één keer wordt uitgevoerd op het allereerste moment van implementatie op het live Ethereum-netwerk. De functie retourneert een openbare constante totalSupply unassigned integer (uint) die fungeert als het totale aanbod van dat tokens voor de rest van de levensduur van het contract. Deze totalSupply-constante wordt meestal op twee manieren gedefinieerd: hardcodering van een variabele of financiering vanuit een oorspronkelijke portemonnee.

Overdracht

De overdrachtsfunctie is de kernfunctie van elk ERC20-token; het definieert & implementeert direct wallet-owner-to-peer token overbrengen. Aangezien eigenaren van een portemonnee deze oproep doen, zijn slechts twee parameters vereist: het adres van de ontvanger & het aantal tokens dat wordt verzonden. Deze twee parameters worden meestal geïnitialiseerd als (adres naar) & (uint-tokens). De Transfer-retourwaarde is gewoon een booleaanse waarde die bevestigt of de ontvanger (het “aan” -adres) de verzonden tokens heeft ontvangen.

TransferFrom

De TransferFrom-functie zorgt voor een slim contract om een ​​overdracht uit te voeren met de doorgegeven parameters namens de portemonnee-eigenaar. Maak zorgvuldig het onderscheid met de vorige Transfer functie. De vorige functie stond het portemonnee eigenaar om tokens rechtstreeks naar een adres te sturen; dit TransferFrom zorgt voor een slim contract om tokens te verzenden namens de eigenaren van de portemonnee, zoals het plaatsen van een bestelling op een beurs, het tijdig vrijgeven van geld of het betalen van onze winsten in een geluksspel.

De TransferFrom functie heeft drie invoerparameters: het adres van de portemonnee-eigenaar, het adres van de ontvangerportemonnee, & het aantal verzonden tokens. Ze worden vaak geïnitialiseerd in de volgende syntaxis: (adres van, adres naar, uint-tokens). De functie-uitvoer is exact hetzelfde als de overdrachtsuitvoer: een enkele openbare boolean die het succes of het mislukken van de transactie beschrijft.

Overzicht

De zes hierboven beschreven functies zijn de zes kernfuncties die worden aangetroffen in 99% van alle momenteel live ERC20-tokens. Op een paar uitzonderingen na (kijkend naar jou Golem), kunnen Ethereum-ontwikkelaars zich veilig voelen wetende dat ze deze kernfuncties volledig kunnen verwachten tijdens het ontwikkelen van interne contracten of bij interactie met externe openbare aanbestedingen in het wild.