Зміст
З моменту свого запуску блокчейн Ethereum залучив розробників, бізнеси та підприємців, породивши зростаючу індустрію користувачів, які запускають
смарт -контракти та розподілені програми.
У цій статті ми розглянемо стандарт
ERC-20, важливий фреймворк для створення
токенів. Незважаючи на те, що ця структура специфічна для мережі Ethereum, вона також надихнула інші стандарти блокчейнів, такі як
BEP-2 Binance Chain.
У Ethereum ERC – це запит Ethereum на коментарі. Це технічні документи, в яких викладено стандарти програмування на Ethereum. Їх не слід плутати з пропозиціями щодо поліпшення Ethereum (EIP), які, як і BIP Bitcoin, пропонують поліпшення самого протоколу. ERC натомість націлений на встановлення угод, які спрощують взаємодію додатків і контрактів між собою.
ERC-20, створений Vitalik Buterin і Fabian Vogelsteller у 2015 році, пропонує відносно простий формат для токенів на основі Ethereum. Дотримуючись плану, розробникам не потрібно винаходити велосипед. Замість цього вони можуть побудувати фундамент, який вже використовується у галузі.
Після створення нових токенів ERC-20 вони автоматично стають сумісними зі службами і програмним забезпеченням, що підтримує стандарт ERC-20 (
програмні гаманці,
апаратні гаманці,
біржі і т.д.).
Слід зазначити, що стандарт ERC-20 був розроблений з EIP (зокрема, EIP-20). Це сталося через пару років після первинної пропозиції через його широке використання. Однак навіть через роки назва "ERC-20" прижилася.
На відміну від ETH (нативної криптовалюти Ethereum), токени ERC-20 не зберігаються на акаунтах. Токени існують тільки всередині контракту, який схожий на автономну базу даних. Він визначає правила для токенів (наприклад, назва, символ, подільність) і веде список, в якому баланси користувачів зіставляються з їх адресами Ethereum.
Щоб перемістити токени, користувачі повинні відправити транзакцію в контракт з проханням виділити частину свого балансу в іншому місці. Наприклад, якщо Аліса хоче відправити Бобу 5 000 токенів BinanceAcademyToken, вона викликає функцію всередині смарт-контракту BinanceAcademyToken з проханням зробити це.
Її виклик міститься всередині того, що виглядає як звичайна транзакція Ethereum, яка платить 0 ETH на контракт токена. Виклик включається в додаткове поле транзакції, в якому вказується, що Аліса хоче зробити – у нашому випадку переказати токени Бобу.
Незважаючи на те, що вона не відправляє ether, вона все одно повинна заплатити вказану в ньому комісію, щоб її транзакція була увімкнена у
блок. Якщо у неї немає ETH, їй потрібно отримати трохи монет, перш ніж переказати токени.
Ось реальний приклад з перерахованого вище на Etherscan: хтось робить виклик контракту BUSD. Ви можете бачити, що токени були переказані, і була сплачена комісія, хоча в поле Вартість зазначено, що було відправлено 0 ETH.
Тепер, коли ми в курсі, давайте поглянемо більш детально, щоб краще зрозуміти структуру типового контракту ERC-20.
Щоб відповідати стандарту ERC-20, ваш контракт повинен включати шість обов'язкових функцій: totalSupply, balanceOf, transfer, transferFrom, approve, та allowance. Крім того, ви можете вказати додаткові функції, такі як name, symbol, та decimal. Вам може бути зрозуміло, що роблять ці функції за їхніми іменами. Якщо ні, не хвилюйтеся - ми їх розберемо.
Нижче наведені функції в тому вигляді, в якому вони представлені на спеціально створеній мові Solidity для Ethereum.
totalSupply
function totalSupply() public view returns (uint256)
При запиті користувача вищевказана функція показує
загальну пропозицію токенів, які зберігаються у контракті.
balanceOf
function balanceOf(address _owner) public view returns (uint256 balance)
На відміну від totalSupply, balanceOf використовує параметр (адресу). Функція повертає баланс токенів цієї адреси за запитом. Пам'ятайте, що акаунти в мережі Ethereum є публічними, тому ви можете запросити баланс будь-якого користувача, якщо вам відома адреса.
transfer
function transfer(address _to, uint256 _value) public returns (bool success)
transfer вдало передає токени від одного користувача до іншого. Тут ви вказуєте адресу, на яку хочете здійснити переказ, і суму.
При виклику, transfer спрацьовує event (подія переказу), яка в основному повідомляє блокчейн увімкнути посилання на нього.
transferFrom
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
Функція transferFrom – зручна альтернатива transfer, яка забезпечує трохи більшу програмованість децентралізованих додатків. Як і transfer, вона використовується для переміщення токенів, але ці токени не обов'язково повинні належати особі, який укладає контракт.
Іншими словами, ви можете уповноважити когось, або інший договір – переказати кошти від вашого імені. Можливий варіант використання включає оплату послуг на основі підписки, коли ви не хочете вручну відправляти платіж кожен день/тиждень/місяць. Замість цього ви просто дозволяєте програмі робити це за вас.
Ця функція запускає ту саму подію, що і transfer.
approve
function transfer(address _to, uint256 _value) public returns (bool success)
approve – ще одна корисна функція з точки зору програмованості. За допомогою цієї функції ви можете обмежити кількість токенів, які смарт-контракт може зняти з вашого балансу. Без неї ви ризикуєте порушити роботу контракту (або викликати його злом) і викрадення всіх ваших коштів.
Знову візьмемо наш приклад моделі підписки. Припустимо, у вас є величезна кількість токенів BinanceAcademyTokens, і ви хочете налаштувати щотижневі регулярні платежі на потоковий
DApp. Ви зайняті читанням контенту
Binance Academy вдень і вночі, тому не хочете витрачати час щотижня на створення транзакції вручну.
У вас величезний баланс токенів BinanceAcademyTokens, який набагато перевищує суму, необхідну для оплати підписки. Щоб DApp не спустошила їх всі, ви можете встановити ліміт approve. Припустимо, ваша підписка коштує один токен BinanceAcademyToken в тиждень. Якщо ви обмежите затверджене значення двадцятьма токенами, то підписку можна буде оплатити автоматично протягом п'яти місяців.
У гіршому випадку, якщо DApp спробує зняти всі ваші кошти або якщо буде виявлена помилка, ви можете втратити тільки двадцять токенів. Можливо, це не ідеально, але, безумовно, більш привабливо, ніж втрата всіх ваших активів.
При виклику, approve ініціюється подія approval. Як і подія transfer, вона записує дані у блокчейн.
allowance
function allowance(address _owner, address _spender) public view returns (uint256 remaining)
allowance може використовуватися разом з
approve. Коли ви надали контракту дозвіл на управління своїми
токенами, ви можете використовувати це, щоб перевірити, скільки він ще може зняти. Наприклад, якщо у вашій підписці витрачено дванадцять з ваших двадцяти затверджених токенів, виклик функції
allowance повинно повернути в цілому вісім токенів.
Додаткові функції
Обговорювані раніше функції є обов'язковими. З іншої сторони, name, symbol, та decimal вказувати не потрібно, але вони можуть зробити ваш контракт ERC-20 трохи красивіше. Відповідно, вони дозволяють вам додати ім'я, встановити символ (наприклад, ETH, BTC, BNB) і вказати, на скільки знаків після коми діляться токени. Наприклад, токени, які використовуються в якості валюти, можуть отримати більше вигоди від більшої подільності, ніж токен, який представляє право власності.
Перегляньте
цей приклад на GitHub, щоб побачити ці елементи у реальному контракті.
Зібравши воєдино всі перераховані вище функції, ми отримали контракт ERC-20. Ми можемо запросити
загальну пропозицію, перевірити баланси, переказати кошти і надати доступи іншим
DApps для управління токенами за вас.
Велика частина привабливості токенів ERC-20 полягає в їх гнучкості. Викладені угоди не обмежують розробку, тому сторони можуть реалізувати додаткові функції та встановити певні параметри відповідно до своїх потреб.
Стейблкоїни
Стейблкоїни (токени, прив'язані до
фіатних валют) часто використовують стандарт токенів ERC-20. Транзакція з BUSD контрактом, на яку ми посилалися раніше, є одним із прикладів, і більшість основних стейблкоїнів також доступні у цьому форматі.
Для типового стейблкоїна, забезпеченого фіатною валютою, емітент має резерви в євро, доларах і т.д. Потім для кожної одиниці в своєму резерві вони видають токен. Це означає, що якби 10 000$ були заблоковані у сховищі, емітент міг би створити 10 000 токенів, кожен з яких може бути викуплений за 1$.
Технічно кажучи, це досить просто реалізувати на Ethereum. Емітент просто укладає контракт з 10 000 токенами. Потім він роздасть їх користувачам з обіцянкою, що пізніше вони зможуть обміняти токени на пропорційну суму у фіатній валюті.
Користувачі можуть робити ряд речей зі своїми токенами – вони можуть купувати товари та послуги або використовувати їх у DApps. В якості альтернативи вони можуть зажадати від емітента негайно обміняти їх. У цьому випадку емітент
спалює повернуті токени (роблячи їх непридатними для використання) і вилучає потрібну кількість фіатних грошей зі своїх резервів.
Контракт, який регулює цю систему, як згадувалося вище, є відносно спрощеним. Однак запуск стейблкоїна вимагає великої роботи над зовнішніми факторами, такими як логістика, відповідність нормативним вимогам і т.д.
Сек'юріті токени
Сек'юріті токени схожі на стейблкоїни. На рівні контракту обидва можуть бути ідентичними, оскільки діють однаково. Різниця відбувається на рівні емітента. Сек'юріті токени представляють цінні папери, такі як акції, облігації або фізичні активи. Часто (хоча це не завжди так) вони надають власникові певну частку у бізнесі або товар.
Утиліті токени
Утиліті токени – це, мабуть, найбільш поширені типи токенів, що зустрічаються сьогодні. На відміну від двох попередніх пропозицій, вони нічим не підкріплені. Якщо токени, забезпечені активами, схожі на акції авіакомпанії, то утиліті токени схожі на програми для часто літаючих пасажирів: вони виконують певну функцію, але не мають зовнішньої цінності. Утиліті токени можуть задовольнити безліч варіантів використання, виступаючи в якості
ігрової валюти, паливом для децентралізованих додатків, балами лояльності та багатьох інших.
Користувачі можуть майнити ether (ETH), але не токени – токени карбуються при створенні нових одиниць. При запуску контракту розробники розподіляють поставки у відповідності зі своїми планами і дорожньою картою.
Як правило, це робиться за допомогою
Первинної пропозиції монет (ICO),
Первинної біржової пропозиції (IEO), або пропозиції сек'юріті токенів (STO). Ви можете зустріти варіанти цих скорочень, але ці поняття дуже схожі. Інвестори відправляють ether на адресу контракту і натомість отримують нові токени. Зібрані гроші використовуються для фінансування подальшого розвитку проєкту. Користувачі очікують, що зможуть використовувати свої токени (відразу або пізніше) або перепродувати їх для отримання прибутку в міру розвитку проєкту.
Розподіл токенів не вимагає автоматизації. Багато краудфандінгових заходів дозволяють користувачам розплачуватися різними цифровими валютами (такими як BNB, BTC, ETH і USDT). Потім відповідні баланси розподіляються за адресами, наданими користувачами.
Плюси ERC-20 токенів
Взаємозамінність
Токени ERC-20
взаємозамінні – кожна одиниця взаємозамінна з іншою. Якщо у вас є токен BinanceAcademyToken, не має значення, який у вас конкретний токен. Ви можете обміняти їх на чужі токени, і вони залишаться функціонально ідентичними, як гроші або золото.
Це ідеально, якщо ваш токен націлений на якусь валюту. Вам не потрібні окремі одиниці з помітними рисами, які зробили б їх невзаємозамінними. Це може привести до того, що деякі токени стануть більш-менш цінними, ніж інші, що підірве їх ціль.
Безстрокові
Як ми досліджували в попередньому розділі, токени ERC-20 легко налаштовуються і можуть бути адаптовані для безлічі різних додатків. Наприклад, їх можна використовувати в якості внутрішньоігрової валюти, в програмах нарахування лояльності, як цифрові
предмети колекціонування або навіть для представлення образотворчого мистецтва і прав власності.
Популярне
Популярність стандарту ERC-20 в індустрії криптовалют – вагома причина використовувати його в якості зразка. Існує безліч бірж, гаманців і смарт-контрактів, вже сумісних з недавно запущеними токенами. Більш того, підтримка розробників і документація велика.
Мінуси ERC-20 токенів
Масштабованість
Як і багато мереж криптовалют, Ethereum не застрахований від зростання. У нинішньому вигляді мережа погано масштабується – спроба відправити транзакцію в години пік призводить до високих комісій і затримок. Якщо ви запускаєте токен ERC-20 і мережа стає перевантаженою, це може вплинути на її зручність використання.
Це не проблема тільки Ethereum. Швидше, це необхідний компроміс у безпечних розподілених системах. Спільнота планує вирішити ці проблеми при переході на
Ethereum 2.0, в якому будуть реалізовані оновлення, такі як
Ethereum Plasma і
Ethereum Casper.
Шахрайство
Хоча це не проблема з самою технологією, легкість, з якою токен може бути запущений, може вважатися недоліком у деяких аспектах. Створення простого токена ERC-20 вимагає мінімальних зусиль, а це означає, що будь-хто може зробити це – добре чи погано.
Таким чином, ви повинні бути обережні з тим, у що ви інвестуєте. Існує ряд схем
Пірамід і схем Понзі, замаскованих під блокчейн проєкти.
Проведіть власне дослідження перш ніж інвестувати кошти, щоб прийти до власних висновків про те, чи є можливість законною.
ERC-20 був першим (і на сьогоднішній день найпопулярнішим) стандартом токенів Ethereum, але ні в якому разі не єдиним. За минулі роки з'явилося багато інших, що пропонують поліпшення ERC-20 або намагаються досягти інших цілей.
Деякі з менш поширених стандартів – це стандарти, які використовуються у
невзаємозамінних токенах (NFT). Іноді ваш варіант використання дійсно виграє від наявності унікальних токенів з різними атрибутами. Якщо ви хочете токенізувати унікальний витвір мистецтва, ігровий актив і т.д, один з цих типів контрактів може бути більш привабливим.
Наприклад, стандарт
ERC-721 використовувався для надзвичайно популярного DApp "CryptoKitties". Такий контракт надає користувачам
API для створення нативних невзаємозамінних токенів і кодування
метаданих (зображень, описів і т.д).
Стандарт ERC-1155 можна розглядати як поліпшення як ERC-721, так і ERC-20. Він описує стандарт, який підтримує як взаємозамінні, так і невзаємозамінні токени в одному контракті.
Інші варіанти, такі як ERC-223 або ERC-621, спрямовані на підвищення зручності використання. Перший реалізує запобіжні заходи для запобігання випадковим переказам токенів. Останній додає додаткові функції для збільшення та зменшення кількості токенів.
Стандарт ERC-20 домінував у просторі криптоактивів протягом багатьох років, і неважко зрозуміти, чому. З відносною легкістю будь-хто може розгорнути простий контракт для широкого спектра сценаріїв використання (утиліті токени, стейблкоїни і т.д.). Проте, ERC-20 дійсно позбавлений деяких функцій, втілених у життя іншими стандартами. Ще невідомо, чи займуть його місце наступні типи контрактів.