Оригинальная статья
https://blockonomi.com/create-ethereum-token/Это наш второй урок по Solidity, если вы пропустили первый, найдите его на
https://blockonomi.com/category/education, где мы познакомим вас с некоторыми основами этого языка программирования для блокчейна Ethereum.
Мы немного объясним, как работает Solidity, как он структурирован, и начнем с простого кода для написания смарт контракта «Hello World».
В этом руководстве мы научим вас кодингу для развертывания собственного токена Ethereum ERC-20. (Вот наш Blockonomi Token ).
https://ropsten.etherscan.io/token/0xcaed5a2327083f55a29224f91576217ab19dfc0eЭфириум и Бум ICOICO означает «Первичное предложение монет», и это тип финансирования с использованием криптовалют. В ICO количество криптовалюты продается в форме «токенов» спекулянтам или инвесторам в обмен на фиатные валюты или другие криптовалюты, такие как Биткойн или Ethereum.
Проданные токены рекламируются как будущие функциональные единицы проекта, и если будет достигнута цель финансирования ICO - проект запускается.
Мы уже говорили о том, как смарт-контракты открыли для разработчиков новый мир и возможность создавать инновации. Однако этим разработчикам нужен был способ финансировать свои проекты.
И решение было ICO.
В 2017 году ICO были на подъеме - каждый день появлялось бесчисленное множество проектов с дикими обещаниями того, чего они хотели достичь, и инвесторы скупали их.
С тех пор все успокоилось, поскольку пространство созрело и инвесторы исчезли, многие ICO не смогли выполнить обещанное, но это история для другого поста - мы здесь, чтобы обсудить техническую сторону.
Что такое токен?Токены - это, по сути, смарт-контракты, которые живут на блокчейне Ethereum, они могут иметь различные виды использования и цели.
Токен не ограничен одной конкретной ролью. Он может выполнять много ролей в своей родной экосистеме. Вот список некоторых ролей, которые могут выполнять токены.
Toll: токен может работать как шлюз в Dapp. По сути, чтобы получить доступ к Dapp, вам нужно держать токены.
Voting Rights: Токены также могут предоставлять правообладателям определенные права голоса. Подумайте об EOS. Наличие токенов EOS позволит вам голосовать за валидаторов. EOS Blockchain стремится стать децентрализованной операционной системой, которая может поддерживать децентрализованные приложения промышленного масштаба.
Value Exchange: это одна из наиболее распространенных ролей токенов в экосистеме. Токены могут помочь создать внутреннюю экономическую систему в приложении.
User Experience Enhancement: токен может также позволить держателям получать профит пределах конкретной среды. Например в Brave (веб-браузер) владельцы bat (токенов, используемых в Brave) получат права на заработок, используя свои токены для добавления рекламы или других услуг на платформе Brave.
Currency: может использоваться в качестве накопления стоимости, который может использоваться для проведения транзакций как внутри, так и за пределами данной экосистемы.
Что такое ERC-20?ERC-20 - это технический стандарт, используемый для смарт контрактов в блокчейне Ethereum для реализации токенов. Большинство токенов, выпущенных на блокчейне Ethereum, соответствуют ERC-20.
ERC-20 - это стандарт протокола, который определяет определенные правила и стандарты для выдачи токенов в сети Ethereum. В "ERC-20" ERC обозначает Ethereum Request For Comments, а 20 обозначает уникальный идентификационный номер, чтобы отличать этот стандарт от других.
Проще говоря, ERC-20 - это руководство по правилам и положениям, которые помогут создать план для интеллектуальных контрактов на основе Ethereum для создания их токенов.
Токен в Ethereum - это просто смарт контракт, который следует некоторым общим правилам, а именно реализует стандартный набор функций, которые разделяют все остальные контракты токена, например, TransferFrom (address _from, address _to, uint256 _tokenId) и balanceOf (address _owner) ,
Таким образом, по сути токен - это просто контракт, который отслеживает, кому принадлежит какая часть этого токена, и некоторые функции, позволяющие этим пользователям передавать свои токены на другие адреса.
Почему ERC-20 Standard так важен?Поскольку все токены ERC-20 имеют один и тот же набор функций с одинаковыми именами, с ними можно взаимодействовать одинаково.
Это означает, что если вы создаете приложение, способное взаимодействовать с одним токеном ERC-20, оно также может взаимодействовать с любым токеном ERC-20. Таким образом, в будущем к вашему приложению можно будет легко добавить больше токенов без необходимости их индивидуальной кодировки. Вы можете просто подключить новый адрес контракта токена, и, у вашего приложения есть другой токен, который оно может использовать.
Одним из примеров этого будет биржа. Когда биржа добавляет новый токен ERC-20, на самом деле ей просто нужно добавить еще один смарт контракт, с которым она взаимодействует. Пользователи могут указать этот контракт на отправку токенов на адрес кошелька биржи, а биржа может сообщить контракту отправку токенов пользователям, когда они запрашивают вывод.
Бирже нужно только один раз реализовать эту логику передачи, а затем, когда она хочет добавить новый токен ERC-20, она просто добавляет новый адрес контракта в свою базу данных.
Давайте приступим к созданию токенаМы будем использовать Remix IDE для разработки Smart Contract для нашего токена ERC-20.
Remix - это онлайн-инструмент, который позволяет вам написать смарт контракт Solidity, затем развернуть его и запустить.
Просто зайдите на
https://remix.ethereum.org из вашего браузера, и мы сможем начать .
Нажмите кнопку Solidity, а затем кнопку Plus в левом верхнем углу.
Я назову его «BlockonomiToken», вы можете выбрать любое другое имя .
Хорошо, теперь все настроено.
Правила токена ERC-20Токены ERC-20 следуют списку правил, чтобы их можно было использовать совместно, обменять на другие токены или перенести на крипто-кошелек.
Стандарт ERC20 состоит из 3 необязательных правил и 6 обязательных правил.
Проще говоря, если вы включаете определенные функции в смарт-контракт токена, вы соответствуете требованиям ERC20. Если вы не включили обязательные функции, вы не являетесь токеном ERC20.
Обязательные правила следующие:
1.totalSupply
2.balanceOf
3.transfer
4.transferFrom
5.approve
6.allowance
С другой стороны, необязательные правила:
1.Token Name
2.Symbol
3.Decimal (до 18)
Обычная практика - определять эти правила в интерфейсе. В Solidity на самом деле нет так называемого интерфейса, это просто еще один Smart Contract. К счастью, Smart Contracts можно наследовать на языке программирования Solidity
Наследование в SolidityВ Solidity наследование очень похоже на классические ориентированные языки объектного программирования. Сначала вы напишите свой базовый контракт и скажете, что ваш новый контракт будет наследоваться от базового.
contract IBank {
// base contract code...
}
contract Bank is IBank {
// inherited contract code...
}
Вам также нужно знать, что Solidity поддерживает множественное наследование путем копирования кода, включая полиморфизм.
Все вызовы функций являются виртуальными, что означает, что вызывается самая производная функция, кроме случаев, когда имя контракта дается явно.
Когда контракт наследуется от нескольких контрактов, в цепочке блоков создается только один контракт, а код из всех базовых контрактов копируется в созданный контракт.
Давайте вернемся к нашему токену ERC-20. У нас есть обязательные правила для создания токена ERC-20.
Мы определим их как 6 функций и запишем в интерфейс. Тогда контракт нашего токена будет наследовать этот так называемый интерфейс.
Ваш код должен выглядеть следующим образом.
contract ERC20Interface {
function totalSupply()
public
view
returns (uint);
function balanceOf(address tokenOwner)
public
view
returns (uint balance);
function allowance
(address tokenOwner, address spender)
public
view
returns (uint remaining);
function transfer(address to, uint tokens) public
returns (bool success);
function approve(address spender, uint tokens) public
returns (bool success);
function transferFrom
(address from, address to, uint tokens) public
returns (bool success);
event Transfer(address indexed from, address indexed to, uint tokens);
event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}