Sunteți cu toții familiarizați cu jetoanele ERC20 deoarece probabil că dețineți un cuplu, distribuit printr-un fel de vânzare de jetoane. Dar știați că există mai multe standarde în afară de ERC20? Ethereum are o lungă istorie de standarde dezvoltate.

Pentru a vă face o idee mai bună despre ceea ce înseamnă ERC, acesta înseamnă „Cerere de comentariu Ethereum”. Aceasta este o propunere prezentată pentru discuții și sugestii la standardul real. Numărul (cum ar fi 20) se referă la un număr de problemă de pe platforma de partajare a codului Github. În primul rând, să aruncăm o privire la standardul ERC20.

Standardul ERC20

Ce anume este standardul ERC20?

Apariția jetoanelor ERC20 a revoluționat piața criptomonedelor și a deschis ușa pletorei de Criptomoneda ICO proiecte la care a fost martor în cursul anului 2017. Introdus în 2015, codul ERC20 prezintă o listă specifică de reguli pe care un anumit token bazat pe Ethereum trebuie să le desfășoare, simplificând procesul de programare a funcțiilor jetoanelor pe blockchain-ul Ethereum. Practic, jetoanele ERC20 sunt forme speciale de contracte inteligente care utilizează blockchain-ul Ethereum.

Cele mai importante exemple de jetoane ERC20 includ Bancor, EOS, Tronix, BNB, VeChain și Bankex.

Înainte de inovația standardului ERC20 pentru jetoanele Ethereum, programatorii au trebuit să creeze standarde specifice de implementare pentru dezvoltarea unui jeton și lansarea acestuia în rețeaua Ethereum. Cu toate acestea, codul de jeton ERC20 a simplificat procesul de creare a jetoanelor, grație unui protocol simplificat și a unor standarde de contract inteligente. Codul ERC20 a atenuat complexitatea asociată cu implementarea contractelor inteligente ale tokenului, ceea ce a redus semnificativ posibilitatea de a sparge contractele tokenului.

Începând cu aprilie 2018, există 66.468 contracte simbolice ERC20, datorită uniformității codului token oferit de standardul ERC20, care a făcut mai ușor pentru schimburile de criptomonede listarea diferitelor jetoane pe platformele lor de tranzacționare. Ca atare, standardul ERC20 a ajutat comunitatea criptografică să depășească problemele de lichiditate care ar fi putut asocia un număr atât de mare de jetoane bazate pe Ethereum.

Funcții de jeton ERC20:

Codul ERC20 prezintă șase funcții specifice pentru jetoane, care sunt

1- Obținerea ofertei totale de jetoane prin intermediul "TotalSupply" funcţie

2- Preluarea soldului token al unui alt cont asociat cu "_proprietar" adresa prin intermediul " balanceOf (address _owner) returnează constant (balance uint256)" funcţie.

3- Trimiterea unei cantități specifice de jetoane "_valoare" la o anumită adresă prin intermediul " transfer (adresa _to, uint256 _value) returnează (succes bool)" funcţie.

4- Trimiterea unei cantități specifice de jetoane "_valoare" de la o adresă simbolică (contract) la o altă adresă simbolică (contract) prin intermediul "transferFrom (address _from, address _to, uint256 _value) returnează (succes bool)" funcţie.

5- Activarea unui anumit cont pentru a retrage jetoane din contul propriu în mod repetat, în timp ce predefiniți limita superioară pentru cantitatea de jetoane care trebuie retrasă cu "_valoare" parametru. Acest lucru poate fi realizat prin intermediul "aproba (adresa _spender, uint256 _value) returnează (succes bool)". Limita superioară pentru retragere, adică "_valoare" parametru, poate fi suprascris când funcția este reapelată.

6- Returnarea cantității reziduale de jetoane, în limita valorii prestabilite definite de limita superioară permisă să fie cheltuită de "_cheltuitor" să se retragă din contul "_proprietar". Aceasta poate fi executată prin "alocație (adresă * _proprietar *, adresă * _spender *) returnează constant (uint256 rămas)" funcţie.

Aceste șase funcții definite de codul ERC20 reprezintă probleme de funcționalitate, care includ modul în care aceste jetoane vor fi transferate între diferite conturi și modul în care utilizatorii pot prelua datele asociate cu un jeton ERC20 dat. Acest grup de funcții sunt prescrise pentru a se asigura că jetoanele bazate pe Ethereum vor funcționa în mod similar în orice parte a platformei Ethereum. Ca atare, toate portofelele criptografice care sunt conforme cu moneda eter vor suporta și jetoane bazate pe standardul ERC20.

