Sammenligning af ERC20, ERC223 og den nye Ethereum ERC777-tokenstandard
Du kender alle ERC20-tokens, da du sandsynligvis ejer et par, distribueret af en slags token-salg. Men vidste du, at der findes mange flere standarder udover ERC20? Ethereum har en lang historie med udviklede standarder.
For at give dig en bedre idé om, hvad ERC betyder, står det for “Ethereum Request for Comment”. Dette er et forslag indsendt til diskussion og forslag til den aktuelle standard. Nummeret (som 20) refererer til et nummer på kodedelingsplatformen Github. Lad os først se på ERC20-standarden.
ERC20 standard
Hvad er ERC20-standarden nøjagtigt?
Fremkomsten af ERC20-tokens revolutionerede markedet for kryptokurrency og åbnede døren til overflod af ICO-kryptokurrency projekter, som verden var vidne til i løbet af 2017. Indført i 2015 skitserer ERC20-koden en specifik liste over regler, som et givet Ethereum-baseret token skal implementere, hvilket forenkler processen med programmering af funktionerne til tokens på Ethereums blockchain. Dybest set er ERC20-tokens specielle former for smarte kontrakter, der bruger Ethereums blockchain.
De mest fremtrædende eksempler på ERC20-tokens inkluderer Bancor, EOS, Tronix, BNB, VeChain og Bankex.
Før innovationen af ERC20-standarden for Ethereum-tokens måtte kodere oprette specifikke implementeringsstandarder for at udvikle et token og lancere det på Ethereums netværk. Ikke desto mindre har ERC20-token-koden forenklet processen med oprettelse af tokens takket være en strømlinet protokol og smarte kontraktstandarder. ERC20-koden lindrede kompleksiteten forbundet med implementering af tokens smarte kontrakter, hvilket signifikant reducerede muligheden for at bryde tokens kontrakter.
Fra april 2018 er der 66.468 ERC20 token-kontrakter, takket være ensartetheden af token-kode leveret af ERC20-standarden, hvilket gjorde det let for kryptovalutaudvekslinger at liste forskellige tokens på deres handelsplatforme. Som sådan har ERC20-standarden hjulpet kryptosamfundet med at overvinde likviditetsproblemer, der kunne have forbundet et så enormt antal Ethereum-baserede tokens.
ERC20-tokenfunktioner:
ERC20-koden skitserer seks specifikke funktioner for tokens, som er
1- Få den samlede levering af tokens via "totalSupply" fungere
2- Hentning af tokensaldoen på en anden konto, der er knyttet til "_ejer" adresse via " balanceOf (adresse _ejer) konstant returnerer (uint256 balance)" fungere.
3- Afsendelse af en bestemt mængde tokens "_værdi" til en given adresse via " overførsel (adresse _to, uint256 _value) returnerer (bool succes)" fungere.
4- Afsendelse af en bestemt mængde tokens "_værdi" fra en token (kontrakt) adresse til en anden token (kontrakt) adresse via "transferFrom (adresse _fra, adresse _til, uint256 _værdi) returnerer (bool succes)" fungere.
5- Aktivering af en bestemt konto til at trække tokens fra sin konto gentagne gange, mens man foruddefinerer den øvre grænse for antallet af tokens, der skal trækkes med "_værdi" parameter. Dette kan opnås via "godkende (adresse _spender, uint256 _værdi) returnerer (bool succes)". Den øvre grænse for tilbagetrækning, dvs. "_værdi" parameter, kan overskrives, når funktionen tilbagekaldes.
6- Returnering af den resterende mængde tokens inden for det forudindstillede beløb defineret af den øvre grænse, der er tilladt at bruge af "_spender" at trække sig fra konto for "_ejer". Dette kan udføres via "godtgørelse (adresse * _ejer *, adresse * _spender *) konstant retur (uint256 tilbage)" fungere.
Disse seks funktioner defineret af ERC20-koden repræsenterer hjørnestenefunktionalitetsproblemer, som inkluderer, hvordan disse tokens overføres mellem forskellige konti, og hvordan brugere kan hente data tilknyttet et givet ERC20-token. Denne gruppe af funktioner ordineres for at sikre, at Ethereum-baserede tokens fungerer på samme måde inden for enhver del af Ethereums platform. Som sådan understøtter alle krypto-tegnebøger, der er i overensstemmelse med ethermønten, også tokens baseret på ERC20-standarden.
Kritisk fejl:
ERC20 er den første tokenstandard for Ethereum. Som det ofte er tilfældet med ny kode, indeholder den nogle fejl eller logiske fejl. ERC20 antager to måder at udføre en token-transaktion på. Først og fremmest giver overførselsfunktionen dig mulighed for at sende tokens til en persons adresse. Hvis du vil deponere tokens til en smart kontrakt, skal du bruge kombinationen ‘godkende + transferFrom’. Du bør give denne kontrakt tilladelse til at trække dine tokens tilbage via godkendelsesfunktionen. Derefter skal du ringe til en funktion i en kontrakt, der håndterer din indbetaling og trækker dine tokens tilbage via funktionen transferFrom.
Hvad hvis du ved et uheld deponerer tokens til en kontrakt med overførselsfunktionen? Transaktionen vil lykkes, men denne transaktion genkendes ikke af modtagerkontrakten. For eksempel, hvis du sender tokens til en decentral udvekslingskontrakt, modtager udvekslingskontrakten dine tokens, men den krediterer ikke disse tokens til din udvekslingstokenbalance. Desuden, hvis den decentrale udvekslingskontrakt ikke implementerer en nødtokenudvindingsfunktion, er det under alle omstændigheder umuligt at få dine tokens tilbage, hvilket resulterer i et permanent tab af tokens. På grund af denne fejl har Ethereum-økosystemet allerede mistet millioner af dollars.
Hvorfor bruger vi stadig ERC20-standarden?
Reddit-bruger u / Dexaran, skaberen af ERC223-standarden, er en af de første udviklere, der underrettede samfundet om den førnævnte fejl. Vi spurgte ham, hvorfor ERC20 stadig er så udbredt, selv når vi kender til denne kritiske fejl. Han gav følgende grunde:
- På grund af kriminel uansvarlighed af tokenudviklere for deres gerninger.
- Fordi Ethereum Foundation stadig promoverer ERC20-tokenstandarden, selv når det vides at indeholde fejl. Den samme situation som den var med TheDAO tidligere. De har brug for at sige "Stop dette nu" men de vil ikke.
- Fordi hovedårsagen til tokenudvikling er fund grabbing snarere end produktoprettelse.
- Fordi brug af en anden standard vil føre til højere netværkseffekter. Dette er ikke, hvad vi virkelig har brug for, da Ethereum-netværket allerede har problemer med skalerbarhed.
ERC223 standard
Det ERC223 standard blev foreslået af u / Dexaran, der hjalp med at skabe denne artikel. ERC223 er en tokenstandard, der gør det muligt for tokenoverførsler at opføre sig nøjagtigt som ether-transaktioner. ERC223 bruger håndtering af begivenheder (betragter en transaktion som en begivenhed) for at forhindre, at tokens går tabt i ikke-håndterede transaktioner. Denne forbedrede standard løser den kritiske ERC20-fejl ved at få overførselsfunktionen til at kaste en fejl på ugyldige overførsler og annullere transaktionen, så der ikke går noget tab. Kort sagt fokuserer ERC223 på sikkerhed.
Tilføjelser og problemer
ERC223 tilføjer en yderligere dataparameter til overførselsfunktionen for at give mulighed for mere komplekse operationer end blot en tokenoverførsel.
Dexarans største bekymring er, at for mange mennesker kan miste deres tokens ved at sende dem til kontrakter ved hjælp af overførselsfunktionen, ikke godkendelses- og transferFrom-metoderne som tidligere diskuteret. Hans løsning er at ændre overførselsmetoden for at kontrollere, om den modtagende adresse er en kontrakt (dvs. indeholder data) eller ej. Hvis det er en kontrakt, antager den, at der er en tokenFallback-funktion, der kalder den tilbage. Den største svaghed er, at hvis tokenFallback ikke eksisterer, kaldes den modtagende kontrakts tilbagefaldsfunktion, og de sendte tokens kan stadig gå tabt.
ERC777 standard
ERC777 er en ny fungibel tokenstandard, der er afhængig af ERC820 (Contract pseudo-introspection registry) og forsøger at løse ERC20’s problemer, såsom mangel på transaktionshåndteringsmekanismer, der førte til tab af millioner af dollars fra Ethereum-økosystemet. Kort sagt fokuserer ERC777 på adoption ved at tilbyde en bred vifte af transaktionshåndteringsmekanismer.
Fordele
Den største fordel ved ERC777 er, at den bruger en ny metode til at genkende kontraktgrænsefladen. Denne standard forudsætter, at der findes et centralt register over kontrakter på Ethereums netværk (dette er defineret i ERC820). Alle kan påberåbe sig dette register for at vide, om en bestemt adresse (det betyder ikke noget, om denne adresse er en kontrakt eller ej) understøtter et bestemt sæt funktioner, dvs. `interface`.
Et af Ethereums hovedproblemer er manglende evne til at vide, hvilke funktioner kontrakten implementerer. ERC820 er beregnet til at løse dette. ERC777 drager fordel af denne tilgang, hvilket bestemt er en god idé.
På den anden side kan du oprette et token, der implementerer ERC20s standardfunktioner sammen med de nye ERC777-funktioner uden tilsidesættelse (og eventuelt arver ERC20s kritiske fejl). Dette kan garantere en god netværkseffekt til denne nye tokenstandard og hurtigere adoption. Som praksis viser, er det vigtigste mål for tokenudviklere at skaffe penge, der forudsætter, at de har brug for at skubbe deres tokens til børser. Det er lettere for udvekslinger at understøtte et token, der implementerer ældre ERC20-funktioner (det betyder ikke noget, om disse funktioner indeholder bugs eller ej) uden nogen undersøgelse af nyere funktioner i nye token-standarder. Jo lettere det er for udvekslinger at understøtte tokens på en ny standard, jo flere udviklere vil bruge den. Dette øger vedtagelsen af ERC777, mens ERC223 mangler denne egenskab.
Hvad er anderledes??
Denne tokenstandard definerer et helt nyt sæt funktioner, dvs. `send`-funktioner i stedet for` transfer`-funktioner. `autoriseOperator` i stedet for` godkende`. `tokensReceived` handlerfunktion i stedet for` tokenFallback` handlerfunktion.
En sådan tilgang kan garantere, at funktionerne i denne standard ikke krydser og tilsidesætter funktioner fra nogen anden tokenstandard, og det er således muligt at lave et token, der vil være kompatibelt med ERC777 og ERC820-standarder samtidigt.
Endelig standardiserer ERC777 Mint og Burn funktionalitet af tokens.
Fejlpunkter og bekymringer om sikkerheden
ERC777 implementerer funktionen ‘autoriseOperator’, der giver nogen mulighed for at administrere tokens på dine vegne. Dexaran forklarede os, at han mener, at denne metode er udfaset og ikke bør bruges. Derudover skader autorisering af nogen til at administrere tokens på dine vegne skader netværkets båndbredde og kræver mere gas. ‘authoriseOperator’ repræsenterer allerede en transaktion, og en anden transaktion kræves for at udføre "autoriseret tilbagetrækning". Så der kræves to transaktioner for at udføre en overførsel, som kan udføres med kun en transaktion.
Dernæst indeholder ERC777-standarden et valgfrit flag for at forhindre fastgjorte tokens ved at udføre nogle kontroller om grænsefladen ITokenRecipient og kontrollere, om adressen er hvidlistet. Da denne standard er fokuseret på sikkerhed i et netværk, der håndterer tokens, der er millioner af dollars værd, er det ikke en god ting at gøre disse checks valgfri.
Andre standarder
Der er mange andre standarder som ERC827 som kombinerer nogle fordele ved ERC223 med ældre ERC20-funktioner. Det ERC664 standard fokuserer på modulets tokenstandard. Denne standard gør det muligt at opgradere tokenkontrakter, men den har arvet den kritiske ERC20-fejl. Andre standarder inkluderer ERC721, ERC677 og ERC820, men de er mindre kendte.
Kompatibilitet mellem standarder
Vi spurgte Dexaran, hvilke standarder der er bagudkompatible. Han fortalte os, at vi først skulle forstå, hvad ‘bagudkompatibilitet’ står for: “Bagudkompatibilitet er en egenskab ved et system, et produkt eller en teknologi, der giver mulighed for interoperabilitet med et ældre ældre system eller med input designet til et sådant system.”
ERC20 & ERC223: ERC223-tokens er kompatible med ERC20. Alt, der er designet til at fungere korrekt med ERC20 (som tegnebøger) kan også arbejde med ERC223. Den eneste undtagelse her er kontrakter, der er afhængige af godkende + overførsel fra tokenindbetalingsmønstre. Det er dog muligt at implementere godkende + transferFrom-funktioner med ERC223-tokens, selvom de ikke er inkluderet i standarden lige nu. Hvad angår tegnebøger og andre tredjeparts tjenester, der ikke er smarte kontrakter, understøtter de ERC223 automatisk, fordi indgangsopkaldsdataene til ERC20-token er gyldige for ERC223.
ERC20 & ERC777: Du kan finde følgende udsagn i afsnittet ‘Bagudkompatibilitet’ i ERC777-forslaget: “Denne EIP introducerer ikke bagudkompatibiliteter og er kompatibel med den ældre ERC-20-tokenstandard.”
Dexaran fortalte os dog det nøjagtige modsatte og gav os dette eksempel: ”Sådanne tegnebøger og tjenester som MetaMask, Mist og MyEtherWallet arbejder med ERC20-tokens. Det input, der er designet til ERC20-tokenet, er et kontraktopkald, der indeholder kodede parametre og en funktionssignatur. Funktionsopkald i Ethereum Virtual Machine specificeres af de første fire bytes data sendt med en transaktion. Disse 4-byte signaturer er defineret som de første fire byte af hash af den kanoniske repræsentation af funktionssignaturen. Dette betyder, at funktionerne “overførsel (adresse, uint256)” og “send (adresse, uint256)” vil have forskellige signaturer. Som et resultat er input designet til ERC20-token ikke gyldigt for ERC777-token. ” Da vi bruger vores definition af bagudkompatibilitet, er ERC777 ikke kompatibel med ERC20-tokenstandarden.
Hvornår skal man bruge hvilken standard
ERC20: Reddit-bruger u / Dexaran gav os dette sarkastiske råd: “Når du vil have, at dine investorer mister penge på grund af fejl.”
ERC223: Denne tokenstandard kan også bruges sammen med ERC777. ERC777 har nogle elegante funktioner, som ERC223 mangler, men logikken i ERC223 er ligetil sammenlignet med ERC777, hvilket kan garantere, at den cointain meget mindre fejlberettiget kode. Desuden er ERC223 ikke afhængig af nogen central tjeneste, hvilket betyder, at dit ERC223-token kun afhænger af din egen implementering. Som vi har nævnt tidligere, sigter ERC223 mod sikkerhedsforbedringer, men dette gjorde ERC223-tokens ikke i overensstemmelse med ERC20-standarderne.
ERC777: Denne tokenstandard er allerede anvendelig. På den anden side har ERC777 nogle sikkerhedsproblemer som nævnt ovenfor. De er også afhængige af det centrale kontraktregister, som også er et sikkerhedsproblem. Et centralt register kan gøre udviklerens liv lettere, men det fungerer også som et centralt fejlpunkt nøjagtigt som det var med Parity Multisig. Alle Parity Multisigs var afhængige af et centralt kodebibliotek. Det skete, at der var en fejl i biblioteket, og den blev udnyttet. Som et resultat styrtede alle Parity Multisigs. Derudover definerer ERC777 et nyt sæt funktioner. Dette er et forsøg på at tillade tokenudviklere at gøre deres tokens kompatible med både ERC20- og ERC777-standarder samtidigt af hensyn til vedtagelsen. Dette betyder, at en udvikler kan arve en fejl af ERC20 i ERC777, men det giver en udvikler mulighed for at bruge flere transaktionshåndteringshændelser.
Generelt: Alle tokens har en lignende brugssag – ICO. Jeg vil sige, at ERC223 og ERC777 forsøger at løse et problem med ERC20 på forskellige måder. ERC223 tager allerede sin niche ind Ethereum Classic i stedet for ERC20.
Denne artikel blev oprettet ved hjælp af Dexaran, ERC223-udvikleren. Nogle af Paul Edge’s kommentarer til Ethereums tokenstandarder blev også brugt.