Как написать и развернуть свой первый смарт-контракт

1656617776 kak napisat i razvernut svoj pervyj smart kontrakt

автор Авадхут Кулькарни

1*ZnxSoYqZH9IOH3G5WUposA

С тех пор как Ethereum украсило криптопространство своим присутствием в середине 2015 года, революционное изобретение канадско-российского программиста Виталика Бутерина породило много новых децентрализованных приложений (dApps). Наряду со множеством созданных dApps успех Ethereum в основном объясняется внедрением смарт-контрактов.

Интересно, что изобретение разумных контрактов датируется 1996 годом. Компьютерный ученый Ник Сабо разработал термин «умные контракты» и объясняет их следующим образом:

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

– Ник Сабо, 1996

Позже его работа вдохновила многих других исследователей и ученых, включая создавшего Ethereum Виталика.

Основная информация

Прежде чем углубиться в руководство, важно понять два важных понятия.

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

Второе понятие, которое нам нужно понять, это то, что есть газ. В EVM газ это единица измерения, которая используется для назначения комиссии за каждую транзакцию с помощью смарт-контракта. Каждое вычисление, происходящее в EVM, требует газа. Чем он сложнее и скучнее, тем больше газа нужно для выполнения смарт-контракта.

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

Fee for transaction = Total gas used * gas price;

Подробнее о газе читайте здесь.

Теперь, когда у вас есть базовые знания о том, что такое смарт-контракт и как он работает, мы можем перейти к тому, как мы собираемся создать наш собственный смарт-контракт!

Настраивая

Мы собираемся использовать для этого инструмент: Pragma. Это простая в использовании платформа для создания и развертывания смарт-контрактов. Зарегистрируйтесь здесь и перейдите к редактору:

1*eyY1_mE0Kw250gdZ0B0AOg

Войдите в Metamask. Если вы еще не установили MetaMask, вы можете начать здесь.

Перейдите на тестовую сеть Kovan как в Pragma, так и в MetaMask.
Чтобы предоставить вам краткий обзор тестовых сетей, просмотрите статью.

1*X-yIFMaU0inr5_32wo6d9w

Основная сеть Ethereum является официальной сетью Ethereum. Он более безопасен и использует эфир, имеющий реальную денежную стоимость.

Тестовые сети – это игровые сети Ethereum, где эфир не имеет денежной стоимости. Разработчики используют эти игровые площадки для тестирования программ перед развертыванием их в сеть для своих пользователей.

Чтобы переключиться между этими сетями, щелкните имя сети рядом с значком MetaMask и выберите сеть. Выберите для этого учебника Кован.

Написание смарт-контракта

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

pragma solidity ^0.4.21; //tells that the source code is written for Solidity version 0.4.21 or anything newer that does not break functionality


contract yourToken {
    // The keyword "public" makes those variables readable from outside.
    
    address public minter;
    
    // Events allow light clients to react on changes efficiently.
    mapping (address => uint) public balances;
    
    // This is the constructor whose code is run only when the contract is created
    event Sent(address from, address to, uint amount);
    
    function yourToken() public {
        
        minter = msg.sender;
        
    }
    
    function mint(address receiver, uint amount) public {
        
        if(msg.sender != minter) return;
        balances[receiver]+=amount;
        
    }
    
    function send(address receiver, uint amount) public {
        if(balances[msg.sender] < amount) return;
        balances[msg.sender]-=amount;
        balances[receiver]+=amount;
        emit Sent(msg.sender, receiver, amount);
        
    }
    
    
}
yourToken

Этот код в основном позволяет чеканить и передавать токены на другие учетные записи.

Давайте пройдем его строку за строкой:

pragma solidity ^0.4.21;

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

contract yourToken

Все, что касается вашего токена, входит в этот договор. По сути, надежный контракт – это набор функций и состояния (код и данные), находящихся по адресу в блокчейне Ethereum.

address public minter;

Это адрес монетного двора. Ключевое слово «public» делает эти переменные доступными для чтения извне.

event Sent(address from, address to, uint amount);

События позволяют легким клиентам (UI) эффективно реагировать на изменения.

function yourToken() public {
  minter = msg.sender;
}

Давайте установим ваш адрес Ethereum в качестве монетаря контракта. Вам нужно будет получить доступ к контракту через вашу MetaMask, чтобы иметь возможность чеканить. Мы повторим это снова после развертывания контракта.

function mint(address receiver, uint amount) public {
  if(msg.sender != minter) return;
  balances[receiver]+=amount;
}

Эта функция позволяет чеканить необходимое количество монет. Вы можете чеканить сколько угодно жетонов. Условие if сообщает системе остановить исполнение, если вы не являетесь минтером, установленным в функции yourToken.

Если вы действительно монетарщик, это позволяет чеканить токены.

function send(address receiver, uint amount) public {
  if(balances[msg.sender] < amount) return;
  balances[msg.sender]-=amount;
  balances[receiver]+=amount;
  emit Sent(msg.sender, receiver, amount);
}

Это функция, позволяющая с одного адреса отправлять токены на другой адрес. Он принимает два параметра: получатель и сумму. Он уменьшает сумму с адреса отправителя и добавляет ту же сумму в адрес получателя. Событие Sent, которое мы объявили ранее, теперь используется для передачи. Мы оставили отправителя как msg.sender, который является минтером, поскольку мы не хотим усложнять контракт.

Это оно. Ваш договор готов, так что давайте его составим.

Составление и развертывание смарт-контракта

1*FAUfzAPntHXqVNR5rpy3Yw

После того как контракт будет составлен, давайте развернем его на блокчейне. Как уже упоминалось ранее, мы будем использовать тестовую сеть Kovan для развертывания контракта.

1*5OA2_s3vB2LP21UBkjaNSg
1*Ne5LsQuTlRr3sl5iFqB1Ng
1*G0PBdUtSixgVxrxIJNOG9g

Убедитесь, что смарт-контракт развернут.

Для контракта, который я развернул для этого учебника, это транзакция. Вы также можете увидеть это в Pragma по вашим контрактам.

1*Vtsp6UMTFbCgJAs8mGzrwg

Взаимодействие со смарт-контрактом в Pragma

1*Vtsp6UMTFbCgJAs8mGzrwg
1*Py8LRkKzZblALzT_hCHI3g
1*NVpHZwOZN0-8lzwpW1tm5A
Давайте отчеканить 1000000 жетонов!
1*QJRNPSNpnvYa9LX02WB-6g
Подписание соглашения
1*pEs1g4LSvT9ufNv_ki9Big
Ура!

Вот это вам. Ваш первый разумный контракт, развернутый на блокчейне. 🙂

Было представлено множество новых концепций вместе с парой удивительно полезных инструментов. Это может быть немного потрясающе, и это нормально! Просто попытайтесь разобраться в концепциях, а затем бегайте с этим.

Вы создали какие-нибудь простые, но интересные смарт-контракты? Опубликуйте их в комментариях, и я добавлю их в справочный пост.

Есть вопросы? Добавляйте их в комментариях или присоединяйтесь к нашей группе в Telegram и общайтесь с нами напрямую.

Добавить комментарий

Ваш адрес email не будет опубликован.