Bug critic:

ERC20 este primul standard simbolic al Ethereum. Așa cum se întâmplă adesea cu codul nou, acesta conține unele erori sau greșeli logice. ERC20 își asumă două moduri de a efectua o tranzacție cu token. În primul rând, funcția de transfer vă permite să trimiteți jetoane la adresa cuiva. Dacă doriți să depuneți jetoane la un contract inteligent, ar trebui să utilizați combinația „aprobă + transferFrom”. Ar trebui să autorizați acest contract să vă retragă jetoanele prin intermediul funcției de aprobare. Apoi, trebuie să apelați o funcție a unui contract care va gestiona depozitul și vă va retrage jetoanele prin intermediul funcției transferFrom.

Ce se întâmplă dacă depuneți jetoane accidental la un contract cu funcția de transfer? Tranzacția va avea succes, dar această tranzacție nu va fi recunoscută de contractul destinatar. De exemplu, dacă trimiteți jetoane către un contract de schimb descentralizat, atunci contractul de schimb vă va primi jetoanele, dar nu va credita aceste jetoane în soldul dvs. de jetoane de schimb. Mai mult, dacă contractul de schimb descentralizat nu implementează o funcție de extracție de jeton de urgență, atunci este imposibil să vă recuperați jetoanele în orice caz, rezultând o pierdere permanentă a jetoanelor. Datorită acestei erori, ecosistemul Ethereum a pierdut deja milioane de dolari.

De ce mai folosim standardul ERC20?

Utilizator Reddit u / Dexaran, creatorul standardului ERC223, este unul dintre primii dezvoltatori care au notificat comunitatea cu privire la eroarea menționată anterior. L-am întrebat de ce ERC20 este încă atât de utilizat, chiar și atunci când știm despre acest bug critic. El a prezentat următoarele motive:

  1. Din cauza iresponsabilității penale a dezvoltatorilor de jetoane pentru faptele lor.
  2. Deoarece Fundația Ethereum promovează în continuare standardul de jeton ERC20 chiar și atunci când se știe că conține erori. Aceeași situație ca și în cazul TheDAO. Trebuie să spună "Oprește asta acum" dar nu vor.
  3. Deoarece principalul motiv pentru dezvoltarea simbolurilor este mai degrabă captarea de fonduri, decât crearea de produse.
  4. Deoarece utilizarea unui standard diferit va duce la efecte de rețea mai mari. Nu de asta avem nevoie întrucât rețeaua Ethereum are deja probleme de scalabilitate.

Standardul ERC223

ERC223 standardul a fost propus de u / Dexaran, care a contribuit la crearea acestui articol. ERC223 este un standard de jetoane care permite transferurilor de jetoane să se comporte exact ca tranzacții eterice. ERC223 utilizează gestionarea evenimentelor (consideră că o tranzacție este un eveniment) pentru a preveni pierderea jetoanelor în tranzacții necontrolate. Acest standard îmbunătățit rezolvă eroarea critică ERC20 prin faptul că funcția de transfer aruncă o eroare la transferurile nevalide și anulează tranzacția, astfel încât să nu se piardă fonduri. Pe scurt, ERC223 se concentrează asupra Securitate.

Adăugări și probleme

ERC223 adaugă un parametru de date suplimentar funcției de transfer, pentru a permite operațiuni mai complexe decât un transfer de simboluri.

Principala preocupare a lui Dexaran este că prea mulți oameni își pot pierde jetoanele trimițându-le la contracte folosind funcția de transfer, nu metodele de aprobare și transferFrom, așa cum am discutat mai devreme. Soluția sa este de a modifica metoda de transfer pentru a verifica dacă adresa de primire este un contract (adică conține date) sau nu. Dacă este un contract, atunci presupune că există o funcție tokenFallback pentru a-l apela înapoi. Principalul punct slab este că, dacă tokenFallback nu există, atunci va fi apelată funcția de rezervă a contractului de primire și token-urile trimise pot fi în continuare pierdute.

Standard ERC777

