вступ
Ethereum був заснований Віталіком Бутеріним у 2014 році, позиціонуючи себе як платформу з відкритим кодом для запуску децентралізованих програм (DApps). Багато спонукань Бутеріна для створення нового блокчейну випливали з недостатньої гнучкості протоколу Bitcoin.
З моменту свого запуску блокчейн Ethereum залучив розробників, компанії та підприємців, породивши зростаючу індустрію користувачів, які запускають смарт-контракти та розподілені програми.
У цій статті ми розглянемо стандарт ERC-20, важливу структуру для створення токенів. Хоча це специфічно для мережі Ethereum, фреймворк також надихнув інші стандарти блокчейну, такі як BEP-2 Binance Chain.
Що таке стандарт ERC-20?
В Ethereum ERC — це запит Ethereum на коментарі. Це технічні документи, які описують стандарти програмування на Ethereum. Їх не слід плутати з пропозиціями щодо вдосконалення Ethereum (EIP), які, як і BIP біткойна, пропонують покращення самого протоколу. Натомість ERC мають на меті встановити конвенції, які спрощують взаємодію додатків і контрактів один з одним.
ERC-20, створений Віталіком Бутеріним і Фабіаном Фогельстеллером у 2015 році, пропонує відносно простий формат для токенів на основі Ethereum. Дотримуючись схеми, розробникам не потрібно винаходити колесо. Натомість вони можуть створити основу, яка вже використовується в галузі.
Після створення нових токенів ERC-20 вони автоматично взаємодіють із службами та програмним забезпеченням, що підтримує стандарт ERC-20 (гаманці програмного забезпечення, апаратні гаманці, біржі тощо).
Слід зазначити, що стандарт ERC-20 був розроблений в EIP (конкретно EIP-20). Це сталося через кілька років після початкової пропозиції через його широке використання. Однак навіть через роки назва «ERC-20» прижилася.
Короткий підсумок про токени Ethereum
На відміну від ETH (власної криптовалюти Ethereum), токени ERC-20 не зберігаються в облікових записах. Токени існують лише всередині контракту, який схожий на самодостатню базу даних. Він визначає правила для токенів (тобто назва, символ, подільність) і зберігає список, який відображає баланси користувачів на їхні адреси Ethereum.
Щоб перемістити токени, користувачі повинні надіслати транзакцію контракту з проханням розподілити частину свого балансу в іншому місці. Наприклад, якщо Аліса хоче надіслати Бобу 5000 токенів BinanceAcademyToken, вона викликає функцію в смарт-контракті BinanceAcademyToken із запитом зробити це.
Її виклик міститься в тому, що виглядає як звичайна транзакція Ethereum, яка сплачує 0 ETH за контракт на токен. Виклик включено в додаткове поле транзакції, яке визначає, що Аліса хоче зробити – у нашому випадку передати токени Бобу.
Незважаючи на те, що вона не надсилає ефір, вона все одно повинна сплатити комісію, деноміновану в ньому, щоб її транзакція була включена в блок. Якщо у неї немає ETH, їй потрібно отримати трохи, перш ніж передавати токени.
Ось реальний приклад вищесказаного на Etherscan: хтось робить виклик за контрактом BUSD. Ви можете побачити, що токени було передано та сплачено комісію, навіть якщо поле «Вартість» показує, що було надіслано 0 ETH.
Тепер, коли ми все в курсі, давайте заглянемо в глибину, щоб краще зрозуміти структуру типового контракту ERC-20.
Як створюються токени ERC-20?
Щоб відповідати вимогам ERC-20, ваш контракт має містити шість обов’язкових функцій: totalSupply, balanceOf, transfer, transferFrom, approve та accountance. Крім того, ви можете вказати додаткові функції, такі як ім’я, символ і десятковий знак. Вам може бути зрозуміло, що ці функції роблять, з їхніх імен. Якщо ні, не хвилюйтеся – ми їх розберемо.
Нижче наведено функції, як вони відображаються в спеціально створеній мові Solidity Ethereum.
totalSupply
функція totalSupply() публічний перегляд повертає (uint256)
Коли користувач викликає цю функцію, вона повертає загальну кількість токенів, які містить контракт.
balanceOf
функція balanceOf(address _owner) публічний перегляд повертає (uint256 баланс)
На відміну від totalSupply, balanceOf приймає параметр (адресу). При виклику він повертає баланс токенів цієї адреси. Пам’ятайте, що облікові записи в мережі Ethereum є загальнодоступними, тому ви можете запитати баланс будь-якого користувача, якщо знаєте адресу.
передача
функція transfer(address _to, uint256 _value) public повертає (bool успіх)
transfer точно передає маркери від одного користувача до іншого. Тут ви вказуєте адресу, на яку хочете надіслати, і суму для переказу.
Під час виклику передача запускає щось, що називається подією (в даному випадку передача події), яка в основному повідомляє блокчейну включити посилання на нього.
передачаВід
функція transferFrom(адреса _від, адреса _до, uint256 _значення) публічне повернення (логічний успіх)
Функція transferFrom — це зручна альтернатива передачі, яка забезпечує трохи більше можливостей програмування в децентралізованих програмах. Як і передача, він використовується для переміщення токенів, але ці токени не обов’язково належать особі, яка викликає контракт.
Іншими словами, ви можете уповноважити когось – або інший договір – переказувати кошти від вашого імені. Можливий варіант використання передбачає оплату послуг на основі передплати, де ви не хочете вручну надсилати платіж щодня/тижня/місяця. Замість цього ви просто дозволяєте програмі зробити це за вас.
Ця функція запускає ту саму подію, що й передача.
затвердити
функція approve(address _spender, uint256 _value) публічне повернення (bool успіх)
approve є ще однією корисною функцією з точки зору програмування. За допомогою цієї функції ви можете обмежити кількість токенів, які смарт-контракт може вилучити з вашого балансу. Без цього ви ризикуєте несправністю контракту (або його використання) та викраденням усіх ваших коштів.
Знову візьмемо наш приклад моделі підписки. Припустімо, що у вас є величезна кількість BinanceAcademyTokens, і ви хочете налаштувати щотижневі повторювані платежі для потокового DApp. Ви вдень і вночі зайняті читанням вмісту Binance Academy, тож не хочете щотижня витрачати час на створення транзакцій вручну.
У вас є величезний баланс BinanceAcademyTokens, який значно перевищує необхідний для оплати підписки. Щоб запобігти виснаженню DApp усіх, ви можете встановити обмеження за допомогою approve. Припустімо, що ваша підписка коштує один BinanceAcademyToken на тиждень. Якщо ви обмежите схвалену вартість двадцятьма токенами, ви зможете отримати автоматичну оплату підписки протягом п’яти місяців.
У гіршому випадку, якщо DApp спробує вивести всі ваші кошти або якщо буде виявлено помилку, ви можете втратити лише двадцять токенів. Можливо, це не ідеально, але, безперечно, привабливіше, ніж втрата всіх ваших володінь.
Під час виклику approve запускає подію затвердження. Як і подія передачі, він записує дані в блокчейн.
надбавка
функція надбавка (адреса _власник, адреса _spender) повертає публічний перегляд (залишилося uint256)
надбавку можна використовувати разом із затвердити. Якщо ви надали дозвіл контракту на керування своїми токенами, ви можете використовувати це, щоб перевірити, скільки він ще може зняти. Наприклад, якщо ваша підписка використала дванадцять із двадцяти затверджених токенів, виклик функції дозволу має повернути вісім.
Додаткові функції
Обговорені раніше функції є обов’язковими. З іншого боку, назву, символ і десяткову дробу включати не потрібно, але вони можуть зробити ваш контракт ERC-20 трохи красивішим. Відповідно, вони дозволяють додати зрозумілу людині назву, встановити символ (наприклад, ETH, BTC, BNB) і вказати, на скільки знаків після коми діляться токени. Наприклад, токени, які використовуються як валюти, можуть отримати більше переваг від того, що вони більш подільні, ніж токени, які представляють право власності на власність.
Перегляньте цей приклад на GitHub, щоб побачити ці елементи в реальному контракті.
Що можуть робити токени ERC-20?
Об’єднавши всі перераховані вище функції, ми отримали контракт ERC-20. Ми можемо запитувати загальну пропозицію, перевіряти баланси, переказувати кошти та надавати дозволи іншим DApps керувати токенами замість нас.
Значною частиною привабливості токенів ERC-20 є їх гнучкість. Викладені угоди не обмежують розробку, тому сторони можуть впроваджувати додаткові функції та встановлювати конкретні параметри відповідно до своїх потреб.
Стайблкойни
Стайблкойни (токени, прив’язані до фіатних валют) часто використовують стандарт токенів ERC-20. Транзакція з контрактом BUSD, про яку ми згадували раніше, є одним із прикладів, і більшість основних стейблкоїнів також доступні в цьому форматі.
Для типового стейблкойна, забезпеченого фіатною валютою, емітент має резерви в євро, доларах тощо. Потім для кожної одиниці в своєму резерві він випускає токен. Це означає, що якби 10 000 доларів США були замкнені в сховищі, емітент міг би створити 10 000 токенів, кожен з яких можна було обміняти за 1 долар США.
Технічно це досить легко реалізувати в Ethereum. Емітент просто запускає контракт із 10 000 токенів. Потім вони роздадуть їх користувачам з обіцянкою, що пізніше вони зможуть обміняти токени на пропорційну кількість фіатної валюти.
Користувачі можуть робити багато речей зі своїми токенами – вони можуть купувати товари та послуги або використовувати їх у DApps. Крім того, вони можуть вимагати, щоб емітент негайно їх обміняв. У цьому випадку емітент спалює повернуті токени (роблячи їх непридатними для використання) і вилучає правильну кількість фіатних грошей зі своїх резервів.
Договір, який регулює цю систему, як було сказано вище, відносно спрощений. Однак запуск стейблкойна вимагає багато роботи над зовнішніми факторами, такими як логістика, дотримання нормативних вимог тощо.
Жетони безпеки
Токени безпеки схожі на стейблкойни. На рівні контракту обидва можуть навіть бути ідентичними, оскільки вони функціонують однаково. Розрізнення відбувається на рівні емітента. Токени безпеки представляють цінні папери, такі як акції, облігації або фізичні активи. Часто (хоча це не завжди так) вони надають власнику певну частку в бізнесі чи товарі.
Жетони корисності
Утилітарні жетони є, мабуть, найпоширенішими типами токенів, які зустрічаються сьогодні. На відміну від попередніх двох пропозицій, вони нічим не підкріплені. Якщо токени, забезпечені активами, схожі на акції авіакомпанії, то корисні токени схожі на програми для часто літаючих клієнтів: вони виконують певну функцію, але не мають зовнішньої цінності. Утилітарні токени можуть задовольнити безліч варіантів використання, слугуючи внутрішньоігровою валютою, паливом для децентралізованих програм, балами лояльності та багато іншого.
➠ Хочете почати роботу з криптовалютою? Купуйте ефір на Binance!
Чи можете ви майнити токени ERC-20?
Ви можете майнити ефір (ETH), але токени не можна майнити – ми кажемо, що вони карбуються, коли створюються нові. Після запуску контракту розробники розподіляють поставки відповідно до своїх планів і дорожньої карти.
Як правило, це робиться за допомогою початкової пропозиції монет (ICO), початкової пропозиції обміну (IEO) або пропозиції токенів безпеки (STO). Ви можете зустріти варіації цих абревіатур, але ці поняття досить схожі. Інвестори надсилають ефір на адресу контракту, а натомість отримують нові токени. Зібрані кошти використовуються для подальшого розвитку проекту. Користувачі очікують, що зможуть використовувати свої токени (одразу або пізніше) або перепродати їх з прибутком у міру розвитку проекту.
Розповсюдження токенів не потрібно автоматизувати. Багато краудфандингових заходів дозволяють користувачам платити різними цифровими валютами (наприклад, BNB, BTC, ETH і USDT). Потім відповідні баланси розподіляються за адресами, наданими користувачами.
Плюси і мінуси токенів ERC-20
Плюси токенів ERC-20
Замінний
Токени ERC-20 взаємозамінні – кожна одиниця взаємозамінна іншою. Якби у вас був BinanceAcademyToken, не було б важливо, який саме токен у вас був. Ви можете обміняти його на когось іншого, і вони все одно будуть функціонально ідентичними, як готівка чи золото.
Це ідеально, якщо ваш токен має на меті бути певною валютою. Вам не потрібні окремі одиниці з помітними рисами, що зробило б їх незамінними. Це може призвести до того, що деякі токени стануть більш або менш цінними, ніж інші, підриваючи їхнє призначення.
гнучкий
Як ми досліджували в попередньому розділі, токени ERC-20 легко налаштовуються та адаптуються до багатьох різних програм. Наприклад, їх можна використовувати як внутрішньоігрову валюту, у програмах лояльності, як цифрові предмети колекціонування або навіть для представлення образотворчого мистецтва та майнових прав.
Популярний
Популярність ERC-20 в індустрії криптовалют є вагомою причиною використовувати його як план. Існує безліч бірж, гаманців і смарт-контрактів, які вже сумісні з нещодавно випущеними токенами. Більше того, підтримка розробників і документація в достатку.
Мінуси токенів ERC-20
Масштабованість
Як і у випадку з багатьма криптовалютними мережами, Ethereum не застрахований від хвороб зростання. У своїй поточній формі він погано масштабується – спроба відправити транзакцію в години пік призводить до високих комісій і затримок. Якщо ви запустите маркер ERC-20 і мережа перевантажиться, це може вплинути на зручність використання.
Це проблема не лише Ethereum. Швидше, це необхідний компроміс у безпечних розподілених системах. Спільнота планує вирішити ці проблеми під час переходу на Ethereum 2.0, який запровадить такі оновлення, як Ethereum Plasma та Ethereum Casper.
Дізнайтеся більше про проблеми масштабованості в Blockchain Scalability: Sidechains and Payment Channels.
Шахрайство
Хоча це не проблема самої технології, легкість запуску токена в деяких аспектах може вважатися недоліком. Для створення простого токена ERC-20 потрібно мінімум зусиль, а це означає, що будь-хто міг би це зробити – добре чи погано.
Таким чином, ви повинні бути обережними з тим, у що ви інвестуєте. Існує ряд пірамід і схем Понці, замаскованих під блокчейн-проекти. Перш ніж інвестувати, проведіть власне дослідження, щоб дійти власних висновків щодо законності можливості.
ERC-20, ERC-1155, ERC-223, ERC-721 – яка різниця?
ERC-20 був першим (і на сьогоднішній день найпопулярнішим) стандартом токенів Ethereum, але аж ніяк не єдиним. За ці роки з’явилося багато інших, які або пропонували вдосконалення ERC-20, або намагалися досягти зовсім інших цілей.
Деякі з менш поширених стандартів – це стандарти, які використовуються в незамінних токенах (NFT). Іноді ваш варіант використання дійсно виграє від наявності унікальних маркерів з різними атрибутами. Якщо ви хочете токенізувати унікальний витвір мистецтва, внутрішньоігровий актив тощо, один із цих типів контрактів може бути більш привабливим.
Стандарт ERC-721, наприклад, використовувався для надзвичайно популярного DApp CryptoKitties. Такий контракт надає користувачам API для карбування власних незамінних токенів і кодування метаданих (зображень, описів тощо).
Стандарт ERC-1155 можна розглядати як покращення як ERC-721, так і ERC-20. Він описує стандарт, який підтримує взаємозамінні та незамінні токени в одному контракті.
Інші варіанти, такі як ERC-223 або ERC-621, спрямовані на покращення зручності використання. Перший реалізує запобіжні заходи для запобігання випадковим передачам токенів. Останній додає додаткові функції для збільшення та зменшення пропозиції токенів.
Щоб отримати додаткові відомості про NFT, обов’язково ознайомтеся з Посібником із криптовалютних предметів колекціонування та незамінних токенів (NFT).
Закриття думок
Стандарт ERC-20 роками домінував у сфері криптоактивів, і неважко зрозуміти чому. З відносною легкістю будь-хто може розгорнути простий контракт для широкого спектру випадків використання (корисні токени, стейблкойни тощо). Тим не менш, ERC-20 не має деяких функцій, впроваджених іншими стандартами. Залишається побачити, чи наступні типи контрактів займуть його місце.