Понравились предыдущие части? Хотите узнать больше? Если вы только начинаете, моя электронная книга Программирование блокчейнов для абсолютных новичков станет отличным началом. Взгляните на его содержание h ere!
Это последний учебник в серии смарт-контрактов с токенами. Если вы еще этого не сделали, ознакомьтесь с предыдущим руководством по созданию смарт-контракта с токенами! Это предварительное условие для этого.
В предыдущем уроке у нас был контракт StandardToken, реализующий все функции протокола ERC20Contract, а также вводящий некоторые необходимые переменные состояния. Сегодня мы построим окончательный контракт для нашего токена, который должен завершить код контракта токена.
Контракт LBDCoin
Теперь давайте создадим контракт LBDCoin. Это аббревиатура от L зарабатывать B y D oing - философия, в которую я верю, и название этой серии! Мы бы унаследовали от контракта StandardToken, поскольку все функции ERC20Contract там уже реализованы. Мы добавим только несколько дополнительных функций, таких как конструктор и резервная функция, вместе с функцией уведомления. Мы объясним эти концепции по ходу дела.
Вот код контракта LBDCoin.
interface tokenRecipient { function receiveApproval(address from, uint256 tokens, address tokenAddress, bytes extraData); } contract LBDCoin is StandardToken { string public name; string public symbol; uint8 public decimals = 18; // Default, recommend not to change function LBDCoin(uint256 initialSupply, string tokenName, string tokenSymbol) { name = tokenName; symbol = tokenSymbol; totalSupply = initialSupply * 10 ** decimals; balances[msg.sender] = totalSupply; } function approveAndCall(address spenderAddress, uint256 tokens, bytes extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(spenderAddress); if(approve(spenderAddress, tokens) { spender.receiveApproval(msg.sender, tokens, this, extraData); // Called in the spender address contract } } }
Унаследовав от контракта StandardToken, мы унаследовали все функции, которые мы ранее реализовали в коде контракта StandardToken. Остались только конструктор и функция ApproveAndCall.
Это может показаться намного более сложным для восприятия, но поверьте мне, это легко. Давайте рассмотрим это шаг за шагом. Во-первых, интерфейс.
TokenRecipient
Почему нам пришлось включить интерфейс tokenRecipient в код здесь? Мы делаем это, потому что хотим вызвать предоставленную функцию - receiveApproval для экземпляра этого типа. Мы заранее сообщаем об этом коду, объявляя интерфейс.
Конструктор
В конструкторе мы передаем значения переменных, специфичные для этой монеты, имя, символ и intialSupply монет. Общее количество монет довольно простое. Это указано в следующем фрагменте кода.
totalSupply = initialSupply * 10 ** decimals;
Возьмем пример. Если изначально у вас есть 1 монета и количество десятичных знаков, скажем, 2, у вас будет монет 0.xx, где x находится в диапазоне от 0 до 9. Общее количество монет = initialSupply * (10 ^ decimalPlaces) = 1 * 10² = 100 . Более того, установив
balances[msg.sender] = totalSupply;
в конструкторе мы изначально передаем всю нашу totalSupply на адрес создателя контракта. Позже мы можем рассылать его по разным адресам по своему усмотрению.
ApproveAndCall
Функция утверждения и вызова - это то, что вызывается, когда вызывающий объект этой функции [msg.sender] хочет авторизовать spenderAddress [переданный как параметр], чтобы потратить определенное количество токенов от своего имени. Если утверждение прошло успешно, в контракте spenderAddress вызывается метод receiveApproval. Эта функция добавлена в контракты по умолчанию, поэтому вам не нужно ее реализовывать. В поле extraData вы можете передавать любые данные, которые вам нравятся. Например, причина, по которой спонсору было разрешено потратить определенную сумму, если есть несколько причин для одобрения. Более подробную информацию о безопасности вокруг этой функции можно найти здесь.
Заключение
Вот и все! Это ваш монетный контракт! В следующем (щелкните) учебник мы узнаем о том, что такое GAS, какова цена GAS и как развернуть свой контракт в Ethereum TestNet, а также в Mainnet (оба из которых будут объяснены в руководстве). Следите за обновлениями и не забывайте делиться, комментировать и подписываться!
Оставаться в курсе
Присоединяйтесь к нам в Telegram: https://t.me/joinchat/G4Ls4hLyjTLLNke_3QGygQ
Присоединяйтесь к рассылке электронных книг! : Https://goo.gl/FtRCuX
Пожертвования
Если вам понравился этот урок, и вы хотели бы помочь мне продолжить их создание в будущем, не стесняйтесь сбросить немного ETH по указанному ниже адресу!
ETH: 0xE11aaAB8c3a6feD2843e66FaC08C13Cda8Cb0D55