Понравились предыдущие части? Хотите узнать больше? Если вы только начинаете, моя электронная книга Программирование блокчейнов для абсолютных новичков станет отличным началом. Взгляните на его содержание 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