Введення в ERC-20 токени
Блокчейн Ethereum був заснований Віталіком Бутеріним в 2014 році, як платформа з відкритим вихідним кодом для запуску децентралізованих додатків. Причиною цього був той факт, що у протоколу першої криптовалюти – Bitcoin, були серйозні проблеми з гнучкістю і адаптивністю.
Новий блокчейн дуже швидко оцінили як розробники, таки і потенційні інвестори, за рахунок чого дуже швидко утворилася повноцінна індустрія, що працює на основі розподілених додатків і смарт-контрактів.
І одним з її важливих складових став фреймворк ERC-20, який використовується для створення нових токенів або жетонів, здатних взаємодіяти з Ethereum. Що цікаво - цей адаптивний механізм надихнув розробників біткоіна на створення схожого стандарту - BEP-2.
Що таке ERC-20?
ERC - це «Ethereum Request for Comments» або «Запит Ефіріума у відповідь на коментарі». По суті - різновид технічних документів, які описують стандарт програмування в цьому блокчейні. Їх не варто плутати з Ethereum Improvement Proposals (EIPs) (Пропозиції щодо поліпшення Ефіріума), які, як і BIPs біткоіна, пропонуюсь поліпшення і зміни базового протоколу. ERC працює інакше - шляхом встановлення угод, які забезпечують і полегшують взаємодію між окремими додатками і смарт-контрактами.
Віталік Бутерін і Фабіан Фогельстеллер запропонували простий формат ERC-20 ще в 2015 році. Згідно їх задумом, це потрібно було для того, щоб розробники не винаходили свої власні методи взаємодії, а використовували готовий і універсальний фундамент.
Тому кожен новий токен ERC-20 автоматично отримує право взаємодіяти з сервісами та програмним забезпеченням, що відповідає стандарту ERC-20. До них відносяться різні криптовалютні програмні і апаратні гаманці, біржі та інші проекти.
Необхідно відзначити, що ERC-20 був незабаром замінений більш ефективним EIP-20. Але за пару років, що на це знадобились, розробники звикли до старого терміну, тому він став «загальновживаним», навіть не дивлячись на те, що більшість нових додатків використовують його доповнену і розширену версію.
Загальні принципи створення токенів на Ethereum
На відміну від ефіру, основи Ethereum, жетони ERC-20 не зберігається на рахунках акаунтів. Вони існують тільки всередині смарт-контракту, що грає роль автономної бази даних. Крім того, він визначає основні правила для них (назва, символ, подільність, інші особливості) і веде список, в якому баланс кожного користувача зіставляється з його адресою в Ethereum.
Щоб кудись свої токени перемістити, користувач зобов'язаний переслати запит на транзакцію в смарт-контракт. За своєю формою, це ідентично звичайному запиту, в якому на смарт-контракт вноситься 0 ETH, але з додатковим полем, в якому вказані додаткові дії. У нашому випадку - передачу жетонів новому власнику.
При цьому комісію все одно доведеться платити, оскільки тільки так можна домогтися включення транзакції в блок. А якщо ефіру немає, то і з токенами ERC-20 працювати не вийде.
Тепер спробуємо розібратися в структурі типового смарт-контракту ERC-20.
Що лежить в основі токенів ERC-20?
Для відповідності цьому стандарту, в контракті повинно бути прописано 6 основних функцій - totalSupply, balanceOf, transfer, transferFrom, approve і allowance. Також там можуть бути і інші - name, symbol, and decimal, але вони вже не такі важливі. Всі ці функції працюють в рамках мови програмування, що лежить в основі Ethereum.
totalSupply
function totalSupply () public view returns (uint256)
При виконанні видає на екран загальну кількість токенів, що міститься в смарт-контракті.
balanceOf
function balanceOf (address _owner) public view returns (uint256 balance)
Запитує конкретну адресу і видає баланс токенів на ній. Оскільки всі записи в Ethereum загальнодоступні, то ви можете подивитися баланс будь-якого користувача, якщо знаєте його адресу.
transfer
function transfer (address _to, uint256 _value) public returns (bool success)
Запитує адресу для перекладу і суму, потім - здійснює транзакцію. При виклику запускає «Event transfer», запис про який саме і необхідно додавати в блокчейн.
transferFrom
function transferFrom (address _from, address _to, uint256 _value) public returns (bool success)
Ефективна альтернатива transfer, яка забезпечує можливість налаштовувати процес, особливо - в рамках децентралізованих додатків. Теж використовується для переміщення токенів, але вони не обов'язково повинні належати людині, яка викликає цю функцію.
По суті, ви даєте смарт-контракту право переказувати кошти від вашого лиця. Наприклад, в рамках підписки на певні послуги, щоб кожного разу не вводити дані особисто. Також, як і при звичайному transfer, запис про цю подію повинний додаватися в блокчейн.
approve
function approve (address _spender, uint256 _value) public returns (bool success)
Вкрай корисна функція з точки зору програмування. З її допомогою ви можете обмежити кількість токенів, які смарт-контракт може вивести з вашого рахунку. Інакше підвищується ризик того, що через зловживання або технічну помилку ви втратите свої кошти.
Як приклад, візьмемо підписку на якусь послугу. Припустимо, у нас є велика кількість активу, наприклад, EXBASETOKENs, і ми хочемо організувати щотижневі регулярні платежі для якого-небудь додатка DAPP. І нам потрібно це якось автоматизувати, щоб не витрачати свій час на зайві дії.
Сума EXBASETOKENs на нашому рахунку значно перевищує вартість передплати. Тому ви запускаєте функцію APPROVE і задаєте обмеження. Припустимо, підписка коштує 1 жетон на тиждень, а ви вказали обмеження в 20 токенів. Тепер щотижня протягом 5 місяців з вас будуть регулярно списуватися кошти.
А якщо додаток DAPP почне діяти зловмисно або його буде зламано, то ви все одно не втратите більше 20 токенів. Це, звичайно, не ідеальний захист, але набагато краще, ніж нічого.
Виклик цієї функції, так само як і transfer, запускає подію, яку необхідно додати в блокчейн.
allowance
function allowance (address _owner, address _spender) public view returns (uint256 remaining)
Відмінно працює в поєднанні з approve. Якщо ви дали якомусь смарт-контракту право управляти частиною своїх токенів, то за допомогою цієї функції можна подивитися, скільки ще він зможе вивести. Беремо той же приклад. Ви дозволили списати 20 жетонів в рамках щотижневого платежу. Минуло 12 тижнів, ви про це згадали і вирішили подивитися, який ще резерв у вас залишився. Функція allowance повинна видати вам значення 8.
Додаткові можливості
Зазначені вище функції є обов'язковими, щоб відповідати стандарту ERC-20. З іншого боку, name, symbol і decimal обов'язковими не є, але дозволяють зробити смарт-контракт трохи красивіше і зручніше для сприйняття. Вони дають можливість додати ім'я, що добре зчитується, встановити символ (ETH, BTC чи інший) і вказати, скільки знаків після коми вказувати при реакції на запит. Це може бути важливо, оскільки жетони, які використовуються для швидкої оплати, можуть бути більш подільними ніж ті, що втілюють право власності на певне майно.
Що можна зробити за допомогою токенів ERC-20?
Об'єднавши всі перераховані раніше функції, ми отримуємо повноцінний контракт ERC-20. Ми може дізнатися загальну кількість активів, перевірити свій баланс, перевести кошти або дати дозвіл іншим децентралізованим додаткам керувати нашими токенами в певних заданих рамках.
Однак це ще не все. Розробники можуть впроваджувати свої функції і встановлювати додаткові параметри, виходячи зі своїх потреб. Це робить контракти ERC-20 ще більш гнучкими.
Стейблкоіни
Стейблкоіни - монети, прив'язані до різних фіатних валют, дуже часто використовують стандарт ERC-20. Особливо найбільш великі та відомі.
Виглядає це наступним чином. Типовий емітент фіатного стейблкоіна тримає в резерві певну суму в євро, доларах або іншій валюті. Потім - випускає еквівалентну кількість токенів. Так, наприклад, при наявності резерву в 10000 доларів, можна випустити 10000 доларових стейблкоінів.
В рамках Ethereum це дуже легко реалізувати. Досить просто запустити смарт-контракт з цією сумою, а потім - почати поширювати токени серед користувачів з обіцянкою, що ті зможуть в будь-який момент викупити з їх допомогою відповідної кількості фіатної валюти.
Як будуть користувачі розпоряджатися токенами - їхня особиста справа. Можуть платити за товари і послуги, а можуть і використовувати в рамках DAPPs. Або повернути їх емітенту з проханням обміняти. В такому випадку фіат з резервів переводиться на рахунок користувачів, а жетони - спалюються.
Все це працює за рахунок досить простих смарт-контрактів. Однак при цьому вимагає значної роботи з зовнішніми факторами - логістикою, дотриманням нормативних вимог та іншими речами, типовими для фіатної валюти.
Токени безпеки
Багато в чому нагадують стейблкоіни. Настільки, що смарт-контракти у них можуть бути ідентичними, оскільки функціонують вони однаково. Різниця починається на рівні емітента. Security tokens - це різні цінні папери, типу акцій, облігацій або прав власності на фізичні активи. Але в іншому, відмінностей практично не спостерігаються.
Службові токени
Мабуть, найбільш поширені на даний момент. На відміну від описаних вище, вони не підкріплені реальними активами. Якщо проводити аналогію, то стейблкоіни і Security tokens - це як акції великої авіакомпанії, а Utility tokens - особливі «пільгові» програми для часто літаючих пасажирів. У них є певна внутрішня функція, але зовнішньої цінності немає. Прикладом можуть служити численні внутрішньоігрові валюти, «паливо» для децентралізованих додатків, бали лояльності та багато чого ще. І все це відмінно поєднується зі смарт-контрактами.
Чи існує майнінг жетонів ERC-20?
Якщо коротко, то ні. Токени «карбуються» або випускаються в момент запуску смарт-контракту, виходячи з планів розробників і «дорожньої карти» проекту. А потім - розподіляються між інвесторами та користувачами.
Як правило, в рамках первинної пропозиції монет (ICO), Initial Exchange Offering - первинної пропозиції обміну (IEO) і пропозиції токенів безпеки (STO). На щастя, суть у цих методів дуже схожа. Інвестори відправляють ефір на смарт-контракти, а у відповідь отримують нові жетони. ETH йде на подальше фінансування і розвиток проекту, а що робити з отриманими токенами, користувачі вирішують самі. Найчастіше - перепродують їх за вищою ціною, якщо проект успішно розвивається.
Але цей розподіл не обов'язково має бути автоматичним. Деякі краудфандінгові проекти самі розподіляють жетони між інвесторами та користувачами, виходячи з їх активності і участі в розвитку ідеї.
Переваги і недоліки
Почнемо, мабуть, з переваг.
- Взаємозамінність. Всі одиниці взаємозамінні. Якщо у вас є токен EXBASETOKEN, то вам все одно, хто володів ним до вас. Вони в будь-якому випадку будуть ідентичні по функціональності - як золото або готівкові банкноти. За рахунок цього вдається досягти однакової цінності для всіх одиниць, що особливо корисно, якщо у жетона є потенціал розвинутися в подобу валюти.
- Адаптивність. Токени ERC-20 вкрай легко налаштовувати і адаптувати під різні потреби. Вони можуть легко використовуватися і в якості внутрішньо валюти, і в рамках програм лояльності, і у вигляді цифрових предметів для колекціонування, і у формі прав на володіння предметами мистецтва.
- Популярність. Особливо в криптовалютній індустрії. Безліч бірж, гаманців і смарт-контрактів за замовчуванням здатні працювати навіть з тільки що запущеними токенами, що помітно полегшує їх поширення. Крім того, в наявності відмінно пророблена документація і досвідчені розробники.
Але і недоліки теж присутні.
Масштабованість. Блокчейн Ethereum не застрахований від типових проблем, пов'язаних з ростом. Навіть зараз вони йому вже активно заважають. Спроба відправити транзакцію в піковий час чревата або тривалим очікуванням, або підвищенням плати. І все це безпосередньо стосується токенів ERC-20, які, як ми пам'ятаємо, зобов'язані відправляти в блокчейн інформацію про переклади. Втім, над цією проблемою активно працюють. І при переході на Ethereum 2.0, на думку співтовариства, з нею вийде впоратися.
Афери. Це, звичайно, не проблема технології, але не згадати про неї не можна. Той факт, що будь-хто може створити токен ERC-20, наобіцяти купу всього, отримати ефір в рамках ICO, а потім - зникнути в невідомому напрямку, дешо напружує. А можна ще згадати різні проекти на основі фінансових пірамід і схем Понці, які маскуються під класичні блокчейн-проекти. Так що перед інвестуванням краще провести власний аналіз ринку і зрозуміти, що саме перед вами - афера або реальна ідея.
ERC-20, ERC-1155, ERC-223, ERC-721 - в чому між ними різниця?
ERC-20 був першим і до сих пір є найпопулярнішим стандартом токенів блокчейну Ethereum. Але він далеко не єдиний. За роки розробок, з'явилися нові, що або удосконаляють його, або пропонують принципово нові цілі та підходи.
Деякі з таких стандартів використовуються в non-fungible tokens (NFTs) - незмінний токенах. Особливо вдало вони працюють в ситуаціях, коли необхідно токенізувати єдиний в своєму роді актив.
Приклад - стандарт ERC-721. Використовується в додатку CryptoKitties DApp, надає користувачам API для карбування власних токенів і кодування метаданих (зображення, опис і т.д)
Стандарт ERC-1155 - поліпшення одночасно і ERC-20, і ERC-721. Він дозволяє в одному і тому ж контракті описувати як взаємозамінні, так і невзаємозамінні одиниці.
ERC-223 і ERC-621 спрямовані на підвищення зручності використання. Перший додає запобіжні заходи проти випадкової передачі жетонів, другий - додаткові функції для збільшення або зменшення пропозиції токенів.
Висновок
Протягом довгих років стандарт ERC-20 домінував в світі криптовалют - і це цілком закономірно. Будь-який користувач, який хоч трохи розбирається в програмуванні, міг запустити власний смарт-контракт з широким спектром варіантів використання. Однак цей стандарт не ідеальний - у ньому не вистачає багатьох важливих функцій, інтегрованих в більш пізні за часом розробки. Але чи зможуть вони витіснити ERC-20? Поки що, у експертів немає єдиної думки на цей рахунок.