ERC777 este un nou standard de token fungibil care se bazează pe ERC820 (registru de pseudo-introspecție a contractelor) și încearcă să rezolve problemele ERC20, cum ar fi lipsa mecanismelor de gestionare a tranzacțiilor care au dus la pierderea a milioane de dolari din ecosistemul Ethereum. Pe scurt, ERC777 se concentrează asupra adopţie prin oferirea unui o gamă largă de mecanisme de gestionare a tranzacțiilor.

Beneficii

Principalul avantaj al ERC777 este că folosește o nouă metodă de recunoaștere a interfeței contractului. Acest standard presupune că există un registru central al contractelor în rețeaua Ethereum (acest lucru este definit în ERC820). Toată lumea poate invoca acest registru pentru a ști dacă o anumită adresă (nu contează dacă această adresă este sau nu un contract) acceptă un anumit set de funcții, adică „interfață”.

Una dintre principalele probleme ale Ethereum este incapacitatea de a ști ce funcții implementează contractul. ERC820 este destinat să rezolve acest lucru. ERC777 profită de această abordare, ceea ce este cu siguranță o idee bună.

Pe de altă parte, puteți crea un token care va implementa funcțiile implicite ale ERC20 alături de noile funcții ERC777 fără suprascrieri (și moștenesc opțional eroarea critică a ERC20). Acest lucru poate garanta un efect de rețea bun pentru acest nou standard de jetoane și adoptarea mai rapidă. După cum arată practica, obiectivul principal al dezvoltatorilor de jetoane este de a strânge bani, presupunând că trebuie să-și împingă jetoanele la schimburi. Este mai ușor pentru schimburi să accepte un token care implementează funcții ERC20 vechi (nu contează dacă aceste funcții conțin sau nu erori) fără nicio cercetare privind funcționalitățile mai noi ale noilor standarde de token. Cu cât este mai ușor pentru schimburi să accepte jetoane pe un nou standard, cu atât mai mulți dezvoltatori îl vor folosi. Acest lucru stimulează adoptarea ERC777, în timp ce ERC223 nu are această proprietate.

Ce este diferit?

