Вы здесь

Как написать простой токен-контракт на языке Solidity

Да, вы можете разработать и выпустить свою собственную торгуемую криптовалюту. Читайте дальше!

Как написать простой токен-контракт на языке Solidity

Согласно Ethereum.org:

Ethereum (Эфириум) – это децентрализованная платформа, которая эксплуатирует смарт контракты: приложения, работающие в точности так, как они были запрограммированы, без каких-либо вынужденных простоев, цензуры, мошенничества или вмешательства третьих сторон.
Эти приложения работают на базе специально разработанного блокчейна, чрезвычайно мощной распределенной глобальной инфраструктуры, которая способна двигать цены и обозначать принадлежность собственности.

Вы можете кодировать свои собственные цифровые токены, которые могут быть развернуты в сети Эфириум.

Ниже я привожу очень простой токен-контракт, для которого я использовал интерфейс IDE на базе веб-браузера Remix Ethereum.

Стандарты токенов

Родная валюта Эфириума называется «эфиром» (ETH). Тем не менее, каждый может создать уникальные токены, которые будут существовать и иметь силу в блокчейне Эфириума до тех пор, пока они соответствуют определенным минимальным стандартам. Стандарт Эфириума «Запрос на комментарии 20», или ERC-20, вероятно, является самым известным стандартом, который включает в себя правила, касающиеся интерфейса токена. Он дает возможность разработать базовый функционал для передачи токенов; помимо этого, стандарт позволяет согласовывать токены с целью их последующего использования другой третьей стороной в цепочке. Вы, возможно, также видели ERC-721, который относится к «невзаимозаменяемым» токенам (CryptoKitties является одним из примеров предметов коллекционирования, которые соответствовали стандарту ERC-721).

В рамках этого краткого пошагового руководства, в котором я сосредоточусь в основном на настройке базовой структуры моего токен-контракта, я не буду слишком много внимания уделять требованиям ERC. Однако, если вы заинтересованы в выпуске собственных токенов, я бы советовала вам копнуть глубже в многообразие предложений ERC! Документация по Solidity также очень полезна.

Вы можете ознакомиться с самым лучшими токен-контрактами на базе Эфириума (и изучить их код!) на https://etherscan.io/tokens.

Использование Remix для написания простого контракта

В этом разделе вы увидите фрагменты из очень простого контракта, который я выполнила в Remix, под названием «HolCoin» (отличное название, вы говорите?). Я добавила несколько комментариев о том, что должна делать каждая часть контракта. Начните свой контракт с pragma solidity и версии, которую вы хотели бы использовать. Дайте название контракту и определите его основные переменные.


Начало нового токен-контракта

Далее мы напишем конструктор, который позволит выполнить контракт.

Контракты могут быть созданы «извне» с помощью транзакций Ethereum или внутри контрактов на Solidity. При создании контракта его конструктор (объявленная функция с ключевым словом constructor) выполняется один раз.
Конструктор не является обязательным.

Это имеет смысл, ведь мы хотим выпустить общее предложение нашего HolCoin только один раз!

Теперь я могу настроить HolCoin, где в качестве владельца контракта будет стоять мой адрес, а также установить имя (HolCoin), символ (HOL) и общий объем предложения, скажем, 10 000.

Вы увидите, что я также добавила мэппинг (mapping), который может быть использован для получения сведений о балансе данного адреса (address). (Для простоты, вы можете рассматривать каждый адрес как другого пользователя, однако на самом деле важно отметить, что пользователь может иметь много адресов.) Это немного похоже на использование объекта Javascript. Или, если вы более знакомы с Ruby, мэппинг немного похож на хэш, где каждый именованный ключ – это символ, к которому вы можете получить доступ в хэше.


Создание мэппинга и конструктора контракта

Теперь, когда мы выбрали путь для создания предложения HolCoin, давайте продолжим и добавим некоторые простые функции, которые позволят внешним сторонам взаимодействовать с нашим смарт-контрактом.

Ниже приведены три функции:

  1. totalSupply (), не принимает аргументов и возвращает общее предложение HolCoin как uint256;
  2. balanceOf (адрес), вернет баланс монет как uint256 для данного адреса, используя мэппинг, который мы определили выше;
  3. transfer(address, uint256) будет передавать какое-то количество монет на данный адрес и строку return true до тех пор, пока у человека, вызывающего функцию (msg.sender), достаточно монет для отправки! Он также сообщит сети, что передача произошла, выпуская детали перевода.


Дальнейшие действия

Если я когда-нибудь захочу запустить реальный HolCoin в блокчейне Эфириума, мне нужно будет очистить существующий код и добавить некоторые функции для удовлетворения минимальных требований к токенам.

Например, что происходит, если у человека, вызывающего функцию передачи, нет достаточного количества монет для отправки? Я, вероятно, должна сообщить об этом человеку, запрашивающему перевод, и убедиться, что возвращается строка false return, когда передача не происходит.

Для безопасности я, вероятно, должна проводить больше проверок до и после отправки монет; например, я должна добавить проверку на наличие или отсутствие переполнений.

Я также не указала здесь десятичные дроби (decimals), т.е. на сколько «делимыми» я хочу, чтобы были мои токены HolCoin как uint8 от 0 до 18. Кроме того, я хотела бы иметь возможность уменьшить общее предложение токенов путем «сжигания» существующих токенов.

Чтобы проверить, насколько хорошо вы поняли материал, не могли бы вы выяснить, какие ключевые функции еще предстоит добавить? Подсказки:

  • transferFrom
  • approve
  • allowance

Если вы дошли до конца, я надеюсь, что эта базовая инструкция показалась вам полезной! Я буду следить за развитием смарт-контрактов на Solidity.

Категория: 
Tutorial
Технология: 
4
Ваша оценка: Нет Средняя: 4 (1 оценка)
27476 / 0
Аватар пользователя Serg Demin
Публикацию добавил: Serg Demin
Дата публикации: чт, 04/04/2019 - 10:07

Что еще почитать:

Комментарии:

Вставлять код картинками - это зло!

чт, 04/04/2019 - 12:15