Du er alle kjent med ERC20-tokens, da du sannsynligvis eier et par, distribuert av et slags token-salg. Men visste du at det finnes mange flere standarder i tillegg til ERC20? Ethereum har en lang historie med utviklede standarder.
For å gi deg en bedre ide om hva ERC betyr, står det for “Ethereum Request for Comment”. Dette er et forslag sendt til diskusjon og forslag til den faktiske standarden. Nummeret (som 20) refererer til et nummer på kodedelingsplattformen Github. La oss først se på ERC20-standarden.
ERC20 standard
Hva er egentlig ERC20-standarden??
Ankomsten av ERC20-tokens revolusjonerte kryptovalutamarkedet og åpnet døren til overflod av ICO-kryptokurrency prosjekter verden var vitne til i løpet av 2017. Introdusert i 2015, skisserer ERC20-koden en spesifikk liste over regler som et gitt Ethereum-basert token må distribuere, forenkler prosessen med å programmere funksjonene til tokens på Ethereums blockchain. I utgangspunktet er ERC20-tokens spesielle former for smarte kontrakter som bruker Ethereums blockchain.
De mest fremtredende eksemplene på ERC20-tokens inkluderer Bancor, EOS, Tronix, BNB, VeChain og Bankex.
Før innovasjonen av ERC20-standarden for Ethereum-tokens, måtte koderne lage spesifikke implementeringsstandarder for å utvikle et token og lansere det på Ethereums nettverk. Likevel har ERC20-token-koden forenklet prosessen med å lage tokens, takket være en strømlinjeformet protokoll og smarte kontraktstandarder. ERC20-koden lindret kompleksiteten forbundet med implementering av tokens smarte kontrakter, noe som betydelig reduserte muligheten for å bryte tokens kontrakter.
Per april 2018 er det 66 468 ERC20 token-kontrakter, takket være ensartetheten av token-kode levert av ERC20-standarden, noe som gjorde det enkelt for kryptovaluta-børser å liste opp forskjellige tokens på handelsplattformene sine. Som sådan har ERC20-standarden hjulpet kryptosamfunnet med å overvinne likviditetsproblemer som kunne ha assosiert et så enormt antall Ethereum-baserte tokens..
ERC20 token funksjoner:
ERC20-koden skisserer seks spesifikke funksjoner for tokens, som er
1 – Få samlet tilgang på tokens via "totalforsyning" funksjon
2- Henter tokensaldoen til en annen konto tilknyttet "_Eieren" adresse via " balanceOf (address _owner) konstant retur (uint256 balance)" funksjon.
3- Sende en bestemt mengde tokens "_verdi" til en gitt adresse via " overføring (adresse _to, uint256 _value) returnerer (bool suksess)" funksjon.
4- Sende en bestemt mengde tokens "_verdi" fra en token (kontrakt) adresse til en annen token (kontrakt) adresse via "transferFrom (adresse _fra, adresse _til, uint256 _verdi) returnerer (bool suksess)" funksjon.
5- Gjør det mulig for en bestemt konto å trekke tokens fra kontoen gjentatte ganger, mens du forhåndsdefinerer den øvre grensen for mengden tokens som skal trekkes ut med "_verdi" parameter. Dette kan oppnås via "godkjenne (adresse _spender, uint256 _verdi) returnerer (bool suksess)". Den øvre grensen for uttak, dvs. "_verdi" parameter, kan overskrives når funksjonen tilbakekalles.
6- Returnerer gjenværende mengde tokens, innenfor det forhåndsinnstilte beløpet definert av den øvre grensen som tillates brukt av "_utgifter" å trekke seg fra kontoen til "_Eieren". Dette kan utføres via "godtgjørelse (adresse * _eier *, adresse * _spender *) konstant retur (uint256 gjenstår)" funksjon.
Disse seks funksjonene som er definert av ERC20-koden, representerer hjørnesteinsfunksjonalitetsproblemer, som inkluderer hvordan disse tokens vil bli overført mellom forskjellige kontoer, og hvordan brukere kan hente data tilknyttet et gitt ERC20-token. Denne gruppen av funksjoner er foreskrevet for å sikre at Ethereum-baserte tokens vil fungere på samme måte som i noen del av Ethereums plattform. Som sådan vil alle krypto-lommebøker som er i samsvar med etermynten også støtte tokens basert på ERC20-standarden.
Kritisk feil:
ERC20 er den første tokenstandarden til Ethereum. Som ofte er tilfellet med ny kode, inneholder den noen feil eller logiske feil. ERC20 forutsetter to måter å utføre en token-transaksjon på. Først og fremst lar overføringsfunksjonen deg sende tokens til noens adresse. Hvis du vil sette inn tokens til en smart kontrakt, bør du bruke kombinasjonen ‘godkjenne + overføre fra’. Du bør gi denne kontrakten fullmakt til å trekke ut tokens via godkjenningsfunksjonen. Deretter må du ringe en funksjon av en kontrakt som vil håndtere innskuddet ditt og trekke ut tokens via transferFrom-funksjonen.
Hva om du ved et uhell deponerer tokens til en kontrakt med overføringsfunksjonen? Transaksjonen vil lykkes, men denne transaksjonen blir ikke anerkjent av mottakerkontrakten. Hvis du for eksempel sender tokens til en desentralisert utvekslingskontrakt, vil utvekslingskontrakten motta tokens, men den vil ikke kreditere disse tokens til vekslingstokenbalansen. Dessuten, hvis den desentraliserte byttekontrakten ikke implementerer en nødutviklingsfunksjon, er det uansett umulig å få tilbake tokens, noe som resulterer i et permanent tap av tokens. På grunn av denne feilen har Ethereum-økosystemet allerede tapt millioner av dollar.
Hvorfor bruker vi fortsatt ERC20-standarden?
Reddit-bruker u / Dexaran, skaper av ERC223-standarden, er en av de første utviklerne som varslet samfunnet om den nevnte feilen. Vi spurte ham hvorfor ERC20 fortsatt er så mye brukt, selv når vi vet om denne kritiske feilen. Han ga følgende grunner:
- På grunn av kriminell uansvarlighet fra tokenutviklere for deres gjerninger.
- Fordi Ethereum Foundation fremdeles markedsfører ERC20-tokenstandarden, selv når det er kjent at den inneholder feil. Den samme situasjonen som den var med TheDAO tidligere. De trenger å si "Stopp dette nå" men de vil ikke.
- Fordi hovedårsaken til tokenutvikling er fondfangst, snarere enn produktoppretting.
- Fordi bruk av en annen standard vil føre til høyere nettverkseffekter. Dette er ikke det vi virkelig trenger, ettersom Ethereum-nettverket allerede har problemer med skalerbarhet.
ERC223 standard
De ERC223 standard ble foreslått av u / Dexaran som hjalp til med å lage denne artikkelen. ERC223 er en tokenstandard som gjør at tokenoverføringer kan oppføre seg nøyaktig som eter-transaksjoner. ERC223 bruker håndtering av hendelser (anser en transaksjon som en hendelse) for å forhindre at tokens går tapt i ubehandlede transaksjoner. Denne forbedrede standarden løser den kritiske ERC20-feilen ved å få overføringsfunksjonen til å kaste feil på ugyldige overføringer og kansellere transaksjonen, slik at det ikke går tapt penger. Kort sagt fokuserer ERC223 på sikkerhet.
Tillegg og problemer
ERC223 legger til en ekstra dataparameter i overføringsfunksjonen, for å tillate mer komplekse operasjoner enn bare en tokenoverføring.
Dexarans største bekymring er at for mange mennesker kan miste tokens ved å sende dem til kontrakter ved hjelp av overføringsfunksjonen, ikke godkjenne og overføre fra metodene som tidligere diskutert. Hans løsning er å endre overføringsmetoden for å sjekke om mottaksadressen er en kontrakt (dvs. inneholder data) eller ikke. Hvis det er en kontrakt, antar den at det er en tokenFallback-funksjon for å ringe den tilbake. Den største svakheten er at hvis tokenFallback ikke eksisterer, vil mottakerkontrakts reservefunksjon kalles og de sendte tokens fortsatt kan gå tapt.
ERC777 standard
ERC777 er en ny soppbar tokenstandard som er avhengig av ERC820 (Contract pseudo-introspection registry) og prøver å løse ERC20s problemer, for eksempel mangel på transaksjonshåndteringsmekanismer som førte til tap av millioner av dollar fra Ethereum-økosystemet. Kort sagt fokuserer ERC777 på adopsjon ved å tilby en bredt spekter av transaksjonshåndteringsmekanismer.
fordeler
Den største fordelen med ERC777 er at den bruker en ny metode for å gjenkjenne kontraktsgrensesnittet. Denne standarden forutsetter at det er et sentralt register over kontrakter på Ethereums nettverk (dette er definert i ERC820). Alle kan påkalle dette registeret for å vite om en bestemt adresse (det spiller ingen rolle om denne adressen er en kontrakt eller ikke) støtter et bestemt sett med funksjoner, dvs. `grensesnitt`.
Et av hovedproblemene til Ethereum er manglende evne til å vite hvilke funksjoner kontrakten implementerer. ERC820 er ment å løse dette. ERC777 benytter seg av denne tilnærmingen, noe som absolutt er en god idé.
På den annen side kan du opprette et token som vil implementere ERC20s standardfunksjoner sammen med de nye ERC777-funksjonene uten overstyringer (og eventuelt arve ERC20s kritiske feil). Dette kan garantere en god nettverkseffekt for denne nye tokenstandarden og raskere adopsjon. Som praksis viser, er hovedmålet for tokenutviklere å skaffe penger som forutsetter at de trenger å skyve tokens til børser. Det er lettere for utvekslinger å støtte et token som implementerer eldre ERC20-funksjoner (det spiller ingen rolle om disse funksjonene inneholder feil eller ikke) uten undersøkelser om nyere funksjoner i nye tokenstandarder. Jo lettere det er for utvekslinger å støtte tokens på en ny standard, jo flere utviklere vil bruke den. Dette øker adopsjonen av ERC777, mens ERC223 mangler denne egenskapen.
Hva er annerledes??
Denne tokenstandarden definerer et helt nytt sett med funksjoner, dvs. send-funksjoner i stedet for overføringsfunksjoner. `autoriseOperator` i stedet for` godkjenne ‘. `tokensReceived` handlerfunksjon i stedet for` tokenFallback` handlerfunksjon.
En slik tilnærming kan garantere at funksjonene til denne standarden ikke vil krysse og overstyre funksjoner fra noen annen tokenstandard, og det er dermed mulig å lage et token som vil være kompatibel med ERC777 og ERC820-standardene samtidig.
Endelig standardiserer ERC777 Mynte og forbrenning funksjonalitet av tokens.
Poeng med feil og sikkerhetsproblemer
ERC777 implementerer funksjonen `autoriseOperator` som lar noen administrere tokens på dine vegne. Dexaran forklarte oss at han mener denne metoden er utfaset og ikke bør brukes. I tillegg skader autorisering av noen til å administrere tokens på dine vegne nettverkets båndbredde og krever mer gass. `authoriseOperator` representerer allerede en transaksjon, og det kreves en annen transaksjon for å utføre "autorisert uttak". Så det kreves to transaksjoner for å utføre en overføring som kan gjøres med bare en transaksjon.
Deretter inneholder ERC777-standarden et valgfritt flagg for å forhindre fastlåste tokens ved å utføre noen kontroller om ITokenRecipient-grensesnittet, og for å sjekke om adressen er godkjent. Siden denne standarden er fokusert på sikkerheten til et nettverk som håndterer tokens som er verdt millioner av dollar, er det ikke en god ting å gjøre disse sjekkene valgfrie.
Andre standarder
Det er mange andre standarder som ERC827 som kombinerer noen fordeler med ERC223 med eldre ERC20-funksjoner. De ERC664 standard fokuserer på modulariteten til tokenstandarden. Denne standarden gjør det mulig å oppgradere tokenkontrakter, men den har arvet den kritiske ERC20-feilen. Andre standarder inkluderer ERC721, ERC677 og ERC820, men de er mindre kjent.
Kompatibilitet mellom standarder
Vi spurte Dexaran hvilke standarder som er bakoverkompatible. Han fortalte oss at vi først skulle forstå hva ‘bakoverkompatibilitet’ står for: “Bakoverkompatibilitet er en egenskap for et system, produkt eller teknologi som muliggjør interoperabilitet med et eldre eldre system, eller med innganger designet for et slikt system.”
ERC20 & ERC223: ERC223-tokens er kompatible med ERC20. Alt som er designet for å fungere ordentlig med ERC20 (som lommebøker), kan også fungere med ERC223. Det eneste unntaket her er kontrakter som er avhengige av godkjenning + overføring fra innskuddsmønstre for token. Det er imidlertid mulig å implementere godkjenning + overføring fra funksjoner med ERC223-tokens, selv om de ikke er inkludert i standarden akkurat nå. Når det gjelder lommebøker og tjenester fra tredjeparter som ikke er smarte kontrakter, støtter de ERC223 automatisk fordi inngangsanropsdataene til ERC20-token er gyldige for ERC223.
ERC20 & ERC777: Du finner følgende uttalelse i delen “Bakoverkompatibilitet” i ERC777-forslaget: “Denne EIP introduserer ikke bakoverkompatibiliteter og er kompatibel med den eldre ERC-20-tokenstandarden.”
Imidlertid fortalte Dexaran oss det stikk motsatte og ga oss dette eksemplet: “Slike lommebøker og tjenester som MetaMask, Mist og MyEtherWallet jobber med ERC20-tokens. Inngangen som er designet for ERC20-token er en kontraktanrop som inneholder kodede parametere og en funksjonssignatur. Funksjonssamtaler i Ethereum Virtual Machine spesifiseres av de fire første byte med data som sendes med en transaksjon. Disse 4-byte-signaturene er definert som de fire første bytene av hashen til den kanoniske representasjonen av funksjons signaturen. Dette betyr at funksjonene `overføring (adresse, uint256)` og `send (adresse, uint256) ‘vil ha forskjellige signaturer. Som et resultat vil inngangen som er designet for ERC20-tokenet ikke være gyldig for ERC777-tokenet. ” Når vi bruker definisjonen vår av bakoverkompatibilitet, er ERC777 ikke kompatibel med ERC20-tokenstandarden.
Når skal du bruke hvilken standard
ERC20: Reddit-bruker u / Dexaran ga oss dette sarkastiske rådet: “Når du vil at investorene dine skal tape penger på grunn av feil.”
ERC223: Denne tokenstandarden er også brukbar sammen med ERC777. ERC777 har noen elegante funksjoner som ERC223 mangler, men logikken til ERC223 er grei sammenlignet med ERC777, noe som kan garantere at den cointain mye mindre feilutsatt kode. Videre er ERC223 ikke avhengig av noen sentral tjeneste som betyr at ERC223-token bare vil avhenge av din egen implementering. Som vi har nevnt tidligere, satser ERC223 på sikkerhetsforbedringer, men dette gjengis ERC223-tokens som ikke er i samsvar med ERC20-standardene.
ERC777: Denne tokenstandarden er allerede brukbar. På den annen side har ERC777 noen sikkerhetsproblemer som nevnt ovenfor. De er også avhengige av det sentrale kontraktregistret, som også er et sikkerhetsproblem. Et sentralt register kan gjøre utviklernes liv lettere, men det fungerer også som et sentralt feilpunkt akkurat som det var med Parity Multisig. Alle Parity Multisigs stolte på et sentralt kodebibliotek. Det hendte at det var en feil i biblioteket, og den ble utnyttet. Som et resultat krasjet alle Parity Multisigs. I tillegg definerer ERC777 et nytt sett med funksjoner. Dette er et forsøk på å tillate tokenutviklere å gjøre tokens kompatible med både ERC20- og ERC777-standardene samtidig av hensyn til adopsjon. Dette betyr at en utvikler kan arve en feil av ERC20 i ERC777, men det tillater en utvikler å bruke flere transaksjonshåndteringshendelser.
Generelt: Alle tokens har en lignende brukstilfelle – ICO. Jeg vil si at ERC223 og ERC777 prøver å løse ett problem med ERC20 på forskjellige måter. ERC223 tar allerede sin nisje inn Ethereum Classic i stedet for ERC20.
Denne artikkelen ble opprettet ved hjelp av Dexaran, ERC223-utvikleren. Noen av Paul Edge’s kommentarer til Ethereums tokenstandarder ble også brukt.