Acest standard de jeton definește un set complet nou de funcții, adică funcții de „trimitere” în loc de funcții de „transfer”. `authoriseOperator` în loc de„ aproba`. Funcția de manipulare `tokensReceived` în loc de funcția de manipulare` tokenFallback`.

O astfel de abordare poate garanta că funcțiile acestui standard nu se vor încrucișa și nu vor fi suprascrise cu funcțiile oricărui alt standard de jeton, astfel este posibil să se realizeze un jeton care va fi compatibil cu standardele ERC777 și ERC820 simultan..

În cele din urmă, ERC777 standardizează Mint and Burn funcționalitatea jetoanelor.

Puncte de eșec și probleme de securitate

ERC777 implementează funcția „authoriseOperator“ care permite cuiva să gestioneze jetoane în numele dvs. Dexaran ne-a explicat că el crede că această metodă este învechită și nu ar trebui folosită. În plus, autorizarea cuiva pentru a gestiona jetoane în numele dvs. afectează lățimea de bandă a rețelei și necesită mai mult gaz. „authoriseOperator” reprezintă deja o tranzacție și este necesară o altă tranzacție pentru a efectua "retragere autorizată". Deci, două tranzacții sunt necesare pentru a efectua un transfer care se poate face cu o singură tranzacție.

Apoi, standardul ERC777 conține un semnal opțional pentru a preveni jetoanele blocate prin efectuarea unor verificări despre interfața ITokenRecipient și pentru a verifica dacă adresa este pe lista albă. Întrucât acest standard este axat pe securitatea unei rețele care gestionează jetoane care valorează milioane de dolari, nu este bine să faci opțional aceste verificări.

Alte standarde

Există multe alte standarde precum ERC827 care combină unele avantaje ale ERC223 cu funcțiile vechi ERC20. ERC664 standard se concentrează pe modularitatea standardului token. Acest standard permite actualizarea contractelor de token, dar a moștenit eroarea critică ERC20. Alte standarde includ ERC721, ERC677 și ERC820, dar sunt mai puțin cunoscute.

Compatibilitatea între standarde

L-am întrebat pe Dexaran ce standarde sunt compatibile cu versiunile anterioare. El ne-a spus că mai întâi ar trebui să înțelegem ce înseamnă „compatibilitate inversă”: „Compatibilitatea inversă este o proprietate a unui sistem, produs sau tehnologie care permite interoperabilitatea cu un sistem vechi vechi sau cu intrarea proiectată pentru un astfel de sistem.”

ERC20 & ERC223: Jetoanele ERC223 sunt compatibile cu ERC20. Tot ceea ce este conceput pentru a funcționa corect cu ERC20 (cum ar fi portofelele) poate funcționa și cu ERC223. Singura excepție aici sunt contractele care se bazează pe aprobarea + transferul de la modelele de depunere token. Cu toate acestea, este posibil să implementați funcții de aprobare + transferFrom cu jetoane ERC223, chiar dacă nu sunt incluse în standard chiar acum. În ceea ce privește portofelele și orice servicii terțe care nu sunt contracte inteligente, acestea acceptă ERC223 automat, deoarece datele de apel de intrare ale simbolului ERC20 sunt valabile pentru ERC223.

ERC20 & ERC777: Puteți găsi următoarea afirmație în secțiunea „Compatibilitate înapoi” a propunerii ERC777: „Acest EIP nu introduce incompatibilități înapoi și este compatibil cu vechiul standard de jeton ERC-20”.

Cu toate acestea, Dexaran ne-a spus exact opusul și ne-a dat acest exemplu: „Portofele și servicii precum MetaMask, Mist și MyEtherWallet funcționează cu jetoane ERC20. Intrarea proiectată pentru jetonul ERC20 este un apel contract care conține parametri codificați și o semnătură de funcție. Apelurile funcționale din mașina virtuală Ethereum sunt specificate de primii patru octeți de date trimise cu o tranzacție. Aceste semnături pe 4 octeți sunt definite ca primii patru octeți ai hashului reprezentării canonice a semnăturii funcției. Aceasta înseamnă că funcțiile „transfer (adresă, uint256)„ și „trimitere (adresă, uint256)„ vor avea semnături diferite. Ca urmare, intrarea proiectată pentru simbolul ERC20 nu va fi validă pentru simbolul ERC777. ” Pe măsură ce folosim definiția noastră de compatibilitate inversă, ERC777 nu este compatibil cu standardul de jeton ERC20.

Când să utilizați ce standard

ERC20: Utilizatorul Reddit u / Dexaran ne-a dat acest sfat sarcastic: „Când doriți ca investitorii dvs. să piardă bani din cauza bug-urilor”.

ERC223: Acest standard de simbol este, de asemenea, utilizabil alături de ERC777. ERC777 are câteva caracteristici elegante de care ERC223 nu are, dar logica ERC223 este simplă în comparație cu ERC777, care poate garanta că acesta conține mult cod mai puțin predispus la erori. Mai mult, ERC223 nu se bazează pe niciun serviciu central, ceea ce înseamnă că jetonul dvs. ERC223 va depinde doar de propria dvs. implementare. După cum am menționat mai devreme, ERC223 urmărește îmbunătățirea securității, dar acest lucru a făcut ca jetoanele ERC223 să nu fie conforme cu standardele ERC20.

ERC777: Acest standard simbol este deja utilizabil. Pe de altă parte, ERC777 are unele probleme de securitate, așa cum s-a menționat mai sus. De asemenea, se bazează pe registrul central de contracte, care reprezintă și o preocupare de securitate. Un registru central poate ușura viața dezvoltatorului, dar acționează și ca un punct central de eșec exact așa cum a fost cu Parity Multisig. Toate multisigurile Parity s-au bazat pe o bibliotecă centrală de coduri. S-a întâmplat să existe un bug în bibliotecă și să fie exploatat. Drept urmare, toate Parity Multisigs s-au prăbușit. În plus, ERC777 definește un nou set de funcții. Aceasta este o încercare de a permite dezvoltatorilor de jetoane să își facă jetoanele compatibile atât cu standardele ERC20, cât și cu ERC777 simultan, de dragul adoptării. Aceasta înseamnă că un dezvoltator poate moșteni un bug al ERC20 în ERC777, dar permite unui dezvoltator să utilizeze mai multe evenimente de gestionare a tranzacțiilor.

În general: Toate jetoanele au un caz de utilizare similar – ICO. Aș spune că ERC223 și ERC777 încearcă să rezolve o problemă a ERC20 în moduri diferite. ERC223 își ia deja nișa Ethereum Classic în loc de ERC20.

Acest articol a fost creat cu ajutorul Dexaran, dezvoltatorul ERC223. Unele dintre comentariile lui Paul Edge despre standardele simbolice ale Ethereum au fost folosite și ele.