Jūs visi esat pazīstami ar ERC20 žetoniem, jo jums, iespējams, pieder pāris, kurus izplata kāda veida žetonu pārdošana. Bet vai zinājāt, ka pastāv vēl daudz citu standartu, izņemot ERC20? Ethereum ir ilga izstrādāto standartu vēsture.
Lai labāk izprastu, ko nozīmē ERC, tas nozīmē “Ethereum pieprasījums pēc komentāriem”. Šis ir diskusijai iesniegtais priekšlikums un ierosinājumi atbilstoši faktiskajam standartam. Numurs (piemēram, 20) attiecas uz emisijas numuru koda koplietošanas platformā Džitūbs. Vispirms apskatīsim ERC20 standartu.
ERC20 standarts
Kas tieši ir ERC20 standarts?
ERC20 žetonu parādīšanās radīja revolucionāru kriptovalūtu tirgu un pavēra durvis uz pārpilnību ICO kriptonauda projekti, kurus pasaule piedzīvoja 2017. gadā. ERC20 kods, kas tika ieviests 2015. gadā, izklāsta īpašu noteikumu sarakstu, kas jāizvieto attiecīgajam Ethereum balstītam marķierim, vienkāršojot marķieru funkciju programmēšanas procesu Ethereum blokķēdē. Būtībā ERC20 žetoni ir īpašas viedo līgumu formas, kas izmanto Ethereum blokķēdi.
Spilgtākie ERC20 marķieru piemēri ir Bancor, EOS, Tronix, BNB, VeChain un Bankex.
Pirms Ethereum marķieru ERC20 standarta jaunināšanas kodētājiem bija jāizveido īpaši ieviešanas standarti, lai izveidotu marķieri un palaistu to Ethereum tīklā. Neskatoties uz to, ERC20 marķiera kods ir vienkāršojis marķieru izveidošanas procesu, pateicoties racionalizētam protokolam un viedo līgumu standartiem. ERC20 kods atviegloja marķiera viedo līgumu ieviešanas sarežģītību, kas ievērojami samazināja iespēju lauzt marķiera līgumus.
Sākot ar 2018. gada aprīli, ir 66 468 ERC20 marķieru līgumi, pateicoties ERC20 standarta nodrošinātajam marķiera koda vienveidīgumam, kas kriptovalūtu biržām ļāva viegli marķēt dažādus marķierus savās tirdzniecības platformās. Tādējādi ERC20 standarts ir palīdzējis kriptogrāfijas kopienai pārvarēt likviditātes problēmas, kas varētu būt saistītas ar tik milzīgu skaitu Ethereum balstītu žetonu.
ERC20 marķiera funkcijas:
ERC20 kods iezīmē sešas īpašas funkcijas marķieriem, kuras ir
1 – Kopējā žetonu piegāde, izmantojot "totalSupply" funkciju
2- Atgūstiet ar kontu saistītā cita konta marķiera atlikumu "_ īpašnieks" adresi, izmantojot " balanceOf (address _owner) nemainīga atgriešanās (bilance uint256)" funkciju.
3 – Nosūtot noteiktu daudzumu žetonu "_vērtība" uz norādīto adresi caur " pārsūtīšana (adrese _to, uint256 _value) atgriež (bool panākumi)" funkciju.
4- Nosūtot noteiktu daudzumu žetonu "_vērtība" no vienas marķiera (līguma) adreses uz citu marķiera (līguma) adresi, izmantojot "atgriežas transferFrom (adrese _from, adrese _to, uint256 _value) (bool panākumi)" funkciju.
5. Ļaujot konkrētam kontam atkārtoti izņemt žetonus no sava konta, vienlaikus nosakot augšējo robežu žetonu daudzumam, kas jāizņem ar "_vērtība" parametrs. To var panākt, izmantojot "apstiprina (adrese _spender, uint256 _value) atgriež (bool panākumi)". Atcelšanas augšējā robeža, t.i. "_vērtība" parametru, to var pārrakstīt, kad funkcija tiek atsaukta.
6. Atdodot atlikušo žetonu daudzumu iepriekš iestatītajā daudzumā, kas noteikts ar augšējo robežu, kuru atļauts iztērēt "_ tērēt" izņemt no konta "_ īpašnieks". To var izpildīt, izmantojot "pabalsts (adrese * _ īpašnieks *, adrese * _ tērētājs *) nemainīga atgriešanās (palicis uint256)" funkciju.
Šīs sešas ERC20 kodā noteiktās funkcijas atspoguļo stūrakmens funkcionalitātes jautājumus, kas ietver to, kā šie marķieri tiks pārsūtīti starp dažādiem kontiem un kā lietotāji var izgūt datus, kas saistīti ar konkrēto ERC20 marķieri. Šīs funkciju grupas ir paredzētas, lai nodrošinātu, ka Ethereum balstītie žetoni darbosies līdzīgi jebkurā Ethereum platformas daļā. Visi kriptogrāfijas maki, kas atbilst ētera monētai, atbalstīs arī marķierus, kuru pamatā ir ERC20 standarts.
Kritiska kļūda:
ERC20 ir pirmais Ethereum simboliskais standarts. Kā tas bieži notiek ar jauno kodu, tajā ir dažas kļūdas vai loģiskas kļūdas. ERC20 pieņem divus marķiera darījuma veikšanas veidus. Pirmkārt, pārsūtīšanas funkcija ļauj nosūtīt žetonus uz kāda lietotāja adresi. Ja vēlaties deponēt žetonus uz viedo līgumu, jums jāizmanto kombinācija ‘apstiprināt + transferFrom’. Jums vajadzētu pilnvarot šo līgumu atsaukt jūsu žetonus, izmantojot apstiprināšanas funkciju. Pēc tam jums jāizsauc līguma funkcija, kas apstrādās jūsu depozītu un izņems jūsu žetonus, izmantojot funkciju transferFrom.
Ko darīt, ja nejauši deponējat žetonus uz līgumu ar pārsūtīšanas funkciju? Darījums būs veiksmīgs, taču saņēmēja līgumā šis darījums netiks atzīts. Piemēram, ja jūs nosūtīt žetonus uz decentralizētu apmaiņas līgumu, apmaiņas līgums saņems jūsu žetonus, taču tas šos kredītus neuzskaitīs jūsu apmaiņas žetonu atlikumam. Turklāt, ja decentralizētā apmaiņas līgumā nav ieviesta ārkārtas marķieru iegūšanas funkcija, tad žetonus jebkurā gadījumā nav iespējams atgūt, kā rezultātā marķieri tiek neatgriezeniski zaudēti. Šīs kļūdas dēļ Ethereum ekosistēma jau ir zaudējusi miljoniem dolāru.
Kāpēc mēs joprojām izmantojam ERC20 standartu?
Reddit lietotājs u / Deksarāns, ERC223 standarta radītājs ir viens no pirmajiem izstrādātājiem, kurš paziņoja kopienai par iepriekš minēto kļūdu. Mēs viņam jautājām, kāpēc ERC20 joprojām tiek izmantots tik plaši, pat zinot par šo kritisko kļūdu. Viņš minēja šādus iemeslus:
- Žetonu izstrādātāju noziedzīgas bezatbildības dēļ par viņu darbiem.
- Tā kā Ethereum fonds joprojām popularizē ERC20 marķiera standartu, pat ja ir zināms, ka tajā ir kļūdas. Tāda pati situācija kā iepriekš ar TheDAO. Viņiem jāsaka "Pārtrauciet to tūlīt" bet viņi to nedarīs.
- Tā kā žetonu izstrādes galvenais iemesls ir līdzekļu sagrābšana, nevis produktu radīšana.
- Tā kā cita standarta izmantošana radīs lielākus tīkla efektus. Tas nav tas, kas mums patiešām ir vajadzīgs, ņemot vērā, ka Ethereum tīklā jau ir problēmas ar mērogojamību.
ERC223 standarts
The ERC223 standartu ieteica u / Dexaran, kurš palīdzēja izveidot šo rakstu. ERC223 ir marķiera standarts, kas ļauj žetonu pārsūtījumiem rīkoties tieši tāpat kā ētera darījumos. ERC223 izmanto notikumu apstrādi (uzskata darījumu par notikumu), lai novērstu žetonu zaudēšanu neapstrādātos darījumos. Šis uzlabotais standarts novērš kritisko kļūdu ERC20, liekot pārsūtīšanas funkcijai kļūdīties par nederīgiem pārskaitījumiem un atceļot darījumu, lai nezaudētu līdzekļus. Īsāk sakot, ERC223 koncentrējas uz drošība.
Papildinājumi un problēmas
ERC223 pārsūtīšanas funkcijai pievieno papildu datu parametru, lai varētu veikt sarežģītākas darbības nekā tikai marķiera pārsūtīšanu.
Dexaran galvenā problēma ir tā, ka pārāk daudzi cilvēki var zaudēt savus marķierus, nosūtot tos uz līgumiem, izmantojot pārsūtīšanas funkciju, nevis apstiprināt un transferFrom metodes, kā iepriekš apspriests. Viņa risinājums ir modificēt pārsūtīšanas metodi, lai pārbaudītu, vai saņēmēja adrese ir līgums (t.i., satur datus) vai nav. Ja tas ir līgums, tad tiek pieņemts, ka ir tokenFallback funkcija, lai to izsauktu. Galvenais trūkums ir tāds, ka, ja tokenFallback neeksistē, tiks izsaukta saņēmēja līguma rezerves funkcija, un nosūtītās pilnvaras joprojām var tikt zaudētas.
ERC777 standarts
ERC777 ir jauns aizstājams marķieru standarts, kas balstās uz ERC820 (līguma pseido-introspekcijas reģistrs) un mēģina atrisināt ERC20 problēmas, piemēram, darījumu apstrādes mehānismu trūkumu, kas noveda pie Ethereum ekosistēmas zaudēšanas miljoniem dolāru. Īsāk sakot, ERC777 koncentrējas uz pieņemšana piedāvājot a plašs darījumu apstrādes mehānismu klāsts.
Ieguvumi
Galvenā ERC777 priekšrocība ir tā, ka tajā tiek izmantota jauna līguma saskarnes atpazīšanas metode. Šis standarts pieņem, ka Ethereum tīklā ir centrālais līgumu reģistrs (tas ir noteikts ERC820). Ikviens var atsaukties uz šo reģistru, lai uzzinātu, vai noteikta adrese (nav svarīgi, vai šī adrese ir līgums vai nav) atbalsta noteiktu funkciju kopumu, t.i., “interfeiss”.
Viena no galvenajām Ethereum problēmām ir nespēja uzzināt, kādas funkcijas līgums īsteno. ERC820 ir paredzēts, lai to atrisinātu. ERC777 izmanto šo pieeju, kas noteikti ir laba ideja.
No otras puses, jūs varat izveidot marķieri, kas līdz ar jaunajām ERC777 funkcijām bez ignorēšanas īstenos ERC20 noklusējuma funkcijas (un pēc izvēles var mantot ERC20 kritisko kļūdu). Tas var garantēt labu tīkla efektu šim jaunajam marķiera standartam un ātrāku pieņemšanu. Kā rāda prakse, marķieru izstrādātāju galvenais mērķis ir piesaistīt naudu, kas pieņem, ka viņiem ir jāpiespiež žetoni uz apmaiņu. Apmaiņai ir vieglāk atbalstīt marķieri, kas īsteno mantotās ERC20 funkcijas (nav svarīgi, vai šajās funkcijās ir kļūdas vai nav), neveicot pētījumu par jauno marķieru standartu jaunākām funkcijām. Jo vieglāk apmaiņai ir atbalstīt žetonus pēc jauna standarta, jo vairāk izstrādātāji to izmantos. Tas veicina ERC777 ieviešanu, savukārt ERC223 trūkst šī īpašuma.
Kas ir savādāk?
Šis marķiera standarts definē pilnīgi jaunu funkciju kopumu, t.i., “pārsūtīšanas” funkciju vietā “sūtīt” funkcijas. `authoriseOperator`, nevis` apstiprināt`. `tokenReceived` apstrādātāja funkcija, nevis funkcija` tokenFallback`.
Šāda pieeja var garantēt, ka šī standarta funkcijas netiks sakrustotas un ignorētas ar jebkura cita marķiera standarta funkcijām, tādējādi ir iespējams vienlaicīgi izveidot marķieri, kas būs saderīgs ar ERC777 un ERC820 standartiem.
Beidzot ERC777 standartizējas Piparmētra un apdegums žetonu funkcionalitāte.
Neveiksmes punkti un bažas par drošību
ERC777 ievieš funkciju `authoriseOperator`, kas ļauj kādam jūsu vārdā pārvaldīt žetonus. Deksarans mums paskaidroja, ka, viņaprāt, šī metode ir novecojusi un to nevajadzētu izmantot. Turklāt, pilnvarojot kādu personu pārvaldīt žetonus jūsu vārdā, tiek sabojāts tīkla joslas platums un nepieciešams vairāk gāzes. “authoriseOperator” jau pārstāv vienu darījumu, un tā izpildei ir nepieciešams vēl viens darījums "atļauta izņemšana". Tātad pārskaitījuma veikšanai ir nepieciešami divi darījumi, kurus var veikt tikai ar vienu darījumu.
Pēc tam ERC777 standartā ir izvēles karodziņš, lai novērstu iestrēgušos marķierus, veicot dažas ITokenRecipient saskarnes pārbaudes un pārbaudot, vai adrese ir iekļauta baltajā sarakstā. Tā kā šis standarts ir vērsts uz tīkla drošību, kas apstrādā žetonus, kuru vērtība ir miljoniem dolāru, nav labi padarīt šīs pārbaudes izvēles.
Citi standarti
Ir daudzi citi standarti, piemēram, ERC827 kas apvieno dažas ERC223 priekšrocības ar mantotajām ERC20 funkcijām. The ERC664 standarts koncentrējas uz marķiera standarta modularitāti. Šis standarts ļauj jaunināt simboliskos līgumus, taču tas ir mantojis kritisko kļūdu ERC20. Citi standarti ietver ERC721, ERC677 un ERC820, taču tie ir mazāk pazīstami.
Standartu savietojamība
Mēs jautājām Dexaran, kuri standarti ir savietojami ar atpakaļejošu datumu. Viņš mums teica, ka mums vispirms vajadzētu saprast, ko nozīmē “savietojamība ar atpakaļejošu datumu”: “Saderība ar atpakaļejošu brīdi ir sistēmas, produkta vai tehnoloģijas īpašība, kas ļauj sadarboties ar vecāku mantoto sistēmu vai ar ievadi, kas paredzēts šādai sistēmai.
ERC20 & ERC223: ERC223 marķieri ir saderīgi ar ERC20. Viss, kas paredzēts pareizi darbam ar ERC20 (piemēram, maki), var darboties arī ar ERC223. Vienīgais izņēmums šeit ir līgumi, kuru pamatā ir apstiprināt + transferFrom marķieru depozīta modeļus. Tomēr ar ERC223 marķieriem ir iespējams ieviest apstiprināt + transferFrom funkcijas, pat ja tās pašlaik nav iekļautas standartā. Kas attiecas uz seifiem un visiem trešo pušu pakalpojumiem, kas nav viedie līgumi, tie automātiski atbalsta ERC223, jo ERC20 marķiera ievades zvana dati ir derīgi ERC223.
ERC20 & ERC777: ERC777 priekšlikuma sadaļā “Atpakaļ savietojamība” varat atrast šādu paziņojumu: “Šis EIP neievieš atpakaļ nesaderību un ir saderīgs ar vecāko ERC-20 marķiera standartu.”
Tomēr Deksarans mums teica tieši pretējo un sniedza šo piemēru: “Tādi maki un pakalpojumi kā MetaMask, Mist un MyEtherWallet strādā ar ERC20 žetoniem. ERC20 marķierim paredzētais ievade ir līguma izsaukums, kurā ir kodēti parametri un funkcijas paraksts. Funkciju izsaukumus virtuālajā mašīnā Ethereum nosaka pirmie četri datu baiti, kas nosūtīti ar darījumu. Šie 4 baitu paraksti ir definēti kā pirmie četri funkcijas paraksta kanoniskā attēlojuma hash pirmie baiti. Tas nozīmē, ka funkcijām “pārsūtīšana (adrese, uint256)” un “nosūtīt (adrese, uint256)” būs dažādi paraksti. Rezultātā ievade, kas paredzēta ERC20 marķierim, nederēs ERC777 marķierim. ” Izmantojot mūsu atpakaļejošās saderības definīciju, ERC777 nav saderīgs ar ERC20 marķiera standartu.
Kad kuru standartu izmantot
ERC20: Reddit lietotājs u / Dexaran mums sniedza šo sarkastisko padomu: “Kad jūs vēlaties, lai jūsu investori zaudētu naudu kļūdu dēļ.”
ERC223: Šis marķiera standarts ir izmantojams arī kopā ar ERC777. ERC777 ir dažas elegantas funkcijas, kuru trūkst ERC223, taču ERC223 loģika ir vienkārša salīdzinājumā ar ERC777, kas var garantēt, ka tā daudz uztur mazāk kļūdām raksturīga koda. Turklāt ERC223 paļaujas ne uz vienu centrālo pakalpojumu, kas nozīmē, ka jūsu ERC223 marķieris būs atkarīgs tikai no jūsu pašu ieviešanas. Kā jau minējām iepriekš, ERC223 mērķis ir drošības uzlabojumi, taču tas padarīja ERC223 marķierus neatbilstošus ERC20 standartiem.
ERC777: Šis marķiera standarts jau ir izmantojams. No otras puses, ERC777 ir dažas iepriekš minētās drošības problēmas. Viņi paļaujas arī uz centrālo līgumu reģistru, kas arī rada bažas par drošību. Centrālais reģistrs var atvieglot izstrādātāja dzīvi, taču tas darbojas arī kā centrālais atteices punkts tieši tāpat kā ar Parity Multisig. Visi Parity Multisigs paļāvās uz centrālo kodu bibliotēku. Gadījās, ka bibliotēkā bija kļūda un tā tika izmantota. Tā rezultātā visi Parity Multisigs avarēja. Turklāt ERC777 nosaka jaunu funkciju kopu. Tas ir mēģinājums ļaut marķieru izstrādātājiem padarīt savus marķierus saderīgus gan ar ERC20, gan ar ERC777 standartiem pieņemšanas labad. Tas nozīmē, ka izstrādātājs var mantot ERC20 kļūdu ERC777, taču tas ļauj izstrādātājam izmantot vairāk darījumu apstrādes notikumu.
Vispār: Visiem marķieriem ir līdzīgs lietošanas gadījums – ICO. Es teiktu, ka ERC223 un ERC777 mēģina atrisināt vienu ERC20 problēmu dažādos veidos. ERC223 jau ieņem savu nišu Ethereum Classic ERC20 vietā.
Šis raksts tika izveidots, izmantojot Dexaran, ERC223 izstrādātāju. Tika izmantoti arī daži Pola Edža komentāri par Ethereum marķieru standartiem.