Сравняване на ERC20, ERC223 и новия стандарт за маркери Ethereum ERC777
Всички сте запознати с токените ERC20, тъй като вероятно притежавате двойка, разпределена чрез някаква продажба на символи. Но знаете ли, че съществуват много повече стандарти освен ERC20? Ethereum има дълга история на разработени стандарти.
За да ви даде по-добра представа за това какво означава ERC, това означава „Искане за коментар на Ethereum“. Това е предложение, внесено за обсъждане и предложения за действителния стандарт. Номерът (като 20) се отнася до номер на издание в платформата за споделяне на код Github. Първо, нека да разгледаме стандарта ERC20.
Стандарт ERC20
Какво точно е стандартът ERC20?
Появата на токените ERC20 революционизира пазара на криптовалути и отвори вратата към изобилието от ICO криптовалута проекти, на които светът стана свидетел през 2017 г. Въведен през 2015 г., кодът ERC20 очертава специфичен списък с правила, които даден Ethereum базиран маркер трябва да разгърне, опростявайки процеса на програмиране на функциите на токени в блокчейна на Ethereum. По принцип токените ERC20 са специални форми на интелигентни договори, които използват блокчейна на Ethereum.
Най-известните примери за токени ERC20 включват Bancor, EOS, Tronix, BNB, VeChain и Bankex.
Преди иновацията на стандарта ERC20 за токени Ethereum, кодерите трябваше да създадат специфични стандарти за изпълнение за разработване на токен и пускането му в мрежата на Ethereum. Независимо от това, кодът на маркера ERC20 опрости процеса на създаване на токени, благодарение на рационализиран протокол и стандарти за интелигентни договори. Кодът ERC20 облекчава сложността, свързана с изпълнението на интелигентните договори на токена, което значително намалява възможността за нарушаване на договорите на токена.
Към април 2018 г. има 66 468 ERC20 токен договори, благодарение на еднообразието на кода на символите, предоставено от стандарта ERC20, което улесни обмена на криптовалути при изброяването на различни токени на техните платформи за търговия. Като такъв, стандартът ERC20 е помогнал на крипто общността да преодолее проблемите с ликвидността, които биха могли да свържат такъв огромен брой базирани на Ethereum токени.
Функции на токени ERC20:
Кодът ERC20 очертава шест специфични функции за жетони, които са
1- Получаване на общото предлагане на жетони чрез "totalSupply" функция
2- Извличане на токен баланса на друга сметка, свързана с "_ собственик" адрес чрез " balanceOf (адрес _owner) постоянни връщания (uint256 баланс)" функция.
3- Изпращане на определено количество токени "_ стойност" до даден адрес чрез " transfer (адрес _to, uint256 _value) връща (bool успех)" функция.
4- Изпращане на определено количество токени "_ стойност" от един токен (договор) адрес до друг маркер (договор) адрес чрез "transferFrom (address _from, address _to, uint256 _value) връща (bool успех)" функция.
5- Активиране на определен акаунт за теглене на токени от нечия сметка многократно, като същевременно се дефинира горната граница за количеството токени, които трябва да бъдат изтеглени с "_ стойност" параметър. Това може да се постигне чрез "одобрява (адрес _spender, uint256 _value) връща (bool успех)". Горната граница за изтегляне, т.е. "_ стойност" параметър, може да бъде заменен при извикване на функцията.
6- Връщане на остатъчното количество токени, в рамките на предварително зададената сума, дефинирана от горната граница, позволена да бъде изразходвана от "_разход" да тегли от сметката на "_ собственик". Това може да се изпълни чрез "квота (адрес * _владелец *, адрес * _spender *) постоянни връщания (остава uint256)" функция.
Тези шест функции, дефинирани от ERC20 кода, представляват проблеми с функционалността на крайъгълния камък, които включват как тези маркери ще бъдат прехвърлени между различни акаунти и как потребителите могат да извличат данни, свързани с даден ERC20 маркер. Тези групи функции са предписани, за да гарантират, че базирани на Ethereum жетони ще функционират по подобен начин в която и да е част от платформата на Ethereum. Като такива, всички крипто портфейли, които са съвместими с етерната монета, също ще поддържат токени, базирани на стандарта ERC20.
Критична грешка:
ERC20 е първият стандарт на Ethereum. Както често се случва с новия код, той съдържа някои грешки или логически грешки. ERC20 предполага два начина за извършване на символична транзакция. На първо място, функцията за прехвърляне ви позволява да изпращате жетони на нечий адрес. Ако искате да депозирате токени за интелигентен договор, трябва да използвате комбинацията ‘одобрение + прехвърлянеОт’. Трябва да упълномощите този договор да изтегли вашите токени чрез функцията за одобрение. След това трябва да извикате функция на договор, която ще обработва вашия депозит и ще изтегли вашите токени чрез функцията transferFrom.
Какво ще стане, ако депозирате токени случайно на договор с функцията за прехвърляне? Транзакцията ще успее, но тази транзакция няма да бъде разпозната от договора за получател. Например, ако изпратите токени към договор за децентрализиран обмен, тогава договорът за обмен ще получи вашите токени, но няма да кредитира тези токени към баланса ви на обменния токен. Освен това, ако децентрализираният договор за обмен не изпълнява функция за спешно извличане на токени, тогава е невъзможно да върнете вашите токени във всеки случай, което води до трайна загуба на токените. Поради тази грешка, екосистемата Ethereum вече е загубила милиони долари.
Защо все още използваме стандарта ERC20?
Потребител на Reddit u / Дексаран, създател на стандарта ERC223, е един от първите разработчици, които са уведомили общността за гореспоменатата грешка. Попитахме го защо ERC20 все още се използва толкова широко, дори когато знаем за тази критична грешка. Той посочи следните причини:
- Заради престъпната безотговорност на разработчиците на символи за техните дела.
- Тъй като Ethereum Foundation все още популяризира стандарта за токени ERC20, дори когато се знае, че съдържа грешки. Същата ситуация като при TheDAO по-рано. Те трябва да кажат "Спри това сега" но те няма.
- Защото основната причина за развитието на токените е по-скоро грабването на средства, отколкото създаването на продукт.
- Тъй като използването на различен стандарт ще доведе до по-високи мрежови ефекти. Това не е това, от което наистина се нуждаем, като се има предвид, че мрежата Ethereum вече има проблеми с мащабируемостта.
Стандарт ERC223
The ERC223 стандартът беше предложен от u / Dexaran, който помогна за създаването на тази статия. ERC223 е стандартен символ, който позволява на трансферите на токени да се държат точно като етерни транзакции. ERC223 използва обработка на събития (счита транзакцията за събитие), за да предотврати загубата на маркери при необработени транзакции. Този подобрен стандарт разрешава критичната грешка на ERC20, като прави функцията за прехвърляне да извежда грешка при невалидни преводи и да анулира транзакцията, за да не се губят средства. Накратко, ERC223 се фокусира върху сигурност.
Допълнения и проблеми
ERC223 добавя допълнителен параметър за данни към функцията за прехвърляне, за да позволи по-сложни операции, отколкото просто прехвърляне на символи.
Основната грижа на Dexaran е, че твърде много хора могат да загубят своите токени, като ги изпратят на договори, използвайки функцията за прехвърляне, а не методите за одобрение и трансфер от както беше обсъдено по-рано. Неговото решение е да модифицира метода на прехвърляне, за да провери дали получаващият адрес е договор (т.е. съдържа данни) или не. Ако е договор, тогава се приема, че има функция tokenFallback, която да го извика обратно. Основната слабост е, че ако tokenFallback не съществува, тогава ще бъде извикана резервната функция на договора за получаване и изпратените токени все още могат да бъдат загубени.
Стандарт ERC777
ERC777 е нов заменяем стандарт на токени, който разчита на ERC820 (Договор за псевдоинтроспекция на договор) и се опитва да реши проблемите на ERC20, като липса на механизми за обработка на транзакции, които доведоха до загубата на милиони долари от екосистемата Ethereum. Накратко, ERC777 се фокусира върху осиновяване като предлагате a широк спектър от механизми за обработка на транзакции.
Ползи
Основното предимство на ERC777 е, че използва нов метод за разпознаване на договорния интерфейс. Този стандарт предполага, че в мрежата на Ethereum има централен регистър на договорите (това е определено в ERC820). Всеки може да се позове на този регистър, за да знае дали определен адрес (няма значение дали този адрес е договор или не) поддържа определен набор от функции, т.е. „интерфейс“.
Един от основните проблеми на Ethereum е невъзможността да се знае какви функции изпълнява договорът. ERC820 е предназначен да реши това. ERC777 се възползва от този подход, което определено е добра идея.
От друга страна, можете да създадете маркер, който да изпълнява функциите по подразбиране на ERC20 заедно с новите функции ERC777, без да замества (и по желание да наследява критичната грешка на ERC20). Това може да гарантира добър мрежов ефект за този нов стандарт на символи и по-бързо приемане. Както показва практиката, основната цел на разработчиците на токени е да съберат пари, което предполага, че трябва да изтласкат своите токени към борси. По-лесно е за борсите да поддържат маркер, който реализира наследени ERC20 функции (няма значение дали тези функции съдържат грешки или не), без да се правят изследвания върху по-новите функционалности на новите стандарти за маркери. Колкото по-лесно е за борсите да поддържат токени по нов стандарт, толкова повече разработчици ще го използват. Това ускорява приемането на ERC777, докато на ERC223 липсва това свойство.
Какво е различното?
Този стандарт за лексеми дефинира напълно нов набор от функции, т.е. функции за изпращане вместо функции за прехвърляне. `authoriseOperator` вместо” одобрение “. Функция за обработка на “tokensReceived” вместо функция за обработка на “tokenFallback”.
Такъв подход може да гарантира, че функциите на този стандарт няма да се пресичат и отменят с функции на който и да е друг стандарт на маркера, поради което е възможно да се направи токен, който да бъде съвместим едновременно със стандартите ERC777 и ERC820.
Най-накрая ERC777 стандартизира Mint and Burn функционалност на жетони.
Точки за провал и опасения за сигурността
ERC777 изпълнява функцията `autoriseOperator`, която позволява на някой да управлява жетони от ваше име. Дексаран ни обясни, че смята, че този метод е остарял и не трябва да се използва. Освен това, упълномощаването на някой да управлява токени от ваше име вреди на честотната лента на мрежата и изисква повече газ. „authoriseOperator“ вече представлява една транзакция и за извършване на. е необходима друга транзакция "разрешено оттегляне". И така, за извършване на прехвърляне са необходими две транзакции, които могат да бъдат направени само с една транзакция.
След това стандартът ERC777 съдържа незадължителен флаг за предотвратяване на залепване на маркери чрез извършване на някои проверки за интерфейса на ITokenRecipient и за проверка дали адресът е в белия списък. Тъй като този стандарт е фокусиран върху сигурността на мрежа, която обработва токени на стойност милиони долари, не е добре тези проверки да бъдат незадължителни.
Други стандарти
Има много други стандарти като ERC827 който съчетава някои предимства на ERC223 със старите функции ERC20. The ERC664 Стандартът се фокусира върху модулността на стандарта за токени. Този стандарт позволява надграждането на символни договори, но той е наследил критичната грешка ERC20. Други стандарти включват ERC721, ERC677 и ERC820, но те са по-малко известни.
Съвместимост между стандартите
Попитахме Dexaran кои стандарти са обратно съвместими. Той ни каза, че първо трябва да разберем какво означава „обратна съвместимост“: „Обратната съвместимост е свойство на система, продукт или технология, която позволява оперативна съвместимост с по-стара наследствена система или с вход, предназначен за такава система.“
ERC20 & ERC223: Токените ERC223 са съвместими с ERC20. Всичко, което е проектирано да работи правилно с ERC20 (като портфейли), може да работи и с ERC223. Единственото изключение тук са договори, които разчитат на одобрение + трансферОт депозитни символи. Възможно е обаче да се приложат функции одобрение + прехвърлянеОт маркери с ERC223, дори и да не са включени в стандарта в момента. Що се отнася до портфейлите и услугите на трети страни, които не са интелигентни договори, те поддържат ERC223 автоматично, защото входните данни за повикване на токена ERC20 са валидни за ERC223.
ERC20 & ERC777: Можете да намерите следното изявление в раздела „Обратна съвместимост“ на предложението за ERC777: „Този EIP не въвежда обратни несъвместимости и е съвместим с по-стария стандарт на ERC-20 токен.“
Dexaran обаче ни каза точно обратното и ни даде този пример: „Такива портфейли и услуги като MetaMask, Mist и MyEtherWallet работят с токени ERC20. Входът, който е проектиран за токена ERC20, е извикване на договор, което съдържа кодирани параметри и подпис на функция. Извикванията на функции във виртуалната машина Ethereum се определят от първите четири байта данни, изпратени с транзакция. Тези 4-байтови подписи са дефинирани като първите четири байта на хеша на каноничното представяне на сигнатурата на функцията. Това означава, че функциите `transfer (address, uint256)` и `send (address, uint256)` ще имат различни подписи. В резултат на това входът, проектиран за маркера ERC20, няма да е валиден за маркера ERC777. ” Тъй като използваме определението си за обратна съвместимост, ERC777 не е съвместим със стандарта за маркери ERC20.
Кога да се използва кой стандарт
ERC20: Потребителят на Reddit u / Dexaran ни даде този саркастичен съвет: „Когато искате инвеститорите ви да губят пари поради грешки.“
ERC223: Този стандарт за лексеми също може да се използва заедно с ERC777. ERC777 има някои елегантни функции, които липсват на ERC223, но логиката на ERC223 е ясна в сравнение с ERC777, което може да гарантира, че съвпада много по-малко предразположен към грешки код. Освен това ERC223 не разчита на никоя централна услуга, което означава, че вашият ERC223 токен ще зависи само от вашето собствено изпълнение. Както споменахме по-рано, ERC223 цели подобрения в сигурността, но това направи ERC223 маркери несъответстващи на стандартите ERC20.
ERC777: Този стандарт на токени вече е използваем. От друга страна, ERC777 има някои проблеми със сигурността, както бе споменато по-горе. Те също така разчитат на централния регистър на договорите, което също е проблем за сигурността. Централният регистър може да улесни живота на разработчика, но също така действа като централна точка на повреда, точно както беше при Parity Multisig. Всички Parity Multisigs разчитаха на централна библиотека с кодове. Случвало се е да има грешка в библиотеката и тя да бъде експлоатирана. В резултат на това всички Parity Multisigs се сринаха. В допълнение, ERC777 дефинира нов набор от функции. Това е опит да се позволи на разработчиците на токени да направят своите маркери съвместими едновременно със стандартите ERC20 и ERC777 за приемане. Това означава, че разработчикът може да наследи грешка на ERC20 в ERC777, но позволява на разработчика да използва повече събития за обработка на транзакции.
Общо взето: Всички токени имат подобен случай на използване – ICO. Бих казал, че ERC223 и ERC777 се опитват да разрешат един проблем на ERC20 по различни начини. ERC223 вече заема нишата си Ethereum Classic вместо ERC20.
Тази статия е създадена с помощта на Dexaran, разработчика на ERC223. Използвани са и някои от коментарите на Paul Edge относно стандартите за маркери на Ethereum.